All CActor implemented (non-matching)

Former-commit-id: b421b27929b43dd8e5f8959c9ed022f5c2d2699c
This commit is contained in:
Luke Street 2023-10-19 18:51:57 -04:00
parent 3bfdfcf1de
commit f49069d4e6
20 changed files with 522 additions and 46 deletions

View File

@ -1256,8 +1256,8 @@ __dt__6CIOWinFv = .text:0x80052BA4; // type:function size:0x68 scope:global
__ct__6CIOWinFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052C0C; // type:function size:0x40 scope:global __ct__6CIOWinFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052C0C; // type:function size:0x40 scope:global
UpdateSfxEmitters__6CActorFv = .text:0x80052C4C; // type:function size:0x88 scope:global UpdateSfxEmitters__6CActorFv = .text:0x80052C4C; // type:function size:0x88 scope:global
CanDrawStatic__6CActorCFv = .text:0x80052CD4; // type:function size:0x98 scope:global CanDrawStatic__6CActorCFv = .text:0x80052CD4; // type:function size:0x98 scope:global
CreateShadow__6CActorFb = .text:0x80052D6C; // type:function size:0x70 scope:global SetDrawShadow__6CActorFb = .text:0x80052D6C; // type:function size:0x70 scope:global
CreateShadow__6CActorFv = .text:0x80052DDC; // type:function size:0xB0 scope:global CreateShadowIfNeeded__6CActorFv = .text:0x80052DDC; // type:function size:0xB0 scope:global
SetTranslation__6CActorFRC9CVector3f = .text:0x80052E8C; // type:function size:0x44 scope:global SetTranslation__6CActorFRC9CVector3f = .text:0x80052E8C; // type:function size:0x44 scope:global
GetScaledLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052ED0; // type:function size:0x30 scope:global GetScaledLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052ED0; // type:function size:0x30 scope:global
GetLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052F00; // type:function size:0x30 scope:global GetLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052F00; // type:function size:0x30 scope:global
@ -1276,7 +1276,7 @@ AcceptScriptMsg__6CActorF20EScriptObjectMessage9TUniqueIdR13CStateManager = .tex
SetActive__6CActorFb = .text:0x8005384C; // type:function size:0x54 scope:global SetActive__6CActorFb = .text:0x8005384C; // type:function size:0x54 scope:global
SetMaterialFilter__6CActorFRC15CMaterialFilter = .text:0x800538A0; // type:function size:0x1C scope:global SetMaterialFilter__6CActorFRC15CMaterialFilter = .text:0x800538A0; // type:function size:0x1C scope:global
GetMaterialFilter__6CActorCFv = .text:0x800538BC; // type:function size:0x8 scope:global GetMaterialFilter__6CActorCFv = .text:0x800538BC; // type:function size:0x8 scope:global
fn_800538C4 = .text:0x800538C4; // type:function size:0x5C SetActorLights__6CActorFQ24rstl24auto_ptr<12CActorLights> = .text:0x800538C4; // type:function size:0x5C
SetCalculateLighting__6CActorFb = .text:0x80053920; // type:function size:0xC8 scope:global SetCalculateLighting__6CActorFb = .text:0x80053920; // type:function size:0xC8 scope:global
IsModelOpaque__6CActorCFRC13CStateManager = .text:0x800539E8; // type:function size:0xA8 scope:global IsModelOpaque__6CActorCFRC13CStateManager = .text:0x800539E8; // type:function size:0xA8 scope:global
GetScanObjectIndicatorPosition__6CActorCFRC13CStateManager = .text:0x80053A90; // type:function size:0x1E0 scope:global GetScanObjectIndicatorPosition__6CActorCFRC13CStateManager = .text:0x80053A90; // type:function size:0x1E0 scope:global
@ -5608,7 +5608,7 @@ SetModulationColorAllActiveEffects__17CParticleDatabaseFRC6CColor = .text:0x800B
SuspendAllActiveEffectsForParticleDB__17CParticleDatabaseFR13CStateManagerRQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7B94; // type:function size:0xA4 scope:global SuspendAllActiveEffectsForParticleDB__17CParticleDatabaseFR13CStateManagerRQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7B94; // type:function size:0xA4 scope:global
SuspendAllActiveEffects__17CParticleDatabaseFR13CStateManager = .text:0x800B7C38; // type:function size:0x58 scope:global SuspendAllActiveEffects__17CParticleDatabaseFR13CStateManager = .text:0x800B7C38; // type:function size:0x58 scope:global
DeleteAllLightsForParticleDB__17CParticleDatabaseFR13CStateManager = .text:0x800B7C90; // type:function size:0xA0 scope:global DeleteAllLightsForParticleDB__17CParticleDatabaseFR13CStateManager = .text:0x800B7C90; // type:function size:0xA0 scope:global
DeleteAllLights__17CParticleDatabaseCFR13CStateManager = .text:0x800B7D30; // type:function size:0x7C scope:global DeleteAllLights__17CParticleDatabaseFR13CStateManager = .text:0x800B7D30; // type:function size:0x7C scope:global
RenderParticleGenMapMasked__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator>ii = .text:0x800B7DAC; // type:function size:0xA4 scope:global RenderParticleGenMapMasked__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator>ii = .text:0x800B7DAC; // type:function size:0xA4 scope:global
RenderParticleGenMap__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7E50; // type:function size:0x7C scope:global RenderParticleGenMap__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7E50; // type:function size:0x7C scope:global
RenderSystemsToBeDrawnLastMasked__17CParticleDatabaseCFii = .text:0x800B7ECC; // type:function size:0x58 scope:global RenderSystemsToBeDrawnLastMasked__17CParticleDatabaseCFii = .text:0x800B7ECC; // type:function size:0x58 scope:global

View File

