Start CCollidableAABox, add CPlayerCameraBob

This commit is contained in:
Phillip Stephens 2023-01-09 22:51:58 -08:00
parent 481e7e2100
commit 749dec6b1e
17 changed files with 392 additions and 112 deletions

View File

@ -28,7 +28,6 @@ __vt__16CCollidableAABox:
sTableIndex__16CCollidableAABox:
# ROM: 0x3F6088
.4byte 0xFFFFFFFF
.4byte 0
.section .bss
.balign 8

View File

@ -8305,7 +8305,7 @@ PreThinkObjects__13CStateManagerFf:
/* 8004AC1C 00047B7C FC 02 00 40 */ fcmpo cr0, f2, f0
/* 8004AC20 00047B80 40 81 00 10 */ ble lbl_8004AC30
/* 8004AC24 00047B84 7F 64 DB 78 */ mr r4, r27
/* 8004AC28 00047B88 4B FC 6D 59 */ bl DoPreThink__7CPlayerfRC13CStateManager
/* 8004AC28 00047B88 4B FC 6D 59 */ bl DoPreThink__7CPlayerFfRC13CStateManager
/* 8004AC2C 00047B8C 48 00 01 00 */ b lbl_8004AD2C
lbl_8004AC30:
/* 8004AC30 00047B90 80 1B 09 04 */ lwz r0, 0x904(r27)

View File

@ -2650,8 +2650,8 @@ lbl_80011970:
/* 80011978 0000E8D8 90 03 0A 10 */ stw r0, 0xa10(r3)
/* 8001197C 0000E8DC 4E 80 00 20 */ blr
.global DoPreThink__7CPlayerfRC13CStateManager
DoPreThink__7CPlayerfRC13CStateManager:
.global DoPreThink__7CPlayerFfRC13CStateManager
DoPreThink__7CPlayerFfRC13CStateManager:
/* 80011980 0000E8E0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 80011984 0000E8E4 7C 08 02 A6 */ mflr r0
/* 80011988 0000E8E8 90 01 00 24 */ stw r0, 0x24(r1)

View File

