mirror of https://github.com/AxioDL/metaforce.git
Initial round of CMorphBall implementations
This commit is contained in:
parent
1022e4819c
commit
10092821c8
|
@ -10,9 +10,11 @@ struct ITweakBall : ITweak
|
|||
virtual float GetMaxBallTranslationAcceleration(int s) const=0;
|
||||
virtual float GetBallTranslationFriction(int s) const=0;
|
||||
virtual float GetBallTranslationMaxSpeed(int s) const=0;
|
||||
virtual float GetSpiderBallRollSpeed() const=0;
|
||||
virtual float GetBallCameraControlDistance() const=0;
|
||||
virtual float GetLeftStickDivisor() const=0;
|
||||
virtual float GetRightStickDivisor() const=0;
|
||||
virtual float GetBallTouchRadius() const=0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -7,53 +7,53 @@ namespace DNAMP1
|
|||
|
||||
void CTweakBall::read(athena::io::IStreamReader& __dna_reader)
|
||||
{
|
||||
/* x4_[0] */
|
||||
/* x4_maxTranslationAcceleration[0] */
|
||||
x4_maxTranslationAcceleration[0] = __dna_reader.readFloatBig();
|
||||
/* x4_[1] */
|
||||
/* x4_maxTranslationAcceleration[1] */
|
||||
x4_maxTranslationAcceleration[1] = __dna_reader.readFloatBig();
|
||||
/* x4_[2] */
|
||||
/* x4_maxTranslationAcceleration[2] */
|
||||
x4_maxTranslationAcceleration[2] = __dna_reader.readFloatBig();
|
||||
/* x4_[3] */
|
||||
/* x4_maxTranslationAcceleration[3] */
|
||||
x4_maxTranslationAcceleration[3] = __dna_reader.readFloatBig();
|
||||
/* x4_[4] */
|
||||
/* x4_maxTranslationAcceleration[4] */
|
||||
x4_maxTranslationAcceleration[4] = __dna_reader.readFloatBig();
|
||||
/* x4_[5] */
|
||||
/* x4_maxTranslationAcceleration[5] */
|
||||
x4_maxTranslationAcceleration[5] = __dna_reader.readFloatBig();
|
||||
/* x4_[6] */
|
||||
/* x4_maxTranslationAcceleration[6] */
|
||||
x4_maxTranslationAcceleration[6] = __dna_reader.readFloatBig();
|
||||
/* x4_[7] */
|
||||
/* x4_maxTranslationAcceleration[7] */
|
||||
x4_maxTranslationAcceleration[7] = __dna_reader.readFloatBig();
|
||||
/* x24_[0] */
|
||||
/* x24_translationFriction[0] */
|
||||
x24_translationFriction[0] = __dna_reader.readFloatBig();
|
||||
/* x24_[1] */
|
||||
/* x24_translationFriction[1] */
|
||||
x24_translationFriction[1] = __dna_reader.readFloatBig();
|
||||
/* x24_[2] */
|
||||
/* x24_translationFriction[2] */
|
||||
x24_translationFriction[2] = __dna_reader.readFloatBig();
|
||||
/* x24_[3] */
|
||||
/* x24_translationFriction[3] */
|
||||
x24_translationFriction[3] = __dna_reader.readFloatBig();
|
||||
/* x24_[4] */
|
||||
/* x24_translationFriction[4] */
|
||||
x24_translationFriction[4] = __dna_reader.readFloatBig();
|
||||
/* x24_[5] */
|
||||
/* x24_translationFriction[5] */
|
||||
x24_translationFriction[5] = __dna_reader.readFloatBig();
|
||||
/* x24_[6] */
|
||||
/* x24_translationFriction[6] */
|
||||
x24_translationFriction[6] = __dna_reader.readFloatBig();
|
||||
/* x24_[7] */
|
||||
/* x24_translationFriction[7] */
|
||||
x24_translationFriction[7] = __dna_reader.readFloatBig();
|
||||
/* x44_[0] */
|
||||
/* x44_translationMaxSpeed[0] */
|
||||
x44_translationMaxSpeed[0] = __dna_reader.readFloatBig();
|
||||
/* x44_[1] */
|
||||
/* x44_translationMaxSpeed[1] */
|
||||
x44_translationMaxSpeed[1] = __dna_reader.readFloatBig();
|
||||
/* x44_[2] */
|
||||
/* x44_translationMaxSpeed[2] */
|
||||
x44_translationMaxSpeed[2] = __dna_reader.readFloatBig();
|
||||
/* x44_[3] */
|
||||
/* x44_translationMaxSpeed[3] */
|
||||
x44_translationMaxSpeed[3] = __dna_reader.readFloatBig();
|
||||
/* x44_[4] */
|
||||
/* x44_translationMaxSpeed[4] */
|
||||
x44_translationMaxSpeed[4] = __dna_reader.readFloatBig();
|
||||
/* x44_[5] */
|
||||
/* x44_translationMaxSpeed[5] */
|
||||
x44_translationMaxSpeed[5] = __dna_reader.readFloatBig();
|
||||
/* x44_[6] */
|
||||
/* x44_translationMaxSpeed[6] */
|
||||
x44_translationMaxSpeed[6] = __dna_reader.readFloatBig();
|
||||
/* x44_[7] */
|
||||
/* x44_translationMaxSpeed[7] */
|
||||
x44_translationMaxSpeed[7] = __dna_reader.readFloatBig();
|
||||
/* x64_ */
|
||||
x64_ = __dna_reader.readFloatBig();
|
||||
|
@ -79,8 +79,8 @@ void CTweakBall::read(athena::io::IStreamReader& __dna_reader)
|
|||
xc4_[6] = __dna_reader.readFloatBig();
|
||||
/* xc4_[7] */
|
||||
xc4_[7] = __dna_reader.readFloatBig();
|
||||
/* xe4_ */
|
||||
xe4_ = __dna_reader.readFloatBig();
|
||||
/* xe4_spiderBallRollSpeed */
|
||||
xe4_spiderBallRollSpeed = __dna_reader.readFloatBig();
|
||||
/* xe8_ */
|
||||
xe8_ = __dna_reader.readFloatBig();
|
||||
/* x14c_ */
|
||||
|
@ -191,20 +191,20 @@ void CTweakBall::read(athena::io::IStreamReader& __dna_reader)
|
|||
x1c8_ = __dna_reader.readFloatBig();
|
||||
/* x1cc_ */
|
||||
x1cc_ = __dna_reader.readFloatBig();
|
||||
/* x1d0_ */
|
||||
/* x1d0_ballCameraControlDistance */
|
||||
x1d0_ballCameraControlDistance = __dna_reader.readFloatBig();
|
||||
/* x1d4_ */
|
||||
x1d4_ = __dna_reader.readFloatBig();
|
||||
/* x1d8_ */
|
||||
x1d8_ = __dna_reader.readFloatBig();
|
||||
/* x1e4_ */
|
||||
/* x1e4_leftStickDivisor */
|
||||
x1e4_leftStickDivisor = __dna_reader.readFloatBig();
|
||||
/* x1e8_ */
|
||||
/* x1e8_rightStickDivisor */
|
||||
x1e8_rightStickDivisor = __dna_reader.readFloatBig();
|
||||
/* x200_ */
|
||||
x200_ = __dna_reader.readFloatBig();
|
||||
/* x204_ */
|
||||
x204_ = __dna_reader.readFloatBig();
|
||||
/* x204_ballTouchRadius */
|
||||
x204_ballTouchRadius = __dna_reader.readFloatBig();
|
||||
/* x20c_ */
|
||||
x20c_ = __dna_reader.readFloatBig();
|
||||
/* x218_ */
|
||||
|
@ -227,53 +227,53 @@ void CTweakBall::read(athena::io::IStreamReader& __dna_reader)
|
|||
|
||||
void CTweakBall::write(athena::io::IStreamWriter& __dna_writer) const
|
||||
{
|
||||
/* x4_[0] */
|
||||
/* x4_maxTranslationAcceleration[0] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[0]);
|
||||
/* x4_[1] */
|
||||
/* x4_maxTranslationAcceleration[1] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[1]);
|
||||
/* x4_[2] */
|
||||
/* x4_maxTranslationAcceleration[2] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[2]);
|
||||
/* x4_[3] */
|
||||
/* x4_maxTranslationAcceleration[3] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[3]);
|
||||
/* x4_[4] */
|
||||
/* x4_maxTranslationAcceleration[4] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[4]);
|
||||
/* x4_[5] */
|
||||
/* x4_maxTranslationAcceleration[5] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[5]);
|
||||
/* x4_[6] */
|
||||
/* x4_maxTranslationAcceleration[6] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[6]);
|
||||
/* x4_[7] */
|
||||
/* x4_maxTranslationAcceleration[7] */
|
||||
__dna_writer.writeFloatBig(x4_maxTranslationAcceleration[7]);
|
||||
/* x24_[0] */
|
||||
/* x24_translationFriction[0] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[0]);
|
||||
/* x24_[1] */
|
||||
/* x24_translationFriction[1] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[1]);
|
||||
/* x24_[2] */
|
||||
/* x24_translationFriction[2] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[2]);
|
||||
/* x24_[3] */
|
||||
/* x24_translationFriction[3] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[3]);
|
||||
/* x24_[4] */
|
||||
/* x24_translationFriction[4] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[4]);
|
||||
/* x24_[5] */
|
||||
/* x24_translationFriction[5] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[5]);
|
||||
/* x24_[6] */
|
||||
/* x24_translationFriction[6] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[6]);
|
||||
/* x24_[7] */
|
||||
/* x24_translationFriction[7] */
|
||||
__dna_writer.writeFloatBig(x24_translationFriction[7]);
|
||||
/* x44_[0] */
|
||||
/* x44_translationMaxSpeed[0] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[0]);
|
||||
/* x44_[1] */
|
||||
/* x44_translationMaxSpeed[1] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[1]);
|
||||
/* x44_[2] */
|
||||
/* x44_translationMaxSpeed[2] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[2]);
|
||||
/* x44_[3] */
|
||||
/* x44_translationMaxSpeed[3] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[3]);
|
||||
/* x44_[4] */
|
||||
/* x44_translationMaxSpeed[4] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[4]);
|
||||
/* x44_[5] */
|
||||
/* x44_translationMaxSpeed[5] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[5]);
|
||||
/* x44_[6] */
|
||||
/* x44_translationMaxSpeed[6] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[6]);
|
||||
/* x44_[7] */
|
||||
/* x44_translationMaxSpeed[7] */
|
||||
__dna_writer.writeFloatBig(x44_translationMaxSpeed[7]);
|
||||
/* x64_ */
|
||||
__dna_writer.writeFloatBig(x64_);
|
||||
|
@ -299,8 +299,8 @@ void CTweakBall::write(athena::io::IStreamWriter& __dna_writer) const
|
|||
__dna_writer.writeFloatBig(xc4_[6]);
|
||||
/* xc4_[7] */
|
||||
__dna_writer.writeFloatBig(xc4_[7]);
|
||||
/* xe4_ */
|
||||
__dna_writer.writeFloatBig(xe4_);
|
||||
/* xe4_spiderBallRollSpeed */
|
||||
__dna_writer.writeFloatBig(xe4_spiderBallRollSpeed);
|
||||
/* xe8_ */
|
||||
__dna_writer.writeFloatBig(xe8_);
|
||||
/* x14c_ */
|
||||
|
@ -411,20 +411,20 @@ void CTweakBall::write(athena::io::IStreamWriter& __dna_writer) const
|
|||
__dna_writer.writeFloatBig(x1c8_);
|
||||
/* x1cc_ */
|
||||
__dna_writer.writeFloatBig(x1cc_);
|
||||
/* x1d0_ */
|
||||
/* x1d0_ballCameraControlDistance */
|
||||
__dna_writer.writeFloatBig(x1d0_ballCameraControlDistance);
|
||||
/* x1d4_ */
|
||||
__dna_writer.writeFloatBig(x1d4_);
|
||||
/* x1d8_ */
|
||||
__dna_writer.writeFloatBig(x1d8_);
|
||||
/* x1e4_ */
|
||||
/* x1e4_leftStickDivisor */
|
||||
__dna_writer.writeFloatBig(x1e4_leftStickDivisor);
|
||||
/* x1e8_ */
|
||||
/* x1e8_rightStickDivisor */
|
||||
__dna_writer.writeFloatBig(x1e8_rightStickDivisor);
|
||||
/* x200_ */
|
||||
__dna_writer.writeFloatBig(x200_);
|
||||
/* x204_ */
|
||||
__dna_writer.writeFloatBig(x204_);
|
||||
/* x204_ballTouchRadius */
|
||||
__dna_writer.writeFloatBig(x204_ballTouchRadius);
|
||||
/* x20c_ */
|
||||
__dna_writer.writeFloatBig(x20c_);
|
||||
/* x218_ */
|
||||
|
@ -447,68 +447,68 @@ void CTweakBall::write(athena::io::IStreamWriter& __dna_writer) const
|
|||
|
||||
void CTweakBall::read(athena::io::YAMLDocReader& __dna_docin)
|
||||
{
|
||||
/* x4_ */
|
||||
/* x4_maxTranslationAcceleration */
|
||||
size_t __x4_Count;
|
||||
if (auto v = __dna_docin.enterSubVector("x4_", __x4_Count))
|
||||
if (auto v = __dna_docin.enterSubVector("x4_maxTranslationAcceleration", __x4_Count))
|
||||
{
|
||||
/* x4_[0] */
|
||||
x4_maxTranslationAcceleration[0] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[1] */
|
||||
x4_maxTranslationAcceleration[1] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[2] */
|
||||
x4_maxTranslationAcceleration[2] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[3] */
|
||||
x4_maxTranslationAcceleration[3] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[4] */
|
||||
x4_maxTranslationAcceleration[4] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[5] */
|
||||
x4_maxTranslationAcceleration[5] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[6] */
|
||||
x4_maxTranslationAcceleration[6] = __dna_docin.readFloat("x4_");
|
||||
/* x4_[7] */
|
||||
x4_maxTranslationAcceleration[7] = __dna_docin.readFloat("x4_");
|
||||
/* x4_maxTranslationAcceleration[0] */
|
||||
x4_maxTranslationAcceleration[0] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[1] */
|
||||
x4_maxTranslationAcceleration[1] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[2] */
|
||||
x4_maxTranslationAcceleration[2] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[3] */
|
||||
x4_maxTranslationAcceleration[3] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[4] */
|
||||
x4_maxTranslationAcceleration[4] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[5] */
|
||||
x4_maxTranslationAcceleration[5] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[6] */
|
||||
x4_maxTranslationAcceleration[6] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
/* x4_maxTranslationAcceleration[7] */
|
||||
x4_maxTranslationAcceleration[7] = __dna_docin.readFloat("x4_maxTranslationAcceleration");
|
||||
}
|
||||
/* x24_ */
|
||||
/* x24_translationFriction */
|
||||
size_t __x24_Count;
|
||||
if (auto v = __dna_docin.enterSubVector("x24_", __x24_Count))
|
||||
if (auto v = __dna_docin.enterSubVector("x24_translationFriction", __x24_Count))
|
||||
{
|
||||
/* x24_[0] */
|
||||
x24_translationFriction[0] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[1] */
|
||||
x24_translationFriction[1] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[2] */
|
||||
x24_translationFriction[2] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[3] */
|
||||
x24_translationFriction[3] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[4] */
|
||||
x24_translationFriction[4] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[5] */
|
||||
x24_translationFriction[5] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[6] */
|
||||
x24_translationFriction[6] = __dna_docin.readFloat("x24_");
|
||||
/* x24_[7] */
|
||||
x24_translationFriction[7] = __dna_docin.readFloat("x24_");
|
||||
/* x24_translationFriction[0] */
|
||||
x24_translationFriction[0] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[1] */
|
||||
x24_translationFriction[1] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[2] */
|
||||
x24_translationFriction[2] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[3] */
|
||||
x24_translationFriction[3] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[4] */
|
||||
x24_translationFriction[4] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[5] */
|
||||
x24_translationFriction[5] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[6] */
|
||||
x24_translationFriction[6] = __dna_docin.readFloat("x24_translationFriction");
|
||||
/* x24_translationFriction[7] */
|
||||
x24_translationFriction[7] = __dna_docin.readFloat("x24_translationFriction");
|
||||
}
|
||||
/* x44_ */
|
||||
/* x44_translationMaxSpeed */
|
||||
size_t __x44_Count;
|
||||
if (auto v = __dna_docin.enterSubVector("x44_", __x44_Count))
|
||||
if (auto v = __dna_docin.enterSubVector("x44_translationMaxSpeed", __x44_Count))
|
||||
{
|
||||
/* x44_[0] */
|
||||
x44_translationMaxSpeed[0] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[1] */
|
||||
x44_translationMaxSpeed[1] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[2] */
|
||||
x44_translationMaxSpeed[2] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[3] */
|
||||
x44_translationMaxSpeed[3] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[4] */
|
||||
x44_translationMaxSpeed[4] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[5] */
|
||||
x44_translationMaxSpeed[5] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[6] */
|
||||
x44_translationMaxSpeed[6] = __dna_docin.readFloat("x44_");
|
||||
/* x44_[7] */
|
||||
x44_translationMaxSpeed[7] = __dna_docin.readFloat("x44_");
|
||||
/* x44_translationMaxSpeed[0] */
|
||||
x44_translationMaxSpeed[0] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[1] */
|
||||
x44_translationMaxSpeed[1] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[2] */
|
||||
x44_translationMaxSpeed[2] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[3] */
|
||||
x44_translationMaxSpeed[3] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[4] */
|
||||
x44_translationMaxSpeed[4] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[5] */
|
||||
x44_translationMaxSpeed[5] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[6] */
|
||||
x44_translationMaxSpeed[6] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
/* x44_translationMaxSpeed[7] */
|
||||
x44_translationMaxSpeed[7] = __dna_docin.readFloat("x44_translationMaxSpeed");
|
||||
}
|
||||
/* x64_ */
|
||||
x64_ = __dna_docin.readFloat("x64_");
|
||||
|
@ -539,8 +539,8 @@ void CTweakBall::read(athena::io::YAMLDocReader& __dna_docin)
|
|||
/* xc4_[7] */
|
||||
xc4_[7] = __dna_docin.readFloat("xc4_");
|
||||
}
|
||||
/* xe4_ */
|
||||
xe4_ = __dna_docin.readFloat("xe4_");
|
||||
/* xe4_spiderBallRollSpeed */
|
||||
xe4_spiderBallRollSpeed = __dna_docin.readFloat("xe4_spiderBallRollSpeed");
|
||||
/* xe8_ */
|
||||
xe8_ = __dna_docin.readFloat("xe8_");
|
||||
/* x14c_ */
|
||||
|
@ -651,20 +651,20 @@ void CTweakBall::read(athena::io::YAMLDocReader& __dna_docin)
|
|||
x1c8_ = __dna_docin.readFloat("x1c8_");
|
||||
/* x1cc_ */
|
||||
x1cc_ = __dna_docin.readFloat("x1cc_");
|
||||
/* x1d0_ */
|
||||
x1d0_ballCameraControlDistance = __dna_docin.readFloat("x1d0_");
|
||||
/* x1d0_ballCameraControlDistance */
|
||||
x1d0_ballCameraControlDistance = __dna_docin.readFloat("x1d0_ballCameraControlDistance");
|
||||
/* x1d4_ */
|
||||
x1d4_ = __dna_docin.readFloat("x1d4_");
|
||||
/* x1d8_ */
|
||||
x1d8_ = __dna_docin.readFloat("x1d8_");
|
||||
/* x1e4_ */
|
||||
x1e4_leftStickDivisor = __dna_docin.readFloat("x1e4_");
|
||||
/* x1e8_ */
|
||||
x1e8_rightStickDivisor = __dna_docin.readFloat("x1e8_");
|
||||
/* x1e4_leftStickDivisor */
|
||||
x1e4_leftStickDivisor = __dna_docin.readFloat("x1e4_leftStickDivisor");
|
||||
/* x1e8_rightStickDivisor */
|
||||
x1e8_rightStickDivisor = __dna_docin.readFloat("x1e8_rightStickDivisor");
|
||||
/* x200_ */
|
||||
x200_ = __dna_docin.readFloat("x200_");
|
||||
/* x204_ */
|
||||
x204_ = __dna_docin.readFloat("x204_");
|
||||
/* x204_ballTouchRadius */
|
||||
x204_ballTouchRadius = __dna_docin.readFloat("x204_ballTouchRadius");
|
||||
/* x20c_ */
|
||||
x20c_ = __dna_docin.readFloat("x20c_");
|
||||
/* x218_ */
|
||||
|
@ -687,65 +687,65 @@ void CTweakBall::read(athena::io::YAMLDocReader& __dna_docin)
|
|||
|
||||
void CTweakBall::write(athena::io::YAMLDocWriter& __dna_docout) const
|
||||
{
|
||||
/* x4_ */
|
||||
if (auto v = __dna_docout.enterSubVector("x4_"))
|
||||
/* x4_maxTranslationAcceleration */
|
||||
if (auto v = __dna_docout.enterSubVector("x4_maxTranslationAcceleration"))
|
||||
{
|
||||
/* x4_[0] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[0]);
|
||||
/* x4_[1] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[1]);
|
||||
/* x4_[2] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[2]);
|
||||
/* x4_[3] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[3]);
|
||||
/* x4_[4] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[4]);
|
||||
/* x4_[5] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[5]);
|
||||
/* x4_[6] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[6]);
|
||||
/* x4_[7] */
|
||||
__dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[7]);
|
||||
/* x4_maxTranslationAcceleration[0] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[0]);
|
||||
/* x4_maxTranslationAcceleration[1] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[1]);
|
||||
/* x4_maxTranslationAcceleration[2] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[2]);
|
||||
/* x4_maxTranslationAcceleration[3] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[3]);
|
||||
/* x4_maxTranslationAcceleration[4] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[4]);
|
||||
/* x4_maxTranslationAcceleration[5] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[5]);
|
||||
/* x4_maxTranslationAcceleration[6] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[6]);
|
||||
/* x4_maxTranslationAcceleration[7] */
|
||||
__dna_docout.writeFloat("x4_maxTranslationAcceleration", x4_maxTranslationAcceleration[7]);
|
||||
}
|
||||
/* x24_ */
|
||||
if (auto v = __dna_docout.enterSubVector("x24_"))
|
||||
/* x24_translationFriction */
|
||||
if (auto v = __dna_docout.enterSubVector("x24_translationFriction"))
|
||||
{
|
||||
/* x24_[0] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[0]);
|
||||
/* x24_[1] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[1]);
|
||||
/* x24_[2] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[2]);
|
||||
/* x24_[3] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[3]);
|
||||
/* x24_[4] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[4]);
|
||||
/* x24_[5] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[5]);
|
||||
/* x24_[6] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[6]);
|
||||
/* x24_[7] */
|
||||
__dna_docout.writeFloat("x24_", x24_translationFriction[7]);
|
||||
/* x24_translationFriction[0] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[0]);
|
||||
/* x24_translationFriction[1] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[1]);
|
||||
/* x24_translationFriction[2] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[2]);
|
||||
/* x24_translationFriction[3] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[3]);
|
||||
/* x24_translationFriction[4] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[4]);
|
||||
/* x24_translationFriction[5] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[5]);
|
||||
/* x24_translationFriction[6] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[6]);
|
||||
/* x24_translationFriction[7] */
|
||||
__dna_docout.writeFloat("x24_translationFriction", x24_translationFriction[7]);
|
||||
}
|
||||
/* x44_ */
|
||||
if (auto v = __dna_docout.enterSubVector("x44_"))
|
||||
/* x44_translationMaxSpeed */
|
||||
if (auto v = __dna_docout.enterSubVector("x44_translationMaxSpeed"))
|
||||
{
|
||||
/* x44_[0] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[0]);
|
||||
/* x44_[1] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[1]);
|
||||
/* x44_[2] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[2]);
|
||||
/* x44_[3] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[3]);
|
||||
/* x44_[4] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[4]);
|
||||
/* x44_[5] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[5]);
|
||||
/* x44_[6] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[6]);
|
||||
/* x44_[7] */
|
||||
__dna_docout.writeFloat("x44_", x44_translationMaxSpeed[7]);
|
||||
/* x44_translationMaxSpeed[0] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[0]);
|
||||
/* x44_translationMaxSpeed[1] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[1]);
|
||||
/* x44_translationMaxSpeed[2] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[2]);
|
||||
/* x44_translationMaxSpeed[3] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[3]);
|
||||
/* x44_translationMaxSpeed[4] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[4]);
|
||||
/* x44_translationMaxSpeed[5] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[5]);
|
||||
/* x44_translationMaxSpeed[6] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[6]);
|
||||
/* x44_translationMaxSpeed[7] */
|
||||
__dna_docout.writeFloat("x44_translationMaxSpeed", x44_translationMaxSpeed[7]);
|
||||
}
|
||||
/* x64_ */
|
||||
__dna_docout.writeFloat("x64_", x64_);
|
||||
|
@ -775,8 +775,8 @@ void CTweakBall::write(athena::io::YAMLDocWriter& __dna_docout) const
|
|||
/* xc4_[7] */
|
||||
__dna_docout.writeFloat("xc4_", xc4_[7]);
|
||||
}
|
||||
/* xe4_ */
|
||||
__dna_docout.writeFloat("xe4_", xe4_);
|
||||
/* xe4_spiderBallRollSpeed */
|
||||
__dna_docout.writeFloat("xe4_spiderBallRollSpeed", xe4_spiderBallRollSpeed);
|
||||
/* xe8_ */
|
||||
__dna_docout.writeFloat("xe8_", xe8_);
|
||||
/* x14c_ */
|
||||
|
@ -887,20 +887,20 @@ void CTweakBall::write(athena::io::YAMLDocWriter& __dna_docout) const
|
|||
__dna_docout.writeFloat("x1c8_", x1c8_);
|
||||
/* x1cc_ */
|
||||
__dna_docout.writeFloat("x1cc_", x1cc_);
|
||||
/* x1d0_ */
|
||||
__dna_docout.writeFloat("x1d0_", x1d0_ballCameraControlDistance);
|
||||
/* x1d0_ballCameraControlDistance */
|
||||
__dna_docout.writeFloat("x1d0_ballCameraControlDistance", x1d0_ballCameraControlDistance);
|
||||
/* x1d4_ */
|
||||
__dna_docout.writeFloat("x1d4_", x1d4_);
|
||||
/* x1d8_ */
|
||||
__dna_docout.writeFloat("x1d8_", x1d8_);
|
||||
/* x1e4_ */
|
||||
__dna_docout.writeFloat("x1e4_", x1e4_leftStickDivisor);
|
||||
/* x1e8_ */
|
||||
__dna_docout.writeFloat("x1e8_", x1e8_rightStickDivisor);
|
||||
/* x1e4_leftStickDivisor */
|
||||
__dna_docout.writeFloat("x1e4_leftStickDivisor", x1e4_leftStickDivisor);
|
||||
/* x1e8_rightStickDivisor */
|
||||
__dna_docout.writeFloat("x1e8_rightStickDivisor", x1e8_rightStickDivisor);
|
||||
/* x200_ */
|
||||
__dna_docout.writeFloat("x200_", x200_);
|
||||
/* x204_ */
|
||||
__dna_docout.writeFloat("x204_", x204_);
|
||||
/* x204_ballTouchRadius */
|
||||
__dna_docout.writeFloat("x204_ballTouchRadius", x204_ballTouchRadius);
|
||||
/* x20c_ */
|
||||
__dna_docout.writeFloat("x20c_", x20c_);
|
||||
/* x218_ */
|
||||
|
|
|
@ -38,7 +38,7 @@ struct CTweakBall final : public ITweakBall
|
|||
Value<float> xbc_;
|
||||
Value<float> xc0_;
|
||||
Value<float> xc4_[8];
|
||||
Value<float> xe4_;
|
||||
Value<float> xe4_spiderBallRollSpeed;
|
||||
Value<float> xe8_;
|
||||
float xec_ = 10000.f;
|
||||
float xf0_ = 1000.f;
|
||||
|
@ -106,7 +106,7 @@ struct CTweakBall final : public ITweakBall
|
|||
Value<float> x1e4_leftStickDivisor;
|
||||
Value<float> x1e8_rightStickDivisor;
|
||||
Value<float> x200_;
|
||||
Value<float> x204_;
|
||||
Value<float> x204_ballTouchRadius;
|
||||
float x208_;
|
||||
Value<float> x20c_;
|
||||
Value<float> x218_;
|
||||
|
@ -140,9 +140,11 @@ struct CTweakBall final : public ITweakBall
|
|||
float GetMaxBallTranslationAcceleration(int s) const { return x4_maxTranslationAcceleration[s]; }
|
||||
float GetBallTranslationFriction(int s) const { return x24_translationFriction[s]; }
|
||||
float GetBallTranslationMaxSpeed(int s) const { return x44_translationMaxSpeed[s]; }
|
||||
float GetSpiderBallRollSpeed() const { return xe4_spiderBallRollSpeed; }
|
||||
float GetBallCameraControlDistance() const { return x1d0_ballCameraControlDistance; }
|
||||
float GetLeftStickDivisor() const { return x1e4_leftStickDivisor; }
|
||||
float GetRightStickDivisor() const { return x1e8_rightStickDivisor; }
|
||||
float GetBallTouchRadius() const { return x204_ballTouchRadius; }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -391,8 +391,7 @@ void CParticleDatabase::AddAuxiliaryParticleEffect(const std::string& name, int
|
|||
auto search = x0_particleDescs.find(data.GetTag().id);
|
||||
if (search != x0_particleDescs.end())
|
||||
{
|
||||
auto sys = std::make_shared<CElementGen>(*search->second, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
auto sys = std::make_shared<CElementGen>(*search->second);
|
||||
newGen = std::make_unique<CParticleGenInfoGeneric>(data.GetTag(), sys, data.GetDuration(), "NOT_A_VALID_LOCATOR",
|
||||
scaleVec, CParticleData::EParentedMode::Initial, flags, mgr, aid,
|
||||
lightId + _getGraphicLightId(sys, *search->second),
|
||||
|
@ -438,8 +437,7 @@ void CParticleDatabase::AddParticleEffect(const std::string& name, int flags, co
|
|||
auto search = x0_particleDescs.find(data.GetTag().id);
|
||||
if (search != x0_particleDescs.end())
|
||||
{
|
||||
auto sys = std::make_shared<CElementGen>(*search->second, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
auto sys = std::make_shared<CElementGen>(*search->second);
|
||||
newGen = std::make_unique<CParticleGenInfoGeneric>(data.GetTag(), sys, data.GetDuration(), data.GetSegmentName(),
|
||||
scaleVec, data.GetParentedMode(), flags, mgr, aid,
|
||||
lightId + _getGraphicLightId(sys, *search->second),
|
||||
|
|
|
@ -168,9 +168,7 @@ CSamusDoll::CSamusDoll(const CDependencyGroup& suitDgrp, const CDependencyGroup&
|
|||
x20c_invGrappleBeam = g_SimplePool->GetObj("CMDL_InvGrappleBeam");
|
||||
x218_invFins = g_SimplePool->GetObj(FinModels[int(suit)]);
|
||||
x224_ballInnerGlow = g_SimplePool->GetObj("BallInnerGlow");
|
||||
x22c_ballInnerGlowGen = std::make_unique<CElementGen>(x224_ballInnerGlow,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x22c_ballInnerGlowGen = std::make_unique<CElementGen>(x224_ballInnerGlow);
|
||||
x230_ballTransitionFlash = g_SimplePool->GetObj("MorphBallTransitionFlash");
|
||||
x23c_lights.push_back(CLight::BuildDirectional(zeus::CVector3f::skForward, zeus::CColor::skWhite));
|
||||
x24c_actorLights = std::make_unique<CActorLights>(8, zeus::CVector3f::skZero, 4, 4, false, false, false, 0.1f);
|
||||
|
@ -285,9 +283,7 @@ void CSamusDoll::Update(float dt, CRandom16& rand)
|
|||
oldRemTransTime >= x50_totalTransitionTime - 0.5f &&
|
||||
x54_remTransitionTime < x50_totalTransitionTime - 0.5f)
|
||||
{
|
||||
x238_ballTransitionFlashGen = std::make_unique<CElementGen>(x230_ballTransitionFlash,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x238_ballTransitionFlashGen = std::make_unique<CElementGen>(x230_ballTransitionFlash);
|
||||
x238_ballTransitionFlashGen->SetGlobalScale(zeus::CVector3f(0.625f));
|
||||
}
|
||||
|
||||
|
|
|
@ -157,7 +157,9 @@ private:
|
|||
void AccumulateBounds(zeus::CVector3f& pos, float size);
|
||||
|
||||
public:
|
||||
CElementGen(const TToken<CGenDescription>& gen, EModelOrientationType orientType, EOptionalSystemFlags flags);
|
||||
CElementGen(const TToken<CGenDescription>& gen,
|
||||
EModelOrientationType orientType = EModelOrientationType::Normal,
|
||||
EOptionalSystemFlags flags = EOptionalSystemFlags::One);
|
||||
~CElementGen();
|
||||
|
||||
boo::GraphicsDataToken m_gfxToken;
|
||||
|
|
|
@ -57,9 +57,7 @@ CParticleElectric::CParticleElectric(const TToken<CElectricDescription>& token)
|
|||
x400_gpsmGenerators.reserve(x154_SCNT);
|
||||
for (int i=0 ; i<x154_SCNT ; ++i)
|
||||
{
|
||||
x400_gpsmGenerators.emplace_back(new CElementGen(desc->x50_GPSM.m_token,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One));
|
||||
x400_gpsmGenerators.emplace_back(new CElementGen(desc->x50_GPSM.m_token));
|
||||
x400_gpsmGenerators.back()->SetParticleEmission(false);
|
||||
}
|
||||
}
|
||||
|
@ -70,9 +68,7 @@ CParticleElectric::CParticleElectric(const TToken<CElectricDescription>& token)
|
|||
x410_epsmGenerators.reserve(x154_SCNT);
|
||||
for (int i=0 ; i<x154_SCNT ; ++i)
|
||||
{
|
||||
x410_epsmGenerators.emplace_back(new CElementGen(desc->x60_EPSM.m_token,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One));
|
||||
x410_epsmGenerators.emplace_back(new CElementGen(desc->x60_EPSM.m_token));
|
||||
x410_epsmGenerators.back()->SetParticleEmission(false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -253,9 +253,7 @@ void CAuxWeapon::CreateFlameThrower(const zeus::CTransform& xf, CStateManager& m
|
|||
mgr.AddObject(ft);
|
||||
ft->Think(dt, mgr);
|
||||
ft->StartFiring(xf, mgr);
|
||||
x24_muzzleFxGen = std::make_unique<CElementGen>(xc_flameMuzzle,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x24_muzzleFxGen = std::make_unique<CElementGen>(xc_flameMuzzle);
|
||||
x7c_comboSfx = NWeaponTypes::play_sfx(1842, false, true, 0.165f);
|
||||
mgr.GetCameraManager()->AddCameraShaker(skHardShake, false);
|
||||
mgr.GetPlayerState()->SetFiringComboBeam(true);
|
||||
|
@ -286,9 +284,7 @@ void CAuxWeapon::CreateWaveBusterBeam(CWeapon::EProjectileAttrib attribs, TUniqu
|
|||
CGunWeapon::GetShotDamageInfo(g_tweakPlayerGun->GetComboShotInfo(2), mgr), x70_waveBusterId,
|
||||
kInvalidAreaId, x6c_playerId, homingTarget, attribs);
|
||||
mgr.AddObject(wb);
|
||||
x24_muzzleFxGen = std::make_unique<CElementGen>(x18_busterMuzzle,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x24_muzzleFxGen = std::make_unique<CElementGen>(x18_busterMuzzle);
|
||||
x7c_comboSfx = NWeaponTypes::play_sfx(1847, false, true, 0.165f);
|
||||
mgr.GetCameraManager()->AddCameraShaker(CCameraShakeData::skChargedShotCameraShakeData, false);
|
||||
mgr.GetPlayerState()->SetFiringComboBeam(true);
|
||||
|
|
|
@ -16,8 +16,7 @@ CFlameThrower::CFlameThrower(const TToken<CWeaponDescription>& wDesc, const std:
|
|||
zeus::CVector3f(1.f), {}, -1, false)
|
||||
, x2e8_(xf)
|
||||
, x33c_flameDesc(g_SimplePool->GetObj({FOURCC('PART'), flameInfo.GetFlameFxId()}))
|
||||
, x348_flameGen(new CElementGen(x33c_flameDesc, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One))
|
||||
, x348_flameGen(new CElementGen(x33c_flameDesc))
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -29,18 +29,10 @@ CGrappleArm::CGrappleArm(const zeus::CVector3f& scale)
|
|||
x36c_grappleHitDesc(g_SimplePool->GetObj(SObjectTag{FOURCC('PART'), g_tweakGunRes->xbc_grappleHit})),
|
||||
x378_grappleMuzzleDesc(g_SimplePool->GetObj(SObjectTag{FOURCC('PART'), g_tweakGunRes->xc0_grappleMuzzle})),
|
||||
x384_grappleSwooshDesc(g_SimplePool->GetObj(SObjectTag{FOURCC('PART'), g_tweakGunRes->xc4_grappleSwoosh})),
|
||||
x390_grappleSegmentGen(std::make_unique<CElementGen>(x354_grappleSegmentDesc,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One)),
|
||||
x394_grappleClawGen(std::make_unique<CElementGen>(x360_grappleClawDesc,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One)),
|
||||
x398_grappleHitGen(std::make_unique<CElementGen>(x36c_grappleHitDesc,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One)),
|
||||
x39c_grappleMuzzleGen(std::make_unique<CElementGen>(x378_grappleMuzzleDesc,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One)),
|
||||
x390_grappleSegmentGen(std::make_unique<CElementGen>(x354_grappleSegmentDesc)),
|
||||
x394_grappleClawGen(std::make_unique<CElementGen>(x360_grappleClawDesc)),
|
||||
x398_grappleHitGen(std::make_unique<CElementGen>(x36c_grappleHitDesc)),
|
||||
x39c_grappleMuzzleGen(std::make_unique<CElementGen>(x378_grappleMuzzleDesc)),
|
||||
x3a0_grappleSwooshGen(std::make_unique<CParticleSwoosh>(x384_grappleSwooshDesc, 0)),
|
||||
x3a4_rainSplashGenerator(std::make_unique<CRainSplashGenerator>(scale, 20, 2, 0.f, 0.125f))
|
||||
{
|
||||
|
@ -280,12 +272,8 @@ void CGrappleArm::DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node,
|
|||
case EUserEventType::Projectile:
|
||||
if (x3b2_27_armMoving)
|
||||
return;
|
||||
x398_grappleHitGen = std::make_unique<CElementGen>(x36c_grappleHitDesc,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x39c_grappleMuzzleGen = std::make_unique<CElementGen>(x378_grappleMuzzleDesc,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x398_grappleHitGen = std::make_unique<CElementGen>(x36c_grappleHitDesc);
|
||||
x39c_grappleMuzzleGen = std::make_unique<CElementGen>(x378_grappleMuzzleDesc);
|
||||
x338_beamT = 0.f;
|
||||
x33c_beamDist = 0.f;
|
||||
x340_anglePhase = 0.f;
|
||||
|
|
|
@ -270,17 +270,13 @@ void CGunWeapon::EnableFrozenEffect(EFrozenFxType type)
|
|||
case EFrozenFxType::Thawed:
|
||||
if (x204_frozenEffect == EFrozenFxType::Thawed)
|
||||
break;
|
||||
x1b8_frozenGenerator = std::make_unique<CElementGen>(x188_frozenEffects[1],
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x1b8_frozenGenerator = std::make_unique<CElementGen>(x188_frozenEffects[1]);
|
||||
x1b8_frozenGenerator->SetGlobalScale(x4_scale);
|
||||
break;
|
||||
case EFrozenFxType::Frozen:
|
||||
if (x204_frozenEffect == EFrozenFxType::Frozen)
|
||||
break;
|
||||
x1b8_frozenGenerator = std::make_unique<CElementGen>(x188_frozenEffects[0],
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x1b8_frozenGenerator = std::make_unique<CElementGen>(x188_frozenEffects[0]);
|
||||
x1b8_frozenGenerator->SetGlobalScale(x4_scale);
|
||||
break;
|
||||
default:
|
||||
|
@ -296,9 +292,7 @@ void CGunWeapon::ActivateCharge(bool enable, bool resetEffect)
|
|||
if (enable || resetEffect)
|
||||
{
|
||||
x1a4_muzzleGenerators[x208_muzzleEffectIdx] =
|
||||
std::make_unique<CElementGen>(x16c_muzzleEffects[x208_muzzleEffectIdx],
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
std::make_unique<CElementGen>(x16c_muzzleEffects[x208_muzzleEffectIdx]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -434,8 +428,7 @@ void CGunWeapon::LoadMuzzleFx(float dt)
|
|||
{
|
||||
for (int i=0 ; i<2 ; ++i)
|
||||
{
|
||||
x1a4_muzzleGenerators.push_back(std::make_unique<CElementGen>(x16c_muzzleEffects[i],
|
||||
CElementGen::EModelOrientationType::Normal, CElementGen::EOptionalSystemFlags::One));
|
||||
x1a4_muzzleGenerators.push_back(std::make_unique<CElementGen>(x16c_muzzleEffects[i]));
|
||||
x1a4_muzzleGenerators.back()->SetParticleEmission(false);
|
||||
x1a4_muzzleGenerators.back()->Update(dt);
|
||||
}
|
||||
|
|
|
@ -101,16 +101,14 @@ void CIceBeam::EnableSecondaryFx(ESecondaryFxType type)
|
|||
case ESecondaryFxType::CancelCharge:
|
||||
if (!x248_25_inEndFx)
|
||||
{
|
||||
x244_chargeFx = std::make_unique<CElementGen>(x234_ice2nd2, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x244_chargeFx = std::make_unique<CElementGen>(x234_ice2nd2);
|
||||
x244_chargeFx->SetGlobalScale(x4_scale);
|
||||
x248_25_inEndFx = true;
|
||||
x1cc_enabledSecondaryEffect = ESecondaryFxType::CancelCharge;
|
||||
}
|
||||
break;
|
||||
case ESecondaryFxType::Charge:
|
||||
x244_chargeFx = std::make_unique<CElementGen>(x228_ice2nd1, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x244_chargeFx = std::make_unique<CElementGen>(x228_ice2nd1);
|
||||
x244_chargeFx->SetGlobalScale(x4_scale);
|
||||
x248_25_inEndFx = false;
|
||||
x1cc_enabledSecondaryEffect = type;
|
||||
|
@ -129,8 +127,7 @@ void CIceBeam::Update(float dt, CStateManager& mgr)
|
|||
x248_24_loaded = x21c_iceSmoke.IsLoaded() && x228_ice2nd1.IsLoaded() && x234_ice2nd2.IsLoaded();
|
||||
if (x248_24_loaded)
|
||||
{
|
||||
x240_smokeGen = std::make_unique<CElementGen>(x21c_iceSmoke, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x240_smokeGen = std::make_unique<CElementGen>(x21c_iceSmoke);
|
||||
x240_smokeGen->SetGlobalScale(x4_scale);
|
||||
x240_smokeGen->SetParticleEmission(false);
|
||||
}
|
||||
|
|
|
@ -60,21 +60,11 @@ void CNewFlameThrower::CreateLightObjects(CStateManager& mgr)
|
|||
void CNewFlameThrower::EnableFx(CStateManager& mgr)
|
||||
{
|
||||
DeleteProjectileLight(mgr);
|
||||
x358_mainFireGen = std::make_unique<CElementGen>(x304_mainFire,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x35c_mainSmokeGen = std::make_unique<CElementGen>(x310_mainSmoke,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x360_secondarySmokeGen = std::make_unique<CElementGen>(x31c_secondarySmoke,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x364_secondaryFireGen = std::make_unique<CElementGen>(x328_secondaryFire,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x368_secondarySparksGen = std::make_unique<CElementGen>(x334_secondarySparks,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x358_mainFireGen = std::make_unique<CElementGen>(x304_mainFire);
|
||||
x35c_mainSmokeGen = std::make_unique<CElementGen>(x310_mainSmoke);
|
||||
x360_secondarySmokeGen = std::make_unique<CElementGen>(x31c_secondarySmoke);
|
||||
x364_secondaryFireGen = std::make_unique<CElementGen>(x328_secondaryFire);
|
||||
x368_secondarySparksGen = std::make_unique<CElementGen>(x334_secondarySparks);
|
||||
x36c_swooshCenterGen = std::make_unique<CParticleSwoosh>(x340_swooshCenter, 0);
|
||||
x36c_swooshCenterGen->SetRenderGaps(true);
|
||||
x370_swooshFireGen = std::make_unique<CParticleSwoosh>(x34c_swooshFire, 0);
|
||||
|
|
|
@ -50,8 +50,7 @@ void CPhazonBeam::UpdateBeam(float dt, const zeus::CTransform& targetXf,
|
|||
|
||||
void CPhazonBeam::CreateBeam(CStateManager& mgr)
|
||||
{
|
||||
x234_chargeFxGen = std::make_unique<CElementGen>(x228_phazon2nd1, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x234_chargeFxGen = std::make_unique<CElementGen>(x228_phazon2nd1);
|
||||
if (x234_chargeFxGen)
|
||||
{
|
||||
x234_chargeFxGen->SetGlobalScale(x4_scale);
|
||||
|
|
|
@ -109,8 +109,7 @@ void CPlasmaBeam::EnableSecondaryFx(ESecondaryFxType type)
|
|||
x228_chargeFx->SetParticleEmission(false);
|
||||
break;
|
||||
case ESecondaryFxType::Charge:
|
||||
x228_chargeFx = std::make_unique<CElementGen>(x21c_plasma2nd1, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x228_chargeFx = std::make_unique<CElementGen>(x21c_plasma2nd1);
|
||||
x228_chargeFx->SetGlobalScale(x4_scale);
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -53,8 +53,7 @@ CPlayerGun::CPlayerGun(TUniqueId playerId)
|
|||
x75c_phazonBeam = std::make_unique<CPhazonBeam>(g_tweakGunRes->x20_phazonBeam, EWeaponType::Phazon,
|
||||
playerId, EMaterialTypes::Player, sGunScale);
|
||||
x774_holoTransitionGen = std::make_unique<CElementGen>(
|
||||
g_SimplePool->GetObj(SObjectTag{FOURCC('PART'), g_tweakGunRes->x24_holoTransition}),
|
||||
CElementGen::EModelOrientationType::Normal, CElementGen::EOptionalSystemFlags::One);
|
||||
g_SimplePool->GetObj(SObjectTag{FOURCC('PART'), g_tweakGunRes->x24_holoTransition}));
|
||||
x82c_shadow = std::make_unique<CWorldShadow>(32, 32, true);
|
||||
|
||||
x832_31_inRestPose = true;
|
||||
|
@ -112,9 +111,7 @@ void CPlayerGun::InitMuzzleData()
|
|||
{
|
||||
x7c0_auxMuzzleEffects.push_back(g_SimplePool->GetObj(SObjectTag{FOURCC('PART'),
|
||||
g_tweakGunRes->xa4_auxMuzzle[i]}));
|
||||
x800_auxMuzzleGenerators.emplace_back(new CElementGen(x7c0_auxMuzzleEffects.back(),
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One));
|
||||
x800_auxMuzzleGenerators.emplace_back(new CElementGen(x7c0_auxMuzzleEffects.back()));
|
||||
x800_auxMuzzleGenerators.back()->SetParticleEmission(false);
|
||||
}
|
||||
}
|
||||
|
@ -1241,9 +1238,7 @@ void CPlayerGun::EnableChargeFx(EChargeState state, CStateManager& mgr)
|
|||
x833_30_canShowAuxMuzzleEffect = true;
|
||||
|
||||
x800_auxMuzzleGenerators[int(x320_currentAuxBeam)] =
|
||||
std::make_unique<CElementGen>(x7c0_auxMuzzleEffects[int(x320_currentAuxBeam)],
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
std::make_unique<CElementGen>(x7c0_auxMuzzleEffects[int(x320_currentAuxBeam)]);
|
||||
|
||||
x800_auxMuzzleGenerators[int(x320_currentAuxBeam)]->SetParticleEmission(true);
|
||||
}
|
||||
|
@ -1584,8 +1579,7 @@ void CPlayerGun::ActivateCombo(CStateManager& mgr)
|
|||
if (xferEffect.IsLoaded())
|
||||
{
|
||||
x77c_comboXferGen =
|
||||
std::make_unique<CElementGen>(xferEffect, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
std::make_unique<CElementGen>(xferEffect);
|
||||
x77c_comboXferGen->SetGlobalScale(sGunScale);
|
||||
}
|
||||
x72c_currentBeam->EnableCharge(true);
|
||||
|
|
|
@ -99,9 +99,7 @@ void CPowerBeam::EnableSecondaryFx(ESecondaryFxType type)
|
|||
x1cc_enabledSecondaryEffect = ESecondaryFxType::None;
|
||||
break;
|
||||
case ESecondaryFxType::Charge:
|
||||
x238_power2ndGen = std::make_unique<CElementGen>(x228_power2nd1,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x238_power2ndGen = std::make_unique<CElementGen>(x228_power2nd1);
|
||||
x238_power2ndGen->SetGlobalScale(x4_scale);
|
||||
x1cc_enabledSecondaryEffect = type;
|
||||
break;
|
||||
|
@ -120,9 +118,7 @@ void CPowerBeam::Update(float dt, CStateManager& mgr)
|
|||
x244_25_loaded = x21c_shotSmoke.IsLoaded() && x228_power2nd1.IsLoaded();
|
||||
if (x244_25_loaded)
|
||||
{
|
||||
x234_shotSmokeGen = std::make_unique<CElementGen>(x21c_shotSmoke,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x234_shotSmokeGen = std::make_unique<CElementGen>(x21c_shotSmoke);
|
||||
x234_shotSmokeGen->SetParticleEmission(false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -128,8 +128,7 @@ void CWaveBeam::EnableSecondaryFx(ESecondaryFxType type)
|
|||
}
|
||||
break;
|
||||
case ESecondaryFxType::ToCombo:
|
||||
x254_chargeFx = std::make_unique<CElementGen>(x240_wave2nd3, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x254_chargeFx = std::make_unique<CElementGen>(x240_wave2nd3);
|
||||
x254_chargeFx->SetGlobalScale(x4_scale);
|
||||
x24c_effectTimer = 0.f;
|
||||
x258_25_effectTimerActive = true;
|
||||
|
|
|
@ -23,12 +23,8 @@ CWaveBuster::CWaveBuster(const TToken<CWeaponDescription>& desc, EWeaponType typ
|
|||
x378_busterLight.GetObj();
|
||||
x384_busterSwoosh1Gen = std::make_unique<CParticleSwoosh>(x354_busterSwoosh1, 0);
|
||||
x388_busterSwoosh2Gen = std::make_unique<CParticleSwoosh>(x360_busterSwoosh2, 0);
|
||||
x38c_busterSparksGen = std::make_unique<CElementGen>(x36c_busterSparks,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x390_busterLightGen = std::make_unique<CElementGen>(x378_busterLight,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
x38c_busterSparksGen = std::make_unique<CElementGen>(x36c_busterSparks);
|
||||
x390_busterLightGen = std::make_unique<CElementGen>(x378_busterLight);
|
||||
x3d0_24_firing = true;
|
||||
x3d0_25_ = true;
|
||||
x3d0_26_ = false;
|
||||
|
|
|
@ -153,37 +153,27 @@ void CActorModelParticles::LoadParticleDGRPs()
|
|||
|
||||
std::unique_ptr<CElementGen> CActorModelParticles::MakeOnFireGen() const
|
||||
{
|
||||
return std::make_unique<CElementGen>(x18_onFire,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
return std::make_unique<CElementGen>(x18_onFire);
|
||||
}
|
||||
|
||||
std::unique_ptr<CElementGen> CActorModelParticles::MakeAshGen() const
|
||||
{
|
||||
return std::make_unique<CElementGen>(x20_ash,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
return std::make_unique<CElementGen>(x20_ash);
|
||||
}
|
||||
|
||||
std::unique_ptr<CElementGen> CActorModelParticles::MakeIceGen() const
|
||||
{
|
||||
return std::make_unique<CElementGen>(x28_iceBreak,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
return std::make_unique<CElementGen>(x28_iceBreak);
|
||||
}
|
||||
|
||||
std::unique_ptr<CElementGen> CActorModelParticles::MakeFirePopGen() const
|
||||
{
|
||||
return std::make_unique<CElementGen>(x30_firePop,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
return std::make_unique<CElementGen>(x30_firePop);
|
||||
}
|
||||
|
||||
std::unique_ptr<CElementGen> CActorModelParticles::MakeIcePopGen() const
|
||||
{
|
||||
return std::make_unique<CElementGen>(x38_icePop,
|
||||
CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
return std::make_unique<CElementGen>(x38_icePop);
|
||||
}
|
||||
|
||||
std::unique_ptr<CParticleElectric> CActorModelParticles::MakeElectricGen() const
|
||||
|
|
|
@ -26,8 +26,7 @@ CHUDBillboardEffect::CHUDBillboardEffect(const std::experimental::optional<TToke
|
|||
|
||||
if (particle)
|
||||
{
|
||||
xe8_generator = std::make_unique<CElementGen>(*particle, CElementGen::EModelOrientationType::Normal,
|
||||
CElementGen::EOptionalSystemFlags::One);
|
||||
xe8_generator = std::make_unique<CElementGen>(*particle);
|
||||
if (static_cast<CElementGen&>(*xe8_generator).IsIndirectTextured())
|
||||
++g_IndirectTexturedBillboardCount;
|
||||
}
|
||||
|
|
|
@ -1,21 +1,182 @@
|
|||
#include "GameGlobalObjects.hpp"
|
||||
#include "CDependencyGroup.hpp"
|
||||
#include "CMorphBall.hpp"
|
||||
#include "CPlayer.hpp"
|
||||
#include "CMorphBallShadow.hpp"
|
||||
#include "Particle/CGenDescription.hpp"
|
||||
#include "CSimplePool.hpp"
|
||||
#include "CGameLight.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
|
||||
CMorphBall::CMorphBall(CPlayer& player, float)
|
||||
: x0_player(player)
|
||||
static float kSpiderBallCollisionRadius;
|
||||
|
||||
CMorphBall::CMorphBall(CPlayer& player, float radius)
|
||||
: x0_player(player), xc_radius(radius),
|
||||
x38_collisionSphere({{0.f, 0.f, radius}, radius},
|
||||
{EMaterialTypes::Player, EMaterialTypes::Solid, EMaterialTypes::GroundCollider}),
|
||||
x58_ballModel(GetMorphBallModel("SamusBallANCS", radius)),
|
||||
x60_spiderBallGlassModel(GetMorphBallModel("SamusSpiderBallGlassCMDL", radius)),
|
||||
x68_lowPolyBallModel(GetMorphBallModel("SamusBallLowPolyCMDL", radius)),
|
||||
x70_frozenBallModel(GetMorphBallModel("SamusBallFrozenCMDL", radius)),
|
||||
x1968_slowBlueTailSwoosh(g_SimplePool->GetObj("SlowBlueTailSwoosh")),
|
||||
x1970_slowBlueTailSwoosh2(g_SimplePool->GetObj("SlowBlueTailSwoosh2")),
|
||||
x1978_jaggyTrail(g_SimplePool->GetObj("JaggyTrail")),
|
||||
x1980_wallSpark(g_SimplePool->GetObj("WallSpark")),
|
||||
x1988_ballInnerGlow(g_SimplePool->GetObj("BallInnerGlow")),
|
||||
x1990_spiderBallMagnetEffect(g_SimplePool->GetObj("SpiderBallMagnetEffect")),
|
||||
x1998_boostBallGlow(g_SimplePool->GetObj("BoostBallGlow")),
|
||||
x19a0_spiderElectric(g_SimplePool->GetObj("SpiderElectric")),
|
||||
x19a8_morphBallTransitionFlash(g_SimplePool->GetObj("MorphBallTransitionFlash")),
|
||||
x19b0_effect_morphBallIceBreak(g_SimplePool->GetObj("Effect_MorphBallIceBreak"))
|
||||
{
|
||||
x19b8_slowBlueTailSwooshGen = std::make_unique<CParticleSwoosh>(x1968_slowBlueTailSwoosh, 0);
|
||||
x19bc_slowBlueTailSwooshGen2 = std::make_unique<CParticleSwoosh>(x1968_slowBlueTailSwoosh, 0);
|
||||
x19c0_slowBlueTailSwoosh2Gen = std::make_unique<CParticleSwoosh>(x1970_slowBlueTailSwoosh2, 0);
|
||||
x19c4_slowBlueTailSwoosh2Gen2 = std::make_unique<CParticleSwoosh>(x1970_slowBlueTailSwoosh2, 0);
|
||||
x19c8_jaggyTrailGen = std::make_unique<CParticleSwoosh>(x1978_jaggyTrail, 0);
|
||||
x19cc_wallSparkGen = std::make_unique<CElementGen>(x1980_wallSpark);
|
||||
x19d0_ballInnerGlowGen = std::make_unique<CElementGen>(x1988_ballInnerGlow);
|
||||
x19d4_spiderBallMagnetEffectGen = std::make_unique<CElementGen>(x1990_spiderBallMagnetEffect);
|
||||
x19d8_boostBallGlowGen = std::make_unique<CElementGen>(x1998_boostBallGlow);
|
||||
x1c14_worldShadow = std::make_unique<CWorldShadow>(16, 16, false);
|
||||
x1c18_actorLights = std::make_unique<CActorLights>(8, zeus::CVector3f::skZero, 4, 4, false, false, false, 0.1f);
|
||||
x1c1c_rainSplashGen = std::make_unique<CRainSplashGenerator>(x58_ballModel->GetScale(), 40, 2, 0.15f, 0.5f);
|
||||
x1c3c_quats.resize(5);
|
||||
x1c90_vecs.resize(5);
|
||||
x1cd0_.resize(15);
|
||||
x1d10_.resize(15);
|
||||
x1de4_24 = false;
|
||||
x1de4_25 = true;
|
||||
x1df8_24 = false;
|
||||
x1df8_25 = false;
|
||||
x1df8_26 = false;
|
||||
x1df8_27 = false;
|
||||
|
||||
x19d4_spiderBallMagnetEffectGen->SetParticleEmission(false);
|
||||
x19d4_spiderBallMagnetEffectGen->Update(1.0 / 60.0);
|
||||
|
||||
kSpiderBallCollisionRadius = GetBallRadius() + 0.2f;
|
||||
|
||||
for (int i=0 ; i<32 ; ++i)
|
||||
x19e4_spiderElectricGens.emplace_back(std::make_unique<CParticleSwoosh>(x19a0_spiderElectric, 0), false);
|
||||
|
||||
LoadAnimationTokens("SamusBallANCS");
|
||||
InitializeWakeEffects();
|
||||
}
|
||||
|
||||
void CMorphBall::LoadAnimationTokens(const std::string& ancsName)
|
||||
{
|
||||
TToken<CDependencyGroup> dgrp = g_SimplePool->GetObj((ancsName + "_DGRP").c_str());
|
||||
x1958_animationTokens.clear();
|
||||
x1958_animationTokens.reserve(dgrp->GetObjectTagVector().size());
|
||||
for (const SObjectTag& tag : dgrp->GetObjectTagVector())
|
||||
{
|
||||
if (tag.type == FOURCC('CMDL') || tag.type == FOURCC('CSKR') || tag.type == FOURCC('TXTR'))
|
||||
continue;
|
||||
x1958_animationTokens.push_back(g_SimplePool->GetObj(tag));
|
||||
x1958_animationTokens.back().Lock();
|
||||
}
|
||||
}
|
||||
|
||||
/* Maps material index to effect in generator array */
|
||||
static const s32 skWakeEffectMap[32] =
|
||||
{
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
0, // Phazon
|
||||
2, // Dirt
|
||||
3, // Lava
|
||||
-1,
|
||||
4, // Snow
|
||||
5, // MudSlow
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
6, // Sand
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1
|
||||
};
|
||||
|
||||
void CMorphBall::InitializeWakeEffects()
|
||||
{
|
||||
TToken<CGenDescription> nullParticle =
|
||||
CToken(TObjOwnerDerivedFromIObj<CGenDescription>::GetNewDerivedObject(std::make_unique<CGenDescription>()));
|
||||
for (int i=0 ; i<8 ; ++i)
|
||||
x1b84_wakeEffects.push_back(nullParticle);
|
||||
|
||||
x1b84_wakeEffects[2] = g_SimplePool->GetObj("DirtWake");
|
||||
x1b84_wakeEffects[0] = g_SimplePool->GetObj("PhazonWake");
|
||||
x1b84_wakeEffects[1] = g_SimplePool->GetObj("PhazonWakeOrange");
|
||||
x1b84_wakeEffects[3] = g_SimplePool->GetObj("LavaWake");
|
||||
x1b84_wakeEffects[4] = g_SimplePool->GetObj("SnowWake");
|
||||
x1b84_wakeEffects[5] = g_SimplePool->GetObj("MudWake");
|
||||
x1b84_wakeEffects[6] = g_SimplePool->GetObj("SandWake");
|
||||
x1b84_wakeEffects[7] = g_SimplePool->GetObj("RainWake");
|
||||
|
||||
x1bc8_wakeEffectGens.resize(8);
|
||||
x1bc8_wakeEffectGens[2] = std::make_unique<CElementGen>(x1b84_wakeEffects[2]);
|
||||
x1bc8_wakeEffectGens[0] = std::make_unique<CElementGen>(x1b84_wakeEffects[0]);
|
||||
x1bc8_wakeEffectGens[1] = std::make_unique<CElementGen>(x1b84_wakeEffects[1]);
|
||||
x1bc8_wakeEffectGens[3] = std::make_unique<CElementGen>(x1b84_wakeEffects[3]);
|
||||
x1bc8_wakeEffectGens[4] = std::make_unique<CElementGen>(x1b84_wakeEffects[4]);
|
||||
x1bc8_wakeEffectGens[5] = std::make_unique<CElementGen>(x1b84_wakeEffects[5]);
|
||||
x1bc8_wakeEffectGens[6] = std::make_unique<CElementGen>(x1b84_wakeEffects[6]);
|
||||
x1bc8_wakeEffectGens[7] = std::make_unique<CElementGen>(x1b84_wakeEffects[7]);
|
||||
}
|
||||
|
||||
std::unique_ptr<CModelData> CMorphBall::GetMorphBallModel(const char* name, float radius)
|
||||
{
|
||||
const SObjectTag* tag = g_ResFactory->GetResourceIdByName(name);
|
||||
if (tag->type == FOURCC('CMDL'))
|
||||
return std::make_unique<CModelData>(CStaticRes(tag->id, zeus::CVector3f(radius * 2.f)));
|
||||
else
|
||||
return std::make_unique<CModelData>(CAnimRes(tag->id, 0, zeus::CVector3f(radius * 2.f), 0, false));
|
||||
}
|
||||
|
||||
void CMorphBall::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr)
|
||||
{
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case EScriptObjectMessage::Registered:
|
||||
if (x19d0_ballInnerGlowGen && x19d0_ballInnerGlowGen->SystemHasLight())
|
||||
{
|
||||
x1c10_ballInnerGlowLight = mgr.AllocateUniqueId();
|
||||
CGameLight* l = new CGameLight(x1c10_ballInnerGlowLight, kInvalidAreaId, false, "BallLight",
|
||||
GetBallToWorld(), x0_player.GetUniqueId(),
|
||||
x19d0_ballInnerGlowGen->GetLight(),
|
||||
u32(reinterpret_cast<uintptr_t>(x1988_ballInnerGlow.GetObj())), 0, 0.f);
|
||||
mgr.AddObject(l);
|
||||
}
|
||||
break;
|
||||
case EScriptObjectMessage::Deleted:
|
||||
DeleteLight(mgr);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
zeus::CVector3f CMorphBall::GetBallContactSurfaceNormal() const { return {}; }
|
||||
|
||||
void CMorphBall::DrawBallShadow(const CStateManager& mgr)
|
||||
{
|
||||
if (!x1e50_shadow)
|
||||
|
@ -31,10 +192,12 @@ void CMorphBall::DrawBallShadow(const CStateManager& mgr)
|
|||
if (x0_player.x578_morphDuration != 0.f)
|
||||
alpha = zeus::clamp(0.f, x0_player.x574_morphTime / x0_player.x578_morphDuration, 1.f);
|
||||
alpha = 1.f - alpha;
|
||||
break;
|
||||
case CPlayer::EPlayerMorphBallState::Morphing:
|
||||
alpha = 0.f;
|
||||
if (x0_player.x578_morphDuration != 0.f)
|
||||
alpha = zeus::clamp(0.f, x0_player.x574_morphTime / x0_player.x578_morphDuration, 1.f);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
x1e50_shadow->Render(mgr, alpha);
|
||||
|
@ -42,15 +205,581 @@ void CMorphBall::DrawBallShadow(const CStateManager& mgr)
|
|||
|
||||
void CMorphBall::DeleteBallShadow()
|
||||
{
|
||||
|
||||
x1e50_shadow.reset();
|
||||
}
|
||||
|
||||
void CMorphBall::CreateBallShadow()
|
||||
{
|
||||
|
||||
x1e50_shadow = std::make_unique<CMorphBallShadow>();
|
||||
}
|
||||
|
||||
void CMorphBall::RenderToShadowTex(CStateManager& mgr)
|
||||
{
|
||||
if (x1e50_shadow)
|
||||
{
|
||||
zeus::CVector3f center =
|
||||
x0_player.GetPrimitiveOffset() + x0_player.GetTranslation() + zeus::CVector3f(0.f, 0.f, xc_radius);
|
||||
zeus::CAABox aabb(center - zeus::CVector3f(1.25f * xc_radius, 1.25f * xc_radius, 10.f),
|
||||
center + zeus::CVector3f(1.25f * xc_radius, 1.25f * xc_radius, xc_radius));
|
||||
x1e50_shadow->RenderIdBuffer(aabb, mgr, x0_player);
|
||||
}
|
||||
}
|
||||
|
||||
static const u16 skBallRollSfx[] =
|
||||
{
|
||||
0xFFFF, 0x05DE, 0x05DD, 0x062F, 0x0786,
|
||||
0xFFFF, 0x05DC, 0x060B, 0x05C8, 0x088A,
|
||||
0x0698, 0x0787, 0x0630, 0xFFFF, 0x0628,
|
||||
0x05DD, 0x05DD, 0x05C8, 0xFFFF, 0xFFFF,
|
||||
0xFFFF, 0xFFFF, 0x05FE, 0x0628
|
||||
};
|
||||
|
||||
static const u16 skBallLandSfx[] =
|
||||
{
|
||||
0xFFFF, 0x05C3, 0x05E0, 0x062C, 0x065B,
|
||||
0xFFFF, 0x05DA, 0x0609, 0x05C0, 0x0697,
|
||||
0x0697, 0x065C, 0x062D, 0xFFFF, 0x0627,
|
||||
0x05E0, 0x05E0, 0x05C0, 0xFFFF, 0xFFFF,
|
||||
0xFFFF, 0xFFFF, 0x05FD, 0x0627
|
||||
};
|
||||
|
||||
void CMorphBall::SelectMorphBallSounds(const CMaterialList& mat)
|
||||
{
|
||||
u16 rollSfx;
|
||||
if (x0_player.x9c5_30_selectFluidBallSound)
|
||||
{
|
||||
if (x0_player.x82c_inLava)
|
||||
rollSfx = 2186;
|
||||
else
|
||||
rollSfx = 1481;
|
||||
}
|
||||
else
|
||||
{
|
||||
rollSfx = CPlayer::SfxIdFromMaterial(mat, skBallRollSfx, 24, 0xffff);
|
||||
}
|
||||
x0_player.x9c5_30_selectFluidBallSound = false;
|
||||
|
||||
if (rollSfx != 0xffff)
|
||||
{
|
||||
if (x1e34_rollSfx != rollSfx && x1e2c_rollSfxHandle)
|
||||
{
|
||||
CSfxManager::SfxStop(x1e2c_rollSfxHandle);
|
||||
x1e2c_rollSfxHandle.reset();
|
||||
}
|
||||
x1e34_rollSfx = rollSfx;
|
||||
}
|
||||
|
||||
x1e36_landSfx = CPlayer::SfxIdFromMaterial(mat, skBallLandSfx, 24, 0xffff);
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateMorphBallSounds(float dt)
|
||||
{
|
||||
zeus::CVector3f velocity = x0_player.GetVelocity();
|
||||
if (x187c_spiderBallState != ESpiderBallState::Active)
|
||||
velocity.z = 0.f;
|
||||
|
||||
switch (x0_player.GetPlayerMovementState())
|
||||
{
|
||||
case CPlayer::EPlayerMovementState::OnGround:
|
||||
case CPlayer::EPlayerMovementState::FallingMorphed:
|
||||
{
|
||||
float vel = velocity.magnitude();
|
||||
if (x187c_spiderBallState == ESpiderBallState::Active)
|
||||
vel += g_tweakBall->GetSpiderBallRollSpeed() * dt * 4.f;
|
||||
if (vel > 0.8f)
|
||||
{
|
||||
if (!x1e2c_rollSfxHandle)
|
||||
{
|
||||
if (x1e34_rollSfx != 0xffff)
|
||||
{
|
||||
x1e2c_rollSfxHandle =
|
||||
CSfxManager::AddEmitter(x1e34_rollSfx, x0_player.GetTranslation(), zeus::CVector3f::skZero,
|
||||
true, true, 0x7f, kInvalidAreaId);
|
||||
}
|
||||
x0_player.ApplySubmergedPitchBend(x1e2c_rollSfxHandle);
|
||||
}
|
||||
CSfxManager::PitchBend(x1e2c_rollSfxHandle, zeus::clamp(-1.f, vel * 0.122f - 0.831f, 1.f));
|
||||
float maxVol = zeus::clamp(0.f, 0.025f * vel + 0.5f, 1.f);
|
||||
CSfxManager::UpdateEmitter(x1e2c_rollSfxHandle, x0_player.GetTranslation(),
|
||||
zeus::CVector3f::skZero, maxVol);
|
||||
break;
|
||||
}
|
||||
}
|
||||
default:
|
||||
if (x1e2c_rollSfxHandle)
|
||||
{
|
||||
CSfxManager::SfxStop(x1e2c_rollSfxHandle);
|
||||
x1e2c_rollSfxHandle.reset();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (x187c_spiderBallState == ESpiderBallState::Active)
|
||||
{
|
||||
if (!x1e30_spiderSfxHandle)
|
||||
{
|
||||
x1e30_spiderSfxHandle =
|
||||
CSfxManager::AddEmitter(1523, x0_player.GetTranslation(), zeus::CVector3f::skZero,
|
||||
true, true, 0xc8, kInvalidAreaId);
|
||||
x0_player.ApplySubmergedPitchBend(x1e30_spiderSfxHandle);
|
||||
}
|
||||
CSfxManager::UpdateEmitter(x1e30_spiderSfxHandle, x0_player.GetTranslation(),
|
||||
zeus::CVector3f::skZero, 1.f);
|
||||
}
|
||||
else if (x1e30_spiderSfxHandle)
|
||||
{
|
||||
CSfxManager::SfxStop(x1e30_spiderSfxHandle);
|
||||
x1e30_spiderSfxHandle.reset();
|
||||
}
|
||||
}
|
||||
|
||||
float CMorphBall::GetBallRadius() const
|
||||
{
|
||||
return g_tweakPlayer->GetPlayerBallHalfExtent();
|
||||
}
|
||||
|
||||
float CMorphBall::GetBallTouchRadius() const
|
||||
{
|
||||
return g_tweakBall->GetBallTouchRadius();
|
||||
}
|
||||
|
||||
void CMorphBall::ForwardInput(const CFinalInput&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ComputeBallMovement(const CFinalInput&, CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CMorphBall::IsMovementAllowed() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateSpiderBall(const CFinalInput&, CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ApplySpiderBallSwingingForces(const CFinalInput&, CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ApplySpiderBallRollForces(const CFinalInput&, CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::CalculateSpiderBallAttractionSurfaceForces(const CFinalInput&, CStateManager&,
|
||||
const zeus::CTransform&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::CheckForSwitchToSpiderBallSwinging(CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::FindClosestSpiderBallWaypoint(CStateManager&, const zeus::CVector3f&, zeus::CVector3f&,
|
||||
zeus::CVector3f&, zeus::CVector3f&, float&, zeus::CVector3f&, bool&,
|
||||
zeus::CTransform&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SetSpiderBallSwingingState(bool)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::GetSpiderBallControllerMovement(const CFinalInput&, bool, bool)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ResetSpiderBallSwingControllerMovementTimer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateSpiderBallSwingControllerMovementTimer(float, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
float CMorphBall::GetSpiderBallSwingControllerMovementScalar() const
|
||||
{
|
||||
return 0.f;
|
||||
}
|
||||
|
||||
void CMorphBall::CreateSpiderBallParticles(const zeus::CVector3f&, const zeus::CVector3f&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ComputeMarioMovement(const CFinalInput&, CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::GetSwooshToWorld() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
zeus::CTransform CMorphBall::GetBallToWorld() const
|
||||
{
|
||||
return zeus::CTransform::Translate(x0_player.GetTranslation() + zeus::CVector3f(0.f, 0.f, GetBallRadius())) *
|
||||
x0_player.GetTransform().getRotation();
|
||||
}
|
||||
|
||||
void CMorphBall::CalculateSurfaceToWorld(const zeus::CVector3f&, const zeus::CVector3f&, const zeus::CVector3f&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::CalculateBallContactInfo(zeus::CVector3f&, zeus::CVector3f&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::BallTurnInput(const CFinalInput&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateBallDynamics(CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SwitchToMarble()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SwitchToTire()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::Update(float dt, CStateManager& mgr)
|
||||
{
|
||||
if (x187c_spiderBallState == ESpiderBallState::Active)
|
||||
CreateSpiderBallParticles(GetBallToWorld().origin, x1890_spiderTrackPoint);
|
||||
|
||||
if (x0_player.GetDeathTime() <= 0.f)
|
||||
UpdateEffects(dt, mgr);
|
||||
|
||||
if (x1e44_ > 0.f)
|
||||
{
|
||||
x1e44_ -= x1e48_ * dt;
|
||||
if (x1e44_ <= 0.f)
|
||||
{
|
||||
x1e44_ = 0.f;
|
||||
x1e48_ = 0.f;
|
||||
x1e4c_ = 0.f;
|
||||
}
|
||||
else
|
||||
{
|
||||
x1e4c_ += dt;
|
||||
}
|
||||
}
|
||||
|
||||
if (x58_ballModel)
|
||||
x58_ballModel->AdvanceAnimation(dt, mgr, kInvalidAreaId, true);
|
||||
|
||||
if (x1c2c_)
|
||||
{
|
||||
x1c20_ += x1c28_ * dt;
|
||||
if (x1c20_ < 0.f)
|
||||
{
|
||||
x1c2c_ = false;
|
||||
x1c20_ = 0.f;
|
||||
}
|
||||
else if (x1c20_ > x1c24_)
|
||||
{
|
||||
x1c2c_ = false;
|
||||
x1c20_ = x1c24_;
|
||||
}
|
||||
}
|
||||
|
||||
if (x1c1c_rainSplashGen)
|
||||
x1c1c_rainSplashGen->Update(dt, mgr);
|
||||
|
||||
UpdateMorphBallSounds(dt);
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateScriptMessage(EScriptObjectMessage, TUniqueId, CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::DeleteLight(CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SetBallLightActive(CStateManager&, bool)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::EnterMorphBallState(CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::LeaveMorphBallState(CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateEffects(float, CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ComputeBoostBallMovement(const CFinalInput&, const CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::EnterBoosting()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::LeaveBoosting()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::CancelBoosting()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateMarbleDynamics(CStateManager&, float, const zeus::CVector3f&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ApplyFriction(float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::DampLinearAndAngularVelocities(float, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
zeus::CTransform CMorphBall::GetPrimitiveTransform() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
void CMorphBall::DrawCollisionPrimitive() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::GetMinimumAlignmentSpeed() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::PreRender(CStateManager&, const zeus::CFrustum&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::Render(const CStateManager&, const CActorLights*) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ResetMorphBallTransitionFlash()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateMorphBallTransitionFlash(float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::RenderMorphBallTransitionFlash(const CStateManager&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::RenderDamageEffects(const CStateManager&, const zeus::CTransform&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateHalfPipeStatus(CStateManager&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CMorphBall::GetIsInHalfPipeMode() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CMorphBall::SetIsInHalfPipeMode(bool)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::GetIsInHalfPipeModeInAir() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SetIsInHalfPipeModeInAir(bool)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::GetTouchedHalfPipeRecently() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SetTouchedHalfPipeRecently(bool)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::DisableHalfPipeStatus()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CMorphBall::BallCloseToCollision(const CStateManager&, float, const CMaterialFilter& filter) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CMorphBall::CollidedWith(TUniqueId, const CCollisionInfoList&, CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CMorphBall::IsInFrustum(const zeus::CFrustum&) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CMorphBall::ComputeLiftForces(const zeus::CVector3f&, const zeus::CVector3f&, const CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::CalculateSurfaceFriction() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ApplyGravity(CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SpinToSpeed(float, zeus::CVector3f, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ComputeMaxSpeed() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::Touch(CActor&, CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CMorphBall::IsClimbable(const CCollisionInfo&) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void CMorphBall::FluidFXThink(CActor::EFluidState, CScriptWater&, CStateManager&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::GetMorphBallModel(const std::string&, float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::LoadMorphBallModel(CStateManager& mgr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::AddSpiderBallElectricalEffect()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::UpdateSpiderBallElectricalEffect()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::RenderSpiderBallElectricalEffect() const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::RenderEnergyDrainEffects(const CStateManager&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::TouchModel(const CStateManager&) const
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::SetAsProjectile(const CDamageInfo&, const CDamageInfo&)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::TakeDamage(float)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::StartLandingSfx()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::Stop()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::StopSounds()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CMorphBall::ActorAttached()
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,12 @@
|
|||
#include "zeus/CVector3f.hpp"
|
||||
#include "Collision/CCollidableSphere.hpp"
|
||||
#include "RetroTypes.hpp"
|
||||
#include "Character/CAnimCharacterSet.hpp"
|
||||
#include "Particle/CParticleSwoosh.hpp"
|
||||
#include "Particle/CElementGen.hpp"
|
||||
#include "CWorldShadow.hpp"
|
||||
#include "Graphics/CRainSplashGenerator.hpp"
|
||||
#include "CMorphBallShadow.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
|
@ -15,7 +21,6 @@ class CDamageInfo;
|
|||
class CFinalInput;
|
||||
class CScriptWater;
|
||||
class CStateManager;
|
||||
class CMorphBallShadow;
|
||||
|
||||
class CMorphBall
|
||||
{
|
||||
|
@ -27,7 +32,8 @@ public:
|
|||
|
||||
enum class ESpiderBallState
|
||||
{
|
||||
Zero
|
||||
Inactive,
|
||||
Active
|
||||
};
|
||||
|
||||
enum class EBombJumpState
|
||||
|
@ -37,6 +43,15 @@ public:
|
|||
};
|
||||
private:
|
||||
CPlayer& x0_player;
|
||||
s32 x4_ = -1;
|
||||
u32 x8_ = 0;
|
||||
float xc_radius;
|
||||
zeus::CVector3f x10_;
|
||||
zeus::CVector3f x1c_;
|
||||
bool x28_ = false;
|
||||
float x2c_ = 0.f;
|
||||
float x30_ = 0.f;
|
||||
CCollidableSphere x38_collisionSphere;
|
||||
std::unique_ptr<CModelData> x58_ballModel;
|
||||
u32 x5c_ballModelShader = 0;
|
||||
std::unique_ptr<CModelData> x60_spiderBallGlassModel;
|
||||
|
@ -45,138 +60,219 @@ private:
|
|||
u32 x6c_lowPolyBallModelShader = 0;
|
||||
std::unique_ptr<CModelData> x70_frozenBallModel;
|
||||
u32 x74_frozenBallModelShader = 0;
|
||||
u32 x187c_ = 0;
|
||||
u32 xc78_ = 0;
|
||||
ESpiderBallState x187c_spiderBallState = ESpiderBallState::Inactive;
|
||||
zeus::CVector3f x1880_;
|
||||
float x188c_ = 1.f;
|
||||
zeus::CVector3f x1890_spiderTrackPoint;
|
||||
zeus::CVector3f x189c_;
|
||||
zeus::CVector3f x18a8_;
|
||||
float x18b4_ = 0.f;
|
||||
float x18b8_ = 0.f;
|
||||
bool x18bc_ = false;
|
||||
bool x18bd_ = false;
|
||||
bool x18be_ = false;
|
||||
bool x18bf_ = true;
|
||||
bool x18c0_ = false;
|
||||
zeus::CTransform x18c4_;
|
||||
float x18f4_ = 0.f;
|
||||
float x18f8_ = 0.f;
|
||||
float x18fc_ = 0.f;
|
||||
float x1900_ = 0.f;
|
||||
float x1904_ = 0.f;
|
||||
float x1908_ = 0.f;
|
||||
zeus::CVector2f x190c_;
|
||||
float x1914_ = 0.f;
|
||||
float x1918_ = 0.f;
|
||||
float x191c_damageTimer = 0.f;
|
||||
bool x1920_ = false;
|
||||
zeus::CTransform x1924_;
|
||||
bool x1954_isProjectile = false;
|
||||
u32 x195c_ = false;
|
||||
u32 x1960_ = false;
|
||||
u32 x1964_ = false;
|
||||
u32 x19dc_ = false;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
bool x1de4_25 : 1;
|
||||
};
|
||||
u32 _dummy = 0;
|
||||
};
|
||||
float x1DE8_boostTime = 0.f;
|
||||
std::vector<CToken> x1958_animationTokens;
|
||||
TToken<CSwooshDescription> x1968_slowBlueTailSwoosh;
|
||||
TToken<CSwooshDescription> x1970_slowBlueTailSwoosh2;
|
||||
TToken<CSwooshDescription> x1978_jaggyTrail;
|
||||
TToken<CGenDescription> x1980_wallSpark;
|
||||
TToken<CGenDescription> x1988_ballInnerGlow;
|
||||
TToken<CGenDescription> x1990_spiderBallMagnetEffect;
|
||||
TToken<CGenDescription> x1998_boostBallGlow;
|
||||
TToken<CSwooshDescription> x19a0_spiderElectric;
|
||||
TToken<CGenDescription> x19a8_morphBallTransitionFlash;
|
||||
TToken<CGenDescription> x19b0_effect_morphBallIceBreak;
|
||||
std::unique_ptr<CParticleSwoosh> x19b8_slowBlueTailSwooshGen;
|
||||
std::unique_ptr<CParticleSwoosh> x19bc_slowBlueTailSwooshGen2;
|
||||
std::unique_ptr<CParticleSwoosh> x19c0_slowBlueTailSwoosh2Gen;
|
||||
std::unique_ptr<CParticleSwoosh> x19c4_slowBlueTailSwoosh2Gen2;
|
||||
std::unique_ptr<CParticleSwoosh> x19c8_jaggyTrailGen;
|
||||
std::unique_ptr<CElementGen> x19cc_wallSparkGen;
|
||||
std::unique_ptr<CElementGen> x19d0_ballInnerGlowGen;
|
||||
std::unique_ptr<CElementGen> x19d4_spiderBallMagnetEffectGen;
|
||||
std::unique_ptr<CElementGen> x19d8_boostBallGlowGen;
|
||||
u32 x19dc_ = 0;
|
||||
u32 x19e0_ = 0;
|
||||
rstl::reserved_vector<std::pair<std::unique_ptr<CParticleSwoosh>, bool>, 32> x19e4_spiderElectricGens;
|
||||
std::list<u32> x1b6c_;
|
||||
CRandom16 x1b80_rand = {99};
|
||||
rstl::reserved_vector<TToken<CGenDescription>, 8> x1b84_wakeEffects;
|
||||
rstl::reserved_vector<std::unique_ptr<CElementGen>, 8> x1bc8_wakeEffectGens;
|
||||
std::unique_ptr<CElementGen> x1bcc_[8];
|
||||
s32 x1c0c_wakeEffectIdx = -1;
|
||||
TUniqueId x1c10_ballInnerGlowLight = kInvalidUniqueId;
|
||||
std::unique_ptr<CWorldShadow> x1c14_worldShadow;
|
||||
std::unique_ptr<CActorLights> x1c18_actorLights;
|
||||
std::unique_ptr<CRainSplashGenerator> x1c1c_rainSplashGen;
|
||||
float x1c20_ = 0.f;
|
||||
float x1c24_ = 0.5f;
|
||||
float x1c28_ = 1.f;
|
||||
bool x1c2c_ = false;
|
||||
float x1c30_ = 0.f;
|
||||
float x1c34_ = 0.f;
|
||||
float x1c38_ = 0.f;
|
||||
rstl::reserved_vector<zeus::CQuaternion, 5> x1c3c_quats;
|
||||
rstl::reserved_vector<zeus::CVector3f, 5> x1c90_vecs;
|
||||
rstl::reserved_vector<float, 15> x1cd0_;
|
||||
rstl::reserved_vector<zeus::CVector3f, 15> x1d10_;
|
||||
zeus::CVector3f x1dcc_;
|
||||
zeus::CVector3f x1dd8_;
|
||||
bool x1de4_24 : 1;
|
||||
bool x1de4_25 : 1;
|
||||
float x1de8_boostTime = 0.f;
|
||||
float x1dec_ = 0.f;
|
||||
float x1df0_ = 0.f;
|
||||
float x1df4_ = 0.f;
|
||||
bool x1df8_24 : 1;
|
||||
bool x1df8_25 : 1;
|
||||
bool x1df8_26 : 1;
|
||||
bool x1df8_27 : 1;
|
||||
float x1dfc_ = 0.f;
|
||||
float x1e00_ = 0.f;
|
||||
float x1e04_ = 0.f;
|
||||
zeus::CVector3f x1e08_;
|
||||
zeus::CVector3f x1e14_;
|
||||
u32 x1e20_ = 0;
|
||||
CSfxHandle x1e24_boostSfxHandle;
|
||||
u32 x1e28_ = 0;
|
||||
CSfxHandle x1e2c_rollSfxHandle;
|
||||
CSfxHandle x1e30_spiderSfxHandle;
|
||||
u16 x1e34_rollSfx = 0xffff;
|
||||
u16 x1e36_landSfx = 0xffff;
|
||||
u32 x1e38_ = 0;
|
||||
EBallBoostState x1e3c_boostState = EBallBoostState::Zero;
|
||||
EBombJumpState x1e40_bombJumpState = EBombJumpState::Zero;
|
||||
CMorphBallShadow* x1e50_shadow = nullptr;
|
||||
|
||||
float x1e44_ = 0.f;
|
||||
float x1e48_ = 0.f;
|
||||
float x1e4c_ = 0.f;
|
||||
std::unique_ptr<CMorphBallShadow> x1e50_shadow;
|
||||
void LoadAnimationTokens(const std::string& ancsName);
|
||||
void InitializeWakeEffects();
|
||||
static std::unique_ptr<CModelData> GetMorphBallModel(const char* name, float radius);
|
||||
void SelectMorphBallSounds(const CMaterialList& mat);
|
||||
void UpdateMorphBallSounds(float dt);
|
||||
public:
|
||||
CMorphBall(CPlayer& player, float);
|
||||
CMorphBall(CPlayer& player, float radius);
|
||||
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr);
|
||||
ESpiderBallState GetSpiderBallState() const { return ESpiderBallState::Zero; }
|
||||
bool InSpiderMode() const { return false; }
|
||||
zeus::CVector3f GetBallContactSurfaceNormal() const { return {}; }
|
||||
void GetModel() const {}
|
||||
const CCollidableSphere* GetCollidableSphere() const { return nullptr; }
|
||||
zeus::CVector3f GetBallContactSurfaceNormal() const;
|
||||
const CCollidableSphere& GetCollidableSphere() const { return x38_collisionSphere; }
|
||||
bool IsProjectile() const { return x1954_isProjectile; }
|
||||
void GetBallContactMeterials() const {}
|
||||
void GetBallContactMaterials() const {}
|
||||
void GetWallBumpCounter() const {}
|
||||
void GetBoostChargeTimer() const {}
|
||||
bool IsBoosting() const { return false; }
|
||||
float GetBallRadius() const { return 0.f; }
|
||||
float GetBallTouchRadius() const { return 0.f; }
|
||||
void ForwardInput(const CFinalInput&) const {}
|
||||
void ComputeBallMovement(const CFinalInput&, CStateManager&, float) {}
|
||||
bool IsMovementAllowed() const { return false; }
|
||||
void UpdateSpiderBall(const CFinalInput&, CStateManager&, float) {}
|
||||
void ApplySpiderBallSwingingForces(const CFinalInput&, CStateManager&, float) {}
|
||||
void ApplySpiderBallRollForces(const CFinalInput&, CStateManager&, float) {}
|
||||
float GetBallRadius() const;
|
||||
float GetBallTouchRadius() const;
|
||||
void ForwardInput(const CFinalInput&) const;
|
||||
void ComputeBallMovement(const CFinalInput&, CStateManager&, float);
|
||||
bool IsMovementAllowed() const;
|
||||
void UpdateSpiderBall(const CFinalInput&, CStateManager&, float);
|
||||
void ApplySpiderBallSwingingForces(const CFinalInput&, CStateManager&, float);
|
||||
void ApplySpiderBallRollForces(const CFinalInput&, CStateManager&, float);
|
||||
void CalculateSpiderBallAttractionSurfaceForces(const CFinalInput&, CStateManager&,
|
||||
const zeus::CTransform&) {}
|
||||
void CheckForSwitchToSpiderBallSwinging(CStateManager&) {}
|
||||
const zeus::CTransform&);
|
||||
void CheckForSwitchToSpiderBallSwinging(CStateManager&);
|
||||
void FindClosestSpiderBallWaypoint(CStateManager&, const zeus::CVector3f&, zeus::CVector3f&,
|
||||
zeus::CVector3f&, zeus::CVector3f&, float&, zeus::CVector3f&, bool&,
|
||||
zeus::CTransform&) const {}
|
||||
void SetSpiderBallSwingingState(bool) {}
|
||||
void GetSpiderBallControllerMovement(const CFinalInput&, bool, bool) {}
|
||||
void ResetSpiderBallSwingControllerMovementTimer() {}
|
||||
void UpdateSpiderBallSwingControllerMovementTimer(float, float) {}
|
||||
float GetSpiderBallSwingControllerMovementScalar() const { return 0.f; }
|
||||
void CreateSpiderBallParticles(const zeus::CVector3f&, const zeus::CVector3f&) {}
|
||||
void ComputeMarioMovement(const CFinalInput&, CStateManager&, float) {}
|
||||
void SetSpiderBallState(ESpiderBallState) {}
|
||||
void GetSwooshToWorld() const {}
|
||||
zeus::CTransform GetBallToWorld() const { return {}; }
|
||||
void CalculateSurfaceToWorld(const zeus::CVector3f&, const zeus::CVector3f&, const zeus::CVector3f&) const {}
|
||||
void CalculateBallContactInfo(zeus::CVector3f&, zeus::CVector3f&) const {}
|
||||
void BallTurnInput(const CFinalInput&) const {}
|
||||
void UpdateBallDynamics(CStateManager&, float) {}
|
||||
void SwitchToMarble() {}
|
||||
void SwitchToTire() {}
|
||||
void Update(float, CStateManager&) {}
|
||||
void UpdateScriptMessage(EScriptObjectMessage, TUniqueId, CStateManager&) {}
|
||||
void DeleteLight(CStateManager&) {}
|
||||
void SetBallLightActive(CStateManager&, bool) {}
|
||||
void EnterMorphBallState(CStateManager&) {}
|
||||
void LeaveMorphBallState(CStateManager&) {}
|
||||
void UpdateEffects(float, CStateManager&) {}
|
||||
void ComputeBoostBallMovement(const CFinalInput&, const CStateManager&, float) {}
|
||||
void EnterBoosting() {}
|
||||
void LeaveBoosting() {}
|
||||
void CancelBoosting() {}
|
||||
void UpdateMarbleDynamics(CStateManager&, float, const zeus::CVector3f&) {}
|
||||
void ApplyFriction(float) {}
|
||||
void DampLinearAndAngularVelocities(float, float) {}
|
||||
zeus::CTransform GetPrimitiveTransform() const { return {}; }
|
||||
void DrawCollisionPrimitive() const {}
|
||||
void GetMinimumAlignmentSpeed() const {}
|
||||
void PreRender(CStateManager&, const zeus::CFrustum&) {}
|
||||
void Render(const CStateManager&, const CActorLights*) const {}
|
||||
void ResetMorphBallTransitionFlash() {}
|
||||
void UpdateMorphBallTransitionFlash(float) {}
|
||||
void RenderMorphBallTransitionFlash(const CStateManager&) const {}
|
||||
zeus::CTransform&) const;
|
||||
void SetSpiderBallSwingingState(bool);
|
||||
void GetSpiderBallControllerMovement(const CFinalInput&, bool, bool);
|
||||
void ResetSpiderBallSwingControllerMovementTimer();
|
||||
void UpdateSpiderBallSwingControllerMovementTimer(float, float);
|
||||
float GetSpiderBallSwingControllerMovementScalar() const;
|
||||
void CreateSpiderBallParticles(const zeus::CVector3f&, const zeus::CVector3f&);
|
||||
void ComputeMarioMovement(const CFinalInput&, CStateManager&, float);
|
||||
void SetSpiderBallState(ESpiderBallState state) { x187c_spiderBallState = state; }
|
||||
void GetSwooshToWorld() const;
|
||||
zeus::CTransform GetBallToWorld() const;
|
||||
void CalculateSurfaceToWorld(const zeus::CVector3f&, const zeus::CVector3f&, const zeus::CVector3f&) const;
|
||||
void CalculateBallContactInfo(zeus::CVector3f&, zeus::CVector3f&) const;
|
||||
void BallTurnInput(const CFinalInput&) const;
|
||||
void UpdateBallDynamics(CStateManager&, float);
|
||||
void SwitchToMarble();
|
||||
void SwitchToTire();
|
||||
void Update(float dt, CStateManager& mgr);
|
||||
void UpdateScriptMessage(EScriptObjectMessage, TUniqueId, CStateManager&);
|
||||
void DeleteLight(CStateManager&);
|
||||
void SetBallLightActive(CStateManager&, bool);
|
||||
void EnterMorphBallState(CStateManager&);
|
||||
void LeaveMorphBallState(CStateManager&);
|
||||
void UpdateEffects(float, CStateManager&);
|
||||
void ComputeBoostBallMovement(const CFinalInput&, const CStateManager&, float);
|
||||
void EnterBoosting();
|
||||
void LeaveBoosting();
|
||||
void CancelBoosting();
|
||||
void UpdateMarbleDynamics(CStateManager&, float, const zeus::CVector3f&);
|
||||
void ApplyFriction(float);
|
||||
void DampLinearAndAngularVelocities(float, float);
|
||||
zeus::CTransform GetPrimitiveTransform() const;
|
||||
void DrawCollisionPrimitive() const;
|
||||
void GetMinimumAlignmentSpeed() const;
|
||||
void PreRender(CStateManager&, const zeus::CFrustum&);
|
||||
void Render(const CStateManager&, const CActorLights*) const;
|
||||
void ResetMorphBallTransitionFlash();
|
||||
void UpdateMorphBallTransitionFlash(float);
|
||||
void RenderMorphBallTransitionFlash(const CStateManager&) const;
|
||||
bool IsMorphBallTransitionFlashValid() const { return x19dc_ != 0; }
|
||||
void RenderDamageEffects(const CStateManager&, const zeus::CTransform&) const {}
|
||||
void UpdateHalfPipeStatus(CStateManager&, float) {}
|
||||
bool GetIsInHalfPipeMode() const { return false; }
|
||||
void SetIsInHalfPipeMode(bool) {}
|
||||
void GetIsInHalfPipeModeInAir() const {}
|
||||
void SetIsInHalfPipeModeInAir(bool) {}
|
||||
void GetTouchedHalfPipeRecently() const {}
|
||||
void SetTouchedHalfPipeRecently(bool) {}
|
||||
void DisableHalfPipeStatus() {}
|
||||
bool BallCloseToCollision(const CStateManager&, float, const CMaterialFilter& filter) const { return false; }
|
||||
void CollidedWith(TUniqueId, const CCollisionInfoList&, CStateManager&) {}
|
||||
bool IsInFrustum(const zeus::CFrustum&) const { return false; }
|
||||
void ComputeLiftForces(const zeus::CVector3f&, const zeus::CVector3f&, const CStateManager&) {}
|
||||
void CalculateSurfaceFriction() const {}
|
||||
void ApplyGravity(CStateManager&) {}
|
||||
void SpinToSpeed(float, zeus::CVector3f, float) {}
|
||||
void ComputeMaxSpeed() const {}
|
||||
void Touch(CActor&, CStateManager&) {}
|
||||
bool IsClimbable(const CCollisionInfo&) const { return false; }
|
||||
void FluidFXThink(CActor::EFluidState, CScriptWater&, CStateManager&) {}
|
||||
void GetMorphBallModel(const std::string&, float) {}
|
||||
void LoadMorphBallModel(CStateManager& mgr) {}
|
||||
void AddSpiderBallElectricalEffect() {}
|
||||
void UpdateSpiderBallElectricalEffect() {}
|
||||
void RenderSpiderBallElectricalEffect() const {}
|
||||
void RenderEnergyDrainEffects(const CStateManager&) const {}
|
||||
void TouchModel(const CStateManager&) const {}
|
||||
void SetAsProjectile(const CDamageInfo&, const CDamageInfo&) {}
|
||||
EBallBoostState GetBallBoostState() const { return EBallBoostState::Zero; }
|
||||
void SetBallBoostState(EBallBoostState) {}
|
||||
void RenderDamageEffects(const CStateManager&, const zeus::CTransform&) const;
|
||||
void UpdateHalfPipeStatus(CStateManager&, float);
|
||||
bool GetIsInHalfPipeMode() const;
|
||||
void SetIsInHalfPipeMode(bool);
|
||||
void GetIsInHalfPipeModeInAir() const;
|
||||
void SetIsInHalfPipeModeInAir(bool);
|
||||
void GetTouchedHalfPipeRecently() const;
|
||||
void SetTouchedHalfPipeRecently(bool);
|
||||
void DisableHalfPipeStatus();
|
||||
bool BallCloseToCollision(const CStateManager&, float, const CMaterialFilter& filter) const;
|
||||
void CollidedWith(TUniqueId, const CCollisionInfoList&, CStateManager&);
|
||||
bool IsInFrustum(const zeus::CFrustum&) const;
|
||||
void ComputeLiftForces(const zeus::CVector3f&, const zeus::CVector3f&, const CStateManager&);
|
||||
void CalculateSurfaceFriction() const;
|
||||
void ApplyGravity(CStateManager&);
|
||||
void SpinToSpeed(float, zeus::CVector3f, float);
|
||||
void ComputeMaxSpeed() const;
|
||||
void Touch(CActor&, CStateManager&);
|
||||
bool IsClimbable(const CCollisionInfo&) const;
|
||||
void FluidFXThink(CActor::EFluidState, CScriptWater&, CStateManager&);
|
||||
void GetMorphBallModel(const std::string&, float);
|
||||
void LoadMorphBallModel(CStateManager& mgr);
|
||||
void AddSpiderBallElectricalEffect();
|
||||
void UpdateSpiderBallElectricalEffect();
|
||||
void RenderSpiderBallElectricalEffect() const;
|
||||
void RenderEnergyDrainEffects(const CStateManager&) const;
|
||||
void TouchModel(const CStateManager&) const;
|
||||
void SetAsProjectile(const CDamageInfo&, const CDamageInfo&);
|
||||
EBallBoostState GetBallBoostState() const { return x1e3c_boostState; }
|
||||
void SetBallBoostState(EBallBoostState state) { x1e3c_boostState = state; }
|
||||
EBombJumpState GetBombJumpState() const { return x1e40_bombJumpState; }
|
||||
void LoadAnimationTokens(const std::string&) {}
|
||||
void TakeDamage(float) {}
|
||||
void TakeDamage(float);
|
||||
void DrawBallShadow(const CStateManager& mgr);
|
||||
void DeleteBallShadow();
|
||||
void CreateBallShadow();
|
||||
void RenderToShadowTex(CStateManager& mgr);
|
||||
void StartLandingSfx() {}
|
||||
bool GetX187c() const { return x187c_ != 0; }
|
||||
void StartLandingSfx();
|
||||
ESpiderBallState GetSpiderBallState() const { return x187c_spiderBallState; }
|
||||
void SetDamageTimer(float t) { x191c_damageTimer = t; }
|
||||
void Stop() {}
|
||||
void StopSounds() {}
|
||||
void ActorAttached() {}
|
||||
void Stop();
|
||||
void StopSounds();
|
||||
void ActorAttached();
|
||||
CModelData& GetMorphballModelData() const { return *x58_ballModel; }
|
||||
u32 GetMorphballModelShader() const { return x5c_ballModelShader; }
|
||||
bool GetX1DE4_25() const { return x1de4_25; }
|
||||
|
|
|
@ -862,7 +862,7 @@ void CPlayer::FluidFXThink(EFluidState state, CScriptWater& water, CStateManager
|
|||
{
|
||||
x768_morphball->FluidFXThink(state, water, mgr);
|
||||
if (state == EFluidState::InFluid)
|
||||
x9c5_30_ = true;
|
||||
x9c5_30_selectFluidBallSound = true;
|
||||
}
|
||||
else if (x2f8_morphBallState != EPlayerMorphBallState::Unmorphed)
|
||||
{
|
||||
|
@ -2821,7 +2821,7 @@ void CPlayer::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CState
|
|||
break;
|
||||
case EScriptObjectMessage::Falling:
|
||||
if (x2f8_morphBallState == EPlayerMorphBallState::Morphed)
|
||||
if (x768_morphball->GetX187c() == 1)
|
||||
if (x768_morphball->GetSpiderBallState() == CMorphBall::ESpiderBallState::Active)
|
||||
break;
|
||||
if (x2f8_morphBallState != EPlayerMorphBallState::Morphed)
|
||||
SetMoveState(EPlayerMovementState::Falling, mgr);
|
||||
|
@ -2830,7 +2830,7 @@ void CPlayer::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CState
|
|||
break;
|
||||
case EScriptObjectMessage::LandOnNotFloor:
|
||||
if (x2f8_morphBallState == EPlayerMorphBallState::Morphed &&
|
||||
x768_morphball->GetX187c() == 1 &&
|
||||
x768_morphball->GetSpiderBallState() == CMorphBall::ESpiderBallState::Active &&
|
||||
x258_movementState != EPlayerMovementState::StartingJump)
|
||||
SetMoveState(EPlayerMovementState::StartingJump, mgr);
|
||||
break;
|
||||
|
@ -5476,7 +5476,7 @@ const CCollisionPrimitive* CPlayer::GetCollisionPrimitive() const
|
|||
|
||||
const CCollidableSphere* CPlayer::GetCollidableSphere() const
|
||||
{
|
||||
return x768_morphball->GetCollidableSphere();
|
||||
return &x768_morphball->GetCollidableSphere();
|
||||
}
|
||||
|
||||
zeus::CTransform CPlayer::GetPrimitiveTransform() const
|
||||
|
|
|
@ -374,7 +374,7 @@ private:
|
|||
bool x9c5_27_camSubmerged : 1;
|
||||
bool x9c5_28_slidingOnWall : 1;
|
||||
bool x9c5_29_hitWall : 1;
|
||||
bool x9c5_30_ : 1;
|
||||
bool x9c5_30_selectFluidBallSound : 1;
|
||||
bool x9c5_31_stepCameraZBiasDirty : 1;
|
||||
bool x9c6_24_extendTargetDistance : 1;
|
||||
bool x9c6_25_interpolatingControlDir : 1;
|
||||
|
@ -512,7 +512,7 @@ public:
|
|||
void SetVisorSteam(float, float, float, CAssetId, bool);
|
||||
void UpdateFootstepSounds(const CFinalInput& input, CStateManager&, float);
|
||||
u16 GetMaterialSoundUnderPlayer(CStateManager& mgr, const u16*, u32, u16);
|
||||
u16 SfxIdFromMaterial(const CMaterialList&, const u16*, u32, u16);
|
||||
static u16 SfxIdFromMaterial(const CMaterialList&, const u16*, u32, u16);
|
||||
void UpdateCrosshairsState(const CFinalInput&);
|
||||
void UpdateVisorTransition(float, CStateManager& mgr);
|
||||
void UpdateVisorState(const CFinalInput&, float, CStateManager& mgr);
|
||||
|
|
2
hecl
2
hecl
|
@ -1 +1 @@
|
|||
Subproject commit 5291cd71d77848a5c7e4cb4d38aba5c31d453be9
|
||||
Subproject commit a7bc172e938ca97cef01794a77b5412b12f44949
|
Loading…
Reference in New Issue