mirror of https://github.com/AxioDL/metaforce.git
Lots of CPlayer implementations
This commit is contained in:
parent
46c70ecf11
commit
4f33422423
|
@ -13,6 +13,7 @@ struct ITweakPlayer : ITweak
|
||||||
virtual float GetX54() const=0;
|
virtual float GetX54() const=0;
|
||||||
virtual float GetX58() const=0;
|
virtual float GetX58() const=0;
|
||||||
virtual float GetX5C() const=0;
|
virtual float GetX5C() const=0;
|
||||||
|
virtual float GetHardLandingVelocityThreshold() const=0;
|
||||||
virtual float GetHudLagAmount() const=0;
|
virtual float GetHudLagAmount() const=0;
|
||||||
virtual uint32_t GetOrbitScreenBoxHalfExtentX(int zone) const=0;
|
virtual uint32_t GetOrbitScreenBoxHalfExtentX(int zone) const=0;
|
||||||
virtual uint32_t GetOrbitScreenBoxHalfExtentY(int zone) const=0;
|
virtual uint32_t GetOrbitScreenBoxHalfExtentY(int zone) const=0;
|
||||||
|
@ -22,6 +23,7 @@ struct ITweakPlayer : ITweak
|
||||||
virtual uint32_t GetEnemyScreenBoxCenterY(int zone) const=0;
|
virtual uint32_t GetEnemyScreenBoxCenterY(int zone) const=0;
|
||||||
virtual float GetOrbitNearX() const=0;
|
virtual float GetOrbitNearX() const=0;
|
||||||
virtual float GetOrbitNearZ() const=0;
|
virtual float GetOrbitNearZ() const=0;
|
||||||
|
virtual float GetOrbitZRange() const=0;
|
||||||
virtual float GetScanningRange() const=0; // x218
|
virtual float GetScanningRange() const=0; // x218
|
||||||
virtual bool GetScanFreezesGame() const=0; // x21c_25
|
virtual bool GetScanFreezesGame() const=0; // x21c_25
|
||||||
virtual float GetScanningFrameSenseRange() const=0;
|
virtual float GetScanningFrameSenseRange() const=0;
|
||||||
|
@ -30,9 +32,10 @@ struct ITweakPlayer : ITweak
|
||||||
virtual bool GetX228_24() const=0; // x228_24
|
virtual bool GetX228_24() const=0; // x228_24
|
||||||
virtual float GetX274() const=0; // x274
|
virtual float GetX274() const=0; // x274
|
||||||
virtual float GetX278() const=0; // x278
|
virtual float GetX278() const=0; // x278
|
||||||
virtual float GetX27C() const=0; // x27c
|
virtual float GetPlayerBallHalfExtent() const=0; // x27c
|
||||||
virtual float GetX124() const=0; // x134
|
virtual float GetX124() const=0; // x134
|
||||||
virtual float GetX184() const=0; // x184
|
virtual float GetX184() const=0; // x184
|
||||||
|
virtual float GetX1fc() const=0;
|
||||||
virtual float GetX288() const=0; // x288
|
virtual float GetX288() const=0; // x288
|
||||||
virtual float GetX28c() const=0; // x28c
|
virtual float GetX28c() const=0; // x28c
|
||||||
virtual float GetX290() const=0; // x290
|
virtual float GetX290() const=0; // x290
|
||||||
|
@ -45,6 +48,7 @@ struct ITweakPlayer : ITweak
|
||||||
virtual float GetX14C() const=0; // x14c
|
virtual float GetX14C() const=0; // x14c
|
||||||
virtual float GetLeftLogicalThreshold() const=0;
|
virtual float GetLeftLogicalThreshold() const=0;
|
||||||
virtual float GetRightLogicalThreshold() const=0;
|
virtual float GetRightLogicalThreshold() const=0;
|
||||||
|
virtual float GetX164(int type) const=0;
|
||||||
virtual float GetVariaDamageReduction() const=0;
|
virtual float GetVariaDamageReduction() const=0;
|
||||||
virtual float GetGravityDamageReduction() const=0;
|
virtual float GetGravityDamageReduction() const=0;
|
||||||
virtual float GetPhazonDamageReduction() const=0;
|
virtual float GetPhazonDamageReduction() const=0;
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct ITweakPlayerGun : ITweak
|
||||||
virtual float GetX30() const = 0; // x30
|
virtual float GetX30() const = 0; // x30
|
||||||
virtual float GetX34() const = 0; // x34
|
virtual float GetX34() const = 0; // x34
|
||||||
virtual float GetX38() const = 0; // x38
|
virtual float GetX38() const = 0; // x38
|
||||||
|
virtual float GetGunNotFiringTime() const=0;
|
||||||
virtual float GetRichochetDamage(atUint32) const = 0;
|
virtual float GetRichochetDamage(atUint32) const = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,8 +103,8 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader)
|
||||||
xa4_[6] = __dna_reader.readFloatBig();
|
xa4_[6] = __dna_reader.readFloatBig();
|
||||||
/* xa4_[7] */
|
/* xa4_[7] */
|
||||||
xa4_[7] = __dna_reader.readFloatBig();
|
xa4_[7] = __dna_reader.readFloatBig();
|
||||||
/* xc4_ */
|
/* xc4_hardLandingVelocityThreshold */
|
||||||
xc4_ = __dna_reader.readFloatBig();
|
xc4_hardLandingVelocityThreshold = __dna_reader.readFloatBig();
|
||||||
/* xc8_ */
|
/* xc8_ */
|
||||||
xc8_ = __dna_reader.readFloatBig();
|
xc8_ = __dna_reader.readFloatBig();
|
||||||
/* xcc_ */
|
/* xcc_ */
|
||||||
|
@ -325,8 +325,8 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader)
|
||||||
x1e4_ = __dna_reader.readFloatBig();
|
x1e4_ = __dna_reader.readFloatBig();
|
||||||
/* x1e8_ */
|
/* x1e8_ */
|
||||||
x1e8_ = __dna_reader.readFloatBig();
|
x1e8_ = __dna_reader.readFloatBig();
|
||||||
/* x1ec_ */
|
/* x1ec_orbitZRange */
|
||||||
x1ec_ = __dna_reader.readFloatBig();
|
x1ec_orbitZRange = __dna_reader.readFloatBig();
|
||||||
/* x1f0_ */
|
/* x1f0_ */
|
||||||
x1f0_ = __dna_reader.readFloatBig();
|
x1f0_ = __dna_reader.readFloatBig();
|
||||||
/* x1f4_ */
|
/* x1f4_ */
|
||||||
|
@ -543,8 +543,8 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const
|
||||||
__dna_writer.writeFloatBig(xa4_[6]);
|
__dna_writer.writeFloatBig(xa4_[6]);
|
||||||
/* xa4_[7] */
|
/* xa4_[7] */
|
||||||
__dna_writer.writeFloatBig(xa4_[7]);
|
__dna_writer.writeFloatBig(xa4_[7]);
|
||||||
/* xc4_ */
|
/* xc4_hardLandingVelocityThreshold */
|
||||||
__dna_writer.writeFloatBig(xc4_);
|
__dna_writer.writeFloatBig(xc4_hardLandingVelocityThreshold);
|
||||||
/* xc8_ */
|
/* xc8_ */
|
||||||
__dna_writer.writeFloatBig(xc8_);
|
__dna_writer.writeFloatBig(xc8_);
|
||||||
/* xcc_ */
|
/* xcc_ */
|
||||||
|
@ -765,8 +765,8 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const
|
||||||
__dna_writer.writeFloatBig(x1e4_);
|
__dna_writer.writeFloatBig(x1e4_);
|
||||||
/* x1e8_ */
|
/* x1e8_ */
|
||||||
__dna_writer.writeFloatBig(x1e8_);
|
__dna_writer.writeFloatBig(x1e8_);
|
||||||
/* x1ec_ */
|
/* x1ec_orbitZRange */
|
||||||
__dna_writer.writeFloatBig(x1ec_);
|
__dna_writer.writeFloatBig(x1ec_orbitZRange);
|
||||||
/* x1f0_ */
|
/* x1f0_ */
|
||||||
__dna_writer.writeFloatBig(x1f0_);
|
__dna_writer.writeFloatBig(x1f0_);
|
||||||
/* x1f4_ */
|
/* x1f4_ */
|
||||||
|
@ -1013,8 +1013,8 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin)
|
||||||
/* xa4_[7] */
|
/* xa4_[7] */
|
||||||
xa4_[7] = __dna_docin.readFloat("xa4_");
|
xa4_[7] = __dna_docin.readFloat("xa4_");
|
||||||
}
|
}
|
||||||
/* xc4_ */
|
/* xc4_hardLandingVelocityThreshold */
|
||||||
xc4_ = __dna_docin.readFloat("xc4_");
|
xc4_hardLandingVelocityThreshold = __dna_docin.readFloat("xc4_hardLandingVelocityThreshold");
|
||||||
/* xc8_ */
|
/* xc8_ */
|
||||||
xc8_ = __dna_docin.readFloat("xc8_");
|
xc8_ = __dna_docin.readFloat("xc8_");
|
||||||
/* xcc_ */
|
/* xcc_ */
|
||||||
|
@ -1280,8 +1280,8 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin)
|
||||||
x1e4_ = __dna_docin.readFloat("x1e4_");
|
x1e4_ = __dna_docin.readFloat("x1e4_");
|
||||||
/* x1e8_ */
|
/* x1e8_ */
|
||||||
x1e8_ = __dna_docin.readFloat("x1e8_");
|
x1e8_ = __dna_docin.readFloat("x1e8_");
|
||||||
/* x1ec_ */
|
/* x1ec_orbitZRange */
|
||||||
x1ec_ = __dna_docin.readFloat("x1ec_");
|
x1ec_orbitZRange = __dna_docin.readFloat("x1ec_orbitZRange");
|
||||||
/* x1f0_ */
|
/* x1f0_ */
|
||||||
x1f0_ = __dna_docin.readFloat("x1f0_");
|
x1f0_ = __dna_docin.readFloat("x1f0_");
|
||||||
/* x1f4_ */
|
/* x1f4_ */
|
||||||
|
@ -1522,8 +1522,8 @@ void CTweakPlayer::CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout)
|
||||||
/* xa4_[7] */
|
/* xa4_[7] */
|
||||||
__dna_docout.writeFloat("xa4_", xa4_[7]);
|
__dna_docout.writeFloat("xa4_", xa4_[7]);
|
||||||
}
|
}
|
||||||
/* xc4_ */
|
/* xc4_hardLandingVelocityThreshold */
|
||||||
__dna_docout.writeFloat("xc4_", xc4_);
|
__dna_docout.writeFloat("xc4_hardLandingVelocityThreshold", xc4_hardLandingVelocityThreshold);
|
||||||
/* xc8_ */
|
/* xc8_ */
|
||||||
__dna_docout.writeFloat("xc8_", xc8_);
|
__dna_docout.writeFloat("xc8_", xc8_);
|
||||||
/* xcc_ */
|
/* xcc_ */
|
||||||
|
@ -1780,8 +1780,8 @@ void CTweakPlayer::CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout)
|
||||||
__dna_docout.writeFloat("x1e4_", x1e4_);
|
__dna_docout.writeFloat("x1e4_", x1e4_);
|
||||||
/* x1e8_ */
|
/* x1e8_ */
|
||||||
__dna_docout.writeFloat("x1e8_", x1e8_);
|
__dna_docout.writeFloat("x1e8_", x1e8_);
|
||||||
/* x1ec_ */
|
/* x1ec_orbitZRange */
|
||||||
__dna_docout.writeFloat("x1ec_", x1ec_);
|
__dna_docout.writeFloat("x1ec_orbitZRange", x1ec_orbitZRange);
|
||||||
/* x1f0_ */
|
/* x1f0_ */
|
||||||
__dna_docout.writeFloat("x1f0_", x1f0_);
|
__dna_docout.writeFloat("x1f0_", x1f0_);
|
||||||
/* x1f4_ */
|
/* x1f4_ */
|
||||||
|
|
|
@ -17,7 +17,7 @@ struct CTweakPlayer : ITweakPlayer
|
||||||
Value<float> x64_[8];
|
Value<float> x64_[8];
|
||||||
Value<float> x84_[8];
|
Value<float> x84_[8];
|
||||||
Value<float> xa4_[8];
|
Value<float> xa4_[8];
|
||||||
Value<float> xc4_;
|
Value<float> xc4_hardLandingVelocityThreshold;
|
||||||
Value<float> xc8_;
|
Value<float> xc8_;
|
||||||
Value<float> xcc_;
|
Value<float> xcc_;
|
||||||
Value<float> xd0_;
|
Value<float> xd0_;
|
||||||
|
@ -79,7 +79,7 @@ struct CTweakPlayer : ITweakPlayer
|
||||||
Value<float> x1e0_;
|
Value<float> x1e0_;
|
||||||
Value<float> x1e4_;
|
Value<float> x1e4_;
|
||||||
Value<float> x1e8_;
|
Value<float> x1e8_;
|
||||||
Value<float> x1ec_;
|
Value<float> x1ec_orbitZRange;
|
||||||
Value<float> x1f0_;
|
Value<float> x1f0_;
|
||||||
Value<float> x1f4_;
|
Value<float> x1f4_;
|
||||||
Value<float> x1f8_;
|
Value<float> x1f8_;
|
||||||
|
@ -179,6 +179,7 @@ struct CTweakPlayer : ITweakPlayer
|
||||||
float GetX54() const { return x44_[4]; }
|
float GetX54() const { return x44_[4]; }
|
||||||
float GetX58() const { return x44_[5]; }
|
float GetX58() const { return x44_[5]; }
|
||||||
float GetX5C() const { return x44_[6]; }
|
float GetX5C() const { return x44_[6]; }
|
||||||
|
float GetHardLandingVelocityThreshold() const { return xc4_hardLandingVelocityThreshold; }
|
||||||
float GetHudLagAmount() const { return x138_hudLagAmount; }
|
float GetHudLagAmount() const { return x138_hudLagAmount; }
|
||||||
uint32_t GetOrbitScreenBoxHalfExtentX(int zone) const { return x1a8_orbitScreenBoxHalfExtentX[zone]; }
|
uint32_t GetOrbitScreenBoxHalfExtentX(int zone) const { return x1a8_orbitScreenBoxHalfExtentX[zone]; }
|
||||||
uint32_t GetOrbitScreenBoxHalfExtentY(int zone) const { return x1b0_orbitScreenBoxHalfExtentY[zone]; }
|
uint32_t GetOrbitScreenBoxHalfExtentY(int zone) const { return x1b0_orbitScreenBoxHalfExtentY[zone]; }
|
||||||
|
@ -188,6 +189,7 @@ struct CTweakPlayer : ITweakPlayer
|
||||||
uint32_t GetEnemyScreenBoxCenterY(int zone) const { return x1d0_enemyScreenBoxCenterY[zone]; }
|
uint32_t GetEnemyScreenBoxCenterY(int zone) const { return x1d0_enemyScreenBoxCenterY[zone]; }
|
||||||
float GetOrbitNearX() const { return x1d8_orbitNearX; }
|
float GetOrbitNearX() const { return x1d8_orbitNearX; }
|
||||||
float GetOrbitNearZ() const { return x1dc_orbitNearZ; }
|
float GetOrbitNearZ() const { return x1dc_orbitNearZ; }
|
||||||
|
float GetOrbitZRange() const { return x1ec_orbitZRange; }
|
||||||
float GetScanningRange() const { return x218_scanningRange; }
|
float GetScanningRange() const { return x218_scanningRange; }
|
||||||
bool GetScanFreezesGame() const { return x21c_25_scanFreezesGame; }
|
bool GetScanFreezesGame() const { return x21c_25_scanFreezesGame; }
|
||||||
float GetScanningFrameSenseRange() const { return x224_scanningFrameSenseRange; }
|
float GetScanningFrameSenseRange() const { return x224_scanningFrameSenseRange; }
|
||||||
|
@ -195,9 +197,10 @@ struct CTweakPlayer : ITweakPlayer
|
||||||
float GetPlayerXYHalfExtent() const { return x270_playerXYHalfExtent; }
|
float GetPlayerXYHalfExtent() const { return x270_playerXYHalfExtent; }
|
||||||
float GetX274() const { return x274_; }
|
float GetX274() const { return x274_; }
|
||||||
float GetX278() const { return x278_; }
|
float GetX278() const { return x278_; }
|
||||||
float GetX27C() const { return x27c_playerBallHalfExtent; }
|
float GetPlayerBallHalfExtent() const { return x27c_playerBallHalfExtent; }
|
||||||
float GetX124() const { return x134_; }
|
float GetX124() const { return x134_; }
|
||||||
float GetX184() const { return x184_; }
|
float GetX184() const { return x184_; }
|
||||||
|
float GetX1fc() const { return x1fc_; }
|
||||||
bool GetX228_24() const { return x228_24_; }
|
bool GetX228_24() const { return x228_24_; }
|
||||||
float GetX288() const { return x288_; }
|
float GetX288() const { return x288_; }
|
||||||
float GetX28c() const { return x28c_; }
|
float GetX28c() const { return x28c_; }
|
||||||
|
@ -211,6 +214,7 @@ struct CTweakPlayer : ITweakPlayer
|
||||||
float GetX14C() const { return x14c_; }
|
float GetX14C() const { return x14c_; }
|
||||||
float GetLeftLogicalThreshold() const { return x150_leftDiv; }
|
float GetLeftLogicalThreshold() const { return x150_leftDiv; }
|
||||||
float GetRightLogicalThreshold() const { return x154_rightDiv; }
|
float GetRightLogicalThreshold() const { return x154_rightDiv; }
|
||||||
|
float GetX164(int type) const { return x164_[type]; }
|
||||||
float GetVariaDamageReduction() const { return x300_variaDamageReduction; }
|
float GetVariaDamageReduction() const { return x300_variaDamageReduction; }
|
||||||
float GetGravityDamageReduction() const { return x304_gravityDamageReduction; }
|
float GetGravityDamageReduction() const { return x304_gravityDamageReduction; }
|
||||||
float GetPhazonDamageReduction() const { return x308_phazonDamageReduction; }
|
float GetPhazonDamageReduction() const { return x308_phazonDamageReduction; }
|
||||||
|
|
|
@ -26,7 +26,7 @@ struct CTweakPlayerGun : ITweakPlayerGun
|
||||||
Value<float> x34_;
|
Value<float> x34_;
|
||||||
Value<float> x38_;
|
Value<float> x38_;
|
||||||
Value<float> x3c_;
|
Value<float> x3c_;
|
||||||
Value<float> x40_;
|
Value<float> x40_gunNotFiringTime;
|
||||||
Value<float> x44_;
|
Value<float> x44_;
|
||||||
Value<float> x48_;
|
Value<float> x48_;
|
||||||
Value<zeus::CVector3f> x4c_;
|
Value<zeus::CVector3f> x4c_;
|
||||||
|
@ -59,6 +59,7 @@ struct CTweakPlayerGun : ITweakPlayerGun
|
||||||
float GetX30() const { return x30_; }
|
float GetX30() const { return x30_; }
|
||||||
float GetX34() const { return x34_; }
|
float GetX34() const { return x34_; }
|
||||||
float GetX38() const { return x38_; }
|
float GetX38() const { return x38_; }
|
||||||
|
float GetGunNotFiringTime() const { return x40_gunNotFiringTime; }
|
||||||
float GetRichochetDamage(atUint32 type) const
|
float GetRichochetDamage(atUint32 type) const
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|
|
@ -384,6 +384,13 @@ CSfxHandle CSfxManager::SfxStart(u16 id, float vol, float pan, bool useAcoustics
|
||||||
return wrapper;
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSfxManager::IsPlaying(const CSfxHandle& handle)
|
||||||
|
{
|
||||||
|
if (!handle)
|
||||||
|
return false;
|
||||||
|
return handle->IsPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void CSfxManager::RemoveEmitter(const CSfxHandle& handle)
|
void CSfxManager::RemoveEmitter(const CSfxHandle& handle)
|
||||||
{
|
{
|
||||||
StopSound(handle);
|
StopSound(handle);
|
||||||
|
|
|
@ -220,6 +220,7 @@ public:
|
||||||
static u16 TranslateSFXID(u16);
|
static u16 TranslateSFXID(u16);
|
||||||
static void SfxStop(const CSfxHandle& handle);
|
static void SfxStop(const CSfxHandle& handle);
|
||||||
static CSfxHandle SfxStart(u16 id, float vol, float pan, bool useAcoustics, s16 prio, bool looped, s32 areaId);
|
static CSfxHandle SfxStart(u16 id, float vol, float pan, bool useAcoustics, s16 prio, bool looped, s32 areaId);
|
||||||
|
static bool IsPlaying(const CSfxHandle& handle);
|
||||||
static void RemoveEmitter(const CSfxHandle& handle);
|
static void RemoveEmitter(const CSfxHandle& handle);
|
||||||
static void UpdateEmitter(const CSfxHandle& handle, const zeus::CVector3f& pos, const zeus::CVector3f& dir,
|
static void UpdateEmitter(const CSfxHandle& handle, const zeus::CVector3f& pos, const zeus::CVector3f& dir,
|
||||||
float maxVol);
|
float maxVol);
|
||||||
|
|
|
@ -86,7 +86,7 @@ add_library(RuntimeCommon
|
||||||
CSimplePool.hpp CSimplePool.cpp
|
CSimplePool.hpp CSimplePool.cpp
|
||||||
CGameOptions.hpp CGameOptions.cpp
|
CGameOptions.hpp CGameOptions.cpp
|
||||||
CGameOptionsTouchBar.hpp CGameOptionsTouchBar.cpp
|
CGameOptionsTouchBar.hpp CGameOptionsTouchBar.cpp
|
||||||
CStaticInterference.hpp
|
CStaticInterference.hpp CStaticInterference.cpp
|
||||||
CCRC32.hpp CCRC32.cpp
|
CCRC32.hpp CCRC32.cpp
|
||||||
IFactory.hpp
|
IFactory.hpp
|
||||||
IObjFactory.hpp
|
IObjFactory.hpp
|
||||||
|
|
|
@ -174,7 +174,7 @@ public:
|
||||||
bool IsPlayerAlive() const { return x0_24_alive; }
|
bool IsPlayerAlive() const { return x0_24_alive; }
|
||||||
void SetPlayerAlive(bool alive) { x0_24_alive = alive; }
|
void SetPlayerAlive(bool alive) { x0_24_alive = alive; }
|
||||||
void InitializeScanTimes();
|
void InitializeScanTimes();
|
||||||
const CStaticInterference& GetStaticInterference() const { return x188_staticIntf; }
|
CStaticInterference& GetStaticInterference() { return x188_staticIntf; }
|
||||||
const rstl::reserved_vector<std::pair<ResId, float>, 846>& GetScanTimes() const { return x170_scanTimes; }
|
const rstl::reserved_vector<std::pair<ResId, float>, 846>& GetScanTimes() const { return x170_scanTimes; }
|
||||||
CPlayerState();
|
CPlayerState();
|
||||||
CPlayerState(CBitStreamReader& stream);
|
CPlayerState(CBitStreamReader& stream);
|
||||||
|
|
|
@ -1310,8 +1310,10 @@ void CStateManager::KnockBackPlayer(CPlayer& player, const zeus::CVector3f& pos,
|
||||||
if (player.GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Morphed)
|
if (player.GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Morphed)
|
||||||
{
|
{
|
||||||
usePower = power * 1000.f;
|
usePower = power * 1000.f;
|
||||||
u32 something = player.x2b0_ == 2 ? player.x2ac_ : 4;
|
CPlayer::EPlayerMovementSurface surface =
|
||||||
if (something != 0 && player.GetOrbitState() == CPlayer::EPlayerOrbitState::Zero)
|
player.x2b0_ == 2 ? player.x2ac_movementSurface : CPlayer::EPlayerMovementSurface::Four;
|
||||||
|
if (surface != CPlayer::EPlayerMovementSurface::Normal &&
|
||||||
|
player.GetOrbitState() == CPlayer::EPlayerOrbitState::Zero)
|
||||||
usePower /= 7.f;
|
usePower /= 7.f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1442,7 +1444,7 @@ void CStateManager::ApplyRadiusDamage(const CActor& a1, const zeus::CVector3f& p
|
||||||
if (dam > 0.f)
|
if (dam > 0.f)
|
||||||
ApplyLocalDamage(pos, delta, a2, dam, info.GetWeaponMode());
|
ApplyLocalDamage(pos, delta, a2, dam, info.GetWeaponMode());
|
||||||
a2.SendScriptMsgs(EScriptObjectState::Damage, *this, EScriptObjectMessage::None);
|
a2.SendScriptMsgs(EScriptObjectState::Damage, *this, EScriptObjectMessage::None);
|
||||||
SendScriptMsg(&a2, a1.GetUniqueId(), EScriptObjectMessage::InternalMessage19);
|
SendScriptMsg(&a2, a1.GetUniqueId(), EScriptObjectMessage::Damage);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1692,7 +1694,7 @@ bool CStateManager::ApplyDamage(TUniqueId id0, TUniqueId id1, TUniqueId id2,
|
||||||
if (info.GetDamage() > 0.f)
|
if (info.GetDamage() > 0.f)
|
||||||
ApplyLocalDamage(position, direction, *act1, info.GetDamage(), info.GetWeaponMode());
|
ApplyLocalDamage(position, direction, *act1, info.GetDamage(), info.GetWeaponMode());
|
||||||
act1->SendScriptMsgs(EScriptObjectState::Damage, *this, EScriptObjectMessage::None);
|
act1->SendScriptMsgs(EScriptObjectState::Damage, *this, EScriptObjectMessage::None);
|
||||||
SendScriptMsg(act1.GetPtr(), id0, EScriptObjectMessage::InternalMessage19);
|
SendScriptMsg(act1.GetPtr(), id0, EScriptObjectMessage::Damage);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2225,7 +2227,7 @@ void CStateManager::CreateStandardGameObjects()
|
||||||
float xyHe = g_tweakPlayer->GetPlayerXYHalfExtent();
|
float xyHe = g_tweakPlayer->GetPlayerXYHalfExtent();
|
||||||
float unk1 = g_tweakPlayer->GetX274();
|
float unk1 = g_tweakPlayer->GetX274();
|
||||||
float unk2 = g_tweakPlayer->GetX278();
|
float unk2 = g_tweakPlayer->GetX278();
|
||||||
float unk3 = g_tweakPlayer->GetX27C();
|
float unk3 = g_tweakPlayer->GetPlayerBallHalfExtent();
|
||||||
zeus::CAABox pBounds = {{-xyHe, -xyHe, 0.f}, {xyHe, xyHe, height}};
|
zeus::CAABox pBounds = {{-xyHe, -xyHe, 0.f}, {xyHe, xyHe, height}};
|
||||||
auto q = zeus::CQuaternion::fromAxisAngle(zeus::CVector3f{0.f, 0.f, 1.f}, zeus::degToRad(129.6f));
|
auto q = zeus::CQuaternion::fromAxisAngle(zeus::CVector3f{0.f, 0.f, 1.f}, zeus::degToRad(129.6f));
|
||||||
x84c_player.reset(new CPlayer(
|
x84c_player.reset(new CPlayer(
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
#include "CStaticInterference.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
CStaticInterference::CStaticInterference(int sourceCount)
|
||||||
|
{
|
||||||
|
m_sources.reserve(sourceCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStaticInterference::RemoveSource(TUniqueId id)
|
||||||
|
{
|
||||||
|
auto iter = std::find_if(m_sources.begin(), m_sources.end(),
|
||||||
|
[id](const CStaticInterferenceSource& src)->bool{
|
||||||
|
return src.id == id;
|
||||||
|
});
|
||||||
|
if (iter != m_sources.end())
|
||||||
|
m_sources.erase(iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStaticInterference::Update(CStateManager&, float dt)
|
||||||
|
{
|
||||||
|
std::vector<CStaticInterferenceSource> newSources;
|
||||||
|
newSources.reserve(m_sources.size());
|
||||||
|
for (CStaticInterferenceSource& src : m_sources)
|
||||||
|
{
|
||||||
|
if (src.timeLeft >= 0.0)
|
||||||
|
{
|
||||||
|
src.timeLeft -= dt;
|
||||||
|
newSources.push_back(src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_sources = std::move(newSources);
|
||||||
|
}
|
||||||
|
|
||||||
|
float CStaticInterference::GetTotalInterference() const
|
||||||
|
{
|
||||||
|
float validAccum = 0.0;
|
||||||
|
float invalidAccum = 0.0;
|
||||||
|
for (const CStaticInterferenceSource& src : m_sources)
|
||||||
|
{
|
||||||
|
if (src.id == kInvalidUniqueId)
|
||||||
|
invalidAccum += src.magnitude;
|
||||||
|
else
|
||||||
|
validAccum += src.magnitude;
|
||||||
|
}
|
||||||
|
if (validAccum > 0.80000001)
|
||||||
|
validAccum = 0.80000001;
|
||||||
|
validAccum += invalidAccum;
|
||||||
|
if (validAccum > 1.0)
|
||||||
|
return 1.0;
|
||||||
|
return validAccum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CStaticInterference::AddSource(TUniqueId id, float magnitude, float duration)
|
||||||
|
{
|
||||||
|
magnitude = zeus::clamp(0.f, magnitude, 1.f);
|
||||||
|
auto search = std::find_if(m_sources.begin(), m_sources.end(),
|
||||||
|
[id](CStaticInterferenceSource& source) { return source.id == id; });
|
||||||
|
if (search != m_sources.end())
|
||||||
|
{
|
||||||
|
search->magnitude = magnitude;
|
||||||
|
search->timeLeft = duration;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_sources.size() < m_sources.capacity())
|
||||||
|
m_sources.push_back({id, magnitude, duration});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -19,66 +19,11 @@ class CStaticInterference
|
||||||
{
|
{
|
||||||
std::vector<CStaticInterferenceSource> m_sources;
|
std::vector<CStaticInterferenceSource> m_sources;
|
||||||
public:
|
public:
|
||||||
CStaticInterference(int sourceCount)
|
CStaticInterference(int sourceCount);
|
||||||
{
|
void RemoveSource(TUniqueId id);
|
||||||
m_sources.reserve(sourceCount);
|
void Update(CStateManager&, float dt);
|
||||||
}
|
float GetTotalInterference() const;
|
||||||
void AddSource(TUniqueId id, float magnitude, float duration)
|
void AddSource(TUniqueId id, float magnitude, float duration);
|
||||||
{
|
|
||||||
for (CStaticInterferenceSource& src : m_sources)
|
|
||||||
{
|
|
||||||
if (src.id == id)
|
|
||||||
{
|
|
||||||
src.magnitude = magnitude;
|
|
||||||
src.timeLeft = duration;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_sources.push_back({id, magnitude, duration});
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoveSource(TUniqueId id)
|
|
||||||
{
|
|
||||||
auto iter = std::find_if(m_sources.begin(), m_sources.end(), [&id](const CStaticInterferenceSource& src)->bool{
|
|
||||||
return src.id == id;
|
|
||||||
});
|
|
||||||
if (iter != m_sources.end())
|
|
||||||
m_sources.erase(iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update(CStateManager&, float dt)
|
|
||||||
{
|
|
||||||
std::vector<CStaticInterferenceSource> newSources;
|
|
||||||
newSources.reserve(m_sources.size());
|
|
||||||
for (CStaticInterferenceSource& src : m_sources)
|
|
||||||
{
|
|
||||||
if (src.timeLeft >= 0.0)
|
|
||||||
{
|
|
||||||
src.timeLeft -= dt;
|
|
||||||
newSources.push_back(src);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m_sources = std::move(newSources);
|
|
||||||
}
|
|
||||||
|
|
||||||
float GetTotalInterference() const
|
|
||||||
{
|
|
||||||
float validAccum = 0.0;
|
|
||||||
float invalidAccum = 0.0;
|
|
||||||
for (const CStaticInterferenceSource& src : m_sources)
|
|
||||||
{
|
|
||||||
if (src.id == kInvalidUniqueId)
|
|
||||||
invalidAccum += src.magnitude;
|
|
||||||
else
|
|
||||||
validAccum += src.magnitude;
|
|
||||||
}
|
|
||||||
if (validAccum > 0.80000001)
|
|
||||||
validAccum = 0.80000001;
|
|
||||||
validAccum += invalidAccum;
|
|
||||||
if (validAccum > 1.0)
|
|
||||||
return 1.0;
|
|
||||||
return validAccum;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,28 @@ CCameraShakeData::CCameraShakeData(float f1, float f2)
|
||||||
SCameraShakePoint{1, 0.f, 0.f, 0.5f * f1, 2.f}})
|
SCameraShakePoint{1, 0.f, 0.f, 0.5f * f1, 2.f}})
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
CCameraShakeData CCameraShakeData::BuildLandingCameraShakeData(float f1, float f2)
|
||||||
|
{
|
||||||
|
return CCameraShakeData(f1, 100.f, 0, zeus::CVector3f::skZero,
|
||||||
|
CCameraShakerComponent(1,
|
||||||
|
SCameraShakePoint(0, 0.15f * f1, 0.f, 0.85f * f1, f2),
|
||||||
|
SCameraShakePoint(1, 0.f, 0.f, 0.4f * f1, 1.5f)),
|
||||||
|
CCameraShakerComponent(),
|
||||||
|
CCameraShakerComponent(1,
|
||||||
|
SCameraShakePoint(0, 0.25f * f1, 0.f, 0.75f * f1, f2),
|
||||||
|
SCameraShakePoint(1, 0.f, 0.f, 0.5f * f1, 2.f)));
|
||||||
|
}
|
||||||
|
|
||||||
|
CCameraShakeData CCameraShakeData::BuildProjectileCameraShake(float f1, float f2)
|
||||||
|
{
|
||||||
|
return CCameraShakeData(f1, 100.f, 0, zeus::CVector3f::skZero,
|
||||||
|
CCameraShakerComponent(1,
|
||||||
|
SCameraShakePoint(0, 0.f, 0.f, f1, f2),
|
||||||
|
SCameraShakePoint(1, 0.f, 0.f, 0.5f * f1, 3.f)),
|
||||||
|
CCameraShakerComponent(),
|
||||||
|
CCameraShakerComponent());
|
||||||
|
}
|
||||||
|
|
||||||
float CCameraShakeData::GetSomething() const
|
float CCameraShakeData::GetSomething() const
|
||||||
{
|
{
|
||||||
float ret = 0.f;
|
float ret = 0.f;
|
||||||
|
|
|
@ -55,6 +55,8 @@ public:
|
||||||
const CCameraShakerComponent& shaker1, const CCameraShakerComponent& shaker2,
|
const CCameraShakerComponent& shaker1, const CCameraShakerComponent& shaker2,
|
||||||
const CCameraShakerComponent& shaker3);
|
const CCameraShakerComponent& shaker3);
|
||||||
CCameraShakeData(float f1, float f2);
|
CCameraShakeData(float f1, float f2);
|
||||||
|
static CCameraShakeData BuildLandingCameraShakeData(float f1, float f2);
|
||||||
|
static CCameraShakeData BuildProjectileCameraShake(float f1, float f2);
|
||||||
//zeus::CVector3f GeneratePoint(float dt, CRandom16& r);
|
//zeus::CVector3f GeneratePoint(float dt, CRandom16& r);
|
||||||
float GetSomething() const;
|
float GetSomething() const;
|
||||||
float GetSomething2() const;
|
float GetSomething2() const;
|
||||||
|
|
|
@ -110,10 +110,10 @@ void CFirstPersonCamera::UpdateTransform(CStateManager& mgr, float dt)
|
||||||
if (player->GetOrbitState() == CPlayer::EPlayerOrbitState::Four ||
|
if (player->GetOrbitState() == CPlayer::EPlayerOrbitState::Four ||
|
||||||
player->GetOrbitState() == CPlayer::EPlayerOrbitState::One)
|
player->GetOrbitState() == CPlayer::EPlayerOrbitState::One)
|
||||||
{
|
{
|
||||||
const CActor* act = TCastToConstPtr<CActor>(mgr.GetObjectById(player->x310_lockonObjectId));
|
const CActor* act = TCastToConstPtr<CActor>(mgr.GetObjectById(player->x310_orbitTargetId));
|
||||||
if (act && act->GetMaterialList().Intersection(CMaterialList(EMaterialTypes::Lava)) != 0)
|
if (act && act->GetMaterialList().Intersection(CMaterialList(EMaterialTypes::Lava)) != 0)
|
||||||
{
|
{
|
||||||
zeus::CVector3f v = player->x318_ - eyePos;
|
zeus::CVector3f v = player->x314_orbitPoint.y - eyePos;
|
||||||
if (v.canBeNormalized())
|
if (v.canBeNormalized())
|
||||||
v.normalize();
|
v.normalize();
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ void CFirstPersonCamera::UpdateTransform(CStateManager& mgr, float dt)
|
||||||
qGun = zeus::CQuaternion::lookAt(rVec, gunFrontVec, scaledDt * clampedAngle);
|
qGun = zeus::CQuaternion::lookAt(rVec, gunFrontVec, scaledDt * clampedAngle);
|
||||||
|
|
||||||
const CScriptGrapplePoint* gPoint =
|
const CScriptGrapplePoint* gPoint =
|
||||||
TCastToConstPtr<CScriptGrapplePoint>(mgr.GetObjectById(player->x310_lockonObjectId));
|
TCastToConstPtr<CScriptGrapplePoint>(mgr.GetObjectById(player->x310_orbitTargetId));
|
||||||
if (gPoint && player->x29c_ > 0.f)
|
if (gPoint && player->x29c_ > 0.f)
|
||||||
{
|
{
|
||||||
gunFrontVec = x190_gunFollowXf.frontVector();
|
gunFrontVec = x190_gunFollowXf.frontVector();
|
||||||
|
|
|
@ -29,12 +29,12 @@ CGameCamera::CGameCamera(TUniqueId uid, bool active, const std::string& name, co
|
||||||
|
|
||||||
void CGameCamera::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr)
|
void CGameCamera::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr)
|
||||||
{
|
{
|
||||||
if (msg == EScriptObjectMessage::InternalMessage15)
|
if (msg == EScriptObjectMessage::UpdateSplashInhabitant)
|
||||||
{
|
{
|
||||||
mgr.GetCameraManager()->SetInsideFluid(true, uid);
|
mgr.GetCameraManager()->SetInsideFluid(true, uid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (msg == EScriptObjectMessage::InternalMessage17)
|
else if (msg == EScriptObjectMessage::RemoveSplashInhabitant)
|
||||||
{
|
{
|
||||||
mgr.GetCameraManager()->SetInsideFluid(false, kInvalidUniqueId);
|
mgr.GetCameraManager()->SetInsideFluid(false, kInvalidUniqueId);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -74,7 +74,7 @@ void CCollisionActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, C
|
||||||
case EScriptObjectMessage::InitializedInArea:
|
case EScriptObjectMessage::InitializedInArea:
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::Alert:
|
case EScriptObjectMessage::Alert:
|
||||||
case EScriptObjectMessage::InternalMessage10:
|
case EScriptObjectMessage::LandOnNotFloor:
|
||||||
case EScriptObjectMessage::Registered:
|
case EScriptObjectMessage::Registered:
|
||||||
{
|
{
|
||||||
CEntity* ent = mgr.ObjectById(x25c_owner);
|
CEntity* ent = mgr.ObjectById(x25c_owner);
|
||||||
|
|
|
@ -75,11 +75,11 @@ void CGameCollision::SendMaterialMessage(CStateManager& mgr, const CMaterialList
|
||||||
{
|
{
|
||||||
EScriptObjectMessage msg;
|
EScriptObjectMessage msg;
|
||||||
if (mat.HasMaterial(EMaterialTypes::Ice))
|
if (mat.HasMaterial(EMaterialTypes::Ice))
|
||||||
msg = EScriptObjectMessage::InternalMessage05;
|
msg = EScriptObjectMessage::OnIceSurface;
|
||||||
else if (mat.HasMaterial(EMaterialTypes::MudSlow))
|
else if (mat.HasMaterial(EMaterialTypes::MudSlow))
|
||||||
msg = EScriptObjectMessage::InternalMessage06;
|
msg = EScriptObjectMessage::OnMudSlowSurface;
|
||||||
else
|
else
|
||||||
msg = EScriptObjectMessage::InternalMessage07;
|
msg = EScriptObjectMessage::OnNormalSurface;
|
||||||
|
|
||||||
mgr.SendScriptMsg(&act, kInvalidUniqueId, msg);
|
mgr.SendScriptMsg(&act, kInvalidUniqueId, msg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
void MakeInvalid();
|
void MakeInvalid();
|
||||||
|
|
||||||
bool IsInvalid() const { return x20_invalid == EInvalid::Invalid; }
|
bool IsInvalid() const { return x20_invalid == EInvalid::Invalid; }
|
||||||
|
bool IsValid() const { return x20_invalid == EInvalid::Valid; }
|
||||||
float GetT() const { return x0_t; }
|
float GetT() const { return x0_t; }
|
||||||
const zeus::CVector3f& GetPoint() const { return x4_point; }
|
const zeus::CVector3f& GetPoint() const { return x4_point; }
|
||||||
const zeus::CPlane& GetPlane() const { return x10_plane; }
|
const zeus::CPlane& GetPlane() const { return x10_plane; }
|
||||||
|
|
|
@ -271,9 +271,9 @@ void CHudDecoInterfaceScan::UpdateScanDisplay(const CStateManager& stateMgr, flo
|
||||||
if (player.GetScanningObjectId() != x1d2_latestScanningObject)
|
if (player.GetScanningObjectId() != x1d2_latestScanningObject)
|
||||||
x1d2_latestScanningObject = player.GetScanningObjectId();
|
x1d2_latestScanningObject = player.GetScanningObjectId();
|
||||||
|
|
||||||
if (player.GetLockonObjectId() != x1d0_latestHudPoi)
|
if (player.GetOrbitTargetId() != x1d0_latestHudPoi)
|
||||||
{
|
{
|
||||||
x1d0_latestHudPoi = player.GetLockonObjectId();
|
x1d0_latestHudPoi = player.GetOrbitTargetId();
|
||||||
if (x1d0_latestHudPoi != kInvalidUniqueId)
|
if (x1d0_latestHudPoi != kInvalidUniqueId)
|
||||||
{
|
{
|
||||||
if (!player.ObjectInScanningRange(x1d0_latestHudPoi, stateMgr))
|
if (!player.ObjectInScanningRange(x1d0_latestHudPoi, stateMgr))
|
||||||
|
@ -611,7 +611,7 @@ void CHudDecoInterfaceThermal::SetDamageTransform(const zeus::CMatrix3f& rotatio
|
||||||
void CHudDecoInterfaceThermal::Update(float dt, const CStateManager& stateMgr)
|
void CHudDecoInterfaceThermal::Update(float dt, const CStateManager& stateMgr)
|
||||||
{
|
{
|
||||||
float oldLockonScale = x68_lockonScale;
|
float oldLockonScale = x68_lockonScale;
|
||||||
if (stateMgr.GetPlayer().GetLockonObjectId() != kInvalidUniqueId)
|
if (stateMgr.GetPlayer().GetOrbitTargetId() != kInvalidUniqueId)
|
||||||
x68_lockonScale = std::max(x68_lockonScale - 15.f * dt, 1.f);
|
x68_lockonScale = std::max(x68_lockonScale - 15.f * dt, 1.f);
|
||||||
else
|
else
|
||||||
x68_lockonScale = std::min(x68_lockonScale + 15.f * dt, 5.f);
|
x68_lockonScale = std::min(x68_lockonScale + 15.f * dt, 5.f);
|
||||||
|
|
|
@ -8,7 +8,8 @@ namespace urde
|
||||||
enum class ERumbleFxId
|
enum class ERumbleFxId
|
||||||
{
|
{
|
||||||
Seven = 7,
|
Seven = 7,
|
||||||
Eleven = 11
|
Eleven = 11,
|
||||||
|
Fifteen = 15
|
||||||
};
|
};
|
||||||
enum class ERumblePriority
|
enum class ERumblePriority
|
||||||
{
|
{
|
||||||
|
|
|
@ -135,7 +135,7 @@ bool CPlayerVisor::DrawScanObjectIndicators(const CStateManager& mgr) const
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float tmp = 1.f;
|
float tmp = 1.f;
|
||||||
if (mgr.GetPlayer().GetLockonObjectId() == tgt.x0_objId)
|
if (mgr.GetPlayer().GetOrbitTargetId() == tgt.x0_objId)
|
||||||
tmp = 0.75f * x2c_scanDimInterp + 0.25f;
|
tmp = 0.75f * x2c_scanDimInterp + 0.25f;
|
||||||
iconAlpha = tgt.x4_timer * tmp;
|
iconAlpha = tgt.x4_timer * tmp;
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,7 @@ void CSamusHud::InitializeFrameGlueMutable(const CStateManager& mgr)
|
||||||
CPlayerGun& gun = *player.GetPlayerGun();
|
CPlayerGun& gun = *player.GetPlayerGun();
|
||||||
float chargeFactor = gun.IsCharging() ? gun.GetChargeBeamFactor() : 0.f;
|
float chargeFactor = gun.IsCharging() ? gun.GetChargeBeamFactor() : 0.f;
|
||||||
bool missilesActive = gun.GetMissleMode() == CPlayerGun::EMissleMode::Active;
|
bool missilesActive = gun.GetMissleMode() == CPlayerGun::EMissleMode::Active;
|
||||||
bool lockedOnObj = player.GetLockonObjectId() != kInvalidUniqueId;
|
bool lockedOnObj = player.GetOrbitTargetId() != kInvalidUniqueId;
|
||||||
|
|
||||||
switch (x2bc_nextState)
|
switch (x2bc_nextState)
|
||||||
{
|
{
|
||||||
|
@ -501,7 +501,7 @@ void CSamusHud::UpdateFreeLook(float dt, const CStateManager& mgr)
|
||||||
|
|
||||||
if (x298_freeLookIntf)
|
if (x298_freeLookIntf)
|
||||||
x298_freeLookIntf->SetFreeLookState(inFreeLook, lookControlHeld,
|
x298_freeLookIntf->SetFreeLookState(inFreeLook, lookControlHeld,
|
||||||
player.GetLockonObjectId() != kInvalidUniqueId,
|
player.GetOrbitTargetId() != kInvalidUniqueId,
|
||||||
offHorizonAngle);
|
offHorizonAngle);
|
||||||
|
|
||||||
if (x564_freeLookSfx)
|
if (x564_freeLookSfx)
|
||||||
|
|
|
@ -12,7 +12,7 @@ CBeetle::CBeetle(TUniqueId uid, const std::string& name, const CEntityInfo& info
|
||||||
const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor, CBeetle::EEntranceType, const CDamageInfo&,
|
const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor, CBeetle::EEntranceType, const CDamageInfo&,
|
||||||
const CDamageVulnerability&, const zeus::CVector3f&, float, float, float, const CDamageVulnerability&,
|
const CDamageVulnerability&, const zeus::CVector3f&, float, float, float, const CDamageVulnerability&,
|
||||||
const CActorParameters& aParams, const rstl::optional_object<CStaticRes>)
|
const CActorParameters& aParams, const rstl::optional_object<CStaticRes>)
|
||||||
: CPatterned(EUnknown::Three, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Ground,
|
: CPatterned(ECharacter::Beetle, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Ground,
|
||||||
EColliderType::One, EBodyType::One, aParams, bool(flavor))
|
EColliderType::One, EBodyType::One, aParams, bool(flavor))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ set(MP1_WORLD_SOURCES
|
||||||
CSpacePirate.hpp CSpacePirate.cpp
|
CSpacePirate.hpp CSpacePirate.cpp
|
||||||
CBabygoth.hpp CBabygoth.cpp
|
CBabygoth.hpp CBabygoth.cpp
|
||||||
CMetroidPrimeRelay.hpp CMetroidPrimeRelay.cpp
|
CMetroidPrimeRelay.hpp CMetroidPrimeRelay.cpp
|
||||||
CActorContraption.hpp CActorContraption.cpp)
|
CActorContraption.hpp CActorContraption.cpp
|
||||||
|
CThardusRockProjectile.hpp CThardusRockProjectile.cpp)
|
||||||
|
|
||||||
runtime_add_list(World MP1_WORLD_SOURCES)
|
runtime_add_list(World MP1_WORLD_SOURCES)
|
||||||
|
|
|
@ -11,7 +11,7 @@ CNewIntroBoss::CNewIntroBoss(TUniqueId uid, const std::string& name, const CEnti
|
||||||
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo,
|
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo,
|
||||||
const CActorParameters& actParms, float, u32, const CDamageInfo& dInfo,
|
const CActorParameters& actParms, float, u32, const CDamageInfo& dInfo,
|
||||||
u32, u32, u32, u32)
|
u32, u32, u32, u32)
|
||||||
: CPatterned(EUnknown::TwentyThree, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo,
|
: CPatterned(ECharacter::NewIntroBoss, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo,
|
||||||
EMovementType::Flyer, EColliderType::One, EBodyType::Two, actParms, true)
|
EMovementType::Flyer, EColliderType::One, EBodyType::Two, actParms, true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace MP1
|
||||||
CSpacePirate::CSpacePirate(TUniqueId uid, const std::string& name, const CEntityInfo& info, const zeus::CTransform& xf,
|
CSpacePirate::CSpacePirate(TUniqueId uid, const std::string& name, const CEntityInfo& info, const zeus::CTransform& xf,
|
||||||
CModelData&& mData, const CActorParameters& aParams, const CPatternedInfo& pInfo, CInputStream& in,
|
CModelData&& mData, const CActorParameters& aParams, const CPatternedInfo& pInfo, CInputStream& in,
|
||||||
u32 propCount)
|
u32 propCount)
|
||||||
: CPatterned(EUnknown::ThirtyFour, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo, EMovementType::Ground,
|
: CPatterned(ECharacter::SpacePirate, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo, EMovementType::Ground,
|
||||||
EColliderType::One, EBodyType::One, aParams, true)
|
EColliderType::One, EBodyType::One, aParams, true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include "CThardusRockProjectile.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
CThardusRockProjectile::CThardusRockProjectile(
|
||||||
|
TUniqueId uid, const std::string& name, const CEntityInfo& info,
|
||||||
|
const zeus::CTransform& xf, CModelData&& modelData, const CActorParameters& aParms,
|
||||||
|
const CPatternedInfo& patternedInfo, const std::vector<CModelData>& mDataVec, u32)
|
||||||
|
: CPatterned(ECharacter::ThardusRockProjectile, uid, name, EFlavorType::Zero, info, xf, std::move(modelData),
|
||||||
|
patternedInfo, EMovementType::Flyer, EColliderType::One, EBodyType::Three, aParms, true)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef __URDE_MP1_CTHARDUSROCKPROJECTILE_HPP__
|
||||||
|
#define __URDE_MP1_CTHARDUSROCKPROJECTILE_HPP__
|
||||||
|
|
||||||
|
#include "World/CPatterned.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
class CThardusRockProjectile : public CPatterned
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static constexpr ECharacter CharacterType = ECharacter::ThardusRockProjectile;
|
||||||
|
CThardusRockProjectile(TUniqueId uid, const std::string& name, const CEntityInfo& info,
|
||||||
|
const zeus::CTransform& xf, CModelData&& modelData, const CActorParameters& aParms,
|
||||||
|
const CPatternedInfo& patternedInfo, const std::vector<CModelData>& mDataVec, u32);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __URDE_MP1_CTHARDUSROCKPROJECTILE_HPP__
|
|
@ -10,7 +10,7 @@ CWarWasp::CWarWasp(TUniqueId uid, const std::string& name, const CEntityInfo& in
|
||||||
CModelData&& mData, const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor,
|
CModelData&& mData, const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor,
|
||||||
CPatterned::EColliderType collider, const CDamageInfo& dInfo1, const CActorParameters& actorParms,
|
CPatterned::EColliderType collider, const CDamageInfo& dInfo1, const CActorParameters& actorParms,
|
||||||
ResId weapon, const CDamageInfo& dInfo2, ResId particle, u32 w3)
|
ResId weapon, const CDamageInfo& dInfo2, ResId particle, u32 w3)
|
||||||
: CPatterned(EUnknown::ThirtyNine, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Flyer, collider,
|
: CPatterned(ECharacter::WarWasp, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Flyer, collider,
|
||||||
EBodyType::Three, actorParms, false)
|
EBodyType::Three, actorParms, false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ CENTITY_TYPES = (
|
||||||
EndNamespace(),
|
EndNamespace(),
|
||||||
('CPathCamera', 'Camera/CPathCamera.hpp'),
|
('CPathCamera', 'Camera/CPathCamera.hpp'),
|
||||||
('CAi', 'World/CAi.hpp'),
|
('CAi', 'World/CAi.hpp'),
|
||||||
|
('CPatterned', 'World/CPatterned.hpp'),
|
||||||
('CPhysicsActor', 'World/CPhysicsActor.hpp'),
|
('CPhysicsActor', 'World/CPhysicsActor.hpp'),
|
||||||
('CPlayer', 'World/CPhysicsActor.hpp'),
|
('CPlayer', 'World/CPhysicsActor.hpp'),
|
||||||
('CRepulsor', 'World/CRepulsor.hpp'),
|
('CRepulsor', 'World/CRepulsor.hpp'),
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include "CEnergyProjectile.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
CEnergyProjectile::CEnergyProjectile(bool active, const TToken<CWeaponDescription>& desc, EWeaponType type,
|
||||||
|
const zeus::CTransform& xf, EMaterialTypes materials, const CDamageInfo& damage,
|
||||||
|
TUniqueId id0, TAreaId aid, TUniqueId id1, TUniqueId id2, u32 w1, bool b1,
|
||||||
|
const zeus::CVector3f& scale,
|
||||||
|
const rstl::optional_object<TLockedToken<CGenDescription>>& particle,
|
||||||
|
s16 w2, bool b2)
|
||||||
|
: CGameProjectile(active, desc, "GameProjectile", type, xf, materials, damage, id0, aid,
|
||||||
|
id1, id2, w1, b1, scale, particle, w2, b2),
|
||||||
|
x2ec_dir(xf.basis[1]), x2f8_mag(x2ec_dir.magnitude()),
|
||||||
|
x2fc_camShake(CCameraShakeData::BuildProjectileCameraShake(0.5f, 0.75f))
|
||||||
|
{
|
||||||
|
xe6_27_ = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#ifndef __URDE_CENERGYPROJECTILE_HPP__
|
||||||
|
#define __URDE_CENERGYPROJECTILE_HPP__
|
||||||
|
|
||||||
|
#include "CGameProjectile.hpp"
|
||||||
|
#include "Camera/CCameraShakeData.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
class CEnergyProjectile : public CGameProjectile
|
||||||
|
{
|
||||||
|
u32 x2e8_ = 0;
|
||||||
|
zeus::CVector3f x2ec_dir;
|
||||||
|
float x2f8_mag;
|
||||||
|
CCameraShakeData x2fc_camShake;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
bool x3d0_24_ : 1;
|
||||||
|
bool x3d0_25_ : 1;
|
||||||
|
bool x3d0_26_ : 1;
|
||||||
|
bool x3d0_27_ : 1;
|
||||||
|
};
|
||||||
|
u32 _dummy = 0;
|
||||||
|
};
|
||||||
|
float x3d4_ = 0.f;
|
||||||
|
public:
|
||||||
|
CEnergyProjectile(bool active, const TToken<CWeaponDescription>& desc, EWeaponType type,
|
||||||
|
const zeus::CTransform& xf, EMaterialTypes materials, const CDamageInfo& damage,
|
||||||
|
TUniqueId id0, TAreaId aid, TUniqueId id1, TUniqueId id2, u32 w1, bool b1,
|
||||||
|
const zeus::CVector3f& scale,
|
||||||
|
const rstl::optional_object<TLockedToken<CGenDescription>>& particle,
|
||||||
|
s16 w2, bool b2);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __URDE_CENERGYPROJECTILE_HPP__
|
|
@ -23,7 +23,7 @@ void CGameProjectile::Accept(urde::IVisitor& visitor) { visitor.Visit(this); }
|
||||||
|
|
||||||
void CGameProjectile::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId /*uid*/, CStateManager& mgr)
|
void CGameProjectile::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId /*uid*/, CStateManager& mgr)
|
||||||
{
|
{
|
||||||
if (msg == EScriptObjectMessage::InternalMessage15)
|
if (msg == EScriptObjectMessage::UpdateSplashInhabitant)
|
||||||
{
|
{
|
||||||
if (!x2e4_27_)
|
if (!x2e4_27_)
|
||||||
{
|
{
|
||||||
|
@ -31,12 +31,12 @@ void CGameProjectile::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId /*uid*
|
||||||
x2e4_26_ = true;
|
x2e4_26_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (msg == EScriptObjectMessage::InternalMessage16)
|
else if (msg == EScriptObjectMessage::UpdateSplashInhabitant)
|
||||||
{
|
{
|
||||||
if (!x2e4_26_)
|
if (!x2e4_26_)
|
||||||
x2e4_26_ = true;
|
x2e4_26_ = true;
|
||||||
}
|
}
|
||||||
else if (msg == EScriptObjectMessage::InternalMessage17)
|
else if (msg == EScriptObjectMessage::RemoveSplashInhabitant)
|
||||||
{
|
{
|
||||||
if (x2e4_26_)
|
if (x2e4_26_)
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,6 +24,11 @@ CPlayerGun::CPlayerGun(TUniqueId id)
|
||||||
/* TODO: Finish */
|
/* TODO: Finish */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPlayerGun::AcceptScriptMessage(EScriptObjectMessage, TUniqueId, CStateManager&)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayerGun::AsyncLoadSuit(CStateManager& mgr)
|
void CPlayerGun::AsyncLoadSuit(CStateManager& mgr)
|
||||||
{
|
{
|
||||||
x72c_currentBeam->AsyncLoadSuitArm(mgr);
|
x72c_currentBeam->AsyncLoadSuitArm(mgr);
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "Particle/CElementGen.hpp"
|
#include "Particle/CElementGen.hpp"
|
||||||
#include "Character/CModelData.hpp"
|
#include "Character/CModelData.hpp"
|
||||||
#include "World/CWorldShadow.hpp"
|
#include "World/CWorldShadow.hpp"
|
||||||
|
#include "World/ScriptObjectSupport.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -206,6 +207,7 @@ private:
|
||||||
public:
|
public:
|
||||||
CPlayerGun(TUniqueId id);
|
CPlayerGun(TUniqueId id);
|
||||||
|
|
||||||
|
void AcceptScriptMessage(EScriptObjectMessage, TUniqueId, CStateManager&);
|
||||||
void AsyncLoadSuit(CStateManager& mgr);
|
void AsyncLoadSuit(CStateManager& mgr);
|
||||||
void TouchModel(CStateManager& stateMgr);
|
void TouchModel(CStateManager& stateMgr);
|
||||||
EMissleMode GetMissleMode() const { return x31c_missileMode; }
|
EMissleMode GetMissleMode() const { return x31c_missileMode; }
|
||||||
|
|
|
@ -21,6 +21,7 @@ public:
|
||||||
Unknown1 = (1 << 7),
|
Unknown1 = (1 << 7),
|
||||||
Bombs = (1 << 8),
|
Bombs = (1 << 8),
|
||||||
PowerBombs = (1 << 9),
|
PowerBombs = (1 << 9),
|
||||||
|
StaticInterference = (1 << 14),
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -35,7 +36,7 @@ private:
|
||||||
float x148_;
|
float x148_;
|
||||||
float x14c_;
|
float x14c_;
|
||||||
float x150_;
|
float x150_;
|
||||||
float x154_;
|
float x154_interferenceDuration;
|
||||||
public:
|
public:
|
||||||
CWeapon(TUniqueId, TAreaId, bool, TUniqueId, EWeaponType, const std::string&, const zeus::CTransform&,
|
CWeapon(TUniqueId, TAreaId, bool, TUniqueId, EWeaponType, const std::string&, const zeus::CTransform&,
|
||||||
const CMaterialFilter&, const CMaterialList&, const CDamageInfo&, EProjectileAttrib, CModelData&&);
|
const CMaterialFilter&, const CMaterialList&, const CDamageInfo&, EProjectileAttrib, CModelData&&);
|
||||||
|
@ -51,6 +52,7 @@ public:
|
||||||
const CDamageInfo& GetDamageInfo() const;
|
const CDamageInfo& GetDamageInfo() const;
|
||||||
CDamageInfo& DamageInfo();
|
CDamageInfo& DamageInfo();
|
||||||
void SetDamageInfo(const CDamageInfo&);
|
void SetDamageInfo(const CDamageInfo&);
|
||||||
|
float GetInterferenceDuration() const { return x154_interferenceDuration; }
|
||||||
|
|
||||||
void Think(float, CStateManager &) {}
|
void Think(float, CStateManager &) {}
|
||||||
void Render(const CStateManager&) const {}
|
void Render(const CStateManager&) const {}
|
||||||
|
|
|
@ -81,10 +81,10 @@ void CActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateMana
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::InternalMessage15: // 37
|
case EScriptObjectMessage::UpdateSplashInhabitant: // 37
|
||||||
SetInFluid(true, uid);
|
SetInFluid(true, uid);
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::InternalMessage17: // 39
|
case EScriptObjectMessage::RemoveSplashInhabitant: // 39
|
||||||
SetInFluid(false, kInvalidUniqueId);
|
SetInFluid(false, kInvalidUniqueId);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -251,16 +251,16 @@ void CActor::SetInFluid(bool in, TUniqueId uid)
|
||||||
{
|
{
|
||||||
if (in)
|
if (in)
|
||||||
{
|
{
|
||||||
xe6_26_inFluid = false;
|
xe6_24_fluidCounter += 1;
|
||||||
xc4_fluidId = uid;
|
xc4_fluidId = uid;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!xe6_26_inFluid)
|
if (!xe6_24_fluidCounter)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xe6_26_inFluid = true;
|
xe6_24_fluidCounter -= 1;
|
||||||
if (xe6_26_inFluid == 0)
|
if (xe6_24_fluidCounter == 0)
|
||||||
xc4_fluidId = kInvalidUniqueId;
|
xc4_fluidId = kInvalidUniqueId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ protected:
|
||||||
bool xe5_26_muted : 1;
|
bool xe5_26_muted : 1;
|
||||||
bool xe5_27_useInSortedLists : 1;
|
bool xe5_27_useInSortedLists : 1;
|
||||||
bool xe5_28_callTouch : 1;
|
bool xe5_28_callTouch : 1;
|
||||||
bool xe6_26_inFluid : 1;
|
u8 xe6_24_fluidCounter : 3;
|
||||||
u8 xe6_27_ : 3;
|
u8 xe6_27_ : 3;
|
||||||
bool xe6_30_enablePitchBend : 1;
|
bool xe6_30_enablePitchBend : 1;
|
||||||
bool xe7_29_ : 1;
|
bool xe7_29_ : 1;
|
||||||
|
|
|
@ -26,7 +26,7 @@ private:
|
||||||
u32 x8_;
|
u32 x8_;
|
||||||
u32 xc_;
|
u32 xc_;
|
||||||
float x40_;
|
float x40_;
|
||||||
EFluidType x44_;
|
EFluidType x44_fluidType;
|
||||||
float x48_;
|
float x48_;
|
||||||
public:
|
public:
|
||||||
CFluidPlane(u32, u32, u32, EFluidType, float, const CFluidUVMotion&, float);
|
CFluidPlane(u32, u32, u32, EFluidType, float, const CFluidUVMotion&, float);
|
||||||
|
@ -35,7 +35,7 @@ public:
|
||||||
CScriptWater& water, CStateManager& mgr);
|
CScriptWater& water, CStateManager& mgr);
|
||||||
virtual void Update();
|
virtual void Update();
|
||||||
float GetAlpha() const;
|
float GetAlpha() const;
|
||||||
EFluidType GetFluidType() const;
|
EFluidType GetFluidType() const { return x44_fluidType; }
|
||||||
const CFluidUVMotion& GetUVMotion() const;
|
const CFluidUVMotion& GetUVMotion() const;
|
||||||
void GetColorTexture() const;
|
void GetColorTexture() const;
|
||||||
bool HasColorTexture() const;
|
bool HasColorTexture() const;
|
||||||
|
|
|
@ -11,6 +11,11 @@ CMorphBall::CMorphBall(CPlayer& player, float)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMorphBall::AcceptScriptMessage(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void CMorphBall::DrawBallShadow(const CStateManager& mgr)
|
void CMorphBall::DrawBallShadow(const CStateManager& mgr)
|
||||||
{
|
{
|
||||||
if (!x1e50_shadow)
|
if (!x1e50_shadow)
|
||||||
|
|
|
@ -31,11 +31,13 @@ public:
|
||||||
};
|
};
|
||||||
private:
|
private:
|
||||||
CPlayer& x0_player;
|
CPlayer& x0_player;
|
||||||
|
u32 x187c_ = 0;
|
||||||
float x1DE8_boostTime = 0.f;
|
float x1DE8_boostTime = 0.f;
|
||||||
CMorphBallShadow* x1e50_shadow = nullptr;
|
CMorphBallShadow* x1e50_shadow = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMorphBall(CPlayer& player, float);
|
CMorphBall(CPlayer& player, float);
|
||||||
|
void AcceptScriptMessage(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr);
|
||||||
ESpiderBallState GetSpiderBallState() const { return ESpiderBallState::Zero; }
|
ESpiderBallState GetSpiderBallState() const { return ESpiderBallState::Zero; }
|
||||||
bool InSpiderBallMode() const { return false; }
|
bool InSpiderBallMode() const { return false; }
|
||||||
zeus::CVector3f GetBallContactSurfaceNormal() const { return {}; }
|
zeus::CVector3f GetBallContactSurfaceNormal() const { return {}; }
|
||||||
|
@ -49,7 +51,7 @@ public:
|
||||||
float GetBallRadius() const { return 0.f; }
|
float GetBallRadius() const { return 0.f; }
|
||||||
float GetBallTouchRadius() const { return 0.f; }
|
float GetBallTouchRadius() const { return 0.f; }
|
||||||
void ForwardInput(const CFinalInput&) const {}
|
void ForwardInput(const CFinalInput&) const {}
|
||||||
void ComputBallMovement(const CFinalInput&, CStateManager&, float) {}
|
void ComputeBallMovement(const CFinalInput&, CStateManager&, float) {}
|
||||||
bool IsMovementAllowed() const { return false; }
|
bool IsMovementAllowed() const { return false; }
|
||||||
void UpdateSpiderBall(const CFinalInput&, CStateManager&, float) {}
|
void UpdateSpiderBall(const CFinalInput&, CStateManager&, float) {}
|
||||||
void ApplySpiderBallSwingingForces(const CFinalInput&, CStateManager&, float) {}
|
void ApplySpiderBallSwingingForces(const CFinalInput&, CStateManager&, float) {}
|
||||||
|
@ -101,7 +103,7 @@ public:
|
||||||
void IsMorphBallTransitionFlashValid() const {}
|
void IsMorphBallTransitionFlashValid() const {}
|
||||||
void RenderDamageEffects(const CStateManager&, const zeus::CTransform&) const {}
|
void RenderDamageEffects(const CStateManager&, const zeus::CTransform&) const {}
|
||||||
void UpdateHalfPipeStatus(CStateManager&, float) {}
|
void UpdateHalfPipeStatus(CStateManager&, float) {}
|
||||||
void GetIsInHalfPipeMode() const {}
|
bool GetIsInHalfPipeMode() const { return false; }
|
||||||
void SetIsInHalfPipeMode(bool) {}
|
void SetIsInHalfPipeMode(bool) {}
|
||||||
void GetIsInHalfPipeModeInAir() const {}
|
void GetIsInHalfPipeModeInAir() const {}
|
||||||
void SetIsInHalfPipeModeInAir(bool) {}
|
void SetIsInHalfPipeModeInAir(bool) {}
|
||||||
|
@ -132,6 +134,8 @@ public:
|
||||||
void LoadAnimationTokens(const std::string&) {}
|
void LoadAnimationTokens(const std::string&) {}
|
||||||
void TakeDamage(float) {}
|
void TakeDamage(float) {}
|
||||||
void DrawBallShadow(const CStateManager& mgr);
|
void DrawBallShadow(const CStateManager& mgr);
|
||||||
|
void StartLandingSfx() {}
|
||||||
|
bool GetX187c() const { return x187c_; }
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ CMaterialList gkPatternedGroundMaterialList(EMaterialTypes::Character, EMaterial
|
||||||
CMaterialList gkPatternedFlyerMaterialList(EMaterialTypes::Character, EMaterialTypes::Solid,
|
CMaterialList gkPatternedFlyerMaterialList(EMaterialTypes::Character, EMaterialTypes::Solid,
|
||||||
EMaterialTypes::Orbit, EMaterialTypes::Target);
|
EMaterialTypes::Orbit, EMaterialTypes::Target);
|
||||||
|
|
||||||
CPatterned::CPatterned(EUnknown, TUniqueId uid, const std::string& name, CPatterned::EFlavorType flavor,
|
CPatterned::CPatterned(ECharacter character, TUniqueId uid, const std::string& name, CPatterned::EFlavorType flavor,
|
||||||
const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData,
|
const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData,
|
||||||
const CPatternedInfo& pInfo, CPatterned::EMovementType moveType, CPatterned::EColliderType,
|
const CPatternedInfo& pInfo, CPatterned::EMovementType moveType, CPatterned::EColliderType,
|
||||||
EBodyType, const CActorParameters& actorParms, bool)
|
EBodyType, const CActorParameters& actorParms, bool)
|
||||||
|
@ -21,7 +21,8 @@ CPatterned::CPatterned(EUnknown, TUniqueId uid, const std::string& name, CPatter
|
||||||
zeus::CVector3f{pInfo.xc4_halfExtent, pInfo.xc4_halfExtent, pInfo.xc8_height}),
|
zeus::CVector3f{pInfo.xc4_halfExtent, pInfo.xc4_halfExtent, pInfo.xc8_height}),
|
||||||
pInfo.x0_mass, pInfo.x54_healthInfo, pInfo.x5c_damageVulnerability,
|
pInfo.x0_mass, pInfo.x54_healthInfo, pInfo.x5c_damageVulnerability,
|
||||||
moveType == EMovementType::Flyer ? gkPatternedFlyerMaterialList : gkPatternedGroundMaterialList,
|
moveType == EMovementType::Flyer ? gkPatternedFlyerMaterialList : gkPatternedGroundMaterialList,
|
||||||
pInfo.xfc_stateMachineId, actorParms, pInfo.xd8_stepUpHeight, 0.8f)
|
pInfo.xfc_stateMachineId, actorParms, pInfo.xd8_stepUpHeight, 0.8f),
|
||||||
|
x34c_character(character)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "CAi.hpp"
|
#include "CAi.hpp"
|
||||||
#include "Character/CBodyController.hpp"
|
#include "Character/CBodyController.hpp"
|
||||||
|
#include "TCastTo.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -11,13 +12,47 @@ class CPatternedInfo;
|
||||||
class CPatterned : public CAi
|
class CPatterned : public CAi
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum class EUnknown
|
enum class ECharacter
|
||||||
{
|
{
|
||||||
Zero = 0,
|
AtomicAlpha = 0,
|
||||||
Three = 3,
|
AtomicBeta = 1,
|
||||||
TwentyThree = 23,
|
Babygoth = 2,
|
||||||
ThirtyFour = 34,
|
Beetle = 3,
|
||||||
ThirtyNine
|
BloodFlower = 4,
|
||||||
|
Burrower = 5,
|
||||||
|
ChozoGhost = 6,
|
||||||
|
Drone = 7,
|
||||||
|
ElitePirate = 8,
|
||||||
|
EyeBall = 9,
|
||||||
|
FireFlea = 10,
|
||||||
|
Flaahgra = 11,
|
||||||
|
FlaahgraTentacle = 12,
|
||||||
|
FlickerBat = 13,
|
||||||
|
FlyingPirate = 14,
|
||||||
|
IceSheeegoth = 15,
|
||||||
|
JellyZap = 16,
|
||||||
|
Magdolite = 17,
|
||||||
|
Metaree = 18,
|
||||||
|
Metroid = 19,
|
||||||
|
MetroidBeta = 20,
|
||||||
|
MetroidPrimeExo = 21,
|
||||||
|
MetroidPrimeEssence = 22,
|
||||||
|
NewIntroBoss = 23,
|
||||||
|
Parasite = 24,
|
||||||
|
PuddleSpore = 27,
|
||||||
|
PuddleToad = 28,
|
||||||
|
Puffer = 29,
|
||||||
|
Ridley = 30,
|
||||||
|
Ripper = 31,
|
||||||
|
Seedling = 32,
|
||||||
|
SpacePirate = 34,
|
||||||
|
SpankWeed = 35,
|
||||||
|
PhazonHealingNodule = 35,
|
||||||
|
Thardus = 36,
|
||||||
|
ThardusRockProjectile = 37,
|
||||||
|
Tryclops = 38,
|
||||||
|
WarWasp = 39,
|
||||||
|
EnergyBall = 40
|
||||||
};
|
};
|
||||||
enum class EFlavorType
|
enum class EFlavorType
|
||||||
{
|
{
|
||||||
|
@ -35,14 +70,33 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
ECharacter x34c_character;
|
||||||
public:
|
public:
|
||||||
CPatterned(EUnknown unk, TUniqueId uid, const std::string& name, EFlavorType flavor, const CEntityInfo& info,
|
CPatterned(ECharacter character, TUniqueId uid, const std::string& name, EFlavorType flavor, const CEntityInfo& info,
|
||||||
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pinfo,
|
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pinfo,
|
||||||
CPatterned::EMovementType movement, EColliderType collider, EBodyType body,
|
CPatterned::EMovementType movement, EColliderType collider, EBodyType body,
|
||||||
const CActorParameters& params, bool b1);
|
const CActorParameters& params, bool b1);
|
||||||
|
|
||||||
virtual void Death(CStateManager&, const zeus::CVector3f&, EStateMsg) {}
|
virtual void Death(CStateManager&, const zeus::CVector3f&, EStateMsg) {}
|
||||||
virtual void KnockBack(const zeus::CVector3f&, CStateManager&, const CDamageInfo& info, EKnockBackType, bool, float) {}
|
virtual void KnockBack(const zeus::CVector3f&, CStateManager&, const CDamageInfo& info, EKnockBackType, bool, float) {}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
static T* CastTo(CEntity* ent)
|
||||||
|
{
|
||||||
|
if (TCastToPtr<CPatterned> patterned = ent)
|
||||||
|
if (patterned->x34c_character == T::CharacterType)
|
||||||
|
return static_cast<T*>(patterned.GetPtr());
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
static const T* CastTo(const CEntity* ent)
|
||||||
|
{
|
||||||
|
if (TCastToConstPtr<CPatterned> patterned = ent)
|
||||||
|
if (patterned->x34c_character == T::CharacterType)
|
||||||
|
return static_cast<const T*>(patterned.GetPtr());
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,8 +103,8 @@ const zeus::CAABox& CPhysicsActor::GetBaseBoundingBox() const { return x1a4_base
|
||||||
void CPhysicsActor::AddMotionState(const CMotionState& mst)
|
void CPhysicsActor::AddMotionState(const CMotionState& mst)
|
||||||
{
|
{
|
||||||
zeus::CNUQuaternion q{x34_transform.buildMatrix3f()};
|
zeus::CNUQuaternion q{x34_transform.buildMatrix3f()};
|
||||||
// TODO: Jack please verify this assignment: 8011B514
|
q += mst.xc_orientation;
|
||||||
x34_transform = zeus::CTransform::Translate(x34_transform.origin) * zeus::CMatrix3f(q);
|
x34_transform = zeus::CTransform(q, x34_transform.origin);
|
||||||
|
|
||||||
xe4_27_ = true;
|
xe4_27_ = true;
|
||||||
xe4_28_ = true;
|
xe4_28_ = true;
|
||||||
|
@ -124,7 +124,7 @@ CMotionState CPhysicsActor::GetMotionState() const
|
||||||
|
|
||||||
void CPhysicsActor::SetMotionState(const CMotionState& mst)
|
void CPhysicsActor::SetMotionState(const CMotionState& mst)
|
||||||
{
|
{
|
||||||
x34_transform = zeus::CTransform::Translate(x34_transform.origin) * zeus::CMatrix3f(mst.xc_orientation);
|
x34_transform = zeus::CTransform(mst.xc_orientation, x34_transform.origin);
|
||||||
|
|
||||||
xe4_27_ = true;
|
xe4_27_ = true;
|
||||||
xe4_28_ = true;
|
xe4_28_ = true;
|
||||||
|
@ -275,7 +275,7 @@ bool CPhysicsActor::WillMove(const CStateManager&)
|
||||||
void CPhysicsActor::SetPhysicsState(const CPhysicsState& state)
|
void CPhysicsActor::SetPhysicsState(const CPhysicsState& state)
|
||||||
{
|
{
|
||||||
SetTranslation(state.GetTranslation());
|
SetTranslation(state.GetTranslation());
|
||||||
x34_transform = zeus::CTransform::Translate(x34_transform.origin) * zeus::CMatrix3f(state.GetOrientation());
|
x34_transform = zeus::CTransform(state.GetOrientation(), x34_transform.origin);
|
||||||
xe4_27_ = true;
|
xe4_27_ = true;
|
||||||
xe4_28_ = true;
|
xe4_28_ = true;
|
||||||
xe4_29_ = true;
|
xe4_29_ = true;
|
||||||
|
@ -368,41 +368,4 @@ void CPhysicsActor::UseCollisionImpulses()
|
||||||
ComputeDerivedQuantities();
|
ComputeDerivedQuantities();
|
||||||
}
|
}
|
||||||
|
|
||||||
CPhysicsState::CPhysicsState(const zeus::CVector3f& translation, const zeus::CQuaternion& orient,
|
|
||||||
const zeus::CVector3f& v2, const zeus::CAxisAngle& a1, const zeus::CVector3f& v3,
|
|
||||||
const zeus::CVector3f& v4, const zeus::CVector3f& v5, const zeus::CAxisAngle& a2,
|
|
||||||
const zeus::CAxisAngle& a3)
|
|
||||||
: x0_translation(translation)
|
|
||||||
, xc_orientation(orient)
|
|
||||||
, x1c_constantForce(v2)
|
|
||||||
, x28_angularMomentum(a1)
|
|
||||||
, x34_momentum(v3)
|
|
||||||
, x40_force(v4)
|
|
||||||
, x4c_impulse(v5)
|
|
||||||
, x58_torque(a2)
|
|
||||||
, x64_angularImpulse(a3)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CPhysicsState::SetTranslation(const zeus::CVector3f& tr) { x0_translation = tr; }
|
|
||||||
|
|
||||||
void CPhysicsState::SetOrientation(const zeus::CQuaternion& orient) { xc_orientation = orient; }
|
|
||||||
|
|
||||||
const zeus::CQuaternion& CPhysicsState::GetOrientation() const { return xc_orientation; }
|
|
||||||
|
|
||||||
const zeus::CVector3f& CPhysicsState::GetTranslation() const { return x0_translation; }
|
|
||||||
|
|
||||||
const zeus::CVector3f& CPhysicsState::GetConstantForceWR() const { return x1c_constantForce; }
|
|
||||||
|
|
||||||
const zeus::CAxisAngle& CPhysicsState::GetAngularMomentumWR() const { return x28_angularMomentum; }
|
|
||||||
|
|
||||||
const zeus::CVector3f& CPhysicsState::GetMomentumWR() const { return x34_momentum; }
|
|
||||||
|
|
||||||
const zeus::CVector3f& CPhysicsState::GetForceWR() const { return x40_force; }
|
|
||||||
|
|
||||||
const zeus::CVector3f& CPhysicsState::GetImpulseWR() const { return x4c_impulse; }
|
|
||||||
|
|
||||||
const zeus::CAxisAngle& CPhysicsState::GetTorque() const { return x58_torque; }
|
|
||||||
|
|
||||||
const zeus::CAxisAngle& CPhysicsState::GetAngularImpulseWR() const { return x64_angularImpulse; }
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,21 +46,32 @@ class CPhysicsState
|
||||||
zeus::CAxisAngle x64_angularImpulse;
|
zeus::CAxisAngle x64_angularImpulse;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CPhysicsState(const zeus::CVector3f&, const zeus::CQuaternion&, const zeus::CVector3f&, const zeus::CAxisAngle&,
|
CPhysicsState(const zeus::CVector3f& translation, const zeus::CQuaternion& orient,
|
||||||
const zeus::CVector3f&, const zeus::CVector3f&, const zeus::CVector3f&, const zeus::CAxisAngle&,
|
const zeus::CVector3f& v2, const zeus::CAxisAngle& a1, const zeus::CVector3f& v3,
|
||||||
const zeus::CAxisAngle&);
|
const zeus::CVector3f& v4, const zeus::CVector3f& v5, const zeus::CAxisAngle& a2,
|
||||||
|
const zeus::CAxisAngle& a3)
|
||||||
|
: x0_translation(translation)
|
||||||
|
, xc_orientation(orient)
|
||||||
|
, x1c_constantForce(v2)
|
||||||
|
, x28_angularMomentum(a1)
|
||||||
|
, x34_momentum(v3)
|
||||||
|
, x40_force(v4)
|
||||||
|
, x4c_impulse(v5)
|
||||||
|
, x58_torque(a2)
|
||||||
|
, x64_angularImpulse(a3)
|
||||||
|
{}
|
||||||
|
|
||||||
void SetOrientation(const zeus::CQuaternion&);
|
void SetTranslation(const zeus::CVector3f& tr) { x0_translation = tr; }
|
||||||
const zeus::CQuaternion& GetOrientation() const;
|
void SetOrientation(const zeus::CQuaternion& orient) { xc_orientation = orient; }
|
||||||
void SetTranslation(const zeus::CVector3f&);
|
const zeus::CQuaternion& GetOrientation() const { return xc_orientation; }
|
||||||
const zeus::CVector3f& GetTranslation() const;
|
const zeus::CVector3f& GetTranslation() const { return x0_translation; }
|
||||||
const zeus::CVector3f& GetConstantForceWR() const;
|
const zeus::CVector3f& GetConstantForceWR() const { return x1c_constantForce; }
|
||||||
const zeus::CAxisAngle& GetAngularMomentumWR() const;
|
const zeus::CAxisAngle& GetAngularMomentumWR() const { return x28_angularMomentum; }
|
||||||
const zeus::CVector3f& GetMomentumWR() const;
|
const zeus::CVector3f& GetMomentumWR() const { return x34_momentum; }
|
||||||
const zeus::CVector3f& GetForceWR() const;
|
const zeus::CVector3f& GetForceWR() const { return x40_force; }
|
||||||
const zeus::CVector3f& GetImpulseWR() const;
|
const zeus::CVector3f& GetImpulseWR() const { return x4c_impulse; }
|
||||||
const zeus::CAxisAngle& GetTorque() const;
|
const zeus::CAxisAngle& GetTorque() const { return x58_torque; }
|
||||||
const zeus::CAxisAngle& GetAngularImpulseWR() const;
|
const zeus::CAxisAngle& GetAngularImpulseWR() const { return x64_angularImpulse; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPhysicsActor : public CActor
|
class CPhysicsActor : public CActor
|
||||||
|
|
|
@ -11,6 +11,10 @@
|
||||||
#include "Camera/CCinematicCamera.hpp"
|
#include "Camera/CCinematicCamera.hpp"
|
||||||
#include "TCastTo.hpp"
|
#include "TCastTo.hpp"
|
||||||
#include "CScriptGrapplePoint.hpp"
|
#include "CScriptGrapplePoint.hpp"
|
||||||
|
#include "CPatterned.hpp"
|
||||||
|
#include "CScriptWater.hpp"
|
||||||
|
#include "Weapon/CEnergyProjectile.hpp"
|
||||||
|
#include "MP1/World/CThardusRockProjectile.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -28,6 +32,8 @@ CPlayer::CPlayer(TUniqueId uid, const zeus::CTransform& xf, const zeus::CAABox&
|
||||||
stepDown), x7d0_animRes(resId, 0, playerScale, 0, true)
|
stepDown), x7d0_animRes(resId, 0, playerScale, 0, true)
|
||||||
{
|
{
|
||||||
x490_gun.reset(new CPlayerGun(uid));
|
x490_gun.reset(new CPlayerGun(uid));
|
||||||
|
x49c_gunNotFiringTimeout = g_tweakPlayerGun->GetGunNotFiringTime();
|
||||||
|
x4a0_inputFilter.reset(new CInputFilter());
|
||||||
x768_morphball.reset(new CMorphBall(*this, f4));
|
x768_morphball.reset(new CMorphBall(*this, f4));
|
||||||
x76c_cameraBob.reset(new CPlayerCameraBob(CPlayerCameraBob::ECameraBobType::One,
|
x76c_cameraBob.reset(new CPlayerCameraBob(CPlayerCameraBob::ECameraBobType::One,
|
||||||
zeus::CVector2f{CPlayerCameraBob::kCameraBobExtentX,
|
zeus::CVector2f{CPlayerCameraBob::kCameraBobExtentX,
|
||||||
|
@ -45,6 +51,31 @@ bool CPlayer::IsTransparent() const { return x588_alpha < 1.f; }
|
||||||
|
|
||||||
void CPlayer::Update(float, CStateManager& mgr) {}
|
void CPlayer::Update(float, CStateManager& mgr) {}
|
||||||
|
|
||||||
|
bool CPlayer::StartSamusVoiceSfx(u16 sfx, float vol, int prio)
|
||||||
|
{
|
||||||
|
if (x2f8_morphTransState == EPlayerMorphBallState::Morphed)
|
||||||
|
return false;
|
||||||
|
bool started = true;
|
||||||
|
if (x77c_samusVoiceSfx)
|
||||||
|
{
|
||||||
|
if (CSfxManager::IsPlaying(x77c_samusVoiceSfx))
|
||||||
|
{
|
||||||
|
started = false;
|
||||||
|
if (prio > x780_samusVoicePriority)
|
||||||
|
{
|
||||||
|
CSfxManager::SfxStop(x77c_samusVoiceSfx);
|
||||||
|
started = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (started)
|
||||||
|
{
|
||||||
|
x77c_samusVoiceSfx = CSfxManager::SfxStart(sfx, vol, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||||
|
x780_samusVoicePriority = prio;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return started;
|
||||||
|
}
|
||||||
|
|
||||||
bool CPlayer::IsPlayerDeadEnough() const
|
bool CPlayer::IsPlayerDeadEnough() const
|
||||||
{
|
{
|
||||||
if (x2f8_morphTransState == CPlayer::EPlayerMorphBallState::Unmorphed)
|
if (x2f8_morphTransState == CPlayer::EPlayerMorphBallState::Unmorphed)
|
||||||
|
@ -140,6 +171,40 @@ void CPlayer::UpdateFreeLook(float dt) {}
|
||||||
|
|
||||||
float CPlayer::GetMaximumPlayerPositiveVerticalVelocity(CStateManager&) const { return 0.f; }
|
float CPlayer::GetMaximumPlayerPositiveVerticalVelocity(CStateManager&) const { return 0.f; }
|
||||||
|
|
||||||
|
void CPlayer::StartLandingControlFreeze()
|
||||||
|
{
|
||||||
|
x760_controlsFrozen = true;
|
||||||
|
x764_controlsFrozenTimeout = 0.75f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlayer::EndLandingControlFreeze()
|
||||||
|
{
|
||||||
|
x760_controlsFrozen = false;
|
||||||
|
x764_controlsFrozenTimeout = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlayer::ProcessFrozenInput(float dt, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
x764_controlsFrozenTimeout -= dt;
|
||||||
|
if (x764_controlsFrozenTimeout <= 0.f)
|
||||||
|
{
|
||||||
|
EndLandingControlFreeze();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CFinalInput dummy;
|
||||||
|
if (x2f8_morphTransState == EPlayerMorphBallState::Morphed)
|
||||||
|
{
|
||||||
|
x768_morphball->ComputeBallMovement(dummy, mgr, dt);
|
||||||
|
x768_morphball->UpdateBallDynamics(mgr, dt);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ComputeMovement(dummy, mgr, dt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::ProcessInput(const CFinalInput&, CStateManager&) {}
|
void CPlayer::ProcessInput(const CFinalInput&, CStateManager&) {}
|
||||||
|
|
||||||
void CPlayer::Stop(CStateManager& stateMgr)
|
void CPlayer::Stop(CStateManager& stateMgr)
|
||||||
|
@ -160,13 +225,218 @@ void CPlayer::PreThink(float dt, CStateManager& mgr)
|
||||||
xa04_ = dt;
|
xa04_ = dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayer::AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&) {}
|
static const u16 skPlayerLandSfxSoft[] =
|
||||||
|
{
|
||||||
|
0xFFFF, 0x05E4, 0x05D2, 0x0621, 0x0658, 0xFFFF, 0x05E3, 0x0606,
|
||||||
|
0x05C0, 0x088E, 0x0694, 0x0638, 0x062B, 0xFFFF, 0x0621, 0x05D2,
|
||||||
|
0x05D2, 0x05C0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x05FB, 0x0625
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 skPlayerLandSfxHard[] =
|
||||||
|
{
|
||||||
|
0xFFFF, 0x0651, 0x064B, 0x0647, 0x065A, 0xFFFF, 0x0648, 0x064E,
|
||||||
|
0x064F, 0x08D7, 0x0696, 0x0650, 0x064C, 0xFFFF, 0x0647, 0x064B,
|
||||||
|
0x064B, 0x064F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0652, 0x064D
|
||||||
|
};
|
||||||
|
|
||||||
|
static const CMaterialFilter SolidMaterialFilter =
|
||||||
|
CMaterialFilter::MakeInclude(CMaterialList(EMaterialTypes::Solid));
|
||||||
|
|
||||||
|
void CPlayer::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
switch (msg)
|
||||||
|
{
|
||||||
|
case EScriptObjectMessage::OnGround:
|
||||||
|
if (x258_movementState != EPlayerMovementState::OnGround &&
|
||||||
|
x2f8_morphTransState != EPlayerMorphBallState::Morphed &&
|
||||||
|
x300_fallingTime > 0.3f)
|
||||||
|
{
|
||||||
|
if (x258_movementState != EPlayerMovementState::Falling)
|
||||||
|
{
|
||||||
|
float hardThres = 30.f * 2.f * -g_tweakPlayer->GetHardLandingVelocityThreshold();
|
||||||
|
hardThres = (hardThres != 0.f) ? hardThres * std::sqrt(hardThres) : 0.f;
|
||||||
|
float landVol = zeus::clamp(95.f, 1.6f * -x794_.z + 95.f, 127.f) / 127.f;
|
||||||
|
u16 landSfx;
|
||||||
|
if (-x794_.z < hardThres)
|
||||||
|
{
|
||||||
|
landSfx = GetMaterialSoundUnderPlayer(mgr, skPlayerLandSfxSoft, 24, 0xffff);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
landSfx = GetMaterialSoundUnderPlayer(mgr, skPlayerLandSfxHard, 24, 0xffff);
|
||||||
|
StartSamusVoiceSfx(1550, 1.f, 5);
|
||||||
|
x55c_ = 0.f;
|
||||||
|
x560_ = 10.f;
|
||||||
|
x564_ = x34_transform.origin;
|
||||||
|
x558_ = true;
|
||||||
|
mgr.GetCameraManager()->AddCameraShaker(
|
||||||
|
CCameraShakeData::BuildLandingCameraShakeData(0.3f, 1.25f), false);
|
||||||
|
StartLandingControlFreeze();
|
||||||
|
}
|
||||||
|
CSfxHandle handle =
|
||||||
|
CSfxManager::SfxStart(landSfx, landVol, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||||
|
ApplySubmergedPitchBend(handle);
|
||||||
|
|
||||||
|
float rumbleMag = -x794_.z / 110.f;
|
||||||
|
if (rumbleMag > 0.f)
|
||||||
|
{
|
||||||
|
if (std::fabs(rumbleMag) > 0.8f)
|
||||||
|
rumbleMag = (rumbleMag > 0.f) ? 0.8f : -0.8f;
|
||||||
|
mgr.GetRumbleManager().Rumble(mgr, ERumbleFxId::Fifteen, rumbleMag, ERumblePriority::One);
|
||||||
|
}
|
||||||
|
|
||||||
|
x2a0_ = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (x258_movementState != EPlayerMovementState::OnGround &&
|
||||||
|
x2f8_morphTransState == EPlayerMorphBallState::Morphed)
|
||||||
|
{
|
||||||
|
if (x138_velocity.z < -40.f && !x768_morphball->GetIsInHalfPipeMode() &&
|
||||||
|
x258_movementState == EPlayerMovementState::StartingJump &&
|
||||||
|
x300_fallingTime > 0.75f)
|
||||||
|
SetCoefficientOfRestitutionModifier(0.2f);
|
||||||
|
x768_morphball->StartLandingSfx();
|
||||||
|
if (x138_velocity.z < -5.f)
|
||||||
|
{
|
||||||
|
float rumbleMag = -x138_velocity.z / 110.f * 0.5f;
|
||||||
|
if (std::fabs(rumbleMag) > 0.8f)
|
||||||
|
rumbleMag = (rumbleMag > 0.f) ? 0.8f : -0.8f;
|
||||||
|
mgr.GetRumbleManager().Rumble(mgr, ERumbleFxId::Fifteen, rumbleMag, ERumblePriority::One);
|
||||||
|
x2a0_ = 0.f;
|
||||||
|
}
|
||||||
|
if (x138_velocity.z < -30.f)
|
||||||
|
{
|
||||||
|
float rumbleMag = -x138_velocity.z / 110.f;
|
||||||
|
if (std::fabs(rumbleMag) > 0.8f)
|
||||||
|
rumbleMag = (rumbleMag > 0.f) ? 0.8f : -0.8f;
|
||||||
|
mgr.GetRumbleManager().Rumble(mgr, ERumbleFxId::Fifteen, rumbleMag, ERumblePriority::One);
|
||||||
|
x2a0_ = 0.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x300_fallingTime = 0.f;
|
||||||
|
SetMoveState(EPlayerMovementState::OnGround, mgr);
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::Falling:
|
||||||
|
if (x2f8_morphTransState == EPlayerMorphBallState::Morphed)
|
||||||
|
if (x768_morphball->GetX187c() == 1)
|
||||||
|
break;
|
||||||
|
if (x2f8_morphTransState != EPlayerMorphBallState::Morphed)
|
||||||
|
SetMoveState(EPlayerMovementState::Falling, mgr);
|
||||||
|
else if (x258_movementState == EPlayerMovementState::OnGround)
|
||||||
|
SetMoveState(EPlayerMovementState::FallingMorphed, mgr);
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::LandOnNotFloor:
|
||||||
|
if (x2f8_morphTransState == EPlayerMorphBallState::Morphed &&
|
||||||
|
x768_morphball->GetX187c() == 1 &&
|
||||||
|
x258_movementState != EPlayerMovementState::StartingJump)
|
||||||
|
SetMoveState(EPlayerMovementState::StartingJump, mgr);
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::OnIceSurface:
|
||||||
|
x2ac_movementSurface = EPlayerMovementSurface::Ice;
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::OnMudSlowSurface:
|
||||||
|
x2ac_movementSurface = EPlayerMovementSurface::MudSlow;
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::OnNormalSurface:
|
||||||
|
x2ac_movementSurface = EPlayerMovementSurface::Normal;
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::InSnakeWeed:
|
||||||
|
x2ac_movementSurface = EPlayerMovementSurface::SnakeWeed;
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::AddSplashInhabitant:
|
||||||
|
{
|
||||||
|
SetInFluid(true, sender);
|
||||||
|
UpdateSubmerged(mgr);
|
||||||
|
CRayCastResult result =
|
||||||
|
mgr.RayStaticIntersection(x34_transform.origin, zeus::CVector3f::skDown,
|
||||||
|
0.5f * GetEyeHeight(), SolidMaterialFilter);
|
||||||
|
if (result.IsInvalid())
|
||||||
|
{
|
||||||
|
SetVelocityWR(x138_velocity * 0.095f);
|
||||||
|
xfc_constantForce *= 0.095f;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EScriptObjectMessage::UpdateSplashInhabitant:
|
||||||
|
UpdateSubmerged(mgr);
|
||||||
|
if (CheckSubmerged() && !mgr.GetPlayerState()->HasPowerUp(CPlayerState::EItemType::GravitySuit))
|
||||||
|
{
|
||||||
|
if (TCastToPtr<CScriptWater> water = mgr.ObjectById(xc4_fluidId))
|
||||||
|
{
|
||||||
|
switch (water->GetFluidPlane().GetFluidType())
|
||||||
|
{
|
||||||
|
case CFluidPlane::EFluidType::Zero:
|
||||||
|
x2b0_ = 0;
|
||||||
|
break;
|
||||||
|
case CFluidPlane::EFluidType::Two:
|
||||||
|
case CFluidPlane::EFluidType::Five:
|
||||||
|
x2ac_movementSurface = EPlayerMovementSurface::Fluid2Or5;
|
||||||
|
break;
|
||||||
|
case CFluidPlane::EFluidType::One:
|
||||||
|
x2b0_ = 0;
|
||||||
|
break;
|
||||||
|
case CFluidPlane::EFluidType::Three:
|
||||||
|
x2ac_movementSurface = EPlayerMovementSurface::Fluid3;
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x9c5_25_splashUpdated = true;
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::RemoveSplashInhabitant:
|
||||||
|
SetInFluid(false, kInvalidUniqueId);
|
||||||
|
UpdateSubmerged(mgr);
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::ProjectileCollide:
|
||||||
|
x378_ = g_tweakPlayer->GetX1fc();
|
||||||
|
SetOrbitRequest(EPlayerOrbitRequest::Nine, mgr);
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::AddPlatformRider:
|
||||||
|
x82e_ridingPlatform = sender;
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::Damage:
|
||||||
|
if (TCastToPtr<CEnergyProjectile> energ = mgr.ObjectById(sender))
|
||||||
|
{
|
||||||
|
if ((energ->GetAttribField() & CWeapon::EProjectileAttrib::StaticInterference) !=
|
||||||
|
CWeapon::EProjectileAttrib::None)
|
||||||
|
{
|
||||||
|
mgr.GetPlayerState()->GetStaticInterference().
|
||||||
|
AddSource(GetUniqueId(), 0.3f, energ->GetInterferenceDuration());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EScriptObjectMessage::Deleted:
|
||||||
|
mgr.GetPlayerState()->ResetVisor();
|
||||||
|
x730_.clear();
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
x490_gun->AcceptScriptMessage(msg, sender, mgr);
|
||||||
|
x768_morphball->AcceptScriptMessage(msg, sender, mgr);
|
||||||
|
CActor::AcceptScriptMsg(msg, sender, mgr);
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::SetVisorSteam(float, float, float, u32, bool) {}
|
void CPlayer::SetVisorSteam(float, float, float, u32, bool) {}
|
||||||
|
|
||||||
void CPlayer::UpdateFootstepBounds(const CFinalInput& input, CStateManager&, float) {}
|
void CPlayer::UpdateFootstepBounds(const CFinalInput& input, CStateManager&, float) {}
|
||||||
|
|
||||||
u16 CPlayer::GetMaterialSoundUnderPlayer(CStateManager& mgr, const u16*, int, u16) { return 0; }
|
u16 CPlayer::GetMaterialSoundUnderPlayer(CStateManager& mgr, const u16* table, u32 length, u16 defId)
|
||||||
|
{
|
||||||
|
u16 ret = defId;
|
||||||
|
zeus::CAABox aabb = GetBoundingBox();
|
||||||
|
aabb.accumulateBounds(x34_transform.origin + zeus::CVector3f::skDown);
|
||||||
|
rstl::reserved_vector<TUniqueId, 1024> nearList;
|
||||||
|
mgr.BuildNearList(nearList, aabb, SolidMaterialFilter, nullptr);
|
||||||
|
TUniqueId collideId = kInvalidUniqueId;
|
||||||
|
CRayCastResult result = mgr.RayWorldIntersection(collideId, x34_transform.origin,
|
||||||
|
zeus::CVector3f::skDown,
|
||||||
|
1.5f, SolidMaterialFilter, nearList);
|
||||||
|
if (result.IsValid())
|
||||||
|
ret = SfxIdFromMaterial(result.GetMaterial(), table, length, defId);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
u16 CPlayer::SfxIdFromMaterial(const CMaterialList& mat, const u16* idList, u32 tableLen, u16 defId)
|
u16 CPlayer::SfxIdFromMaterial(const CMaterialList& mat, const u16* idList, u32 tableLen, u16 defId)
|
||||||
{
|
{
|
||||||
|
@ -231,6 +501,24 @@ void CPlayer::BeginGrapple(zeus::CVector3f&, CStateManager& mgr) {}
|
||||||
|
|
||||||
void CPlayer::BreakGrapple(CStateManager& mgr) {}
|
void CPlayer::BreakGrapple(CStateManager& mgr) {}
|
||||||
|
|
||||||
|
void CPlayer::SetOrbitRequest(EPlayerOrbitRequest req, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
x30c_orbitRequest = req;
|
||||||
|
switch (req)
|
||||||
|
{
|
||||||
|
case EPlayerOrbitRequest::Eight:
|
||||||
|
|
||||||
|
case EPlayerOrbitRequest::Seven:
|
||||||
|
SetOrbitState(EPlayerOrbitState::Two, mgr);
|
||||||
|
x314_orbitPoint = g_tweakPlayer->GetX164(int(x308_orbitType)) *
|
||||||
|
x34_transform.basis[1] + x34_transform.origin;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SetOrbitState(EPlayerOrbitState::Zero, mgr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::PreventFallingCameraPitch() {}
|
void CPlayer::PreventFallingCameraPitch() {}
|
||||||
|
|
||||||
void CPlayer::OrbitCarcass(CStateManager&) {}
|
void CPlayer::OrbitCarcass(CStateManager&) {}
|
||||||
|
@ -241,15 +529,66 @@ zeus::CVector3f CPlayer::GetHUDOrbitTargetPosition() const { return {}; }
|
||||||
|
|
||||||
void CPlayer::SetOrbitState(EPlayerOrbitState, CStateManager& mgr) {}
|
void CPlayer::SetOrbitState(EPlayerOrbitState, CStateManager& mgr) {}
|
||||||
|
|
||||||
void CPlayer::SetOrbitTargetId(TUniqueId, CStateManager& mgr) {}
|
void CPlayer::SetOrbitTargetId(TUniqueId id, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
if (id != kInvalidUniqueId)
|
||||||
|
{
|
||||||
|
x394_ = (TCastToPtr<CPatterned>(mgr.ObjectById(id)) ||
|
||||||
|
TCastToPtr<CWallCrawlerSwarm>(mgr.ObjectById(id)) ||
|
||||||
|
CPatterned::CastTo<CThardusRockProjectile>(mgr.ObjectById(id)) ||
|
||||||
|
TCastToPtr<CScriptGunTurret>(mgr.ObjectById(id)));
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::UpdateOrbitPosition(float, CStateManager& mgr) {}
|
x310_orbitTargetId = id;
|
||||||
|
if (x310_orbitTargetId == kInvalidUniqueId)
|
||||||
|
x374_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::UpdateOrbitZPosition() {}
|
void CPlayer::UpdateOrbitPosition(float pos, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
switch (x304_orbitState)
|
||||||
|
{
|
||||||
|
case EPlayerOrbitState::Two:
|
||||||
|
case EPlayerOrbitState::Three:
|
||||||
|
SetOrbitPosition(pos, mgr);
|
||||||
|
break;
|
||||||
|
case EPlayerOrbitState::One:
|
||||||
|
case EPlayerOrbitState::Four:
|
||||||
|
case EPlayerOrbitState::Five:
|
||||||
|
if (TCastToPtr<CActor> act = mgr.ObjectById(x310_orbitTargetId))
|
||||||
|
if (x310_orbitTargetId != kInvalidUniqueId)
|
||||||
|
x314_orbitPoint = act->GetOrbitPosition(mgr);
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::UpdateOrbitFixedPosition() {}
|
void CPlayer::UpdateOrbitZPosition()
|
||||||
|
{
|
||||||
|
if (x304_orbitState == EPlayerOrbitState::Two)
|
||||||
|
{
|
||||||
|
if (std::fabs(x320_orbitVector.z) < g_tweakPlayer->GetOrbitZRange())
|
||||||
|
x314_orbitPoint.z = x320_orbitVector.z + x34_transform.origin.z + GetEyeHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::SetOrbitPosition(float, CStateManager& mgr) {}
|
void CPlayer::UpdateOrbitFixedPosition()
|
||||||
|
{
|
||||||
|
x314_orbitPoint = x34_transform.rotate(x320_orbitVector) + GetEyePosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlayer::SetOrbitPosition(float pos, CStateManager& mgr)
|
||||||
|
{
|
||||||
|
zeus::CTransform camXf = GetFirstPersonCameraTransform(mgr);
|
||||||
|
if (x304_orbitState == EPlayerOrbitState::Two && x30c_orbitRequest == EPlayerOrbitRequest::Seven)
|
||||||
|
camXf = x34_transform;
|
||||||
|
zeus::CVector3f fwd = camXf.basis[1];
|
||||||
|
float dot = fwd.normalized().dot(fwd);
|
||||||
|
if (std::fabs(dot) > 1.f)
|
||||||
|
dot = (dot > 0.f) ? 1.f : -1.f;
|
||||||
|
x314_orbitPoint = camXf.rotate(zeus::CVector3f(0.f, pos / dot, 0.f)) + camXf.origin;
|
||||||
|
x320_orbitVector = zeus::CVector3f(0.f, pos, x314_orbitPoint.z - camXf.origin.z);
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::UpdateAimTarget(CStateManager& mgr) {}
|
void CPlayer::UpdateAimTarget(CStateManager& mgr) {}
|
||||||
|
|
||||||
|
@ -272,7 +611,10 @@ TUniqueId CPlayer::CheckEnemiesAgainstOrbitZone(const std::vector<TUniqueId>&, E
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
TUniqueId CPlayer::FindOrbitTargetId(CStateManager& mgr) { return {}; }
|
TUniqueId CPlayer::FindOrbitTargetId(CStateManager& mgr)
|
||||||
|
{
|
||||||
|
return FindBestOrbitableObject(x354_onScreenOrbitObjects, x330_orbitZone, mgr);
|
||||||
|
}
|
||||||
|
|
||||||
static zeus::CAABox BuildNearListBox(bool cropBottom, const zeus::CTransform& xf, float x, float z, float y)
|
static zeus::CAABox BuildNearListBox(bool cropBottom, const zeus::CTransform& xf, float x, float z, float y)
|
||||||
{
|
{
|
||||||
|
@ -425,7 +767,7 @@ void CPlayer::AddOrbitDisableSource(CStateManager& mgr, TUniqueId addId)
|
||||||
return;
|
return;
|
||||||
x9e4_orbitDisableList.push_back(addId);
|
x9e4_orbitDisableList.push_back(addId);
|
||||||
ResetAimTargetPrediction(kInvalidUniqueId);
|
ResetAimTargetPrediction(kInvalidUniqueId);
|
||||||
if (!TCastToConstPtr<CScriptGrapplePoint>(mgr.GetObjectById(x310_lockonObjectId)))
|
if (!TCastToConstPtr<CScriptGrapplePoint>(mgr.GetObjectById(x310_orbitTargetId)))
|
||||||
SetOrbitTargetId(kInvalidUniqueId, mgr);
|
SetOrbitTargetId(kInvalidUniqueId, mgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,6 +779,25 @@ void CPlayer::UpdateOrbitZone(CStateManager& mgr) {}
|
||||||
|
|
||||||
void CPlayer::UpdateOrbitInput(const CFinalInput& input, CStateManager& mgr) {}
|
void CPlayer::UpdateOrbitInput(const CFinalInput& input, CStateManager& mgr) {}
|
||||||
|
|
||||||
|
void CPlayer::ActivateOrbitSource(CStateManager& mgr)
|
||||||
|
{
|
||||||
|
switch (x390_orbitSource)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
OrbitCarcass(mgr);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
SetOrbitRequest(EPlayerOrbitRequest::Six, mgr);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (x394_)
|
||||||
|
OrbitPoint(EPlayerOrbitType::One, mgr);
|
||||||
|
else
|
||||||
|
OrbitCarcass(mgr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::UpdateOrbitSelection(const CFinalInput& input, CStateManager& mgr) {}
|
void CPlayer::UpdateOrbitSelection(const CFinalInput& input, CStateManager& mgr) {}
|
||||||
|
|
||||||
void CPlayer::UpdateOrbitOrientation(CStateManager& mgr) {}
|
void CPlayer::UpdateOrbitOrientation(CStateManager& mgr) {}
|
||||||
|
@ -610,22 +971,85 @@ void CPlayer::CVisorSteam::Update(float dt)
|
||||||
x24_ = 0.1f;
|
x24_ = 0.1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPlayer::CInputFilter::Reset()
|
||||||
|
{
|
||||||
|
x0_stateSamples.clear();
|
||||||
|
x54_posSamples.clear();
|
||||||
|
x148_velSamples.clear();
|
||||||
|
x23c_inputSamples.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlayer::CInputFilter::AddSample(EInputState state, const zeus::CVector3f& pos,
|
||||||
|
const zeus::CVector3f& vel, const zeus::CVector2f& input)
|
||||||
|
{
|
||||||
|
if (x0_stateSamples.size() >= 20)
|
||||||
|
x0_stateSamples.resize(19);
|
||||||
|
x0_stateSamples.insert(x0_stateSamples.begin(), state);
|
||||||
|
if (x54_posSamples.size() >= 20)
|
||||||
|
x54_posSamples.resize(19);
|
||||||
|
x54_posSamples.insert(x54_posSamples.begin(), pos);
|
||||||
|
if (x148_velSamples.size() >= 20)
|
||||||
|
x148_velSamples.resize(19);
|
||||||
|
x148_velSamples.insert(x148_velSamples.begin(), vel);
|
||||||
|
if (x23c_inputSamples.size() >= 20)
|
||||||
|
x23c_inputSamples.resize(19);
|
||||||
|
x23c_inputSamples.insert(x23c_inputSamples.begin(), input);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPlayer::CInputFilter::Passes() const
|
||||||
|
{
|
||||||
|
// TODO: Do
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayer::SetSpawnedMorphBallState(CPlayer::EPlayerMorphBallState, CStateManager&) {}
|
void CPlayer::SetSpawnedMorphBallState(CPlayer::EPlayerMorphBallState, CStateManager&) {}
|
||||||
|
|
||||||
void CPlayer::DecrementPhazon()
|
void CPlayer::DecrementPhazon()
|
||||||
{
|
{
|
||||||
if (xa10_ == 0)
|
if (xa10_phazonCounter == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xa10_--;
|
xa10_phazonCounter--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlayer::IncrementPhazon()
|
void CPlayer::IncrementPhazon()
|
||||||
{
|
{
|
||||||
if (xa10_ != 0)
|
if (xa10_phazonCounter != 0)
|
||||||
xa10_++;
|
xa10_phazonCounter++;
|
||||||
else
|
else
|
||||||
xa14_ = 0.f;
|
xa14_ = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CPlayer::CheckSubmerged() const
|
||||||
|
{
|
||||||
|
if (!xe6_24_fluidCounter)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return x828_waterLevelOnPlayer >= (x2f8_morphTransState == EPlayerMorphBallState::Morphed ?
|
||||||
|
2.f * g_tweakPlayer->GetPlayerBallHalfExtent() : 0.5f * GetEyeHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlayer::UpdateSubmerged(CStateManager& mgr)
|
||||||
|
{
|
||||||
|
x82c_ = false;
|
||||||
|
x828_waterLevelOnPlayer = 0.f;
|
||||||
|
if (xe6_24_fluidCounter)
|
||||||
|
{
|
||||||
|
if (TCastToPtr<CScriptWater> water = mgr.ObjectById(xc4_fluidId))
|
||||||
|
{
|
||||||
|
x828_waterLevelOnPlayer =
|
||||||
|
-(zeus::CVector3f::skUp.dot(x34_transform.origin) - water->GetTriggerBoundsWR().max.z);
|
||||||
|
CFluidPlane::EFluidType fluidType = water->GetFluidPlane().GetFluidType();
|
||||||
|
x82c_ = (fluidType == CFluidPlane::EFluidType::Two || fluidType == CFluidPlane::EFluidType::Five);
|
||||||
|
CheckSubmerged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPlayer::ApplySubmergedPitchBend(CSfxHandle& sfx)
|
||||||
|
{
|
||||||
|
if (CheckSubmerged())
|
||||||
|
CSfxManager::PitchBend(sfx, -1.f);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,13 @@ public:
|
||||||
Scanning,
|
Scanning,
|
||||||
ScanComplete
|
ScanComplete
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EPlayerOrbitType
|
enum class EPlayerOrbitType
|
||||||
{
|
{
|
||||||
|
Zero,
|
||||||
|
One
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EPlayerOrbitState
|
enum class EPlayerOrbitState
|
||||||
{
|
{
|
||||||
Zero,
|
Zero,
|
||||||
|
@ -47,19 +51,42 @@ public:
|
||||||
Four,
|
Four,
|
||||||
Five
|
Five
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class EPlayerOrbitRequest
|
||||||
|
{
|
||||||
|
Zero,
|
||||||
|
One,
|
||||||
|
Two,
|
||||||
|
Three,
|
||||||
|
Four,
|
||||||
|
Five,
|
||||||
|
Six,
|
||||||
|
Seven,
|
||||||
|
Eight,
|
||||||
|
Nine,
|
||||||
|
Ten
|
||||||
|
};
|
||||||
|
|
||||||
enum class EPlayerZoneInfo
|
enum class EPlayerZoneInfo
|
||||||
{
|
{
|
||||||
Zero,
|
Zero,
|
||||||
One
|
One
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EPlayerZoneType
|
enum class EPlayerZoneType
|
||||||
{
|
{
|
||||||
Always = -1,
|
Always = -1,
|
||||||
Box = 0,
|
Box = 0,
|
||||||
Ellipse
|
Ellipse
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EPlayerMovementState
|
enum class EPlayerMovementState
|
||||||
{
|
{
|
||||||
|
OnGround,
|
||||||
|
Jump,
|
||||||
|
StartingJump,
|
||||||
|
Falling,
|
||||||
|
FallingMorphed
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EPlayerMorphBallState
|
enum class EPlayerMorphBallState
|
||||||
|
@ -79,6 +106,18 @@ public:
|
||||||
Four
|
Four
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class EPlayerMovementSurface
|
||||||
|
{
|
||||||
|
Normal,
|
||||||
|
One,
|
||||||
|
Ice,
|
||||||
|
MudSlow,
|
||||||
|
Four,
|
||||||
|
Fluid2Or5,
|
||||||
|
Fluid3,
|
||||||
|
SnakeWeed
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct CVisorSteam
|
struct CVisorSteam
|
||||||
{
|
{
|
||||||
|
@ -101,9 +140,30 @@ private:
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
float GetAlpha() const { return x20_alpha; }
|
float GetAlpha() const { return x20_alpha; }
|
||||||
};
|
};
|
||||||
zeus::CVector3f x1b4_;
|
|
||||||
TUniqueId x1c4_ = kInvalidUniqueId;
|
class CInputFilter
|
||||||
u32 x258_jumpState = 0;
|
{
|
||||||
|
public:
|
||||||
|
enum class EInputState
|
||||||
|
{
|
||||||
|
Jump,
|
||||||
|
StartingJump,
|
||||||
|
Moving
|
||||||
|
};
|
||||||
|
private:
|
||||||
|
rstl::reserved_vector<EInputState, 20> x0_stateSamples;
|
||||||
|
rstl::reserved_vector<zeus::CVector3f, 20> x54_posSamples;
|
||||||
|
rstl::reserved_vector<zeus::CVector3f, 20> x148_velSamples;
|
||||||
|
rstl::reserved_vector<zeus::CVector2f, 20> x23c_inputSamples;
|
||||||
|
public:
|
||||||
|
void Reset();
|
||||||
|
void AddSample(EInputState state, const zeus::CVector3f& pos,
|
||||||
|
const zeus::CVector3f& vel, const zeus::CVector2f& input);
|
||||||
|
bool Passes() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
EPlayerMovementState x258_movementState = EPlayerMovementState::OnGround;
|
||||||
|
std::vector<u32> x25c_;
|
||||||
TUniqueId x26c_ = kInvalidUniqueId;
|
TUniqueId x26c_ = kInvalidUniqueId;
|
||||||
float x270_ = 0.f;
|
float x270_ = 0.f;
|
||||||
CPlayerEnergyDrain x274_energyDrain = CPlayerEnergyDrain(4);
|
CPlayerEnergyDrain x274_energyDrain = CPlayerEnergyDrain(4);
|
||||||
|
@ -116,7 +176,7 @@ private:
|
||||||
float x2a0_ = 0.f;
|
float x2a0_ = 0.f;
|
||||||
u8 x2a4_ = 0;
|
u8 x2a4_ = 0;
|
||||||
float x2a8_ = 1000.f;
|
float x2a8_ = 1000.f;
|
||||||
u32 x2ac_ = 0;
|
EPlayerMovementSurface x2ac_movementSurface = EPlayerMovementSurface::Normal;
|
||||||
u32 x2b0_ = 2;
|
u32 x2b0_ = 2;
|
||||||
u32 x2b4_ = 0;
|
u32 x2b4_ = 0;
|
||||||
u32 x2d0_ = 3;
|
u32 x2d0_ = 3;
|
||||||
|
@ -126,17 +186,13 @@ private:
|
||||||
EPlayerCameraState x2f4_cameraState = EPlayerCameraState::Zero;
|
EPlayerCameraState x2f4_cameraState = EPlayerCameraState::Zero;
|
||||||
EPlayerMorphBallState x2f8_morphTransState = EPlayerMorphBallState::Unmorphed;
|
EPlayerMorphBallState x2f8_morphTransState = EPlayerMorphBallState::Unmorphed;
|
||||||
u32 x2fc_ = 0;
|
u32 x2fc_ = 0;
|
||||||
float x300_ = 0.f;
|
float x300_fallingTime = 0.f;
|
||||||
EPlayerOrbitState x304_orbitState = EPlayerOrbitState::Zero;
|
EPlayerOrbitState x304_orbitState = EPlayerOrbitState::Zero;
|
||||||
u32 x308_ = 0;
|
EPlayerOrbitType x308_orbitType = EPlayerOrbitType::Zero;
|
||||||
u32 x30c_ = 0;
|
EPlayerOrbitRequest x30c_orbitRequest = EPlayerOrbitRequest::Three;
|
||||||
TUniqueId x310_lockonObjectId = kInvalidUniqueId;
|
TUniqueId x310_orbitTargetId = kInvalidUniqueId;
|
||||||
float x314_ = 0.f;
|
zeus::CVector3f x314_orbitPoint;
|
||||||
float x318_ = 0.f;
|
zeus::CVector3f x320_orbitVector;
|
||||||
float x31c_ = 0.f;
|
|
||||||
float x320_ = 0.f;
|
|
||||||
float x324_ = 0.f;
|
|
||||||
float x328_ = 0.f;
|
|
||||||
float x32c_ = 0.f;
|
float x32c_ = 0.f;
|
||||||
EPlayerZoneInfo x330_orbitZone = EPlayerZoneInfo::Zero;
|
EPlayerZoneInfo x330_orbitZone = EPlayerZoneInfo::Zero;
|
||||||
EPlayerZoneType x334_orbitType = EPlayerZoneType::Ellipse;
|
EPlayerZoneType x334_orbitType = EPlayerZoneType::Ellipse;
|
||||||
|
@ -153,7 +209,7 @@ private:
|
||||||
float x384_ = 0.f;
|
float x384_ = 0.f;
|
||||||
float x388_ = 0.f;
|
float x388_ = 0.f;
|
||||||
bool x38c_ = false;
|
bool x38c_ = false;
|
||||||
u32 x390_ = 2;
|
u32 x390_orbitSource = 2;
|
||||||
u8 x394_ = 0;
|
u8 x394_ = 0;
|
||||||
float x398_ = 1.5f;
|
float x398_ = 1.5f;
|
||||||
u8 x39c_ = 0;
|
u8 x39c_ = 0;
|
||||||
|
@ -186,8 +242,8 @@ private:
|
||||||
float x48c_ = 0.f;
|
float x48c_ = 0.f;
|
||||||
std::unique_ptr<CPlayerGun> x490_gun;
|
std::unique_ptr<CPlayerGun> x490_gun;
|
||||||
float x494_mapAlpha = 1.f;
|
float x494_mapAlpha = 1.f;
|
||||||
float x49c_; /* Value retrieved from TweakPlayerGun */
|
float x49c_gunNotFiringTimeout;
|
||||||
// std::unqiue_ptr<> x4a0_;
|
std::unique_ptr<CInputFilter> x4a0_inputFilter;
|
||||||
u32 x4a4_ = 0;
|
u32 x4a4_ = 0;
|
||||||
float x4f8_ = 0.f;
|
float x4f8_ = 0.f;
|
||||||
float x4fc_ = 0.f;
|
float x4fc_ = 0.f;
|
||||||
|
@ -205,9 +261,7 @@ private:
|
||||||
u32 x594_ = 0;
|
u32 x594_ = 0;
|
||||||
u32 x658_ = 0;
|
u32 x658_ = 0;
|
||||||
u32 x71c_ = 0;
|
u32 x71c_ = 0;
|
||||||
u32 x734_ = 0;
|
std::vector<std::unique_ptr<CModelData>> x730_;
|
||||||
u32 x738_ = 0;
|
|
||||||
u32 x73c_ = 0;
|
|
||||||
float x740_ = 0.f;
|
float x740_ = 0.f;
|
||||||
float x744_ = 0.f;
|
float x744_ = 0.f;
|
||||||
float x748_ = 0.f;
|
float x748_ = 0.f;
|
||||||
|
@ -216,15 +270,15 @@ private:
|
||||||
u32 x754_ = 0;
|
u32 x754_ = 0;
|
||||||
float x758_ = 0.f;
|
float x758_ = 0.f;
|
||||||
u32 x75c_ = 0;
|
u32 x75c_ = 0;
|
||||||
u32 x760_ = 0;
|
bool x760_controlsFrozen = false;
|
||||||
float x764_ = 0.f;
|
float x764_controlsFrozenTimeout = 0.f;
|
||||||
std::unique_ptr<CMorphBall> x768_morphball;
|
std::unique_ptr<CMorphBall> x768_morphball;
|
||||||
std::unique_ptr<CPlayerCameraBob> x76c_cameraBob;
|
std::unique_ptr<CPlayerCameraBob> x76c_cameraBob;
|
||||||
CSfxHandle x770_;
|
CSfxHandle x770_;
|
||||||
float x774_ = 0.f;
|
float x774_ = 0.f;
|
||||||
u32 x778_ = 0;
|
u32 x778_ = 0;
|
||||||
u32 x77c_ = 0;
|
CSfxHandle x77c_samusVoiceSfx;
|
||||||
u32 x780_ = 0;
|
int x780_samusVoicePriority = 0;
|
||||||
float x784_ = 0.f;
|
float x784_ = 0.f;
|
||||||
u16 x788_ = 0;
|
u16 x788_ = 0;
|
||||||
float x78c_ = 0.f;
|
float x78c_ = 0.f;
|
||||||
|
@ -237,9 +291,9 @@ private:
|
||||||
std::unique_ptr<CModelData> x7f0_ballTransitionBeamModel;
|
std::unique_ptr<CModelData> x7f0_ballTransitionBeamModel;
|
||||||
zeus::CTransform x7f4_;
|
zeus::CTransform x7f4_;
|
||||||
float x824_ = 0.f;
|
float x824_ = 0.f;
|
||||||
float x828_ = 0.f;
|
float x828_waterLevelOnPlayer = 0.f;
|
||||||
bool x82c_ = false;
|
bool x82c_ = false;
|
||||||
TUniqueId x82e_ = kInvalidUniqueId;
|
TUniqueId x82e_ridingPlatform = kInvalidUniqueId;
|
||||||
TUniqueId x830_ = kInvalidUniqueId;
|
TUniqueId x830_ = kInvalidUniqueId;
|
||||||
u32 x834_ = 1000;
|
u32 x834_ = 1000;
|
||||||
u32 x838_ = 0;
|
u32 x838_ = 0;
|
||||||
|
@ -259,7 +313,7 @@ private:
|
||||||
bool x9c4_30_ : 1;
|
bool x9c4_30_ : 1;
|
||||||
bool x9c4_31_ : 1;
|
bool x9c4_31_ : 1;
|
||||||
bool x9c5_24_ : 1;
|
bool x9c5_24_ : 1;
|
||||||
bool x9c5_25_ : 1;
|
bool x9c5_25_splashUpdated : 1;
|
||||||
bool x9c5_26_ : 1;
|
bool x9c5_26_ : 1;
|
||||||
bool x9c5_27_ : 1;
|
bool x9c5_27_ : 1;
|
||||||
bool x9c5_28_ : 1;
|
bool x9c5_28_ : 1;
|
||||||
|
@ -296,7 +350,7 @@ private:
|
||||||
float xa04_ = 0.f;
|
float xa04_ = 0.f;
|
||||||
ResId xa08_steamTextureId = -1;
|
ResId xa08_steamTextureId = -1;
|
||||||
ResId xa0c_;
|
ResId xa0c_;
|
||||||
u32 xa10_ = 0;
|
u32 xa10_phazonCounter = 0;
|
||||||
float xa14_ = 0.f;
|
float xa14_ = 0.f;
|
||||||
float xa18_ = 0.f;
|
float xa18_ = 0.f;
|
||||||
float xa1c_threatOverride = 0.f;
|
float xa1c_threatOverride = 0.f;
|
||||||
|
@ -306,12 +360,19 @@ private:
|
||||||
u32 xa2c_ = 2;
|
u32 xa2c_ = 2;
|
||||||
float xa30_ = 4.f;
|
float xa30_ = 4.f;
|
||||||
|
|
||||||
|
void StartLandingControlFreeze();
|
||||||
|
void EndLandingControlFreeze();
|
||||||
|
void ProcessFrozenInput(float dt, CStateManager& mgr);
|
||||||
|
bool CheckSubmerged() const;
|
||||||
|
void UpdateSubmerged(CStateManager& mgr);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CPlayer(TUniqueId, const zeus::CTransform&, const zeus::CAABox&, unsigned int w1, const zeus::CVector3f&, float, float,
|
CPlayer(TUniqueId, const zeus::CTransform&, const zeus::CAABox&, unsigned int w1, const zeus::CVector3f&, float, float,
|
||||||
float, float, const CMaterialList&);
|
float, float, const CMaterialList&);
|
||||||
|
|
||||||
bool IsTransparent() const;
|
bool IsTransparent() const;
|
||||||
void Update(float, CStateManager& mgr);
|
void Update(float, CStateManager& mgr);
|
||||||
|
bool StartSamusVoiceSfx(u16 sfx, float vol, int prio);
|
||||||
bool IsPlayerDeadEnough() const;
|
bool IsPlayerDeadEnough() const;
|
||||||
void AsyncLoadSuit(CStateManager& mgr);
|
void AsyncLoadSuit(CStateManager& mgr);
|
||||||
void LoadAnimationTokens();
|
void LoadAnimationTokens();
|
||||||
|
@ -357,7 +418,7 @@ public:
|
||||||
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
|
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
|
||||||
void SetVisorSteam(float, float, float, u32, bool);
|
void SetVisorSteam(float, float, float, u32, bool);
|
||||||
void UpdateFootstepBounds(const CFinalInput& input, CStateManager&, float);
|
void UpdateFootstepBounds(const CFinalInput& input, CStateManager&, float);
|
||||||
u16 GetMaterialSoundUnderPlayer(CStateManager& mgr, const u16*, int, u16);
|
u16 GetMaterialSoundUnderPlayer(CStateManager& mgr, const u16*, u32, u16);
|
||||||
u16 SfxIdFromMaterial(const CMaterialList&, const u16*, u32, u16);
|
u16 SfxIdFromMaterial(const CMaterialList&, const u16*, u32, u16);
|
||||||
void UpdateCrosshairsState(const CFinalInput&);
|
void UpdateCrosshairsState(const CFinalInput&);
|
||||||
void UpdateVisorTransition(float, CStateManager& mgr);
|
void UpdateVisorTransition(float, CStateManager& mgr);
|
||||||
|
@ -380,6 +441,7 @@ public:
|
||||||
void ApplyGrappleJump(CStateManager& mgr);
|
void ApplyGrappleJump(CStateManager& mgr);
|
||||||
void BeginGrapple(zeus::CVector3f&, CStateManager& mgr);
|
void BeginGrapple(zeus::CVector3f&, CStateManager& mgr);
|
||||||
void BreakGrapple(CStateManager& mgr);
|
void BreakGrapple(CStateManager& mgr);
|
||||||
|
void SetOrbitRequest(EPlayerOrbitRequest req, CStateManager& mgr);
|
||||||
void PreventFallingCameraPitch();
|
void PreventFallingCameraPitch();
|
||||||
void OrbitCarcass(CStateManager&);
|
void OrbitCarcass(CStateManager&);
|
||||||
void OrbitPoint(EPlayerOrbitType, CStateManager& mgr);
|
void OrbitPoint(EPlayerOrbitType, CStateManager& mgr);
|
||||||
|
@ -412,6 +474,7 @@ public:
|
||||||
void UpdateOrbitModeTimer(float);
|
void UpdateOrbitModeTimer(float);
|
||||||
void UpdateOrbitZone(CStateManager& mgr);
|
void UpdateOrbitZone(CStateManager& mgr);
|
||||||
void UpdateOrbitInput(const CFinalInput& input, CStateManager& mgr);
|
void UpdateOrbitInput(const CFinalInput& input, CStateManager& mgr);
|
||||||
|
void ActivateOrbitSource(CStateManager& mgr);
|
||||||
void UpdateOrbitSelection(const CFinalInput& input, CStateManager& mgr);
|
void UpdateOrbitSelection(const CFinalInput& input, CStateManager& mgr);
|
||||||
void UpdateOrbitOrientation(CStateManager& mgr);
|
void UpdateOrbitOrientation(CStateManager& mgr);
|
||||||
void UpdateOrbitTarget(CStateManager& mgr);
|
void UpdateOrbitTarget(CStateManager& mgr);
|
||||||
|
@ -449,7 +512,7 @@ public:
|
||||||
EPlayerOrbitState GetOrbitState() const { return x304_orbitState; }
|
EPlayerOrbitState GetOrbitState() const { return x304_orbitState; }
|
||||||
EPlayerScanState GetScanningState() const { return x3a8_scanState; }
|
EPlayerScanState GetScanningState() const { return x3a8_scanState; }
|
||||||
float GetScanningTime() const { return x3ac_scanningTime; }
|
float GetScanningTime() const { return x3ac_scanningTime; }
|
||||||
TUniqueId GetLockonObjectId() const { return x310_lockonObjectId; }
|
TUniqueId GetOrbitTargetId() const { return x310_orbitTargetId; }
|
||||||
TUniqueId GetScanningObjectId() const { return x3b4_scanningObject; }
|
TUniqueId GetScanningObjectId() const { return x3b4_scanningObject; }
|
||||||
bool IsNewScanScanning() const { return x9c6_30_newScanScanning; }
|
bool IsNewScanScanning() const { return x9c6_30_newScanScanning; }
|
||||||
float GetThreatOverride() const { return xa1c_threatOverride; }
|
float GetThreatOverride() const { return xa1c_threatOverride; }
|
||||||
|
@ -477,6 +540,7 @@ public:
|
||||||
|
|
||||||
void DecrementPhazon();
|
void DecrementPhazon();
|
||||||
void IncrementPhazon();
|
void IncrementPhazon();
|
||||||
|
void ApplySubmergedPitchBend(CSfxHandle& sfx);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ private:
|
||||||
float x1f4_;
|
float x1f4_;
|
||||||
float x1f8_ = 0.f;
|
float x1f8_ = 0.f;
|
||||||
zeus::CVector3f x1d4_;
|
zeus::CVector3f x1d4_;
|
||||||
std::vector<std::pair<TUniqueId, bool>> x200_waterInhabitants;
|
std::list<std::pair<TUniqueId, bool>> x1fc_waterInhabitants;
|
||||||
u32 x210_;
|
u32 x210_;
|
||||||
float x214_;
|
float x214_;
|
||||||
float x218_;
|
float x218_;
|
||||||
|
|
|
@ -200,26 +200,28 @@ enum class EScriptObjectMessage
|
||||||
Play = 20,
|
Play = 20,
|
||||||
Alert = 21,
|
Alert = 21,
|
||||||
InternalMessage00 = 22,
|
InternalMessage00 = 22,
|
||||||
InternalMessage01 = 23,
|
OnGround = 23,
|
||||||
InternalMessage02 = 24,
|
InternalMessage02 = 24,
|
||||||
InternalMessage03 = 25,
|
InternalMessage03 = 25,
|
||||||
InternalMessage04 = 26,
|
Falling = 26,
|
||||||
InternalMessage05 = 27,
|
OnIceSurface = 27,
|
||||||
InternalMessage06 = 28,
|
OnMudSlowSurface = 28,
|
||||||
InternalMessage07 = 29,
|
OnNormalSurface = 29,
|
||||||
InternalMessage08 = 30,
|
InternalMessage08 = 30,
|
||||||
InternalMessage09 = 31,
|
AddPlatformRider = 31,
|
||||||
InternalMessage10 = 32,
|
LandOnNotFloor = 32,
|
||||||
Registered = 33,
|
Registered = 33,
|
||||||
Deleted = 34,
|
Deleted = 34,
|
||||||
InitializedInArea = 35,
|
InitializedInArea = 35,
|
||||||
InternalMessage14 = 36,
|
InternalMessage14 = 36,
|
||||||
InternalMessage15 = 37,
|
AddSplashInhabitant = 37,
|
||||||
InternalMessage16 = 38,
|
UpdateSplashInhabitant = 38,
|
||||||
InternalMessage17 = 39,
|
RemoveSplashInhabitant = 39,
|
||||||
InternalMessage18 = 40,
|
InternalMessage18 = 40,
|
||||||
InternalMessage19 = 41,
|
Damage = 41,
|
||||||
InternalMessage20 = 42,
|
InternalMessage20 = 42,
|
||||||
|
ProjectileCollide = 43,
|
||||||
|
InSnakeWeed = 44,
|
||||||
InternalMessage26 = 48
|
InternalMessage26 = 48
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue