From ad67d2787d2c113c8dff8757cb96c8d36777fa8d Mon Sep 17 00:00:00 2001 From: Henrique Gemignani Passos Lima Date: Mon, 17 Oct 2022 21:17:46 +0300 Subject: [PATCH] Match and link CScriptTargetingPoint Former-commit-id: 061bf00af679f87bfdf3a0a2ce5e3c45f1be62cc --- .../ScriptObjects/CScriptTargetingPoint.s | 12 +++--- configure.py | 2 +- .../ScriptObjects/CScriptTargetingPoint.hpp | 29 ++++++++++++++ obj_files.mk | 2 +- .../ScriptObjects/CScriptTargetingPoint.cpp | 40 +++++++++++++++++++ 5 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 include/MetroidPrime/ScriptObjects/CScriptTargetingPoint.hpp create mode 100644 src/MetroidPrime/ScriptObjects/CScriptTargetingPoint.cpp diff --git a/asm/MetroidPrime/ScriptObjects/CScriptTargetingPoint.s b/asm/MetroidPrime/ScriptObjects/CScriptTargetingPoint.s index 33f6a252..41439a08 100644 --- a/asm/MetroidPrime/ScriptObjects/CScriptTargetingPoint.s +++ b/asm/MetroidPrime/ScriptObjects/CScriptTargetingPoint.s @@ -3,8 +3,8 @@ .section .data .balign 8 -.global lbl_803E4330 -lbl_803E4330: +.global __vt__21CScriptTargetingPoint +__vt__21CScriptTargetingPoint: # ROM: 0x3E1330 .4byte 0 .4byte 0 @@ -57,9 +57,9 @@ __dt__21CScriptTargetingPointFv: /* 8018D278 0018A1D8 93 C1 00 08 */ stw r30, 8(r1) /* 8018D27C 0018A1DC 7C 7E 1B 79 */ or. r30, r3, r3 /* 8018D280 0018A1E0 41 82 00 28 */ beq lbl_8018D2A8 -/* 8018D284 0018A1E4 3C A0 80 3E */ lis r5, lbl_803E4330@ha +/* 8018D284 0018A1E4 3C A0 80 3E */ lis r5, __vt__21CScriptTargetingPoint@ha /* 8018D288 0018A1E8 38 80 00 00 */ li r4, 0 -/* 8018D28C 0018A1EC 38 05 43 30 */ addi r0, r5, lbl_803E4330@l +/* 8018D28C 0018A1EC 38 05 43 30 */ addi r0, r5, __vt__21CScriptTargetingPoint@l /* 8018D290 0018A1F0 90 1E 00 00 */ stw r0, 0(r30) /* 8018D294 0018A1F4 4B EC 84 5D */ bl __dt__6CActorFv /* 8018D298 0018A1F8 7F E0 07 35 */ extsh. r0, r31 @@ -206,9 +206,9 @@ Accept__21CScriptTargetingPointFR8IVisitor: /* 8018D46C 0018A3CC 38 61 00 88 */ addi r3, r1, 0x88 /* 8018D470 0018A3D0 38 80 FF FF */ li r4, -1 /* 8018D474 0018A3D4 4B F8 95 D9 */ bl __dt__10CModelDataFv -/* 8018D478 0018A3D8 3C 60 80 3E */ lis r3, lbl_803E4330@ha +/* 8018D478 0018A3D8 3C 60 80 3E */ lis r3, __vt__21CScriptTargetingPoint@ha /* 8018D47C 0018A3DC 38 80 00 00 */ li r4, 0 -/* 8018D480 0018A3E0 38 03 43 30 */ addi r0, r3, lbl_803E4330@l +/* 8018D480 0018A3E0 38 03 43 30 */ addi r0, r3, __vt__21CScriptTargetingPoint@l /* 8018D484 0018A3E4 C0 02 A4 60 */ lfs f0, lbl_805AC180@sda21(r2) /* 8018D488 0018A3E8 90 1F 00 00 */ stw r0, 0(r31) /* 8018D48C 0018A3EC 7F E3 FB 78 */ mr r3, r31 diff --git a/configure.py b/configure.py index 22fb33d5..38233a34 100755 --- a/configure.py +++ b/configure.py @@ -245,7 +245,7 @@ LIBS = [ "MetroidPrime/CGroundMovement", "MetroidPrime/Enemies/CNewIntroBoss", "MetroidPrime/Weapons/CPhazonBeam", - "MetroidPrime/ScriptObjects/CScriptTargetingPoint", + ["MetroidPrime/ScriptObjects/CScriptTargetingPoint", True], "MetroidPrime/BodyState/CBSWallHang", "MetroidPrime/ScriptObjects/CScriptEMPulse", "MetroidPrime/HUD/CHudDecoInterface", diff --git a/include/MetroidPrime/ScriptObjects/CScriptTargetingPoint.hpp b/include/MetroidPrime/ScriptObjects/CScriptTargetingPoint.hpp new file mode 100644 index 00000000..5b01e8fe --- /dev/null +++ b/include/MetroidPrime/ScriptObjects/CScriptTargetingPoint.hpp @@ -0,0 +1,29 @@ +#ifndef _CSCRIPTTARGETINGPOINT +#define _CSCRIPTTARGETINGPOINT + +#include "MetroidPrime/CActor.hpp" + +#include "Kyoto/Math/CTransform4f.hpp" + +class CScriptTargetingPoint : public CActor { + bool xe8_e4_ : 1; + TUniqueId xea_; + float xec_time; + +public: + CScriptTargetingPoint(TUniqueId, const rstl::string&, const CEntityInfo&, const CTransform4f&, + bool); + ~CScriptTargetingPoint(); + + void Accept(IVisitor& visitor) override; + void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&) override; + + bool GetLocked() const; + void Think(float, CStateManager&) override; + + void AddToRenderer(const CFrustumPlanes&, const CStateManager&) const override; + void Render(const CStateManager&) const override; + +}; + +#endif // _CSCRIPTTARGETINGPOINT diff --git a/obj_files.mk b/obj_files.mk index d3df1924..a8a45833 100644 --- a/obj_files.mk +++ b/obj_files.mk @@ -212,7 +212,7 @@ METROIDPRIME :=\ $(BUILD_DIR)/asm/MetroidPrime/CGroundMovement.o\ $(BUILD_DIR)/asm/MetroidPrime/Enemies/CNewIntroBoss.o\ $(BUILD_DIR)/asm/MetroidPrime/Weapons/CPhazonBeam.o\ - $(BUILD_DIR)/asm/MetroidPrime/ScriptObjects/CScriptTargetingPoint.o\ + $(BUILD_DIR)/src/MetroidPrime/ScriptObjects/CScriptTargetingPoint.o\ $(BUILD_DIR)/asm/MetroidPrime/BodyState/CBSWallHang.o\ $(BUILD_DIR)/asm/MetroidPrime/ScriptObjects/CScriptEMPulse.o\ $(BUILD_DIR)/asm/MetroidPrime/HUD/CHudDecoInterface.o\ diff --git a/src/MetroidPrime/ScriptObjects/CScriptTargetingPoint.cpp b/src/MetroidPrime/ScriptObjects/CScriptTargetingPoint.cpp new file mode 100644 index 00000000..4e9094a4 --- /dev/null +++ b/src/MetroidPrime/ScriptObjects/CScriptTargetingPoint.cpp @@ -0,0 +1,40 @@ +#include "MetroidPrime/ScriptObjects/CScriptTargetingPoint.hpp" + +#include "MetroidPrime/CActorParameters.hpp" + +CScriptTargetingPoint::CScriptTargetingPoint(TUniqueId uid, const rstl::string& name, + const CEntityInfo& info, const CTransform4f& xf, + bool active) +: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(kMT_NoStepLogic), + CActorParameters::None(), kInvalidUniqueId) +, xe8_e4_(false) +, xea_(kInvalidUniqueId) +, xec_time(0.f) {} + +void CScriptTargetingPoint::Accept(IVisitor& visitor) { visitor.Visit(*this); } + +void CScriptTargetingPoint::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) { + CActor::AcceptScriptMsg(msg, uid, mgr); + + switch (msg) { + case kSM_Deactivate: + case kSM_Activate: + CEntity::SendScriptMsgs(kSS_Attack, mgr, kSM_None); + } +} + +bool CScriptTargetingPoint::GetLocked() const { + return x20_conns.size() > 0; +} + +void CScriptTargetingPoint::Think(float dt, CStateManager&) { + if (xec_time > 0.f) { + xec_time -= dt; + } +} + +void CScriptTargetingPoint::AddToRenderer(const CFrustumPlanes&, const CStateManager&) const {} + +void CScriptTargetingPoint::Render(const CStateManager&) const {} + +CScriptTargetingPoint::~CScriptTargetingPoint() {}