@ -1256,8 +1256,8 @@ __dt__6CIOWinFv = .text:0x80052C20; // type:function size:0x68 scope:global
__ct__6CIOWinFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052C88; // type:function size:0x40 scope:global __ct__6CIOWinFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052C88; // type:function size:0x40 scope:global
UpdateSfxEmitters__6CActorFv = .text:0x80052CC8; // type:function size:0x88 scope:global UpdateSfxEmitters__6CActorFv = .text:0x80052CC8; // type:function size:0x88 scope:global
CanDrawStatic__6CActorCFv = .text:0x80052D50; // type:function size:0x98 scope:global CanDrawStatic__6CActorCFv = .text:0x80052D50; // type:function size:0x98 scope:global
CreateShadow__6CActorFb = .text:0x80052DE8; // type:function size:0x70 scope:global SetDrawShadow__6CActorFb = .text:0x80052DE8; // type:function size:0x70 scope:global
CreateShadow__6CActorFv = .text:0x80052E58; // type:function size:0xB0 scope:global CreateShadowIfNeeded__6CActorFv = .text:0x80052E58; // type:function size:0xB0 scope:global
SetTranslation__6CActorFRC9CVector3f = .text:0x80052F08; // type:function size:0x44 scope:global SetTranslation__6CActorFRC9CVector3f = .text:0x80052F08; // type:function size:0x44 scope:global
GetScaledLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052F4C; // type:function size:0x30 scope:global GetScaledLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052F4C; // type:function size:0x30 scope:global
GetLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052F7C; // type:function size:0x30 scope:global GetLocatorTransform__6CActorCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator> = .text:0x80052F7C; // type:function size:0x30 scope:global
@ -1276,7 +1276,7 @@ AcceptScriptMsg__6CActorF20EScriptObjectMessage9TUniqueIdR13CStateManager = .tex
SetActive__6CActorFb = .text:0x800538C8; // type:function size:0x54 scope:global SetActive__6CActorFb = .text:0x800538C8; // type:function size:0x54 scope:global
SetMaterialFilter__6CActorFRC15CMaterialFilter = .text:0x8005391C; // type:function size:0x1C scope:global SetMaterialFilter__6CActorFRC15CMaterialFilter = .text:0x8005391C; // type:function size:0x1C scope:global
GetMaterialFilter__6CActorCFv = .text:0x80053938; // type:function size:0x8 scope:global GetMaterialFilter__6CActorCFv = .text:0x80053938; // type:function size:0x8 scope:global
fn_800538C4 = .text:0x80053940; // type:function size:0x5C scope:global SetActorLights__6CActorFQ24rstl24auto_ptr<12CActorLights> = .text:0x80053940; // type:function size:0x5C scope:global
SetCalculateLighting__6CActorFb = .text:0x8005399C; // type:function size:0xC8 scope:global SetCalculateLighting__6CActorFb = .text:0x8005399C; // type:function size:0xC8 scope:global
IsModelOpaque__6CActorCFRC13CStateManager = .text:0x80053A64; // type:function size:0xA8 scope:global IsModelOpaque__6CActorCFRC13CStateManager = .text:0x80053A64; // type:function size:0xA8 scope:global
GetScanObjectIndicatorPosition__6CActorCFRC13CStateManager = .text:0x80053B0C; // type:function size:0x1E0 scope:global GetScanObjectIndicatorPosition__6CActorCFRC13CStateManager = .text:0x80053B0C; // type:function size:0x1E0 scope:global
@ -5610,7 +5610,7 @@ SetModulationColorAllActiveEffects__17CParticleDatabaseFRC6CColor = .text:0x800B
SuspendAllActiveEffectsForParticleDB__17CParticleDatabaseFR13CStateManagerRQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7C10; // type:function size:0xA4 scope:global SuspendAllActiveEffectsForParticleDB__17CParticleDatabaseFR13CStateManagerRQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7C10; // type:function size:0xA4 scope:global
SuspendAllActiveEffects__17CParticleDatabaseFR13CStateManager = .text:0x800B7CB4; // type:function size:0x58 scope:global SuspendAllActiveEffects__17CParticleDatabaseFR13CStateManager = .text:0x800B7CB4; // type:function size:0x58 scope:global
DeleteAllLightsForParticleDB__17CParticleDatabaseFR13CStateManager = .text:0x800B7D0C; // type:function size:0xA0 scope:global DeleteAllLightsForParticleDB__17CParticleDatabaseFR13CStateManager = .text:0x800B7D0C; // type:function size:0xA0 scope:global
DeleteAllLights__17CParticleDatabaseCFR13CStateManager = .text:0x800B7DAC; // type:function size:0x7C scope:global DeleteAllLights__17CParticleDatabaseFR13CStateManager = .text:0x800B7DAC; // type:function size:0x7C scope:global
RenderParticleGenMapMasked__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator>ii = .text:0x800B7E28; // type:function size:0xA4 scope:global RenderParticleGenMapMasked__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator>ii = .text:0x800B7E28; // type:function size:0xA4 scope:global
RenderParticleGenMap__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7ECC; // type:function size:0x7C scope:global RenderParticleGenMap__17CParticleDatabaseFRCQ24rstl236map<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>,Q24rstl81less<Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>>,Q24rstl17rmemory_allocator> = .text:0x800B7ECC; // type:function size:0x7C scope:global
RenderSystemsToBeDrawnLastMasked__17CParticleDatabaseCFii = .text:0x800B7F48; // type:function size:0x58 scope:global RenderSystemsToBeDrawnLastMasked__17CParticleDatabaseCFii = .text:0x800B7F48; // type:function size:0x58 scope:global

View File

@ -82,13 +82,14 @@ 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 ushort id, const CVector3f& pos, const CVector3f& dir, static CSfxHandle AddEmitter(const ushort id, const CVector3f& pos, const CVector3f& dir,
const bool useAcoustics, const bool looped, const short prio = kMedPriority, const bool useAcoustics, const bool looped,
const int areaId = kAllAreas); const short prio = kMedPriority, const int areaId = kAllAreas);
static CSfxHandle AddEmitter(const ushort id, const CVector3f& pos, const CVector3f& dir, uchar vol, static CSfxHandle AddEmitter(const ushort id, const CVector3f& pos, const CVector3f& dir,
const bool useAcoustics, const bool looped, const short prio = kMedPriority, uchar vol, const bool useAcoustics, const bool looped,
const int areaId = kAllAreas); const short prio = kMedPriority, const int areaId = kAllAreas);
static CSfxHandle AddEmitter(CAudioSys::C3DEmitterParmData& parmData, bool useAcoustics, static CSfxHandle AddEmitter(CAudioSys::C3DEmitterParmData& parmData, bool useAcoustics,
short prio, bool looped, int areaId = kAllAreas); const short prio = kMedPriority, const bool looped = false,
int areaId = kAllAreas);
static void AddListener(ESfxChannels channel, const CVector3f& pos, const CVector3f& dir, static void AddListener(ESfxChannels channel, const CVector3f& pos, const CVector3f& dir,
const CVector3f& vec1, const CVector3f& vec2, float f1, float f2, const CVector3f& vec1, const CVector3f& vec2, float f1, float f2,

View File

@ -11,6 +11,7 @@ public:
kT_Opaque = 0, kT_Opaque = 0,
kT_One = 1, // ? kT_One = 1, // ?
kT_Two = 2, // ? kT_Two = 2, // ?
kT_Four = 4, // ?
kT_Blend = 5, kT_Blend = 5,
kT_Additive = 7, kT_Additive = 7,
}; };

