Match and link CABSIdle

This commit is contained in:
Henrique Gemignani Passos Lima 2022-10-14 11:46:50 +03:00
parent 1f5290572d
commit c4045da4b3
No known key found for this signature in database
GPG Key ID: E224F951761145F8
12 changed files with 142 additions and 35 deletions

View File

@ -53,8 +53,8 @@ __dt__7CABSAimFv:
/* 801D9D34 001D6C94 38 03 5C A0 */ addi r0, r3, lbl_803E5CA0@l
/* 801D9D38 001D6C98 90 1F 00 00 */ stw r0, 0(r31)
/* 801D9D3C 001D6C9C 41 82 00 10 */ beq lbl_801D9D4C
/* 801D9D40 001D6CA0 3C 60 80 3E */ lis r3, lbl_803E1350@ha
/* 801D9D44 001D6CA4 38 03 13 50 */ addi r0, r3, lbl_803E1350@l
/* 801D9D40 001D6CA0 3C 60 80 3E */ lis r3, __vt__18CAdditiveBodyState@ha
/* 801D9D44 001D6CA4 38 03 13 50 */ addi r0, r3, __vt__18CAdditiveBodyState@l
/* 801D9D48 001D6CA8 90 1F 00 00 */ stw r0, 0(r31)
lbl_801D9D4C:
/* 801D9D4C 001D6CAC 7C 80 07 35 */ extsh. r0, r4
@ -559,9 +559,9 @@ lbl_801DA44C:
.global __ct__7CABSAimFv
__ct__7CABSAimFv:
/* 801DA468 001D73C8 3C A0 80 3E */ lis r5, lbl_803E1350@ha
/* 801DA468 001D73C8 3C A0 80 3E */ lis r5, __vt__18CAdditiveBodyState@ha
/* 801DA46C 001D73CC 3C 80 80 3E */ lis r4, lbl_803E5CA0@ha
/* 801DA470 001D73D0 38 A5 13 50 */ addi r5, r5, lbl_803E1350@l
/* 801DA470 001D73D0 38 A5 13 50 */ addi r5, r5, __vt__18CAdditiveBodyState@l
/* 801DA474 001D73D4 38 00 00 00 */ li r0, 0
/* 801DA478 001D73D8 90 A3 00 00 */ stw r5, 0(r3)
/* 801DA47C 001D73DC 38 84 5C A0 */ addi r4, r4, lbl_803E5CA0@l
@ -605,4 +605,3 @@ lbl_805AC9E0:
lbl_805AC9E4:
# ROM: 0x3F9284
.float 0.017453292

View File

@ -29,8 +29,8 @@ __dt__10CABSFlinchFv:
/* 801D9A50 001D69B0 38 03 5C 80 */ addi r0, r3, lbl_803E5C80@l
/* 801D9A54 001D69B4 90 1F 00 00 */ stw r0, 0(r31)
/* 801D9A58 001D69B8 41 82 00 10 */ beq lbl_801D9A68
/* 801D9A5C 001D69BC 3C 60 80 3E */ lis r3, lbl_803E1350@ha
/* 801D9A60 001D69C0 38 03 13 50 */ addi r0, r3, lbl_803E1350@l
/* 801D9A5C 001D69BC 3C 60 80 3E */ lis r3, __vt__18CAdditiveBodyState@ha
/* 801D9A60 001D69C0 38 03 13 50 */ addi r0, r3, __vt__18CAdditiveBodyState@l
/* 801D9A64 001D69C4 90 1F 00 00 */ stw r0, 0(r31)
lbl_801D9A68:
/* 801D9A68 001D69C8 7C 80 07 35 */ extsh. r0, r4
@ -217,9 +217,9 @@ lbl_801D9CCC:
.global __ct__10CABSFlinchFv
__ct__10CABSFlinchFv:
/* 801D9CEC 001D6C4C 3C A0 80 3E */ lis r5, lbl_803E1350@ha
/* 801D9CEC 001D6C4C 3C A0 80 3E */ lis r5, __vt__18CAdditiveBodyState@ha
/* 801D9CF0 001D6C50 3C 80 80 3E */ lis r4, lbl_803E5C80@ha
/* 801D9CF4 001D6C54 38 05 13 50 */ addi r0, r5, lbl_803E1350@l
/* 801D9CF4 001D6C54 38 05 13 50 */ addi r0, r5, __vt__18CAdditiveBodyState@l
/* 801D9CF8 001D6C58 C0 02 AC A8 */ lfs f0, lbl_805AC9C8@sda21(r2)
/* 801D9CFC 001D6C5C 90 03 00 00 */ stw r0, 0(r3)
/* 801D9D00 001D6C60 38 84 5C 80 */ addi r4, r4, lbl_803E5C80@l
@ -246,4 +246,3 @@ lbl_805AC9C8:
# ROM: 0x3F9268
.float 1.0
.4byte 0

