All CPlayer implemented (w/ some nonmatchings)

This commit is contained in:
Luke Street 2024-10-14 23:47:46 -06:00
parent f9ed07d33c
commit cddd01c7a8
31 changed files with 1344 additions and 155 deletions

View File

@ -139,7 +139,7 @@ SetupInterpolation__14CCameraManagerFRC12CTransform4f9TUniqueId9CVector3ffffbR13
SetPlayerCamera__14CCameraManagerFR13CStateManager9TUniqueId = .text:0x8000A848; // type:function size:0x84 scope:global SetPlayerCamera__14CCameraManagerFR13CStateManager9TUniqueId = .text:0x8000A848; // type:function size:0x84 scope:global
ShouldBypassInterpolationCamera__14CCameraManagerCFv = .text:0x8000A8CC; // type:function size:0x8 scope:global ShouldBypassInterpolationCamera__14CCameraManagerCFv = .text:0x8000A8CC; // type:function size:0x8 scope:global
IsInterpolationCameraActive__14CCameraManagerCFv = .text:0x8000A8D4; // type:function size:0x10 scope:global IsInterpolationCameraActive__14CCameraManagerCFv = .text:0x8000A8D4; // type:function size:0x10 scope:global
IsInFirstPersonCamera__14CCameraManagerCFv = .text:0x8000A8E4; // type:function size:0x1C scope:global IsInFPCamera__14CCameraManagerCFv = .text:0x8000A8E4; // type:function size:0x1C scope:global
IsInCinematicCamera__14CCameraManagerCFv = .text:0x8000A900; // type:function size:0x14 scope:global IsInCinematicCamera__14CCameraManagerCFv = .text:0x8000A900; // type:function size:0x14 scope:global
GetGlobalCameraTranslation__14CCameraManagerCFRC13CStateManager = .text:0x8000A914; // type:function size:0x54 scope:global GetGlobalCameraTranslation__14CCameraManagerCFRC13CStateManager = .text:0x8000A914; // type:function size:0x54 scope:global
GetCurrentCameraTransform__14CCameraManagerCFRC13CStateManager = .text:0x8000A968; // type:function size:0x68 scope:global GetCurrentCameraTransform__14CCameraManagerCFRC13CStateManager = .text:0x8000A968; // type:function size:0x68 scope:global
@ -288,25 +288,25 @@ IsQualified__11CObjectListFRC7CEntity = .text:0x80010030; // type:function size:
__ct__11CObjectListF15EGameObjectList = .text:0x80010038; // type:function size:0xF4 scope:global __ct__11CObjectListF15EGameObjectList = .text:0x80010038; // type:function size:0xF4 scope:global
__ct__Q211CObjectList16SObjectListEntryFv = .text:0x8001012C; // type:function size:0x18 scope:weak __ct__Q211CObjectList16SObjectListEntryFv = .text:0x8001012C; // type:function size:0x18 scope:weak
__dt__7CPlayerFv = .text:0x80010144; // type:function size:0x730 scope:global __dt__7CPlayerFv = .text:0x80010144; // type:function size:0x730 scope:global
fn_80010874 = .text:0x80010874; // type:function size:0x58 __dt__Q24rstl43single_ptr<Q27CPlayer19CPlayerStuckTracker>Fv = .text:0x80010874; // type:function size:0x58
__dt__Q27CPlayer19CPlayerStuckTrackerFv = .text:0x800108CC; // type:function size:0x1CC scope:global __dt__Q27CPlayer19CPlayerStuckTrackerFv = .text:0x800108CC; // type:function size:0x1CC scope:global
IsTransparent__7CPlayerCFv = .text:0x80010A98; // type:function size:0x18 scope:global IsTransparent__7CPlayerCFv = .text:0x80010A98; // type:function size:0x18 scope:global
IsEnergyLow__7CPlayerCFRC13CStateManager = .text:0x80010AB0; // type:function size:0x7C scope:global IsEnergyLow__7CPlayerCFRC13CStateManager = .text:0x80010AB0; // type:function size:0x7C scope:global
FinishNewScan__7CPlayerFR13CStateManager = .text:0x80010B2C; // type:function size:0x12C scope:global FinishNewScan__7CPlayerFR13CStateManager = .text:0x80010B2C; // type:function size:0x12C scope:global
GetAttachedActorStruggle__7CPlayerCFv = .text:0x80010C58; // type:function size:0x8 scope:global GetAttachedActorStruggle__7CPlayerCFv = .text:0x80010C58; // type:function size:0x8 scope:global
StartSamusVoiceSfx__7CPlayerFUssi = .text:0x80010C60; // type:function size:0xD0 scope:global StartSamusVoiceSfx__7CPlayerFUssi = .text:0x80010C60; // type:function size:0xD0 scope:global
PostUpdate__7CPlayerFfR13CStateManager = .text:0x80010D30; // type:function size:0x1D4 scope:global DoPostCameraStuff__7CPlayerFfR13CStateManager = .text:0x80010D30; // type:function size:0x1D4 scope:global
__ct__16CPlayerCameraBobFRC16CPlayerCameraBob = .text:0x80010F04; // type:function size:0x270 scope:global __as__16CPlayerCameraBobFRC16CPlayerCameraBob = .text:0x80010F04; // type:function size:0x270 scope:global
SetPlayerHitWallDuringMove__7CPlayerFv = .text:0x80011174; // type:function size:0x18 scope:global SetPlayerHitWallDuringMove__7CPlayerFv = .text:0x80011174; // type:function size:0x18 scope:global
DoSfxEffects__7CPlayerF10CSfxHandle = .text:0x8001118C; // type:function size:0x48 scope:global DoSfxEffects__7CPlayerF10CSfxHandle = .text:0x8001118C; // type:function size:0x48 scope:global
UpdatePhazonDamage__7CPlayerFfR13CStateManager = .text:0x800111D4; // type:function size:0x578 scope:global UpdatePhazonDamage__7CPlayerFfR13CStateManager = .text:0x800111D4; // type:function size:0x578 scope:global
__dt__17CCollidableSphere = .text:0x8001174C; // type:function size:0x5C scope:global __dt__17CCollidableSphereFv = .text:0x8001174C; // type:function size:0x5C scope:global
__dt__19CCollisionPrimitiveFv = .text:0x800117A8; // type:function size:0x48 scope:global __dt__19CCollisionPrimitiveFv = .text:0x800117A8; // type:function size:0x48 scope:global
UpdatePhazonCameraShake__7CPlayerFfR13CStateManager = .text:0x800117F0; // type:function size:0x154 scope:global UpdatePhazonCameraShake__7CPlayerFfR13CStateManager = .text:0x800117F0; // type:function size:0x154 scope:global
DecrementPhazon__7CPlayerFv = .text:0x80011944; // type:function size:0x18 scope:global DecrementEnvironmentDamage__7CPlayerFv = .text:0x80011944; // type:function size:0x18 scope:global
IncrementPhazon__7CPlayerFv = .text:0x8001195C; // type:function size:0x24 scope:global IncrementEnvironmentDamage__7CPlayerFv = .text:0x8001195C; // type:function size:0x24 scope:global
DoPreThink__7CPlayerFfRC13CStateManager = .text:0x80011980; // type:function size:0x84 scope:global DoPreThink__7CPlayerFfR13CStateManager = .text:0x80011980; // type:function size:0x84 scope:global
DoThink__7CPlayerFfRC13CStateManager = .text:0x80011A04; // type:function size:0x84 scope:global DoThink__7CPlayerFfR13CStateManager = .text:0x80011A04; // type:function size:0x84 scope:global
ResetControlDirectionInterpolation__7CPlayerFv = .text:0x80011A88; // type:function size:0x1C scope:global ResetControlDirectionInterpolation__7CPlayerFv = .text:0x80011A88; // type:function size:0x1C scope:global
SetControlDirectionInterpolation__7CPlayerFf = .text:0x80011AA4; // type:function size:0x20 scope:global SetControlDirectionInterpolation__7CPlayerFf = .text:0x80011AA4; // type:function size:0x20 scope:global
IsPlayerDeadEnough__7CPlayerCFv = .text:0x80011AC4; // type:function size:0x68 scope:global IsPlayerDeadEnough__7CPlayerCFv = .text:0x80011AC4; // type:function size:0x68 scope:global
@ -336,7 +336,7 @@ SetHudDisable__7CPlayerFfff = .text:0x8001306C; // type:function size:0x3C scope
GetTouchBounds__7CPlayerCFv = .text:0x800130A8; // type:function size:0x160 scope:global GetTouchBounds__7CPlayerCFv = .text:0x800130A8; // type:function size:0x160 scope:global
Touch__7CPlayerFR6CActorR13CStateManager = .text:0x80013208; // type:function size:0x30 scope:global Touch__7CPlayerFR6CActorR13CStateManager = .text:0x80013208; // type:function size:0x30 scope:global
UpdateScanningState__7CPlayerFRC11CFinalInputR13CStateManagerf = .text:0x80013238; // type:function size:0x2CC scope:global UpdateScanningState__7CPlayerFRC11CFinalInputR13CStateManagerf = .text:0x80013238; // type:function size:0x2CC scope:global
ValidateScanning__7CPlayerFRC11CFinalInputR13CStateManager = .text:0x80013504; // type:function size:0x11C scope:global ValidateScanning__7CPlayerCFRC11CFinalInputR13CStateManager = .text:0x80013504; // type:function size:0x11C scope:global
SetScanningState__7CPlayerFQ27CPlayer16EPlayerScanStateR13CStateManager = .text:0x80013620; // type:function size:0x1F0 scope:global SetScanningState__7CPlayerFQ27CPlayer16EPlayerScanStateR13CStateManager = .text:0x80013620; // type:function size:0x1F0 scope:global
GetExplorationMode__7CPlayerCFv = .text:0x80013810; // type:function size:0x38 scope:global GetExplorationMode__7CPlayerCFv = .text:0x80013810; // type:function size:0x38 scope:global
GetCombatMode__7CPlayerCFv = .text:0x80013848; // type:function size:0x38 scope:global GetCombatMode__7CPlayerCFv = .text:0x80013848; // type:function size:0x38 scope:global
@ -348,7 +348,7 @@ RenderReflectedPlayer__7CPlayerFR13CStateManager = .text:0x80014174; // type:fun
PreRender__7CPlayerFR13CStateManagerRC14CFrustumPlanes = .text:0x800142C0; // type:function size:0x120 scope:global PreRender__7CPlayerFR13CStateManagerRC14CFrustumPlanes = .text:0x800142C0; // type:function size:0x120 scope:global
CalculateRenderBounds__7CPlayerFv = .text:0x800143E0; // type:function size:0xC0 scope:global CalculateRenderBounds__7CPlayerFv = .text:0x800143E0; // type:function size:0xC0 scope:global
AddToRenderer__7CPlayerCFRC14CFrustumPlanesRC13CStateManager = .text:0x800144A0; // type:function size:0xAC scope:global AddToRenderer__7CPlayerCFRC14CFrustumPlanesRC13CStateManager = .text:0x800144A0; // type:function size:0xAC scope:global
UpdateGunAlpha__7CPlayerFRC13CStateManager = .text:0x8001454C; // type:function size:0xCC scope:global UpdateGunAlpha__7CPlayerFv = .text:0x8001454C; // type:function size:0xCC scope:global
ComputeFreeLook__7CPlayerFRC11CFinalInput = .text:0x80014618; // type:function size:0x208 scope:global ComputeFreeLook__7CPlayerFRC11CFinalInput = .text:0x80014618; // type:function size:0x208 scope:global
UpdateFreeLook__7CPlayerFf = .text:0x80014820; // type:function size:0x184 scope:global UpdateFreeLook__7CPlayerFf = .text:0x80014820; // type:function size:0x184 scope:global
DetachActorFromPlayer__7CPlayerFv = .text:0x800149A4; // type:function size:0x2C scope:global DetachActorFromPlayer__7CPlayerFv = .text:0x800149A4; // type:function size:0x2C scope:global
@ -7667,7 +7667,7 @@ BuildPatternedExplodeShakeData__16CCameraShakeDataFRC9CVector3ffff = .text:0x801
BuildLandingCameraShake__16CCameraShakeDataFff = .text:0x8015D6C4; // type:function size:0x16C scope:global BuildLandingCameraShake__16CCameraShakeDataFff = .text:0x8015D6C4; // type:function size:0x16C scope:global
__ct__16CCameraShakeDataFff = .text:0x8015D830; // type:function size:0x108 scope:global __ct__16CCameraShakeDataFff = .text:0x8015D830; // type:function size:0x108 scope:global
BuildPatternedExplodeShakeData__16CCameraShakeDataFff = .text:0x8015D938; // type:function size:0x108 scope:global BuildPatternedExplodeShakeData__16CCameraShakeDataFff = .text:0x8015D938; // type:function size:0x108 scope:global
BuildPhazonCameraShakeData__16CCameraShakeDataFff = .text:0x8015DA40; // type:function size:0x174 scope:global SoftBothAxesShake__16CCameraShakeDataFff = .text:0x8015DA40; // type:function size:0x174 scope:global
BuildProjectileCameraShake__16CCameraShakeDataFff = .text:0x8015DBB4; // type:function size:0x100 scope:global BuildProjectileCameraShake__16CCameraShakeDataFff = .text:0x8015DBB4; // type:function size:0x100 scope:global
__sinit_CCameraShakeData_cpp = .text:0x8015DCB4; // type:function size:0x1D4 scope:local __sinit_CCameraShakeData_cpp = .text:0x8015DCB4; // type:function size:0x1D4 scope:local
Accept__22CScriptPickupGeneratorFR8IVisitor = .text:0x8015DE88; // type:function size:0x38 scope:global Accept__22CScriptPickupGeneratorFR8IVisitor = .text:0x8015DE88; // type:function size:0x38 scope:global
@ -18006,7 +18006,7 @@ gPressInputs__13ControlMapper = .data:0x803D93F8; // type:object size:0x114 scop
@336 = .data:0x803D9600; // type:object size:0x5C scope:local @336 = .data:0x803D9600; // type:object size:0x5C scope:local
lbl_803D9660 = .data:0x803D9660; // type:object size:0x78 lbl_803D9660 = .data:0x803D9660; // type:object size:0x78
__vt__11CObjectList = .data:0x803D96D8; // type:object size:0xC scope:global __vt__11CObjectList = .data:0x803D96D8; // type:object size:0xC scope:global
lbl_803D96E8 = .data:0x803D96E8; // type:object size:0x88 __vt__7CPlayer = .data:0x803D96E8; // type:object size:0x88
jumptable_803D9770 = .data:0x803D9770; // type:object size:0x1C scope:local jumptable_803D9770 = .data:0x803D9770; // type:object size:0x1C scope:local
jumptable_803D978C = .data:0x803D978C; // type:object size:0x58 scope:local jumptable_803D978C = .data:0x803D978C; // type:object size:0x58 scope:local
__vt__19CCollisionPrimitive = .data:0x803D97E4; // type:object size:0x2C scope:global __vt__19CCollisionPrimitive = .data:0x803D97E4; // type:object size:0x2C scope:global
@ -19126,8 +19126,8 @@ testRayResult = .bss:0x80457920; // type:object size:0x30
testBoxResult = .bss:0x80457950; // type:object size:0x60 testBoxResult = .bss:0x80457950; // type:object size:0x60
testBox = .bss:0x804579B0; // type:object size:0x18 data:float testBox = .bss:0x804579B0; // type:object size:0x18 data:float
skVisorToItemMapping = .bss:0x804579C8; // type:object size:0x20 data:4byte skVisorToItemMapping = .bss:0x804579C8; // type:object size:0x20 data:4byte
lbl_804579E8 = .bss:0x804579E8; // type:object size:0x10 data:float skDown$1100 = .bss:0x804579E8; // type:object size:0xC data:float
lbl_804579F8 = .bss:0x804579F8; // type:object size:0x18 data:4byte matFilter$1103 = .bss:0x804579F8; // type:object size:0x18 data:4byte
sAllocSpace$2944 = .bss:0x80457A10; // type:object size:0x838 sAllocSpace$2944 = .bss:0x80457A10; // type:object size:0x838
sAllocSpace$2964 = .bss:0x80458248; // type:object size:0x108 sAllocSpace$2964 = .bss:0x80458248; // type:object size:0x108
sAllocSpace$2980 = .bss:0x80458350; // type:object size:0x1E58 sAllocSpace$2980 = .bss:0x80458350; // type:object size:0x1E58
@ -21498,18 +21498,18 @@ lbl_805A8C70 = .sbss:0x805A8C70; // type:object size:0x4 data:4byte
lbl_805A8C74 = .sbss:0x805A8C74; // type:object size:0x1 data:byte lbl_805A8C74 = .sbss:0x805A8C74; // type:object size:0x1 data:byte
gUseSurfaceHack = .sbss:0x805A8C78; // type:object size:0x1 data:byte gUseSurfaceHack = .sbss:0x805A8C78; // type:object size:0x1 data:byte
gSR_Hack = .sbss:0x805A8C7C; // type:object size:0x4 data:4byte gSR_Hack = .sbss:0x805A8C7C; // type:object size:0x4 data:4byte
lbl_805A8C80 = .sbss:0x805A8C80; // type:object size:0x1 data:byte init$1101 = .sbss:0x805A8C80; // type:object size:0x1 data:byte
lbl_805A8C81 = .sbss:0x805A8C81; // type:object size:0x1 data:byte init$1105 = .sbss:0x805A8C81; // type:object size:0x1 data:byte
lbl_805A8C84 = .sbss:0x805A8C84; // type:object size:0x4 data:float earHeight$1154 = .sbss:0x805A8C84; // type:object size:0x4 data:float
lbl_805A8C88 = .sbss:0x805A8C88; // type:object size:0x1 data:byte init$1155 = .sbss:0x805A8C88; // type:object size:0x1 data:byte
lbl_805A8C8C = .sbss:0x805A8C8C; // type:object size:0x4 data:4byte sReferenceCount$9741 = .sbss:0x805A8C8C; // type:object size:0x4 data:4byte
lbl_805A8C90 = .sbss:0x805A8C90; // type:object size:0x1 data:byte init$9742 = .sbss:0x805A8C90; // type:object size:0x1 data:byte
lbl_805A8C94 = .sbss:0x805A8C94; // type:object size:0x4 data:4byte sReferenceCount$9761 = .sbss:0x805A8C94; // type:object size:0x4 data:4byte
lbl_805A8C98 = .sbss:0x805A8C98; // type:object size:0x1 data:byte init$9762 = .sbss:0x805A8C98; // type:object size:0x1 data:byte
lbl_805A8C9C = .sbss:0x805A8C9C; // type:object size:0x4 data:4byte sReferenceCount$9777 = .sbss:0x805A8C9C; // type:object size:0x4 data:4byte
lbl_805A8CA0 = .sbss:0x805A8CA0; // type:object size:0x1 data:byte init$9778 = .sbss:0x805A8CA0; // type:object size:0x1 data:byte
lbl_805A8CA4 = .sbss:0x805A8CA4; // type:object size:0x4 data:4byte sReferenceCount$9788 = .sbss:0x805A8CA4; // type:object size:0x4 data:4byte
lbl_805A8CA8 = .sbss:0x805A8CA8; // type:object size:0x8 data:byte init$9789 = .sbss:0x805A8CA8; // type:object size:0x1 data:byte
lbl_805A8CB0 = .sbss:0x805A8CB0; // type:object size:0x8 data:4byte lbl_805A8CB0 = .sbss:0x805A8CB0; // type:object size:0x8 data:4byte
lbl_805A8CB8 = .sbss:0x805A8CB8; // type:object size:0x8 data:4byte lbl_805A8CB8 = .sbss:0x805A8CB8; // type:object size:0x8 data:4byte
lbl_805A8CC0 = .sbss:0x805A8CC0; // type:object size:0x4 data:4byte lbl_805A8CC0 = .sbss:0x805A8CC0; // type:object size:0x4 data:4byte