View File

@ -34,10 +34,13 @@ class TCachedToken : public TToken< T > {
public: public:
TCachedToken() {} TCachedToken() {}
TCachedToken(const CToken& token) : TToken< T >(token), x8_item(nullptr) {} TCachedToken(const CToken& token) : TToken< T >(token), x8_item(nullptr) {}
// __ct__23TCachedToken<8CTexture>FRC23TCachedToken<8CTexture>
// __as__21TCachedToken<6CModel>FRC21TCachedToken<6CModel>
T* operator*() { return x8_item; } // T* operator*() { return x8_item; }
T* GetObject() const { return x8_item; }
bool IsLoaded() { bool TryCache() {
if (x8_item != nullptr) { if (x8_item != nullptr) {
return true; return true;
} }
@ -49,6 +52,11 @@ public:
} }
} }
// Lock__23TCachedToken<8CTexture>Fv
// GetObject__23TCachedToken<8CTexture>CFv
// TryCache__23TCachedToken<8CTexture>Fv
// GetToken__21TCachedToken<6CModel>CFv
void Unlock() { void Unlock() {
x8_item = nullptr; x8_item = nullptr;
TToken< T >::Unlock(); TToken< T >::Unlock();

View File

@ -6,9 +6,10 @@
#include "Collision/CMaterialFilter.hpp" #include "Collision/CMaterialFilter.hpp"
#include "Collision/CMaterialList.hpp" #include "Collision/CMaterialList.hpp"
#include "MetroidPrime/ActorCommon.hpp"
#include "MetroidPrime/CEntity.hpp" #include "MetroidPrime/CEntity.hpp"
#include "MetroidPrime/CModelData.hpp" #include "MetroidPrime/CModelData.hpp"
#include "MetroidPrime/ActorCommon.hpp"
#include "Kyoto/Audio/CSfxHandle.hpp" #include "Kyoto/Audio/CSfxHandle.hpp"
#include "Kyoto/Graphics/CColor.hpp" #include "Kyoto/Graphics/CColor.hpp"
@ -103,7 +104,7 @@ public:
void DrawTouchBounds() const; void DrawTouchBounds() const;
bool IsModelOpaque(const CStateManager& mgr) const; bool IsModelOpaque(const CStateManager& mgr) const;
void RenderInternal(const CStateManager& mgr) const; void RenderInternal(const CStateManager& mgr) const;
void CreateShadow(bool); void CreateShadowIfNeeded();
const CTransform4f& GetTransform() const { return x34_transform; } const CTransform4f& GetTransform() const { return x34_transform; }
void SetTransform(const CTransform4f& xf) { void SetTransform(const CTransform4f& xf) {
@ -119,6 +120,11 @@ public:
CTransform4f GetLocatorTransform(const rstl::string& segName) const; CTransform4f GetLocatorTransform(const rstl::string& segName) const;
CTransform4f GetScaledLocatorTransform(const rstl::string& segName) const; CTransform4f GetScaledLocatorTransform(const rstl::string& segName) const;
float GetYaw() const; float GetYaw() const;
float GetPitch() const;
void SetActorLights(rstl::auto_ptr< CActorLights > lights);
void SetInFluid(bool b, TUniqueId uid);
CScannableObjectInfo* GetScannableObjectInfo() const;
void MoveScannableObjectInfoToActor(CActor* actor, CStateManager& mgr);
/// ???? /// ????
bool NullModel() const { return !GetAnimationData() && !GetModelData()->HasNormalModel(); } bool NullModel() const { return !GetAnimationData() && !GetModelData()->HasNormalModel(); }
@ -168,10 +174,10 @@ public:
void SetTransformDirtySpare(bool b) { xe4_28_transformDirty = b; } void SetTransformDirtySpare(bool b) { xe4_28_transformDirty = b; }
void SetPreRenderHasMoved(bool b) { xe4_29_actorLightsDirty = b; } void SetPreRenderHasMoved(bool b) { xe4_29_actorLightsDirty = b; }
void SetPreRenderClipped(bool b) { xe4_30_outOfFrustum = b; } void SetPreRenderClipped(bool b) { xe4_30_outOfFrustum = b; }
void SetCalculateLighting(bool b) { xe4_31_calculateLighting = b; } void SetCalculateLighting(bool b);
void SetDrawShadow(bool b) { xe5_24_shadowEnabled = b; } void SetDrawShadow(bool b);
void SetShadowDirty(bool b) { xe5_25_shadowDirty = b; } void SetShadowDirty(bool b) { xe5_25_shadowDirty = b; }
void SetMuted(bool b) { xe5_26_muted = b; } void SetMuted(bool b);
void SetThermalFlags(EThermalFlags flags) { xe6_27_thermalVisorFlags = flags; } void SetThermalFlags(EThermalFlags flags) { xe6_27_thermalVisorFlags = flags; }
void SetRenderParticleDatabaseInside(bool b) { xe6_29_renderParticleDBInside = b; } void SetRenderParticleDatabaseInside(bool b) { xe6_29_renderParticleDBInside = b; }
void SetTargetable(bool b) { xe7_31_targetable = b; } void SetTargetable(bool b) { xe7_31_targetable = b; }
@ -192,10 +198,10 @@ public:
const CAABox& GetRenderBoundsCached() const { return x9c_renderBounds; } const CAABox& GetRenderBoundsCached() const { return x9c_renderBounds; }
void SetRenderBounds(const CAABox& bounds) { x9c_renderBounds = bounds; } void SetRenderBounds(const CAABox& bounds) { x9c_renderBounds = bounds; }
// 000c0ec8 00001c 801711a8 4 GetUseInSortedLists__6CActorCFv CActor.o bool GetUseInSortedLists() const;
void SetUseInSortedLists(bool use); void SetUseInSortedLists(bool use);
// 000c0ef8 00001c 801711d8 4 GetCallTouch__6CActorCFv CActor.o bool GetCallTouch() const;
void SetCallTouch(bool); void SetCallTouch(bool value);
// GetOrbitDistanceCheck__6CActorCFv // GetOrbitDistanceCheck__6CActorCFv
// GetCalculateLighting__6CActorCFv // GetCalculateLighting__6CActorCFv
// GetDrawShadow__6CActorCFv // GetDrawShadow__6CActorCFv
@ -203,6 +209,9 @@ public:
// GetRenderParticleDatabaseInside__6CActorCFv // GetRenderParticleDatabaseInside__6CActorCFv
// HasModelParticles__6CActorCFv // HasModelParticles__6CActorCFv
void SetVolume(uchar volume); void SetVolume(uchar volume);
void SetSoundEventPitchBend(int);
CSfxHandle GetSfxHandle() const;
bool CanDrawStatic() const;
private: private:
CTransform4f x34_transform; CTransform4f x34_transform;

View File

@ -118,7 +118,7 @@ public:
CCharAnimTime GetTimeOfUserEvent(EUserEventType type, const CCharAnimTime& time) const; CCharAnimTime GetTimeOfUserEvent(EUserEventType type, const CCharAnimTime& time) const;
// GetAdvancementDeltas__9CAnimDataCFRC13CCharAnimTimeRC13CCharAnimTime // GetAdvancementDeltas__9CAnimDataCFRC13CCharAnimTimeRC13CCharAnimTime
// Touch__9CAnimDataCFRC13CSkinnedModeli // Touch__9CAnimDataCFRC13CSkinnedModeli
// InitializeEffects__9CAnimDataFR13CStateManagerRC9CVector3f void InitializeEffects(CStateManager&, TAreaId, const CVector3f&);
// SetPhase__9CAnimDataFf -> SetPhase__11IAnimReaderFf // SetPhase__9CAnimDataFf -> SetPhase__11IAnimReaderFf
void SetPhase(float ph); void SetPhase(float ph);
void AddAdditiveAnimation(uint idx, float weight, bool active, bool fadeOut); void AddAdditiveAnimation(uint idx, float weight, bool active, bool fadeOut);

View File

@ -90,7 +90,9 @@ public:
CAABox GetBounds(const CTransform4f& xf) const; CAABox GetBounds(const CTransform4f& xf) const;
CAABox GetBounds() const; CAABox GetBounds() const;
bool IsLoaded(int shaderIdx) const; bool IsLoaded(int shaderIdx) const;
bool IsDefinitelyOpaque(EWhichModel which) const;
CTransform4f GetLocatorTransform(const rstl::string& name) const;
CTransform4f GetScaledLocatorTransform(const rstl::string& name) const; CTransform4f GetScaledLocatorTransform(const rstl::string& name) const;
bool HasAnimation() const { return !xc_animData.null(); } bool HasAnimation() const { return !xc_animData.null(); }

View File

@ -24,6 +24,7 @@ public:
void SetParticleEffectState(const rstl::string& name, bool active, CStateManager& mgr); void SetParticleEffectState(const rstl::string& name, bool active, CStateManager& mgr);
void RenderSystemsToBeDrawnFirst() const; void RenderSystemsToBeDrawnFirst() const;
void RenderSystemsToBeDrawnLast() const; void RenderSystemsToBeDrawnLast() const;
void DeleteAllLights(CStateManager& mgr);
bool AreAnySystemsDrawnWithModel() const { return xb4_25_anySystemsDrawnWithModel; } bool AreAnySystemsDrawnWithModel() const { return xb4_25_anySystemsDrawnWithModel; }

View File

@ -137,6 +137,7 @@ public:
TUniqueId AllocateUniqueId(); TUniqueId AllocateUniqueId();
const rstl::string& HashInstanceName(CInputStream& in); const rstl::string& HashInstanceName(CInputStream& in);
bool SwapOutAllPossibleMemory(); bool SwapOutAllPossibleMemory();
void UpdateObjectInLists(CEntity&);
void BuildNearList(TEntityList& nearList, const CVector3f& pos, const CVector3f& dir, float mag, void BuildNearList(TEntityList& nearList, const CVector3f& pos, const CVector3f& dir, float mag,
const CMaterialFilter&, const CActor*) const; const CMaterialFilter&, const CActor*) const;

View File

@ -11,20 +11,32 @@ class single_ptr {
public: public:
single_ptr() : x0_ptr(nullptr) {} single_ptr() : x0_ptr(nullptr) {}
single_ptr(T* ptr) : x0_ptr(ptr) {} single_ptr(T* ptr) : x0_ptr(ptr) {}
~single_ptr() { delete x0_ptr; }
T* get() const { return x0_ptr; }
// const T* get() const { return x0_ptr; }
T* operator->() { return x0_ptr; }
const T* operator->() const { return x0_ptr; }
single_ptr(const single_ptr& other) : x0_ptr(other.x0_ptr) { other.x0_ptr = nullptr; } single_ptr(const single_ptr& other) : x0_ptr(other.x0_ptr) { other.x0_ptr = nullptr; }
~single_ptr() { delete x0_ptr; }
single_ptr& operator=(single_ptr& other) {
if (&other == this) {
return *this;
}
delete x0_ptr;
x0_ptr = other.x0_ptr;
other.x0_ptr = nullptr;
return *this;
}
single_ptr& operator=(T* const ptr) { single_ptr& operator=(T* const ptr) {
delete x0_ptr; delete x0_ptr;
x0_ptr = ptr; x0_ptr = ptr;
return *this; return *this;
} }
bool null() const { return x0_ptr == nullptr; }
T* get() const { return x0_ptr; }
// const T* get() const { return x0_ptr; }
T* operator->() const { return x0_ptr; }
T& operator*() { return *x0_ptr; } T& operator*() { return *x0_ptr; }
const T& operator*() const { return *x0_ptr; } const T& operator*() const { return *x0_ptr; }
bool null() const { return x0_ptr == nullptr; }
T* release() { T* release() {
T* ptr = x0_ptr; T* ptr = x0_ptr;
x0_ptr = nullptr; x0_ptr = nullptr;

View File

@ -5,6 +5,7 @@
#include "MetroidPrime/CActorModelParticles.hpp" #include "MetroidPrime/CActorModelParticles.hpp"
#include "MetroidPrime/CActorParameters.hpp" #include "MetroidPrime/CActorParameters.hpp"
#include "MetroidPrime/CAnimData.hpp" #include "MetroidPrime/CAnimData.hpp"
#include "MetroidPrime/CDamageVulnerability.hpp"
#include "MetroidPrime/CGameArea.hpp" #include "MetroidPrime/CGameArea.hpp"
#include "MetroidPrime/CModelData.hpp" #include "MetroidPrime/CModelData.hpp"
#include "MetroidPrime/CSimpleShadow.hpp" #include "MetroidPrime/CSimpleShadow.hpp"
@ -96,8 +97,8 @@ CActor::CActor(TUniqueId uid, bool active, const rstl::string& name, const CEnti
} }
const CAssetId scanId = params.GetScannable().GetScannableObject0(); const CAssetId scanId = params.GetScannable().GetScannableObject0();
if (scanId != kInvalidAssetId) { if (scanId != kInvalidAssetId) {
x98_scanObjectInfo = x98_scanObjectInfo = rs_new TCachedToken< CScannableObjectInfo >(
rs_new TCachedToken< CScannableObjectInfo >(gpSimplePool->GetObj(SObjectTag('SCAN', scanId))); gpSimplePool->GetObj(SObjectTag('SCAN', scanId)));
x98_scanObjectInfo->Lock(); x98_scanObjectInfo->Lock();
} }
} }
@ -353,6 +354,7 @@ void CActor::Render(const CStateManager& mgr) const {
DrawTouchBounds(); DrawTouchBounds();
} }
// TODO nonmatching
void CActor::RenderInternal(const CStateManager& mgr) const { void CActor::RenderInternal(const CStateManager& mgr) const {
CModelData::EWhichModel which = CModelData::GetRenderingModel(mgr); CModelData::EWhichModel which = CModelData::GetRenderingModel(mgr);
if (which == CModelData::kWM_ThermalHot) { if (which == CModelData::kWM_ThermalHot) {
@ -386,4 +388,444 @@ void CActor::RenderInternal(const CStateManager& mgr) const {
} }
} }
GetModelData()->Render(which, x34_transform, x90_actorLights.get(), xb4_drawFlags); GetModelData()->Render(which, x34_transform, x90_actorLights.get(), xb4_drawFlags);
}; }
float CActor::GetYaw() const {
float sq = sqrt(x34_transform.Get11() * x34_transform.Get11() +
x34_transform.Get01() * x34_transform.Get01());
if (sq > 0.001f) {
double ret = -atan2(x34_transform.Get01(), x34_transform.Get11());
return ret;
}
return 0.f;
}
float CActor::GetPitch() const {
float sq = CMath::SqrtF(x34_transform.Get11() * x34_transform.Get11() +
x34_transform.Get01() * x34_transform.Get01());
double ret = -atan2(-x34_transform.Get21(), sq);
return ret;
}
CHealthInfo* CActor::HealthInfo(CStateManager& mgr) { return nullptr; }
const CDamageVulnerability* CActor::GetDamageVulnerability() const {
return &CDamageVulnerability::NormalVulnerabilty();
}
const CDamageVulnerability* CActor::GetDamageVulnerability(const CVector3f&, const CVector3f&,
const CDamageInfo&) const {
return GetDamageVulnerability();
}
rstl::optional_object< CAABox > CActor::GetTouchBounds() const {
return rstl::optional_object_null();
}
void CActor::Touch(CActor&, CStateManager&) {}
bool CActor::GetUseInSortedLists() const { return xe5_27_useInSortedLists; }
void CActor::SetUseInSortedLists(bool use) { xe5_27_useInSortedLists = use; }
bool CActor::GetCallTouch() const { return xe5_28_callTouch; }
void CActor::SetCallTouch(bool value) { xe5_28_callTouch = value; }
void CActor::AddMaterial(EMaterialTypes mat1, CStateManager& mgr) {
x68_material.Add(mat1);
mgr.UpdateObjectInLists(*this);
}
void CActor::AddMaterial(EMaterialTypes mat1, EMaterialTypes mat2, CStateManager& mgr) {
x68_material.Add(mat1);
x68_material.Add(mat2);
mgr.UpdateObjectInLists(*this);
}
void CActor::AddMaterial(EMaterialTypes mat1, EMaterialTypes mat2, EMaterialTypes mat3,
CStateManager& mgr) {
x68_material.Add(mat1);
x68_material.Add(mat2);
x68_material.Add(mat3);
mgr.UpdateObjectInLists(*this);
}
void CActor::AddMaterial(EMaterialTypes mat1, EMaterialTypes mat2, EMaterialTypes mat3,
EMaterialTypes mat4, CStateManager& mgr) {
x68_material.Add(mat1);
x68_material.Add(mat2);
x68_material.Add(mat3);
x68_material.Add(mat4);
mgr.UpdateObjectInLists(*this);
}
void CActor::AddMaterial(EMaterialTypes mat1, EMaterialTypes mat2, EMaterialTypes mat3,
EMaterialTypes mat4, EMaterialTypes mat5, CStateManager& mgr) {
x68_material.Add(mat1);
x68_material.Add(mat2);
x68_material.Add(mat3);
x68_material.Add(mat4);
x68_material.Add(mat5);
mgr.UpdateObjectInLists(*this);
}
void CActor::RemoveMaterial(EMaterialTypes mat1, CStateManager& mgr) {
x68_material.Remove(mat1);
mgr.UpdateObjectInLists(*this);
}
void CActor::RemoveMaterial(EMaterialTypes mat1, EMaterialTypes mat2, CStateManager& mgr) {
x68_material.Remove(mat1);
x68_material.Remove(mat2);
mgr.UpdateObjectInLists(*this);
}
void CActor::RemoveMaterial(EMaterialTypes mat1, EMaterialTypes mat2, EMaterialTypes mat3,
CStateManager& mgr) {
x68_material.Remove(mat1);
x68_material.Remove(mat2);
x68_material.Remove(mat3);
mgr.UpdateObjectInLists(*this);
}
void CActor::RemoveMaterial(EMaterialTypes mat1, EMaterialTypes mat2, EMaterialTypes mat3,
EMaterialTypes mat4, CStateManager& mgr) {
x68_material.Remove(mat1);
x68_material.Remove(mat2);
x68_material.Remove(mat3);
x68_material.Remove(mat4);
mgr.UpdateObjectInLists(*this);
}
EWeaponCollisionResponseTypes CActor::GetCollisionResponseType(const CVector3f&, const CVector3f&,
const CWeaponMode&, int) const {
return kWCR_OtherProjectile;
}
CVector3f CActor::GetOrbitPosition(const CStateManager&) const {
return x34_transform.GetTranslation();
}
CVector3f CActor::GetAimPosition(const CStateManager&, float) const {
return x34_transform.GetTranslation();
}
CVector3f CActor::GetHomingPosition(const CStateManager& mgr, float f) const {
return GetAimPosition(mgr, f);
}
// TODO nonmatching
CVector3f CActor::GetScanObjectIndicatorPosition(const CStateManager& mgr) const {
const CGameCamera& cam = mgr.GetCameraManager()->GetCurrentCamera(mgr);
CVector3f orbitPos = GetOrbitPosition(mgr);
float mag = (GetTranslation() - orbitPos).Magnitude();
CVector3f size = x9c_renderBounds.GetMaxPoint() - x9c_renderBounds.GetMinPoint();
float max = rstl::max_val(size.GetY(), rstl::max_val(size.GetX(), size.GetZ())) * 0.5f;
float clip = mag - cam.GetNearClipDistance() - 0.1f;
float v = rstl::max_val(clip, max);
CVector3f dist = (orbitPos - GetTranslation()).AsNormalized();
return orbitPos - v * dist;
}
bool CActor::IsModelOpaque(const CStateManager& mgr) const {
if (xe5_31_pointGeneratorParticles) {
return false;
} else if (!HasModelData()) {
return true;
} else if (static_cast< char >(xb4_drawFlags.GetTrans()) > 4) {
return false;
} else {
CModelData::EWhichModel which = CModelData::GetRenderingModel(mgr);
return x64_modelData->IsDefinitelyOpaque(which);
}
}
void CActor::SetCalculateLighting(bool b) {
if (x90_actorLights.null()) {
x90_actorLights = rs_new CActorLights(8, CVector3f::Zero(), 4, 4);
}
xe4_31_calculateLighting = b;
}
void CActor::SetActorLights(rstl::auto_ptr< CActorLights > lights) {
x90_actorLights = lights.release();
xe4_31_calculateLighting = true;
}
const CMaterialFilter& CActor::GetMaterialFilter() const { return x70_materialFilter; }
void CActor::SetMaterialFilter(const CMaterialFilter& filter) { x70_materialFilter = filter; }
void CActor::SetActive(const bool active) {
SetTransformDirty(true);
SetTransformDirtySpare(true);
SetPreRenderHasMoved(true);
xe7_29_drawEnabled = active; // no setter?
CEntity::SetActive(active);
}
void CActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) {
switch (msg) {
case kSM_Activate: {
if (!GetActive()) {
xbc_time = CGraphics::GetSecondsMod900();
}
break;
}
case kSM_Deactivate: {
RemoveEmitter();
break;
}
case kSM_Deleted: {
RemoveEmitter();
if (HasModelData() && AnimationData() != nullptr) {
AnimationData()->GetParticleDB().DeleteAllLights(mgr);
}
break;
}
case kSM_Registered: {
if (!x98_scanObjectInfo.null()) {
AddMaterial(kMT_Scannable, mgr);
} else {
RemoveMaterial(kMT_Scannable, mgr);
}
if (HasAnimation()) {
AnimationData()->InitializeEffects(mgr, GetAreaId(), GetModelData()->GetScale());
}
break;
}
case kSM_AddSplashInhabitant: {
SetInFluid(true, uid);
break;
}
case kSM_RemoveSplashInhabitant: {
SetInFluid(false, kInvalidUniqueId);
break;
}
case kSM_InitializedInArea: {
rstl::vector< SConnection >::const_iterator iter = GetConnectionList().begin();
for (; iter != GetConnectionList().end(); ++iter) {
if (iter->x0_state != kSS_Default) {
continue;
}
CActor* act = TCastToPtr< CActor >(mgr.ObjectById(mgr.GetIdForScript(iter->x8_objId)));
if (act != nullptr && xc6_nextDrawNode == kInvalidUniqueId) {
xc6_nextDrawNode = act->GetUniqueId();
}
}
break;
}
default:
break;
}
CEntity::AcceptScriptMsg(msg, uid, mgr);
}
CAABox CActor::GetSortingBounds(const CStateManager& mgr) const { return GetRenderBoundsCached(); }
void CActor::FluidFXThink(EFluidState, CScriptWater&, CStateManager&) {}
void CActor::OnScanStateChange(EScanState state, CStateManager& mgr) {
switch (state) {
case kSS_Start:
SendScriptMsgs(kSS_ScanStart, mgr, kSM_None);
break;
case kSS_Processing:
SendScriptMsgs(kSS_ScanProcessing, mgr, kSM_None);
break;
case kSS_Done:
SendScriptMsgs(kSS_ScanDone, mgr, kSM_None);
break;
}
}
CScannableObjectInfo* CActor::GetScannableObjectInfo() const {
if (x98_scanObjectInfo.null()) {
return nullptr;
}
if (x98_scanObjectInfo->TryCache()) {
return x98_scanObjectInfo->GetObject();
}
return nullptr;
}
void CActor::MoveScannableObjectInfoToActor(CActor* actor, CStateManager& mgr) {
if (actor == nullptr) {
return;
}
actor->x98_scanObjectInfo = x98_scanObjectInfo;
actor->AddMaterial(kMT_Scannable, mgr);
RemoveMaterial(kMT_Scannable, mgr);
}
void CActor::SetMuted(bool b) {
xe5_26_muted = b;
RemoveEmitter();
}
void CActor::SetVolume(uchar volume) {
if (CSfxHandle handle = x8c_loopingSfxHandle) {
CSfxManager::UpdateEmitter(handle, GetTranslation(), CVector3f::Zero(), volume);
}
xd4_maxVol = volume;
}
void CActor::SetSoundEventPitchBend(int v) {
xe6_30_enablePitchBend = true;
xc0_pitchBend = v;
if (x8c_loopingSfxHandle) {
CSfxManager::PitchBend(x8c_loopingSfxHandle, v);
}
}
CSfxHandle CActor::GetSfxHandle() const { return x8c_loopingSfxHandle; }
void CActor::SetInFluid(bool in, TUniqueId uid) {
if (in) {
xe6_24_fluidCounter += 1;
xc4_fluidId = uid;
} else if (xe6_24_fluidCounter != 0) {
xe6_24_fluidCounter--;
if (xe6_24_fluidCounter == 0) {
xc4_fluidId = kInvalidUniqueId;
}
}
}
// TODO nonmatching
void CActor::ProcessSoundEvent(int sfxId, float weight, int flags, float fallOff, float maxDist,
uchar minVol, uchar maxVol, const CVector3f& toListener,
const CVector3f& position, int aid, CStateManager& mgr,
bool translateId) {
if (toListener.MagSquared() >= maxDist * maxDist) {
return;
}
ushort id = translateId ? CSfxManager::TranslateSFXID(static_cast< ushort >(sfxId))
: static_cast< ushort >(sfxId);
uint musyxFlags = 0x1; // Continuous parameter update
if (flags & 0x8) {
musyxFlags |= 0x8; // Doppler FX
}
CAudioSys::C3DEmitterParmData parms(position, CVector3f::Zero(), maxDist, fallOff, musyxFlags, id,
maxVol, minVol, false, 0x7f);
bool useAcoustics = (flags & 0x80) == 0;
bool looping = (sfxId & 0x80000000) != 0;
bool nonEmitter = (sfxId & 0x40000000) != 0;
if (mgr.Random()->Float() > weight) {
return;
}
if (looping) {
ushort curId = x88_sfxId;
if (!x8c_loopingSfxHandle) {
CSfxHandle handle;
if (nonEmitter) {
handle = CSfxManager::SfxStart(id, 1.f, 0.f, true, CSfxManager::kMedPriority, true, aid);
} else {
handle = CSfxManager::AddEmitter(parms, useAcoustics, CSfxManager::kMedPriority, true, aid);
}
if (handle) {
x88_sfxId = id;
x8c_loopingSfxHandle = handle;
if (xe6_30_enablePitchBend) {
CSfxManager::PitchBend(handle, xc0_pitchBend);
}
}
} else if (curId == id) {
CSfxManager::UpdateEmitter(x8c_loopingSfxHandle, parms.x0_pos, parms.xc_dir, maxVol);
} else if (flags & 0x4) {
CSfxManager::RemoveEmitter(x8c_loopingSfxHandle);
CSfxHandle handle =
CSfxManager::AddEmitter(parms, useAcoustics, CSfxManager::kMedPriority, true, aid);
if (handle) {
x88_sfxId = id;
x8c_loopingSfxHandle = handle;
if (xe6_30_enablePitchBend) {
CSfxManager::PitchBend(handle, xc0_pitchBend);
}
}
}
} else {
CSfxHandle handle;
if (nonEmitter) {
handle =
CSfxManager::SfxStart(id, 1.f, 0.f, useAcoustics, CSfxManager::kMedPriority, false, aid);
} else {
handle = CSfxManager::AddEmitter(parms, useAcoustics, CSfxManager::kMedPriority, false, aid);
}
if ((sfxId & 0x20000000) != 0 /* continuous update */) {
xd8_nonLoopingSfxHandles[xe4_24_nextNonLoopingSfxHandle] = handle;
xe4_24_nextNonLoopingSfxHandle =
(xe4_24_nextNonLoopingSfxHandle + 1) % xd8_nonLoopingSfxHandles.size();
}
if (xe6_30_enablePitchBend) {
CSfxManager::PitchBend(handle, xc0_pitchBend);
}
}
}
CTransform4f CActor::GetLocatorTransform(const rstl::string& segName) const {
return GetModelData()->GetLocatorTransform(segName);
}
CTransform4f CActor::GetScaledLocatorTransform(const rstl::string& segName) const {
return GetModelData()->GetScaledLocatorTransform(segName);
}
void CActor::SetTranslation(const CVector3f& vec) {
x34_transform.SetTranslation(vec);
SetTransformDirty(true);
SetTransformDirtySpare(true);
SetPreRenderHasMoved(true);
}
void CActor::CreateShadowIfNeeded() {
if (!x94_simpleShadow.null()) {
return;
}
if (HasModelData()) {
x94_simpleShadow = rs_new CSimpleShadow(1.f, 1.f, 20.f, 0.05f);
}
}
void CActor::SetDrawShadow(bool enabled) {
if (enabled) {
CreateShadowIfNeeded();
if (!xe5_24_shadowEnabled && !x94_simpleShadow.null()) {
xe5_25_shadowDirty = true;
}
}
xe5_24_shadowEnabled = enabled;
}
// TODO nonmatching
bool CActor::CanDrawStatic() const {
if (!GetActive() || !HasModelData() || static_cast< char >(xb4_drawFlags.GetTrans()) > 4)
return false;
if (HasModelData() && GetAnimationData() == nullptr)
return true;
return false;
}
void CActor::UpdateSfxEmitters() {
uint count = xd8_nonLoopingSfxHandles.size();
for (uint i = 0; i < count; ++i) {
CSfxManager::UpdateEmitter(xd8_nonLoopingSfxHandles[i], GetTranslation(), CVector3f::Zero(),
xd4_maxVol);
}
}

View File

@ -88,7 +88,7 @@ CMapArea::CMapArea(CInputStream& in, uint size)
CMapArea::~CMapArea() { CMapArea::~CMapArea() {
lbl_805A8EB0 -= x34_size + sizeof(*this); lbl_805A8EB0 -= x34_size + sizeof(*this);
CFrameDelayedKiller::sub_8036cc1c(true, x44_buf.release()); CFrameDelayedKiller::fn_8036CC1C(true, x44_buf.release());
} }
void CMapArea::PostConstruct() { void CMapArea::PostConstruct() {

View File

@ -38,7 +38,7 @@ CPuffer::CPuffer(TUniqueId uid, const rstl::string& name, const CEntityInfo& inf
, x5c0_move(CVector3f::Zero()) , x5c0_move(CVector3f::Zero())
, x5cc_(kInvalidUniqueId) , x5cc_(kInvalidUniqueId)
, x5d0_enabledParticles(0) { , x5d0_enabledParticles(0) {
CreateShadow(false); SetDrawShadow(false);
GetKnockBackCtrl().SetImpulseDurationIdx(1); GetKnockBackCtrl().SetImpulseDurationIdx(1);
x574_cloudEffect.Lock(); x574_cloudEffect.Lock();
BodyCtrl()->SetRestrictedFlyerMoveSpeed(hoverSpeed); BodyCtrl()->SetRestrictedFlyerMoveSpeed(hoverSpeed);

View File

@ -39,7 +39,7 @@ CScriptActor::CScriptActor(TUniqueId uid, const rstl::string& name, const CEntit
, x2e3_24_isPlayerActor(false) { , x2e3_24_isPlayerActor(false) {
if (HasModelData()) { if (HasModelData()) {
if (castsShadow) { if (castsShadow) {
CreateShadow(true); SetDrawShadow(true);
} }
if (HasAnimation()) { if (HasAnimation()) {

View File

@ -154,7 +154,7 @@ void CScriptGenerator::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sende
mData->SetScale(rnd * mData->GetScale()); mData->SetScale(rnd * mData->GetScale());
} }
stateMgr.SendScriptMsg(genObj, GetUniqueId(), kSM_Activate); stateMgr.DeliverScriptMsg(genObj, GetUniqueId(), kSM_Activate);
} }
} }

View File

@ -354,7 +354,7 @@ void CScriptMazeNode::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, C
x13c_24_hasPuddle = true; x13c_24_hasPuddle = true;
} }
if (x13c_25_hasGate) { if (x13c_25_hasGate) {
#ifndef NON_MATCHING #if !NONMATCHING
// Unused // Unused
CTransform4f xf = GetTransform(); CTransform4f xf = GetTransform();
#endif #endif

View File

@ -147,7 +147,7 @@ void CScriptPlatform::AddRider(rstl::vector< SRiders >& riders, TUniqueId riderI
CVector3f rideePos = ridee->GetTranslation(); CVector3f rideePos = ridee->GetTranslation();
rider.x8_transform.SetTranslation( rider.x8_transform.SetTranslation(
ridee->GetTransform().TransposeRotate(act->GetTranslation() - rideePos)); ridee->GetTransform().TransposeRotate(act->GetTranslation() - rideePos));
mgr.SendScriptMsg(act, ridee->GetUniqueId(), kSM_AddPlatformRider); mgr.DeliverScriptMsg(act, ridee->GetUniqueId(), kSM_AddPlatformRider);
} }
riders.reserve(riders.size() + 1); riders.reserve(riders.size() + 1);
riders.push_back(rider); riders.push_back(rider);
@ -174,15 +174,14 @@ void CScriptPlatform::DecayRiders(rstl::vector< SRiders >& riders, float dt, CSt
it->x4_decayTimer -= dt; it->x4_decayTimer -= dt;
if (it->x4_decayTimer <= 0.f) { if (it->x4_decayTimer <= 0.f) {
mgr.SendScriptMsgAlways(it->x0_uid, kInvalidUniqueId, kSM_AddPlatformRider); mgr.SendScriptMsgAlways(it->x0_uid, kInvalidUniqueId, kSM_AddPlatformRider);
#ifdef NON_MATCHING #if NONMATCHING
it = riders.erase(it); it = riders.erase(it);
#else #else
// Oops, forgot to reassign the iterator // Oops, forgot to reassign the iterator
riders.erase(it); riders.erase(it);
#endif #endif
} else { } else {
// TODO: likely it++ (post-increment) but not matching it++;
it = it + 1;
} }
} }
} }
@ -213,7 +212,7 @@ void CScriptPlatform::MoveRiders(CStateManager& mgr, float dt, bool active,
act->MoveCollisionPrimitive(CVector3f::Zero()); act->MoveCollisionPrimitive(CVector3f::Zero());
if (collision) { if (collision) {
AddRider(collidedRiders, act->GetUniqueId(), act, mgr); AddRider(collidedRiders, act->GetUniqueId(), act, mgr);
#ifdef NON_MATCHING #if NONMATCHING
it = riders.erase(it); it = riders.erase(it);
#else #else
// Oops, forgot to reassign the iterator (again) // Oops, forgot to reassign the iterator (again)

View File

@ -74,7 +74,7 @@ void CPlasmaBeam::Update(float dt, CStateManager& mgr) {
return; return;
if (CGunWeapon::IsLoaded() && !x22c_24_loaded) { if (CGunWeapon::IsLoaded() && !x22c_24_loaded) {
x22c_24_loaded = x21c_plasma2nd1.IsLoaded(); x22c_24_loaded = x21c_plasma2nd1.TryCache();
if (x22c_24_loaded) if (x22c_24_loaded)
CreateBeam(mgr); CreateBeam(mgr);
} }

View File

@ -94,7 +94,7 @@ void CPowerBeam::Update(float dt, CStateManager& mgr) {
return; return;
if (CGunWeapon::IsLoaded() && !x244_25_loaded) { if (CGunWeapon::IsLoaded() && !x244_25_loaded) {
x244_25_loaded = x21c_shotSmoke.IsLoaded() && x228_power2nd1.IsLoaded(); x244_25_loaded = x21c_shotSmoke.TryCache() && x228_power2nd1.TryCache();
if (x244_25_loaded) { if (x244_25_loaded) {
x234_shotSmokeGen = rs_new CElementGen(x21c_shotSmoke); x234_shotSmokeGen = rs_new CElementGen(x21c_shotSmoke);
x234_shotSmokeGen->SetParticleEmission(false); x234_shotSmokeGen->SetParticleEmission(false);