@ -10,27 +10,27 @@ lbl_ctor:
.global kCameraBobExtentX__16CPlayerCameraBob
kCameraBobExtentX__16CPlayerCameraBob:
# ROM: 0x3F4D18
.4byte 0x3D916873
.float 0.071
.global kCameraBobExtentY__16CPlayerCameraBob
kCameraBobExtentY__16CPlayerCameraBob:
# ROM: 0x3F4D1C
.4byte 0x3E116873
.float 0.142
.global kCameraBobPeriod__16CPlayerCameraBob
kCameraBobPeriod__16CPlayerCameraBob:
# ROM: 0x3F4D20
.4byte 0x3EF0A3D7
.float 0.47
.global kOrbitBobScale__16CPlayerCameraBob
kOrbitBobScale__16CPlayerCameraBob:
# ROM: 0x3F4D24
.4byte 0x3F451EB8
.float 0.77
.global kMaxOrbitBobScale__16CPlayerCameraBob
kMaxOrbitBobScale__16CPlayerCameraBob:
# ROM: 0x3F4D28
.4byte 0x3F4CCCCD
.float 0.8
.global kSlowSpeedPeriodScale__16CPlayerCameraBob
kSlowSpeedPeriodScale__16CPlayerCameraBob:
@ -47,53 +47,53 @@ kLandingBobSpringConstant__16CPlayerCameraBob:
# ROM: 0x3F4D34
.float 150.0
.global lbl_805A7398__16CPlayerCameraBob
lbl_805A7398__16CPlayerCameraBob:
# ROM: 0x3F4D38
.float -30.0
.global lbl_805A739C__16CPlayerCameraBob
lbl_805A739C__16CPlayerCameraBob:
# ROM: 0x3F4D3C
.float -35.0
.global kLandingBobSpringConstant2__16CPlayerCameraBob
kLandingBobSpringConstant2__16CPlayerCameraBob:
# ROM: 0x3F4D40
.float 40.0
.global lbl_805A73A4__16CPlayerCameraBob
lbl_805A73A4__16CPlayerCameraBob:
# ROM: 0x3F4D44
.float 80.0
.global kViewWanderRadius__16CPlayerCameraBob
kViewWanderRadius__16CPlayerCameraBob:
# ROM: 0x3F4D38
.4byte 0xC1F00000
.global kViewWanderSpeedMin__16CPlayerCameraBob
kViewWanderSpeedMin__16CPlayerCameraBob:
# ROM: 0x3F4D3C
.4byte 0xC20C0000
.global kViewWanderSpeedMax__16CPlayerCameraBob
kViewWanderSpeedMax__16CPlayerCameraBob:
# ROM: 0x3F4D40
.4byte 0x42200000
.global kViewWanderRollVariation__16CPlayerCameraBob
kViewWanderRollVariation__16CPlayerCameraBob:
# ROM: 0x3F4D44
.4byte 0x42A00000
.global kGunBobMagnitude__16CPlayerCameraBob
kGunBobMagnitude__16CPlayerCameraBob:
# ROM: 0x3F4D48
.float 0.03
.global kHelmetBobMagnitude__16CPlayerCameraBob
kHelmetBobMagnitude__16CPlayerCameraBob:
.global kViewWanderSpeedMin__16CPlayerCameraBob
kViewWanderSpeedMin__16CPlayerCameraBob:
# ROM: 0x3F4D4C
.float 0.1
.global lbl_805A73B0
lbl_805A73B0:
.global kViewWanderSpeedMax__16CPlayerCameraBob
kViewWanderSpeedMax__16CPlayerCameraBob:
# ROM: 0x3F4D50
.float 0.3
.global lbl_805A73B4
lbl_805A73B4:
.global kViewWanderRollVariation__16CPlayerCameraBob
kViewWanderRollVariation__16CPlayerCameraBob:
# ROM: 0x3F4D54
.float 0.3
.global lbl_805A73B8
lbl_805A73B8:
.global kGunBobMagnitude__16CPlayerCameraBob
kGunBobMagnitude__16CPlayerCameraBob:
# ROM: 0x3F4D58
.float 0.3
.global lbl_805A73BC
lbl_805A73BC:
.global kHelmetBobMagnitude__16CPlayerCameraBob
kHelmetBobMagnitude__16CPlayerCameraBob:
# ROM: 0x3F4D5C
.float 2.0
@ -105,12 +105,12 @@ lbl_805A73C0:
.global lbl_805A73C4
lbl_805A73C4:
# ROM: 0x3F4D64
.4byte 0
.float 0
.global lbl_805A73C8
lbl_805A73C8:
# ROM: 0x3F4D68
.4byte 0
.float 0
.global lbl_805A73CC
lbl_805A73CC:
@ -120,7 +120,7 @@ lbl_805A73CC:
.global lbl_805A73D0
lbl_805A73D0:
# ROM: 0x3F4D70
.4byte 0
.float 0.0
.global lbl_805A73D4
lbl_805A73D4:
@ -131,15 +131,15 @@ lbl_805A73D4:
.balign 8
# CPlayerCameraBob
.global lbl_805A8ED0
lbl_805A8ED0:
.global kLandingBobDamping__16CPlayerCameraBob
kLandingBobDamping__16CPlayerCameraBob:
.skip 0x4
.global lbl_805A8ED4
lbl_805A8ED4:
.global kLandingBobDamping2__16CPlayerCameraBob
kLandingBobDamping2__16CPlayerCameraBob:
.skip 0x4
.global kCameraDamping__16CPlayerCameraBob
kCameraDamping__16CPlayerCameraBob:
.skip 0x4
.global lbl_805A8ED8
lbl_805A8ED8:
.skip 0x8
.section .sdata2, "a"
.balign 8
@ -371,10 +371,10 @@ UpdateViewWander__16CPlayerCameraBobFfR13CStateManager:
/* 800E9794 000E66F4 54 1F 10 3A */ slwi r31, r0, 2
/* 800E9798 000E66F8 48 00 00 85 */ bl CalculateRandomViewWanderPitch__16CPlayerCameraBobFR13CStateManager
/* 800E979C 000E66FC 7C 3E FD 2E */ stfsx f1, r30, r31
/* 800E97A0 000E6700 C3 ED 87 EC */ lfs f31, kHelmetBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800E97A0 000E6700 C3 ED 87 EC */ lfs f31, kViewWanderSpeedMin__16CPlayerCameraBob@sda21(r13)
/* 800E97A4 000E6704 80 7D 09 00 */ lwz r3, 0x900(r29)
/* 800E97A8 000E6708 48 22 8D 35 */ bl Float__9CRandom16Fv
/* 800E97AC 000E670C C0 4D 87 F0 */ lfs f2, lbl_805A73B0@sda21(r13)
/* 800E97AC 000E670C C0 4D 87 F0 */ lfs f2, kViewWanderSpeedMax__16CPlayerCameraBob@sda21(r13)
/* 800E97B0 000E6710 C0 02 90 7C */ lfs f0, lbl_805AAD9C@sda21(r2)
/* 800E97B4 000E6714 EC 42 F8 28 */ fsubs f2, f2, f31
/* 800E97B8 000E6718 EC 22 F8 7A */ fmadds f1, f2, f1, f31
@ -414,7 +414,7 @@ CalculateRandomViewWanderPitch__16CPlayerCameraBobFR13CStateManager:
/* 800E9830 000E6790 C0 02 90 88 */ lfs f0, lbl_805AADA8@sda21(r2)
/* 800E9834 000E6794 C0 42 90 84 */ lfs f2, lbl_805AADA4@sda21(r2)
/* 800E9838 000E6798 EC 61 00 28 */ fsubs f3, f1, f0
/* 800E983C 000E679C C0 2D 87 F4 */ lfs f1, lbl_805A73B4@sda21(r13)
/* 800E983C 000E679C C0 2D 87 F4 */ lfs f1, kViewWanderRollVariation__16CPlayerCameraBob@sda21(r13)
/* 800E9840 000E67A0 C0 02 90 80 */ lfs f0, lbl_805AADA0@sda21(r2)
/* 800E9844 000E67A4 EC 42 00 F2 */ fmuls f2, f2, f3
/* 800E9848 000E67A8 EC 21 00 B2 */ fmuls f1, f1, f2
@ -447,7 +447,7 @@ CalculateRandomViewWanderPosition__16CPlayerCameraBobFR13CStateManager:
/* 800E98A8 000E6808 80 7F 09 00 */ lwz r3, 0x900(r31)
/* 800E98AC 000E680C EF C0 00 72 */ fmuls f30, f0, f1
/* 800E98B0 000E6810 48 22 8C 2D */ bl Float__9CRandom16Fv
/* 800E98B4 000E6814 C0 0D 87 E8 */ lfs f0, kGunBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800E98B4 000E6814 C0 0D 87 E8 */ lfs f0, kViewWanderRadius__16CPlayerCameraBob@sda21(r13)
/* 800E98B8 000E6818 EF A0 00 72 */ fmuls f29, f0, f1
/* 800E98BC 000E681C FC 20 F0 90 */ fmr f1, f30
/* 800E98C0 000E6820 48 22 BA 25 */ bl SlowCosineR__5CMathFf
@ -520,10 +520,10 @@ InitViewWander__16CPlayerCameraBobFR13CStateManager:
/* 800E99C0 000E6920 D0 1E 00 BC */ stfs f0, 0xbc(r30)
/* 800E99C4 000E6924 4B FF FE 59 */ bl CalculateRandomViewWanderPitch__16CPlayerCameraBobFR13CStateManager
/* 800E99C8 000E6928 D0 3E 00 C0 */ stfs f1, 0xc0(r30)
/* 800E99CC 000E692C C3 ED 87 EC */ lfs f31, kHelmetBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800E99CC 000E692C C3 ED 87 EC */ lfs f31, kViewWanderSpeedMin__16CPlayerCameraBob@sda21(r13)
/* 800E99D0 000E6930 80 7F 09 00 */ lwz r3, 0x900(r31)
/* 800E99D4 000E6934 48 22 8B 09 */ bl Float__9CRandom16Fv
/* 800E99D8 000E6938 C0 4D 87 F0 */ lfs f2, lbl_805A73B0@sda21(r13)
/* 800E99D8 000E6938 C0 4D 87 F0 */ lfs f2, kViewWanderSpeedMax__16CPlayerCameraBob@sda21(r13)
/* 800E99DC 000E693C 38 00 00 00 */ li r0, 0
/* 800E99E0 000E6940 C0 02 90 78 */ lfs f0, lbl_805AAD98@sda21(r2)
/* 800E99E4 000E6944 EC 42 F8 28 */ fsubs f2, f2, f31
@ -575,10 +575,10 @@ SetState__16CPlayerCameraBobFQ216CPlayerCameraBob15ECameraBobStateR13CStateManag
/* 800E9A80 000E69E0 38 00 00 01 */ li r0, 1
/* 800E9A84 000E69E4 98 03 00 28 */ stb r0, 0x28(r3)
/* 800E9A88 000E69E8 C0 23 00 68 */ lfs f1, 0x68(r3)
/* 800E9A8C 000E69EC C0 0D 87 DC */ lfs f0, kViewWanderSpeedMin__16CPlayerCameraBob@sda21(r13)
/* 800E9A8C 000E69EC C0 0D 87 DC */ lfs f0, lbl_805A739C__16CPlayerCameraBob@sda21(r13)
/* 800E9A90 000E69F0 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 800E9A94 000E69F4 40 80 00 0C */ bge lbl_800E9AA0
/* 800E9A98 000E69F8 38 8D 87 DC */ addi r4, r13, kViewWanderSpeedMin__16CPlayerCameraBob@sda21
/* 800E9A98 000E69F8 38 8D 87 DC */ addi r4, r13, lbl_805A739C__16CPlayerCameraBob@sda21
/* 800E9A9C 000E69FC 48 00 00 08 */ b lbl_800E9AA4
lbl_800E9AA0:
/* 800E9AA0 000E6A00 38 83 00 68 */ addi r4, r3, 0x68
@ -586,7 +586,7 @@ lbl_800E9AA4:
/* 800E9AA4 000E6A04 C0 04 00 00 */ lfs f0, 0(r4)
/* 800E9AA8 000E6A08 D0 03 00 68 */ stfs f0, 0x68(r3)
/* 800E9AAC 000E6A0C C0 23 00 68 */ lfs f1, 0x68(r3)
/* 800E9AB0 000E6A10 C0 0D 87 D8 */ lfs f0, kViewWanderRadius__16CPlayerCameraBob@sda21(r13)
/* 800E9AB0 000E6A10 C0 0D 87 D8 */ lfs f0, lbl_805A7398__16CPlayerCameraBob@sda21(r13)
/* 800E9AB4 000E6A14 FC 01 00 40 */ fcmpo cr0, f1, f0
/* 800E9AB8 000E6A18 7C 00 00 26 */ mfcr r0
/* 800E9ABC 000E6A1C 54 00 0F FE */ srwi r0, r0, 0x1f
@ -752,7 +752,7 @@ GetHelmetBobTranslation__16CPlayerCameraBobCFv:
/* 800E9CEC 000E6C4C C0 04 00 38 */ lfs f0, 0x38(r4)
/* 800E9CF0 000E6C50 C0 44 00 48 */ lfs f2, 0x48(r4)
/* 800E9CF4 000E6C54 EC 00 08 28 */ fsubs f0, f0, f1
/* 800E9CF8 000E6C58 C0 8D 87 FC */ lfs f4, lbl_805A73BC@sda21(r13)
/* 800E9CF8 000E6C58 C0 8D 87 FC */ lfs f4, kHelmetBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800E9CFC 000E6C5C EC 62 08 28 */ fsubs f3, f2, f1
/* 800E9D00 000E6C60 C0 44 00 58 */ lfs f2, 0x58(r4)
/* 800E9D04 000E6C64 C0 24 00 78 */ lfs f1, 0x78(r4)
@ -774,7 +774,7 @@ GetGunBobTransformation__16CPlayerCameraBobCFv:
/* 800E9D38 000E6C98 93 E1 00 5C */ stw r31, 0x5c(r1)
/* 800E9D3C 000E6C9C 7C 7F 1B 78 */ mr r31, r3
/* 800E9D40 000E6CA0 38 61 00 20 */ addi r3, r1, 0x20
/* 800E9D44 000E6CA4 C0 0D 87 F8 */ lfs f0, lbl_805A73B8@sda21(r13)
/* 800E9D44 000E6CA4 C0 0D 87 F8 */ lfs f0, kGunBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800E9D48 000E6CA8 C0 84 00 58 */ lfs f4, 0x58(r4)
/* 800E9D4C 000E6CAC EC 61 00 2A */ fadds f3, f1, f0
/* 800E9D50 000E6CB0 C0 24 00 48 */ lfs f1, 0x48(r4)
@ -922,12 +922,12 @@ Update__16CPlayerCameraBobFfR13CStateManager:
/* 800E9F28 000E6E88 28 00 00 00 */ cmplwi r0, 0
/* 800E9F2C 000E6E8C 41 82 00 E8 */ beq lbl_800EA014
/* 800E9F30 000E6E90 88 1E 00 29 */ lbz r0, 0x29(r30)
/* 800E9F34 000E6E94 C0 0D A3 10 */ lfs f0, lbl_805A8ED0@sda21(r13)
/* 800E9F34 000E6E94 C0 0D A3 10 */ lfs f0, kLandingBobDamping__16CPlayerCameraBob@sda21(r13)
/* 800E9F38 000E6E98 28 00 00 00 */ cmplwi r0, 0
/* 800E9F3C 000E6E9C C0 8D 87 D4 */ lfs f4, kLandingBobSpringConstant__16CPlayerCameraBob@sda21(r13)
/* 800E9F40 000E6EA0 41 82 00 0C */ beq lbl_800E9F4C
/* 800E9F44 000E6EA4 C0 0D A3 14 */ lfs f0, lbl_805A8ED4@sda21(r13)
/* 800E9F48 000E6EA8 C0 8D 87 E0 */ lfs f4, kViewWanderSpeedMax__16CPlayerCameraBob@sda21(r13)
/* 800E9F44 000E6EA4 C0 0D A3 14 */ lfs f0, kLandingBobDamping2__16CPlayerCameraBob@sda21(r13)
/* 800E9F48 000E6EA8 C0 8D 87 E0 */ lfs f4, kLandingBobSpringConstant2__16CPlayerCameraBob@sda21(r13)
lbl_800E9F4C:
/* 800E9F4C 000E6EAC C0 5E 00 6C */ lfs f2, 0x6c(r30)
/* 800E9F50 000E6EB0 C0 7E 00 70 */ lfs f3, 0x70(r30)
@ -941,9 +941,9 @@ lbl_800E9F4C:
/* 800E9F70 000E6ED0 C0 1E 00 70 */ lfs f0, 0x70(r30)
/* 800E9F74 000E6ED4 EC 02 07 FA */ fmadds f0, f2, f31, f0
/* 800E9F78 000E6ED8 D0 1E 00 70 */ stfs f0, 0x70(r30)
/* 800E9F7C 000E6EDC C0 0D A3 18 */ lfs f0, lbl_805A8ED8@sda21(r13)
/* 800E9F7C 000E6EDC C0 0D A3 18 */ lfs f0, kCameraDamping__16CPlayerCameraBob@sda21(r13)
/* 800E9F80 000E6EE0 C0 5E 00 74 */ lfs f2, 0x74(r30)
/* 800E9F84 000E6EE4 C0 8D 87 E4 */ lfs f4, kViewWanderRollVariation__16CPlayerCameraBob@sda21(r13)
/* 800E9F84 000E6EE4 C0 8D 87 E4 */ lfs f4, lbl_805A73A4__16CPlayerCameraBob@sda21(r13)
/* 800E9F88 000E6EE8 EC 00 00 B2 */ fmuls f0, f0, f2
/* 800E9F8C 000E6EEC C0 7E 00 78 */ lfs f3, 0x78(r30)
/* 800E9F90 000E6EF0 FC 00 00 50 */ fneg f0, f0
@ -1109,22 +1109,22 @@ ReadTweaks__16CPlayerCameraBobFR12CInputStream:
/* 800EA1F0 000E7150 D0 2D 87 D4 */ stfs f1, kLandingBobSpringConstant__16CPlayerCameraBob@sda21(r13)
/* 800EA1F4 000E7154 7F E3 FB 78 */ mr r3, r31
/* 800EA1F8 000E7158 48 25 4A 31 */ bl ReadFloat__12CInputStreamFv
/* 800EA1FC 000E715C D0 2D 87 E8 */ stfs f1, kGunBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800EA1FC 000E715C D0 2D 87 E8 */ stfs f1, kViewWanderRadius__16CPlayerCameraBob@sda21(r13)
/* 800EA200 000E7160 7F E3 FB 78 */ mr r3, r31
/* 800EA204 000E7164 48 25 4A 25 */ bl ReadFloat__12CInputStreamFv
/* 800EA208 000E7168 D0 2D 87 EC */ stfs f1, kHelmetBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800EA208 000E7168 D0 2D 87 EC */ stfs f1, kViewWanderSpeedMin__16CPlayerCameraBob@sda21(r13)
/* 800EA20C 000E716C 7F E3 FB 78 */ mr r3, r31
/* 800EA210 000E7170 48 25 4A 19 */ bl ReadFloat__12CInputStreamFv
/* 800EA214 000E7174 D0 2D 87 F0 */ stfs f1, lbl_805A73B0@sda21(r13)
/* 800EA214 000E7174 D0 2D 87 F0 */ stfs f1, kViewWanderSpeedMax__16CPlayerCameraBob@sda21(r13)
/* 800EA218 000E7178 7F E3 FB 78 */ mr r3, r31
/* 800EA21C 000E717C 48 25 4A 0D */ bl ReadFloat__12CInputStreamFv
/* 800EA220 000E7180 D0 2D 87 F4 */ stfs f1, lbl_805A73B4@sda21(r13)
/* 800EA220 000E7180 D0 2D 87 F4 */ stfs f1, kViewWanderRollVariation__16CPlayerCameraBob@sda21(r13)
/* 800EA224 000E7184 7F E3 FB 78 */ mr r3, r31
/* 800EA228 000E7188 48 25 4A 01 */ bl ReadFloat__12CInputStreamFv
/* 800EA22C 000E718C D0 2D 87 F8 */ stfs f1, lbl_805A73B8@sda21(r13)
/* 800EA22C 000E718C D0 2D 87 F8 */ stfs f1, kGunBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800EA230 000E7190 7F E3 FB 78 */ mr r3, r31
/* 800EA234 000E7194 48 25 49 F5 */ bl ReadFloat__12CInputStreamFv
/* 800EA238 000E7198 D0 2D 87 FC */ stfs f1, lbl_805A73BC@sda21(r13)
/* 800EA238 000E7198 D0 2D 87 FC */ stfs f1, kHelmetBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800EA23C 000E719C 80 01 00 14 */ lwz r0, 0x14(r1)
/* 800EA240 000E71A0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 800EA244 000E71A4 7C 08 03 A6 */ mtlr r0
@ -1175,7 +1175,7 @@ __ct__16CPlayerCameraBobFQ216CPlayerCameraBob14ECameraBobTypeRC9CVector2ff:
/* 800EA2EC 000E724C 90 1F 00 7C */ stw r0, 0x7c(r31)
/* 800EA2F0 000E7250 90 1F 00 B0 */ stw r0, 0xb0(r31)
/* 800EA2F4 000E7254 D0 1F 00 C4 */ stfs f0, 0xc4(r31)
/* 800EA2F8 000E7258 C0 0D 87 EC */ lfs f0, kHelmetBobMagnitude__16CPlayerCameraBob@sda21(r13)
/* 800EA2F8 000E7258 C0 0D 87 EC */ lfs f0, kViewWanderSpeedMin__16CPlayerCameraBob@sda21(r13)
/* 800EA2FC 000E725C D0 1F 00 C8 */ stfs f0, 0xc8(r31)
/* 800EA300 000E7260 90 1F 00 CC */ stw r0, 0xcc(r31)
/* 800EA304 000E7264 48 22 88 71 */ bl __ct__12CTransform4fFRC12CTransform4f
@ -1285,8 +1285,7 @@ lbl_800EA468:
/* 800EA484 000E73E4 38 21 00 10 */ addi r1, r1, 0x10
/* 800EA488 000E73E8 4E 80 00 20 */ blr
.global __sinit_CPlayerCameraBob_cpp
__sinit_CPlayerCameraBob_cpp:
.fn __sinit_CPlayerCameraBob_cpp, local
/* 800EA48C 000E73EC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 800EA490 000E73F0 7C 08 02 A6 */ mflr r0
/* 800EA494 000E73F4 90 01 00 14 */ stw r0, 0x14(r1)
@ -1294,18 +1293,19 @@ __sinit_CPlayerCameraBob_cpp:
/* 800EA49C 000E73FC 48 22 B0 65 */ bl SqrtF__5CMathFf
/* 800EA4A0 000E7400 C0 02 90 84 */ lfs f0, lbl_805AADA4@sda21(r2)
/* 800EA4A4 000E7404 EC 00 00 72 */ fmuls f0, f0, f1
/* 800EA4A8 000E7408 C0 2D 87 E0 */ lfs f1, kViewWanderSpeedMax__16CPlayerCameraBob@sda21(r13)
/* 800EA4AC 000E740C D0 0D A3 10 */ stfs f0, lbl_805A8ED0@sda21(r13)
/* 800EA4A8 000E7408 C0 2D 87 E0 */ lfs f1, kLandingBobSpringConstant2__16CPlayerCameraBob@sda21(r13)
/* 800EA4AC 000E740C D0 0D A3 10 */ stfs f0, kLandingBobDamping__16CPlayerCameraBob@sda21(r13)
/* 800EA4B0 000E7410 48 22 B0 51 */ bl SqrtF__5CMathFf
/* 800EA4B4 000E7414 C0 02 90 BC */ lfs f0, lbl_805AADDC@sda21(r2)
/* 800EA4B8 000E7418 EC 00 00 72 */ fmuls f0, f0, f1
/* 800EA4BC 000E741C C0 2D 87 E4 */ lfs f1, kViewWanderRollVariation__16CPlayerCameraBob@sda21(r13)
/* 800EA4C0 000E7420 D0 0D A3 14 */ stfs f0, lbl_805A8ED4@sda21(r13)
/* 800EA4BC 000E741C C0 2D 87 E4 */ lfs f1, lbl_805A73A4__16CPlayerCameraBob@sda21(r13)
/* 800EA4C0 000E7420 D0 0D A3 14 */ stfs f0, kLandingBobDamping2__16CPlayerCameraBob@sda21(r13)
/* 800EA4C4 000E7424 48 22 B0 3D */ bl SqrtF__5CMathFf
/* 800EA4C8 000E7428 C0 02 90 C0 */ lfs f0, lbl_805AADE0@sda21(r2)
/* 800EA4CC 000E742C EC 00 00 72 */ fmuls f0, f0, f1
/* 800EA4D0 000E7430 D0 0D A3 18 */ stfs f0, lbl_805A8ED8@sda21(r13)
/* 800EA4D0 000E7430 D0 0D A3 18 */ stfs f0, kCameraDamping__16CPlayerCameraBob@sda21(r13)
/* 800EA4D4 000E7434 80 01 00 14 */ lwz r0, 0x14(r1)
/* 800EA4D8 000E7438 7C 08 03 A6 */ mtlr r0
/* 800EA4DC 000E743C 38 21 00 10 */ addi r1, r1, 0x10
/* 800EA4E0 000E7440 4E 80 00 20 */ blr
.endfn __sinit_CPlayerCameraBob_cpp

View File

@ -119,7 +119,7 @@ LIBS = [
["MetroidPrime/HUD/CHUDMemoParms", True],
["MetroidPrime/ScriptObjects/CScriptHUDMemo", True],
["MetroidPrime/CMappableObject", False],
"MetroidPrime/Player/CPlayerCameraBob",
["MetroidPrime/Player/CPlayerCameraBob", False],
["MetroidPrime/ScriptObjects/CScriptCameraFilterKeyframe", True],
["MetroidPrime/ScriptObjects/CScriptCameraBlurKeyframe", True],
["MetroidPrime/Cameras/CCameraFilter", False],
@ -316,7 +316,7 @@ LIBS = [
"MetroidPrime/Enemies/CMagdolite",
"MetroidPrime/Enemies/CTeamAiMgr",
"MetroidPrime/Enemies/CSnakeWeedSwarm",
"MetroidPrime/Cameras/CBallCameraFailsafeState",
["MetroidPrime/Cameras/CBallCameraFailsafeState", False],
"MetroidPrime/Enemies/CActorContraption",
"MetroidPrime/ScriptObjects/CScriptSpindleCamera",
["MetroidPrime/ScriptObjects/CScriptMemoryRelay", True],

View File

@ -10,18 +10,31 @@ public:
CCollidableAABox();
CCollidableAABox(const CAABox& box, const CMaterialList& matList)
: CCollisionPrimitive(matList), x10_aabb(box) {}
// TODO
uint GetTableIndex() const override;
CAABox CalculateAABox(const CTransform4f&) const override;
CAABox CalculateLocalAABox() const override;
FourCC GetPrimType() const override;
~CCollidableAABox() override{};
CRayCastResult CastRayInternal(const CInternalRayCastStructure&) const override;
bool CollideMovingAABox(const CInternalCollisionStructure& collision, const CVector3f& dir,
double& dOut, CCollisionInfo& infoOut);
bool CollideMovingSphere(const CInternalCollisionStructure& collision, const CVector3f& dir,
double& dOut, CCollisionInfo& infoOut);
uint GetTableIndex() const;
CAABox CalculateAABox(const CTransform4f&) const;
CAABox CalculateLocalAABox() const;
CAABox Transform(const CTransform4f& xf) const;
FourCC GetPrimType() const;
CRayCastResult CastRayInternal(const CInternalRayCastStructure&) const;
static void SetStaticTableIndex(uint idx);
static CCollisionPrimitive::Type GetType();
private:
static uint sTableIndex;
CAABox x10_aabb;
};
CHECK_SIZEOF(CCollidableAABox, 0x28)
namespace Collide {
bool AABox_AABox_Bool(const CInternalCollisionStructure&);
bool AABox_AABox(const CInternalCollisionStructure& collision, CCollisionInfoList& list);
} // namespace Collide
#endif // _CCOLLIDABLEAABOX

View File

@ -0,0 +1,38 @@
#ifndef _CINTERNALCOLLISIONSTRUCTURE
#define _CINTERNALCOLLISIONSTRUCTURE
#include "Kyoto/Math/CTransform4f.hpp"
class CMaterialFilter;
class CCollisionPrimitive;
class CInternalCollisionStructure {
public:
class CPrimDesc {
public:
CPrimDesc(const CCollisionPrimitive& prim, const CMaterialFilter& filter,
const CTransform4f& xf)
: x0_prim(prim), x4_filter(filter), x8_xf(xf) {}
const CCollisionPrimitive& GetPrim() const { return x0_prim; }
const CMaterialFilter& GetFilter() const { return x4_filter; }
const CTransform4f& GetTransform() const { return x8_xf; }
private:
const CCollisionPrimitive& x0_prim;
const CMaterialFilter& x4_filter;
CTransform4f x8_xf;
};
CInternalCollisionStructure(const CPrimDesc& left, const CPrimDesc& right)
: x0_left(left), x38_right(right) {}
const CPrimDesc& GetLeft() const { return x0_left; }
const CPrimDesc& GetRight() const { return x38_right; }
CInternalCollisionStructure
GetSwapped() const; // TODO: Find where this is used and investigate proper behavior
private:
CPrimDesc x0_left;
CPrimDesc x38_right;
};
#endif // _CINTERNALCOLLISIONSTRUCTURE

View File

@ -0,0 +1,29 @@
#ifndef _CINTERNALRAYCASTSTRUCTURE
#define _CINTERNALRAYCASTSTRUCTURE
#include "Collision/CMRay.hpp"
#include "Kyoto/Math/CTransform4f.hpp"
class CMaterialFilter;
class CInternalRayCastStructure {
public:
CInternalRayCastStructure(const CVector3f& start, const CVector3f& dir, float length,
const CTransform4f& xf, const CMaterialFilter& filter)
: x0_ray(start, dir, length), x38_maxTime(length), x3c_xf(xf), x6c_filter(filter) {}
const CMRay& GetRay() const { return x0_ray; }
const CVector3f& GetStart() const { return x0_ray.GetStart(); }
const CVector3f& GetNormal() const { return x0_ray.GetNormal(); }
float GetMaxTime() const { return x38_maxTime; }
const CTransform4f& GetTransform() const { return x3c_xf; }
const CMaterialFilter& GetFilter() const { return x6c_filter; }
private:
CMRay x0_ray;
float x38_maxTime;
CTransform4f x3c_xf;
const CMaterialFilter& x6c_filter;
};
#endif // _CINTERNALRAYCASTSTRUCTURE

View File

@ -10,6 +10,11 @@ public:
CMRay(const CVector3f& start, const CVector3f& end, float);
CMRay GetInvUnscaledTransformRay(const CTransform4f&) const;
const CVector3f& GetStart() const { return mStart; }
const CVector3f& GetNormal() const { return mEnd; }
const CVector3f& GetDelta() const { return mDelta; }
const CVector3f& GetDirection() const { return mDir; }
private:
CVector3f mStart;
CVector3f mEnd;

View File

@ -14,26 +14,35 @@ public:
kI_Invalid,
kI_Valid,
};
CRayCastResult(float time, const CVector3f& point, const CPlane& plane, const CMaterialList& list)
: x0_time(time), x4_point(point), x10_plane(plane), x20_valid(kI_Valid), x28_material(list) {}
CRayCastResult(EInvalid invalid)
: x0_time(0)
, x4_point(CVector3f(0.f, 0.f, 0.f))
, x10_plane(CPlane(0.f, CUnitVector3f(1.f, 0.f, 0.f, CUnitVector3f::kN_Yes)))
, x20_valid(invalid) {}
float GetTime() const { return x0_t; }
float GetTime() const { return x0_time; }
const CVector3f& GetPoint() const { return x4_point; }
const CPlane& GetPlane() const { return x10_plane; }
bool IsValid() const { return x20_valid != kI_Invalid; }
// TODO: figure out what's going on here
bool IsInvalid() const { return x20_valid == kI_Invalid; }
// GetPlane__14CRayCastResultCFv
const CPlane& GetPlane() const { return x10_plane; }
const CVector3f& GetPoint() const { return x4_point; }
// GetMaterial__14CRayCastResultCFv
// Transform__14CRayCastResultFRC12CTransform4f
const CMaterialList& GetMaterial() const { return x28_material; }
void Transform(const CTransform4f& xf);
// MakeInvalid__14CRayCastResultFv
static CRayCastResult MakeInvalid() {
return CRayCastResult(kI_Invalid);
}
private:
float x0_t;
float x0_time;
CVector3f x4_point;
CPlane x10_plane;
bool x20_valid;
CMaterialList x28_material;
};
CHECK_SIZEOF(CRayCastResult, 0x30)
#endif // _CRAYCASTRESULT