View File

@ -3,8 +3,8 @@
.section .data
.balign 8
.global lbl_803E5C60
lbl_803E5C60:
.global __vt__8CABSIdle
__vt__8CABSIdle:
# ROM: 0x3E2C60
.4byte 0
.4byte 0
@ -25,12 +25,12 @@ __dt__8CABSIdleFv:
/* 801D9940 001D68A0 93 E1 00 0C */ stw r31, 0xc(r1)
/* 801D9944 001D68A4 7C 7F 1B 79 */ or. r31, r3, r3
/* 801D9948 001D68A8 41 82 00 30 */ beq lbl_801D9978
/* 801D994C 001D68AC 3C 60 80 3E */ lis r3, lbl_803E5C60@ha
/* 801D9950 001D68B0 38 03 5C 60 */ addi r0, r3, lbl_803E5C60@l
/* 801D994C 001D68AC 3C 60 80 3E */ lis r3, __vt__8CABSIdle@ha
/* 801D9950 001D68B0 38 03 5C 60 */ addi r0, r3, __vt__8CABSIdle@l
/* 801D9954 001D68B4 90 1F 00 00 */ stw r0, 0(r31)
/* 801D9958 001D68B8 41 82 00 10 */ beq lbl_801D9968
/* 801D995C 001D68BC 3C 60 80 3E */ lis r3, lbl_803E1350@ha
/* 801D9960 001D68C0 38 03 13 50 */ addi r0, r3, lbl_803E1350@l
/* 801D995C 001D68BC 3C 60 80 3E */ lis r3, __vt__18CAdditiveBodyState@ha
/* 801D9960 001D68C0 38 03 13 50 */ addi r0, r3, __vt__18CAdditiveBodyState@l
/* 801D9964 001D68C4 90 1F 00 00 */ stw r0, 0(r31)
lbl_801D9968:
/* 801D9968 001D68C8 7C 80 07 35 */ extsh. r0, r4
@ -53,8 +53,8 @@ Start__8CABSIdleFR15CBodyControllerR13CStateManager:
Shutdown__8CABSIdleFR15CBodyController:
/* 801D9994 001D68F4 4E 80 00 20 */ blr
.global GetBodyStateTransition__8CABSIdleFfR15CBodyController
GetBodyStateTransition__8CABSIdleFfR15CBodyController:
.global GetBodyStateTransition__8CABSIdleCFfR15CBodyController
GetBodyStateTransition__8CABSIdleCFfR15CBodyController:
/* 801D9998 001D68F8 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 801D999C 001D68FC 7C 08 02 A6 */ mflr r0
/* 801D99A0 001D6900 90 01 00 14 */ stw r0, 0x14(r1)
@ -95,7 +95,7 @@ UpdateBody__8CABSIdleFfR15CBodyControllerR13CStateManager:
/* 801D9A14 001D6974 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 801D9A18 001D6978 7C 08 02 A6 */ mflr r0
/* 801D9A1C 001D697C 90 01 00 14 */ stw r0, 0x14(r1)
/* 801D9A20 001D6980 4B FF FF 79 */ bl GetBodyStateTransition__8CABSIdleFfR15CBodyController
/* 801D9A20 001D6980 4B FF FF 79 */ bl GetBodyStateTransition__8CABSIdleCFfR15CBodyController
/* 801D9A24 001D6984 80 01 00 14 */ lwz r0, 0x14(r1)
/* 801D9A28 001D6988 7C 08 03 A6 */ mtlr r0
/* 801D9A2C 001D698C 38 21 00 10 */ addi r1, r1, 0x10

View File

@ -28,8 +28,8 @@ __dt__12CABSReactionFv:
/* 801F155C 001EE4BC 38 03 67 58 */ addi r0, r3, lbl_803E6758@l
/* 801F1560 001EE4C0 90 1F 00 00 */ stw r0, 0(r31)
/* 801F1564 001EE4C4 41 82 00 10 */ beq lbl_801F1574
/* 801F1568 001EE4C8 3C 60 80 3E */ lis r3, lbl_803E1350@ha
/* 801F156C 001EE4CC 38 03 13 50 */ addi r0, r3, lbl_803E1350@l
/* 801F1568 001EE4C8 3C 60 80 3E */ lis r3, __vt__18CAdditiveBodyState@ha
/* 801F156C 001EE4CC 38 03 13 50 */ addi r0, r3, __vt__18CAdditiveBodyState@l
/* 801F1570 001EE4D0 90 1F 00 00 */ stw r0, 0(r31)
lbl_801F1574:
/* 801F1574 001EE4D4 7C 80 07 35 */ extsh. r0, r4
@ -376,9 +376,9 @@ lbl_801F1A14:
.global __ct__12CABSReactionFv
__ct__12CABSReactionFv:
/* 801F1A30 001EE990 3C A0 80 3E */ lis r5, lbl_803E1350@ha
/* 801F1A30 001EE990 3C A0 80 3E */ lis r5, __vt__18CAdditiveBodyState@ha
/* 801F1A34 001EE994 3C 80 80 3E */ lis r4, lbl_803E6758@ha
/* 801F1A38 001EE998 38 05 13 50 */ addi r0, r5, lbl_803E1350@l
/* 801F1A38 001EE998 38 05 13 50 */ addi r0, r5, __vt__18CAdditiveBodyState@l
/* 801F1A3C 001EE99C C0 02 AE D8 */ lfs f0, lbl_805ACBF8@sda21(r2)
/* 801F1A40 001EE9A0 90 03 00 00 */ stw r0, 0(r3)
/* 801F1A44 001EE9A4 38 A4 67 58 */ addi r5, r4, lbl_803E6758@l
@ -408,4 +408,3 @@ lbl_805ACBF8:
# ROM: 0x3F9498
.float 1.0
.4byte 0

