From 44d09fd5ead35e7194f6c914ab79db749e5ca0d4 Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Thu, 8 Dec 2022 14:05:14 -0800 Subject: [PATCH] Match and link CScriptControllerAction Former-commit-id: d977d443ee3c54036f2d86b3cbd9cbcfac1519af --- asm/MetroidPrime/ScriptLoader.s | 2 +- .../ScriptObjects/CScriptControllerAction.s | 10 +-- configure.py | 2 +- .../ScriptObjects/CScriptControllerAction.hpp | 77 ++++++++++++++++++- .../ScriptObjects/CScriptControllerAction.cpp | 13 ++-- 5 files changed, 86 insertions(+), 18 deletions(-) diff --git a/asm/MetroidPrime/ScriptLoader.s b/asm/MetroidPrime/ScriptLoader.s index 86b33574..198f45d2 100644 --- a/asm/MetroidPrime/ScriptLoader.s +++ b/asm/MetroidPrime/ScriptLoader.s @@ -8482,7 +8482,7 @@ lbl_800CCC24: /* 800CCC7C 000C9BDC 93 A1 00 08 */ stw r29, 8(r1) /* 800CCC80 000C9BE0 38 81 00 14 */ addi r4, r1, 0x14 /* 800CCC84 000C9BE4 38 A1 00 18 */ addi r5, r1, 0x18 -/* 800CCC88 000C9BE8 48 10 C2 55 */ bl "__ct__23CScriptControllerActionF9TUniqueIdRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RC11CEntityInfobQ213ControlMapper9ECommandsbUib" +/* 800CCC88 000C9BE8 48 10 C2 55 */ bl "__ct__23CScriptControllerActionF9TUniqueIdRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RC11CEntityInfobQ223CScriptControllerAction9ECommandsbUib" /* 800CCC8C 000C9BEC 7C 78 1B 78 */ mr r24, r3 lbl_800CCC90: /* 800CCC90 000C9BF0 38 61 00 18 */ addi r3, r1, 0x18 diff --git a/asm/MetroidPrime/ScriptObjects/CScriptControllerAction.s b/asm/MetroidPrime/ScriptObjects/CScriptControllerAction.s index 22122ff6..880c6ab1 100644 --- a/asm/MetroidPrime/ScriptObjects/CScriptControllerAction.s +++ b/asm/MetroidPrime/ScriptObjects/CScriptControllerAction.s @@ -45,8 +45,8 @@ lbl_801D8D38: /* 801D8D4C 001D5CAC 38 21 00 10 */ addi r1, r1, 0x10 /* 801D8D50 001D5CB0 4E 80 00 20 */ blr -.global nullsub_51 -nullsub_51: +.global GetCommand__23CScriptControllerActionFQ223CScriptControllerAction9ECommands +GetCommand__23CScriptControllerActionFQ223CScriptControllerAction9ECommands: /* 801D8D54 001D5CB4 4E 80 00 20 */ blr .global Think__23CScriptControllerActionFfR13CStateManager @@ -82,7 +82,7 @@ lbl_801D8DB4: /* 801D8DC0 001D5D20 48 00 00 40 */ b lbl_801D8E00 lbl_801D8DC4: /* 801D8DC4 001D5D24 80 7D 00 34 */ lwz r3, 0x34(r29) -/* 801D8DC8 001D5D28 4B FF FF 8D */ bl nullsub_51 +/* 801D8DC8 001D5D28 4B FF FF 8D */ bl GetCommand__23CScriptControllerActionFQ223CScriptControllerAction9ECommands /* 801D8DCC 001D5D2C 38 9E 0B 54 */ addi r4, r30, 0xb54 /* 801D8DD0 001D5D30 4B E3 3A A5 */ bl GetDigitalInput__13ControlMapperFQ213ControlMapper9ECommandsRC11CFinalInput /* 801D8DD4 001D5D34 54 60 06 3F */ clrlwi. r0, r3, 0x18 @@ -159,8 +159,8 @@ Accept__23CScriptControllerActionFR8IVisitor: /* 801D8ED4 001D5E34 38 21 00 10 */ addi r1, r1, 0x10 /* 801D8ED8 001D5E38 4E 80 00 20 */ blr -.global "__ct__23CScriptControllerActionF9TUniqueIdRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RC11CEntityInfobQ213ControlMapper9ECommandsbUib" -"__ct__23CScriptControllerActionF9TUniqueIdRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RC11CEntityInfobQ213ControlMapper9ECommandsbUib": +.global "__ct__23CScriptControllerActionF9TUniqueIdRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RC11CEntityInfobQ223CScriptControllerAction9ECommandsbUib" +"__ct__23CScriptControllerActionF9TUniqueIdRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RC11CEntityInfobQ223CScriptControllerAction9ECommandsbUib": /* 801D8EDC 001D5E3C 94 21 FF D0 */ stwu r1, -0x30(r1) /* 801D8EE0 001D5E40 7C 08 02 A6 */ mflr r0 /* 801D8EE4 001D5E44 90 01 00 34 */ stw r0, 0x34(r1) diff --git a/configure.py b/configure.py index 42b90aab..351241e8 100755 --- a/configure.py +++ b/configure.py @@ -266,7 +266,7 @@ LIBS = [ ["MetroidPrime/ScriptObjects/CScriptWorldTeleporter", False], ["MetroidPrime/ScriptObjects/CScriptVisorGoo", False], "MetroidPrime/Enemies/CJellyZap", - ["MetroidPrime/ScriptObjects/CScriptControllerAction", False], + ["MetroidPrime/ScriptObjects/CScriptControllerAction", True], ["MetroidPrime/Weapons/GunController/CGunMotion", False], ["MetroidPrime/ScriptObjects/CScriptSwitch", True], ["MetroidPrime/BodyState/CABSIdle", True], diff --git a/include/MetroidPrime/ScriptObjects/CScriptControllerAction.hpp b/include/MetroidPrime/ScriptObjects/CScriptControllerAction.hpp index eac16cc6..a7cb8cbe 100644 --- a/include/MetroidPrime/ScriptObjects/CScriptControllerAction.hpp +++ b/include/MetroidPrime/ScriptObjects/CScriptControllerAction.hpp @@ -6,19 +6,88 @@ #include "MetroidPrime/CControlMapper.hpp" class CScriptControllerAction : public CEntity { - ControlMapper::ECommands x34_command; + enum ECommands { + kC_Forward, + kC_Backward, + kC_TurnLeft, + kC_TurnRight, + kC_StrafeLeft, + kC_StrafeRight, + kC_LookLeft, + kC_LookRight, + kC_LookUp, + kC_LookDown, + kC_JumpOrBoost = 10, + kC_FireOrBomb = 11, + kC_MissileOrPowerBomb = 12, + kC_Morph, + kC_AimUp, + kC_AimDown, + kC_CycleBeamUp, + kC_CycleBeamDown, + kC_CycleItem, + kC_PowerBeam, + kC_IceBeam, + kC_WaveBeam, + kC_PlasmaBeam, + kC_ToggleHolster = 23, + kC_OrbitClose, + kC_OrbitFar, + kC_OrbitObject, + kC_OrbitSelect, + kC_OrbitConfirm, + kC_OrbitLeft, + kC_OrbitRight, + kC_OrbitUp, + kC_OrbitDown, + kC_LookHold1, + kC_LookHold2, + kC_LookZoomIn, + kC_LookZoomOut, + kC_AimHold, + kC_MapCircleUp, + kC_MapCircleDown, + kC_MapCircleLeft, + kC_MapCircleRight, + kC_MapMoveForward, + kC_MapMoveBack, + kC_MapMoveLeft, + kC_MapMoveRight, + kC_MapZoomIn, + kC_MapZoomOut, + kC_SpiderBall, + kC_ChaseCamera, + kC_XrayVisor = 50, + kC_ThermoVisor = 51, + kC_EnviroVisor = 52, + kC_NoVisor = 53, + kC_VisorMenu, + kC_VisorUp, + kC_VisorDown, + kC_ShowCrosshairs, + kC_UseShield = 0x3B, + kC_ScanItem = 0x3C, + kC_PreviousPauseScreen = 0x41, + kC_NextPauseScreen = 0x42, + kC_UNKNOWN, + kC_None, + kC_MAX + }; + + ECommands x34_command; uint x38_mapScreenSubaction; - bool x3c_24_mapScreenResponse : 1; + uchar x3c_24_mapScreenResponse : 1; bool x3c_25_deactivateOnClose : 1; bool x3c_26_pressed : 1; public: CScriptControllerAction(TUniqueId uid, const rstl::string& name, const CEntityInfo& info, - bool active, ControlMapper::ECommands command, bool b1, uint w1, bool b2); - ~CScriptControllerAction(); + bool active, ECommands command, bool b1, uint w1, bool b2); void Accept(IVisitor& visitor) override; void Think(float, CStateManager&) override; + + static ControlMapper::ECommands GetCommand(ECommands cmd); }; #endif // _CSCRIPTCONTROLLERACTION diff --git a/src/MetroidPrime/ScriptObjects/CScriptControllerAction.cpp b/src/MetroidPrime/ScriptObjects/CScriptControllerAction.cpp index cedfbd17..23fde566 100644 --- a/src/MetroidPrime/ScriptObjects/CScriptControllerAction.cpp +++ b/src/MetroidPrime/ScriptObjects/CScriptControllerAction.cpp @@ -2,11 +2,9 @@ #include "MetroidPrime/CStateManager.hpp" -extern "C" ControlMapper::ECommands nullsub_51(float, ControlMapper::ECommands); - CScriptControllerAction::CScriptControllerAction(TUniqueId uid, const rstl::string& name, const CEntityInfo& info, bool active, - ControlMapper::ECommands command, + ECommands command, bool mapScreenResponse, uint w1, bool deactivateOnClose) : CEntity(uid, info, active, name) @@ -33,7 +31,7 @@ void CScriptControllerAction::Think(float dt, CStateManager& stateMgr) { break; } } else { - if (ControlMapper::GetDigitalInput(nullsub_51(dt, x34_command), stateMgr.GetFinalInput())) { + if (ControlMapper::GetDigitalInput(GetCommand(x34_command), stateMgr.GetFinalInput())) { x3c_26_pressed = true; } else { x3c_26_pressed = false; @@ -53,6 +51,7 @@ void CScriptControllerAction::Think(float dt, CStateManager& stateMgr) { } } -extern "C" ControlMapper::ECommands nullsub_51(float, ControlMapper::ECommands c) { return c; } - -CScriptControllerAction::~CScriptControllerAction() {} +ControlMapper::ECommands +CScriptControllerAction::GetCommand(CScriptControllerAction::ECommands c) { + return (ControlMapper::ECommands)(c); +}