View File

@ -3,25 +3,22 @@
#include "Kyoto/Math/CVector3f.hpp"
class CAABox;
class CMaterialList;
class CCollisionInfoList;
class CVector3f;
/* TODO: Figure out a better place for this, borks CBallFilter here, but is needed for CCollidableAABox/Sphere
(Best solution would be to find a Tardis and go back and slap the dev responsible for this)
static const CVector3f normalTable[6] = {
CVector3f(-1.f, 0.f, 0.f),
CVector3f(1.f, 0.f, 0.f),
CVector3f(0.f, -1.f, 0.f),
CVector3f(0.f, 1.f, 0.f),
CVector3f(0.f, 0.f, -1.f),
CVector3f(0.f, 0.f, 1.f),
};
*/
namespace CollisionUtil {
void AddAverageToFront(const CCollisionInfoList& in, CCollisionInfoList& out);
bool TriBoxOverlap(const CVector3f& boxcenter, const CVector3f& boxhalfsize,
const CVector3f& trivert0, const CVector3f& trivert1, const CVector3f& trivert2);
bool BoxLineTest(const CAABox&, const CVector3f&, const CVector3f&, float&, float&, int&, bool&);
bool AABoxAABoxIntersection(const CAABox& left, const CAABox& right);
bool AABoxAABoxIntersection(const CAABox& left, const CMaterialList& leftFilter,
const CAABox& right, const CMaterialList& rightFilter,
CCollisionInfoList& list);
} // namespace CollisionUtil