View File

@ -198,8 +198,8 @@ lbl_803E1318:
.4byte 0
.4byte 0
.global lbl_803E1350
lbl_803E1350:
.global __vt__18CAdditiveBodyState
__vt__18CAdditiveBodyState:
# ROM: 0x3DE350
.4byte 0
.4byte 0
@ -2773,9 +2773,9 @@ __dt__18CAdditiveBodyStateFv:
/* 80134348 001312A8 93 E1 00 0C */ stw r31, 0xc(r1)
/* 8013434C 001312AC 7C 7F 1B 79 */ or. r31, r3, r3
/* 80134350 001312B0 41 82 00 1C */ beq lbl_8013436C
/* 80134354 001312B4 3C A0 80 3E */ lis r5, lbl_803E1350@ha
/* 80134354 001312B4 3C A0 80 3E */ lis r5, __vt__18CAdditiveBodyState@ha
/* 80134358 001312B8 7C 80 07 35 */ extsh. r0, r4
/* 8013435C 001312BC 38 05 13 50 */ addi r0, r5, lbl_803E1350@l
/* 8013435C 001312BC 38 05 13 50 */ addi r0, r5, __vt__18CAdditiveBodyState@l
/* 80134360 001312C0 90 1F 00 00 */ stw r0, 0(r31)
/* 80134364 001312C4 40 81 00 08 */ ble lbl_8013436C
/* 80134368 001312C8 48 1E 15 C9 */ bl Free__7CMemoryFPCv
@ -2927,11 +2927,11 @@ lbl_80134524:
/* 80134550 001314B0 48 1E 13 1D */ bl __nw__FUlPCcPCc
/* 80134554 001314B4 28 03 00 00 */ cmplwi r3, 0
/* 80134558 001314B8 41 82 00 1C */ beq lbl_80134574
/* 8013455C 001314BC 3C A0 80 3E */ lis r5, lbl_803E1350@ha
/* 80134560 001314C0 3C 80 80 3E */ lis r4, lbl_803E5C60@ha
/* 80134564 001314C4 38 05 13 50 */ addi r0, r5, lbl_803E1350@l
/* 8013455C 001314BC 3C A0 80 3E */ lis r5, __vt__18CAdditiveBodyState@ha
/* 80134560 001314C0 3C 80 80 3E */ lis r4, __vt__8CABSIdle@ha
/* 80134564 001314C4 38 05 13 50 */ addi r0, r5, __vt__18CAdditiveBodyState@l
/* 80134568 001314C8 90 03 00 00 */ stw r0, 0(r3)
/* 8013456C 001314CC 38 04 5C 60 */ addi r0, r4, lbl_803E5C60@l
/* 8013456C 001314CC 38 04 5C 60 */ addi r0, r4, __vt__8CABSIdle@l
/* 80134570 001314D0 90 03 00 00 */ stw r0, 0(r3)
lbl_80134574:
/* 80134574 001314D4 7C 83 00 D0 */ neg r4, r3
@ -3562,4 +3562,3 @@ lbl_803D0058:
# ROM: 0x3CD058
.asciz "??(??)"
.balign 4

View File