View File

@ -139,7 +139,7 @@ SetupInterpolation__14CCameraManagerFRC12CTransform4f9TUniqueId9CVector3ffffbR13
SetPlayerCamera__14CCameraManagerFR13CStateManager9TUniqueId = .text:0x8000A8C4; // type:function size:0x84 scope:global SetPlayerCamera__14CCameraManagerFR13CStateManager9TUniqueId = .text:0x8000A8C4; // type:function size:0x84 scope:global
ShouldBypassInterpolationCamera__14CCameraManagerCFv = .text:0x8000A948; // type:function size:0x8 scope:global ShouldBypassInterpolationCamera__14CCameraManagerCFv = .text:0x8000A948; // type:function size:0x8 scope:global
IsInterpolationCameraActive__14CCameraManagerCFv = .text:0x8000A950; // type:function size:0x10 scope:global IsInterpolationCameraActive__14CCameraManagerCFv = .text:0x8000A950; // type:function size:0x10 scope:global
IsInFirstPersonCamera__14CCameraManagerCFv = .text:0x8000A960; // type:function size:0x1C scope:global IsInFPCamera__14CCameraManagerCFv = .text:0x8000A960; // type:function size:0x1C scope:global
IsInCinematicCamera__14CCameraManagerCFv = .text:0x8000A97C; // type:function size:0x14 scope:global IsInCinematicCamera__14CCameraManagerCFv = .text:0x8000A97C; // type:function size:0x14 scope:global
GetGlobalCameraTranslation__14CCameraManagerCFRC13CStateManager = .text:0x8000A990; // type:function size:0x54 scope:global GetGlobalCameraTranslation__14CCameraManagerCFRC13CStateManager = .text:0x8000A990; // type:function size:0x54 scope:global
GetCurrentCameraTransform__14CCameraManagerCFRC13CStateManager = .text:0x8000A9E4; // type:function size:0x68 scope:global GetCurrentCameraTransform__14CCameraManagerCFRC13CStateManager = .text:0x8000A9E4; // type:function size:0x68 scope:global
@ -288,25 +288,25 @@ IsQualified__11CObjectListFRC7CEntity = .text:0x800100AC; // type:function size:
__ct__11CObjectListF15EGameObjectList = .text:0x800100B4; // type:function size:0xF4 scope:global __ct__11CObjectListF15EGameObjectList = .text:0x800100B4; // type:function size:0xF4 scope:global
__ct__Q211CObjectList16SObjectListEntryFv = .text:0x800101A8; // type:function size:0x18 scope:weak __ct__Q211CObjectList16SObjectListEntryFv = .text:0x800101A8; // type:function size:0x18 scope:weak
__dt__7CPlayerFv = .text:0x800101C0; // type:function size:0x730 scope:global __dt__7CPlayerFv = .text:0x800101C0; // type:function size:0x730 scope:global
fn_80010874 = .text:0x800108F0; // type:function size:0x58 scope:global __dt__Q24rstl43single_ptr<Q27CPlayer19CPlayerStuckTracker>Fv = .text:0x800108F0; // type:function size:0x58 scope:global
__dt__Q27CPlayer19CPlayerStuckTrackerFv = .text:0x80010948; // type:function size:0x1CC scope:global __dt__Q27CPlayer19CPlayerStuckTrackerFv = .text:0x80010948; // type:function size:0x1CC scope:global
IsTransparent__7CPlayerCFv = .text:0x80010B14; // type:function size:0x18 scope:global IsTransparent__7CPlayerCFv = .text:0x80010B14; // type:function size:0x18 scope:global
IsEnergyLow__7CPlayerCFRC13CStateManager = .text:0x80010B2C; // type:function size:0x7C scope:global IsEnergyLow__7CPlayerCFRC13CStateManager = .text:0x80010B2C; // type:function size:0x7C scope:global
FinishNewScan__7CPlayerFR13CStateManager = .text:0x80010BA8; // type:function size:0x12C scope:global FinishNewScan__7CPlayerFR13CStateManager = .text:0x80010BA8; // type:function size:0x12C scope:global
GetAttachedActorStruggle__7CPlayerCFv = .text:0x80010CD4; // type:function size:0x8 scope:global GetAttachedActorStruggle__7CPlayerCFv = .text:0x80010CD4; // type:function size:0x8 scope:global
StartSamusVoiceSfx__7CPlayerFUssi = .text:0x80010CDC; // type:function size:0xD0 scope:global StartSamusVoiceSfx__7CPlayerFUssi = .text:0x80010CDC; // type:function size:0xD0 scope:global
PostUpdate__7CPlayerFfR13CStateManager = .text:0x80010DAC; // type:function size:0x1D4 scope:global DoPostCameraStuff__7CPlayerFfR13CStateManager = .text:0x80010DAC; // type:function size:0x1D4 scope:global
__ct__16CPlayerCameraBobFRC16CPlayerCameraBob = .text:0x80010F80; // type:function size:0x270 scope:global __as__16CPlayerCameraBobFRC16CPlayerCameraBob = .text:0x80010F80; // type:function size:0x270 scope:global
SetPlayerHitWallDuringMove__7CPlayerFv = .text:0x800111F0; // type:function size:0x18 scope:global SetPlayerHitWallDuringMove__7CPlayerFv = .text:0x800111F0; // type:function size:0x18 scope:global
DoSfxEffects__7CPlayerF10CSfxHandle = .text:0x80011208; // type:function size:0x48 scope:global DoSfxEffects__7CPlayerF10CSfxHandle = .text:0x80011208; // type:function size:0x48 scope:global
UpdatePhazonDamage__7CPlayerFfR13CStateManager = .text:0x80011250; // type:function size:0x578 scope:global UpdatePhazonDamage__7CPlayerFfR13CStateManager = .text:0x80011250; // type:function size:0x578 scope:global
__dt__17CCollidableSphere = .text:0x800117C8; // type:function size:0x5C scope:global __dt__17CCollidableSphereFv = .text:0x800117C8; // type:function size:0x5C scope:global
__dt__19CCollisionPrimitiveFv = .text:0x80011824; // type:function size:0x48 scope:global __dt__19CCollisionPrimitiveFv = .text:0x80011824; // type:function size:0x48 scope:global
UpdatePhazonCameraShake__7CPlayerFfR13CStateManager = .text:0x8001186C; // type:function size:0x154 scope:global UpdatePhazonCameraShake__7CPlayerFfR13CStateManager = .text:0x8001186C; // type:function size:0x154 scope:global
DecrementPhazon__7CPlayerFv = .text:0x800119C0; // type:function size:0x18 scope:global DecrementEnvironmentDamage__7CPlayerFv = .text:0x800119C0; // type:function size:0x18 scope:global
IncrementPhazon__7CPlayerFv = .text:0x800119D8; // type:function size:0x24 scope:global IncrementEnvironmentDamage__7CPlayerFv = .text:0x800119D8; // type:function size:0x24 scope:global
DoPreThink__7CPlayerFfRC13CStateManager = .text:0x800119FC; // type:function size:0x84 scope:global DoPreThink__7CPlayerFfR13CStateManager = .text:0x800119FC; // type:function size:0x84 scope:global
DoThink__7CPlayerFfRC13CStateManager = .text:0x80011A80; // type:function size:0x84 scope:global DoThink__7CPlayerFfR13CStateManager = .text:0x80011A80; // type:function size:0x84 scope:global
ResetControlDirectionInterpolation__7CPlayerFv = .text:0x80011B04; // type:function size:0x1C scope:global ResetControlDirectionInterpolation__7CPlayerFv = .text:0x80011B04; // type:function size:0x1C scope:global
SetControlDirectionInterpolation__7CPlayerFf = .text:0x80011B20; // type:function size:0x20 scope:global SetControlDirectionInterpolation__7CPlayerFf = .text:0x80011B20; // type:function size:0x20 scope:global
IsPlayerDeadEnough__7CPlayerCFv = .text:0x80011B40; // type:function size:0x68 scope:global IsPlayerDeadEnough__7CPlayerCFv = .text:0x80011B40; // type:function size:0x68 scope:global
@ -336,7 +336,7 @@ SetHudDisable__7CPlayerFfff = .text:0x800130E8; // type:function size:0x3C scope
GetTouchBounds__7CPlayerCFv = .text:0x80013124; // type:function size:0x160 scope:global GetTouchBounds__7CPlayerCFv = .text:0x80013124; // type:function size:0x160 scope:global
Touch__7CPlayerFR6CActorR13CStateManager = .text:0x80013284; // type:function size:0x30 scope:global Touch__7CPlayerFR6CActorR13CStateManager = .text:0x80013284; // type:function size:0x30 scope:global
UpdateScanningState__7CPlayerFRC11CFinalInputR13CStateManagerf = .text:0x800132B4; // type:function size:0x2CC scope:global UpdateScanningState__7CPlayerFRC11CFinalInputR13CStateManagerf = .text:0x800132B4; // type:function size:0x2CC scope:global
ValidateScanning__7CPlayerFRC11CFinalInputR13CStateManager = .text:0x80013580; // type:function size:0x11C scope:global ValidateScanning__7CPlayerCFRC11CFinalInputR13CStateManager = .text:0x80013580; // type:function size:0x11C scope:global
SetScanningState__7CPlayerFQ27CPlayer16EPlayerScanStateR13CStateManager = .text:0x8001369C; // type:function size:0x1F0 scope:global SetScanningState__7CPlayerFQ27CPlayer16EPlayerScanStateR13CStateManager = .text:0x8001369C; // type:function size:0x1F0 scope:global
GetExplorationMode__7CPlayerCFv = .text:0x8001388C; // type:function size:0x38 scope:global GetExplorationMode__7CPlayerCFv = .text:0x8001388C; // type:function size:0x38 scope:global
GetCombatMode__7CPlayerCFv = .text:0x800138C4; // type:function size:0x38 scope:global GetCombatMode__7CPlayerCFv = .text:0x800138C4; // type:function size:0x38 scope:global
@ -348,7 +348,7 @@ RenderReflectedPlayer__7CPlayerFR13CStateManager = .text:0x800141F0; // type:fun
PreRender__7CPlayerFR13CStateManagerRC14CFrustumPlanes = .text:0x8001433C; // type:function size:0x120 scope:global PreRender__7CPlayerFR13CStateManagerRC14CFrustumPlanes = .text:0x8001433C; // type:function size:0x120 scope:global
CalculateRenderBounds__7CPlayerFv = .text:0x8001445C; // type:function size:0xC0 scope:global CalculateRenderBounds__7CPlayerFv = .text:0x8001445C; // type:function size:0xC0 scope:global
AddToRenderer__7CPlayerCFRC14CFrustumPlanesRC13CStateManager = .text:0x8001451C; // type:function size:0xAC scope:global AddToRenderer__7CPlayerCFRC14CFrustumPlanesRC13CStateManager = .text:0x8001451C; // type:function size:0xAC scope:global
UpdateGunAlpha__7CPlayerFRC13CStateManager = .text:0x800145C8; // type:function size:0xCC scope:global UpdateGunAlpha__7CPlayerFv = .text:0x800145C8; // type:function size:0xCC scope:global
ComputeFreeLook__7CPlayerFRC11CFinalInput = .text:0x80014694; // type:function size:0x208 scope:global ComputeFreeLook__7CPlayerFRC11CFinalInput = .text:0x80014694; // type:function size:0x208 scope:global
UpdateFreeLook__7CPlayerFf = .text:0x8001489C; // type:function size:0x184 scope:global UpdateFreeLook__7CPlayerFf = .text:0x8001489C; // type:function size:0x184 scope:global
DetachActorFromPlayer__7CPlayerFv = .text:0x80014A20; // type:function size:0x2C scope:global DetachActorFromPlayer__7CPlayerFv = .text:0x80014A20; // type:function size:0x2C scope:global
@ -7670,7 +7670,7 @@ BuildPatternedExplodeShakeData__16CCameraShakeDataFRC9CVector3ffff = .text:0x801
BuildLandingCameraShake__16CCameraShakeDataFff = .text:0x8015D740; // type:function size:0x16C scope:global BuildLandingCameraShake__16CCameraShakeDataFff = .text:0x8015D740; // type:function size:0x16C scope:global
__ct__16CCameraShakeDataFff = .text:0x8015D8AC; // type:function size:0x108 scope:global __ct__16CCameraShakeDataFff = .text:0x8015D8AC; // type:function size:0x108 scope:global
BuildPatternedExplodeShakeData__16CCameraShakeDataFff = .text:0x8015D9B4; // type:function size:0x108 scope:global BuildPatternedExplodeShakeData__16CCameraShakeDataFff = .text:0x8015D9B4; // type:function size:0x108 scope:global
BuildPhazonCameraShakeData__16CCameraShakeDataFff = .text:0x8015DABC; // type:function size:0x174 scope:global SoftBothAxesShake__16CCameraShakeDataFff = .text:0x8015DABC; // type:function size:0x174 scope:global
BuildProjectileCameraShake__16CCameraShakeDataFff = .text:0x8015DC30; // type:function size:0x100 scope:global BuildProjectileCameraShake__16CCameraShakeDataFff = .text:0x8015DC30; // type:function size:0x100 scope:global
__sinit_CCameraShakeData_cpp = .text:0x8015DD30; // type:function size:0x1D4 scope:global __sinit_CCameraShakeData_cpp = .text:0x8015DD30; // type:function size:0x1D4 scope:global
Accept__22CScriptPickupGeneratorFR8IVisitor = .text:0x8015DF04; // type:function size:0x38 scope:global Accept__22CScriptPickupGeneratorFR8IVisitor = .text:0x8015DF04; // type:function size:0x38 scope:global
@ -18059,7 +18059,7 @@ gPressInputs__13ControlMapper = .data:0x803D95D8; // type:object size:0x114 scop
@336 = .data:0x803D97E0; // type:object size:0x60 scope:local @336 = .data:0x803D97E0; // type:object size:0x60 scope:local
lbl_803D9660 = .data:0x803D9840; // type:object size:0x78 scope:global lbl_803D9660 = .data:0x803D9840; // type:object size:0x78 scope:global
__vt__11CObjectList = .data:0x803D98B8; // type:object size:0x10 scope:global __vt__11CObjectList = .data:0x803D98B8; // type:object size:0x10 scope:global
lbl_803D96E8 = .data:0x803D98C8; // type:object size:0x88 scope:global __vt__7CPlayer = .data:0x803D98C8; // type:object size:0x88 scope:global
lbl_803D9770 = .data:0x803D9950; // type:object size:0x1C scope:global lbl_803D9770 = .data:0x803D9950; // type:object size:0x1C scope:global
lbl_803D978C = .data:0x803D996C; // type:object size:0x58 scope:global lbl_803D978C = .data:0x803D996C; // type:object size:0x58 scope:global
__vt__19CCollisionPrimitive = .data:0x803D99C4; // type:object size:0x2C scope:global __vt__19CCollisionPrimitive = .data:0x803D99C4; // type:object size:0x2C scope:global
@ -19150,8 +19150,8 @@ lbl_80457798 = .bss:0x80457978; // type:object size:0x160 scope:local
@27 = .bss:0x80457AD8; // type:object size:0xC scope:local @27 = .bss:0x80457AD8; // type:object size:0xC scope:local
lbl_80457908 = .bss:0x80457AE8; // type:object size:0xC0 scope:local data:float lbl_80457908 = .bss:0x80457AE8; // type:object size:0xC0 scope:local data:float
lbl_804579C8 = .bss:0x80457BA8; // type:object size:0x20 scope:local data:4byte lbl_804579C8 = .bss:0x80457BA8; // type:object size:0x20 scope:local data:4byte
lbl_804579E8 = .bss:0x80457BC8; // type:object size:0x10 scope:local data:float skDown$1100 = .bss:0x80457BC8; // type:object size:0xC scope:local data:float
lbl_804579F8 = .bss:0x80457BD8; // type:object size:0x18 scope:local data:4byte matFilter$1103 = .bss:0x80457BD8; // type:object size:0x18 scope:local data:4byte
sAllocSpace$2944 = .bss:0x80457BF0; // type:object size:0x838 scope:local sAllocSpace$2944 = .bss:0x80457BF0; // type:object size:0x838 scope:local
sAllocSpace$2964 = .bss:0x80458428; // type:object size:0x108 scope:local sAllocSpace$2964 = .bss:0x80458428; // type:object size:0x108 scope:local
sAllocSpace$2980 = .bss:0x80458530; // type:object size:0x1E58 scope:local sAllocSpace$2980 = .bss:0x80458530; // type:object size:0x1E58 scope:local
@ -21538,7 +21538,7 @@ lbl_805A8C70 = .sbss:0x805A8E50; // type:object size:0x4 scope:global data:4byte
lbl_805A8C74 = .sbss:0x805A8E54; // type:object size:0x1 scope:global data:byte lbl_805A8C74 = .sbss:0x805A8E54; // type:object size:0x1 scope:global data:byte
lbl_805A8C78 = .sbss:0x805A8E58; // type:object size:0x1 scope:global data:byte lbl_805A8C78 = .sbss:0x805A8E58; // type:object size:0x1 scope:global data:byte
lbl_805A8C7C = .sbss:0x805A8E5C; // type:object size:0x4 scope:global data:4byte lbl_805A8C7C = .sbss:0x805A8E5C; // type:object size:0x4 scope:global data:4byte
lbl_805A8C80 = .sbss:0x805A8E60; // type:object size:0x1 scope:global data:byte init$1101 = .sbss:0x805A8E60; // type:object size:0x1 scope:global data:byte
lbl_805A8C81 = .sbss:0x805A8E61; // type:object size:0x1 scope:global data:byte lbl_805A8C81 = .sbss:0x805A8E61; // type:object size:0x1 scope:global data:byte
lbl_805A8C84 = .sbss:0x805A8E64; // type:object size:0x4 scope:global data:float lbl_805A8C84 = .sbss:0x805A8E64; // type:object size:0x4 scope:global data:float
lbl_805A8C88 = .sbss:0x805A8E68; // type:object size:0x1 scope:global data:byte lbl_805A8C88 = .sbss:0x805A8E68; // type:object size:0x1 scope:global data:byte