View File

@ -0,0 +1,15 @@
#ifndef _NORMALTABLE
#define _NORMALTABLE
#include "Kyoto/Math/CVector3f.hpp"
static const CVector3f normalTable[6] = {
CVector3f(-1.f, 0.f, 0.f),
CVector3f(1.f, 0.f, 0.f),
CVector3f(0.f, -1.f, 0.f),
CVector3f(0.f, 1.f, 0.f),
CVector3f(0.f, 0.f, -1.f),
CVector3f(0.f, 0.f, 1.f),
};
#endif // _NORMALTABLE

View File

@ -17,7 +17,7 @@ public:
}
}
CUnitVector3f(
const CVector3f& vec); // : CVector3f(vec.IsNonZero() ? vec.AsNormalized() : Zero()) {}
const CVector3f& vec);//: CVector3f(vec.IsNonZero() ? vec.AsNormalized() : Zero()) {}
// TODO
static CUnitVector3f Forward() {

View File

@ -29,7 +29,7 @@ public:
kCBS_Unspecified,
};
CPlayerCameraBob(ECameraBobType type, float bobPeriod, const CVector2f& vec);
CPlayerCameraBob(ECameraBobType type, const CVector2f& vec, float bobPeriod);
CTransform4f GetViewWanderTransform() const;
CVector3f GetHelmetBobTranslation() const;
@ -95,16 +95,25 @@ public:
static float kSlowSpeedPeriodScale;
static float kTargetMagnitudeTrackingRate;
static float kLandingBobSpringConstant;
static float lbl_805A7398;
static float lbl_805A739C;
static float kLandingBobSpringConstant2;
static float lbl_805A73A4;
static float kViewWanderRadius;
static float kViewWanderSpeedMin;
static float kViewWanderSpeedMax;
static float kViewWanderRollVariation;
static float kGunBobMagnitude;
static float kHelmetBobMagnitude;
static const float kLandingBobDamping;
static const float kLandingBobDamping2;
static const float kCameraDamping;
static float kLandingBobDamping;
static float kLandingBobDamping2;
static float kCameraDamping;
static float lbl_805A73C0;
static float lbl_805A73C4;
static float lbl_805A73C8;
static float lbl_805A73CC;
static float lbl_805A73D0;
static float lbl_805A73D4;
};
CHECK_SIZEOF(CPlayerCameraBob, 0x108)