@ -289,7 +289,7 @@ LIBS = [
"MetroidPrime/ScriptObjects/CScriptControllerAction",
"MetroidPrime/Weapons/GunController/CGunMotion",
["MetroidPrime/ScriptObjects/CScriptSwitch", True],
"MetroidPrime/BodyState/CABSIdle",
["MetroidPrime/BodyState/CABSIdle", True],
"MetroidPrime/BodyState/CABSFlinch",
"MetroidPrime/BodyState/CABSAim",
"MetroidPrime/ScriptObjects/CScriptPlayerStateChange",

View File

@ -0,0 +1,15 @@
#ifndef _CABSIDLE
#define _CABSIDLE
#include "MetroidPrime/BodyState/CAdditiveBodyState.hpp"
class CABSIdle : public CAdditiveBodyState {
pas::EAnimationState GetBodyStateTransition(float dt, CBodyController& bc) const;
public:
void Start(CBodyController& bc, CStateManager& mgr) override {}
pas::EAnimationState UpdateBody(float dt, CBodyController& bc, CStateManager& mgr) override;
void Shutdown(CBodyController& bc) override {}
};
#endif // _CABSIDLE

View File

@ -0,0 +1,19 @@
#ifndef _CADDITIVEBODYSTATE
#define _CADDITIVEBODYSTATE
#include "Kyoto/Animation/CPASAnimState.hpp"
class CBodyController;
class CStateManager;
class CAdditiveBodyState {
public:
virtual ~CAdditiveBodyState() {};
virtual bool ApplyHeadTracking() const { return true; }
virtual bool CanShoot() const { return true; }
virtual void Start(CBodyController& bc, CStateManager& mgr) = 0;
virtual pas::EAnimationState UpdateBody(float dt, CBodyController& bc, CStateManager& mgr) = 0;
virtual void Shutdown(CBodyController& bc) = 0;
};
#endif // _CADDITIVEBODYSTATE

View File

@ -0,0 +1,16 @@
#ifndef _CBODYCONTROLLER
#define _CBODYCONTROLLER
#include "MetroidPrime/BodyState/CBodyStateCmdMgr.hpp"
class CActor;
class CBodyController {
CActor& x0_actor;
CBodyStateCmdMgr x4_cmdMgr;
public:
CBodyStateCmdMgr& CommandMgr() { return x4_cmdMgr; }
};
#endif // _CBODYCONTROLLER

View File

@ -0,0 +1,43 @@
#ifndef _CBODYSTATECMDMGR
#define _CBODYSTATECMDMGR
// TODO: CharacterCommon
enum EBodyStateCmd {
kBSC_Getup,
kBSC_Step,
kBSC_Die,
kBSC_KnockDown,
kBSC_KnockBack,
kBSC_MeleeAttack,
kBSC_ProjectileAttack,
kBSC_LoopAttack,
kBSC_LoopReaction,
kBSC_LoopHitReaction,
kBSC_ExitState,
kBSC_LeanFromCover,
kBSC_NextState,
kBSC_MaintainVelocity,
kBSC_Generate,
kBSC_Hurled,
kBSC_Jump,
kBSC_Slide,
kBSC_Taunt,
kBSC_Scripted,
kBSC_Cover,
kBSC_WallHang,
kBSC_Locomotion,
kBSC_AdditiveIdle,
kBSC_AdditiveAim,
kBSC_AdditiveFlinch,
kBSC_AdditiveReaction,
kBSC_StopReaction
};
class CBodyStateCmd;
class CBodyStateCmdMgr {
public:
CBodyStateCmd* GetCmd(EBodyStateCmd cmd);
};
#endif // _CBODYSTATECMDMGR

View File

@ -256,7 +256,7 @@ METROIDPRIME :=\
$(BUILD_DIR)/asm/MetroidPrime/ScriptObjects/CScriptControllerAction.o\
$(BUILD_DIR)/asm/MetroidPrime/Weapons/GunController/CGunMotion.o\
$(BUILD_DIR)/src/MetroidPrime/ScriptObjects/CScriptSwitch.o\
$(BUILD_DIR)/asm/MetroidPrime/BodyState/CABSIdle.o\
$(BUILD_DIR)/src/MetroidPrime/BodyState/CABSIdle.o\
$(BUILD_DIR)/asm/MetroidPrime/BodyState/CABSFlinch.o\
$(BUILD_DIR)/asm/MetroidPrime/BodyState/CABSAim.o\
$(BUILD_DIR)/asm/MetroidPrime/ScriptObjects/CScriptPlayerStateChange.o\

View File

@ -0,0 +1,18 @@
#include "MetroidPrime/BodyState/CABSIdle.hpp"
#include "MetroidPrime/BodyState/CBodyController.hpp"
pas::EAnimationState CABSIdle::UpdateBody(float dt, CBodyController& bc, CStateManager& mgr) {
return GetBodyStateTransition(dt, bc);
}
pas::EAnimationState CABSIdle::GetBodyStateTransition(float dt, CBodyController& bc) const {
CBodyStateCmdMgr& commandMgr = bc.CommandMgr();
if (commandMgr.GetCmd(kBSC_AdditiveReaction))
return pas::kAS_AdditiveReaction;
if (commandMgr.GetCmd(kBSC_AdditiveFlinch))
return pas::kAS_AdditiveFlinch;
if (commandMgr.GetCmd(kBSC_AdditiveAim))
return pas::kAS_AdditiveAim;
return pas::kAS_Invalid;
}