View File

@ -3,17 +3,18 @@
#include "types.h" #include "types.h"
#include "Collision/CInternalCollisionStructure.hpp"
#include "Collision/CMaterialList.hpp" #include "Collision/CMaterialList.hpp"
#include "Kyoto/IObjectStore.hpp"
#include "Kyoto/Math/CAABox.hpp" #include "Kyoto/Math/CAABox.hpp"
#include "Kyoto/Math/CTransform4f.hpp" #include "Kyoto/Math/CTransform4f.hpp"
#include "Kyoto/SObjectTag.hpp"
#include "rstl/single_ptr.hpp" #include "rstl/single_ptr.hpp"
#include "rstl/vector.hpp" #include "rstl/vector.hpp"
class CRayCastResult; class CRayCastResult;
class CCollisionInfoList; class CCollisionInfoList;
class CInternalCollisionStructure;
class CInternalRayCastStructure; class CInternalRayCastStructure;
class CCollisionInfo; class CCollisionInfo;
@ -44,7 +45,7 @@ public:
virtual uint GetTableIndex() const = 0; virtual uint GetTableIndex() const = 0;
virtual void SetMaterial(const CMaterialList& other) { x8_material = other; } virtual void SetMaterial(const CMaterialList& other) { x8_material = other; }
virtual const CMaterialList& GetMaterial() const; virtual const CMaterialList& GetMaterial() const { return x8_material; }
virtual CAABox CalculateAABox(const CTransform4f&) const = 0; virtual CAABox CalculateAABox(const CTransform4f&) const = 0;
virtual CAABox CalculateLocalAABox() const = 0; virtual CAABox CalculateLocalAABox() const = 0;
virtual FourCC GetPrimType() const = 0; virtual FourCC GetPrimType() const = 0;
@ -62,6 +63,15 @@ public:
static void InitEndColliders(); static void InitEndColliders();
static void Uninitialize(); static void Uninitialize();
static bool Collide(const CInternalCollisionStructure::CPrimDesc& prim0,
const CInternalCollisionStructure::CPrimDesc& prim1,
CCollisionInfoList& list);
static bool CollideBoolean(const CInternalCollisionStructure::CPrimDesc& prim0,
const CInternalCollisionStructure::CPrimDesc& prim1);
static bool CollideMoving(const CInternalCollisionStructure::CPrimDesc& prim0,
const CInternalCollisionStructure::CPrimDesc& prim1,
const CVector3f& dir, double& dOut, CCollisionInfo& infoOut);
private: private:
static int sNumTypes; static int sNumTypes;
static bool sInitComplete; static bool sInitComplete;