View File

@ -1,3 +1,91 @@
#include "Collision/CCollidableAABox.hpp"
#include "Collision/CCollisionInfoList.hpp"
#include "Collision/CInternalCollisionStructure.hpp"
#include "Collision/CInternalRayCastStructure.hpp"
#include "Collision/CMaterialFilter.hpp"
#include "Collision/CRayCastResult.hpp"
#include "Collision/CollisionUtil.hpp"
#include "Collision/NormalTable.hpp"
uint CCollidableAABox::sTableIndex = -1;
void CCollidableAABox::SetStaticTableIndex(uint idx) { sTableIndex = idx; }
CCollisionPrimitive::Type CCollidableAABox::GetType() {
return Type(SetStaticTableIndex, "CCollidableAABox");
}
namespace Collide {
bool AABox_AABox_Bool(const CInternalCollisionStructure& collision) {
const CCollidableAABox& box0 =
static_cast< const CCollidableAABox& >(collision.GetLeft().GetPrim());
const CCollidableAABox& box1 =
static_cast< const CCollidableAABox& >(collision.GetRight().GetPrim());
const CAABox aabb0 = box0.Transform(collision.GetLeft().GetTransform());
const CAABox aabb1 = box1.Transform(collision.GetRight().GetTransform());
return CollisionUtil::AABoxAABoxIntersection(aabb0, aabb1);
}
bool AABox_AABox(const CInternalCollisionStructure& collision, CCollisionInfoList& list) {
const CCollidableAABox& box0 =
static_cast< const CCollidableAABox& >(collision.GetLeft().GetPrim());
const CCollidableAABox& box1 =
static_cast< const CCollidableAABox& >(collision.GetRight().GetPrim());
CAABox aabb0 = box0.Transform(collision.GetLeft().GetTransform());
CAABox aabb1 = box1.Transform(collision.GetRight().GetTransform());
return CollisionUtil::AABoxAABoxIntersection(aabb0, box0.GetMaterial(), aabb1, box1.GetMaterial(),
list);
}
} // namespace Collide
bool CCollidableAABox::CollideMovingAABox(const CInternalCollisionStructure& collision,
const CVector3f& dir, double& dOut,
CCollisionInfo& infoOut) {}
bool CCollidableAABox::CollideMovingSphere(const CInternalCollisionStructure& collision,
const CVector3f& dir, double& dOut,
CCollisionInfo& infoOut) {}
CRayCastResult CCollidableAABox::CastRayInternal(const CInternalRayCastStructure& rayCast) const {
if (!rayCast.GetFilter().Passes(GetMaterial())) {
return CRayCastResult::MakeInvalid();
}
CTransform4f rayCastXf = rayCast.GetTransform();
CTransform4f rayCastXfInv = rayCastXfInv.GetQuickInverse();
CVector3f localRayStart = rayCastXfInv * rayCast.GetStart();
CVector3f localRayDir = rayCastXfInv.Rotate(rayCast.GetRay().GetDirection());
float tMin;
float tMax;
int axis;
bool sign;
if (!CollisionUtil::BoxLineTest(x10_aabb, localRayStart, localRayDir, tMin, tMax, axis, sign) ||
tMin < 0.f || (rayCast.GetMaxTime() > 0.f && tMin > rayCast.GetMaxTime())) {
return CRayCastResult::MakeInvalid();
}
CVector3f planeNormal = CVector3f::Zero();
planeNormal[axis] = sign ? 1.f : -1.f;
float planeD = axis ? x10_aabb.GetMinPoint()[axis] : x10_aabb.GetMaxPoint()[axis];
CRayCastResult result(tMin, localRayStart + tMin * localRayDir, CPlane(planeD, planeNormal),
GetMaterial());
result.Transform(rayCast.GetTransform());
return result;
}
CAABox CCollidableAABox::CalculateLocalAABox() const { return x10_aabb; }
CAABox CCollidableAABox::CalculateAABox(const CTransform4f& xf) const { return Transform(xf); }
CAABox CCollidableAABox::Transform(const CTransform4f& xf) const {
const CVector3f xfPos = xf.GetTranslation();
return CAABox(x10_aabb.GetMinPoint() + xfPos, x10_aabb.GetMaxPoint() + xfPos);
}
FourCC CCollidableAABox::GetPrimType() const { return 'AABX'; }
uint CCollidableAABox::GetTableIndex() const { return sTableIndex; }

