CScriptCameraHint, CCameraManager progress & renaming from MPR

This commit is contained in:
Luke Street 2024-09-24 22:05:42 -06:00
parent 141d88c0f7
commit 4147a9fdec
19 changed files with 771 additions and 269 deletions

View File

@ -132,10 +132,10 @@ DeleteCameraHint__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000957C
AddActiveCameraHint__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x80009664; // type:function size:0xCC scope:global AddActiveCameraHint__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x80009664; // type:function size:0xCC scope:global
HasBallCameraInitialPositionHint__14CCameraManagerCFR13CStateManager = .text:0x80009730; // type:function size:0x7C scope:global HasBallCameraInitialPositionHint__14CCameraManagerCFR13CStateManager = .text:0x80009730; // type:function size:0x7C scope:global
UpdateCameraHints__14CCameraManagerFfR13CStateManager = .text:0x800097AC; // type:function size:0xAF0 scope:global UpdateCameraHints__14CCameraManagerFfR13CStateManager = .text:0x800097AC; // type:function size:0xAF0 scope:global
RestoreHintlessCamera__14CCameraManagerFR13CStateManager = .text:0x8000A29C; // type:function size:0x1EC scope:global NoCameraHintsLeft__14CCameraManagerFR13CStateManager = .text:0x8000A29C; // type:function size:0x1EC scope:global
ApplyCameraHint__14CCameraManagerFRC17CScriptCameraHintR13CStateManager = .text:0x8000A488; // type:function size:0x218 scope:global UseCameraHint__14CCameraManagerFRC17CScriptCameraHintR13CStateManager = .text:0x8000A488; // type:function size:0x218 scope:global
SkipBallCameraCinematic__14CCameraManagerFR13CStateManager = .text:0x8000A6A0; // type:function size:0xC8 scope:global CinematicCut__14CCameraManagerFR13CStateManager = .text:0x8000A6A0; // type:function size:0xC8 scope:global
InterpolateToBallCamera__14CCameraManagerFRC12CTransform4f9TUniqueIdRC9CVector3ffffbR13CStateManager = .text:0x8000A768; // type:function size:0xE0 scope:global SetupInterpolation__14CCameraManagerFRC12CTransform4f9TUniqueId9CVector3ffffbR13CStateManager = .text:0x8000A768; // type:function size:0xE0 scope:global
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
@ -151,7 +151,7 @@ create_node__Q24rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>FPQ34rs
__dt__16CCameraShakeDataFv = .text:0x8000AD2C; // type:function size:0x7C scope:global __dt__16CCameraShakeDataFv = .text:0x8000AD2C; // type:function size:0x7C scope:global
__ct__16CCameraShakeDataFRC16CCameraShakeData = .text:0x8000ADA8; // type:function size:0x1A8 scope:global __ct__16CCameraShakeDataFRC16CCameraShakeData = .text:0x8000ADA8; // type:function size:0x1A8 scope:global
__dt__22CCameraShakerComponentFv = .text:0x8000AF50; // type:function size:0x48 scope:global __dt__22CCameraShakerComponentFv = .text:0x8000AF50; // type:function size:0x48 scope:global
SkipCinematic__14CCameraManagerFR13CStateManager = .text:0x8000AF98; // type:function size:0xC0 scope:global StopCinematics__14CCameraManagerFR13CStateManager = .text:0x8000AF98; // type:function size:0xC0 scope:global
EnterCinematic__14CCameraManagerFR13CStateManager = .text:0x8000B058; // type:function size:0x16C scope:global EnterCinematic__14CCameraManagerFR13CStateManager = .text:0x8000B058; // type:function size:0x16C scope:global
RemoveCinemaCamera__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000B1C4; // type:function size:0x94 scope:global RemoveCinemaCamera__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000B1C4; // type:function size:0x94 scope:global
erase__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>FQ24rstl110pointer_iterator<9TUniqueId,Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x8000B258; // type:function size:0x4C scope:global erase__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>FQ24rstl110pointer_iterator<9TUniqueId,Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x8000B258; // type:function size:0x4C scope:global
@ -160,34 +160,34 @@ AddCinemaCamera__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000B33C;
ProcessInput__14CCameraManagerFRC11CFinalInputR13CStateManager = .text:0x8000B46C; // type:function size:0xB0 scope:global ProcessInput__14CCameraManagerFRC11CFinalInputR13CStateManager = .text:0x8000B46C; // type:function size:0xB0 scope:global
SetInsideFluid__14CCameraManagerFb9TUniqueId = .text:0x8000B51C; // type:function size:0x30 scope:global SetInsideFluid__14CCameraManagerFb9TUniqueId = .text:0x8000B51C; // type:function size:0x30 scope:global
Update__14CCameraManagerFfR13CStateManager = .text:0x8000B54C; // type:function size:0x80 scope:global Update__14CCameraManagerFfR13CStateManager = .text:0x8000B54C; // type:function size:0x80 scope:global
SetFogDensity__14CCameraManagerFff = .text:0x8000B5CC; // type:function size:0x28 scope:global SetWaterFogScale__14CCameraManagerFff = .text:0x8000B5CC; // type:function size:0x28 scope:global
CalculateFogDensity__14CCameraManagerFR13CStateManagerPC12CScriptWater = .text:0x8000B5F4; // type:function size:0x8C scope:global GetWaterFarDistance__14CCameraManagerFR13CStateManagerPC12CScriptWater = .text:0x8000B5F4; // type:function size:0x8C scope:global
UpdateFog__14CCameraManagerFfR13CStateManager = .text:0x8000B680; // type:function size:0x1F8 scope:global UpdateFilters__14CCameraManagerFfR13CStateManager = .text:0x8000B680; // type:function size:0x1F8 scope:global
UpdateRumble__14CCameraManagerFfR13CStateManager = .text:0x8000B878; // type:function size:0x1B0 scope:global UpdateScreenShake__14CCameraManagerFfR13CStateManager = .text:0x8000B878; // type:function size:0x1B0 scope:global
UpdateSfxListener__14CCameraManagerFR13CStateManager = .text:0x8000BA28; // type:function size:0x9C scope:global UpdateAudioListener__14CCameraManagerFR13CStateManager = .text:0x8000BA28; // type:function size:0x9C scope:global
SetCurrentCameraId__14CCameraManagerF9TUniqueId = .text:0x8000BAC4; // type:function size:0xC scope:global SetCurrentCameraId__14CCameraManagerF9TUniqueId = .text:0x8000BAC4; // type:function size:0xC scope:global
GetLastCineCamera__14CCameraManagerCFR13CStateManager = .text:0x8000BAD0; // type:function size:0x48 scope:global GetCurrentCinematicCamera__14CCameraManagerCFR13CStateManager = .text:0x8000BAD0; // type:function size:0x48 scope:global
GetCurrentCamera__14CCameraManagerCFRC13CStateManager = .text:0x8000BB18; // type:function size:0x48 scope:global GetCurrentCamera__14CCameraManagerCFRC13CStateManager = .text:0x8000BB18; // type:function size:0x48 scope:global
CurrentCamera__14CCameraManagerFR13CStateManager = .text:0x8000BB60; // type:function size:0x48 scope:global CurrentCamera__14CCameraManagerFR13CStateManager = .text:0x8000BB60; // type:function size:0x48 scope:global
GetLastCineCameraId__14CCameraManagerCFv = .text:0x8000BBA8; // type:function size:0x30 scope:global GetCurrentCinematicCameraId__14CCameraManagerCFv = .text:0x8000BBA8; // type:function size:0x30 scope:global
GetCurrentCameraId__14CCameraManagerCFv = .text:0x8000BBD8; // type:function size:0x30 scope:global GetCurrentCameraId__14CCameraManagerCFv = .text:0x8000BBD8; // type:function size:0x30 scope:global
RenderCameras__14CCameraManagerFRC13CStateManager = .text:0x8000BC08; // type:function size:0x88 scope:global Render__14CCameraManagerFRC13CStateManager = .text:0x8000BC08; // type:function size:0x88 scope:global
ResetCameras__14CCameraManagerFR13CStateManager = .text:0x8000BC90; // type:function size:0xD0 scope:global ResetCameras__14CCameraManagerFR13CStateManager = .text:0x8000BC90; // type:function size:0xD0 scope:global
ThinkCameras__14CCameraManagerFfR13CStateManager = .text:0x8000BD60; // type:function size:0xF8 scope:global UpdateCameras__14CCameraManagerFfR13CStateManager = .text:0x8000BD60; // type:function size:0xF8 scope:global
CreateStandardCameras__14CCameraManagerFR13CStateManager = .text:0x8000BE58; // type:function size:0x260 scope:global CreateCameras__14CCameraManagerFR13CStateManager = .text:0x8000BE58; // type:function size:0x260 scope:global
DefaultAspect__14CCameraManagerFv = .text:0x8000C0B8; // type:function size:0x8 scope:global GetDefaultAspectRatio__14CCameraManagerFv = .text:0x8000C0B8; // type:function size:0x8 scope:global
DefaultFarPlane__14CCameraManagerFv = .text:0x8000C0C0; // type:function size:0x8 scope:global GetDefaultFirstPersonFarClipDistance__14CCameraManagerFv = .text:0x8000C0C0; // type:function size:0x8 scope:global
DefaultNearPlane__14CCameraManagerFv = .text:0x8000C0C8; // type:function size:0x8 scope:global GetDefaultFirstPersonNearClipDistance__14CCameraManagerFv = .text:0x8000C0C8; // type:function size:0x8 scope:global
DefaultFirstPersonFov__14CCameraManagerFv = .text:0x8000C0D0; // type:function size:0x8 scope:global GetDefaultFirstPersonVerticalFOV__14CCameraManagerFv = .text:0x8000C0D0; // type:function size:0x8 scope:global
DefaultThirdPersonFov__14CCameraManagerFv = .text:0x8000C0D8; // type:function size:0x8 scope:global GetDefaultThirdPersonVerticalFOV__14CCameraManagerFv = .text:0x8000C0D8; // type:function size:0x8 scope:global
__ct__14CCameraManagerF9TUniqueId = .text:0x8000C0E0; // type:function size:0x1D4 scope:global __ct__14CCameraManagerF9TUniqueId = .text:0x8000C0E0; // type:function size:0x1D4 scope:global
Clamp<f>__5CMathFRCfRCfRCf = .text:0x8000C2B4; // type:function size:0x2C scope:global Clamp<f>__5CMathFRCfRCfRCf = .text:0x8000C2B4; // type:function size:0x2C scope:global
fn_8000C2E0 = .text:0x8000C2E0; // type:function size:0x128 sort<PQ24rstl18pair<i,9TUniqueId>,Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>>>__4rstlFPQ24rstl18pair<i,9TUniqueId>PQ24rstl18pair<i,9TUniqueId>Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>> = .text:0x8000C2E0; // type:function size:0x128
reserve__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>Fi = .text:0x8000C408; // type:function size:0xEC scope:global reserve__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>Fi = .text:0x8000C408; // type:function size:0xEC scope:global
erase__Q24rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>FRCQ34rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>8iterator = .text:0x8000C4F4; // type:function size:0xC0 scope:global erase__Q24rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>FRCQ34rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>8iterator = .text:0x8000C4F4; // type:function size:0xC0 scope:global
fn_8000C5B4 = .text:0x8000C5B4; // type:function size:0xC0 fn_8000C5B4 = .text:0x8000C5B4; // type:function size:0xC0
fn_8000C674 = .text:0x8000C674; // type:function size:0x84 __insertion_sort<PQ24rstl18pair<i,9TUniqueId>,Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>>>__4rstlFPQ24rstl18pair<i,9TUniqueId>PQ24rstl18pair<i,9TUniqueId>Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>> = .text:0x8000C674; // type:function size:0x84
fn_8000C6F8 = .text:0x8000C6F8; // type:function size:0x90 __sort3<Q24rstl18pair<i,9TUniqueId>,Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>>>__4rstlFRQ24rstl18pair<i,9TUniqueId>RQ24rstl18pair<i,9TUniqueId>RQ24rstl18pair<i,9TUniqueId>Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>> = .text:0x8000C6F8; // type:function size:0x90
SetCommandFiltered__13ControlMapperFQ213ControlMapper9ECommandsb = .text:0x8000C788; // type:function size:0x14 scope:global SetCommandFiltered__13ControlMapperFQ213ControlMapper9ECommandsb = .text:0x8000C788; // type:function size:0x14 scope:global
ResetCommandFilters__13ControlMapperFv = .text:0x8000C79C; // type:function size:0x34 scope:global ResetCommandFilters__13ControlMapperFv = .text:0x8000C79C; // type:function size:0x34 scope:global
GetPressInput__13ControlMapperFQ213ControlMapper9ECommandsRC11CFinalInput = .text:0x8000C7D0; // type:function size:0xA4 scope:global GetPressInput__13ControlMapperFQ213ControlMapper9ECommandsRC11CFinalInput = .text:0x8000C7D0; // type:function size:0xA4 scope:global
@ -266,7 +266,7 @@ __dt__Q24rstl21reserved_vector<b,67>Fv = .text:0x8000E050; // type:function size
GetGunFollowTransform__18CFirstPersonCameraCFv = .text:0x8000E0E4; // type:function size:0x8 scope:global GetGunFollowTransform__18CFirstPersonCameraCFv = .text:0x8000E0E4; // type:function size:0x8 scope:global
Accept__18CFirstPersonCameraFR8IVisitor = .text:0x8000E0EC; // type:function size:0x38 scope:global Accept__18CFirstPersonCameraFR8IVisitor = .text:0x8000E0EC; // type:function size:0x38 scope:global
Think__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E124; // type:function size:0x1F4 scope:global Think__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E124; // type:function size:0x1F4 scope:global
SkipCinematic__18CFirstPersonCameraFv = .text:0x8000E318; // type:function size:0x28 scope:global CancelCinematicOffset__18CFirstPersonCameraFv = .text:0x8000E318; // type:function size:0x28 scope:global
Reset__18CFirstPersonCameraFRC12CTransform4fR13CStateManager = .text:0x8000E340; // type:function size:0x88 scope:global Reset__18CFirstPersonCameraFRC12CTransform4fR13CStateManager = .text:0x8000E340; // type:function size:0x88 scope:global
Render__18CFirstPersonCameraCFRC13CStateManager = .text:0x8000E3C8; // type:function size:0x4 scope:global Render__18CFirstPersonCameraCFRC13CStateManager = .text:0x8000E3C8; // type:function size:0x4 scope:global
PreThink__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E3CC; // type:function size:0x4 scope:global PreThink__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E3CC; // type:function size:0x4 scope:global
@ -1418,7 +1418,7 @@ AddToRenderer__7CEffectCFRC14CFrustumPlanesRC13CStateManager = .text:0x8005AD48;
Render__7CEffectCFRC13CStateManager = .text:0x8005AD4C; // type:function size:0x4 scope:global Render__7CEffectCFRC13CStateManager = .text:0x8005AD4C; // type:function size:0x4 scope:global
__ct__7CEffectF9TUniqueIdRC11CEntityInfobRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC12CTransform4f = .text:0x8005AD50; // type:function size:0xEC scope:global __ct__7CEffectF9TUniqueIdRC11CEntityInfobRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC12CTransform4f = .text:0x8005AD50; // type:function size:0xEC scope:global
UpdatePerspective__11CGameCameraFf = .text:0x8005AE3C; // type:function size:0xDC scope:global UpdatePerspective__11CGameCameraFf = .text:0x8005AE3C; // type:function size:0xDC scope:global
SetFovInterpolation__11CGameCameraFffff = .text:0x8005AF18; // type:function size:0x70 scope:global InterpolateFOV__11CGameCameraFffff = .text:0x8005AF18; // type:function size:0x70 scope:global
SkipFovInterpolation__11CGameCameraFv = .text:0x8005AF88; // type:function size:0x38 scope:global SkipFovInterpolation__11CGameCameraFv = .text:0x8005AF88; // type:function size:0x38 scope:global
ValidateCameraTransform__11CGameCameraFRC12CTransform4fRC12CTransform4f = .text:0x8005AFC0; // type:function size:0x314 scope:global ValidateCameraTransform__11CGameCameraFRC12CTransform4fRC12CTransform4f = .text:0x8005AFC0; // type:function size:0x314 scope:global
Accept__11CGameCameraFR8IVisitor = .text:0x8005B2D4; // type:function size:0x38 scope:global Accept__11CGameCameraFR8IVisitor = .text:0x8005B2D4; // type:function size:0x38 scope:global
@ -1925,7 +1925,7 @@ __ct__8CMapAreaFR12CInputStreamUi = .text:0x80080EFC; // type:function size:0x11
__sinit_CMapArea_cpp = .text:0x80081010; // type:function size:0x38 scope:local __sinit_CMapArea_cpp = .text:0x80081010; // type:function size:0x38 scope:local
SplineIntersectTest__11CBallCameraCFR13CMaterialListR13CStateManager = .text:0x80081048; // type:function size:0x788 scope:global SplineIntersectTest__11CBallCameraCFR13CMaterialListR13CStateManager = .text:0x80081048; // type:function size:0x788 scope:global
CheckFailsafeFromMorphBallState__11CBallCameraCFR13CStateManager = .text:0x800817D0; // type:function size:0x6B0 scope:global CheckFailsafeFromMorphBallState__11CBallCameraCFR13CStateManager = .text:0x800817D0; // type:function size:0x6B0 scope:global
ApplyCameraHint__11CBallCameraFR13CStateManager = .text:0x80081E80; // type:function size:0x8A0 scope:global OverrideCameraInfo__11CBallCameraFR13CStateManager = .text:0x80081E80; // type:function size:0x8A0 scope:global
Accept__11CBallCameraFR8IVisitor = .text:0x80082720; // type:function size:0x38 scope:global Accept__11CBallCameraFR8IVisitor = .text:0x80082720; // type:function size:0x38 scope:global
AcceptScriptMsg__11CBallCameraF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x80082758; // type:function size:0x3B4 scope:global AcceptScriptMsg__11CBallCameraF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x80082758; // type:function size:0x3B4 scope:global
ProcessInput__11CBallCameraFRC11CFinalInputR13CStateManager = .text:0x80082B0C; // type:function size:0x190 scope:global ProcessInput__11CBallCameraFRC11CFinalInputR13CStateManager = .text:0x80082B0C; // type:function size:0x190 scope:global
@ -1959,7 +1959,7 @@ UpdateCameraPositions__11CBallCameraFfRC12CTransform4fRC12CTransform4f = .text:0
ConstrainYawAngle__11CBallCameraCFRC7CPlayerfffR13CStateManager = .text:0x80089374; // type:function size:0x358 scope:global ConstrainYawAngle__11CBallCameraCFRC7CPlayerfffR13CStateManager = .text:0x80089374; // type:function size:0x358 scope:global
ConstrainElevationAndDistance__11CBallCameraFRfRffR13CStateManager = .text:0x800896CC; // type:function size:0x230 scope:global ConstrainElevationAndDistance__11CBallCameraFRfRffR13CStateManager = .text:0x800896CC; // type:function size:0x230 scope:global
UpdateObjectTooCloseId__11CBallCameraFR13CStateManager = .text:0x800898FC; // type:function size:0x284 scope:global UpdateObjectTooCloseId__11CBallCameraFR13CStateManager = .text:0x800898FC; // type:function size:0x284 scope:global
UpdateLookDirection__11CBallCameraFRC9CVector3fR13CStateManager = .text:0x80089B80; // type:function size:0x134 scope:global FindDesiredTransform__11CBallCameraF9CVector3fR13CStateManager = .text:0x80089B80; // type:function size:0x134 scope:global
FindDesiredPosition__11CBallCameraFff9CVector3fR13CStateManagerb = .text:0x80089CB4; // type:function size:0xD48 scope:global FindDesiredPosition__11CBallCameraFff9CVector3fR13CStateManagerb = .text:0x80089CB4; // type:function size:0xD48 scope:global
DetectCollision__11CBallCameraFRC9CVector3fRC9CVector3ffRfR13CStateManager = .text:0x8008A9FC; // type:function size:0x71C scope:global DetectCollision__11CBallCameraFRC9CVector3fRC9CVector3ffRfR13CStateManager = .text:0x8008A9FC; // type:function size:0x71C scope:global
AvoidGeometry__11CBallCameraFRC12CTransform4fRCQ24rstl32reserved_vector<9TUniqueId,1024>fR13CStateManager = .text:0x8008B118; // type:function size:0x134 scope:global AvoidGeometry__11CBallCameraFRC12CTransform4fRCQ24rstl32reserved_vector<9TUniqueId,1024>fR13CStateManager = .text:0x8008B118; // type:function size:0x134 scope:global
@ -1979,7 +1979,7 @@ __ct__15CCameraColliderFRC15CCameraCollider = .text:0x8008C6CC; // type:function
__dt__15CCameraColliderFv = .text:0x8008C77C; // type:function size:0x48 scope:global __dt__15CCameraColliderFv = .text:0x8008C77C; // type:function size:0x48 scope:global
ResetToTweaks__11CBallCameraFR13CStateManager = .text:0x8008C7C4; // type:function size:0x234 scope:global ResetToTweaks__11CBallCameraFR13CStateManager = .text:0x8008C7C4; // type:function size:0x234 scope:global
TeleportCamera__11CBallCameraFRC12CTransform4fR13CStateManager = .text:0x8008C9F8; // type:function size:0x98 scope:global TeleportCamera__11CBallCameraFRC12CTransform4fR13CStateManager = .text:0x8008C9F8; // type:function size:0x98 scope:global
ResetPosition__11CBallCameraFR13CStateManager = .text:0x8008CA90; // type:function size:0x8C scope:global TeleportLookAtStuff__11CBallCameraFR13CStateManager = .text:0x8008CA90; // type:function size:0x8C scope:global
TeleportCamera__11CBallCameraFRC9CVector3fR13CStateManager = .text:0x8008CB1C; // type:function size:0x100 scope:global TeleportCamera__11CBallCameraFRC9CVector3fR13CStateManager = .text:0x8008CB1C; // type:function size:0x100 scope:global
TeleportColliders__11CBallCameraFRQ24rstl52vector<15CCameraCollider,Q24rstl17rmemory_allocator>9CVector3f = .text:0x8008CC1C; // type:function size:0xD4 scope:global TeleportColliders__11CBallCameraFRQ24rstl52vector<15CCameraCollider,Q24rstl17rmemory_allocator>9CVector3f = .text:0x8008CC1C; // type:function size:0xD4 scope:global
__dt__11CBallCameraFv = .text:0x8008CCF0; // type:function size:0x1BC scope:global __dt__11CBallCameraFv = .text:0x8008CCF0; // type:function size:0x1BC scope:global
@ -5731,17 +5731,17 @@ __dt__11CScriptDockFv = .text:0x800C43CC; // type:function size:0x60 scope:globa
__ct__11CScriptDockF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC9CVector3fi7TAreaIdbib = .text:0x800C442C; // type:function size:0x260 scope:global __ct__11CScriptDockF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC9CVector3fi7TAreaIdbib = .text:0x800C442C; // type:function size:0x260 scope:global
Accept__17CScriptCameraHintFR8IVisitor = .text:0x800C468C; // type:function size:0x38 scope:global Accept__17CScriptCameraHintFR8IVisitor = .text:0x800C468C; // type:function size:0x38 scope:global
AcceptScriptMsg__17CScriptCameraHintF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x800C46C4; // type:function size:0x2E0 scope:global AcceptScriptMsg__17CScriptCameraHintF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x800C46C4; // type:function size:0x2E0 scope:global
InitializeInArea__17CScriptCameraHintFR13CStateManager = .text:0x800C49A4; // type:function size:0x1F4 scope:global CheckLegacyConnections__17CScriptCameraHintFR13CStateManager = .text:0x800C49A4; // type:function size:0x1F4 scope:global
fn_800C4B98 = .text:0x800C4B98; // type:function size:0x4C erase__Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>FQ24rstl116pointer_iterator<11SConnection,Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x800C4B98; // type:function size:0x4C
fn_800C4BE4 = .text:0x800C4BE4; // type:function size:0xB4 erase__Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>FQ24rstl116pointer_iterator<11SConnection,Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl116pointer_iterator<11SConnection,Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x800C4BE4; // type:function size:0xB4
RemoveHelper__17CScriptCameraHintF9TUniqueId = .text:0x800C4C98; // type:function size:0xD0 scope:global RemoveSender__17CScriptCameraHintF9TUniqueIdR13CStateManager = .text:0x800C4C98; // type:function size:0xD0 scope:global
AddHelper__17CScriptCameraHintF9TUniqueId = .text:0x800C4D68; // type:function size:0x58 scope:global AddSender__17CScriptCameraHintF9TUniqueId = .text:0x800C4D68; // type:function size:0x58 scope:global
ClearIdList__17CScriptCameraHintFv = .text:0x800C4DC0; // type:function size:0x58 scope:global ClearSenders__17CScriptCameraHintFv = .text:0x800C4DC0; // type:function size:0x58 scope:global
GetFirstHelper__17CScriptCameraHintCFv = .text:0x800C4E18; // type:function size:0x24 scope:global GetSenderId__17CScriptCameraHintCFv = .text:0x800C4E18; // type:function size:0x24 scope:global
__dt__17CScriptCameraHintFv = .text:0x800C4E3C; // type:function size:0xD4 scope:global __dt__17CScriptCameraHintFv = .text:0x800C4E3C; // type:function size:0xD4 scope:global
__ct__17CScriptCameraHintF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fbiQ211CBallCamera20EBallCameraBehaviourifffRC13CCameraSpringRC13CCameraSpringfRC9CVector3fRC9CVector3ff = .text:0x800C4F10; // type:function size:0x27C scope:global __ct__17CScriptCameraHintF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fbiQ211CBallCamera20EBallCameraBehaviourifffRC9CVector3fRC9CVector3fRC9CVector3fffffffffff = .text:0x800C4F10; // type:function size:0x27C scope:global
__dt__11CCameraHintFv = .text:0x800C518C; // type:function size:0x48 scope:global __dt__19CCameraOverrideInfoFv = .text:0x800C518C; // type:function size:0x48 scope:global
__ct__11CCameraHintFiQ211CBallCamera20EBallCameraBehaviourfffRC9CVector3fRC9CVector3fRC9CVector3fffffffffff = .text:0x800C51D4; // type:function size:0xA8 scope:global __ct__19CCameraOverrideInfoFUiQ211CBallCamera20EBallCameraBehaviourfffRC9CVector3fRC9CVector3fRC9CVector3fffffffffff = .text:0x800C51D4; // type:function size:0xA8 scope:global
LoadEnergyBall__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C527C; // type:function size:0x3A0 scope:global LoadEnergyBall__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C527C; // type:function size:0x3A0 scope:global
__ct__16CActorParametersFRC16CActorParameters = .text:0x800C561C; // type:function size:0xE0 scope:global __ct__16CActorParametersFRC16CActorParameters = .text:0x800C561C; // type:function size:0xE0 scope:global
LoadShadowProjector__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C56FC; // type:function size:0x15C scope:global LoadShadowProjector__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C56FC; // type:function size:0x15C scope:global
@ -18206,8 +18206,8 @@ lbl_803DF4E8 = .data:0x803DF4E8; // type:object size:0x10
__vt__13CScriptPickup = .data:0x803DF4F8; // type:object size:0x84 scope:global __vt__13CScriptPickup = .data:0x803DF4F8; // type:object size:0x84 scope:global
lbl_803DF580 = .data:0x803DF580; // type:object size:0x84 lbl_803DF580 = .data:0x803DF580; // type:object size:0x84
jumptable_803DF604 = .data:0x803DF604; // type:object size:0x80 scope:local jumptable_803DF604 = .data:0x803DF604; // type:object size:0x80 scope:local
lbl_803DF688 = .data:0x803DF688; // type:object size:0x6C __vt__17CScriptCameraHint = .data:0x803DF688; // type:object size:0x6C
lbl_803DF6F4 = .data:0x803DF6F4; // type:object size:0xC __vt__19CCameraOverrideInfo = .data:0x803DF6F4; // type:object size:0xC
__vt__41TObjOwnerDerivedFromIObj<13CStateMachine> = .data:0x803DF700; // type:object size:0xC scope:weak __vt__41TObjOwnerDerivedFromIObj<13CStateMachine> = .data:0x803DF700; // type:object size:0xC scope:weak
__vt__11CPlasmaBeam = .data:0x803DF710; // type:object size:0x44 scope:global __vt__11CPlasmaBeam = .data:0x803DF710; // type:object size:0x44 scope:global
__vt__10CPowerBeam = .data:0x803DF758; // type:object size:0x44 scope:global __vt__10CPowerBeam = .data:0x803DF758; // type:object size:0x44 scope:global