View File

@ -217,7 +217,7 @@ public:
static void SfxVolume(CSfxHandle handle, uchar volume); static void SfxVolume(CSfxHandle handle, uchar volume);
static void SfxSpan(CSfxHandle, uchar); static void SfxSpan(CSfxHandle, uchar);
static bool IsPlaying(const CSfxHandle& handle); static bool IsPlaying(CSfxHandle handle);
static void StopSound(CSfxHandle handle); static void StopSound(CSfxHandle handle);
static void SetChannel(ESfxChannels); static void SetChannel(ESfxChannels);

View File

@ -15,6 +15,7 @@ class CTransform4f;
class CFrustumPlanes { class CFrustumPlanes {
public: public:
CFrustumPlanes() {}
CFrustumPlanes(const CTransform4f&, float, float, float, bool, float); CFrustumPlanes(const CTransform4f&, float, float, float, bool, float);
bool BoxInFrustumPlanes(const CAABox& box) const; bool BoxInFrustumPlanes(const CAABox& box) const;

View File

@ -17,6 +17,7 @@ public:
} }
void AddValue(const T& value); void AddValue(const T& value);
rstl::optional_object< T > GetAverage() const; rstl::optional_object< T > GetAverage() const;
rstl::optional_object< T > GetEntry(int idx) const;
}; };
template < typename T, int N > template < typename T, int N >
@ -39,4 +40,13 @@ rstl::optional_object< T > TReservedAverage< T, N >::GetAverage() const {
} }
} }
template < typename T, int N >
inline rstl::optional_object< T > TReservedAverage< T, N >::GetEntry(int idx) const {
if (idx >= this->size()) {
return rstl::optional_object_null();
} else {
return rstl::optional_object< T >(this->operator[](idx));
}
}
#endif // _TRESERVEDAVERAGE #endif // _TRESERVEDAVERAGE

View File