View File

@ -1,5 +1,7 @@
#include "Collision/CollisionUtil.hpp"
#include "Collision/NormalTable.hpp"
#include "Kyoto/Math/CMath.hpp"
#include "Kyoto/Math/CPlane.hpp"
#include "Kyoto/Math/CSphere.hpp"

View File

@ -0,0 +1,76 @@
#include "MetroidPrime/Player/CPlayerCameraBob.hpp"
#include "Kyoto/Math/CMath.hpp"
#include "Kyoto/Streams/CInputStream.hpp"
float CPlayerCameraBob::kCameraBobExtentX = 0.071f;
float CPlayerCameraBob::kCameraBobExtentY = 0.142f;
float CPlayerCameraBob::kCameraBobPeriod = 0.47f;
float CPlayerCameraBob::kOrbitBobScale = 0.769f;
float CPlayerCameraBob::kMaxOrbitBobScale = 0.8f;
float CPlayerCameraBob::kSlowSpeedPeriodScale = 0.3f;
float CPlayerCameraBob::kTargetMagnitudeTrackingRate = 0.1f;
float CPlayerCameraBob::kLandingBobSpringConstant = 150.f;
float CPlayerCameraBob::lbl_805A7398 = -30.f;
float CPlayerCameraBob::lbl_805A739C = -35.f;
float CPlayerCameraBob::kLandingBobSpringConstant2 = 40.f;
float CPlayerCameraBob::lbl_805A73A4 = 80.f;
float CPlayerCameraBob::kViewWanderRadius = 0.03f;
float CPlayerCameraBob::kViewWanderSpeedMin = 0.1f;
float CPlayerCameraBob::kViewWanderSpeedMax = 0.3f;
float CPlayerCameraBob::kViewWanderRollVariation = 0.3f;
float CPlayerCameraBob::kGunBobMagnitude = 0.3f;
float CPlayerCameraBob::kHelmetBobMagnitude = 2.f;
float CPlayerCameraBob::kLandingBobDamping = CMath::SqrtF(kLandingBobSpringConstant) * 2.f;
float CPlayerCameraBob::kLandingBobDamping2 = CMath::SqrtF(kLandingBobSpringConstant2) * 4.f;
float CPlayerCameraBob::kCameraDamping = CMath::SqrtF(lbl_805A73A4) * 6.f;
CPlayerCameraBob::CPlayerCameraBob(ECameraBobType type, const CVector2f& vec, float bobPeriod)
: x0_type(type)
, x4_vec(vec)
, xc_bobPeriod(bobPeriod)
, x10_targetBobMagnitude(0.f)
, x14_bobMagnitude(0.f)
, x18_bobTimeScale(0.f)
, x1c_bobTime(0.f)
, x20_oldState(kCBS_Unspecified)
, x24_curState(kCBS_Unspecified)
, x28_applyLandingTrans(false)
, x29_hardLand(false)
, x2c_cameraBobTransform(CTransform4f::Identity())
, x5c_playerVelocity(CVector3f(0.f, 0.f, 0.f))
, x68_playerPeakFallVel(0.f)
, x6c_landingVelocity(0.f)
, x70_landingTranslation(0.f)
, x74_camVelocity(0.f)
, x78_camTranslation(0.f)
, xc4_wanderTime(0.f)
, xc8_viewWanderSpeed(kViewWanderSpeedMin)
, xcc_wanderIndex(0)
, xd0_viewWanderXf(CTransform4f::Identity())
, x100_wanderMagnitude(FLT_EPSILON)
, x104_targetWanderMagnitude(0.f) {
for (int i = 0; i < 4; ++i) {
x7c_wanderPoints.push_back(CVector3f(0.f, 1.f, 0.f));
}
for (int i = 0; i < 4; ++i) {
xb0_wanderPitches.push_back(0.f);
}
}
void CPlayerCameraBob::ReadTweaks(CInputStream& in) {
kCameraBobExtentX = in.ReadFloat();
kCameraBobExtentY = in.ReadFloat();
kCameraBobPeriod = in.ReadFloat();
kOrbitBobScale = in.ReadFloat();
kMaxOrbitBobScale = in.ReadFloat();
kSlowSpeedPeriodScale = in.ReadFloat();
kTargetMagnitudeTrackingRate = in.ReadFloat();
kLandingBobSpringConstant = in.ReadFloat();
kViewWanderRadius = in.ReadFloat();
kViewWanderSpeedMin = in.ReadFloat();
kViewWanderSpeedMax = in.ReadFloat();
kViewWanderRollVariation = in.ReadFloat();
kGunBobMagnitude = in.ReadFloat();
kHelmetBobMagnitude = in.ReadFloat();
}