View File

@ -132,10 +132,10 @@ DeleteCameraHint__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x800095F8
AddActiveCameraHint__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x800096E0; // type:function size:0xCC scope:global AddActiveCameraHint__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x800096E0; // type:function size:0xCC scope:global
HasBallCameraInitialPositionHint__14CCameraManagerCFR13CStateManager = .text:0x800097AC; // type:function size:0x7C scope:global HasBallCameraInitialPositionHint__14CCameraManagerCFR13CStateManager = .text:0x800097AC; // type:function size:0x7C scope:global
UpdateCameraHints__14CCameraManagerFfR13CStateManager = .text:0x80009828; // type:function size:0xAF0 scope:global UpdateCameraHints__14CCameraManagerFfR13CStateManager = .text:0x80009828; // type:function size:0xAF0 scope:global
RestoreHintlessCamera__14CCameraManagerFR13CStateManager = .text:0x8000A318; // type:function size:0x1EC scope:global NoCameraHintsLeft__14CCameraManagerFR13CStateManager = .text:0x8000A318; // type:function size:0x1EC scope:global
ApplyCameraHint__14CCameraManagerFRC17CScriptCameraHintR13CStateManager = .text:0x8000A504; // type:function size:0x218 scope:global UseCameraHint__14CCameraManagerFRC17CScriptCameraHintR13CStateManager = .text:0x8000A504; // type:function size:0x218 scope:global
SkipBallCameraCinematic__14CCameraManagerFR13CStateManager = .text:0x8000A71C; // type:function size:0xC8 scope:global CinematicCut__14CCameraManagerFR13CStateManager = .text:0x8000A71C; // type:function size:0xC8 scope:global
InterpolateToBallCamera__14CCameraManagerFRC12CTransform4f9TUniqueIdRC9CVector3ffffbR13CStateManager = .text:0x8000A7E4; // type:function size:0xE0 scope:global SetupInterpolation__14CCameraManagerFRC12CTransform4f9TUniqueId9CVector3ffffbR13CStateManager = .text:0x8000A7E4; // type:function size:0xE0 scope:global
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
@ -151,7 +151,7 @@ create_node__Q24rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>FPQ34rs
__dt__16CCameraShakeDataFv = .text:0x8000ADA8; // type:function size:0x7C scope:global __dt__16CCameraShakeDataFv = .text:0x8000ADA8; // type:function size:0x7C scope:global
__ct__16CCameraShakeDataFRC16CCameraShakeData = .text:0x8000AE24; // type:function size:0x1A8 scope:global __ct__16CCameraShakeDataFRC16CCameraShakeData = .text:0x8000AE24; // type:function size:0x1A8 scope:global
__dt__22CCameraShakerComponentFv = .text:0x8000AFCC; // type:function size:0x48 scope:global __dt__22CCameraShakerComponentFv = .text:0x8000AFCC; // type:function size:0x48 scope:global
SkipCinematic__14CCameraManagerFR13CStateManager = .text:0x8000B014; // type:function size:0xC0 scope:global StopCinematics__14CCameraManagerFR13CStateManager = .text:0x8000B014; // type:function size:0xC0 scope:global
EnterCinematic__14CCameraManagerFR13CStateManager = .text:0x8000B0D4; // type:function size:0x16C scope:global EnterCinematic__14CCameraManagerFR13CStateManager = .text:0x8000B0D4; // type:function size:0x16C scope:global
RemoveCinemaCamera__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000B240; // type:function size:0x94 scope:global RemoveCinemaCamera__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000B240; // type:function size:0x94 scope:global
erase__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>FQ24rstl110pointer_iterator<9TUniqueId,Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x8000B2D4; // type:function size:0x4C scope:global erase__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>FQ24rstl110pointer_iterator<9TUniqueId,Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x8000B2D4; // type:function size:0x4C scope:global
@ -160,34 +160,34 @@ AddCinemaCamera__14CCameraManagerF9TUniqueIdR13CStateManager = .text:0x8000B3B8;
ProcessInput__14CCameraManagerFRC11CFinalInputR13CStateManager = .text:0x8000B4E8; // type:function size:0xB0 scope:global ProcessInput__14CCameraManagerFRC11CFinalInputR13CStateManager = .text:0x8000B4E8; // type:function size:0xB0 scope:global
SetInsideFluid__14CCameraManagerFb9TUniqueId = .text:0x8000B598; // type:function size:0x30 scope:global SetInsideFluid__14CCameraManagerFb9TUniqueId = .text:0x8000B598; // type:function size:0x30 scope:global
Update__14CCameraManagerFfR13CStateManager = .text:0x8000B5C8; // type:function size:0x80 scope:global Update__14CCameraManagerFfR13CStateManager = .text:0x8000B5C8; // type:function size:0x80 scope:global
SetFogDensity__14CCameraManagerFff = .text:0x8000B648; // type:function size:0x28 scope:global SetWaterFogScale__14CCameraManagerFff = .text:0x8000B648; // type:function size:0x28 scope:global
CalculateFogDensity__14CCameraManagerFR13CStateManagerPC12CScriptWater = .text:0x8000B670; // type:function size:0x8C scope:global GetWaterFarDistance__14CCameraManagerFR13CStateManagerPC12CScriptWater = .text:0x8000B670; // type:function size:0x8C scope:global
UpdateFog__14CCameraManagerFfR13CStateManager = .text:0x8000B6FC; // type:function size:0x1F8 scope:global UpdateFilters__14CCameraManagerFfR13CStateManager = .text:0x8000B6FC; // type:function size:0x1F8 scope:global
UpdateRumble__14CCameraManagerFfR13CStateManager = .text:0x8000B8F4; // type:function size:0x1B0 scope:global UpdateScreenShake__14CCameraManagerFfR13CStateManager = .text:0x8000B8F4; // type:function size:0x1B0 scope:global
UpdateSfxListener__14CCameraManagerFR13CStateManager = .text:0x8000BAA4; // type:function size:0x9C scope:global UpdateAudioListener__14CCameraManagerFR13CStateManager = .text:0x8000BAA4; // type:function size:0x9C scope:global
SetCurrentCameraId__14CCameraManagerF9TUniqueId = .text:0x8000BB40; // type:function size:0xC scope:global SetCurrentCameraId__14CCameraManagerF9TUniqueId = .text:0x8000BB40; // type:function size:0xC scope:global
GetLastCineCamera__14CCameraManagerCFR13CStateManager = .text:0x8000BB4C; // type:function size:0x48 scope:global GetCurrentCinematicCamera__14CCameraManagerCFR13CStateManager = .text:0x8000BB4C; // type:function size:0x48 scope:global
GetCurrentCamera__14CCameraManagerCFRC13CStateManager = .text:0x8000BB94; // type:function size:0x48 scope:global GetCurrentCamera__14CCameraManagerCFRC13CStateManager = .text:0x8000BB94; // type:function size:0x48 scope:global
CurrentCamera__14CCameraManagerFR13CStateManager = .text:0x8000BBDC; // type:function size:0x48 scope:global CurrentCamera__14CCameraManagerFR13CStateManager = .text:0x8000BBDC; // type:function size:0x48 scope:global
GetLastCineCameraId__14CCameraManagerCFv = .text:0x8000BC24; // type:function size:0x30 scope:global GetCurrentCinematicCameraId__14CCameraManagerCFv = .text:0x8000BC24; // type:function size:0x30 scope:global
GetCurrentCameraId__14CCameraManagerCFv = .text:0x8000BC54; // type:function size:0x30 scope:global GetCurrentCameraId__14CCameraManagerCFv = .text:0x8000BC54; // type:function size:0x30 scope:global
RenderCameras__14CCameraManagerFRC13CStateManager = .text:0x8000BC84; // type:function size:0x88 scope:global Render__14CCameraManagerFRC13CStateManager = .text:0x8000BC84; // type:function size:0x88 scope:global
ResetCameras__14CCameraManagerFR13CStateManager = .text:0x8000BD0C; // type:function size:0xD0 scope:global ResetCameras__14CCameraManagerFR13CStateManager = .text:0x8000BD0C; // type:function size:0xD0 scope:global
ThinkCameras__14CCameraManagerFfR13CStateManager = .text:0x8000BDDC; // type:function size:0xF8 scope:global UpdateCameras__14CCameraManagerFfR13CStateManager = .text:0x8000BDDC; // type:function size:0xF8 scope:global
CreateStandardCameras__14CCameraManagerFR13CStateManager = .text:0x8000BED4; // type:function size:0x260 scope:global CreateCameras__14CCameraManagerFR13CStateManager = .text:0x8000BED4; // type:function size:0x260 scope:global
DefaultAspect__14CCameraManagerFv = .text:0x8000C134; // type:function size:0x8 scope:global GetDefaultAspectRatio__14CCameraManagerFv = .text:0x8000C134; // type:function size:0x8 scope:global
DefaultFarPlane__14CCameraManagerFv = .text:0x8000C13C; // type:function size:0x8 scope:global GetDefaultFirstPersonFarClipDistance__14CCameraManagerFv = .text:0x8000C13C; // type:function size:0x8 scope:global
DefaultNearPlane__14CCameraManagerFv = .text:0x8000C144; // type:function size:0x8 scope:global GetDefaultFirstPersonNearClipDistance__14CCameraManagerFv = .text:0x8000C144; // type:function size:0x8 scope:global
DefaultFirstPersonFov__14CCameraManagerFv = .text:0x8000C14C; // type:function size:0x8 scope:global GetDefaultFirstPersonVerticalFOV__14CCameraManagerFv = .text:0x8000C14C; // type:function size:0x8 scope:global
DefaultThirdPersonFov__14CCameraManagerFv = .text:0x8000C154; // type:function size:0x8 scope:global GetDefaultThirdPersonVerticalFOV__14CCameraManagerFv = .text:0x8000C154; // type:function size:0x8 scope:global
__ct__14CCameraManagerF9TUniqueId = .text:0x8000C15C; // type:function size:0x1D4 scope:global __ct__14CCameraManagerF9TUniqueId = .text:0x8000C15C; // type:function size:0x1D4 scope:global
Clamp<f>__5CMathFRCfRCfRCf = .text:0x8000C330; // type:function size:0x2C scope:global Clamp<f>__5CMathFRCfRCfRCf = .text:0x8000C330; // type:function size:0x2C scope:global
fn_8000C2E0 = .text:0x8000C35C; // type:function size:0x128 scope:global sort<PQ24rstl18pair<i,9TUniqueId>,Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>>>__4rstlFPQ24rstl18pair<i,9TUniqueId>PQ24rstl18pair<i,9TUniqueId>Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>> = .text:0x8000C35C; // type:function size:0x128 scope:global
reserve__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>Fi = .text:0x8000C484; // type:function size:0xEC scope:global reserve__Q24rstl45vector<9TUniqueId,Q24rstl17rmemory_allocator>Fi = .text:0x8000C484; // type:function size:0xEC scope:global
erase__Q24rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>FRCQ34rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>8iterator = .text:0x8000C570; // type:function size:0xC0 scope:global erase__Q24rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>FRCQ34rstl51list<16CCameraShakeData,Q24rstl17rmemory_allocator>8iterator = .text:0x8000C570; // type:function size:0xC0 scope:global
fn_8000C5B4 = .text:0x8000C630; // type:function size:0xC0 scope:global fn_8000C5B4 = .text:0x8000C630; // type:function size:0xC0 scope:global
fn_8000C674 = .text:0x8000C6F0; // type:function size:0x84 scope:global __insertion_sort<PQ24rstl18pair<i,9TUniqueId>,Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>>>__4rstlFPQ24rstl18pair<i,9TUniqueId>PQ24rstl18pair<i,9TUniqueId>Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>> = .text:0x8000C6F0; // type:function size:0x84 scope:global
fn_8000C6F8 = .text:0x8000C774; // type:function size:0x90 scope:global __sort3<Q24rstl18pair<i,9TUniqueId>,Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>>>__4rstlFRQ24rstl18pair<i,9TUniqueId>RQ24rstl18pair<i,9TUniqueId>RQ24rstl18pair<i,9TUniqueId>Q24rstl63pair_sorter_finder<Q24rstl18pair<i,9TUniqueId>,Q24rstl7less<i>> = .text:0x8000C774; // type:function size:0x90 scope:global
SetCommandFiltered__13ControlMapperFQ213ControlMapper9ECommandsb = .text:0x8000C804; // type:function size:0x14 scope:global SetCommandFiltered__13ControlMapperFQ213ControlMapper9ECommandsb = .text:0x8000C804; // type:function size:0x14 scope:global
ResetCommandFilters__13ControlMapperFv = .text:0x8000C818; // type:function size:0x34 scope:global ResetCommandFilters__13ControlMapperFv = .text:0x8000C818; // type:function size:0x34 scope:global
GetPressInput__13ControlMapperFQ213ControlMapper9ECommandsRC11CFinalInput = .text:0x8000C84C; // type:function size:0xA4 scope:global GetPressInput__13ControlMapperFQ213ControlMapper9ECommandsRC11CFinalInput = .text:0x8000C84C; // type:function size:0xA4 scope:global
@ -266,7 +266,7 @@ __dt__Q24rstl21reserved_vector<b,67>Fv = .text:0x8000E0CC; // type:function size
GetGunFollowTransform__18CFirstPersonCameraCFv = .text:0x8000E160; // type:function size:0x8 scope:global GetGunFollowTransform__18CFirstPersonCameraCFv = .text:0x8000E160; // type:function size:0x8 scope:global
Accept__18CFirstPersonCameraFR8IVisitor = .text:0x8000E168; // type:function size:0x38 scope:global Accept__18CFirstPersonCameraFR8IVisitor = .text:0x8000E168; // type:function size:0x38 scope:global
Think__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E1A0; // type:function size:0x1F4 scope:global Think__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E1A0; // type:function size:0x1F4 scope:global
SkipCinematic__18CFirstPersonCameraFv = .text:0x8000E394; // type:function size:0x28 scope:global CancelCinematicOffset__18CFirstPersonCameraFv = .text:0x8000E394; // type:function size:0x28 scope:global
Reset__18CFirstPersonCameraFRC12CTransform4fR13CStateManager = .text:0x8000E3BC; // type:function size:0x88 scope:global Reset__18CFirstPersonCameraFRC12CTransform4fR13CStateManager = .text:0x8000E3BC; // type:function size:0x88 scope:global
Render__18CFirstPersonCameraCFRC13CStateManager = .text:0x8000E444; // type:function size:0x4 scope:global Render__18CFirstPersonCameraCFRC13CStateManager = .text:0x8000E444; // type:function size:0x4 scope:global
PreThink__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E448; // type:function size:0x4 scope:global PreThink__18CFirstPersonCameraFfR13CStateManager = .text:0x8000E448; // type:function size:0x4 scope:global
@ -1418,7 +1418,7 @@ AddToRenderer__7CEffectCFRC14CFrustumPlanesRC13CStateManager = .text:0x8005ADC4;
Render__7CEffectCFRC13CStateManager = .text:0x8005ADC8; // type:function size:0x4 scope:global Render__7CEffectCFRC13CStateManager = .text:0x8005ADC8; // type:function size:0x4 scope:global
__ct__7CEffectF9TUniqueIdRC11CEntityInfobRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC12CTransform4f = .text:0x8005ADCC; // type:function size:0xEC scope:global __ct__7CEffectF9TUniqueIdRC11CEntityInfobRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC12CTransform4f = .text:0x8005ADCC; // type:function size:0xEC scope:global
UpdatePerspective__11CGameCameraFf = .text:0x8005AEB8; // type:function size:0xDC scope:global UpdatePerspective__11CGameCameraFf = .text:0x8005AEB8; // type:function size:0xDC scope:global
SetFovInterpolation__11CGameCameraFffff = .text:0x8005AF94; // type:function size:0x70 scope:global InterpolateFOV__11CGameCameraFffff = .text:0x8005AF94; // type:function size:0x70 scope:global
SkipFovInterpolation__11CGameCameraFv = .text:0x8005B004; // type:function size:0x38 scope:global SkipFovInterpolation__11CGameCameraFv = .text:0x8005B004; // type:function size:0x38 scope:global
ValidateCameraTransform__11CGameCameraFRC12CTransform4fRC12CTransform4f = .text:0x8005B03C; // type:function size:0x314 scope:global ValidateCameraTransform__11CGameCameraFRC12CTransform4fRC12CTransform4f = .text:0x8005B03C; // type:function size:0x314 scope:global
Accept__11CGameCameraFR8IVisitor = .text:0x8005B350; // type:function size:0x38 scope:global Accept__11CGameCameraFR8IVisitor = .text:0x8005B350; // type:function size:0x38 scope:global
@ -1925,7 +1925,7 @@ __ct__8CMapAreaFR12CInputStreamUi = .text:0x80080F78; // type:function size:0x11
__sinit_CMapArea_cpp = .text:0x8008108C; // type:function size:0x38 scope:global __sinit_CMapArea_cpp = .text:0x8008108C; // type:function size:0x38 scope:global
SplineIntersectTest__11CBallCameraCFR13CMaterialListR13CStateManager = .text:0x800810C4; // type:function size:0x788 scope:global SplineIntersectTest__11CBallCameraCFR13CMaterialListR13CStateManager = .text:0x800810C4; // type:function size:0x788 scope:global
CheckFailsafeFromMorphBallState__11CBallCameraCFR13CStateManager = .text:0x8008184C; // type:function size:0x6B0 scope:global CheckFailsafeFromMorphBallState__11CBallCameraCFR13CStateManager = .text:0x8008184C; // type:function size:0x6B0 scope:global
ApplyCameraHint__11CBallCameraFR13CStateManager = .text:0x80081EFC; // type:function size:0x8A0 scope:global OverrideCameraInfo__11CBallCameraFR13CStateManager = .text:0x80081EFC; // type:function size:0x8A0 scope:global
Accept__11CBallCameraFR8IVisitor = .text:0x8008279C; // type:function size:0x38 scope:global Accept__11CBallCameraFR8IVisitor = .text:0x8008279C; // type:function size:0x38 scope:global
AcceptScriptMsg__11CBallCameraF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x800827D4; // type:function size:0x3B4 scope:global AcceptScriptMsg__11CBallCameraF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x800827D4; // type:function size:0x3B4 scope:global
ProcessInput__11CBallCameraFRC11CFinalInputR13CStateManager = .text:0x80082B88; // type:function size:0x190 scope:global ProcessInput__11CBallCameraFRC11CFinalInputR13CStateManager = .text:0x80082B88; // type:function size:0x190 scope:global
@ -1959,7 +1959,7 @@ UpdateCameraPositions__11CBallCameraFfRC12CTransform4fRC12CTransform4f = .text:0
ConstrainYawAngle__11CBallCameraCFRC7CPlayerfffR13CStateManager = .text:0x800893F0; // type:function size:0x358 scope:global ConstrainYawAngle__11CBallCameraCFRC7CPlayerfffR13CStateManager = .text:0x800893F0; // type:function size:0x358 scope:global
ConstrainElevationAndDistance__11CBallCameraFRfRffR13CStateManager = .text:0x80089748; // type:function size:0x230 scope:global ConstrainElevationAndDistance__11CBallCameraFRfRffR13CStateManager = .text:0x80089748; // type:function size:0x230 scope:global
UpdateObjectTooCloseId__11CBallCameraFR13CStateManager = .text:0x80089978; // type:function size:0x284 scope:global UpdateObjectTooCloseId__11CBallCameraFR13CStateManager = .text:0x80089978; // type:function size:0x284 scope:global
UpdateLookDirection__11CBallCameraFRC9CVector3fR13CStateManager = .text:0x80089BFC; // type:function size:0x134 scope:global FindDesiredTransform__11CBallCameraF9CVector3fR13CStateManager = .text:0x80089BFC; // type:function size:0x134 scope:global
FindDesiredPosition__11CBallCameraFff9CVector3fR13CStateManagerb = .text:0x80089D30; // type:function size:0xD48 scope:global FindDesiredPosition__11CBallCameraFff9CVector3fR13CStateManagerb = .text:0x80089D30; // type:function size:0xD48 scope:global
DetectCollision__11CBallCameraFRC9CVector3fRC9CVector3ffRfR13CStateManager = .text:0x8008AA78; // type:function size:0x71C scope:global DetectCollision__11CBallCameraFRC9CVector3fRC9CVector3ffRfR13CStateManager = .text:0x8008AA78; // type:function size:0x71C scope:global
AvoidGeometry__11CBallCameraFRC12CTransform4fRCQ24rstl32reserved_vector<9TUniqueId,1024>fR13CStateManager = .text:0x8008B194; // type:function size:0x134 scope:global AvoidGeometry__11CBallCameraFRC12CTransform4fRCQ24rstl32reserved_vector<9TUniqueId,1024>fR13CStateManager = .text:0x8008B194; // type:function size:0x134 scope:global
@ -1979,7 +1979,7 @@ __ct__15CCameraColliderFRC15CCameraCollider = .text:0x8008C748; // type:function
__dt__15CCameraColliderFv = .text:0x8008C7F8; // type:function size:0x48 scope:global __dt__15CCameraColliderFv = .text:0x8008C7F8; // type:function size:0x48 scope:global
ResetToTweaks__11CBallCameraFR13CStateManager = .text:0x8008C840; // type:function size:0x234 scope:global ResetToTweaks__11CBallCameraFR13CStateManager = .text:0x8008C840; // type:function size:0x234 scope:global
TeleportCamera__11CBallCameraFRC12CTransform4fR13CStateManager = .text:0x8008CA74; // type:function size:0x98 scope:global TeleportCamera__11CBallCameraFRC12CTransform4fR13CStateManager = .text:0x8008CA74; // type:function size:0x98 scope:global
ResetPosition__11CBallCameraFR13CStateManager = .text:0x8008CB0C; // type:function size:0x8C scope:global TeleportLookAtStuff__11CBallCameraFR13CStateManager = .text:0x8008CB0C; // type:function size:0x8C scope:global
TeleportCamera__11CBallCameraFRC9CVector3fR13CStateManager = .text:0x8008CB98; // type:function size:0x100 scope:global TeleportCamera__11CBallCameraFRC9CVector3fR13CStateManager = .text:0x8008CB98; // type:function size:0x100 scope:global
TeleportColliders__11CBallCameraFRQ24rstl52vector<15CCameraCollider,Q24rstl17rmemory_allocator>9CVector3f = .text:0x8008CC98; // type:function size:0xD4 scope:global TeleportColliders__11CBallCameraFRQ24rstl52vector<15CCameraCollider,Q24rstl17rmemory_allocator>9CVector3f = .text:0x8008CC98; // type:function size:0xD4 scope:global
__dt__11CBallCameraFv = .text:0x8008CD6C; // type:function size:0x1BC scope:global __dt__11CBallCameraFv = .text:0x8008CD6C; // type:function size:0x1BC scope:global
@ -5733,17 +5733,17 @@ __dt__11CScriptDockFv = .text:0x800C4448; // type:function size:0x60 scope:globa
__ct__11CScriptDockF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC9CVector3fi7TAreaIdbib = .text:0x800C44A8; // type:function size:0x260 scope:global __ct__11CScriptDockF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC9CVector3fRC9CVector3fi7TAreaIdbib = .text:0x800C44A8; // type:function size:0x260 scope:global
Accept__17CScriptCameraHintFR8IVisitor = .text:0x800C4708; // type:function size:0x38 scope:global Accept__17CScriptCameraHintFR8IVisitor = .text:0x800C4708; // type:function size:0x38 scope:global
AcceptScriptMsg__17CScriptCameraHintF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x800C4740; // type:function size:0x2E0 scope:global AcceptScriptMsg__17CScriptCameraHintF20EScriptObjectMessage9TUniqueIdR13CStateManager = .text:0x800C4740; // type:function size:0x2E0 scope:global
InitializeInArea__17CScriptCameraHintFR13CStateManager = .text:0x800C4A20; // type:function size:0x1F4 scope:global CheckLegacyConnections__17CScriptCameraHintFR13CStateManager = .text:0x800C4A20; // type:function size:0x1F4 scope:global
fn_800C4B98 = .text:0x800C4C14; // type:function size:0x4C scope:global erase__Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>FQ24rstl116pointer_iterator<11SConnection,Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x800C4C14; // type:function size:0x4C scope:global
fn_800C4BE4 = .text:0x800C4C60; // type:function size:0xB4 scope:global erase__Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>FQ24rstl116pointer_iterator<11SConnection,Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl116pointer_iterator<11SConnection,Q24rstl48vector<11SConnection,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator> = .text:0x800C4C60; // type:function size:0xB4 scope:global
RemoveHelper__17CScriptCameraHintF9TUniqueId = .text:0x800C4D14; // type:function size:0xD0 scope:global RemoveSender__17CScriptCameraHintF9TUniqueIdR13CStateManager = .text:0x800C4D14; // type:function size:0xD0 scope:global
AddHelper__17CScriptCameraHintF9TUniqueId = .text:0x800C4DE4; // type:function size:0x58 scope:global AddSender__17CScriptCameraHintF9TUniqueId = .text:0x800C4DE4; // type:function size:0x58 scope:global
ClearIdList__17CScriptCameraHintFv = .text:0x800C4E3C; // type:function size:0x58 scope:global ClearSenders__17CScriptCameraHintFv = .text:0x800C4E3C; // type:function size:0x58 scope:global
GetFirstHelper__17CScriptCameraHintCFv = .text:0x800C4E94; // type:function size:0x24 scope:global GetSenderId__17CScriptCameraHintCFv = .text:0x800C4E94; // type:function size:0x24 scope:global
__dt__17CScriptCameraHintFv = .text:0x800C4EB8; // type:function size:0xD4 scope:global __dt__17CScriptCameraHintFv = .text:0x800C4EB8; // type:function size:0xD4 scope:global
__ct__17CScriptCameraHintF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fbiQ211CBallCamera20EBallCameraBehaviourifffRC13CCameraSpringRC13CCameraSpringfRC9CVector3fRC9CVector3ff = .text:0x800C4F8C; // type:function size:0x27C scope:global __ct__17CScriptCameraHintF9TUniqueIdRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>RC11CEntityInfoRC12CTransform4fbiQ211CBallCamera20EBallCameraBehaviourifffRC9CVector3fRC9CVector3fRC9CVector3fffffffffff = .text:0x800C4F8C; // type:function size:0x27C scope:global
__dt__11CCameraHintFv = .text:0x800C5208; // type:function size:0x48 scope:global __dt__19CCameraOverrideInfoFv = .text:0x800C5208; // type:function size:0x48 scope:global
__ct__11CCameraHintFiQ211CBallCamera20EBallCameraBehaviourfffRC9CVector3fRC9CVector3fRC9CVector3fffffffffff = .text:0x800C5250; // type:function size:0xA8 scope:global __ct__19CCameraOverrideInfoFUiQ211CBallCamera20EBallCameraBehaviourfffRC9CVector3fRC9CVector3fRC9CVector3fffffffffff = .text:0x800C5250; // type:function size:0xA8 scope:global
LoadEnergyBall__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C52F8; // type:function size:0x3A0 scope:global LoadEnergyBall__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C52F8; // type:function size:0x3A0 scope:global
__ct__16CActorParametersFRC16CActorParameters = .text:0x800C5698; // type:function size:0xE0 scope:global __ct__16CActorParametersFRC16CActorParameters = .text:0x800C5698; // type:function size:0xE0 scope:global
LoadShadowProjector__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C5778; // type:function size:0x15C scope:global LoadShadowProjector__12ScriptLoaderFR13CStateManagerR12CInputStreamiRC11CEntityInfo = .text:0x800C5778; // type:function size:0x15C scope:global
@ -18259,8 +18259,8 @@ lbl_803DF4E8 = .data:0x803DF6C8; // type:object size:0x10 scope:global
__vt__13CScriptPickup = .data:0x803DF6D8; // type:object size:0x84 scope:global __vt__13CScriptPickup = .data:0x803DF6D8; // type:object size:0x84 scope:global
lbl_803DF580 = .data:0x803DF760; // type:object size:0x84 scope:global lbl_803DF580 = .data:0x803DF760; // type:object size:0x84 scope:global
lbl_803DF604 = .data:0x803DF7E4; // type:object size:0x80 scope:global lbl_803DF604 = .data:0x803DF7E4; // type:object size:0x80 scope:global
lbl_803DF688 = .data:0x803DF868; // type:object size:0x6C scope:global __vt__17CScriptCameraHint = .data:0x803DF868; // type:object size:0x6C scope:global
lbl_803DF6F4 = .data:0x803DF8D4; // type:object size:0xC scope:global __vt__19CCameraOverrideInfo = .data:0x803DF8D4; // type:object size:0xC scope:global
__vt__41TObjOwnerDerivedFromIObj<13CStateMachine> = .data:0x803DF8E0; // type:object size:0x10 scope:global __vt__41TObjOwnerDerivedFromIObj<13CStateMachine> = .data:0x803DF8E0; // type:object size:0x10 scope:global
__vt__11CPlasmaBeam = .data:0x803DF8F0; // type:object size:0x48 scope:global __vt__11CPlasmaBeam = .data:0x803DF8F0; // type:object size:0x48 scope:global
__vt__10CPowerBeam = .data:0x803DF938; // type:object size:0x48 scope:global __vt__10CPowerBeam = .data:0x803DF938; // type:object size:0x48 scope:global

