From 85284f76408b91c78134fb192c8d3ac5cc685f99 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sun, 14 Aug 2022 14:38:41 -0400 Subject: [PATCH] Continue work on CActor::UpdateAnimation; lots of headers n stuff --- asm/Kyoto/Audio/DolphinCAudioSys.s | 4 +- asm/MetroidPrime/CActor.s | 22 +- asm/MetroidPrime/CAnimData.s | 174 +++++++------- asm/MetroidPrime/CStateManager.s | 2 +- asm/MetroidPrime/Cameras/CCameraManager.s | 4 +- asm/MetroidPrime/Enemies/CBabygoth.s | 2 +- asm/MetroidPrime/Enemies/CGrenadeLauncher.s | 2 +- asm/MetroidPrime/Enemies/COmegaPirate.s | 4 +- asm/MetroidPrime/Enemies/CThardus.s | 8 +- .../Enemies/CThardusRockProjectile.s | 6 +- asm/MetroidPrime/Enemies/CWallCrawlerSwarm.s | 4 +- asm/MetroidPrime/Player/CGrappleArm.s | 12 +- asm/MetroidPrime/Player/CPlayerGun.s | 12 +- asm/MetroidPrime/Weapons/CEnergyProjectile.s | 2 +- include/Kyoto/Audio/CAudioSys.hpp | 2 +- include/Kyoto/Math/CQuaternion.hpp | 3 + include/Kyoto/Math/CVector3f.hpp | 2 + include/Kyoto/TToken.hpp | 6 + include/MetroidPrime/CActor.hpp | 225 +++++++++++++++++- .../MetroidPrime/CAdditiveAnimPlayback.hpp | 38 +++ include/MetroidPrime/CAnimData.hpp | 192 ++++++++++++++- include/MetroidPrime/CAnimPlaybackParms.hpp | 25 ++ include/MetroidPrime/CCharAnimTime.hpp | 22 ++ include/MetroidPrime/CCharacterInfo.hpp | 44 ++++ include/MetroidPrime/CEffectComponent.hpp | 18 ++ .../MetroidPrime/CHierarchyPoseBuilder.hpp | 62 +++++ include/MetroidPrime/CModelData.hpp | 10 +- include/MetroidPrime/CPASAnimState.hpp | 93 ++++++++ include/MetroidPrime/CPASDatabase.hpp | 17 ++ include/MetroidPrime/CPOINode.hpp | 86 +++++++ include/MetroidPrime/CParticleData.hpp | 35 +++ include/MetroidPrime/CParticleDatabase.hpp | 41 ++++ include/MetroidPrime/CPoseAsTransforms.hpp | 24 ++ .../MetroidPrime/Cameras/CCameraManager.hpp | 2 +- include/MetroidPrime/TGameTypes.hpp | 5 + include/rstl/auto_ptr.hpp | 2 +- include/rstl/construction_deferred.hpp | 37 +++ include/rstl/map.hpp | 6 +- include/rstl/rc_ptr.hpp | 5 + include/rstl/red_black_tree.hpp | 16 ++ include/rstl/single_ptr.hpp | 1 + include/rstl/vector.hpp | 2 +- src/MetroidPrime/CActor.cpp | 59 ++++- 43 files changed, 1190 insertions(+), 148 deletions(-) create mode 100644 include/MetroidPrime/CAdditiveAnimPlayback.hpp create mode 100644 include/MetroidPrime/CAnimPlaybackParms.hpp create mode 100644 include/MetroidPrime/CCharAnimTime.hpp create mode 100644 include/MetroidPrime/CCharacterInfo.hpp create mode 100644 include/MetroidPrime/CEffectComponent.hpp create mode 100644 include/MetroidPrime/CHierarchyPoseBuilder.hpp create mode 100644 include/MetroidPrime/CPASAnimState.hpp create mode 100644 include/MetroidPrime/CPASDatabase.hpp create mode 100644 include/MetroidPrime/CPOINode.hpp create mode 100644 include/MetroidPrime/CParticleData.hpp create mode 100644 include/MetroidPrime/CParticleDatabase.hpp create mode 100644 include/MetroidPrime/CPoseAsTransforms.hpp create mode 100644 include/rstl/construction_deferred.hpp create mode 100644 include/rstl/red_black_tree.hpp diff --git a/asm/Kyoto/Audio/DolphinCAudioSys.s b/asm/Kyoto/Audio/DolphinCAudioSys.s index 65a2b435..0919dd77 100644 --- a/asm/Kyoto/Audio/DolphinCAudioSys.s +++ b/asm/Kyoto/Audio/DolphinCAudioSys.s @@ -3471,8 +3471,8 @@ __sinit_DolphinCAudioSys_cpp: .section .sdata2, "a" .balign 8 -.global kMaxVolume__9CAudioSys -kMaxVolume__9CAudioSys: +.global kkMaxVolume__9CAudioSys +kkMaxVolume__9CAudioSys: # ROM: 0x3FB200 .byte 0x7F diff --git a/asm/MetroidPrime/CActor.s b/asm/MetroidPrime/CActor.s index 3c38247a..0c8371b3 100644 --- a/asm/MetroidPrime/CActor.s +++ b/asm/MetroidPrime/CActor.s @@ -422,8 +422,8 @@ SetTranslation__6CActorFRC9CVector3f: /* 80052F28 0004FE88 38 21 00 10 */ addi r1, r1, 0x10 /* 80052F2C 0004FE8C 4E 80 00 20 */ blr -.global ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager -ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager: +.global ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb +ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb: /* 80052F30 0004FE90 94 21 FF 20 */ stwu r1, -0xe0(r1) /* 80052F34 0004FE94 7C 08 02 A6 */ mflr r0 /* 80052F38 0004FE98 90 01 00 E4 */ stw r0, 0xe4(r1) @@ -3082,8 +3082,8 @@ lbl_80055400: /* 80055400 00052360 54 80 06 3F */ clrlwi. r0, r4, 0x18 /* 80055404 00052364 41 82 00 1C */ beq lbl_80055420 /* 80055408 00052368 80 83 00 10 */ lwz r4, 0x10(r3) -/* 8005540C 0005236C 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha -/* 80055410 00052370 38 63 C9 EC */ addi r3, r3, lbl_8056C9EC@l +/* 8005540C 0005236C 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha +/* 80055410 00052370 38 63 C9 EC */ addi r3, r3, mSoundPOINodes__9CAnimData@l /* 80055414 00052374 83 A4 02 18 */ lwz r29, 0x218(r4) /* 80055418 00052378 3B 23 00 04 */ addi r25, r3, 4 /* 8005541C 0005237C 48 00 00 08 */ b lbl_80055424 @@ -3126,7 +3126,7 @@ lbl_80055474: /* 800554A0 00052400 80 B9 00 34 */ lwz r5, 0x34(r25) /* 800554A4 00052404 C0 59 00 3C */ lfs f2, 0x3c(r25) /* 800554A8 00052408 C0 79 00 40 */ lfs f3, 0x40(r25) -/* 800554AC 0005240C 4B FF DA 85 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 800554AC 0005240C 4B FF DA 85 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb lbl_800554B0: /* 800554B0 00052410 3B 39 00 44 */ addi r25, r25, 0x44 /* 800554B4 00052414 3B 18 00 01 */ addi r24, r24, 1 @@ -3147,8 +3147,8 @@ lbl_800554E4: /* 800554E4 00052444 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 800554E8 00052448 41 82 00 1C */ beq lbl_80055504 /* 800554EC 0005244C 80 84 00 10 */ lwz r4, 0x10(r4) -/* 800554F0 00052450 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha -/* 800554F4 00052454 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 800554F0 00052450 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha +/* 800554F4 00052454 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 800554F8 00052458 83 A4 02 10 */ lwz r29, 0x210(r4) /* 800554FC 0005245C 3B 23 00 04 */ addi r25, r3, 4 /* 80055500 00052460 48 00 00 08 */ b lbl_80055508 @@ -3191,7 +3191,7 @@ lbl_80055558: /* 80055584 000524E4 39 21 00 24 */ addi r9, r1, 0x24 /* 80055588 000524E8 80 B9 00 34 */ lwz r5, 0x34(r25) /* 8005558C 000524EC 38 C0 00 14 */ li r6, 0x14 -/* 80055590 000524F0 4B FF D9 A1 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 80055590 000524F0 4B FF D9 A1 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 80055594 000524F4 48 00 00 30 */ b lbl_800555C4 lbl_80055598: /* 80055598 000524F8 2C 05 00 06 */ cmpwi r5, 6 @@ -3225,8 +3225,8 @@ lbl_800555F8: /* 800555F8 00052558 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 800555FC 0005255C 41 82 00 1C */ beq lbl_80055618 /* 80055600 00052560 80 84 00 10 */ lwz r4, 0x10(r4) -/* 80055604 00052564 3C 60 80 57 */ lis r3, lbl_8056C2B8@ha -/* 80055608 00052568 38 63 C2 B8 */ addi r3, r3, lbl_8056C2B8@l +/* 80055604 00052564 3C 60 80 57 */ lis r3, mParticlePOINodes__9CAnimData@ha +/* 80055608 00052568 38 63 C2 B8 */ addi r3, r3, mParticlePOINodes__9CAnimData@l /* 8005560C 0005256C 83 04 02 14 */ lwz r24, 0x214(r4) /* 80055610 00052570 3B 23 00 04 */ addi r25, r3, 4 /* 80055614 00052574 48 00 00 08 */ b lbl_8005561C @@ -3522,7 +3522,7 @@ lbl_800559AC: /* 80055A20 00052980 38 A0 FF FF */ li r5, -1 /* 80055A24 00052984 98 1F 00 B4 */ stb r0, 0xb4(r31) /* 80055A28 00052988 35 1F 00 DC */ addic. r8, r31, 0xdc -/* 80055A2C 0005298C 88 82 CC 40 */ lbz r4, kMaxVolume__9CAudioSys@sda21(r2) +/* 80055A2C 0005298C 88 82 CC 40 */ lbz r4, kkMaxVolume__9CAudioSys@sda21(r2) /* 80055A30 00052990 38 60 00 02 */ li r3, 2 /* 80055A34 00052994 88 E1 00 1D */ lbz r7, 0x1d(r1) /* 80055A38 00052998 38 00 00 00 */ li r0, 0 diff --git a/asm/MetroidPrime/CAnimData.s b/asm/MetroidPrime/CAnimData.s index 7c1b4ecc..df58ac4f 100644 --- a/asm/MetroidPrime/CAnimData.s +++ b/asm/MetroidPrime/CAnimData.s @@ -88,11 +88,11 @@ lbl_805A6DB0: .balign 8 .lcomm lbl_8045B140, 0x40, 4 -.comm lbl_8056A600, 0x17F4, 4 -.comm lbl_8056BDF4, 0x4C4, 4 -.comm lbl_8056C2B8, 0x734, 4 -.comm lbl_8056C9EC, 0x554, 4 -.comm lbl_8056CF40, 0x4C4, 4 +.comm mBoolPOINodes__9CAnimData, 0x17F4, 4 +.comm mInt32POINodes__9CAnimData, 0x4C4, 4 +.comm mParticlePOINodes__9CAnimData, 0x734, 4 +.comm mSoundPOINodes__9CAnimData, 0x554, 4 +.comm sInt32TransientCache, 0x4C4, 4 .section .sbss .balign 8 @@ -238,17 +238,17 @@ AdvanceAdditiveAnims__9CAnimDataFf: /* 800295A8 00026508 39 05 66 60 */ addi r8, r5, lbl_805A6660@l /* 800295AC 0002650C 7C 9D 23 78 */ mr r29, r4 /* 800295B0 00026510 C0 88 00 00 */ lfs f4, 0(r8) -/* 800295B4 00026514 3C E0 80 57 */ lis r7, lbl_8056BDF4@ha +/* 800295B4 00026514 3C E0 80 57 */ lis r7, mInt32POINodes__9CAnimData@ha /* 800295B8 00026518 C0 68 00 04 */ lfs f3, 4(r8) -/* 800295BC 0002651C 3C C0 80 57 */ lis r6, lbl_8056A600@ha +/* 800295BC 0002651C 3C C0 80 57 */ lis r6, mBoolPOINodes__9CAnimData@ha /* 800295C0 00026520 C0 48 00 08 */ lfs f2, 8(r8) -/* 800295C4 00026524 3C A0 80 57 */ lis r5, lbl_8056C2B8@ha +/* 800295C4 00026524 3C A0 80 57 */ lis r5, mParticlePOINodes__9CAnimData@ha /* 800295C8 00026528 C0 08 00 0C */ lfs f0, 0xc(r8) -/* 800295CC 0002652C 3C 80 80 57 */ lis r4, lbl_8056C9EC@ha -/* 800295D0 00026530 38 E7 BD F4 */ addi r7, r7, lbl_8056BDF4@l -/* 800295D4 00026534 38 C6 A6 00 */ addi r6, r6, lbl_8056A600@l -/* 800295D8 00026538 38 A5 C2 B8 */ addi r5, r5, lbl_8056C2B8@l -/* 800295DC 0002653C 38 84 C9 EC */ addi r4, r4, lbl_8056C9EC@l +/* 800295CC 0002652C 3C 80 80 57 */ lis r4, mSoundPOINodes__9CAnimData@ha +/* 800295D0 00026530 38 E7 BD F4 */ addi r7, r7, mInt32POINodes__9CAnimData@l +/* 800295D4 00026534 38 C6 A6 00 */ addi r6, r6, mBoolPOINodes__9CAnimData@l +/* 800295D8 00026538 38 A5 C2 B8 */ addi r5, r5, mParticlePOINodes__9CAnimData@l +/* 800295DC 0002653C 38 84 C9 EC */ addi r4, r4, mSoundPOINodes__9CAnimData@l /* 800295E0 00026540 D0 81 00 80 */ stfs f4, 0x80(r1) /* 800295E4 00026544 FF 80 08 90 */ fmr f28, f1 /* 800295E8 00026548 FF C0 F8 90 */ fmr f30, f31 @@ -2456,9 +2456,9 @@ SetRandomPlaybackRate__9CAnimDataFR9CRandom16: /* 8002B488 000283E8 93 C1 00 18 */ stw r30, 0x18(r1) /* 8002B48C 000283EC 93 A1 00 14 */ stw r29, 0x14(r1) /* 8002B490 000283F0 7C 7F 1B 78 */ mr r31, r3 -/* 8002B494 000283F4 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002B494 000283F4 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002B498 000283F8 80 1F 02 10 */ lwz r0, 0x210(r31) -/* 8002B49C 000283FC 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8002B49C 000283FC 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8002B4A0 00028400 7C 9D 23 78 */ mr r29, r4 /* 8002B4A4 00028404 38 63 00 04 */ addi r3, r3, 4 /* 8002B4A8 00028408 7C 09 03 A6 */ mtctr r0 @@ -2578,9 +2578,9 @@ lbl_8002B554: /* 8002B654 000285B4 41 82 02 30 */ beq lbl_8002B884 /* 8002B658 000285B8 48 00 31 C9 */ bl ResetPOILists__9CAnimDataFv /* 8002B65C 000285BC C0 0D 81 EC */ lfs f0, lbl_805A6DAC@sda21(r13) -/* 8002B660 000285C0 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002B660 000285C0 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002B664 000285C4 80 0D 81 E8 */ lwz r0, lbl_805A6DA8@sda21(r13) -/* 8002B668 000285C8 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8002B668 000285C8 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8002B66C 000285CC D0 01 00 58 */ stfs f0, 0x58(r1) /* 8002B670 000285D0 3A 83 00 04 */ addi r20, r3, 4 /* 8002B674 000285D4 80 7F 00 00 */ lwz r3, 0(r31) @@ -2747,9 +2747,9 @@ lbl_8002B884: /* 8002B8EC 0002884C 7F A3 EB 78 */ mr r3, r29 /* 8002B8F0 00028850 48 00 2F 31 */ bl ResetPOILists__9CAnimDataFv /* 8002B8F4 00028854 C0 0D 81 EC */ lfs f0, lbl_805A6DAC@sda21(r13) -/* 8002B8F8 00028858 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002B8F8 00028858 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002B8FC 0002885C 80 0D 81 E8 */ lwz r0, lbl_805A6DA8@sda21(r13) -/* 8002B900 00028860 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8002B900 00028860 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8002B904 00028864 D0 01 00 38 */ stfs f0, 0x38(r1) /* 8002B908 00028868 3B 03 00 04 */ addi r24, r3, 4 /* 8002B90C 0002886C 80 7F 00 00 */ lwz r3, 0(r31) @@ -3013,9 +3013,9 @@ lbl_8002BC9C: /* 8002BCEC 00028C4C 7F A3 EB 78 */ mr r3, r29 /* 8002BCF0 00028C50 48 00 2B 31 */ bl ResetPOILists__9CAnimDataFv /* 8002BCF4 00028C54 C0 0D 81 EC */ lfs f0, lbl_805A6DAC@sda21(r13) -/* 8002BCF8 00028C58 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002BCF8 00028C58 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002BCFC 00028C5C 80 0D 81 E8 */ lwz r0, lbl_805A6DA8@sda21(r13) -/* 8002BD00 00028C60 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8002BD00 00028C60 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8002BD04 00028C64 D0 01 00 10 */ stfs f0, 0x10(r1) /* 8002BD08 00028C68 3B 03 00 04 */ addi r24, r3, 4 /* 8002BD0C 00028C6C 80 7F 00 00 */ lwz r3, 0(r31) @@ -4558,14 +4558,14 @@ lbl_8002D310: /* 8002D330 0002A290 88 1A 02 20 */ lbz r0, 0x220(r26) /* 8002D334 0002A294 54 00 D7 FF */ rlwinm. r0, r0, 0x1a, 0x1f, 0x1f /* 8002D338 0002A298 41 82 01 2C */ beq lbl_8002D464 -/* 8002D33C 0002A29C 3C C0 80 57 */ lis r6, lbl_8056BDF4@ha -/* 8002D340 0002A2A0 3C A0 80 57 */ lis r5, lbl_8056A600@ha -/* 8002D344 0002A2A4 3C 80 80 57 */ lis r4, lbl_8056C2B8@ha -/* 8002D348 0002A2A8 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha -/* 8002D34C 0002A2AC 38 C6 BD F4 */ addi r6, r6, lbl_8056BDF4@l -/* 8002D350 0002A2B0 38 A5 A6 00 */ addi r5, r5, lbl_8056A600@l -/* 8002D354 0002A2B4 38 84 C2 B8 */ addi r4, r4, lbl_8056C2B8@l -/* 8002D358 0002A2B8 38 63 C9 EC */ addi r3, r3, lbl_8056C9EC@l +/* 8002D33C 0002A29C 3C C0 80 57 */ lis r6, mInt32POINodes__9CAnimData@ha +/* 8002D340 0002A2A0 3C A0 80 57 */ lis r5, mBoolPOINodes__9CAnimData@ha +/* 8002D344 0002A2A4 3C 80 80 57 */ lis r4, mParticlePOINodes__9CAnimData@ha +/* 8002D348 0002A2A8 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha +/* 8002D34C 0002A2AC 38 C6 BD F4 */ addi r6, r6, mInt32POINodes__9CAnimData@l +/* 8002D350 0002A2B0 38 A5 A6 00 */ addi r5, r5, mBoolPOINodes__9CAnimData@l +/* 8002D354 0002A2B4 38 84 C2 B8 */ addi r4, r4, mParticlePOINodes__9CAnimData@l +/* 8002D358 0002A2B8 38 63 C9 EC */ addi r3, r3, mSoundPOINodes__9CAnimData@l /* 8002D35C 0002A2BC C3 82 83 D0 */ lfs f28, lbl_805AA0F0@sda21(r2) /* 8002D360 0002A2C0 3B E6 00 04 */ addi r31, r6, 4 /* 8002D364 0002A2C4 C3 62 83 D4 */ lfs f27, lbl_805AA0F4@sda21(r2) @@ -4642,14 +4642,14 @@ lbl_8002D464: /* 8002D474 0002A3D4 81 8C 00 14 */ lwz r12, 0x14(r12) /* 8002D478 0002A3D8 7D 89 03 A6 */ mtctr r12 /* 8002D47C 0002A3DC 4E 80 04 21 */ bctrl -/* 8002D480 0002A3E0 3C C0 80 57 */ lis r6, lbl_8056BDF4@ha -/* 8002D484 0002A3E4 3C A0 80 57 */ lis r5, lbl_8056A600@ha -/* 8002D488 0002A3E8 3C 80 80 57 */ lis r4, lbl_8056C2B8@ha -/* 8002D48C 0002A3EC 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha -/* 8002D490 0002A3F0 38 E6 BD F4 */ addi r7, r6, lbl_8056BDF4@l -/* 8002D494 0002A3F4 38 C5 A6 00 */ addi r6, r5, lbl_8056A600@l -/* 8002D498 0002A3F8 38 A4 C2 B8 */ addi r5, r4, lbl_8056C2B8@l -/* 8002D49C 0002A3FC 38 83 C9 EC */ addi r4, r3, lbl_8056C9EC@l +/* 8002D480 0002A3E0 3C C0 80 57 */ lis r6, mInt32POINodes__9CAnimData@ha +/* 8002D484 0002A3E4 3C A0 80 57 */ lis r5, mBoolPOINodes__9CAnimData@ha +/* 8002D488 0002A3E8 3C 80 80 57 */ lis r4, mParticlePOINodes__9CAnimData@ha +/* 8002D48C 0002A3EC 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha +/* 8002D490 0002A3F0 38 E6 BD F4 */ addi r7, r6, mInt32POINodes__9CAnimData@l +/* 8002D494 0002A3F4 38 C5 A6 00 */ addi r6, r5, mBoolPOINodes__9CAnimData@l +/* 8002D498 0002A3F8 38 A4 C2 B8 */ addi r5, r4, mParticlePOINodes__9CAnimData@l +/* 8002D49C 0002A3FC 38 83 C9 EC */ addi r4, r3, mSoundPOINodes__9CAnimData@l /* 8002D4A0 0002A400 3C 60 80 5A */ lis r3, sZeroVector__9CVector3f@ha /* 8002D4A4 0002A404 C3 41 00 20 */ lfs f26, 0x20(r1) /* 8002D4A8 0002A408 C3 62 83 D0 */ lfs f27, lbl_805AA0F0@sda21(r2) @@ -4867,9 +4867,9 @@ Advance__9CAnimDataFfRC9CVector3fR13CStateManagerb: /* 8002D7C8 0002A728 38 79 01 20 */ addi r3, r25, 0x120 /* 8002D7CC 0002A72C 48 08 A4 6D */ bl SuspendAllActiveEffects__17CParticleDatabaseFR13CStateManager lbl_8002D7D0: -/* 8002D7D0 0002A730 3C 60 80 57 */ lis r3, lbl_8056C2B8@ha +/* 8002D7D0 0002A730 3C 60 80 57 */ lis r3, mParticlePOINodes__9CAnimData@ha /* 8002D7D4 0002A734 83 D9 02 14 */ lwz r30, 0x214(r25) -/* 8002D7D8 0002A738 38 63 C2 B8 */ addi r3, r3, lbl_8056C2B8@l +/* 8002D7D8 0002A738 38 63 C2 B8 */ addi r3, r3, mParticlePOINodes__9CAnimData@l /* 8002D7DC 0002A73C 3B A0 00 00 */ li r29, 0 /* 8002D7E0 0002A740 3B E3 00 04 */ addi r31, r3, 4 /* 8002D7E4 0002A744 48 00 00 58 */ b lbl_8002D83C @@ -5147,8 +5147,8 @@ lbl_8002DBC4: /* 8002DBD4 0002AB34 41 82 00 E4 */ beq lbl_8002DCB8 lbl_8002DBD8: /* 8002DBD8 0002AB38 80 1A 02 10 */ lwz r0, 0x210(r26) -/* 8002DBDC 0002AB3C 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha -/* 8002DBE0 0002AB40 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8002DBDC 0002AB3C 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha +/* 8002DBE0 0002AB40 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8002DBE4 0002AB44 2C 00 00 00 */ cmpwi r0, 0 /* 8002DBE8 0002AB48 38 A3 00 04 */ addi r5, r3, 4 /* 8002DBEC 0002AB4C 40 81 00 CC */ ble lbl_8002DCB8 @@ -5533,10 +5533,10 @@ lbl_8002E138: FreeCache__9CAnimDataFv: /* 8002E168 0002B0C8 94 21 FF E0 */ stwu r1, -0x20(r1) /* 8002E16C 0002B0CC 7C 08 02 A6 */ mflr r0 -/* 8002E170 0002B0D0 3C 60 80 57 */ lis r3, lbl_8056CF40@ha +/* 8002E170 0002B0D0 3C 60 80 57 */ lis r3, sInt32TransientCache@ha /* 8002E174 0002B0D4 90 01 00 24 */ stw r0, 0x24(r1) /* 8002E178 0002B0D8 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8002E17C 0002B0DC 3B E3 CF 40 */ addi r31, r3, lbl_8056CF40@l +/* 8002E17C 0002B0DC 3B E3 CF 40 */ addi r31, r3, sInt32TransientCache@l /* 8002E180 0002B0E0 93 C1 00 18 */ stw r30, 0x18(r1) /* 8002E184 0002B0E4 3B C0 00 00 */ li r30, 0 /* 8002E188 0002B0E8 93 A1 00 14 */ stw r29, 0x14(r1) @@ -5556,9 +5556,9 @@ lbl_8002E1B4: /* 8002E1B8 0002B118 7C 1E 00 00 */ cmpw r30, r0 /* 8002E1BC 0002B11C 41 80 FF D8 */ blt lbl_8002E194 /* 8002E1C0 0002B120 38 00 00 00 */ li r0, 0 -/* 8002E1C4 0002B124 3C 60 80 57 */ lis r3, lbl_8056CF40@ha +/* 8002E1C4 0002B124 3C 60 80 57 */ lis r3, sInt32TransientCache@ha /* 8002E1C8 0002B128 90 0D A1 0C */ stw r0, lbl_805A8CCC@sda21(r13) -/* 8002E1CC 0002B12C 90 03 CF 40 */ stw r0, lbl_8056CF40@l(r3) +/* 8002E1CC 0002B12C 90 03 CF 40 */ stw r0, sInt32TransientCache@l(r3) /* 8002E1D0 0002B130 83 E1 00 1C */ lwz r31, 0x1c(r1) /* 8002E1D4 0002B134 83 C1 00 18 */ lwz r30, 0x18(r1) /* 8002E1D8 0002B138 80 01 00 24 */ lwz r0, 0x24(r1) @@ -5571,11 +5571,11 @@ lbl_8002E1B4: InitializeCache__9CAnimDataFv: /* 8002E1EC 0002B14C 94 21 FF 60 */ stwu r1, -0xa0(r1) /* 8002E1F0 0002B150 7C 08 02 A6 */ mflr r0 -/* 8002E1F4 0002B154 3C 60 80 57 */ lis r3, lbl_8056CF40@ha +/* 8002E1F4 0002B154 3C 60 80 57 */ lis r3, sInt32TransientCache@ha /* 8002E1F8 0002B158 90 01 00 A4 */ stw r0, 0xa4(r1) /* 8002E1FC 0002B15C 93 E1 00 9C */ stw r31, 0x9c(r1) /* 8002E200 0002B160 93 C1 00 98 */ stw r30, 0x98(r1) -/* 8002E204 0002B164 3B C3 CF 40 */ addi r30, r3, lbl_8056CF40@l +/* 8002E204 0002B164 3B C3 CF 40 */ addi r30, r3, sInt32TransientCache@l /* 8002E208 0002B168 3B FE 00 04 */ addi r31, r30, 4 /* 8002E20C 0002B16C 93 A1 00 94 */ stw r29, 0x94(r1) /* 8002E210 0002B170 3B A0 00 00 */ li r29, 0 @@ -5595,9 +5595,9 @@ lbl_8002E240: /* 8002E240 0002B1A0 80 1E 00 00 */ lwz r0, 0(r30) /* 8002E244 0002B1A4 7C 1D 00 00 */ cmpw r29, r0 /* 8002E248 0002B1A8 41 80 FF D8 */ blt lbl_8002E220 -/* 8002E24C 0002B1AC 3C 80 80 57 */ lis r4, lbl_8056CF40@ha +/* 8002E24C 0002B1AC 3C 80 80 57 */ lis r4, sInt32TransientCache@ha /* 8002E250 0002B1B0 3C 60 80 3D */ lis r3, lbl_803CCD20@ha -/* 8002E254 0002B1B4 38 A4 CF 40 */ addi r5, r4, lbl_8056CF40@l +/* 8002E254 0002B1B4 38 A4 CF 40 */ addi r5, r4, sInt32TransientCache@l /* 8002E258 0002B1B8 38 00 00 00 */ li r0, 0 /* 8002E25C 0002B1BC 38 83 CD 20 */ addi r4, r3, lbl_803CCD20@l /* 8002E260 0002B1C0 90 05 00 00 */ stw r0, 0(r5) @@ -5626,9 +5626,9 @@ lbl_8002E240: /* 8002E2BC 0002B21C 39 20 FF FF */ li r9, -1 /* 8002E2C0 0002B220 39 40 00 00 */ li r10, 0 /* 8002E2C4 0002B224 4B FF D0 C9 */ bl "__ct__13CInt32POINodeFQ24rstl66basic_string,Q24rstl17rmemory_allocator>UsRC13CCharAnimTimeibfiiiRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" -/* 8002E2C8 0002B228 3C 60 80 57 */ lis r3, lbl_8056CF40@ha +/* 8002E2C8 0002B228 3C 60 80 57 */ lis r3, sInt32TransientCache@ha /* 8002E2CC 0002B22C 38 A1 00 38 */ addi r5, r1, 0x38 -/* 8002E2D0 0002B230 38 63 CF 40 */ addi r3, r3, lbl_8056CF40@l +/* 8002E2D0 0002B230 38 63 CF 40 */ addi r3, r3, sInt32TransientCache@l /* 8002E2D4 0002B234 38 80 00 10 */ li r4, 0x10 /* 8002E2D8 0002B238 48 00 00 69 */ bl "uninitialized_fill_n__4rstlFP13CInt32POINodeiRC13CInt32POINode" /* 8002E2DC 0002B23C 3C 80 80 3E */ lis r4, lbl_803D9B98@ha @@ -6289,9 +6289,9 @@ __dt__9CAnimDataFv: /* 8002EBE0 0002BB40 34 03 FF FF */ addic. r0, r3, -1 /* 8002EBE4 0002BB44 90 0D A1 08 */ stw r0, lbl_805A8CC8@sda21(r13) /* 8002EBE8 0002BB48 40 82 01 34 */ bne lbl_8002ED1C -/* 8002EBEC 0002BB4C 3C 60 80 57 */ lis r3, lbl_8056A600@ha +/* 8002EBEC 0002BB4C 3C 60 80 57 */ lis r3, mBoolPOINodes__9CAnimData@ha /* 8002EBF0 0002BB50 3B 80 00 00 */ li r28, 0 -/* 8002EBF4 0002BB54 3B A3 A6 00 */ addi r29, r3, lbl_8056A600@l +/* 8002EBF4 0002BB54 3B A3 A6 00 */ addi r29, r3, mBoolPOINodes__9CAnimData@l /* 8002EBF8 0002BB58 3B 7D 00 04 */ addi r27, r29, 4 /* 8002EBFC 0002BB5C 48 00 00 24 */ b lbl_8002EC20 lbl_8002EC00: @@ -6307,12 +6307,12 @@ lbl_8002EC20: /* 8002EC20 0002BB80 80 1D 00 00 */ lwz r0, 0(r29) /* 8002EC24 0002BB84 7C 1C 00 00 */ cmpw r28, r0 /* 8002EC28 0002BB88 41 80 FF D8 */ blt lbl_8002EC00 -/* 8002EC2C 0002BB8C 3C 60 80 57 */ lis r3, lbl_8056A600@ha +/* 8002EC2C 0002BB8C 3C 60 80 57 */ lis r3, mBoolPOINodes__9CAnimData@ha /* 8002EC30 0002BB90 3B 80 00 00 */ li r28, 0 -/* 8002EC34 0002BB94 38 83 A6 00 */ addi r4, r3, lbl_8056A600@l -/* 8002EC38 0002BB98 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002EC34 0002BB94 38 83 A6 00 */ addi r4, r3, mBoolPOINodes__9CAnimData@l +/* 8002EC38 0002BB98 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002EC3C 0002BB9C 93 84 00 00 */ stw r28, 0(r4) -/* 8002EC40 0002BBA0 3B A3 BD F4 */ addi r29, r3, lbl_8056BDF4@l +/* 8002EC40 0002BBA0 3B A3 BD F4 */ addi r29, r3, mInt32POINodes__9CAnimData@l /* 8002EC44 0002BBA4 3B 7D 00 04 */ addi r27, r29, 4 /* 8002EC48 0002BBA8 48 00 00 24 */ b lbl_8002EC6C lbl_8002EC4C: @@ -6328,12 +6328,12 @@ lbl_8002EC6C: /* 8002EC6C 0002BBCC 80 1D 00 00 */ lwz r0, 0(r29) /* 8002EC70 0002BBD0 7C 1C 00 00 */ cmpw r28, r0 /* 8002EC74 0002BBD4 41 80 FF D8 */ blt lbl_8002EC4C -/* 8002EC78 0002BBD8 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002EC78 0002BBD8 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002EC7C 0002BBDC 3B 80 00 00 */ li r28, 0 -/* 8002EC80 0002BBE0 38 83 BD F4 */ addi r4, r3, lbl_8056BDF4@l -/* 8002EC84 0002BBE4 3C 60 80 57 */ lis r3, lbl_8056C2B8@ha +/* 8002EC80 0002BBE0 38 83 BD F4 */ addi r4, r3, mInt32POINodes__9CAnimData@l +/* 8002EC84 0002BBE4 3C 60 80 57 */ lis r3, mParticlePOINodes__9CAnimData@ha /* 8002EC88 0002BBE8 93 84 00 00 */ stw r28, 0(r4) -/* 8002EC8C 0002BBEC 3B A3 C2 B8 */ addi r29, r3, lbl_8056C2B8@l +/* 8002EC8C 0002BBEC 3B A3 C2 B8 */ addi r29, r3, mParticlePOINodes__9CAnimData@l /* 8002EC90 0002BBF0 3B 7D 00 04 */ addi r27, r29, 4 /* 8002EC94 0002BBF4 48 00 00 24 */ b lbl_8002ECB8 lbl_8002EC98: @@ -6349,12 +6349,12 @@ lbl_8002ECB8: /* 8002ECB8 0002BC18 80 1D 00 00 */ lwz r0, 0(r29) /* 8002ECBC 0002BC1C 7C 1C 00 00 */ cmpw r28, r0 /* 8002ECC0 0002BC20 41 80 FF D8 */ blt lbl_8002EC98 -/* 8002ECC4 0002BC24 3C 60 80 57 */ lis r3, lbl_8056C2B8@ha +/* 8002ECC4 0002BC24 3C 60 80 57 */ lis r3, mParticlePOINodes__9CAnimData@ha /* 8002ECC8 0002BC28 3B 80 00 00 */ li r28, 0 -/* 8002ECCC 0002BC2C 38 83 C2 B8 */ addi r4, r3, lbl_8056C2B8@l -/* 8002ECD0 0002BC30 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha +/* 8002ECCC 0002BC2C 38 83 C2 B8 */ addi r4, r3, mParticlePOINodes__9CAnimData@l +/* 8002ECD0 0002BC30 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha /* 8002ECD4 0002BC34 93 84 00 00 */ stw r28, 0(r4) -/* 8002ECD8 0002BC38 3B A3 C9 EC */ addi r29, r3, lbl_8056C9EC@l +/* 8002ECD8 0002BC38 3B A3 C9 EC */ addi r29, r3, mSoundPOINodes__9CAnimData@l /* 8002ECDC 0002BC3C 3B 7D 00 04 */ addi r27, r29, 4 /* 8002ECE0 0002BC40 48 00 00 24 */ b lbl_8002ED04 lbl_8002ECE4: @@ -6370,9 +6370,9 @@ lbl_8002ED04: /* 8002ED04 0002BC64 80 1D 00 00 */ lwz r0, 0(r29) /* 8002ED08 0002BC68 7C 1C 00 00 */ cmpw r28, r0 /* 8002ED0C 0002BC6C 41 80 FF D8 */ blt lbl_8002ECE4 -/* 8002ED10 0002BC70 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha +/* 8002ED10 0002BC70 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha /* 8002ED14 0002BC74 38 00 00 00 */ li r0, 0 -/* 8002ED18 0002BC78 90 03 C9 EC */ stw r0, lbl_8056C9EC@l(r3) +/* 8002ED18 0002BC78 90 03 C9 EC */ stw r0, mSoundPOINodes__9CAnimData@l(r3) lbl_8002ED1C: /* 8002ED1C 0002BC7C 34 1E 04 34 */ addic. r0, r30, 0x434 /* 8002ED20 0002BC80 41 82 00 50 */ beq lbl_8002ED70 @@ -7465,8 +7465,8 @@ lbl_8002F9A8: /* 8002FC0C 0002CB6C 39 20 FF FF */ li r9, -1 /* 8002FC10 0002CB70 39 40 00 00 */ li r10, 0 /* 8002FC14 0002CB74 48 00 08 71 */ bl "__ct__12CBoolPOINodeFQ24rstl66basic_string,Q24rstl17rmemory_allocator>UsRC13CCharAnimTimeibfiib" -/* 8002FC18 0002CB78 3C 60 80 57 */ lis r3, lbl_8056A600@ha -/* 8002FC1C 0002CB7C 38 63 A6 00 */ addi r3, r3, lbl_8056A600@l +/* 8002FC18 0002CB78 3C 60 80 57 */ lis r3, mBoolPOINodes__9CAnimData@ha +/* 8002FC1C 0002CB7C 38 63 A6 00 */ addi r3, r3, mBoolPOINodes__9CAnimData@l /* 8002FC20 0002CB80 80 83 00 00 */ lwz r4, 0(r3) /* 8002FC24 0002CB84 2C 04 00 08 */ cmpwi r4, 8 /* 8002FC28 0002CB88 40 80 00 B8 */ bge lbl_8002FCE0 @@ -7515,9 +7515,9 @@ lbl_8002FCC4: lbl_8002FCCC: /* 8002FCCC 0002CC2C 7C 1C D0 00 */ cmpw r28, r26 /* 8002FCD0 0002CC30 41 80 FF 78 */ blt lbl_8002FC48 -/* 8002FCD4 0002CC34 3C 60 80 57 */ lis r3, lbl_8056A600@ha +/* 8002FCD4 0002CC34 3C 60 80 57 */ lis r3, mBoolPOINodes__9CAnimData@ha /* 8002FCD8 0002CC38 38 00 00 08 */ li r0, 8 -/* 8002FCDC 0002CC3C 90 03 A6 00 */ stw r0, lbl_8056A600@l(r3) +/* 8002FCDC 0002CC3C 90 03 A6 00 */ stw r0, mBoolPOINodes__9CAnimData@l(r3) lbl_8002FCE0: /* 8002FCE0 0002CC40 3C 60 80 3E */ lis r3, lbl_803D9B68@ha /* 8002FCE4 0002CC44 3C 80 80 3E */ lis r4, lbl_803D9B8C@ha @@ -7558,9 +7558,9 @@ lbl_8002FD04: /* 8002FD6C 0002CCCC 39 20 FF FF */ li r9, -1 /* 8002FD70 0002CCD0 39 40 00 00 */ li r10, 0 /* 8002FD74 0002CCD4 4B FF B6 19 */ bl "__ct__13CInt32POINodeFQ24rstl66basic_string,Q24rstl17rmemory_allocator>UsRC13CCharAnimTimeibfiiiRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" -/* 8002FD78 0002CCD8 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 8002FD78 0002CCD8 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 8002FD7C 0002CCDC 38 A1 02 50 */ addi r5, r1, 0x250 -/* 8002FD80 0002CCE0 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8002FD80 0002CCE0 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8002FD84 0002CCE4 38 80 00 10 */ li r4, 0x10 /* 8002FD88 0002CCE8 4B FF E5 B9 */ bl "uninitialized_fill_n__4rstlFP13CInt32POINodeiRC13CInt32POINode" /* 8002FD8C 0002CCEC 3C 80 80 3E */ lis r4, lbl_803D9B98@ha @@ -7618,9 +7618,9 @@ lbl_8002FDBC: /* 8002FE54 0002CDB4 39 20 FF FF */ li r9, -1 /* 8002FE58 0002CDB8 39 40 00 00 */ li r10, 0 /* 8002FE5C 0002CDBC 48 00 05 AD */ bl sub_80030408 -/* 8002FE60 0002CDC0 3C 60 80 57 */ lis r3, lbl_8056C2B8@ha +/* 8002FE60 0002CDC0 3C 60 80 57 */ lis r3, mParticlePOINodes__9CAnimData@ha /* 8002FE64 0002CDC4 38 A1 01 F4 */ addi r5, r1, 0x1f4 -/* 8002FE68 0002CDC8 38 63 C2 B8 */ addi r3, r3, lbl_8056C2B8@l +/* 8002FE68 0002CDC8 38 63 C2 B8 */ addi r3, r3, mParticlePOINodes__9CAnimData@l /* 8002FE6C 0002CDCC 38 80 00 14 */ li r4, 0x14 /* 8002FE70 0002CDD0 48 00 04 4D */ bl sub_800302bc /* 8002FE74 0002CDD4 3C 60 80 3E */ lis r3, lbl_803D9B74@ha @@ -7672,9 +7672,9 @@ lbl_8002FEBC: /* 8002FF20 0002CE80 39 20 FF FF */ li r9, -1 /* 8002FF24 0002CE84 39 40 00 00 */ li r10, 0 /* 8002FF28 0002CE88 48 00 03 29 */ bl "__ct__13CSoundPOINodeFQ24rstl66basic_string,Q24rstl17rmemory_allocator>UsRC13CCharAnimTimeibfiiiff" -/* 8002FF2C 0002CE8C 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha +/* 8002FF2C 0002CE8C 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha /* 8002FF30 0002CE90 38 A1 01 B0 */ addi r5, r1, 0x1b0 -/* 8002FF34 0002CE94 38 63 C9 EC */ addi r3, r3, lbl_8056C9EC@l +/* 8002FF34 0002CE94 38 63 C9 EC */ addi r3, r3, mSoundPOINodes__9CAnimData@l /* 8002FF38 0002CE98 38 80 00 14 */ li r4, 0x14 /* 8002FF3C 0002CE9C 48 00 02 21 */ bl sub_8003015c /* 8002FF40 0002CEA0 3C 60 80 3E */ lis r3, lbl_803D9B80@ha @@ -9634,38 +9634,38 @@ __sinit_CAnimData_cpp: /* 80031980 0002E8E0 3C A0 80 46 */ lis r5, lbl_8045B140@ha /* 80031984 0002E8E4 90 01 00 14 */ stw r0, 0x14(r1) /* 80031988 0002E8E8 38 00 00 00 */ li r0, 0 -/* 8003198C 0002E8EC 3C 60 80 57 */ lis r3, lbl_8056A600@ha +/* 8003198C 0002E8EC 3C 60 80 57 */ lis r3, mBoolPOINodes__9CAnimData@ha /* 80031990 0002E8F0 38 84 1C 00 */ addi r4, r4, "__dt__Q24rstl33reserved_vector<12CBoolPOINode,8>Fv"@l /* 80031994 0002E8F4 93 E1 00 0C */ stw r31, 0xc(r1) /* 80031998 0002E8F8 3B E5 B1 40 */ addi r31, r5, lbl_8045B140@l /* 8003199C 0002E8FC 38 BF 00 00 */ addi r5, r31, 0 -/* 800319A0 0002E900 94 03 A6 00 */ stwu r0, lbl_8056A600@l(r3) +/* 800319A0 0002E900 94 03 A6 00 */ stwu r0, mBoolPOINodes__9CAnimData@l(r3) /* 800319A4 0002E904 48 35 7C E9 */ bl __register_global_object /* 800319A8 0002E908 38 00 00 00 */ li r0, 0 -/* 800319AC 0002E90C 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha +/* 800319AC 0002E90C 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha /* 800319B0 0002E910 3C 80 80 03 */ lis r4, "__dt__Q24rstl35reserved_vector<13CInt32POINode,16>Fv"@ha -/* 800319B4 0002E914 94 03 BD F4 */ stwu r0, lbl_8056BDF4@l(r3) +/* 800319B4 0002E914 94 03 BD F4 */ stwu r0, mInt32POINodes__9CAnimData@l(r3) /* 800319B8 0002E918 38 84 1B 64 */ addi r4, r4, "__dt__Q24rstl35reserved_vector<13CInt32POINode,16>Fv"@l /* 800319BC 0002E91C 38 BF 00 0C */ addi r5, r31, 0xc /* 800319C0 0002E920 48 35 7C CD */ bl __register_global_object /* 800319C4 0002E924 38 00 00 00 */ li r0, 0 -/* 800319C8 0002E928 3C 60 80 57 */ lis r3, lbl_8056C2B8@ha +/* 800319C8 0002E928 3C 60 80 57 */ lis r3, mParticlePOINodes__9CAnimData@ha /* 800319CC 0002E92C 3C 80 80 03 */ lis r4, "__dt__Q24rstl38reserved_vector<16CParticlePOINode,20>Fv"@ha -/* 800319D0 0002E930 94 03 C2 B8 */ stwu r0, lbl_8056C2B8@l(r3) +/* 800319D0 0002E930 94 03 C2 B8 */ stwu r0, mParticlePOINodes__9CAnimData@l(r3) /* 800319D4 0002E934 38 84 1A C8 */ addi r4, r4, "__dt__Q24rstl38reserved_vector<16CParticlePOINode,20>Fv"@l /* 800319D8 0002E938 38 BF 00 18 */ addi r5, r31, 0x18 /* 800319DC 0002E93C 48 35 7C B1 */ bl __register_global_object /* 800319E0 0002E940 38 00 00 00 */ li r0, 0 -/* 800319E4 0002E944 3C 60 80 57 */ lis r3, lbl_8056C9EC@ha +/* 800319E4 0002E944 3C 60 80 57 */ lis r3, mSoundPOINodes__9CAnimData@ha /* 800319E8 0002E948 3C 80 80 03 */ lis r4, "__dt__Q24rstl35reserved_vector<13CSoundPOINode,20>Fv"@ha -/* 800319EC 0002E94C 94 03 C9 EC */ stwu r0, lbl_8056C9EC@l(r3) +/* 800319EC 0002E94C 94 03 C9 EC */ stwu r0, mSoundPOINodes__9CAnimData@l(r3) /* 800319F0 0002E950 38 84 1A 2C */ addi r4, r4, "__dt__Q24rstl35reserved_vector<13CSoundPOINode,20>Fv"@l /* 800319F4 0002E954 38 BF 00 24 */ addi r5, r31, 0x24 /* 800319F8 0002E958 48 35 7C 95 */ bl __register_global_object /* 800319FC 0002E95C 38 00 00 00 */ li r0, 0 -/* 80031A00 0002E960 3C 60 80 57 */ lis r3, lbl_8056CF40@ha +/* 80031A00 0002E960 3C 60 80 57 */ lis r3, sInt32TransientCache@ha /* 80031A04 0002E964 3C 80 80 03 */ lis r4, "__dt__Q24rstl35reserved_vector<13CInt32POINode,16>Fv"@ha -/* 80031A08 0002E968 94 03 CF 40 */ stwu r0, lbl_8056CF40@l(r3) +/* 80031A08 0002E968 94 03 CF 40 */ stwu r0, sInt32TransientCache@l(r3) /* 80031A0C 0002E96C 38 84 1B 64 */ addi r4, r4, "__dt__Q24rstl35reserved_vector<13CInt32POINode,16>Fv"@l /* 80031A10 0002E970 38 BF 00 30 */ addi r5, r31, 0x30 /* 80031A14 0002E974 48 35 7C 79 */ bl __register_global_object diff --git a/asm/MetroidPrime/CStateManager.s b/asm/MetroidPrime/CStateManager.s index bada97f0..2ccbfd92 100644 --- a/asm/MetroidPrime/CStateManager.s +++ b/asm/MetroidPrime/CStateManager.s @@ -868,7 +868,7 @@ lbl_80044370: /* 80044394 000412F4 48 26 E0 5D */ bl GetAudibleFallOff__22CCollisionResponseDataCFv /* 80044398 000412F8 C0 82 85 68 */ lfs f4, lbl_805AA288@sda21(r2) /* 8004439C 000412FC 38 C0 00 00 */ li r6, 0 -/* 800443A0 00041300 88 A2 CC 40 */ lbz r5, kMaxVolume__9CAudioSys@sda21(r2) +/* 800443A0 00041300 88 A2 CC 40 */ lbz r5, kkMaxVolume__9CAudioSys@sda21(r2) /* 800443A4 00041304 38 E0 00 01 */ li r7, 1 /* 800443A8 00041308 88 02 CC 41 */ lbz r0, lbl_805AE961@sda21(r2) /* 800443AC 0004130C 38 80 00 14 */ li r4, 0x14 diff --git a/asm/MetroidPrime/Cameras/CCameraManager.s b/asm/MetroidPrime/Cameras/CCameraManager.s index 310aa335..5baac905 100644 --- a/asm/MetroidPrime/Cameras/CCameraManager.s +++ b/asm/MetroidPrime/Cameras/CCameraManager.s @@ -3096,7 +3096,7 @@ UpdateSfxListener__14CCameraManagerFR13CStateManager: /* 8000BA80 000089E0 C0 21 00 78 */ lfs f1, 0x78(r1) /* 8000BA84 000089E4 C0 01 00 88 */ lfs f0, 0x88(r1) /* 8000BA88 000089E8 D1 01 00 08 */ stfs f8, 8(r1) -/* 8000BA8C 000089EC 88 E2 CC 40 */ lbz r7, kMaxVolume__9CAudioSys@sda21(r2) +/* 8000BA8C 000089EC 88 E2 CC 40 */ lbz r7, kkMaxVolume__9CAudioSys@sda21(r2) /* 8000BA90 000089F0 D0 E1 00 0C */ stfs f7, 0xc(r1) /* 8000BA94 000089F4 D0 C1 00 10 */ stfs f6, 0x10(r1) /* 8000BA98 000089F8 D0 A1 00 14 */ stfs f5, 0x14(r1) @@ -3613,7 +3613,7 @@ __ct__14CCameraManagerF9TUniqueId: /* 8000C190 000090F0 38 E1 00 08 */ addi r7, r1, 8 /* 8000C194 000090F4 91 7F 00 80 */ stw r11, 0x80(r31) /* 8000C198 000090F8 38 60 00 01 */ li r3, 1 -/* 8000C19C 000090FC 89 22 CC 40 */ lbz r9, kMaxVolume__9CAudioSys@sda21(r2) +/* 8000C19C 000090FC 89 22 CC 40 */ lbz r9, kkMaxVolume__9CAudioSys@sda21(r2) /* 8000C1A0 00009100 39 00 00 01 */ li r8, 1 /* 8000C1A4 00009104 91 7F 00 84 */ stw r11, 0x84(r31) /* 8000C1A8 00009108 91 7F 00 88 */ stw r11, 0x88(r31) diff --git a/asm/MetroidPrime/Enemies/CBabygoth.s b/asm/MetroidPrime/Enemies/CBabygoth.s index 7170578c..94a9d879 100644 --- a/asm/MetroidPrime/Enemies/CBabygoth.s +++ b/asm/MetroidPrime/Enemies/CBabygoth.s @@ -692,7 +692,7 @@ lbl_8021D938: /* 8021D948 0021A8A8 4B E2 F3 AD */ bl AddObject__13CStateManagerFP7CEntityQ213CStateManager18EScriptPersistence /* 8021D94C 0021A8AC 57 C0 06 3F */ clrlwi. r0, r30, 0x18 /* 8021D950 0021A8B0 41 82 00 2C */ beq lbl_8021D97C -/* 8021D954 0021A8B4 88 A2 CC 40 */ lbz r5, kMaxVolume__9CAudioSys@sda21(r2) +/* 8021D954 0021A8B4 88 A2 CC 40 */ lbz r5, kkMaxVolume__9CAudioSys@sda21(r2) /* 8021D958 0021A8B8 7F A4 EB 78 */ mr r4, r29 /* 8021D95C 0021A8BC A9 02 C5 FA */ lha r8, lbl_805AE31A@sda21(r2) /* 8021D960 0021A8C0 38 61 00 2C */ addi r3, r1, 0x2c diff --git a/asm/MetroidPrime/Enemies/CGrenadeLauncher.s b/asm/MetroidPrime/Enemies/CGrenadeLauncher.s index 76a7218a..5a428eca 100644 --- a/asm/MetroidPrime/Enemies/CGrenadeLauncher.s +++ b/asm/MetroidPrime/Enemies/CGrenadeLauncher.s @@ -336,7 +336,7 @@ lbl_8022F8D0: /* 8022F8E0 0022C840 4B E1 D4 15 */ bl AddObject__13CStateManagerFP7CEntityQ213CStateManager18EScriptPersistence /* 8022F8E4 0022C844 A0 9E 03 14 */ lhz r4, 0x314(r30) /* 8022F8E8 0022C848 38 61 00 28 */ addi r3, r1, 0x28 -/* 8022F8EC 0022C84C 88 A2 CC 40 */ lbz r5, kMaxVolume__9CAudioSys@sda21(r2) +/* 8022F8EC 0022C84C 88 A2 CC 40 */ lbz r5, kkMaxVolume__9CAudioSys@sda21(r2) /* 8022F8F0 0022C850 38 C0 00 40 */ li r6, 0x40 /* 8022F8F4 0022C854 A9 02 C5 FA */ lha r8, lbl_805AE31A@sda21(r2) /* 8022F8F8 0022C858 38 E0 00 00 */ li r7, 0 diff --git a/asm/MetroidPrime/Enemies/COmegaPirate.s b/asm/MetroidPrime/Enemies/COmegaPirate.s index 9947c38c..702ebc35 100644 --- a/asm/MetroidPrime/Enemies/COmegaPirate.s +++ b/asm/MetroidPrime/Enemies/COmegaPirate.s @@ -4215,7 +4215,7 @@ lbl_8028E914: /* 8028E990 0028B8F0 D0 A1 00 24 */ stfs f5, 0x24(r1) /* 8028E994 0028B8F4 93 E1 00 08 */ stw r31, 8(r1) /* 8028E998 0028B8F8 90 01 00 0C */ stw r0, 0xc(r1) -/* 8028E99C 0028B8FC 4B DC 45 95 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 8028E99C 0028B8FC 4B DC 45 95 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 8028E9A0 0028B900 48 00 01 44 */ b lbl_8028EAE4 lbl_8028E9A4: /* 8028E9A4 0028B904 80 1E 0B 68 */ lwz r0, 0xb68(r30) @@ -4300,7 +4300,7 @@ lbl_8028EA70: /* 8028EAD4 0028BA34 D0 81 00 18 */ stfs f4, 0x18(r1) /* 8028EAD8 0028BA38 93 E1 00 08 */ stw r31, 8(r1) /* 8028EADC 0028BA3C 90 01 00 0C */ stw r0, 0xc(r1) -/* 8028EAE0 0028BA40 4B DC 44 51 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 8028EAE0 0028BA40 4B DC 44 51 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb lbl_8028EAE4: /* 8028EAE4 0028BA44 80 01 00 34 */ lwz r0, 0x34(r1) /* 8028EAE8 0028BA48 83 E1 00 2C */ lwz r31, 0x2c(r1) diff --git a/asm/MetroidPrime/Enemies/CThardus.s b/asm/MetroidPrime/Enemies/CThardus.s index abe233e9..64827729 100644 --- a/asm/MetroidPrime/Enemies/CThardus.s +++ b/asm/MetroidPrime/Enemies/CThardus.s @@ -1193,7 +1193,7 @@ lbl_801DAFD4: /* 801DB038 001D7F98 90 01 00 0C */ stw r0, 0xc(r1) /* 801DB03C 001D7F9C 80 9C 07 60 */ lwz r4, 0x760(r28) /* 801DB040 001D7FA0 81 5D 08 CC */ lwz r10, 0x8cc(r29) -/* 801DB044 001D7FA4 4B E7 7E ED */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 801DB044 001D7FA4 4B E7 7E ED */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb lbl_801DB048: /* 801DB048 001D7FA8 E3 E1 00 78 */ psq_l f31, 120(r1), 0, qr0 /* 801DB04C 001D7FAC CB E1 00 70 */ lfd f31, 0x70(r1) @@ -3615,7 +3615,7 @@ lbl_801DD1E4: /* 801DD214 001DA174 81 5B 08 CC */ lwz r10, 0x8cc(r27) /* 801DD218 001DA178 38 C0 00 14 */ li r6, 0x14 /* 801DD21C 001DA17C 38 E0 00 7F */ li r7, 0x7f -/* 801DD220 001DA180 4B E7 5D 11 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 801DD220 001DA180 4B E7 5D 11 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 801DD224 001DA184 7F 43 D3 78 */ mr r3, r26 /* 801DD228 001DA188 4B FF F0 A1 */ bl sub_801dc2c8 /* 801DD22C 001DA18C 54 60 06 3F */ clrlwi. r0, r3, 0x18 @@ -9093,7 +9093,7 @@ lbl_801E207C: /* 801E20B8 001DF018 38 A0 00 00 */ li r5, 0 /* 801E20BC 001DF01C 38 C0 00 14 */ li r6, 0x14 /* 801E20C0 001DF020 38 E0 00 7F */ li r7, 0x7f -/* 801E20C4 001DF024 4B E7 0E 6D */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 801E20C4 001DF024 4B E7 0E 6D */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 801E20C8 001DF028 48 00 01 08 */ b lbl_801E21D0 lbl_801E20CC: /* 801E20CC 001DF02C 93 C1 00 08 */ stw r30, 8(r1) @@ -9111,7 +9111,7 @@ lbl_801E20CC: /* 801E20FC 001DF05C 81 5E 08 CC */ lwz r10, 0x8cc(r30) /* 801E2100 001DF060 38 C0 00 14 */ li r6, 0x14 /* 801E2104 001DF064 38 E0 00 7F */ li r7, 0x7f -/* 801E2108 001DF068 4B E7 0E 29 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 801E2108 001DF068 4B E7 0E 29 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 801E210C 001DF06C 48 00 00 C4 */ b lbl_801E21D0 .global lbl_801E2110 lbl_801E2110: diff --git a/asm/MetroidPrime/Enemies/CThardusRockProjectile.s b/asm/MetroidPrime/Enemies/CThardusRockProjectile.s index 07296af5..ac8b25af 100644 --- a/asm/MetroidPrime/Enemies/CThardusRockProjectile.s +++ b/asm/MetroidPrime/Enemies/CThardusRockProjectile.s @@ -660,7 +660,7 @@ lbl_80203C9C: /* 80203CE4 00200C44 93 C1 00 08 */ stw r30, 8(r1) /* 80203CE8 00200C48 90 01 00 0C */ stw r0, 0xc(r1) /* 80203CEC 00200C4C 80 9D 05 D8 */ lwz r4, 0x5d8(r29) -/* 80203CF0 00200C50 4B E4 F2 41 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 80203CF0 00200C50 4B E4 F2 41 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 80203CF4 00200C54 88 1D 05 DD */ lbz r0, 0x5dd(r29) /* 80203CF8 00200C58 28 00 00 00 */ cmplwi r0, 0 /* 80203CFC 00200C5C 41 82 00 2C */ beq lbl_80203D28 @@ -1970,7 +1970,7 @@ lbl_80204EF0: /* 80204FB8 00201F18 D0 81 00 2C */ stfs f4, 0x2c(r1) /* 80204FBC 00201F1C 93 E1 00 08 */ stw r31, 8(r1) /* 80204FC0 00201F20 90 01 00 0C */ stw r0, 0xc(r1) -/* 80204FC4 00201F24 4B E4 DF 6D */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 80204FC4 00201F24 4B E4 DF 6D */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb lbl_80204FC8: /* 80204FC8 00201F28 80 1E 05 74 */ lwz r0, 0x574(r30) /* 80204FCC 00201F2C 2C 00 00 01 */ cmpwi r0, 1 @@ -2589,7 +2589,7 @@ lbl_80205874: /* 802058BC 0020281C 93 C1 00 08 */ stw r30, 8(r1) /* 802058C0 00202820 90 01 00 0C */ stw r0, 0xc(r1) /* 802058C4 00202824 80 9F 05 D4 */ lwz r4, 0x5d4(r31) -/* 802058C8 00202828 4B E4 D6 69 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManager +/* 802058C8 00202828 4B E4 D6 69 */ bl ProcessSoundEvent__6CActorFififfUcUcRC9CVector3fRC9CVector3fiR13CStateManagerb /* 802058CC 0020282C 48 00 02 40 */ b lbl_80205B0C lbl_802058D0: /* 802058D0 00202830 A0 12 00 00 */ lhz r0, 0(r18) diff --git a/asm/MetroidPrime/Enemies/CWallCrawlerSwarm.s b/asm/MetroidPrime/Enemies/CWallCrawlerSwarm.s index 18d19e8d..37d98142 100644 --- a/asm/MetroidPrime/Enemies/CWallCrawlerSwarm.s +++ b/asm/MetroidPrime/Enemies/CWallCrawlerSwarm.s @@ -167,9 +167,9 @@ UpdateEffects__17CWallCrawlerSwarmFR13CStateManagerR9CAnimData: /* 801E7578 001E44D8 F3 A1 00 88 */ psq_st f29, 136(r1), 0, qr0 /* 801E757C 001E44DC BE E1 00 5C */ stmw r23, 0x5c(r1) /* 801E7580 001E44E0 7C B9 2B 78 */ mr r25, r5 -/* 801E7584 001E44E4 3C A0 80 57 */ lis r5, lbl_8056C9EC@ha +/* 801E7584 001E44E4 3C A0 80 57 */ lis r5, mSoundPOINodes__9CAnimData@ha /* 801E7588 001E44E8 83 79 02 18 */ lwz r27, 0x218(r25) -/* 801E758C 001E44EC 38 A5 C9 EC */ addi r5, r5, lbl_8056C9EC@l +/* 801E758C 001E44EC 38 A5 C9 EC */ addi r5, r5, mSoundPOINodes__9CAnimData@l /* 801E7590 001E44F0 90 C1 00 08 */ stw r6, 8(r1) /* 801E7594 001E44F4 7C 77 1B 78 */ mr r23, r3 /* 801E7598 001E44F8 2C 1B 00 00 */ cmpwi r27, 0 diff --git a/asm/MetroidPrime/Player/CGrappleArm.s b/asm/MetroidPrime/Player/CGrappleArm.s index a06d6c36..d5a587bd 100644 --- a/asm/MetroidPrime/Player/CGrappleArm.s +++ b/asm/MetroidPrime/Player/CGrappleArm.s @@ -1267,9 +1267,9 @@ DoUserAnimEvents__11CGrappleArmFR13CStateManager: /* 8011E3A0 0011B300 83 A5 00 04 */ lwz r29, 4(r5) /* 8011E3A4 0011B304 4B EE D7 75 */ bl GetCurrentCamera__14CCameraManagerCFR13CStateManager /* 8011E3A8 0011B308 C0 BE 02 4C */ lfs f5, 0x24c(r30) -/* 8011E3AC 0011B30C 3C 80 80 57 */ lis r4, lbl_8056C9EC@ha +/* 8011E3AC 0011B30C 3C 80 80 57 */ lis r4, mSoundPOINodes__9CAnimData@ha /* 8011E3B0 0011B310 C0 9E 02 3C */ lfs f4, 0x23c(r30) -/* 8011E3B4 0011B314 38 84 C9 EC */ addi r4, r4, lbl_8056C9EC@l +/* 8011E3B4 0011B314 38 84 C9 EC */ addi r4, r4, mSoundPOINodes__9CAnimData@l /* 8011E3B8 0011B318 C0 7E 02 2C */ lfs f3, 0x22c(r30) /* 8011E3BC 0011B31C 3B 84 00 04 */ addi r28, r4, 4 /* 8011E3C0 0011B320 D0 61 00 24 */ stfs f3, 0x24(r1) @@ -1303,7 +1303,7 @@ lbl_8011E408: /* 8011E42C 0011B38C 40 82 00 44 */ bne lbl_8011E470 lbl_8011E430: /* 8011E430 0011B390 38 01 00 24 */ addi r0, r1, 0x24 -/* 8011E434 0011B394 89 22 CC 40 */ lbz r9, kMaxVolume__9CAudioSys@sda21(r2) +/* 8011E434 0011B394 89 22 CC 40 */ lbz r9, kkMaxVolume__9CAudioSys@sda21(r2) /* 8011E438 0011B398 90 01 00 08 */ stw r0, 8(r1) /* 8011E43C 0011B39C 38 7E 03 4C */ addi r3, r30, 0x34c /* 8011E440 0011B3A0 38 9E 03 AC */ addi r4, r30, 0x3ac @@ -1326,8 +1326,8 @@ lbl_8011E478: /* 8011E47C 0011B3DC 41 80 FF 8C */ blt lbl_8011E408 lbl_8011E480: /* 8011E480 0011B3E0 80 9E 00 10 */ lwz r4, 0x10(r30) -/* 8011E484 0011B3E4 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha -/* 8011E488 0011B3E8 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8011E484 0011B3E4 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha +/* 8011E488 0011B3E8 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8011E48C 0011B3EC 83 44 02 10 */ lwz r26, 0x210(r4) /* 8011E490 0011B3F0 3B 83 00 04 */ addi r28, r3, 4 /* 8011E494 0011B3F4 2C 1A 00 00 */ cmpwi r26, 0 @@ -1368,7 +1368,7 @@ lbl_8011E4FC: /* 8011E510 0011B470 38 9E 03 AC */ addi r4, r30, 0x3ac /* 8011E514 0011B474 93 A1 00 0C */ stw r29, 0xc(r1) /* 8011E518 0011B478 39 41 00 18 */ addi r10, r1, 0x18 -/* 8011E51C 0011B47C 89 22 CC 40 */ lbz r9, kMaxVolume__9CAudioSys@sda21(r2) +/* 8011E51C 0011B47C 89 22 CC 40 */ lbz r9, kkMaxVolume__9CAudioSys@sda21(r2) /* 8011E520 0011B480 38 A0 00 00 */ li r5, 0 /* 8011E524 0011B484 93 E1 00 10 */ stw r31, 0x10(r1) /* 8011E528 0011B488 39 00 00 14 */ li r8, 0x14 diff --git a/asm/MetroidPrime/Player/CPlayerGun.s b/asm/MetroidPrime/Player/CPlayerGun.s index 667f4e96..cf29f7a4 100644 --- a/asm/MetroidPrime/Player/CPlayerGun.s +++ b/asm/MetroidPrime/Player/CPlayerGun.s @@ -2286,9 +2286,9 @@ DoUserAnimEvents__10CPlayerGunFfR13CStateManager: /* 8003C134 00039094 80 64 08 70 */ lwz r3, 0x870(r4) /* 8003C138 00039098 4B FC F9 E1 */ bl GetCurrentCamera__14CCameraManagerCFR13CStateManager /* 8003C13C 0003909C C0 BE 04 14 */ lfs f5, 0x414(r30) -/* 8003C140 000390A0 3C 80 80 57 */ lis r4, lbl_8056C9EC@ha +/* 8003C140 000390A0 3C 80 80 57 */ lis r4, mSoundPOINodes__9CAnimData@ha /* 8003C144 000390A4 C0 9E 04 04 */ lfs f4, 0x404(r30) -/* 8003C148 000390A8 38 84 C9 EC */ addi r4, r4, lbl_8056C9EC@l +/* 8003C148 000390A8 38 84 C9 EC */ addi r4, r4, mSoundPOINodes__9CAnimData@l /* 8003C14C 000390AC C0 7E 03 F4 */ lfs f3, 0x3f4(r30) /* 8003C150 000390B0 3B 64 00 04 */ addi r27, r4, 4 /* 8003C154 000390B4 D0 61 00 24 */ stfs f3, 0x24(r1) @@ -2320,7 +2320,7 @@ lbl_8003C198: /* 8003C1B8 00039118 40 82 00 44 */ bne lbl_8003C1FC lbl_8003C1BC: /* 8003C1BC 0003911C 38 01 00 24 */ addi r0, r1, 0x24 -/* 8003C1C0 00039120 89 22 CC 40 */ lbz r9, kMaxVolume__9CAudioSys@sda21(r2) +/* 8003C1C0 00039120 89 22 CC 40 */ lbz r9, kkMaxVolume__9CAudioSys@sda21(r2) /* 8003C1C4 00039124 90 01 00 08 */ stw r0, 8(r1) /* 8003C1C8 00039128 38 7E 06 70 */ addi r3, r30, 0x670 /* 8003C1CC 0003912C 38 9E 03 28 */ addi r4, r30, 0x328 @@ -2343,8 +2343,8 @@ lbl_8003C204: /* 8003C208 00039168 41 80 FF 90 */ blt lbl_8003C198 lbl_8003C20C: /* 8003C20C 0003916C 83 3C 02 10 */ lwz r25, 0x210(r28) -/* 8003C210 00039170 3C 60 80 57 */ lis r3, lbl_8056BDF4@ha -/* 8003C214 00039174 38 63 BD F4 */ addi r3, r3, lbl_8056BDF4@l +/* 8003C210 00039170 3C 60 80 57 */ lis r3, mInt32POINodes__9CAnimData@ha +/* 8003C214 00039174 38 63 BD F4 */ addi r3, r3, mInt32POINodes__9CAnimData@l /* 8003C218 00039178 2C 19 00 00 */ cmpwi r25, 0 /* 8003C21C 0003917C 3B 63 00 04 */ addi r27, r3, 4 /* 8003C220 00039180 40 81 00 B4 */ ble lbl_8003C2D4 @@ -2384,7 +2384,7 @@ lbl_8003C284: /* 8003C298 000391F8 38 9E 03 28 */ addi r4, r30, 0x328 /* 8003C29C 000391FC 93 A1 00 0C */ stw r29, 0xc(r1) /* 8003C2A0 00039200 39 41 00 18 */ addi r10, r1, 0x18 -/* 8003C2A4 00039204 89 22 CC 40 */ lbz r9, kMaxVolume__9CAudioSys@sda21(r2) +/* 8003C2A4 00039204 89 22 CC 40 */ lbz r9, kkMaxVolume__9CAudioSys@sda21(r2) /* 8003C2A8 00039208 38 A0 00 00 */ li r5, 0 /* 8003C2AC 0003920C 93 E1 00 10 */ stw r31, 0x10(r1) /* 8003C2B0 00039210 39 00 00 14 */ li r8, 0x14 diff --git a/asm/MetroidPrime/Weapons/CEnergyProjectile.s b/asm/MetroidPrime/Weapons/CEnergyProjectile.s index 31f4cb69..2392ab26 100644 --- a/asm/MetroidPrime/Weapons/CEnergyProjectile.s +++ b/asm/MetroidPrime/Weapons/CEnergyProjectile.s @@ -187,7 +187,7 @@ PlayImpactSound__17CEnergyProjectileFRC9CVector3f29EWeaponCollisionResponseTypes /* 80213CC4 00210C24 48 09 B4 9D */ bl GetAudibleFallOff__17CProjectileWeaponCFv /* 80213CC8 00210C28 C0 82 B3 10 */ lfs f4, lbl_805AD030@sda21(r2) /* 80213CCC 00210C2C 38 C0 00 00 */ li r6, 0 -/* 80213CD0 00210C30 88 A2 CC 40 */ lbz r5, kMaxVolume__9CAudioSys@sda21(r2) +/* 80213CD0 00210C30 88 A2 CC 40 */ lbz r5, kkMaxVolume__9CAudioSys@sda21(r2) /* 80213CD4 00210C34 38 E0 00 01 */ li r7, 1 /* 80213CD8 00210C38 88 02 CC 41 */ lbz r0, lbl_805AE961@sda21(r2) /* 80213CDC 00210C3C 38 80 00 14 */ li r4, 0x14 diff --git a/include/Kyoto/Audio/CAudioSys.hpp b/include/Kyoto/Audio/CAudioSys.hpp index ee9c0b91..47181158 100644 --- a/include/Kyoto/Audio/CAudioSys.hpp +++ b/include/Kyoto/Audio/CAudioSys.hpp @@ -5,7 +5,7 @@ class CAudioSys { public: - static const u8 kMaxVolume; + static const u8 kkMaxVolume; }; #endif \ No newline at end of file diff --git a/include/Kyoto/Math/CQuaternion.hpp b/include/Kyoto/Math/CQuaternion.hpp index 3cf0a543..3fb7f4c4 100644 --- a/include/Kyoto/Math/CQuaternion.hpp +++ b/include/Kyoto/Math/CQuaternion.hpp @@ -4,6 +4,9 @@ #include "types.h" class CQuaternion { +public: + CQuaternion(f32 w, f32 x, f32 y, f32 z) : w(w), x(x), y(y), z(z) {} + private: f32 w; f32 x; diff --git a/include/Kyoto/Math/CVector3f.hpp b/include/Kyoto/Math/CVector3f.hpp index 6af34198..7ae2e530 100644 --- a/include/Kyoto/Math/CVector3f.hpp +++ b/include/Kyoto/Math/CVector3f.hpp @@ -14,6 +14,8 @@ public: explicit CVector3f(f32 x, f32 y, f32 z) : mX(x), mY(y), mZ(z) {} CVector3f(const CVector2f& v, f32 z) : mX(v.GetX()), mY(v.GetY()), mZ(z) {} + CVector3f(const CVector3f& other) : mX(other.mX), mY(other.mY), mZ(other.mZ) {} + CVector3f(CInputStream& in); void PutTo(COutputStream& out) const; diff --git a/include/Kyoto/TToken.hpp b/include/Kyoto/TToken.hpp index a24a30f1..c04bdf43 100644 --- a/include/Kyoto/TToken.hpp +++ b/include/Kyoto/TToken.hpp @@ -31,6 +31,9 @@ public: TCachedToken() {} TCachedToken(const CToken& token) : TToken(token), x8_item(nullptr) {} + // TODO + operator const TToken< T >&() const; + private: T* x8_item; }; @@ -40,6 +43,9 @@ class TLockedToken : public TCachedToken< T > { public: TLockedToken() {} TLockedToken(const CToken& token) : TCachedToken(token) { Lock(); } + + // TODO + operator const TToken< T >&() const; }; #endif \ No newline at end of file diff --git a/include/MetroidPrime/CActor.hpp b/include/MetroidPrime/CActor.hpp index 83fdde26..0e6e8c42 100644 --- a/include/MetroidPrime/CActor.hpp +++ b/include/MetroidPrime/CActor.hpp @@ -7,31 +7,192 @@ #include "Collision/CMaterialList.hpp" #include "MetroidPrime/CEntity.hpp" +#include "MetroidPrime/CModelData.hpp" #include "MetroidPrime/CModelFlags.hpp" #include "MetroidPrime/CSfxHandle.hpp" #include "Kyoto/Graphics/CColor.hpp" #include "Kyoto/Math/CAABox.hpp" #include "Kyoto/Math/CTransform4f.hpp" -#include "Kyoto/Math/CQuaternion.hpp" #include "Kyoto/TToken.hpp" +#include "rstl/optional_object.hpp" #include "rstl/pair.hpp" #include "rstl/reserved_vector.hpp" #include "rstl/single_ptr.hpp" class CActorLights; class CActorParameters; -class CModelData; class CScannableObjectInfo; class CSimpleShadow; -// TODO move -struct SAdvancementDeltas { - CVector3f x0_posDelta; - CQuaternion xc_rotDelta; +class CDamageInfo; +class CDamageVulnerability; +class CFrustum; +class CHealthInfo; +class CScriptWater; +class CWeaponMode; +class CInt32POINode; + +enum EWeaponCollisionResponseTypes { + kWCR_None, + kWCR_Default, + kWCR_Unknown2, + kWCR_Metal, + kWCR_Grass, + kWCR_Ice, + kWCR_Goo, + kWCR_Wood, + kWCR_Water, + kWCR_Mud, + kWCR_Lava, + kWCR_Sand, + kWCR_Projectile, + kWCR_OtherProjectile, + kWCR_Unknown14, + kWCR_Unknown15, + kWCR_EnemyNormal, + kWCR_EnemySpecial, + kWCR_EnemyShielded, + kWCR_Unknown19, + kWCR_Unknown20, + kWCR_Unknown21, + kWCR_Unknown22, + kWCR_Unknown23, + kWCR_Unknown24, + kWCR_Unknown25, + kWCR_Unknown26, + kWCR_Unknown27, + kWCR_Unknown28, + kWCR_Unknown29, + kWCR_Unknown30, + kWCR_Unknown31, + kWCR_Unknown32, + kWCR_Unknown33, + kWCR_Unknown34, + kWCR_Unknown35, + kWCR_Unknown36, + kWCR_Unknown37, + kWCR_ChozoGhost, + kWCR_Unknown39, + kWCR_Unknown40, + kWCR_Unknown41, + kWCR_AtomicBeta, + kWCR_AtomicAlpha, + kWCR_Unknown44, + kWCR_Unknown45, + kWCR_Unknown46, + kWCR_Unknown47, + kWCR_Unknown48, + kWCR_Unknown49, + kWCR_Unknown50, + kWCR_Unknown51, + kWCR_Unknown52, + kWCR_Unknown53, + kWCR_Unknown54, + kWCR_Unknown55, + kWCR_Unknown56, + kWCR_Unknown57, + kWCR_Unknown58, + kWCR_Unknown59, + kWCR_Unknown60, + kWCR_Unknown61, + kWCR_Unknown62, + kWCR_Unknown63, + kWCR_Unknown64, + kWCR_Unknown65, + kWCR_Unknown66, + kWCR_Unknown67, + kWCR_Unknown68, + kWCR_Unknown69, + kWCR_Unknown70, + kWCR_Unknown71, + kWCR_Unknown72, + kWCR_Unknown73, + kWCR_Unknown74, + kWCR_Unknown75, + kWCR_Unknown76, + kWCR_Unknown77, + kWCR_Unknown78, + kWCR_Unknown79, + kWCR_Unknown80, + kWCR_Unknown81, + kWCR_Unknown82, + kWCR_Unknown83, + kWCR_Unknown84, + kWCR_Unknown85, + kWCR_Unknown86, + kWCR_Unknown87, + kWCR_Unknown88, + kWCR_Unknown89, + kWCR_Unknown90, + kWCR_Unknown91, + kWCR_AtomicBetaReflect, + kWCR_AtomicAlphaReflect, }; -CHECK_SIZEOF(SAdvancementDeltas, 0x1c) +enum EProjectileAttrib { + kPA_None = 0, + kPA_PartialCharge = (1 << 0), + kPA_PlasmaProjectile = (1 << 1), + kPA_Charged = (1 << 2), + kPA_Ice = (1 << 3), + kPA_Wave = (1 << 4), + kPA_Plasma = (1 << 5), + kPA_Phazon = (1 << 6), + kPA_ComboShot = (1 << 7), + kPA_Bombs = (1 << 8), + kPA_PowerBombs = (1 << 9), + kPA_BigProjectile = (1 << 10), + kPA_ArmCannon = (1 << 11), + kPA_BigStrike = (1 << 12), + kPA_DamageFalloff = (1 << 13), + kPA_StaticInterference = (1 << 14), + kPA_PlayerUnFreeze = (1 << 15), + kPA_ParticleOPTS = (1 << 16), + kPA_KeepInCinematic = (1 << 17), +}; +enum EUserEventType { + kUE_Projectile = 0, + kUE_EggLay = 1, + kUE_LoopedSoundStop = 2, + kUE_AlignTargetPos = 3, + kUE_AlignTargetRot = 4, + kUE_ChangeMaterial = 5, + kUE_Delete = 6, + kUE_GenerateEnd = 7, + kUE_DamageOn = 8, + kUE_DamageOff = 9, + kUE_AlignTargetPosStart = 10, + kUE_DeGenerate = 11, + kUE_Landing = 12, + kUE_TakeOff = 13, + kUE_FadeIn = 14, + kUE_FadeOut = 15, + kUE_ScreenShake = 16, + kUE_BeginAction = 17, + kUE_EndAction = 18, + kUE_BecomeRagDoll = 19, + kUE_IkLock = 20, + kUE_IkRelease = 21, + kUE_BreakLockOn = 22, + kUE_BecomeShootThrough = 23, + kUE_RemoveCollision = 24, + kUE_ObjectPickUp = 25, + kUE_ObjectDrop = 26, + kUE_EventStart = 27, + kUE_EventStop = 28, + kUE_Activate = 29, + kUE_Deactivate = 30, + kUE_SoundPlay = 31, + kUE_SoundStop = 32, + kUE_EffectOn = 33, + kUE_EffectOff = 34, +}; + +// class CBoolPOINode; +// class CInt32POINode; +// class CParticlePOINode; +// class CSoundPOINode; class CActor : public CEntity { public: @@ -40,17 +201,67 @@ public: kTF_Cold = 1, kTF_Hot = 2, }; + enum EFluidState { + kFS_EnteredFluid, + kFS_InFluid, + kFS_LeftFluid, + }; + enum EScanState { + kSS_Start, + kSS_Processing, + kSS_Done, + }; CActor(TUniqueId uid, bool active, const rstl::string& name, const CEntityInfo& info, const CTransform4f& xf, const CModelData& mData, const CMaterialList& list, const CActorParameters& params, TUniqueId nextDrawNode); ~CActor(); + virtual void PreRender(CStateManager&, const CFrustum&); + virtual void AddToRenderer(const CFrustum&, CStateManager&); + virtual void Render(CStateManager&); + virtual bool CanRenderUnsorted(const CStateManager&) const; + virtual void CalculateRenderBounds(); + virtual CHealthInfo* HealthInfo(CStateManager&); + virtual const CDamageVulnerability* GetDamageVulnerability() const; + virtual const CDamageVulnerability* GetDamageVulnerability(const CVector3f&, const CVector3f&, const CDamageInfo&) const; + virtual rstl::optional_object< CAABox > GetTouchBounds() const; + virtual void Touch(CActor&, CStateManager&); + virtual CVector3f GetOrbitPosition(const CStateManager&) const; + virtual CVector3f GetAimPosition(const CStateManager&, float) const; + virtual CVector3f GetHomingPosition(const CStateManager&, float) const; + virtual CVector3f GetScanObjectIndicatorPosition(const CStateManager&) const; + virtual EWeaponCollisionResponseTypes GetCollisionResponseType(const CVector3f&, const CVector3f&, const CWeaponMode&, + EProjectileAttrib) const; + virtual void FluidFXThink(EFluidState, CScriptWater&, CStateManager&); + virtual void OnScanStateChanged(EScanState, CStateManager&); + virtual CAABox GetSortingBounds(const CStateManager&) const; + virtual void DoUserAnimEvent(CStateManager&, const CInt32POINode&, EUserEventType, float dt); + SAdvancementDeltas UpdateAnimation(float dt, CStateManager& mgr, bool advTree); + void ProcessSoundEvent(s32 sfxId, f32 weight, s32 flags, f32 fallOff, f32 maxDist, u8 minVol, u8 maxVol, const CVector3f& toListener, + const CVector3f& position, s32 aid, CStateManager& mgr, bool translateId); + void UpdateSfxEmitters(); void RemoveEmitter(); const CTransform4f& GetTransform() const { return x34_transform; } + CVector3f GetTranslation() const { return x34_transform.GetTranslation(); } + bool GetMuted() const { return xe5_26_muted; } + bool HasAnimation() const { return x64_modelData && x64_modelData->GetAnimationData(); } + + // const CBoolPOINode* GetBoolPOIList(s32& count) { + // return HasAnimation() ? x64_modelData->GetAnimationData()->GetBoolPOIList(count) : nullptr; + // } + // const CInt32POINode* GetInt32POIList(s32& count) { + // return HasAnimation() ? x64_modelData->GetAnimationData()->GetInt32POIList(count) : nullptr; + // } + // const CParticlePOINode* GetParticlePOIList(s32& count) { + // return HasAnimation() ? x64_modelData->GetAnimationData()->GetParticlePOIList(count) : nullptr; + // } + // const CSoundPOINode* GetSoundPOIList(s32& count) { + // return HasAnimation() ? x64_modelData->GetAnimationData()->GetSoundPOIList(count) : nullptr; + // } protected: CTransform4f x34_transform; diff --git a/include/MetroidPrime/CAdditiveAnimPlayback.hpp b/include/MetroidPrime/CAdditiveAnimPlayback.hpp new file mode 100644 index 00000000..08946fa9 --- /dev/null +++ b/include/MetroidPrime/CAdditiveAnimPlayback.hpp @@ -0,0 +1,38 @@ +#ifndef _CADDITIVEANIMPLAYBACK_HPP +#define _CADDITIVEANIMPLAYBACK_HPP + +#include "types.h" + +#include "rstl/rc_ptr.hpp" + +class CAnimTreeNode; + +class CAdditiveAnimationInfo { +private: + f32 x0_fadeInDur; + f32 x4_fadeOutDur; +}; + +class CAdditiveAnimPlayback { +public: + enum EPlaybackPhase { + kPP_None, + kPP_FadingIn, + kPP_FadingOut, + kPP_FadedIn, + kPP_FadedOut, + }; + +private: + CAdditiveAnimationInfo x0_info; + rstl::ncrc_ptr< CAnimTreeNode > x8_anim; + f32 xc_targetWeight; + f32 x10_curWeight; + bool x14_active; + f32 x18_weightTimer; + EPlaybackPhase x1c_phase; + bool x20_needsFadeOut; +}; +CHECK_SIZEOF(CAdditiveAnimPlayback, 0x24) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CAnimData.hpp b/include/MetroidPrime/CAnimData.hpp index 08b97981..7fc5fc2e 100644 --- a/include/MetroidPrime/CAnimData.hpp +++ b/include/MetroidPrime/CAnimData.hpp @@ -3,8 +3,198 @@ #include "types.h" +#include "MetroidPrime/CAdditiveAnimPlayback.hpp" +#include "MetroidPrime/CAnimPlaybackParms.hpp" +#include "MetroidPrime/CCharacterInfo.hpp" +#include "MetroidPrime/CHierarchyPoseBuilder.hpp" +#include "MetroidPrime/CPOINode.hpp" +#include "MetroidPrime/CParticleDatabase.hpp" +#include "MetroidPrime/CPoseAsTransforms.hpp" + +#include "Kyoto/TToken.hpp" + +#include "rstl/reserved_vector.hpp" + +class CAnimationManager; +class CAnimSysContext; +class CAnimTreeNode; +class CCharacterFactory; +class CCharLayoutInfo; +class CSkinnedModel; +class CSkinnedModelWithAvgNormals; +class CTransitionManager; + class CAnimData { - // TODO +public: + enum EAnimDir { + kAD_Forward, + kAD_Backward, + }; + + void SetParticleEffectState(const rstl::string& name, bool active, CStateManager& mgr) { + x120_particleDB.SetParticleEffectState(name, active, mgr); + } + + s32 GetCharacterIndex() const { return x204_charIdx; } + + const CBoolPOINode* GetBoolPOIList(s32& count) { + count = x20c_passedBoolCount; + return mBoolPOINodes.data(); + } + const CInt32POINode* GetInt32POIList(s32& count) { + count = x210_passedIntCount; + return mInt32POINodes.data(); + } + const CParticlePOINode* GetParticlePOIList(s32& count) { + count = x214_passedParticleCount; + return mParticlePOINodes.data(); + } + const CSoundPOINode* GetSoundPOIList(s32& count) { + count = x218_passedSoundCount; + return mSoundPOINodes.data(); + } + + // SetIsAnimating__9CAnimDataFb + // SetAnimDir__9CAnimDataFQ29CAnimData8EAnimDir + // GetBoundingBox__9CAnimDataCFv + // GetBoundingBox__9CAnimDataCFRC12CTransform4f + // GetLocatorSegId__9CAnimDataCFRCQ24rstl66basic_string + // ResetPOILists__9CAnimDataFv + // GetAverageVelocity__9CAnimDataCFi + // AdvanceParticles__9CAnimDataFRC12CTransform4ffRC9CVector3fR13CStateManager + // PoseSkinnedModel__9CAnimDataCFRC13CSkinnedModelRC17CPoseAsTransformsRCQ24rstl37optional_object<18CVertexMorphEffect>PCf + // DrawSkinnedModel__9CAnimDataCFRC13CSkinnedModelRC11CModelFlags + // InitializeCache__9CAnimDataFv + // FreeCache__9CAnimDataFv + // SetInfraModel__9CAnimDataFRC21TLockedToken<6CModel>RC26TLockedToken<10CSkinRules> + // SetXRayModel__9CAnimDataFRC21TLockedToken<6CModel>RC26TLockedToken<10CSkinRules> + // AdvanceAnim__9CAnimDataFR13CCharAnimTimeR9CVector3fR11CQuaternion + // AdvanceIgnoreParticles__9CAnimDataFfR9CRandom16b + // Advance__9CAnimDataFfRC9CVector3fR13CStateManagerb + // DoAdvance__9CAnimDataFfRbR9CRandom16b + // SetAnimation__9CAnimDataFRC18CAnimPlaybackParmsb + // GetAnimationPrimitives__9CAnimDataCFRC18CAnimPlaybackParmsRQ24rstl72set<10CPrimitive,Q24rstl18less<10CPrimitive>,Q24rstl17rmemory_allocator> + // PrimitiveSetToTokenVector__9CAnimDataFRCQ24rstl72set<10CPrimitive,Q24rstl18less<10CPrimitive>,Q24rstl17rmemory_allocator>RQ24rstl42vector<6CToken,Q24rstl17rmemory_allocator>b + // BuildPose__9CAnimDataFv + // PreRender__9CAnimDataFv + // SetupRender__9CAnimDataCFRC13CSkinnedModelRCQ24rstl37optional_object<18CVertexMorphEffect>PCf + // Render__9CAnimDataCFRC13CSkinnedModelRC11CModelFlagsRCQ24rstl37optional_object<18CVertexMorphEffect>PCf + // RenderAuxiliary__9CAnimDataCFRC14CFrustumPlanes + // RecalcPoseBuilder__9CAnimDataCFPC13CCharAnimTime + // GetAnimationDuration__9CAnimDataCFi + // GetAnimTimeRemaining__9CAnimDataCFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator> + // IsAnimTimeRemaining__9CAnimDataCFfRCQ24rstl66basic_string,Q24rstl17rmemory_allocator> + // GetLocatorTransform__9CAnimDataCFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>PC13CCharAnimTime + // GetLocatorTransform__9CAnimDataCF6CSegIdPC13CCharAnimTime + // CalcPlaybackAlignmentParms__9CAnimDataFRC18CAnimPlaybackParmsRCQ24rstl25ncrc_ptr<13CAnimTreeNode> + // SetRandomPlaybackRate__9CAnimDataFR9CRandom16 + // SetPlaybackRate__9CAnimDataFf + // MultiplyPlaybackRate__9CAnimDataFf + // GetTimeOfUserEvent__9CAnimDataCF14EUserEventTypeRC13CCharAnimTime + // GetAdvancementDeltas__9CAnimDataCFRC13CCharAnimTimeRC13CCharAnimTime + // Touch__9CAnimDataCFRC13CSkinnedModeli + // InitializeEffects__9CAnimDataFR13CStateManagerRC9CVector3f + // SetPhase__9CAnimDataFf -> SetPhase__11IAnimReaderFf + // AddAdditiveAnimation__9CAnimDataFUifbb + // DelAdditiveAnimation__9CAnimDataFUi + // IsAdditiveAnimationActive__9CAnimDataCFUi + // GetAdditiveAnimationTree__9CAnimDataCFUi + // GetAnimationTree__9CAnimDataCFv + // AnimationTree__9CAnimDataFv + // IsAdditiveAnimation__9CAnimDataCFUi + // UpdateAdditiveAnims__9CAnimDataFf + // AdvanceAdditiveAnims__9CAnimDataFf + // AddAdditiveSegData__9CAnimDataCFRC10CSegIdListR16CSegStatementSet + // GetEventResourceIdForAnimResourceId__9CAnimDataCFi + // GetAnimationManager__9CAnimDataFv + // SetPoseValid__9CAnimDataFb + + // GetCharacterInfo__9CAnimDataCFv + // GetCharLayoutInfo__9CAnimDataCFv + // GetParticleDB__9CAnimDataFv + // GetDeltaRotation__9CAnimDataCFv + // GetDeltaOffset__9CAnimDataCFv + // IsDeltaOffsetInUse__9CAnimDataCFv + // GetAdvancementDeltas__19CAdvancementResultsCFv + // SetDeltaRotation__9CAnimDataFRC11CQuaternionb + // SetDeltaOffset__9CAnimDataFRC9CVector3fb + // SetDeltaOffsetInUse__9CAnimDataFv + // IsDeltaRotationInUse__9CAnimDataCFv + // IsDeltaOffsetPrimed__9CAnimDataCFv + // GetAnimDir__9CAnimDataCFv + // GetIsLoop__9CAnimDataCFv + // IsAnimating__9CAnimDataCFv + // SetPoseBuilderValid__9CAnimDataFb + // GetAnimationManager__9CAnimDataCFv + // GetPoseValid__9CAnimDataCFv + // GetPoseBuilderValid__9CAnimDataCFv + // GetParticleDB__9CAnimDataCFv + // GetAnimSysContext__9CAnimDataCFv + // CacheInt32PoiList__9CAnimDataFRC13CCharAnimTimeiRCQ24rstl25ncrc_ptr<13CAnimTreeNode> + + // GetIceModel__9CAnimDataCFv + // GetPASDatabase__9CAnimDataCFv + // EnableLooping__9CAnimDataFb + // GetCurrentAnimation__9CAnimDataCFv + // GetSkinnedModel__9CAnimDataCFv + // GetXRayModel__9CAnimDataCFv + // GetInfraModel__9CAnimDataCFv + // GetPose__9CAnimDataCFv + // PoseBuilder__9CAnimDataCFv + // GetPlaybackRate__9CAnimDataCFv + // Pose__9CAnimDataFv + // GetPoseBuilder__9CAnimDataCFv + + // CacheSoundPoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei + // CacheParticlePoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei + // CacheBoolPoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei + // CacheInt32PoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei + +private: + TLockedToken< CCharacterFactory > x0_charFactory; + CCharacterInfo xc_charInfo; + TLockedToken< CCharLayoutInfo > xcc_layoutData; + TLockedToken< CSkinnedModel > xd8_modelData; + rstl::optional_object< TLockedToken< CSkinnedModelWithAvgNormals > > xe4_iceModelData; + rstl::rc_ptr< CSkinnedModel > xf4_xrayModel; + rstl::rc_ptr< CSkinnedModel > xf8_infraModel; + rstl::rc_ptr< CAnimSysContext > xfc_animCtx; + rstl::rc_ptr< CAnimationManager > x100_animMgr; + EAnimDir x104_animDir; + CAABox x108_aabb; + CParticleDatabase x120_particleDB; + CAssetId x1d8_selfId; + CVector3f x1dc_alignPos; + CQuaternion x1e8_alignRot; + rstl::rc_ptr< CAnimTreeNode > x1f8_animRoot; + rstl::rc_ptr< CTransitionManager > x1fc_transMgr; + f32 x200_speedScale; + s32 x204_charIdx; + s32 x208_defaultAnim; + u32 x20c_passedBoolCount; + u32 x210_passedIntCount; + u32 x214_passedParticleCount; + u32 x218_passedSoundCount; + s32 x21c_particleLightIdx; + bool x220_24_animating : 1; + bool x220_25_loop : 1; + bool x220_26_aligningPos : 1; + bool x220_27_ : 1; + bool x220_28_ : 1; + bool x220_29_animationJustStarted : 1; + bool x220_30_poseBuilt : 1; + bool x220_31_poseCached : 1; + CPoseAsTransforms x224_pose; + CHierarchyPoseBuilder x2fc_poseBuilder; + CAnimPlaybackParms x40c_playbackParms; + rstl::reserved_vector< rstl::pair< s32, CAdditiveAnimPlayback >, 8 > x434_additiveAnims; + + static rstl::reserved_vector< CBoolPOINode, 8 > mBoolPOINodes; + static rstl::reserved_vector< CInt32POINode, 16 > mInt32POINodes; + static rstl::reserved_vector< CParticlePOINode, 20 > mParticlePOINodes; + static rstl::reserved_vector< CSoundPOINode, 20 > mSoundPOINodes; + // in cpp -> rstl::reserved_vector< CInt32POINode, 16 > sInt32TransientCache; }; +CHECK_SIZEOF(CAnimData, 0x434 + 0x144) #endif \ No newline at end of file diff --git a/include/MetroidPrime/CAnimPlaybackParms.hpp b/include/MetroidPrime/CAnimPlaybackParms.hpp new file mode 100644 index 00000000..f7d3c01c --- /dev/null +++ b/include/MetroidPrime/CAnimPlaybackParms.hpp @@ -0,0 +1,25 @@ +#ifndef _CANIMPLAYBACKPARMS_HPP +#define _CANIMPLAYBACKPARMS_HPP + +#include "types.h" + +class CQuaternion; +class CTransform4f; +class CVector3f; + +class CAnimPlaybackParms { +private: + s32 x0_animA; + s32 x4_animB; + f32 x8_blendWeight; + bool xc_animating; + s32 x10_; + CVector3f* x14_targetPos; + bool x18_useLocator; + CQuaternion* x1c_deltaOrient; + CTransform4f* x20_objectXf; + CVector3f* x24_objectScale; +}; +CHECK_SIZEOF(CAnimPlaybackParms, 0x28) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CCharAnimTime.hpp b/include/MetroidPrime/CCharAnimTime.hpp new file mode 100644 index 00000000..0f868453 --- /dev/null +++ b/include/MetroidPrime/CCharAnimTime.hpp @@ -0,0 +1,22 @@ +#ifndef _CCHARANIMTIME_HPP +#define _CCHARANIMTIME_HPP + +#include "types.h" + +class CCharAnimTime { +public: + enum EType { + kT_NonZero, + kT_ZeroIncreasing, + kT_ZeroSteady, + kT_ZeroDecreasing, + kT_Infinity, + }; + +private: + f32 x0_time; + EType x4_type; +}; +CHECK_SIZEOF(CCharAnimTime, 0x8) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CCharacterInfo.hpp b/include/MetroidPrime/CCharacterInfo.hpp new file mode 100644 index 00000000..9dde30c1 --- /dev/null +++ b/include/MetroidPrime/CCharacterInfo.hpp @@ -0,0 +1,44 @@ +#ifndef _CCHARACTERINFO_HPP +#define _CCHARACTERINFO_HPP + +#include "types.h" + +#include "MetroidPrime/CEffectComponent.hpp" +#include "MetroidPrime/CPASDatabase.hpp" + +#include "Kyoto/IObjectStore.hpp" +#include "Kyoto/Math/CAABox.hpp" + +#include "rstl/pair.hpp" +#include "rstl/string.hpp" +#include "rstl/vector.hpp" + +class CCharacterInfo { +public: + class CParticleResData { + private: + rstl::vector< CAssetId > x0_part; + rstl::vector< CAssetId > x10_swhc; + rstl::vector< CAssetId > x20_elsc; + rstl::vector< CAssetId > x30_elsc; + }; + +private: + u16 x0_tableCount; + rstl::string x4_name; + CAssetId x14_cmdl; + CAssetId x18_cksr; + CAssetId x1c_cinf; + rstl::vector< rstl::pair< s32, rstl::pair< rstl::string, rstl::string > > > x20_animInfo; + CPASDatabase x30_pasDatabase; + CParticleResData x44_partRes; + u32 x84_unk; + rstl::vector< rstl::pair< rstl::string, CAABox > > x88_aabbs; + rstl::vector< rstl::pair< rstl::string, rstl::vector< CEffectComponent > > > x98_effects; + u32 xa8_cmdlOverlay; + u32 xac_cksrOverlay; + rstl::vector< s32 > xb0_animIdxs; +}; +CHECK_SIZEOF(CCharacterInfo, 0xc0) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CEffectComponent.hpp b/include/MetroidPrime/CEffectComponent.hpp new file mode 100644 index 00000000..a11fd347 --- /dev/null +++ b/include/MetroidPrime/CEffectComponent.hpp @@ -0,0 +1,18 @@ +#ifndef _CEFFECTCOMPONENT_HPP +#define _CEFFECTCOMPONENT_HPP + +#include "types.h" + +#include "MetroidPrime/CParticleData.hpp" + +class CEffectComponent { +private: + rstl::string x0_name; + SObjectTag x10_tag; + rstl::string x18_boneName; + f32 x28_scale; + CParticleData::EParentedMode x2c_parentedMode; + u32 x30_flags; +}; + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CHierarchyPoseBuilder.hpp b/include/MetroidPrime/CHierarchyPoseBuilder.hpp new file mode 100644 index 00000000..17dd6922 --- /dev/null +++ b/include/MetroidPrime/CHierarchyPoseBuilder.hpp @@ -0,0 +1,62 @@ +#ifndef _CHIERARCHYPOSEBUILDER_HPP +#define _CHIERARCHYPOSEBUILDER_HPP + +#include "types.h" + +#include "MetroidPrime/TGameTypes.hpp" + +#include "Kyoto/Math/CQuaternion.hpp" +#include "Kyoto/Math/CVector3f.hpp" +#include "Kyoto/TToken.hpp" + +#include "rstl/construction_deferred.hpp" +#include "rstl/optional_object.hpp" + +class CCharLayoutInfo; + +template < typename T > +class TSegIdMap { +private: + CSegId x0_boneCount; + CSegId x1_capacity; + u32 x4_maxCapacity; + CSegId x8_indirectionMap[200]; + T* xd0_nodes; + CSegId xd4_curPrevBone; +}; +typedef TSegIdMap< void > unk_TSegIdMap; +CHECK_SIZEOF(unk_TSegIdMap, 0xd8) + +class CLayoutDescription { +public: + class CScaledLayoutDescription { + private: + TCachedToken< CCharLayoutInfo > x0_layoutToken; + f32 xc_scale; + rstl::optional_object< CVector3f > x10_scaleVec; + }; + +private: + TCachedToken< CCharLayoutInfo > x0_layoutToken; + rstl::optional_object< CScaledLayoutDescription > xc_scaled; +}; +CHECK_SIZEOF(CLayoutDescription, 0x30) + +class CHierarchyPoseBuilder { +public: + class CTreeNode { + private: + CSegId x0_child; + CSegId x1_sibling; + CQuaternion x4_rotation; + CVector3f x14_offset; + }; + +private: + CLayoutDescription x0_layoutDesc; + rstl::construction_deferred< CSegId > x30_rootId; + TSegIdMap< CTreeNode > x38_treeMap; +}; +CHECK_SIZEOF(CHierarchyPoseBuilder, 0x110) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CModelData.hpp b/include/MetroidPrime/CModelData.hpp index 4a39d323..87a3d084 100644 --- a/include/MetroidPrime/CModelData.hpp +++ b/include/MetroidPrime/CModelData.hpp @@ -17,6 +17,14 @@ class CAnimData; class CModel; +// TODO move +#include "Kyoto/Math/CQuaternion.hpp" +struct SAdvancementDeltas { + CVector3f x0_posDelta; + CQuaternion xc_rotDelta; +}; +CHECK_SIZEOF(SAdvancementDeltas, 0x1c) + class CModelData { public: bool IsStaticModel() const { return xc_animData.get() == nullptr && !x1c_normalModel; } @@ -30,7 +38,7 @@ public: SAdvancementDeltas AdvanceAnimation(float dt, CStateManager& mgr, TAreaId aid, bool advTree); void AdvanceParticles(const CTransform4f& xf, float dt, CStateManager& mgr); - rstl::auto_ptr< CAnimData >& GetAnimData() { return xc_animData; } + CAnimData* GetAnimationData() const { return xc_animData.get(); } void SetXRayModel(const rstl::pair< CAssetId, CAssetId >& assets); void SetInfraModel(const rstl::pair< CAssetId, CAssetId >& assets); diff --git a/include/MetroidPrime/CPASAnimState.hpp b/include/MetroidPrime/CPASAnimState.hpp new file mode 100644 index 00000000..03e4dcc8 --- /dev/null +++ b/include/MetroidPrime/CPASAnimState.hpp @@ -0,0 +1,93 @@ +#ifndef _CPASANIMSTATE_HPP +#define _CPASANIMSTATE_HPP + +#include "types.h" + +#include "rstl/vector.hpp" + +namespace pas { +enum EAnimationState { + kAS_Invalid = -1, + kAS_Fall = 0, + kAS_Getup = 1, + kAS_LieOnGround = 2, + kAS_Step = 3, + kAS_Death = 4, + kAS_Locomotion = 5, + kAS_KnockBack = 6, + kAS_MeleeAttack = 7, + kAS_Turn = 8, + kAS_LoopAttack = 9, + kAS_LoopReaction = 10, + kAS_GroundHit = 11, + kAS_Generate = 12, + kAS_Jump = 13, + kAS_Hurled = 14, + kAS_Slide = 15, + kAS_Taunt = 16, + kAS_Scripted = 17, + kAS_ProjectileAttack = 18, + kAS_Cover = 19, + kAS_WallHang = 20, + kAS_AdditiveIdle = 21, + kAS_AdditiveAim = 22, + kAS_AdditiveFlinch = 23, + kAS_AdditiveReaction = 24, +}; +} // namespace pas + +class CPASAnimParm { +public: + enum EParmType { + kPT_None = -1, + kPT_Int32 = 0, + kPT_UInt32 = 1, + kPT_Float = 2, + kPT_Bool = 3, + kPT_Enum = 4, + }; + union UParmValue { + s32 m_int; + u32 m_uint; + f32 m_float; + bool m_bool; + }; + +private: + UParmValue x0_value; + EParmType x4_type; +}; + +class CPASParmInfo { +public: + enum EWeightFunction { + kWF_ExactMatch, + kWF_PercentError, + kWF_AngularPercent, + kWF_NoWeight, + }; + +private: + CPASAnimParm::EParmType x0_type; + EWeightFunction x4_weightFunction; + float x8_weight; + CPASAnimParm::UParmValue xc_min; + CPASAnimParm::UParmValue x10_max; +}; + +class CPASAnimInfo { +private: + u32 x0_id; + rstl::reserved_vector< CPASAnimParm::UParmValue, 8 > x4_parms; +}; + +class CPASAnimState { +private: + pas::EAnimationState x0_id; + rstl::vector< CPASParmInfo > x4_parms; + rstl::vector< CPASAnimInfo > x14_anims; + rstl::vector< s32 > x24_selectionCache; +}; +CHECK_SIZEOF(CPASAnimState, 0x34) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CPASDatabase.hpp b/include/MetroidPrime/CPASDatabase.hpp new file mode 100644 index 00000000..23832cda --- /dev/null +++ b/include/MetroidPrime/CPASDatabase.hpp @@ -0,0 +1,17 @@ +#ifndef _CPASDATABASE_HPP +#define _CPASDATABASE_HPP + +#include "types.h" + +#include "MetroidPrime/CPASAnimState.hpp" + +#include "rstl/vector.hpp" + +class CPASDatabase { +private: + rstl::vector< CPASAnimState > x0_states; + s32 x10_defaultState; +}; +CHECK_SIZEOF(CPASDatabase, 0x14) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CPOINode.hpp b/include/MetroidPrime/CPOINode.hpp new file mode 100644 index 00000000..d8817e28 --- /dev/null +++ b/include/MetroidPrime/CPOINode.hpp @@ -0,0 +1,86 @@ +#ifndef _CPOINODE_HPP +#define _CPOINODE_HPP + +#include "types.h" + +#include "MetroidPrime/CCharAnimTime.hpp" +#include "MetroidPrime/CParticleData.hpp" + +#include "rstl/string.hpp" + +#define POITYPE_LOOP 0 +#define POITYPE_EMPTYBOOL 1 +#define POITYPE_EMPTYINT32 2 +#define POITYPE_SOUNDINT32 4 +#define POITYPE_PARTICLE 5 +#define POITYPE_USEREVENT 6 +#define POITYPE_RANDRATE 7 +#define POITYPE_SOUND 8 + +class CPOINode { +public: + virtual ~CPOINode(); + + const rstl::string& GetString() const { return x8_name; } + s32 GetPoiType() const { return x18_type; } + const CCharAnimTime& GetTime() const { return x1c_time; } + f32 GetWeight() const { return x2c_weight; } + s32 GetCharacterIndex() const { return x30_charIdx; } + s32 GetFlags() const { return x34_flags; } + +protected: + u16 x4_; + rstl::string x8_name; + s16 x18_type; + CCharAnimTime x1c_time; + s32 x24_index; + bool x28_unique; + f32 x2c_weight; + s32 x30_charIdx; + s32 x34_flags; +}; +CHECK_SIZEOF(CPOINode, 0x38) + +class CBoolPOINode : public CPOINode { +public: + // __ct__12CBoolPOINodeFQ24rstl66basic_string,Q24rstl17rmemory_allocator>UsRC13CCharAnimTimeibfiib + // __ct__12CBoolPOINodeFR12CInputStream + // CopyNodeMinusStartTime__12CBoolPOINodeFRC12CBoolPOINodeRC13CCharAnimTime + + bool GetValue() const { return x38_val; } + +private: + bool x38_val; +}; + +class CInt32POINode : public CPOINode { +public: + // __ct__13CInt32POINodeFQ24rstl66basic_string,Q24rstl17rmemory_allocator>UsRC13CCharAnimTimeibfiiiRCQ24rstl66basic_string,Q24rstl17rmemory_allocator> + // CopyNodeMinusStartTime__13CInt32POINodeFRC13CInt32POINodeRC13CCharAnimTime + + s32 GetValue() const { return x38_val; } + const rstl::string& GetLocatorName() const { return x3c_lctrName; } + +private: + s32 x38_val; + rstl::string x3c_lctrName; +}; + +class CParticlePOINode : public CPOINode { +private: + CParticleData x38_data; +}; + +class CSoundPOINode : public CPOINode { +public: + u32 GetSoundId() const { return x38_sfxId; } + f32 GetFallOff() const { return x3c_falloff; } + f32 GetMaxDistance() const { return x40_maxDist; } + +private: + u32 x38_sfxId; + f32 x3c_falloff; + f32 x40_maxDist; +}; + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CParticleData.hpp b/include/MetroidPrime/CParticleData.hpp new file mode 100644 index 00000000..ee15dfab --- /dev/null +++ b/include/MetroidPrime/CParticleData.hpp @@ -0,0 +1,35 @@ +#ifndef _CPARTICLEDATA_HPP +#define _CPARTICLEDATA_HPP + +#include "types.h" + +#include "Kyoto/IObjectStore.hpp" +#include "Kyoto/Math/CVector3f.hpp" + +#include "rstl/string.hpp" + +class CParticleData { +public: + enum EParentedMode { + kPM_Initial, + kPM_ContinuousEmitter, + kPM_ContinuousSystem, + }; + +private: + u32 x0_duration; + SObjectTag x4_particle; + rstl::string xc_boneName; + f32 x1c_scale; + EParentedMode x20_parentMode; +}; + +class CAuxiliaryParticleData { +private: + u32 x0_duration; + SObjectTag x4_particle; + CVector3f xc_translation; + f32 x18_scale; +}; + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CParticleDatabase.hpp b/include/MetroidPrime/CParticleDatabase.hpp new file mode 100644 index 00000000..8a3b10e3 --- /dev/null +++ b/include/MetroidPrime/CParticleDatabase.hpp @@ -0,0 +1,41 @@ +#ifndef _CPARTICLEDATABASE_HPP +#define _CPARTICLEDATABASE_HPP + +#include "types.h" + +#include "Kyoto/IObjectStore.hpp" +#include "Kyoto/TToken.hpp" + +#include "rstl/auto_ptr.hpp" +#include "rstl/map.hpp" +#include "rstl/rc_ptr.hpp" +#include "rstl/string.hpp" + +class CElectricDescription; +class CGenDescription; +class CParticleGenInfo; +class CStateManager; +class CSwooshDescription; + +class CParticleDatabase { +public: + typedef rstl::map< rstl::string, rstl::auto_ptr< CParticleGenInfo > > DrawMap; + + void SetParticleEffectState(const rstl::string& name, bool active, CStateManager& mgr); + +private: + rstl::map< CAssetId, rstl::rc_ptr< TLockedToken< CGenDescription > > > x0_particleDescs; + rstl::map< CAssetId, rstl::rc_ptr< TLockedToken< CSwooshDescription > > > x14_swooshDescs; + rstl::map< CAssetId, rstl::rc_ptr< TLockedToken< CElectricDescription > > > x28_electricDescs; + DrawMap x3c_rendererDrawLoop; + DrawMap x50_firstDrawLoop; + DrawMap x64_lastDrawLoop; + DrawMap x78_rendererDraw; + DrawMap x8c_firstDraw; + DrawMap xa0_lastDraw; + bool xb4_24_updatesEnabled : 1; + bool xb4_25_anySystemsDrawnWithModel : 1; +}; +CHECK_SIZEOF(CParticleDatabase, 0xb5) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/CPoseAsTransforms.hpp b/include/MetroidPrime/CPoseAsTransforms.hpp new file mode 100644 index 00000000..3886471c --- /dev/null +++ b/include/MetroidPrime/CPoseAsTransforms.hpp @@ -0,0 +1,24 @@ +#ifndef _CPOSEASTRANSFORMS_HPP +#define _CPOSEASTRANSFORMS_HPP + +#include "types.h" + +#include "MetroidPrime/TGameTypes.hpp" + +#include "Kyoto/Math/CTransform4f.hpp" + +#include "rstl/reserved_vector.hpp" +#include "rstl/single_ptr.hpp" + +class CPoseAsTransforms { +private: + CSegId x0_nextId; + CSegId x1_count; + // TODO TSegIdMapVariableSize + rstl::reserved_vector< rstl::pair< CSegId, CSegId >, 100 > x4_links; + rstl::single_ptr< CTransform4f > xd0_transformArr; + CSegId xd4_lastInserted; +}; +CHECK_SIZEOF(CPoseAsTransforms, 0xd8) + +#endif \ No newline at end of file diff --git a/include/MetroidPrime/Cameras/CCameraManager.hpp b/include/MetroidPrime/Cameras/CCameraManager.hpp index 752b9619..4c9fdd0c 100644 --- a/include/MetroidPrime/Cameras/CCameraManager.hpp +++ b/include/MetroidPrime/Cameras/CCameraManager.hpp @@ -22,7 +22,7 @@ class CStateManager; class CCameraManager { public: - CGameCamera* GetCurrentCamera(CStateManager& mgr); + CGameCamera* GetCurrentCamera(CStateManager& mgr) const; private: TUniqueId x0_curCameraId; diff --git a/include/MetroidPrime/TGameTypes.hpp b/include/MetroidPrime/TGameTypes.hpp index 709c5507..51ee5448 100644 --- a/include/MetroidPrime/TGameTypes.hpp +++ b/include/MetroidPrime/TGameTypes.hpp @@ -56,4 +56,9 @@ CHECK_SIZEOF(TUniqueId, 0x2) typedef u16 TSfxId; static TSfxId InvalidSfxId = 0xFFFFu; +class CSegId { +private: + u8 x0_id; +}; + #endif diff --git a/include/rstl/auto_ptr.hpp b/include/rstl/auto_ptr.hpp index ee6f6cf4..7f43c9e9 100644 --- a/include/rstl/auto_ptr.hpp +++ b/include/rstl/auto_ptr.hpp @@ -28,7 +28,7 @@ public: // other.x0_has = false; // } T* get() { return x4_item; } - const T* get() const { return x4_item; } + /* const*/ T* get() const { return x4_item; } T* operator->() { return get(); } const T* operator->() const { return get(); } T* release() const { diff --git a/include/rstl/construction_deferred.hpp b/include/rstl/construction_deferred.hpp new file mode 100644 index 00000000..168b5026 --- /dev/null +++ b/include/rstl/construction_deferred.hpp @@ -0,0 +1,37 @@ +#ifndef _RSTL_CONSTRUCTION_DEFERRED_HPP +#define _RSTL_CONSTRUCTION_DEFERRED_HPP + +#include "types.h" + +#include "rstl/construct.hpp" + +namespace rstl { +template < typename T > +class construction_deferred { +public: + construction_deferred() : m_valid(false) {} + + template < typename A > + void build(const A& arg) { + rstl::construct(get_ptr(), arg); + makeValid(); + } + void clear(); // TODO + bool valid() const { return m_valid; } + + T* get_ptr() { return reinterpret_cast< T* >(x0_data); } + T& data() { + // TODO ensureIsValid + return *get_ptr(); + } + T& operator*() { return data(); } + +private: + u8 x0_data[sizeof(T)]; + bool m_valid __attribute__((aligned(4))); + + void makeValid() { m_valid = true; } +}; +} // namespace rstl + +#endif \ No newline at end of file diff --git a/include/rstl/map.hpp b/include/rstl/map.hpp index 59729ece..c31484ee 100644 --- a/include/rstl/map.hpp +++ b/include/rstl/map.hpp @@ -3,15 +3,13 @@ #include "types.h" +#include "rstl/red_black_tree.hpp" #include "rstl/rmemory_allocator.hpp" namespace rstl { -template < typename T > -struct less {}; - template < typename K, typename V, typename Cmp = less< K >, typename Alloc = rmemory_allocator > class map { - u8 pad[0x10]; + u8 pad[0x14]; }; } // namespace rstl diff --git a/include/rstl/rc_ptr.hpp b/include/rstl/rc_ptr.hpp index 1e425335..2b174636 100644 --- a/include/rstl/rc_ptr.hpp +++ b/include/rstl/rc_ptr.hpp @@ -20,6 +20,11 @@ public: T* get() { return x0_refData->x0_ptr; } T* operator->() { return get(); } }; + +template < typename T > +class ncrc_ptr : public rc_ptr< T > { + // TODO +}; } // namespace rstl #endif diff --git a/include/rstl/red_black_tree.hpp b/include/rstl/red_black_tree.hpp new file mode 100644 index 00000000..3147c6be --- /dev/null +++ b/include/rstl/red_black_tree.hpp @@ -0,0 +1,16 @@ +#ifndef _RSTL_RED_BLACK_TREE_HPP +#define _RSTL_RED_BLACK_TREE_HPP + +#include "types.h" + +namespace rstl { +template < typename P > +struct select1st {}; + +template < typename T > +struct less {}; + +template < typename T, typename P, int U, typename S = select1st< P >, typename Cmp = less< T > > +class red_black_tree {}; +}; // namespace rstl +#endif \ No newline at end of file diff --git a/include/rstl/single_ptr.hpp b/include/rstl/single_ptr.hpp index 6ed8ebf2..a2f9fadd 100644 --- a/include/rstl/single_ptr.hpp +++ b/include/rstl/single_ptr.hpp @@ -15,6 +15,7 @@ public: T* get() { return x0_ptr; } const T* get() const { return x0_ptr; } T* operator->() { return x0_ptr; } + const T* operator->() const { return x0_ptr; } void operator=(T* ptr) { delete x0_ptr; x0_ptr = ptr; diff --git a/include/rstl/vector.hpp b/include/rstl/vector.hpp index b223de0c..568ccfbd 100644 --- a/include/rstl/vector.hpp +++ b/include/rstl/vector.hpp @@ -107,7 +107,7 @@ void vector< T, Alloc >::reserve(size_t size) { x8_capacity = size; } -typedef vector unk_vector; +typedef vector< void > unk_vector; CHECK_SIZEOF(unk_vector, 0x10) } // namespace rstl diff --git a/src/MetroidPrime/CActor.cpp b/src/MetroidPrime/CActor.cpp index 4af58573..ea1d437c 100644 --- a/src/MetroidPrime/CActor.cpp +++ b/src/MetroidPrime/CActor.cpp @@ -1,7 +1,11 @@ #include "MetroidPrime/CActor.hpp" + #include "MetroidPrime/CActorLights.hpp" #include "MetroidPrime/CActorParameters.hpp" +#include "MetroidPrime/CAnimData.hpp" #include "MetroidPrime/CModelData.hpp" +#include "MetroidPrime/Cameras/CCameraManager.hpp" +#include "MetroidPrime/Cameras/CGameCamera.hpp" #include "Kyoto/Audio/CAudioSys.hpp" @@ -35,7 +39,7 @@ CActor::CActor(TUniqueId uid, bool active, const rstl::string& name, const CEnti , xc8_drawnToken(-1) , xcc_addedToken(-1) , xd0_damageMag(params.GetThermalMag()) -, xd4_maxVol(CAudioSys::kMaxVolume) +, xd4_maxVol(CAudioSys::kkMaxVolume) , xd8_nonLoopingSfxHandles(CSfxHandle(0)) , xe4_24_nextNonLoopingSfxHandle(0) , xe4_27_notInSortedLists(true) @@ -88,7 +92,58 @@ SAdvancementDeltas CActor::UpdateAnimation(float dt, CStateManager& mgr, bool ad SAdvancementDeltas result = x64_modelData->AdvanceAnimation(dt, mgr, GetAreaId(), advTree); x64_modelData->AdvanceParticles(GetTransform(), dt, mgr); UpdateSfxEmitters(); - if (x64_modelData && x64_modelData->GetAnimData().get() != nullptr) { + if (HasAnimation()) { + u16 maxVol = xd4_maxVol; + s32 aid = x4_areaId.Value(); + + const CGameCamera* camera = mgr.GetCameraManager().GetCurrentCamera(mgr); + const CVector3f origin = GetTranslation(); + const CVector3f toCamera = camera->GetTranslation() - origin; + + s32 soundNodeCount = 0; + const CSoundPOINode* soundNode = HasAnimation() ? x64_modelData->GetAnimationData()->GetSoundPOIList(soundNodeCount) : nullptr; + if (soundNodeCount > 0 && soundNode != nullptr) { + for (s32 i = 0; i < soundNodeCount; ++soundNode, ++i) { + s32 charIdx = soundNode->GetCharacterIndex(); + if (soundNode->GetPoiType() != POITYPE_SOUND) + continue; + if (GetMuted()) + continue; + if (charIdx != -1 && x64_modelData->GetAnimationData()->GetCharacterIndex() != charIdx) + continue; + // if (soundNode->GetPoiType() == POITYPE_SOUND && !GetMuted() && (charIdx == -1 || + // x64_modelData->GetAnimationData()->GetCharacterIndex() == charIdx)) + ProcessSoundEvent(soundNode->GetSoundId(), soundNode->GetWeight(), soundNode->GetFlags(), soundNode->GetFallOff(), + soundNode->GetMaxDistance(), 20, maxVol, toCamera, origin, aid, mgr, true); + } + } + + s32 intNodeCount = 0; + const CInt32POINode* intNode = HasAnimation() ? x64_modelData->GetAnimationData()->GetInt32POIList(intNodeCount) : nullptr; + if (intNodeCount > 0 && intNode != nullptr) { + for (s32 i = 0; i < intNodeCount; ++intNode, ++i) { + s32 charIdx = intNode->GetCharacterIndex(); + if (soundNode->GetPoiType() == POITYPE_SOUNDINT32 && !GetMuted() && + (charIdx == -1 || x64_modelData->GetAnimationData()->GetCharacterIndex() == charIdx)) { + ProcessSoundEvent(intNode->GetValue(), intNode->GetWeight(), intNode->GetFlags(), 0.1f, 150.f, 20, maxVol, toCamera, origin, aid, + mgr, true); + } else if (soundNode->GetPoiType() == POITYPE_USEREVENT) { + DoUserAnimEvent(mgr, *intNode, static_cast< EUserEventType >(intNode->GetValue()), dt); + } + } + } + + s32 particleNodeCount = 0; + const CParticlePOINode* particleNode = + HasAnimation() ? x64_modelData->GetAnimationData()->GetParticlePOIList(particleNodeCount) : nullptr; + if (particleNodeCount > 0 && particleNode != nullptr) { + for (s32 i = 0; i < particleNodeCount; ++particleNode, ++i) { + s32 charIdx = soundNode->GetCharacterIndex(); + if (charIdx != -1 && x64_modelData->GetAnimationData()->GetCharacterIndex() != charIdx) + continue; + x64_modelData->GetAnimationData()->SetParticleEffectState(particleNode->GetString(), true, mgr); + } + } } return result; }