@ -3,12 +3,17 @@
#include "types.h" #include "types.h"
#include "MetroidPrime/CStateManager.hpp"
#include "MetroidPrime/CRippleManager.hpp" #include "MetroidPrime/CRippleManager.hpp"
#include "MetroidPrime/TGameTypes.hpp" #include "MetroidPrime/TGameTypes.hpp"
#include "Kyoto/Math/CVector3f.hpp"
#include "rstl/reserved_vector.hpp" #include "rstl/reserved_vector.hpp"
class CScriptWater; class CScriptWater;
class CStateManager;
class CVector3f;
class CFluidPlaneManager { class CFluidPlaneManager {
public: public:
@ -18,6 +23,9 @@ public:
void CreateSplash(TUniqueId splasher, CStateManager& mgr, const CScriptWater& water, void CreateSplash(TUniqueId splasher, CStateManager& mgr, const CScriptWater& water,
const CVector3f& pos, float factor, bool sfx); const CVector3f& pos, float factor, bool sfx);
float GetLastSplashDeltaTime(TUniqueId uid) const;
float GetLastRippleDeltaTime(TUniqueId uid) const;
private: private:
class CSplashRecord { class CSplashRecord {
float x0_time; float x0_time;

View File

@ -93,6 +93,24 @@ public:
bool operator==(const CConstChainIterator& other) const { return m_area == other.m_area; } bool operator==(const CConstChainIterator& other) const { return m_area == other.m_area; }
}; };
enum EOcclusionState { kOS_Occluded, kOS_Visible };
struct CPostConstructed {
uchar x0_pad[0xa0];
CPVSAreaSet* xa0_pvs;
uchar xa4_pad[0x1020];
rstl::single_ptr< CAreaFog > x10c4_areaFog;
rstl::optional_object< void* > x10c8_sclyBuf;
u32 x10d0_sclySize;
const u8* x10d4_firstMatPtr;
const CScriptAreaAttributes* x10d8_areaAttributes;
EOcclusionState x10dc_occlusionState;
uchar x10e0_pad[0x60];
CPostConstructed();
~CPostConstructed();
};
~CGameArea(); ~CGameArea();
const CTransform4f& IGetTM() const override; const CTransform4f& IGetTM() const override;
CAssetId IGetStringTableAssetId() const override; CAssetId IGetStringTableAssetId() const override;
@ -119,13 +137,23 @@ public:
bool StartStreamingMainArea(); bool StartStreamingMainArea();
CAssetId GetAreaAssetId() const { return x84_mrea; }
const CAreaFog* GetAreaFog() const { return x12c_postConstructed->x10c4_areaFog.get(); }
CAreaFog* AreaFog() { return x12c_postConstructed->x10c4_areaFog.get(); }
EOcclusionState GetOcclusionState() const { return x12c_postConstructed->x10dc_occlusionState; }
const rstl::vector< CWorldLight >& GetLightsA() const;
const rstl::vector< CWorldLight >& GetLightsB() const;
const CPVSAreaSet* GetAreaVisSet() const { return x12c_postConstructed->xa0_pvs; }
bool IsPostConstructed() const { return xf0_24_postConstructed; } // name?
CPostConstructed* GetPostConstructed() { return x12c_postConstructed.get(); } // name?
const CPostConstructed* GetPostConstructed() const { return x12c_postConstructed.get(); } // name?
private: private:
void AllocNewAreaData(int, int); void AllocNewAreaData(int, int);
void CullDeadAreaRequests(); void CullDeadAreaRequests();
int VerifyHeader() const; int VerifyHeader() const;
int GetNumPartSizes() const; int GetNumPartSizes() const;
enum EPhase { enum EPhase {
kP_LoadHeader, kP_LoadHeader,
kP_LoadSecSizes, kP_LoadSecSizes,
@ -154,36 +182,7 @@ private:
bool xf0_28_validated : 1; bool xf0_28_validated : 1;
EPhase xf4_phase; EPhase xf4_phase;
rstl::list< rstl::rc_ptr< CDvdRequest > > xf8_loadTransactions; rstl::list< rstl::rc_ptr< CDvdRequest > > xf8_loadTransactions;
rstl::vector< rstl::pair< rstl::auto_ptr< char >, int > > x110_mreaSecBufs;
public:
enum EOcclusionState { kOS_Occluded, kOS_Visible };
struct CPostConstructed {
uchar x0_pad[0xa0];
CPVSAreaSet* xa0_pvs;
uchar xa4_pad[0x1020];
rstl::single_ptr< CAreaFog > x10c4_areaFog;
rstl::optional_object< void* > x10c8_sclyBuf;
u32 x10d0_sclySize;
const u8* x10d4_firstMatPtr;
const CScriptAreaAttributes* x10d8_areaAttributes;
EOcclusionState x10dc_occlusionState;
uchar x10e0_pad[0x60];
CPostConstructed();
~CPostConstructed();
};
CAssetId GetAreaAssetId() const { return x84_mrea; }
const CAreaFog* GetAreaFog() const { return x12c_postConstructed->x10c4_areaFog.get(); }
CAreaFog* AreaFog() { return x12c_postConstructed->x10c4_areaFog.get(); }
EOcclusionState GetOcclusionState() const { return x12c_postConstructed->x10dc_occlusionState; }
const rstl::vector<CWorldLight>& GetLightsA() const;
const rstl::vector<CWorldLight>& GetLightsB() const;
const CPVSAreaSet* GetAreaVisSet() const { return x12c_postConstructed->xa0_pvs; }
private:
rstl::vector< rstl::pair< rstl::auto_ptr<char>, int> > x110_mreaSecBufs;
int x120_unk; int x120_unk;
int x124_secCount; int x124_secCount;
int x128_mreaDataOffset; int x128_mreaDataOffset;

View File

@ -22,6 +22,9 @@ public:
static bool DetectDynamicCollisionBoolean(const CCollisionPrimitive&, const CTransform4f&, static bool DetectDynamicCollisionBoolean(const CCollisionPrimitive&, const CTransform4f&,
const TEntityList&, const CStateManager&); const TEntityList&, const CStateManager&);
static void BuildAreaCollisionCache(const CStateManager& mgr, CAreaCollisionCache& cache); static void BuildAreaCollisionCache(const CStateManager& mgr, CAreaCollisionCache& cache);
static bool DetectCollisionBoolean(const CStateManager& mgr, const CCollisionPrimitive& prim,
const CTransform4f& xf, const CMaterialFilter& filter,
const TEntityList& nearList);
static bool DetectCollisionBoolean_Cached(const CStateManager& mgr, CAreaCollisionCache& cache, static bool DetectCollisionBoolean_Cached(const CStateManager& mgr, CAreaCollisionCache& cache,
const CCollisionPrimitive& prim, const CTransform4f& xf, const CCollisionPrimitive& prim, const CTransform4f& xf,
const CMaterialFilter& filter, const CMaterialFilter& filter,

View File

@ -66,15 +66,7 @@ public:
CModelData(); CModelData();
CModelData(const CAnimRes&); CModelData(const CAnimRes&);
CModelData(const CStaticRes&); CModelData(const CStaticRes&);
CModelData(const CModelData& other) // CModelData(const CModelData& other);
: x0_scale(other.x0_scale)
, xc_animData(other.xc_animData)
, x14_24_renderSorted(other.x14_24_renderSorted)
, x14_25_sortThermal(other.x14_25_sortThermal)
, x18_ambientColor(other.x18_ambientColor)
, x1c_normalModel(other.x1c_normalModel)
, x2c_xrayModel(other.x2c_xrayModel)
, x3c_infraModel(other.x3c_infraModel) {}
~CModelData(); ~CModelData();
CAdvancementDeltas AdvanceAnimation(float dt, CStateManager& mgr, TAreaId aid, bool advTree); CAdvancementDeltas AdvanceAnimation(float dt, CStateManager& mgr, TAreaId aid, bool advTree);
@ -127,9 +119,9 @@ private:
bool x14_24_renderSorted : 1; bool x14_24_renderSorted : 1;
bool x14_25_sortThermal : 1; bool x14_25_sortThermal : 1;
CColor x18_ambientColor; CColor x18_ambientColor;
rstl::optional_object< TCachedToken< CModel > > x1c_normalModel; rstl::optional_object< TLockedToken< CModel > > x1c_normalModel;
rstl::optional_object< TCachedToken< CModel > > x2c_xrayModel; rstl::optional_object< TLockedToken< CModel > > x2c_xrayModel;
rstl::optional_object< TCachedToken< CModel > > x3c_infraModel; rstl::optional_object< TLockedToken< CModel > > x3c_infraModel;
}; };
CHECK_SIZEOF(CModelData, 0x4c) CHECK_SIZEOF(CModelData, 0x4c)

View File

@ -3,11 +3,9 @@
#include "types.h" #include "types.h"
#include "Kyoto/CObjectReference.hpp"
#include "Kyoto/CRandom16.hpp" #include "Kyoto/CRandom16.hpp"
#include "Kyoto/Input/CFinalInput.hpp" #include "Kyoto/Input/CFinalInput.hpp"
#include "Kyoto/Math/CFrustumPlanes.hpp" #include "Kyoto/Math/CFrustumPlanes.hpp"
#include "Kyoto/Math/CVector2f.hpp"
#include "Kyoto/Math/CVector2i.hpp" #include "Kyoto/Math/CVector2i.hpp"
#include "Kyoto/TOneStatic.hpp" #include "Kyoto/TOneStatic.hpp"
#include "Kyoto/TToken.hpp" #include "Kyoto/TToken.hpp"
@ -138,6 +136,7 @@ public:
const rstl::string& HashInstanceName(CInputStream& in); const rstl::string& HashInstanceName(CInputStream& in);
bool SwapOutAllPossibleMemory(); bool SwapOutAllPossibleMemory();
void UpdateObjectInLists(CEntity&); void UpdateObjectInLists(CEntity&);
rstl::pair< int, int > CalculateScanPair() const;
void BuildNearList(TEntityList& nearList, const CVector3f& pos, const CVector3f& dir, float mag, void BuildNearList(TEntityList& nearList, const CVector3f& pos, const CVector3f& dir, float mag,
const CMaterialFilter&, const CActor*) const; const CMaterialFilter&, const CActor*) const;
@ -193,6 +192,7 @@ public:
CWorldTransManager* WorldTransManager() { return x8c4_worldTransManager.GetPtr(); } CWorldTransManager* WorldTransManager() { return x8c4_worldTransManager.GetPtr(); }
const CWorldTransManager* GetWorldTransManager() const { return x8c4_worldTransManager.GetPtr(); } const CWorldTransManager* GetWorldTransManager() const { return x8c4_worldTransManager.GetPtr(); }
EGameState GetGameState() const { return x904_gameState; } EGameState GetGameState() const { return x904_gameState; }
void SetGameState(EGameState state);
CRandom16* Random() const { return x900_random; } CRandom16* Random() const { return x900_random; }
uint GetUpdateFrameIndex() const { return x8d8_updateFrameIdx; } uint GetUpdateFrameIndex() const { return x8d8_updateFrameIdx; }

View File

@ -19,6 +19,9 @@ public:
const CVector3f& v1, const CVector3f& v2, const CVector3f& v1, const CVector3f& v2,
const CVector3f& v3, const CVector3f& v4, CVector3f& v5); const CVector3f& v3, const CVector3f& v4, CVector3f& v5);
static CVector3f ProjectOrbitalPosition(const CVector3f& pos, const CVector3f& vel,
const CVector3f& orbitPoint, float dt, float preThinkDt);
private: private:
float x0_; float x0_;
}; };

View File

@ -74,7 +74,7 @@ public:
void RemoveCameraShaker(int id); void RemoveCameraShaker(int id);
CTransform4f GetCurrentCameraTransform(const CStateManager& mgr) const; CTransform4f GetCurrentCameraTransform(const CStateManager& mgr) const;
CVector3f GetGlobalCameraTranslation(const CStateManager& mgr) const; CVector3f GetGlobalCameraTranslation(const CStateManager& mgr) const;
bool IsInFirstPersonCamera() const; bool IsInFPCamera() const;
bool IsInterpolationCameraActive() const; bool IsInterpolationCameraActive() const;
bool ShouldBypassInterpolationCamera() const; bool ShouldBypassInterpolationCamera() const;
void SetupInterpolation(const CTransform4f& xf, TUniqueId camId, CVector3f lookPos, void SetupInterpolation(const CTransform4f& xf, TUniqueId camId, CVector3f lookPos,

View File

@ -162,13 +162,12 @@ public:
void AddToRenderer(const CFrustumPlanes&, const CStateManager&) const override; void AddToRenderer(const CFrustumPlanes&, const CStateManager&) const override;
void Render(const CStateManager&) const override; void Render(const CStateManager&) const override;
bool CanRenderUnsorted(const CStateManager&) const override; bool CanRenderUnsorted(const CStateManager&) const override;
const rstl::optional_object< CAABox > GetTouchBounds() const override; rstl::optional_object< CAABox > GetTouchBounds() const override;
void Touch(CActor&, CStateManager&) override; void Touch(CActor&, CStateManager&) override;
CVector3f GetOrbitPosition(const CStateManager&) const override; CVector3f GetOrbitPosition(const CStateManager&) const override;
CVector3f GetAimPosition(const CStateManager&, float) const override; CVector3f GetAimPosition(const CStateManager&, float) const override;
EWeaponCollisionResponseTypes GetCollisionResponseType(const CVector3f&, const CVector3f&, EWeaponCollisionResponseTypes GetCollisionResponseType(const CVector3f&, const CVector3f&,
const CWeaponMode&, const CWeaponMode&, int) const override;
int) const override;
void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type, void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type,
float dt) override; float dt) override;

View File

@ -15,6 +15,9 @@ public:
static const char* GetImagePaneName(uint pane); static const char* GetImagePaneName(uint pane);
CScannableObjectInfo(CInputStream& in, uint version); CScannableObjectInfo(CInputStream& in, uint version);
CAssetId GetScannableObjectId() const { return x0_scannableObjectId; }
float GetTotalDownloadTime() const { return x8_totalDownloadTime; }
private: private:
struct SBucket { struct SBucket {
CAssetId x0_texture; CAssetId x0_texture;

View File

@ -40,11 +40,12 @@ public:
void SetHelmetAlpha(int); void SetHelmetAlpha(int);
void SetHUDLag(bool); void SetHUDLag(bool);
void SetIsHintSystemEnabled(bool); void SetIsHintSystemEnabled(bool);
void SetInvertYAxis(bool);
void ToggleControls(bool); void ToggleControls(bool);
void ResetControllerAssets(int); void ResetControllerAssets(int);
void SetControls(int); void SetControls(int);
void SetInvertYAxis(bool invert);
bool GetInvertYAxis() const { return x68_25_invertY; }
void SetIsRumbleEnabled(bool rumble); void SetIsRumbleEnabled(bool rumble);
bool GetIsRumbleEnabled() const { return x68_26_rumble; } bool GetIsRumbleEnabled() const { return x68_26_rumble; }

View File

@ -36,10 +36,11 @@ public:
void ReturnToDefault(CStateManager& mgr, float dt, bool setState); void ReturnToDefault(CStateManager& mgr, float dt, bool setState);
void EnterStruck(CStateManager&, float, bool, bool); void EnterStruck(CStateManager&, float, bool, bool);
void DisconnectGrappleBeam(); void DisconnectGrappleBeam();
void RenderGrappleBeam(const CStateManager&, const CVector3f&) const;
void SetTransform(const CTransform4f& xf) { *(CTransform4f*)(&x0_pad[0x220]) = xf; } void SetTransform(const CTransform4f& xf) { *(CTransform4f*)(&x0_pad[0x220]) = xf; }
// EArmState GetAnimState() const { return x334_animState; } EArmState GetAnimState() const { return x334_animState; }
bool GetActive() const { return x3b2_24_active; } bool GetActive() const { return x3b2_24_active; }
bool BeamActive() const { return x3b2_25_beamActive; } bool BeamActive() const { return x3b2_25_beamActive; }
bool IsArmMoving() const { return x3b2_27_armMoving; } bool IsArmMoving() const { return x3b2_27_armMoving; }

View File

@ -1,18 +1,34 @@
#ifndef _CMORPHBALL #ifndef _CMORPHBALL
#define _CMORPHBALL #define _CMORPHBALL
#include "Kyoto/Audio/CSfxHandle.hpp"
#include "Kyoto/CRandom16.hpp"
#include "Kyoto/Math/CQuaternion.hpp"
#include "Kyoto/Math/CTransform4f.hpp"
#include "Kyoto/Math/CVector3f.hpp"
#include "MetroidPrime/CActor.hpp"
#include "MetroidPrime/CEntityInfo.hpp"
#include "MetroidPrime/TGameTypes.hpp"
#include "Kyoto/Math/CFrustumPlanes.hpp"
#include "Kyoto/TOneStatic.hpp" #include "Kyoto/TOneStatic.hpp"
#include "Kyoto/TReservedAverage.hpp" #include "Kyoto/TReservedAverage.hpp"
#include "Kyoto/TToken.hpp"
#include "Collision/CCollidableSphere.hpp" #include "Collision/CCollidableSphere.hpp"
#include "Collision/CCollisionInfoList.hpp" #include "Collision/CCollisionInfoList.hpp"
class CActor;
class CActorLights;
class CElementGen; class CElementGen;
class CFinalInput;
class CFrustumPlanes;
class CGenDescription; class CGenDescription;
class CModelData; class CModelData;
class CMorphBallShadow; class CMorphBallShadow;
class CParticleSwoosh; class CParticleSwoosh;
class CPlayer; class CPlayer;
class CQuaternion;
class CRainSplashGenerator; class CRainSplashGenerator;
class CStateManager; class CStateManager;
class CSwooshDescription; class CSwooshDescription;
@ -28,8 +44,6 @@ public:
CMorphBall(CPlayer&, float); CMorphBall(CPlayer&, float);
~CMorphBall(); ~CMorphBall();
float GetBallRadius() const;
EBallBoostState GetBallBoostState() const; EBallBoostState GetBallBoostState() const;
void SetBallBoostState(EBallBoostState state); void SetBallBoostState(EBallBoostState state);
EBombJumpState GetBombJumpState() const; EBombJumpState GetBombJumpState() const;
@ -39,10 +53,10 @@ public:
void StopSounds(); void StopSounds();
void UpdateEffects(float dt, CStateManager& mgr); void UpdateEffects(float dt, CStateManager& mgr);
void SetBallLightActive(CStateManager& mgr, const bool active); void SetBallLightActive(CStateManager& mgr, const bool active);
// GetBallToWorld__10CMorphBallCFv global CTransform4f GetBallToWorld() const;
// GetBallRadius__10CMorphBallCFv global float GetBallRadius() const;
// TakeDamage__10CMorphBallFf global void TakeDamage(float damage);
// IsProjectile__10CMorphBallCFv weak bool IsProjectile() const { return x1954_isProjectile; }
// LeaveMorphBallState__10CMorphBallFR13CStateManager global // LeaveMorphBallState__10CMorphBallFR13CStateManager global
// LeaveBoosting__10CMorphBallFv global // LeaveBoosting__10CMorphBallFv global
// CancelBoosting__10CMorphBallFv global // CancelBoosting__10CMorphBallFv global
@ -53,22 +67,22 @@ public:
bool GetIsInHalfPipeMode() const; bool GetIsInHalfPipeMode() const;
// DampLinearAndAngularVelocities__10CMorphBallFff global // DampLinearAndAngularVelocities__10CMorphBallFff global
// IsClimbable__10CMorphBallCFRC14CCollisionInfo global // IsClimbable__10CMorphBallCFRC14CCollisionInfo global
// FluidFXThink__10CMorphBallFQ26CActor11EFluidStateR12CScriptWaterR13CStateManager global void FluidFXThink(CActor::EFluidState state, CScriptWater& water, CStateManager& mgr);
// GetCollidableSphere__10CMorphBallCFv weak // GetCollidableSphere__10CMorphBallCFv weak
// DrawCollisionPrimitive__10CMorphBallCFv global // DrawCollisionPrimitive__10CMorphBallCFv global
// GetPrimitiveTransform__10CMorphBallCFv global // GetPrimitiveTransform__10CMorphBallCFv global
// TouchModel__10CMorphBallCFRC13CStateManager global void TouchModel(const CStateManager&) const;
// Render__10CMorphBallCFRC13CStateManagerPC12CActorLights global void Render(const CStateManager&, const CActorLights*) const;
// RenderDamageEffects__10CMorphBallCFRC13CStateManagerRC12CTransform4f global // RenderDamageEffects__10CMorphBallCFRC13CStateManagerRC12CTransform4f global
// RenderSpiderBallElectricalEffects__10CMorphBallCFv global // RenderSpiderBallElectricalEffects__10CMorphBallCFv global
// RenderEnergyDrainEffects__10CMorphBallCFRC13CStateManager global // RenderEnergyDrainEffects__10CMorphBallCFRC13CStateManager global
// RenderMorphBallTransitionFlash__10CMorphBallCFRC13CStateManager global void RenderMorphBallTransitionFlash(const CStateManager&) const;
// GetModel__10CMorphBallCFv weak const CModelData& GetModel() const { return *x58_ballModel.get(); }
// GetBallContactSurfaceNormal__10CMorphBallCFv weak // GetBallContactSurfaceNormal__10CMorphBallCFv weak
// PreRender__10CMorphBallFR13CStateManagerRC14CFrustumPlanes global void PreRender(CStateManager&, const CFrustumPlanes&);
// IsInFrustum__10CMorphBallCFRC14CFrustumPlanes global bool IsInFrustum(const CFrustumPlanes&) const;
// GetBallTouchRadius__10CMorphBallCFv global float GetBallTouchRadius() const;
// Touch__10CMorphBallFR6CActorR13CStateManager global void Touch(CActor& actor, CStateManager& mgr);
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&); void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
// DeleteLight__10CMorphBallFR13CStateManager global // DeleteLight__10CMorphBallFR13CStateManager global
// EnterMorphBallState__10CMorphBallFR13CStateManager // EnterMorphBallState__10CMorphBallFR13CStateManager
@ -115,7 +129,7 @@ public:
// GetTouchedHalfPipeRecently__10CMorphBallCFv global // GetTouchedHalfPipeRecently__10CMorphBallCFv global
// ComputeLiftForces__10CMorphBallFRC9CVector3fRC9CVector3fRC13CStateManager global // ComputeLiftForces__10CMorphBallFRC9CVector3fRC9CVector3fRC13CStateManager global
void UpdateBallDynamics(CStateManager&, float); void UpdateBallDynamics(CStateManager&, float);
// BallCloseToCollision__10CMorphBallCFRC13CStateManagerf global bool BallCloseToCollision(const CStateManager& mgr, float dist, const CMaterialFilter& filter) const;
// UpdateHalfPipeStatus__10CMorphBallFR13CStateManagerf global // UpdateHalfPipeStatus__10CMorphBallFR13CStateManagerf global
// CalculateSurfaceToWorld__10CMorphBallCFRC9CVector3fRC9CVector3fRC9CVector3f global // CalculateSurfaceToWorld__10CMorphBallCFRC9CVector3fRC9CVector3fRC9CVector3f global
// UpdateMarbleDynamics__10CMorphBallFR13CStateManagerfRC9CVector3f global // UpdateMarbleDynamics__10CMorphBallFR13CStateManagerfRC9CVector3f global
@ -128,6 +142,12 @@ public:
void Land(); void Land();
void ResetMorphBallIceBreak(); void ResetMorphBallIceBreak();
void StopParticleWakes(); void StopParticleWakes();
void EnableBallShadow();
void DisableBallShadow();
void PreRenderBallShadow(CStateManager&);
void SetDisableSpiderBallTime(float time);
u32 GetMorphballModelShader() const { return x5c_ballModelShader; } // name?
private: private:
struct CSpiderBallElectricityManager { struct CSpiderBallElectricityManager {

View File

@ -10,7 +10,6 @@
#include "MetroidPrime/Player/CPlayerState.hpp" #include "MetroidPrime/Player/CPlayerState.hpp"
#include "Kyoto/TReservedAverage.hpp" #include "Kyoto/TReservedAverage.hpp"
#include "Kyoto/Math/CRelAngle.hpp"
#include "rstl/auto_ptr.hpp" #include "rstl/auto_ptr.hpp"
#include "rstl/vector.hpp" #include "rstl/vector.hpp"
@ -67,6 +66,7 @@ class CPlayer : public CPhysicsActor, public TOneStatic< CPlayer > {
}; };
CPlayerStuckTracker(); CPlayerStuckTracker();
~CPlayerStuckTracker();
void AddState(EPlayerState, const CVector3f&, const CVector3f&, const CVector2f&); void AddState(EPlayerState, const CVector3f&, const CVector3f&, const CVector2f&);
bool IsPlayerStuck(); bool IsPlayerStuck();
void ResetStats(); void ResetStats();
@ -168,7 +168,7 @@ public:
const CMaterialList& ml); const CMaterialList& ml);
// CEntity // CEntity
~CPlayer() override; // ~CPlayer() override;
void Accept(IVisitor& visitor) override; void Accept(IVisitor& visitor) override;
void PreThink(float dt, CStateManager& mgr) override; void PreThink(float dt, CStateManager& mgr) override;
void Think(float dt, CStateManager& mgr) override; void Think(float dt, CStateManager& mgr) override;
@ -215,8 +215,8 @@ public:
void SetHudDisable(float staticTimer, float outSpeed = skDefaultHudFadeOutSpeed, void SetHudDisable(float staticTimer, float outSpeed = skDefaultHudFadeOutSpeed,
float inSpeed = skDefaultHudFadeInSpeed); float inSpeed = skDefaultHudFadeInSpeed);
void IncrementPhazon(); void IncrementEnvironmentDamage(); // name?
void DecrementPhazon(); void DecrementEnvironmentDamage(); // name?
// GetMovementDirection2D__7CPlayerCFv ?? // GetMovementDirection2D__7CPlayerCFv ??
void SetOrbitTargetId(TUniqueId id, CStateManager& mgr); void SetOrbitTargetId(TUniqueId id, CStateManager& mgr);
void TryToBreakOrbit(TUniqueId id, EOrbitBrokenType type, CStateManager& mgr); void TryToBreakOrbit(TUniqueId id, EOrbitBrokenType type, CStateManager& mgr);
@ -256,8 +256,8 @@ public:
void UpdateVisorTransition(float dt, CStateManager& mgr); void UpdateVisorTransition(float dt, CStateManager& mgr);
void UpdatePlayerSounds(float dt); void UpdatePlayerSounds(float dt);
bool ShouldSampleFailsafe(CStateManager& mgr) const; bool ShouldSampleFailsafe(CStateManager& mgr) const;
bool IsEnergyLow(CStateManager& mgr); bool IsEnergyLow(const CStateManager& mgr) const;
bool StartSamusVoiceSfx(ushort sfx, short vol, int prio); const bool StartSamusVoiceSfx(ushort sfx, short vol, int prio);
void UpdateVisorState(const CFinalInput& input, float dt, CStateManager& mgr); void UpdateVisorState(const CFinalInput& input, float dt, CStateManager& mgr);
void UpdateCrosshairsState(const CFinalInput& input); void UpdateCrosshairsState(const CFinalInput& input);
ushort GetMaterialSoundUnderPlayer(CStateManager& mgr, const ushort* table, int length, ushort GetMaterialSoundUnderPlayer(CStateManager& mgr, const ushort* table, int length,
@ -314,6 +314,34 @@ public:
CVector3f CalculateLeftStickEdgePosition(float strafeInput, float forwardInput) const; CVector3f CalculateLeftStickEdgePosition(float strafeInput, float forwardInput) const;
bool AttachActorToPlayer(TUniqueId id, bool disableGun); bool AttachActorToPlayer(TUniqueId id, bool disableGun);
void DetachActorFromPlayer(); void DetachActorFromPlayer();
void RenderReflectedPlayer(CStateManager& mgr);
bool HasTransitionBeamModel() const;
void RenderGun(const CStateManager& mgr, const CVector3f& pos) const;
bool GetCombatMode() const;
bool GetExplorationMode() const;
void SetScanningState(EPlayerScanState state, CStateManager& mgr);
void UpdateSlideShowUnlocking(CStateManager& mgr); // name?
bool ValidateScanning(const CFinalInput& input, CStateManager& mgr) const;
float GetTransitionAlpha(const CVector3f& camPos, float zNear) const;
void TakeDamage(bool significant, const CVector3f& location, float damage, EWeaponType type,
CStateManager& mgr);
bool WasDamaged() const;
CVector3f GetDamageLocationWR() const;
float GetPrevDamageAmount() const;
float GetDamageAmount() const;
bool ObjectInScanningRange(TUniqueId id, const CStateManager& mgr);
void AsyncLoadSuit(CStateManager& mgr);
bool IsPlayerDeadEnough() const;
void SetControlDirectionInterpolation(float time);
void ResetControlDirectionInterpolation();
void DoThink(float dt, CStateManager& mgr); // name?
void DoPreThink(float dt, CStateManager& mgr); // name?
void SetPlayerHitWallDuringMove();
void DoPostCameraStuff(float dt, CStateManager& mgr); // name?
float UpdateCameraBob(float dt, CStateManager& mgr);
void UpdateOrbitTarget(CStateManager& mgr);
void UpdateOrbitOrientation(CStateManager& mgr);
bool IsTransparent() const;
CPlayerGun* PlayerGun() { return x490_gun.get(); } CPlayerGun* PlayerGun() { return x490_gun.get(); }
const CPlayerGun* GetPlayerGun() const { return x490_gun.get(); } const CPlayerGun* GetPlayerGun() const { return x490_gun.get(); }
@ -356,7 +384,7 @@ public:
float GetAverageSpeed() const; float GetAverageSpeed() const;
float GetGravity() const; float GetGravity() const;
float GetAttachedActorStruggle() const { return xa28_attachedActorStruggle; } float GetAttachedActorStruggle() const;
void SetAttachedActorStruggle(float struggle) { xa28_attachedActorStruggle = struggle; } void SetAttachedActorStruggle(float struggle) { xa28_attachedActorStruggle = struggle; }
// PlayerHint // PlayerHint
@ -557,7 +585,7 @@ private:
float xa04_preThinkDt; float xa04_preThinkDt;
CAssetId xa08_steamTextureId; CAssetId xa08_steamTextureId;
CAssetId xa0c_iceTextureId; CAssetId xa0c_iceTextureId;
uint xa10_envDmgCounter; int xa10_envDmgCounter;
float xa14_envDmgCameraShakeTimer; float xa14_envDmgCameraShakeTimer;
float xa18_phazonDamageLag; float xa18_phazonDamageLag;
float xa1c_threatOverride; float xa1c_threatOverride;

View File

@ -7,6 +7,8 @@
#include "rstl/vector.hpp" #include "rstl/vector.hpp"
class CStateManager;
class CEnergyDrainSource { class CEnergyDrainSource {
public: public:
CEnergyDrainSource(TUniqueId src, float intensity); CEnergyDrainSource(TUniqueId src, float intensity);
@ -26,6 +28,7 @@ public:
void AddEnergyDrainSource(TUniqueId id, float intensity); void AddEnergyDrainSource(TUniqueId id, float intensity);
void RemoveEnergyDrainSource(TUniqueId id); void RemoveEnergyDrainSource(TUniqueId id);
float GetEnergyDrainIntensity() const; float GetEnergyDrainIntensity() const;
const rstl::vector< CEnergyDrainSource >& GetEnergyDrainSources() const { return x0_sources; }
float GetEnergyDrainTime() const { return x10_energyDrainTime; } float GetEnergyDrainTime() const { return x10_energyDrainTime; }
void ProcessEnergyDrain(const CStateManager& mgr, float dt); void ProcessEnergyDrain(const CStateManager& mgr, float dt);

View File

@ -22,8 +22,6 @@
#include "rstl/string.hpp" #include "rstl/string.hpp"
#include "rstl/vector.hpp" #include "rstl/vector.hpp"
#include "math.h"
enum EChargeState { enum EChargeState {
kCS_Normal, kCS_Normal,
kCS_Charged, kCS_Charged,
@ -142,7 +140,7 @@ public:
void UpdateWeaponFire(float, CPlayerState&, CStateManager&); void UpdateWeaponFire(float, CPlayerState&, CStateManager&);
void ResetIdle(CStateManager&); void ResetIdle(CStateManager&);
void UpdateGunIdle(bool, float, float, CStateManager&); void UpdateGunIdle(bool, float, float, CStateManager&);
void DamageRumble(const CVector3f&, const CStateManager&); void DamageRumble(const CVector3f&, float damage, const CStateManager&);
void TakeDamage(bool, bool, CStateManager&); void TakeDamage(bool, bool, CStateManager&);
void StopChargeSound(CStateManager&); void StopChargeSound(CStateManager&);
void CancelFiring(CStateManager&); void CancelFiring(CStateManager&);

View File

@ -1,6 +1,7 @@
#ifndef _CPLAYERSTATE #ifndef _CPLAYERSTATE
#define _CPLAYERSTATE #define _CPLAYERSTATE
#include "Kyoto/SObjectTag.hpp"
#include "types.h" #include "types.h"
#include "MetroidPrime/CHealthInfo.hpp" #include "MetroidPrime/CHealthInfo.hpp"
@ -117,7 +118,7 @@ public:
void UpdateStaticInterference(CStateManager& stateMgr, const float& dt); void UpdateStaticInterference(CStateManager& stateMgr, const float& dt);
void IncreaseScanTime(uint time, float val); void IncreaseScanTime(uint time, float val);
void SetScanTime(CAssetId res, float time); void SetScanTime(CAssetId res, float time);
float GetScanTime(CAssetId time) const; float GetScanTime(CAssetId res) const;
bool GetIsVisorTransitioning() const; bool GetIsVisorTransitioning() const;
float GetVisorTransitionFactor() const; float GetVisorTransitionFactor() const;
void UpdateVisorTransition(float dt); void UpdateVisorTransition(float dt);
@ -140,6 +141,9 @@ public:
float CalculateHealth(); float CalculateHealth();
void InitializePowerUp(CPlayerState::EItemType type, int capacity); void InitializePowerUp(CPlayerState::EItemType type, int capacity);
void SetPowerUp(CPlayerState::EItemType type, int capacity); void SetPowerUp(CPlayerState::EItemType type, int capacity);
static bool IsValidScan(CAssetId res);
void SetScanCompletionRateFirst(int rate) { x180_scanCompletionRateFirst = rate; } // name?
void SetScanCompletionRateSecond(int rate) { x184_scanCompletionRateSecond = rate; } // name?
void InitializeScanTimes(); void InitializeScanTimes();
@ -151,9 +155,10 @@ public:
const rstl::vector< rstl::pair< CAssetId, float > >& GetScanTimes() const { const rstl::vector< rstl::pair< CAssetId, float > >& GetScanTimes() const {
return x170_scanTimes; return x170_scanTimes;
} }
int GetLogScans() const { return x180_scanCompletionRateFirst; }
int GetTotalLogScans() const { return x184_scanCompletionRateSecond; }
CHealthInfo* HealthInfo() { return &xc_health; } CHealthInfo* HealthInfo() { return &xc_health; }
const CHealthInfo& GetHealthInfo() const { return xc_health; } const CHealthInfo& GetHealthInfo() const { return xc_health; }
private: private:
@ -191,7 +196,7 @@ private:
EPlayerSuit x20_currentSuit; EPlayerSuit x20_currentSuit;
rstl::reserved_vector< CPowerUp, 41 > x24_powerups; rstl::reserved_vector< CPowerUp, 41 > x24_powerups;
rstl::vector< rstl::pair< CAssetId, float > > x170_scanTimes; rstl::vector< rstl::pair< CAssetId, float > > x170_scanTimes;
int x180_scanCompletionRateFirst; int x180_scanCompletionRateFirst; // pair?
int x184_scanCompletionRateSecond; int x184_scanCompletionRateSecond;
CStaticInterference x188_staticIntf; CStaticInterference x188_staticIntf;
}; };

View File

@ -1,5 +1,4 @@
#include "MetroidPrime/CArchMsgParmReal32.hpp" #include "MetroidPrime/CArchMsgParmReal32.hpp"
#include "Kyoto/Alloc/CMemory.hpp"
CArchMsgParmReal32::CArchMsgParmReal32(float val) : mVal(val) {} CArchMsgParmReal32::CArchMsgParmReal32(float val) : mVal(val) {}

View File

@ -419,7 +419,7 @@ CVector3f CCameraManager::GetGlobalCameraTranslation(const CStateManager& mgr) c
bool CCameraManager::IsInCinematicCamera() const { return !x4_cineCameras.empty(); } bool CCameraManager::IsInCinematicCamera() const { return !x4_cineCameras.empty(); }
bool CCameraManager::IsInFirstPersonCamera() const { bool CCameraManager::IsInFPCamera() const {
return x0_curCameraId == x7c_fpCamera->GetUniqueId(); return x0_curCameraId == x7c_fpCamera->GetUniqueId();
} }
@ -441,7 +441,7 @@ void CCameraManager::SetPlayerCamera(CStateManager& mgr, TUniqueId uid) {
void CCameraManager::SetupInterpolation(const CTransform4f& xf, TUniqueId camId, CVector3f lookPos, void CCameraManager::SetupInterpolation(const CTransform4f& xf, TUniqueId camId, CVector3f lookPos,
float maxTime, float positionSpeed, float rotationSpeed, float maxTime, float positionSpeed, float rotationSpeed,
bool sinusoidal, CStateManager& mgr) { bool sinusoidal, CStateManager& mgr) {
if (IsInFirstPersonCamera()) { if (IsInFPCamera()) {
return; return;
} }
x88_interpCamera->SetInterpolation(xf, lookPos, maxTime, positionSpeed, rotationSpeed, camId, x88_interpCamera->SetInterpolation(xf, lookPos, maxTime, positionSpeed, rotationSpeed, camId,

File diff suppressed because it is too large Load Diff

View File

@ -1013,7 +1013,7 @@ void CPlayerGun::CMotionState::Update(bool firing, float dt, CTransform4f& xf, C
} }
} }
void CPlayerGun::DamageRumble(const CVector3f&, const CStateManager&) {} void CPlayerGun::DamageRumble(const CVector3f&, float damage, const CStateManager&) {}
void CPlayerGun::TakeDamage(bool bigStrike, bool notFromMetroid, CStateManager& mgr) { void CPlayerGun::TakeDamage(bool bigStrike, bool notFromMetroid, CStateManager& mgr) {
const CPlayer& player = *mgr.GetPlayer(); const CPlayer& player = *mgr.GetPlayer();

View File

@ -514,7 +514,7 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId
case kSF_AreaDamage: { case kSF_AreaDamage: {
if ((msg == kSM_Deleted || msg == kSM_Deactivate) && x1e4_31_inAreaDamage) { if ((msg == kSM_Deleted || msg == kSM_Deactivate) && x1e4_31_inAreaDamage) {
x1e4_31_inAreaDamage = false; x1e4_31_inAreaDamage = false;
mgr.Player()->DecrementPhazon(); mgr.Player()->DecrementEnvironmentDamage();
mgr.SetIsFullThreat(false); mgr.SetIsFullThreat(false);
} }
break; break;
@ -1037,7 +1037,7 @@ void CScriptSpecialFunction::ThinkAreaDamage(float dt, CStateManager& mgr) {
if (x1e4_31_inAreaDamage) { if (x1e4_31_inAreaDamage) {
if (!inArea || immune) { if (!inArea || immune) {
x1e4_31_inAreaDamage = false; x1e4_31_inAreaDamage = false;
mgr.Player()->DecrementPhazon(); mgr.Player()->DecrementEnvironmentDamage();
SendScriptMsgs(kSS_Exited, mgr, kSM_None); SendScriptMsgs(kSS_Exited, mgr, kSM_None);
mgr.SetIsFullThreat(false); mgr.SetIsFullThreat(false);
return; return;
@ -1046,7 +1046,7 @@ void CScriptSpecialFunction::ThinkAreaDamage(float dt, CStateManager& mgr) {
return; return;
} else { } else {
x1e4_31_inAreaDamage = true; x1e4_31_inAreaDamage = true;
mgr.Player()->IncrementPhazon(); mgr.Player()->IncrementEnvironmentDamage();
SendScriptMsgs(kSS_Entered, mgr, kSM_None); SendScriptMsgs(kSS_Entered, mgr, kSM_None);
mgr.SetIsFullThreat(true); mgr.SetIsFullThreat(true);
} }

View File

@ -49,10 +49,6 @@ void CScriptSteam::Think(float dt, CStateManager& mgr) {
if (x148_28_playerTriggerProc && mgr.GetCameraManager()->GetFluidCounter() == 0) { if (x148_28_playerTriggerProc && mgr.GetCameraManager()->GetFluidCounter() == 0) {
CVector3f eyePos = mgr.GetPlayer()->GetEyePosition(); CVector3f eyePos = mgr.GetPlayer()->GetEyePosition();
const float mag = (GetTranslation() - eyePos).Magnitude(); const float mag = (GetTranslation() - eyePos).Magnitude();
// const float distance =
// (mag >= GetMaxDist()
// ? 0.f
// : CMath::FastCosR((mag * 1.5707964f /* 90 deg */) * GetOOMaxDist()) * GetStrength());
float distance; float distance;
if (mag >= GetMaxDist()) { if (mag >= GetMaxDist()) {
distance = 0.f; distance = 0.f;

View File

@ -82,7 +82,7 @@ void CScriptTrigger::Touch(CActor& act, CStateManager& mgr) {
pl = mgr.Player(); pl = mgr.Player();
if (x148_29_didPhazonDamage) { if (x148_29_didPhazonDamage) {
pl->DecrementPhazon(); pl->DecrementEnvironmentDamage();
x148_29_didPhazonDamage = false; x148_29_didPhazonDamage = false;
} }
if (!x100_damageInfo.HasNoDamage()) { if (!x100_damageInfo.HasNoDamage()) {
@ -94,7 +94,7 @@ void CScriptTrigger::Touch(CActor& act, CStateManager& mgr) {
} }
} }
if (phazonHurt) { if (phazonHurt) {
pl->IncrementPhazon(); pl->IncrementEnvironmentDamage();
x148_29_didPhazonDamage = true; x148_29_didPhazonDamage = true;
} }
} }
@ -156,7 +156,7 @@ void CScriptTrigger::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CS
CPlayer* player = mgr.Player(); CPlayer* player = mgr.Player();
if (x148_29_didPhazonDamage) { if (x148_29_didPhazonDamage) {
player->DecrementPhazon(); player->DecrementEnvironmentDamage();
x148_29_didPhazonDamage = false; x148_29_didPhazonDamage = false;
} }
@ -171,7 +171,7 @@ void CScriptTrigger::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CS
CPlayer* player = mgr.Player(); CPlayer* player = mgr.Player();
if (x148_29_didPhazonDamage) { if (x148_29_didPhazonDamage) {
player->DecrementPhazon(); player->DecrementEnvironmentDamage();
x148_29_didPhazonDamage = false; x148_29_didPhazonDamage = false;
} }
@ -215,7 +215,7 @@ void CScriptTrigger::UpdateInhabitants(float dt, CStateManager& mgr) {
if (x148_28_playerTriggerProc) { if (x148_28_playerTriggerProc) {
x148_28_playerTriggerProc = false; x148_28_playerTriggerProc = false;
if (x148_29_didPhazonDamage) { if (x148_29_didPhazonDamage) {
mgr.Player()->DecrementPhazon(); mgr.Player()->DecrementEnvironmentDamage();
x148_29_didPhazonDamage = false; x148_29_didPhazonDamage = false;
} }
@ -266,7 +266,7 @@ void CScriptTrigger::UpdateInhabitants(float dt, CStateManager& mgr) {
if (mgr.GetPlayer()->GetUniqueId() == tmpId && x148_28_playerTriggerProc) { if (mgr.GetPlayer()->GetUniqueId() == tmpId && x148_28_playerTriggerProc) {
x148_28_playerTriggerProc = false; x148_28_playerTriggerProc = false;
if (x148_29_didPhazonDamage) { if (x148_29_didPhazonDamage) {
mgr.Player()->DecrementPhazon(); mgr.Player()->DecrementEnvironmentDamage();
x148_29_didPhazonDamage = false; x148_29_didPhazonDamage = false;
} }
@ -282,7 +282,7 @@ void CScriptTrigger::UpdateInhabitants(float dt, CStateManager& mgr) {
if (mgr.GetPlayer()->GetUniqueId() == tmpId && x148_28_playerTriggerProc) { if (mgr.GetPlayer()->GetUniqueId() == tmpId && x148_28_playerTriggerProc) {
x148_28_playerTriggerProc = false; x148_28_playerTriggerProc = false;
if (x148_29_didPhazonDamage) { if (x148_29_didPhazonDamage) {
mgr.Player()->DecrementPhazon(); mgr.Player()->DecrementEnvironmentDamage();
x148_29_didPhazonDamage = false; x148_29_didPhazonDamage = false;
} }

View File

@ -32,6 +32,7 @@ _LITERAL_REPLACEMENTS = [
("char16_t", "wchar_t"), ("char16_t", "wchar_t"),
("std::min(", "rstl::min_val("), ("std::min(", "rstl::min_val("),
("std::max(", "rstl::max_val("), ("std::max(", "rstl::max_val("),
("constexpr ", "const "),
("DEFINE_ENTITY", ""), ("DEFINE_ENTITY", ""),
("visitor.Visit(this)", "visitor.Visit(*this)"), ("visitor.Visit(this)", "visitor.Visit(*this)"),
@ -94,11 +95,19 @@ _LITERAL_REPLACEMENTS = [
("EProjectileAttrib::", "kPA_"), ("EProjectileAttrib::", "kPA_"),
("ERumbleFxId::", "kRFX_"), ("ERumbleFxId::", "kRFX_"),
("ERumblePriority::", "kRP_"), ("ERumblePriority::", "kRP_"),
("EWhichModel::", "kWM_"),
("EArmState::", "kAS_"),
("EGameState::", "kGS_"),
("EScanState::", "kSS_"),
("EWeaponType::", "kWT_"),
("EFluidState::", "kFS_"),
("EPhazonType::", "kPT_"),
# CActor # CActor
("x34_transform.origin", "GetTranslation()"), ("x34_transform.origin", "GetTranslation()"),
("x34_transform", "GetTransform()"), ("x34_transform", "GetTransform()"),
("xc4_fluidId", "InFluidId()"), ("xc4_fluidId", "InFluidId()"),
("x90_actorLights.get()", "GetActorLights()"),
# CPhysicsActor # CPhysicsActor
("x138_velocity", "GetVelocityWR()"), ("x138_velocity", "GetVelocityWR()"),
@ -132,6 +141,8 @@ _RE_REPLACEMENTS = [
(re.compile(r"\.([xyz])\(\)"), lambda m: f".Get{m.group(1).upper()}()"), (re.compile(r"\.([xyz])\(\)"), lambda m: f".Get{m.group(1).upper()}()"),
# lhs.dot(rhs) -> CVector3f::Dot(lhs, rhs) # lhs.dot(rhs) -> CVector3f::Dot(lhs, rhs)
(re.compile(r"([A-z0-9]+)\.dot\(([A-z0-9]+)\)([,;])"), r"CVector3f::Dot(\1, \2)\3"), (re.compile(r"([A-z0-9]+)\.dot\(([A-z0-9]+)\)([,;])"), r"CVector3f::Dot(\1, \2)\3"),
# std::make_unique<T> -> rs_new T
(re.compile(r"std::make_unique<([A-z0-9]+)>"), r"rs_new \1"),
] ]

View File

@ -17,7 +17,7 @@ import os
import platform import platform
import sys import sys
from pathlib import Path from pathlib import Path
from typing import IO, Any, Dict, Iterable, List, Optional, Set, Tuple, cast from typing import IO, Any, Dict, Iterable, List, Optional, Set, Tuple, Union, cast
from . import ninja_syntax from . import ninja_syntax
from .ninja_syntax import serialize_path from .ninja_syntax import serialize_path
@ -81,6 +81,18 @@ class Object:
set_default("shift_jis", config.shift_jis) set_default("shift_jis", config.shift_jis)
set_default("src_dir", config.src_dir) set_default("src_dir", config.src_dir)
# Validate progress categories
def check_category(category: str):
if not any(category == c.id for c in config.progress_categories):
sys.exit(f"Progress category '{category}' missing from config.progress_categories")
progress_category = obj.options["progress_category"]
if isinstance(progress_category, list):
for category in progress_category:
check_category(category)
elif progress_category is not None:
check_category(progress_category)
# Resolve paths # Resolve paths
build_dir = config.out_path() build_dir = config.out_path()
obj.src_path = Path(obj.options["src_dir"]) / obj.options["source"] obj.src_path = Path(obj.options["src_dir"]) / obj.options["source"]
@ -160,13 +172,16 @@ class ProjectConfig:
) )
# Progress output, progress.json and report.json config # Progress output, progress.json and report.json config
self.progress = True # Enable progress output self.progress = True # Enable CLI progress output
self.progress_all: bool = True # Include combined "all" category self.progress_all: bool = True # Include combined "all" category
self.progress_modules: bool = True # Include combined "modules" category self.progress_modules: bool = True # Include combined "modules" category
self.progress_each_module: bool = ( self.progress_each_module: bool = (
False # Include individual modules, disable for large numbers of modules False # Include individual modules, disable for large numbers of modules
) )
self.progress_categories: List[ProgressCategory] = [] # Additional categories self.progress_categories: List[ProgressCategory] = [] # Additional categories
self.print_progress_categories: Union[bool, List[str]] = (
True # Print additional progress categories in the CLI progress output
)
# Progress fancy printing # Progress fancy printing
self.progress_use_fancy: bool = False self.progress_use_fancy: bool = False
@ -1687,7 +1702,11 @@ def calculate_progress(config: ProjectConfig) -> None:
print_category("All", report_data["measures"]) print_category("All", report_data["measures"])
for category in report_data["categories"]: for category in report_data["categories"]:
print_category(category["name"], category["measures"]) if config.print_progress_categories is True or (
isinstance(config.print_progress_categories, list)
and category["id"] in config.print_progress_categories
):
print_category(category["name"], category["measures"])
if config.progress_use_fancy: if config.progress_use_fancy:
measures = report_data["measures"] measures = report_data["measures"]