View File

@ -188,12 +188,13 @@ public:
static const ushort kInternalInvalidSfxId; // 0xFFFF static const ushort kInternalInvalidSfxId; // 0xFFFF
static const int kAllAreas; // 0xFFFFFFFF static const int kAllAreas; // 0xFFFFFFFF
static CSfxHandle AddEmitter(const SND_FXID id, const CVector3f& pos, const CVector3f& dir, static CSfxHandle AddEmitter(const SND_FXID id, const CVector3f& pos, const CVector3f& dir,
const bool useAcoustics, const bool looped, const bool useAcoustics = false, const bool looped = false,
const short prio = kMedPriority, const int areaId = kAllAreas); const short prio = kMedPriority, const int areaId = kAllAreas);
static CSfxHandle AddEmitter(const SND_FXID id, const CVector3f& pos, const CVector3f& dir, static CSfxHandle AddEmitter(const SND_FXID id, const CVector3f& pos, const CVector3f& dir,
const uchar vol, const bool useAcoustics, const bool looped, const uchar vol, const bool useAcoustics = false,
const short prio = kMedPriority, const int areaId = kAllAreas); const bool looped = false, const short prio = kMedPriority,
static CSfxHandle AddEmitter(CAudioSys::C3DEmitterParmData& parmData, bool useAcoustics, const int areaId = kAllAreas);
static CSfxHandle AddEmitter(CAudioSys::C3DEmitterParmData& parmData, bool useAcoustics = false,
const short prio = kMedPriority, const bool looped = false, const short prio = kMedPriority, const bool looped = false,
const int areaId = kAllAreas); const int areaId = kAllAreas);
@ -209,9 +210,9 @@ public:
static void SetDuration(CSfxHandle handle, float duration); static void SetDuration(CSfxHandle handle, float duration);
static ushort GetReverbAmount(); static ushort GetReverbAmount();
static CSfxHandle SfxStart(ushort id, short vol, short pan, bool useAcoustics, static CSfxHandle SfxStart(const ushort id, const short vol, const short pan,
short prio = kMaxPriority, bool looped = false, const bool useAcoustics = false, const short prio = kMaxPriority,
int areaId = kAllAreas); const bool looped = false, const int areaId = kAllAreas);
static void SfxStop(CSfxHandle handle); static void SfxStop(CSfxHandle handle);
static void SfxVolume(CSfxHandle handle, uchar volume); static void SfxVolume(CSfxHandle handle, uchar volume);
static void SfxSpan(CSfxHandle, uchar); static void SfxSpan(CSfxHandle, uchar);

View File

@ -117,7 +117,7 @@ public:
void TeleportColliders(rstl::vector< CCameraCollider >& colliderList, CVector3f pos); void TeleportColliders(rstl::vector< CCameraCollider >& colliderList, CVector3f pos);
void TeleportCamera(const CVector3f& pos, CStateManager& mgr); void TeleportCamera(const CVector3f& pos, CStateManager& mgr);
void TeleportCamera(const CTransform4f& xf, CStateManager& mgr); void TeleportCamera(const CTransform4f& xf, CStateManager& mgr);
void ResetPosition(CStateManager& mgr); void TeleportLookAtStuff(CStateManager& mgr);
void ResetToTweaks(CStateManager& mgr); void ResetToTweaks(CStateManager& mgr);
CVector3f FindDesiredPosition(float distance, float elevation, CVector3f dir, CStateManager& mgr, CVector3f FindDesiredPosition(float distance, float elevation, CVector3f dir, CStateManager& mgr,
bool fullTest); bool fullTest);
@ -138,6 +138,7 @@ public:
CStateManager& mgr); CStateManager& mgr);
bool DetectCollision(const CVector3f& from, const CVector3f& to, float radius, float& d, bool DetectCollision(const CVector3f& from, const CVector3f& to, float radius, float& d,
CStateManager& mgr); CStateManager& mgr);
CTransform4f FindDesiredTransform(CVector3f dir, CStateManager& mgr);
const CVector3f& GetLookAtPosition() const { return x1d8_lookPos; } const CVector3f& GetLookAtPosition() const { return x1d8_lookPos; }
float GetDistance() const { return x190_curMinDistance; } float GetDistance() const { return x190_curMinDistance; }
@ -161,7 +162,11 @@ public:
void SetWorldOffset(CVector3f vec); // TODO void SetWorldOffset(CVector3f vec); // TODO
EBallCameraState GetState() const { return x400_state; } EBallCameraState GetState() const { return x400_state; }
void SetState(EBallCameraState state); void SetState(EBallCameraState state);
void ApplyCameraHint(CStateManager& mgr); void OverrideCameraInfo(CStateManager& mgr);
void UpdateLookAtPosition(float dt, CStateManager& mgr);
void SetClampVelTimer(float v) { x470_clampVelTimer = v; }
void SetClampVelRange(float v) { x474_clampVelRange = v; }
private: private:
struct SFailsafeState { struct SFailsafeState {

View File

@ -1,39 +0,0 @@
#ifndef _CCAMERAHINT
#define _CCAMERAHINT
#include "Kyoto/Math/CVector3f.hpp"
#include "MetroidPrime/Cameras/CBallCamera.hpp"
#include "types.h"
class CCameraHint {
public:
CCameraHint(uint overrideFlags, CBallCamera::EBallCameraBehaviour behaviour, float minDist,
float maxDist, float backwardsDist, const CVector3f& lookAtOffset,
const CVector3f& chaseLookAtOffset, const CVector3f& ballToCam, float fov,
float attitudeRange, float azimuthRange, float anglePerSecond, float clampVelRange,
float clampRotRange, float elevation, float interpolateTime, float clampVelTime,
float controlInterpDur);
virtual ~CCameraHint();
private:
uint mOverrideFlags;
CBallCamera::EBallCameraBehaviour mBehaviour;
float mMinDist;
float mMaxDist;
float mBackwardsDist;
CVector3f mLookAtOffset;
CVector3f mChaseLookAtOffset;
CVector3f mBallToCam;
float mFov;
float mAttitudeRange;
float mAzimuthRange;
float mAnglePerSecond;
float mClampVelRange;
float mClampRotRange;
float mElevation;
float mInterpolateTime;
float mClampVelTime;
float mControlInterpDur;
};
#endif // _CCAMERAHINT

View File

@ -40,25 +40,25 @@ class CCameraManager {
public: public:
CCameraManager(TUniqueId curCamera = kInvalidUniqueId); CCameraManager(TUniqueId curCamera = kInvalidUniqueId);
void CreateStandardCameras(CStateManager& mgr); void CreateCameras(CStateManager& mgr);
void ThinkCameras(float dt, CStateManager& mgr); void UpdateCameras(float dt, CStateManager& mgr);
void ResetCameras(CStateManager& mgr); void ResetCameras(CStateManager& mgr);
void RenderCameras(const CStateManager& mgr); void Render(const CStateManager& mgr);
TUniqueId GetCurrentCameraId() const; TUniqueId GetCurrentCameraId() const;
void SetCurrentCameraId(TUniqueId camId); void SetCurrentCameraId(TUniqueId camId);
CGameCamera& CurrentCamera(CStateManager& mgr); CGameCamera& CurrentCamera(CStateManager& mgr);
const CGameCamera& GetCurrentCamera(const CStateManager& mgr) const; const CGameCamera& GetCurrentCamera(const CStateManager& mgr) const;
const CGameCamera& GetLastCineCamera(CStateManager& mgr) const; const CGameCamera& GetCurrentCinematicCamera(CStateManager& mgr) const;
TUniqueId GetLastCineCameraId() const; TUniqueId GetCurrentCinematicCameraId() const;
void Update(float dt, CStateManager& mgr); void Update(float dt, CStateManager& mgr);
void UpdateSfxListener(CStateManager& mgr); void UpdateAudioListener(CStateManager& mgr);
void UpdateRumble(float dt, CStateManager& mgr); void UpdateScreenShake(float dt, CStateManager& mgr);
void UpdateFog(float dt, CStateManager& mgr); void UpdateFilters(float dt, CStateManager& mgr);
void UpdateCameraHints(float dt, CStateManager& mgr); void UpdateCameraHints(float dt, CStateManager& mgr);
float CalculateFogDensity(CStateManager& mgr, const CScriptWater* water); float GetWaterFarDistance(CStateManager& mgr, const CScriptWater* water);
void SetFogDensity(float fogDensityTarget, float fogDensitySpeed); void SetWaterFogScale(float fogDensityTarget, float fogDensitySpeed);
CFirstPersonCamera* FirstPersonCamera() const /* map */ { return x7c_fpCamera; } CFirstPersonCamera* FirstPersonCamera() const /* map */ { return x7c_fpCamera; }
const CFirstPersonCamera* GetFirstPersonCamera() const { return x7c_fpCamera; } const CFirstPersonCamera* GetFirstPersonCamera() const { return x7c_fpCamera; }
@ -68,7 +68,7 @@ public:
void AddCinemaCamera(TUniqueId uid, CStateManager& mgr); void AddCinemaCamera(TUniqueId uid, CStateManager& mgr);
void RemoveCinemaCamera(TUniqueId uid, CStateManager& mgr); void RemoveCinemaCamera(TUniqueId uid, CStateManager& mgr);
void EnterCinematic(CStateManager& mgr); void EnterCinematic(CStateManager& mgr);
void SkipCinematic(CStateManager& mgr); void StopCinematics(CStateManager& mgr);
int AddCameraShaker(const CCameraShakeData& data, bool sfx); int AddCameraShaker(const CCameraShakeData& data, bool sfx);
void RemoveCameraShaker(int id); void RemoveCameraShaker(int id);
@ -77,11 +77,15 @@ public:
bool IsInFirstPersonCamera() const; bool IsInFirstPersonCamera() const;
bool IsInterpolationCameraActive() const; bool IsInterpolationCameraActive() const;
bool ShouldBypassInterpolationCamera() const; bool ShouldBypassInterpolationCamera() const;
void InterpolateToBallCamera(const CTransform4f& xf, TUniqueId camId, const CVector3f& lookPos, void 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);
void SkipBallCameraCinematic(CStateManager& mgr); void CinematicCut(CStateManager& mgr);
void ApplyCameraHint(const CScriptCameraHint& hint, CStateManager& mgr); void UseCameraHint(const CScriptCameraHint& hint, CStateManager& mgr);
void NoCameraHintsLeft(CStateManager& mgr);
void AddCameraHint(TUniqueId uid, CStateManager& mgr);
void DeleteCameraHint(TUniqueId uid, CStateManager& mgr);
void ReallyRemoveCameraHint(TUniqueId uid, CStateManager& mgr);
// SetSpecialCameras__14CCameraManagerFR18CFirstPersonCameraR11CBallCamera // SetSpecialCameras__14CCameraManagerFR18CFirstPersonCameraR11CBallCamera
void SetCurrentFov(float fov) { x3bc_curFov = fov; } void SetCurrentFov(float fov) { x3bc_curFov = fov; }
@ -89,17 +93,23 @@ public:
int GetFluidCounter() const { return x74_fluidCounter; } int GetFluidCounter() const { return x74_fluidCounter; }
TUniqueId GetFluidId() const { return x78_fluidId; } TUniqueId GetFluidId() const { return x78_fluidId; }
// GetInsideFluid__14CCameraManagerCFv // GetInsideFluid__14CCameraManagerCFv
bool IsInsideFluid() const { return xa0_26_inWater; }
// WasInsideFluid__14CCameraManagerCFv // WasInsideFluid__14CCameraManagerCFv
// SetWasInsideFluid__14CCameraManagerFb // SetWasInsideFluid__14CCameraManagerFb
void SetInsideFluid(bool isInside, TUniqueId fluidId); void SetInsideFluid(bool isInside, TUniqueId fluidId);
void ProcessInput(const CFinalInput& input, CStateManager& mgr); void ProcessInput(const CFinalInput& input, CStateManager& mgr);
static float DefaultThirdPersonFov(); void SetPathCamera(TUniqueId id, CStateManager& mgr);
static float DefaultFirstPersonFov(); TUniqueId GetPathCameraId() const;
static float DefaultNearPlane(); void SetSpindleCamera(TUniqueId id, CStateManager& mgr);
static float DefaultFarPlane(); TUniqueId GetSpindleCameraId() const;
static float DefaultAspect();
static float GetDefaultThirdPersonVerticalFOV();
static float GetDefaultFirstPersonVerticalFOV();
static float GetDefaultFirstPersonNearClipDistance();
static float GetDefaultFirstPersonFarClipDistance();
static float GetDefaultAspectRatio();
private: private:
TUniqueId x0_curCameraId; TUniqueId x0_curCameraId;

View File

@ -0,0 +1,64 @@
#ifndef _CCAMERAOVERRIDEINFO
#define _CCAMERAOVERRIDEINFO
#include "Kyoto/Math/CVector3f.hpp"
#include "MetroidPrime/Cameras/CBallCamera.hpp"
#include "types.h"
class CCameraOverrideInfo {
friend class CScriptCameraHint;
public:
CCameraOverrideInfo(uint overrideFlags, CBallCamera::EBallCameraBehaviour behaviour, float minDist,
float maxDist, float backwardsDist, const CVector3f& lookAtOffset,
const CVector3f& chaseLookAtOffset, const CVector3f& ballToCam, float fov,
float attitudeRange, float azimuthRange, float anglePerSecond, float clampVelRange,
float clampRotRange, float elevation, float interpolateTime, float clampVelTime,
float controlInterpDur);
virtual ~CCameraOverrideInfo() {}
uint GetOverrideFlags() const { return mOverrideFlags; }
CBallCamera::EBallCameraBehaviour GetBehaviourType() const { return mBehaviour; }
float GetMinDist() const { return mMinDist; }
float GetMaxDist() const { return mMaxDist; }
float GetBackwardsDist() const { return mBackwardsDist; }
const CVector3f& GetLookAtOffset() const { return mLookAtOffset; }
const CVector3f& GetChaseLookAtOffset() const { return mChaseLookAtOffset; }
const CVector3f& GetBallToCam() const { return mBallToCam; }
float GetFov() const { return mFov; }
float GetAttitudeRange() const { return mAttitudeRange; }
float GetAzimuthRange() const { return mAzimuthRange; }
float GetAnglePerSecond() const { return mAnglePerSecond; }
float GetClampVelRange() const { return mClampVelRange; }
float GetClampRotRange() const { return mClampRotRange; }
float GetElevation() const { return mElevation; }
float GetInterpolateTime() const { return mInterpolateTime; }
float GetClampVelTime() const { return mClampVelTime; }
float GetControlInterpDur() const { return mControlInterpDur; }
bool Flagx20() const { return (mOverrideFlags & 0x20) != 0; }
bool Flagx400() const { return (mOverrideFlags & 0x400) != 0; }
bool Flagx800() const { return (mOverrideFlags & 0x800) != 0; }
private:
uint mOverrideFlags;
CBallCamera::EBallCameraBehaviour mBehaviour;
float mMinDist;
float mMaxDist;
float mBackwardsDist;
CVector3f mLookAtOffset;
CVector3f mChaseLookAtOffset;
CVector3f mBallToCam;
float mFov;
float mAttitudeRange;
float mAzimuthRange;
float mAnglePerSecond;
float mClampVelRange;
float mClampRotRange;
float mElevation;
float mInterpolateTime;
float mClampVelTime;
float mControlInterpDur;
};
#endif // _CCAMERAOVERRIDEINFO

View File

@ -26,7 +26,7 @@ public:
// UpdateTransform__18CFirstPersonCameraFR13CStateManagerf // UpdateTransform__18CFirstPersonCameraFR13CStateManagerf
// GetGunFollowTransform__18CFirstPersonCameraCFv // GetGunFollowTransform__18CFirstPersonCameraCFv
// SetLockCamera__18CFirstPersonCameraFb // SetLockCamera__18CFirstPersonCameraFb
void SkipCinematic(); void CancelCinematicOffset();
private: private:
float x188_orbitCameraSpeed; float x188_orbitCameraSpeed;

View File

@ -36,7 +36,7 @@ public:
float GetFov() const { return x15c_currentFov; } float GetFov() const { return x15c_currentFov; }
void SetFov(float fov) { x15c_currentFov = fov; } void SetFov(float fov) { x15c_currentFov = fov; }
float GetNearClipDistance() const { return x160_znear; } float GetNearClipDistance() const { return x160_znear; }
void SetFovInterpolation(float start, float fov, float time, float delayTime); void InterpolateFOV(float start, float fov, float time, float delayTime);
void UpdatePerspective(float dt); void UpdatePerspective(float dt);
int GetControllerNumber() const { return x16c_controllerIdx; } int GetControllerNumber() const { return x16c_controllerIdx; }
bool DisablesInput() const { return x170_25_disablesInput; } bool DisablesInput() const { return x170_25_disablesInput; }

View File

@ -215,6 +215,7 @@ public:
void DoSfxEffects(CSfxHandle sfx); void DoSfxEffects(CSfxHandle sfx);
void UnFreeze(CStateManager& mgr); void UnFreeze(CStateManager& mgr);
void UpdateCinematicState(CStateManager& mgr); void UpdateCinematicState(CStateManager& mgr);
bool IsMorphBallTransitioning() 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(); }

View File

@ -3,7 +3,7 @@
#include "MetroidPrime/CActor.hpp" #include "MetroidPrime/CActor.hpp"
#include "MetroidPrime/Cameras/CBallCamera.hpp" #include "MetroidPrime/Cameras/CBallCamera.hpp"
#include "MetroidPrime/Cameras/CCameraHint.hpp" #include "MetroidPrime/Cameras/CCameraOverrideInfo.hpp"
#include "MetroidPrime/TGameTypes.hpp" #include "MetroidPrime/TGameTypes.hpp"
#include "Kyoto/Math/CTransform4f.hpp" #include "Kyoto/Math/CTransform4f.hpp"
@ -17,26 +17,40 @@ public:
CScriptCameraHint(TUniqueId uid, const rstl::string& name, const CEntityInfo& info, CScriptCameraHint(TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
const CTransform4f& xf, bool active, int priority, const CTransform4f& xf, bool active, int priority,
CBallCamera::EBallCameraBehaviour behavior, int overrideFlags, float minDist, CBallCamera::EBallCameraBehaviour behavior, int overrideFlags, float minDist,
float maxDist, float backwardsDist, const CCameraSpring&, const CCameraSpring&, float maxDist, float backwardsDist, const CVector3f& lookAtOffset,
float, const CVector3f&, const CVector3f&, float); const CVector3f& chaseLookAtOffset, const CVector3f& ballToCam, float fov,
float attitudeRange, float azimuthRange, float anglePerSecond,
float clampVelRange, float clampRotRange, float elevation,
float interpolateTime, float clampVelTime, float controlInterpDur);
// CEntity // CEntity
~CScriptCameraHint() override; ~CScriptCameraHint() override;
void Accept(IVisitor& visitor) override; void Accept(IVisitor& visitor) override;
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override; void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
// GetOverrideFlags__17CScriptCameraHintCFv TUniqueId GetSenderId() const;
// GetBehaviourType__17CScriptCameraHintCFv void ClearSenders();
int GetPriority() const { return xe8_priority; } void AddSender(TUniqueId uid);
void RemoveSender(TUniqueId uid, CStateManager& mgr);
void CheckLegacyConnections(CStateManager& mgr);
const CCameraOverrideInfo& GetInfo() const { return mOverrideInfo; } // Not real?
uint GetOverrideFlags() const { return mOverrideInfo.mOverrideFlags; }
CBallCamera::EBallCameraBehaviour GetBehaviourType() const { return mOverrideInfo.mBehaviour; }
int GetPriority() const { return mPriority; }
TUniqueId GetDelegatedCameraId() const { return mDelegatedCameraId; }
// OverrideCameraInfo__17CScriptCameraHintFP11CBallCamera // OverrideCameraInfo__17CScriptCameraHintFP11CBallCamera
uint GetSenderCount() const { return mSenders.size(); }
bool GetInactive() const { return mInactive; }
private: private:
int xe8_priority; int mPriority;
CCameraHint xec_hint; CCameraOverrideInfo mOverrideInfo;
rstl::reserved_vector< TUniqueId, 8 > x150_helpers; rstl::reserved_vector< TUniqueId, 8 > mSenders;
TUniqueId x164_delegatedCamera; TUniqueId mDelegatedCameraId;
bool x166_inactive; bool mInactive;
CTransform4f x168_origXf; CTransform4f mOrigXf;
}; };
CHECK_SIZEOF(CScriptCameraHint, 0x198) CHECK_SIZEOF(CScriptCameraHint, 0x198)

View File

@ -181,8 +181,7 @@ find_by_key(const T& container,
template < typename T > template < typename T >
typename T::const_iterator inline find_by_key( typename T::const_iterator inline find_by_key(
const T& container, const typename select1st< typename T::value_type >::value_type& key) { const T& container, const typename select1st< typename T::value_type >::value_type& key) {
return binary_find(container.begin(), container.end(), key, return binary_find(container.begin(), container.end(), key, default_pair_sorter_finder< T >());
default_pair_sorter_finder<T>());
} }
template < typename T > template < typename T >
@ -192,8 +191,7 @@ find_by_key_nc(T& container, const typename select1st< typename T::value_type >:
template < typename T > template < typename T >
typename T::iterator inline find_by_key_nc( typename T::iterator inline find_by_key_nc(
T& container, const typename select1st< typename T::value_type >::value_type& key) { T& container, const typename select1st< typename T::value_type >::value_type& key) {
return binary_find(container.begin(), container.end(), key, return binary_find(container.begin(), container.end(), key, default_pair_sorter_finder< T >());
default_pair_sorter_finder<T>());
} }
} // namespace rstl } // namespace rstl

View File

@ -19,6 +19,7 @@ public:
// typedef const_pointer_iterator< T, reserved_vector< T, N >, void > const_iterator; // typedef const_pointer_iterator< T, reserved_vector< T, N >, void > const_iterator;
typedef T* iterator; typedef T* iterator;
typedef const T* const_iterator; typedef const T* const_iterator;
typedef T value_type;
inline iterator begin() { return iterator(data()); } inline iterator begin() { return iterator(data()); }
inline const_iterator begin() const { return const_iterator(data()); } inline const_iterator begin() const { return const_iterator(data()); }
@ -71,16 +72,15 @@ public:
inline const T& back() const { return data()[x0_count - 1]; } inline const T& back() const { return data()[x0_count - 1]; }
inline T& operator[](int idx) { return data()[idx]; } inline T& operator[](int idx) { return data()[idx]; }
inline const T& operator[](int idx) const { return data()[idx]; } inline const T& operator[](int idx) const { return data()[idx]; }
void erase(iterator it) { iterator erase(iterator it) {
if (it < begin()) { if (it >= begin() && it < end()) {
return;
}
if (it < end()) {
for (iterator j = it; j < end() - 1; ++j) { for (iterator j = it; j < end() - 1; ++j) {
*j = *(j + 1); *j = *(j + 1);
} }
--x0_count; --x0_count;
return it;
} }
return end();
} }
void resize(int count, const T& item) { void resize(int count, const T& item) {

View File

@ -169,7 +169,7 @@ void CBallCamera::TeleportCamera(const CVector3f& pos, CStateManager& mgr) {
} }
} }
void CBallCamera::ResetPosition(CStateManager& mgr) { void CBallCamera::TeleportLookAtStuff(CStateManager& mgr) {
CVector3f pos = mgr.GetPlayer()->GetBallPosition(); CVector3f pos = mgr.GetPlayer()->GetBallPosition();
x1d8_lookPos = pos; x1d8_lookPos = pos;
x1d8_lookPos.SetZ(x1d8_lookPos.GetZ() + x1b4_lookAtOffset.GetZ()); x1d8_lookPos.SetZ(x1d8_lookPos.GetZ() + x1b4_lookAtOffset.GetZ());
@ -205,7 +205,7 @@ void CBallCamera::ResetToTweaks(CStateManager& mgr) {
SetElevation(gpTweakBall->GetBallCameraElevation()); SetElevation(gpTweakBall->GetBallCameraElevation());
x1ac_attitudeRange = M_PIF / 2.f; x1ac_attitudeRange = M_PIF / 2.f;
x1b0_azimuthRange = M_PIF / 2.f; x1b0_azimuthRange = M_PIF / 2.f;
SetFovInterpolation(GetFov(), CCameraManager::DefaultThirdPersonFov(), 1.f, 0.f); InterpolateFOV(GetFov(), CCameraManager::GetDefaultThirdPersonVerticalFOV(), 1.f, 0.f);
x1a8_targetAnglePerSecond = gpTweakBall->GetBallCameraAnglePerSecond(); x1a8_targetAnglePerSecond = gpTweakBall->GetBallCameraAnglePerSecond();
x18d_29_noElevationInterp = false; x18d_29_noElevationInterp = false;
x18d_30_directElevation = false; x18d_30_directElevation = false;
@ -245,7 +245,7 @@ void CBallCamera::Reset(const CTransform4f& xf, CStateManager& mgr) {
FindDesiredPosition(GetDistance(), GetElevation(), xf.GetForward(), mgr, false); FindDesiredPosition(GetDistance(), GetElevation(), xf.GetForward(), mgr, false);
if (const CPlayer* player = TCastToConstPtr< CPlayer >(mgr.GetObjectById(GetWatchedObject()))) { if (const CPlayer* player = TCastToConstPtr< CPlayer >(mgr.GetObjectById(GetWatchedObject()))) {
ResetPosition(mgr); TeleportLookAtStuff(mgr);
x310_idealLookVec = x1b4_lookAtOffset; x310_idealLookVec = x1b4_lookAtOffset;
x31c_predictedLookPos = GetLookAtPosition(); x31c_predictedLookPos = GetLookAtPosition();
CVector3f dist = GetLookAtPosition() - desiredPos; CVector3f dist = GetLookAtPosition() - desiredPos;

View File

@ -1,29 +0,0 @@
#include "MetroidPrime/Cameras/CCameraHint.hpp"
#include "Kyoto/Alloc/CMemory.hpp"
CCameraHint::CCameraHint(uint overrideFlags, CBallCamera::EBallCameraBehaviour behaviour,
float minDist, float maxDist, float backwardsDist,
const CVector3f& lookAtOffset, const CVector3f& chaseLookAtOffset,
const CVector3f& ballToCam, float fov, float attitudeRange,
float azimuthRange, float anglePerSecond, float clampVelRange,
float clampRotRange, float elevation, float interpolateTime,
float clampVelTime, float controlInterpDur)
: mOverrideFlags(overrideFlags)
, mBehaviour(behaviour)
, mMinDist(minDist)
, mMaxDist(maxDist)
, mBackwardsDist(backwardsDist)
, mLookAtOffset(lookAtOffset)
, mChaseLookAtOffset(chaseLookAtOffset)
, mBallToCam(ballToCam)
, mFov(fov)
, mAttitudeRange(attitudeRange)
, mAnglePerSecond(anglePerSecond)
, mClampVelRange(clampVelRange)
, mClampRotRange(clampRotRange)
, mElevation(elevation)
, mInterpolateTime(interpolateTime)
, mClampVelTime(clampVelTime)
, mControlInterpDur(controlInterpDur) {}
CCameraHint::~CCameraHint() {}

View File

@ -1,18 +1,18 @@
#include "MetroidPrime/Cameras/CCameraManager.hpp" #include "MetroidPrime/Cameras/CCameraManager.hpp"
#include "MetroidPrime/CExplosion.hpp"
#include "MetroidPrime/CFluidPlaneCPU.hpp"
#include "MetroidPrime/CRumbleManager.hpp"
#include "MetroidPrime/Cameras/CBallCamera.hpp" #include "MetroidPrime/Cameras/CBallCamera.hpp"
#include "MetroidPrime/ScriptObjects/CScriptCameraHint.hpp"
#include "MetroidPrime/Cameras/CCinematicCamera.hpp" #include "MetroidPrime/Cameras/CCinematicCamera.hpp"
#include "MetroidPrime/Cameras/CFirstPersonCamera.hpp" #include "MetroidPrime/Cameras/CFirstPersonCamera.hpp"
#include "MetroidPrime/Cameras/CGameCamera.hpp" #include "MetroidPrime/Cameras/CGameCamera.hpp"
#include "MetroidPrime/Cameras/CInterpolationCamera.hpp" #include "MetroidPrime/Cameras/CInterpolationCamera.hpp"
#include "MetroidPrime/CExplosion.hpp"
#include "MetroidPrime/CFluidPlaneCPU.hpp"
#include "MetroidPrime/CRumbleManager.hpp"
#include "MetroidPrime/Player/CPlayer.hpp" #include "MetroidPrime/Player/CPlayer.hpp"
#include "MetroidPrime/Player/CPlayerGun.hpp" #include "MetroidPrime/Player/CPlayerGun.hpp"
#include "MetroidPrime/ScriptObjects/CScriptWater.hpp"
#include "MetroidPrime/SFX/Misc.h" #include "MetroidPrime/SFX/Misc.h"
#include "MetroidPrime/ScriptObjects/CScriptCameraHint.hpp"
#include "MetroidPrime/ScriptObjects/CScriptWater.hpp"
#include "MetroidPrime/Tweaks/CTweakGame.hpp" #include "MetroidPrime/Tweaks/CTweakGame.hpp"
#include "MetroidPrime/Tweaks/CTweakPlayer.hpp" #include "MetroidPrime/Tweaks/CTweakPlayer.hpp"
#include "MetroidPrime/Weapons/CWeapon.hpp" #include "MetroidPrime/Weapons/CWeapon.hpp"
@ -64,31 +64,33 @@ CCameraManager::CCameraManager(TUniqueId curCamera)
sFirstPersonFOV = gpTweakGame->GetFirstPersonFOV(); sFirstPersonFOV = gpTweakGame->GetFirstPersonFOV();
} }
float CCameraManager::DefaultThirdPersonFov() { return sThirdPersonFOV; } float CCameraManager::GetDefaultThirdPersonVerticalFOV() { return sThirdPersonFOV; }
float CCameraManager::DefaultFirstPersonFov() { return sFirstPersonFOV; } float CCameraManager::GetDefaultFirstPersonVerticalFOV() { return sFirstPersonFOV; }
float CCameraManager::DefaultNearPlane() { return sNearPlane; } float CCameraManager::GetDefaultFirstPersonNearClipDistance() { return sNearPlane; }
float CCameraManager::DefaultFarPlane() { return sFarPlane; } float CCameraManager::GetDefaultFirstPersonFarClipDistance() { return sFarPlane; }
float CCameraManager::DefaultAspect() { return sAspectRatio; } float CCameraManager::GetDefaultAspectRatio() { return sAspectRatio; }
void CCameraManager::CreateStandardCameras(CStateManager& mgr) { void CCameraManager::CreateCameras(CStateManager& mgr) {
TUniqueId plId = mgr.GetPlayer()->GetUniqueId(); TUniqueId plId = mgr.GetPlayer()->GetUniqueId();
CTransform4f xf = CTransform4f::Identity(); CTransform4f xf = CTransform4f::Identity();
xf.SetTranslation(mgr.GetPlayer()->GetEyePosition()); xf.SetTranslation(mgr.GetPlayer()->GetEyePosition());
TUniqueId fpId = mgr.AllocateUniqueId(); TUniqueId fpId = mgr.AllocateUniqueId();
x7c_fpCamera = rs_new CFirstPersonCamera(fpId, xf, plId, gpTweakPlayer->GetOrbitCameraSpeed(), x7c_fpCamera = rs_new CFirstPersonCamera(
DefaultFirstPersonFov(), DefaultNearPlane(), fpId, xf, plId, gpTweakPlayer->GetOrbitCameraSpeed(), GetDefaultFirstPersonVerticalFOV(),
DefaultFarPlane(), DefaultAspect()); GetDefaultFirstPersonNearClipDistance(), GetDefaultFirstPersonFarClipDistance(),
GetDefaultAspectRatio());
mgr.AddObject(x7c_fpCamera); mgr.AddObject(x7c_fpCamera);
mgr.Player()->SetCameraState(CPlayer::kCS_FirstPerson, mgr); mgr.Player()->SetCameraState(CPlayer::kCS_FirstPerson, mgr);
SetCurrentCameraId(fpId); SetCurrentCameraId(fpId);
TUniqueId ballId = mgr.AllocateUniqueId(); TUniqueId ballId = mgr.AllocateUniqueId();
x80_ballCamera = rs_new CBallCamera(ballId, plId, xf, DefaultThirdPersonFov(), DefaultNearPlane(), x80_ballCamera = rs_new CBallCamera(
DefaultFarPlane(), DefaultAspect()); ballId, plId, xf, GetDefaultThirdPersonVerticalFOV(), GetDefaultFirstPersonNearClipDistance(),
GetDefaultFirstPersonFarClipDistance(), GetDefaultAspectRatio());
mgr.AddObject(x80_ballCamera); mgr.AddObject(x80_ballCamera);
TUniqueId interpId = mgr.AllocateUniqueId(); TUniqueId interpId = mgr.AllocateUniqueId();
@ -96,7 +98,7 @@ void CCameraManager::CreateStandardCameras(CStateManager& mgr) {
mgr.AddObject(x88_interpCamera); mgr.AddObject(x88_interpCamera);
} }
void CCameraManager::ThinkCameras(float dt, CStateManager& mgr) { void CCameraManager::UpdateCameras(float dt, CStateManager& mgr) {
CObjectList& objList = mgr.ObjectListById(kOL_GameCamera); CObjectList& objList = mgr.ObjectListById(kOL_GameCamera);
int idx = objList.GetFirstObjectIndex(); int idx = objList.GetFirstObjectIndex();
@ -114,7 +116,7 @@ void CCameraManager::ThinkCameras(float dt, CStateManager& mgr) {
} }
if (const CGameCamera* cam = if (const CGameCamera* cam =
TCastToConstPtr< CGameCamera >(mgr.GetObjectById(GetLastCineCameraId()))) { TCastToConstPtr< CGameCamera >(mgr.GetObjectById(GetCurrentCinematicCameraId()))) {
x3bc_curFov = cam->GetFov(); x3bc_curFov = cam->GetFov();
} }
} }
@ -136,7 +138,7 @@ void CCameraManager::ResetCameras(CStateManager& mgr) {
} }
} }
void CCameraManager::RenderCameras(const CStateManager& mgr) { void CCameraManager::Render(const CStateManager& mgr) {
const CObjectList& objList = mgr.GetObjectListById(kOL_GameCamera); const CObjectList& objList = mgr.GetObjectListById(kOL_GameCamera);
int idx = objList.GetFirstObjectIndex(); int idx = objList.GetFirstObjectIndex();
@ -154,7 +156,7 @@ TUniqueId CCameraManager::GetCurrentCameraId() const {
return x4_cineCameras.back(); return x4_cineCameras.back();
} }
TUniqueId CCameraManager::GetLastCineCameraId() const { TUniqueId CCameraManager::GetCurrentCinematicCameraId() const {
if (x4_cineCameras.empty()) { if (x4_cineCameras.empty()) {
return kInvalidUniqueId; return kInvalidUniqueId;
} }
@ -170,20 +172,20 @@ const CGameCamera& CCameraManager::GetCurrentCamera(const CStateManager& mgr) co
return *static_cast< const CGameCamera* >(mgr.GetObjectById(GetCurrentCameraId())); return *static_cast< const CGameCamera* >(mgr.GetObjectById(GetCurrentCameraId()));
} }
const CGameCamera& CCameraManager::GetLastCineCamera(CStateManager& mgr) const { const CGameCamera& CCameraManager::GetCurrentCinematicCamera(CStateManager& mgr) const {
return *static_cast< const CGameCamera* >(mgr.GetObjectById(GetLastCineCameraId())); return *static_cast< const CGameCamera* >(mgr.GetObjectById(GetCurrentCinematicCameraId()));
} }
void CCameraManager::SetCurrentCameraId(TUniqueId uid) { x0_curCameraId = uid; } void CCameraManager::SetCurrentCameraId(TUniqueId uid) { x0_curCameraId = uid; }
void CCameraManager::UpdateSfxListener(CStateManager& mgr) { void CCameraManager::UpdateAudioListener(CStateManager& mgr) {
CTransform4f xf = GetCurrentCameraTransform(mgr); CTransform4f xf = GetCurrentCameraTransform(mgr);
CSfxManager::UpdateListener(xf.GetTranslation(), CVector3f::Zero(), xf.GetColumn(kDY), CSfxManager::UpdateListener(xf.GetTranslation(), CVector3f::Zero(), xf.GetColumn(kDY),
xf.GetColumn(kDZ), CAudioSys::kMaxVolume); xf.GetColumn(kDZ), CAudioSys::kMaxVolume);
} }
void CCameraManager::UpdateRumble(float dt, CStateManager& mgr) { void CCameraManager::UpdateScreenShake(float dt, CStateManager& mgr) {
x30_shakeOffset = CVector3f::Zero(); x30_shakeOffset = CVector3f::Zero();
rstl::list< CCameraShakeData >::iterator it = x14_shakers.begin(); rstl::list< CCameraShakeData >::iterator it = x14_shakers.begin();
@ -213,7 +215,7 @@ void CCameraManager::UpdateRumble(float dt, CStateManager& mgr) {
} }
} }
void CCameraManager::UpdateFog(float dt, CStateManager& mgr) { void CCameraManager::UpdateFilters(float dt, CStateManager& mgr) {
if (x98_fogDensitySpeed != 0.f) { if (x98_fogDensitySpeed != 0.f) {
x94_fogDensityFactor += dt * x98_fogDensitySpeed; x94_fogDensityFactor += dt * x98_fogDensitySpeed;
if ((x98_fogDensitySpeed > 0.f) ? x94_fogDensityFactor > x9c_fogDensityFactorTarget if ((x98_fogDensitySpeed > 0.f) ? x94_fogDensityFactor > x9c_fogDensityFactorTarget
@ -229,7 +231,7 @@ void CCameraManager::UpdateFog(float dt, CStateManager& mgr) {
const CGameCamera& camera = GetCurrentCamera(mgr); const CGameCamera& camera = GetCurrentCamera(mgr);
if (water) { if (water) {
const float near = camera.GetNearClipDistance(); const float near = camera.GetNearClipDistance();
const float far = CalculateFogDensity(mgr, water); const float far = GetWaterFarDistance(mgr, water);
const CColor& color = water->GetUnderwaterFogColor(); const CColor& color = water->GetUnderwaterFogColor();
x3c_fog.SetFogExplicit(kRFM_PerspExp, color, CVector2f(near, far)); x3c_fog.SetFogExplicit(kRFM_PerspExp, color, CVector2f(near, far));
if (mgr.GetPlayerState()->GetActiveVisor(mgr) == CPlayerState::kPV_Thermal) { if (mgr.GetPlayerState()->GetActiveVisor(mgr) == CPlayerState::kPV_Thermal) {
@ -240,7 +242,7 @@ void CCameraManager::UpdateFog(float dt, CStateManager& mgr) {
} }
} }
xa0_26_inWater = true; xa0_26_inWater = true;
} else if (xa0_26_inWater) { } else if (IsInsideFluid()) {
mgr.CameraManager()->x3c_fog.DisableFog(); mgr.CameraManager()->x3c_fog.DisableFog();
pass.DisableFilter(0.f); pass.DisableFilter(0.f);
xa0_26_inWater = false; xa0_26_inWater = false;
@ -249,19 +251,19 @@ void CCameraManager::UpdateFog(float dt, CStateManager& mgr) {
x3c_fog.Update(dt); x3c_fog.Update(dt);
} }
float CCameraManager::CalculateFogDensity(CStateManager& mgr, const CScriptWater* water) { float CCameraManager::GetWaterFarDistance(CStateManager& mgr, const CScriptWater* water) {
float density = 1.f - water->GetFluidPlane().GetAlpha(); float density = 1.f - water->GetFluidPlane().GetAlpha();
if (mgr.GetPlayerState()->HasPowerUp(CPlayerState::kIT_GravitySuit)) { if (mgr.GetPlayerState()->HasPowerUp(CPlayerState::kIT_GravitySuit)) {
density = density * gpTweakGame->GetGravityWaterFogDistanceRange() + density = gpTweakGame->x5c_gravityWaterFogDistanceRange * density +
gpTweakGame->GetGravityWaterFogDistanceBase(); gpTweakGame->x58_gravityWaterFogDistanceBase;
} else { } else {
density = density =
density * gpTweakGame->GetWaterFogDistanceRange() + gpTweakGame->GetWaterFogDistanceBase(); gpTweakGame->x54_waterFogDistanceRange * density + gpTweakGame->x50_waterFogDistanceBase;
} }
return density * x94_fogDensityFactor; return density * x94_fogDensityFactor;
} }
void CCameraManager::SetFogDensity(float fogDensityTarget, float fogDensitySpeed) { void CCameraManager::SetWaterFogScale(float fogDensityTarget, float fogDensitySpeed) {
x9c_fogDensityFactorTarget = fogDensityTarget; x9c_fogDensityFactorTarget = fogDensityTarget;
if (x9c_fogDensityFactorTarget < x94_fogDensityFactor) { if (x9c_fogDensityFactorTarget < x94_fogDensityFactor) {
x98_fogDensitySpeed = -fogDensitySpeed; x98_fogDensitySpeed = -fogDensitySpeed;
@ -272,10 +274,10 @@ void CCameraManager::SetFogDensity(float fogDensityTarget, float fogDensitySpeed
void CCameraManager::Update(float dt, CStateManager& mgr) { void CCameraManager::Update(float dt, CStateManager& mgr) {
UpdateCameraHints(dt, mgr); UpdateCameraHints(dt, mgr);
ThinkCameras(dt, mgr); UpdateCameras(dt, mgr);
UpdateSfxListener(mgr); UpdateAudioListener(mgr);
UpdateRumble(dt, mgr); UpdateScreenShake(dt, mgr);
UpdateFog(dt, mgr); UpdateFilters(dt, mgr);
} }
void CCameraManager::SetInsideFluid(bool isInside, TUniqueId fluidId) { void CCameraManager::SetInsideFluid(bool isInside, TUniqueId fluidId) {
@ -318,7 +320,7 @@ void CCameraManager::AddCinemaCamera(TUniqueId uid, CStateManager& mgr) {
delayTime = 0.f; delayTime = 0.f;
time = duration; time = duration;
} }
cam->SetFovInterpolation(cam->GetFov(), sFirstPersonFOV, time, delayTime); cam->InterpolateFOV(cam->GetFov(), sFirstPersonFOV, time, delayTime);
} }
} }
} }
@ -356,7 +358,7 @@ void CCameraManager::EnterCinematic(CStateManager& mgr) {
} }
} }
void CCameraManager::SkipCinematic(CStateManager& mgr) { void CCameraManager::StopCinematics(CStateManager& mgr) {
CCinematicCamera* ent = static_cast< CCinematicCamera* >(mgr.ObjectById(GetCurrentCameraId())); CCinematicCamera* ent = static_cast< CCinematicCamera* >(mgr.ObjectById(GetCurrentCameraId()));
while (ent) { while (ent) {
ent->SetActive(false); ent->SetActive(false);
@ -364,10 +366,9 @@ void CCameraManager::SkipCinematic(CStateManager& mgr) {
ent = TCastToPtr< CCinematicCamera >(&CurrentCamera(mgr)); ent = TCastToPtr< CCinematicCamera >(&CurrentCamera(mgr));
} }
mgr.Player()->UpdateCinematicState(mgr); mgr.Player()->UpdateCinematicState(mgr);
x7c_fpCamera->SkipCinematic(); x7c_fpCamera->CancelCinematicOffset();
} }
// TODO: nonmatching
int CCameraManager::AddCameraShaker(const CCameraShakeData& data, bool sfx) { int CCameraManager::AddCameraShaker(const CCameraShakeData& data, bool sfx) {
CCameraShakeData shakeData = data; CCameraShakeData shakeData = data;
shakeData.SetId(++x2c_lastShakeId); shakeData.SetId(++x2c_lastShakeId);
@ -388,11 +389,9 @@ int CCameraManager::AddCameraShaker(const CCameraShakeData& data, bool sfx) {
CSfxHandle sfxHandle; CSfxHandle sfxHandle;
if (data.GetFlags() & 0x1) { if (data.GetFlags() & 0x1) {
CVector3f pos = data.GetSfxPos(); CVector3f pos = data.GetSfxPos();
sfxHandle = sfxHandle = CSfxManager::AddEmitter(SFXamb_x_rumble_lp_00, pos, CVector3f::Zero(), vol);
CSfxManager::AddEmitter(SFXamb_x_rumble_lp_00, pos, CVector3f::Zero(), vol, false, false);
} else { } else {
sfxHandle = sfxHandle = CSfxManager::SfxStart(SFXamb_x_rumble_lp_00, vol, 64);
CSfxManager::SfxStart(SFXamb_x_rumble_lp_00, vol, 64, false, CSfxManager::kMedPriority);
} }
CSfxManager::SetDuration(sfxHandle, duration); CSfxManager::SetDuration(sfxHandle, duration);
} }
@ -439,9 +438,8 @@ void CCameraManager::SetPlayerCamera(CStateManager& mgr, TUniqueId uid) {
} }
} }
void CCameraManager::InterpolateToBallCamera(const CTransform4f& xf, TUniqueId camId, void CCameraManager::SetupInterpolation(const CTransform4f& xf, TUniqueId camId, CVector3f lookPos,
const CVector3f& lookPos, float maxTime, float maxTime, float positionSpeed, float rotationSpeed,
float positionSpeed, float rotationSpeed,
bool sinusoidal, CStateManager& mgr) { bool sinusoidal, CStateManager& mgr) {
if (IsInFirstPersonCamera()) { if (IsInFirstPersonCamera()) {
return; return;
@ -453,17 +451,18 @@ void CCameraManager::InterpolateToBallCamera(const CTransform4f& xf, TUniqueId c
} }
} }
void CCameraManager::SkipBallCameraCinematic(CStateManager& mgr) { void CCameraManager::CinematicCut(CStateManager& mgr) {
if (IsInCinematicCamera()) { if (IsInCinematicCamera()) {
x80_ballCamera->TeleportCamera(GetLastCineCamera(mgr).GetTransform(), mgr); x80_ballCamera->TeleportCamera(GetCurrentCinematicCamera(mgr).GetTransform(), mgr);
x80_ballCamera->SetFovInterpolation(GetLastCineCamera(mgr).GetFov(), x80_ballCamera->GetFov(), x80_ballCamera->InterpolateFOV(GetCurrentCinematicCamera(mgr).GetFov(),
1.f, 0.f); x80_ballCamera->GetFov(), 1.f, 0.f);
SkipCinematic(mgr); StopCinematics(mgr);
SetCurrentCameraId(x80_ballCamera->GetUniqueId()); SetCurrentCameraId(x80_ballCamera->GetUniqueId());
} }
} }
void CCameraManager::ApplyCameraHint(const CScriptCameraHint& hint, CStateManager& mgr) { // TODO: nonmatching
void CCameraManager::UseCameraHint(const CScriptCameraHint& hint, CStateManager& mgr) {
if (x80_ballCamera->GetState() == CBallCamera::kBCS_ToBall) { if (x80_ballCamera->GetState() == CBallCamera::kBCS_ToBall) {
x80_ballCamera->SetState(CBallCamera::kBCS_Default); x80_ballCamera->SetState(CBallCamera::kBCS_Default);
mgr.Player()->SetCameraState(CPlayer::kCS_Ball, mgr); mgr.Player()->SetCameraState(CPlayer::kCS_Ball, mgr);
@ -474,5 +473,298 @@ void CCameraManager::ApplyCameraHint(const CScriptCameraHint& hint, CStateManage
xa8_hintPriority = hint.GetPriority(); xa8_hintPriority = hint.GetPriority();
CTransform4f camXf = GetCurrentCameraTransform(mgr); CTransform4f camXf = GetCurrentCameraTransform(mgr);
x80_ballCamera->ApplyCameraHint(mgr); x80_ballCamera->OverrideCameraInfo(mgr);
if (hint.GetOverrideFlags() & 0x20) {
x80_ballCamera->TeleportLookAtStuff(mgr);
}
switch (hint.GetBehaviourType()) {
case CBallCamera::kBCB_PathCameraDesiredPos:
case CBallCamera::kBCB_PathCamera:
SetPathCamera(hint.GetDelegatedCameraId(), mgr);
break;
case CBallCamera::kBCB_SpindleCamera:
SetSpindleCamera(hint.GetDelegatedCameraId(), mgr);
break;
default:
SetPathCamera(kInvalidUniqueId, mgr);
SetSpindleCamera(kInvalidUniqueId, mgr);
break;
}
if (hint.GetOverrideFlags() & 0x2000) {
CinematicCut(mgr);
}
x80_ballCamera->UpdateLookAtPosition(0.f, mgr);
if ((hint.GetOverrideFlags() & 0x20) == 0 &&
(hint.GetBehaviourType() != CBallCamera::kBCB_Default ||
(oldHint && (!oldHint || oldHint->GetBehaviourType() != CBallCamera::kBCB_Default)))) {
SetupInterpolation(camXf, x80_ballCamera->GetUniqueId(), x80_ballCamera->GetLookAtPosition(),
hint.GetInfo().GetInterpolateTime(), hint.GetInfo().GetClampVelRange(),
hint.GetInfo().GetClampRotRange(), hint.GetInfo().Flagx400(), mgr);
}
}
void CCameraManager::NoCameraHintsLeft(CStateManager& mgr) {
CScriptCameraHint* hint = TCastToPtr< CScriptCameraHint >(mgr.ObjectById(xa6_camHintId));
CTransform4f ballCamXf = x80_ballCamera->GetTransform();
xa6_camHintId = kInvalidUniqueId;
xa8_hintPriority = 1000;
if (!hint) {
return;
}
CVector3f camToPlayerFlat = mgr.GetPlayer()->GetTranslation() - ballCamXf.GetTranslation();
camToPlayerFlat.SetZ(0.f);
if (camToPlayerFlat.CanBeNormalized()) {
camToPlayerFlat.Normalize();
} else {
camToPlayerFlat = mgr.GetPlayer()->GetMovementDirection();
}
x80_ballCamera->ResetToTweaks(mgr);
x80_ballCamera->UpdateLookAtPosition(0.f, mgr);
if (!mgr.GetPlayer()->IsMorphBallTransitioning() &&
hint->GetInfo().GetBehaviourType() != CBallCamera::kBCB_Default) {
if ((hint->GetInfo().GetOverrideFlags() & 0x1000) != 0) {
x80_ballCamera->SetClampVelRange(hint->GetInfo().GetClampVelRange());
x80_ballCamera->SetClampVelTimer(hint->GetInfo().GetClampVelTime());
} else {
x80_ballCamera->TeleportCamera(x80_ballCamera->FindDesiredTransform(camToPlayerFlat, mgr),
mgr);
SetupInterpolation(ballCamXf, x80_ballCamera->GetUniqueId(),
x80_ballCamera->GetLookAtPosition(), hint->GetInfo().GetClampVelTime(),
hint->GetInfo().GetClampVelRange(), hint->GetInfo().GetClampRotRange(),
hint->GetInfo().Flagx800(), mgr);
}
}
}
// TODO: nonmatching
void CCameraManager::UpdateCameraHints(float dt, CStateManager& mgr) {
bool invalidHintRemoved = false;
for (rstl::reserved_vector< rstl::pair< int, TUniqueId >, 64 >::iterator it =
xac_cameraHints.begin();
it != xac_cameraHints.end();) {
if (!TCastToConstPtr< CScriptCameraHint >(mgr.ObjectById(it->second))) {
it = xac_cameraHints.erase(it);
invalidHintRemoved = true;
} else {
++it;
}
}
bool inactiveHintRemoved = false;
if (!x2b0_inactiveCameraHints.empty()) {
for (rstl::reserved_vector< TUniqueId, 64 >::iterator id = x2b0_inactiveCameraHints.begin();
id != x2b0_inactiveCameraHints.end(); ++id) {
TUniqueId uid = *id;
if (const CScriptCameraHint* hint =
TCastToConstPtr< CScriptCameraHint >(mgr.GetObjectById(uid))) {
if (hint->GetSenderCount() == 0 || hint->GetInactive()) {
for (rstl::reserved_vector< rstl::pair< int, TUniqueId >, 64 >::iterator it =
xac_cameraHints.begin();
it != xac_cameraHints.end(); ++it) {
if (it->second == uid) {
xac_cameraHints.erase(it);
if (uid == xa6_camHintId) {
inactiveHintRemoved = true;
SetPathCamera(kInvalidUniqueId, mgr);
SetSpindleCamera(kInvalidUniqueId, mgr);
}
break;
}
}
}
}
}
x2b0_inactiveCameraHints.clear();
}
bool activeHintAdded = false;
if (!x334_activeCameraHints.empty()) {
for (rstl::reserved_vector< TUniqueId, 64 >::iterator id = x334_activeCameraHints.begin();
id != x334_activeCameraHints.end(); ++id) {
TUniqueId uid = *id;
if (const CScriptCameraHint* hint =
TCastToConstPtr< CScriptCameraHint >(mgr.GetObjectById(uid))) {
bool activeHintPresent = false;
for (rstl::reserved_vector< rstl::pair< int, TUniqueId >, 64 >::iterator it =
xac_cameraHints.begin();
it != xac_cameraHints.end(); ++it) {
if (it->second == uid) {
activeHintPresent = true;
break;
}
}
if (!activeHintPresent) {
xac_cameraHints.push_back(rstl::pair< int, TUniqueId >(hint->GetPriority(), uid));
activeHintAdded = true;
}
}
}
x334_activeCameraHints.clear();
}
if (inactiveHintRemoved || activeHintAdded || invalidHintRemoved) {
rstl::less< int > less;
rstl::pair_sorter_finder< rstl::pair< int, TUniqueId >, rstl::less< int > > sorter(less);
rstl::sort(xac_cameraHints.begin(), xac_cameraHints.end(), sorter);
CTransform4f ballCamXf = x80_ballCamera->GetTransform();
if ((inactiveHintRemoved || invalidHintRemoved) && xac_cameraHints.empty()) {
NoCameraHintsLeft(mgr);
return;
}
CScriptCameraHint* bestHint = nullptr;
bool foundHint = false;
for (rstl::reserved_vector< rstl::pair< int, TUniqueId >, 64 >::iterator it =
xac_cameraHints.begin();
it != xac_cameraHints.end(); ++it) {
bestHint = TCastToPtr< CScriptCameraHint >(mgr.ObjectById(it->second));
if (bestHint) {
foundHint = true;
break;
}
}
if (!foundHint) {
NoCameraHintsLeft(mgr);
}
bool changeHint = false;
if (bestHint && foundHint) {
if ((bestHint->GetInfo().GetOverrideFlags() & 0x80) != 0 && xac_cameraHints.size() > 1) {
CVector3f ballPos = mgr.GetPlayer()->GetBallPosition();
if ((bestHint->GetInfo().GetOverrideFlags() & 0x100) != 0) {
CVector3f camToBall = ballPos - ballCamXf.GetTranslation();
if (camToBall.CanBeNormalized()) {
camToBall.Normalize();
} else {
camToBall = ballCamXf.GetColumn(kDY);
}
for (rstl::reserved_vector< rstl::pair< int, TUniqueId >, 64 >::iterator it =
xac_cameraHints.begin() + 1;
it != xac_cameraHints.end(); ++it) {
if (CScriptCameraHint* hint =
TCastToPtr< CScriptCameraHint >(mgr.ObjectById(it->second))) {
if ((hint->GetInfo().GetOverrideFlags() & 0x80) != 0 &&
hint->GetPriority() == bestHint->GetPriority() &&
hint->GetCurrentAreaId() == bestHint->GetCurrentAreaId()) {
CVector3f hintToBall = ballPos - bestHint->GetTranslation();
if (hintToBall.CanBeNormalized()) {
hintToBall.Normalize();
} else {
hintToBall = bestHint->GetTransform().GetColumn(kDY);
}
float camHintDot = CMath::Limit(CVector3f::Dot(camToBall, hintToBall), 1.f);
CVector3f thisHintToBall = ballPos - hint->GetTranslation();
if (thisHintToBall.CanBeNormalized()) {
thisHintToBall.Normalize();
} else {
thisHintToBall = hint->GetTransform().GetColumn(kDY);
}
float camThisHintDot = CMath::Limit(CVector3f::Dot(camToBall, thisHintToBall), 1.f);
if (camThisHintDot > camHintDot) {
bestHint = hint;
}
} else {
break;
}
} else {
break;
}
}
} else if (const CActor* act =
TCastToConstPtr< CActor >(mgr.GetObjectById(bestHint->GetSenderId()))) {
CVector3f actorPos = act->GetTranslation();
CVector3f ballPos = mgr.GetPlayer()->GetBallPosition();
CVector3f ballToHelper = actorPos - ballPos;
if (ballToHelper.CanBeNormalized()) {
ballToHelper.Normalize();
} else {
ballToHelper = bestHint->GetTransform().GetColumn(kDY);
}
for (rstl::reserved_vector< rstl::pair< int, TUniqueId >, 64 >::iterator it =
xac_cameraHints.begin() + 1;
it != xac_cameraHints.end(); ++it) {
if (CScriptCameraHint* hint =
TCastToPtr< CScriptCameraHint >(mgr.ObjectById(it->second))) {
if ((hint->GetInfo().GetOverrideFlags() & 0x80) != 0 &&
hint->GetPriority() == bestHint->GetPriority() &&
hint->GetCurrentAreaId() == bestHint->GetCurrentAreaId()) {
CVector3f hintToHelper = actorPos - bestHint->GetTranslation();
if (hintToHelper.CanBeNormalized()) {
hintToHelper.Normalize();
} else {
hintToHelper = bestHint->GetTransform().GetColumn(kDY);
}
float ballHintDot = CMath::Limit(CVector3f::Dot(hintToHelper, ballToHelper), 1.f);
CVector3f thisBallToHelper = actorPos - ballPos;
if (thisBallToHelper.CanBeNormalized()) {
thisBallToHelper.Normalize();
} else {
thisBallToHelper = hint->GetTransform().GetColumn(kDY);
}
CVector3f thisHintToHelper = actorPos - hint->GetTranslation();
if (thisHintToHelper.CanBeNormalized()) {
thisHintToHelper.Normalize();
} else {
thisHintToHelper = hint->GetTransform().GetColumn(kDY);
}
float thisBallHintDot =
CMath::Limit(CVector3f::Dot(thisHintToHelper, thisBallToHelper), 1.f);
if (thisBallHintDot > ballHintDot) {
bestHint = hint;
}
} else {
break;
}
} else {
break;
}
}
}
if (bestHint->GetUniqueId() != xa6_camHintId) {
changeHint = true;
}
} else if (xa6_camHintId != bestHint->GetUniqueId()) {
if (bestHint->GetInfo().GetBehaviourType() == CBallCamera::kBCB_HintInitializePosition) {
if ((bestHint->GetInfo().GetOverrideFlags() & 0x20) != 0) {
x80_ballCamera->TeleportCamera(
CTransform4f::LookAt(bestHint->GetTranslation(),
x80_ballCamera->GetLookAtPosition()),
mgr);
}
DeleteCameraHint(bestHint->GetUniqueId(), mgr);
if ((bestHint->GetInfo().GetOverrideFlags() & 0x2000) != 0) {
CinematicCut(mgr);
}
changeHint = false;
} else {
changeHint = true;
}
}
if (changeHint) {
UseCameraHint(*bestHint, mgr);
}
}
}
} }

View File

@ -7,9 +7,10 @@ CPathCamera::CPathCamera(TUniqueId uid, const rstl::string& name, const CEntityI
const CTransform4f& xf, bool active, float lengthExtent, float filterMag, const CTransform4f& xf, bool active, float lengthExtent, float filterMag,
float filterProportion, float minEaseDist, float maxEaseDist, u32 flags, float filterProportion, float minEaseDist, float maxEaseDist, u32 flags,
EInitialSplinePosition initPos) EInitialSplinePosition initPos)
: CGameCamera(uid, active, name, info, xf, CCameraManager::DefaultThirdPersonFov(), : CGameCamera(uid, active, name, info, xf, CCameraManager::GetDefaultThirdPersonVerticalFOV(),
CCameraManager::DefaultNearPlane(), CCameraManager::DefaultFarPlane(), CCameraManager::GetDefaultFirstPersonNearClipDistance(),
CCameraManager::DefaultAspect(), kInvalidUniqueId, false, 0) CCameraManager::GetDefaultFirstPersonFarClipDistance(),
CCameraManager::GetDefaultAspectRatio(), kInvalidUniqueId, false, 0)
, x188_spline(flags & 1) , x188_spline(flags & 1)
, x1d4_pos(0.f) , x1d4_pos(0.f)
, x1d8_time(0.f) , x1d8_time(0.f)
@ -88,16 +89,13 @@ void CPathCamera::ProcessInput(const CFinalInput&, CStateManager& mgr) {
// Empty // Empty
} }
void CPathCamera::Accept(IVisitor& visitor) override { visitor.Visit(*this); } void CPathCamera::Accept(IVisitor& visitor) { visitor.Visit(*this); }
void CPathCamera::Render(const CStateManager& mgr) const { void CPathCamera::Render(const CStateManager& mgr) const {}
}
void CPathCamera::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) { void CPathCamera::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) {
CGameCamera::AcceptScriptMsg(msg, uid, mgr); CGameCamera::AcceptScriptMsg(msg, uid, mgr);
if (!GetActive() || msg != kSM_InitializedInArea) { if (!GetActive() || msg != kSM_InitializedInArea) {
return; return;
} }

View File

@ -0,0 +1,187 @@
#include "MetroidPrime/ScriptObjects/CScriptCameraHint.hpp"
#include "MetroidPrime/CActorParameters.hpp"
#include "MetroidPrime/Cameras/CCameraManager.hpp"
#include "Kyoto/Alloc/CMemory.hpp"
#include "rstl/algorithm.hpp"
CCameraOverrideInfo::CCameraOverrideInfo(
uint overrideFlags, CBallCamera::EBallCameraBehaviour behaviour, float minDist, float maxDist,
float backwardsDist, const CVector3f& lookAtOffset, const CVector3f& chaseLookAtOffset,
const CVector3f& ballToCam, float fov, float attitudeRange, float azimuthRange,
float anglePerSecond, float clampVelRange, float clampRotRange, float elevation,
float interpolateTime, float clampVelTime, float controlInterpDur)
: mOverrideFlags(overrideFlags)
, mBehaviour(behaviour)
, mMinDist(minDist)
, mMaxDist(maxDist)
, mBackwardsDist(backwardsDist)
, mLookAtOffset(lookAtOffset)
, mChaseLookAtOffset(chaseLookAtOffset)
, mBallToCam(ballToCam)
, mFov(fov)
, mAttitudeRange(attitudeRange)
, mAzimuthRange(azimuthRange)
, mAnglePerSecond(anglePerSecond)
, mClampVelRange(clampVelRange)
, mClampRotRange(clampRotRange)
, mElevation(elevation)
, mInterpolateTime(interpolateTime)
, mClampVelTime(clampVelTime)
, mControlInterpDur(controlInterpDur) {}
CScriptCameraHint::CScriptCameraHint(
TUniqueId uid, const rstl::string& name, const CEntityInfo& info, const CTransform4f& xf,
bool active, int priority, CBallCamera::EBallCameraBehaviour behavior, int overrideFlags,
float minDist, float maxDist, float backwardsDist, const CVector3f& lookAtOffset,
const CVector3f& chaseLookAtOffset, const CVector3f& ballToCam, float fov, float attitudeRange,
float azimuthRange, float anglePerSecond, float clampVelRange, float clampRotRange,
float elevation, float interpolateTime, float clampVelTime, float controlInterpDur)
: CActor(uid, active, name, info, xf, CModelData::CModelDataNull(), CMaterialList(kMT_NoStepLogic),
CActorParameters::None(), kInvalidUniqueId)
, mPriority(priority)
, mOverrideInfo(overrideFlags, behavior, minDist, maxDist, backwardsDist, lookAtOffset,
chaseLookAtOffset, ballToCam, fov, attitudeRange, azimuthRange, anglePerSecond,
clampVelRange, clampRotRange, elevation, interpolateTime, clampVelTime,
controlInterpDur)
, mSenders()
, mDelegatedCameraId(kInvalidUniqueId)
, mInactive(false)
, mOrigXf(xf) {}
CScriptCameraHint::~CScriptCameraHint() {}
TUniqueId CScriptCameraHint::GetSenderId() const {
if (mSenders.size() > 0) {
return mSenders.front();
}
return kInvalidUniqueId;
}
void CScriptCameraHint::ClearSenders() { mSenders.clear(); }
void CScriptCameraHint::AddSender(TUniqueId uid) {
rstl::reserved_vector< TUniqueId, 8 >::iterator it =
rstl::find(mSenders.begin(), mSenders.end(), uid);
if (it == mSenders.end()) {
mSenders.push_back(uid);
}
}
void CScriptCameraHint::RemoveSender(TUniqueId uid, CStateManager& mgr) {
if (mSenders.empty()) {
return;
}
rstl::reserved_vector< TUniqueId, 8 >::iterator it =
rstl::find(mSenders.begin(), mSenders.end(), uid);
if (it == mSenders.end()) {
mSenders.erase(mSenders.begin());
} else {
mSenders.erase(it);
}
}
void CScriptCameraHint::CheckLegacyConnections(CStateManager& mgr) {
TUniqueId uid = GetUniqueId();
CObjectList& objList = mgr.ObjectListById(kOL_All);
mDelegatedCameraId = kInvalidUniqueId;
for (int idx = objList.GetFirstObjectIndex(); idx != -1; idx = objList.GetNextObjectIndex(idx)) {
CEntity* entity = TCastToPtr< CEntity >(objList[idx]);
if (!entity) {
continue;
}
rstl::vector< SConnection >& connections = entity->ConnectionList();
rstl::vector< SConnection >::iterator outer = connections.begin();
for (; outer != connections.end(); ++outer) {
if (mgr.GetIdForScript(outer->x8_objId) != uid ||
(outer->x4_msg != kSM_Increment && outer->x4_msg != kSM_Decrement)) {
continue;
}
rstl::vector< SConnection >::iterator inner = connections.begin();
while (inner != connections.end()) {
if (inner->x4_msg == kSM_Increment || inner->x4_msg == kSM_Decrement) {
TUniqueId senderId = mgr.GetIdForScript(inner->x8_objId);
CPathCamera* pathCamera = TCastToPtr< CPathCamera >(mgr.ObjectById(senderId));
CScriptSpindleCamera* spindleCamera =
TCastToPtr< CScriptSpindleCamera >(mgr.ObjectById(senderId));
if (pathCamera || spindleCamera) {
connections.erase(inner);
if (mDelegatedCameraId != senderId) {
mDelegatedCameraId = senderId;
}
break;
} else {
inner = inner + 1; // ?
}
} else {
inner = inner + 1; // ?
}
}
break;
}
}
}
void CScriptCameraHint::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid,
CStateManager& mgr) {
switch (msg) {
case kSM_Deleted:
case kSM_Deactivate:
CCameraManager* cameraManager = mgr.CameraManager();
cameraManager->ReallyRemoveCameraHint(GetUniqueId(), mgr);
break;
case kSM_InitializedInArea:
CheckLegacyConnections(mgr);
break;
default:
break;
}
if (GetActive()) {
CCameraManager* cameraManager = mgr.CameraManager();
switch (msg) {
case kSM_Increment:
AddSender(uid);
cameraManager->AddCameraHint(GetUniqueId(), mgr);
mInactive = false;
break;
case kSM_Decrement:
RemoveSender(uid, mgr);
cameraManager->DeleteCameraHint(GetUniqueId(), mgr);
break;
default:
break;
}
}
CCameraManager* cameraManager = mgr.CameraManager();
switch (msg) {
case kSM_Follow:
if (!GetActive()) {
SetActive(true);
if (CActor* act = TCastToPtr< CActor >(mgr.ObjectById(uid))) {
CVector3f followerToThisFlat = mOrigXf.GetTranslation() - act->GetTranslation();
followerToThisFlat.SetZ(0.f);
if (followerToThisFlat.CanBeNormalized()) {
followerToThisFlat.Normalize();
} else {
followerToThisFlat = act->GetTransform().GetColumn(kDY);
}
CVector3f pos = act->GetTranslation();
pos.SetZ(mOrigXf.GetTranslation().GetZ());
SetTransform(CTransform4f::LookAt(pos, pos + followerToThisFlat));
}
}
AddSender(uid);
cameraManager->AddCameraHint(GetUniqueId(), mgr);
break;
default:
break;
}
CActor::AcceptScriptMsg(msg, uid, mgr);
}
void CScriptCameraHint::Accept(IVisitor& visitor) { visitor.Visit(*this); }

View File

@ -580,9 +580,9 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId
case kSF_FogFader: { case kSF_FogFader: {
float speed = x100_float2; float speed = x100_float2;
if (msg == kSM_Increment) { if (msg == kSM_Increment) {
mgr.CameraManager()->SetFogDensity(xfc_float1, speed); mgr.CameraManager()->SetWaterFogScale(xfc_float1, speed);
} else if (msg == kSM_Decrement) { } else if (msg == kSM_Decrement) {
mgr.CameraManager()->SetFogDensity(1.f, speed); mgr.CameraManager()->SetWaterFogScale(1.f, speed);
} }
break; break;
} }