From e67a1420135b91aa9bfdb433fc58935f5ca83c87 Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Sat, 5 Aug 2017 21:15:42 -1000 Subject: [PATCH] Implement class declaration for CFluidPlane/CFluidPlaneCPU --- DataSpec/DNACommon/Tweaks/ITweakBall.hpp | 3 + DataSpec/DNACommon/Tweaks/ITweakPlayer.hpp | 13 +- DataSpec/DNAMP1/Tweaks/CTweakBall.cpp | 192 ++++----- DataSpec/DNAMP1/Tweaks/CTweakBall.hpp | 9 +- DataSpec/DNAMP1/Tweaks/CTweakPlayer.cpp | 460 ++++++++++----------- DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp | 25 +- Runtime/CStateManager.cpp | 6 +- Runtime/Camera/CCameraManager.cpp | 6 +- Runtime/Camera/CFirstPersonCamera.cpp | 8 +- Runtime/MP1/CSamusFaceReflection.cpp | 2 +- Runtime/MP1/CSamusHud.cpp | 2 +- Runtime/World/CFluidPlane.cpp | 14 +- Runtime/World/CFluidPlane.hpp | 44 +- Runtime/World/CFluidPlaneCPU.cpp | 90 +++- Runtime/World/CFluidPlaneCPU.hpp | 81 +++- Runtime/World/CFluidUVMotion.hpp | 4 +- Runtime/World/CMorphBall.hpp | 2 +- Runtime/World/CPlayer.cpp | 85 +++- Runtime/World/CPlayer.hpp | 10 +- Runtime/World/CScriptWater.hpp | 20 + 20 files changed, 667 insertions(+), 409 deletions(-) diff --git a/DataSpec/DNACommon/Tweaks/ITweakBall.hpp b/DataSpec/DNACommon/Tweaks/ITweakBall.hpp index 83ecc2c7b..17f64287b 100644 --- a/DataSpec/DNACommon/Tweaks/ITweakBall.hpp +++ b/DataSpec/DNACommon/Tweaks/ITweakBall.hpp @@ -7,6 +7,9 @@ namespace DataSpec { 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 GetBallCameraControlDistance() const=0; virtual float GetLeftStickDivisor() const=0; virtual float GetRightStickDivisor() const=0; diff --git a/DataSpec/DNACommon/Tweaks/ITweakPlayer.hpp b/DataSpec/DNACommon/Tweaks/ITweakPlayer.hpp index 9c58af6c2..9f960cda8 100644 --- a/DataSpec/DNACommon/Tweaks/ITweakPlayer.hpp +++ b/DataSpec/DNACommon/Tweaks/ITweakPlayer.hpp @@ -9,14 +9,14 @@ namespace DataSpec struct ITweakPlayer : ITweak { - virtual float GetX50() const=0; - virtual float GetX54() const=0; - virtual float GetX58() const=0; - virtual float GetX5C() const=0; + virtual float GetMaxTranslationalAcceleration(int s) const=0; + virtual float GetPlayerTranslationFriction(int s) const=0; + virtual float GetPlayerTranslationMaxSpeed(int s) const=0; virtual float GetNormalGravAccel() const=0; virtual float GetFluidGravAccel() const=0; virtual float GetEyeOffset() const=0; - virtual float GetHudLagAmount() const=0; + virtual float GetFreeLookSpeed() const=0; + virtual float GetFreeLookSnapSpeed() const=0; virtual float GetFreeLookCenteredThresholdAngle() const=0; virtual float GetFreeLookCenteredTime() const=0; virtual float GetOrbitNormalDistance() const=0; @@ -56,7 +56,7 @@ struct ITweakPlayer : ITweak virtual bool GetGunNotFiringHolstersGun() const=0; virtual float GetPlayerHeight() const=0; // x26c virtual float GetPlayerXYHalfExtent() const=0; // x270 - virtual bool GetX228_24() const=0; // x228_24 + virtual bool GetFreeLookTurnsPlayer() const=0; // x228_24 virtual float GetX274() const=0; // x274 virtual float GetX278() const=0; // x278 virtual float GetPlayerBallHalfExtent() const=0; // x27c @@ -85,7 +85,6 @@ struct ITweakPlayer : ITweak virtual float GetX29C() const=0; // x29c virtual float GetX280() const=0; // x280 virtual float GetX2B0() const=0; // x2b0 - virtual float GetX138() const=0; // x138 virtual float GetX14C() const=0; // x14c virtual float GetLeftLogicalThreshold() const=0; virtual float GetRightLogicalThreshold() const=0; diff --git a/DataSpec/DNAMP1/Tweaks/CTweakBall.cpp b/DataSpec/DNAMP1/Tweaks/CTweakBall.cpp index 983b1cb44..05f438d24 100644 --- a/DataSpec/DNAMP1/Tweaks/CTweakBall.cpp +++ b/DataSpec/DNAMP1/Tweaks/CTweakBall.cpp @@ -8,53 +8,53 @@ namespace DNAMP1 void CTweakBall::read(athena::io::IStreamReader& __dna_reader) { /* x4_[0] */ - x4_[0] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[0] = __dna_reader.readFloatBig(); /* x4_[1] */ - x4_[1] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[1] = __dna_reader.readFloatBig(); /* x4_[2] */ - x4_[2] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[2] = __dna_reader.readFloatBig(); /* x4_[3] */ - x4_[3] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[3] = __dna_reader.readFloatBig(); /* x4_[4] */ - x4_[4] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[4] = __dna_reader.readFloatBig(); /* x4_[5] */ - x4_[5] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[5] = __dna_reader.readFloatBig(); /* x4_[6] */ - x4_[6] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[6] = __dna_reader.readFloatBig(); /* x4_[7] */ - x4_[7] = __dna_reader.readFloatBig(); + x4_maxTranslationAcceleration[7] = __dna_reader.readFloatBig(); /* x24_[0] */ - x24_[0] = __dna_reader.readFloatBig(); + x24_translationFriction[0] = __dna_reader.readFloatBig(); /* x24_[1] */ - x24_[1] = __dna_reader.readFloatBig(); + x24_translationFriction[1] = __dna_reader.readFloatBig(); /* x24_[2] */ - x24_[2] = __dna_reader.readFloatBig(); + x24_translationFriction[2] = __dna_reader.readFloatBig(); /* x24_[3] */ - x24_[3] = __dna_reader.readFloatBig(); + x24_translationFriction[3] = __dna_reader.readFloatBig(); /* x24_[4] */ - x24_[4] = __dna_reader.readFloatBig(); + x24_translationFriction[4] = __dna_reader.readFloatBig(); /* x24_[5] */ - x24_[5] = __dna_reader.readFloatBig(); + x24_translationFriction[5] = __dna_reader.readFloatBig(); /* x24_[6] */ - x24_[6] = __dna_reader.readFloatBig(); + x24_translationFriction[6] = __dna_reader.readFloatBig(); /* x24_[7] */ - x24_[7] = __dna_reader.readFloatBig(); + x24_translationFriction[7] = __dna_reader.readFloatBig(); /* x44_[0] */ - x44_[0] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[0] = __dna_reader.readFloatBig(); /* x44_[1] */ - x44_[1] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[1] = __dna_reader.readFloatBig(); /* x44_[2] */ - x44_[2] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[2] = __dna_reader.readFloatBig(); /* x44_[3] */ - x44_[3] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[3] = __dna_reader.readFloatBig(); /* x44_[4] */ - x44_[4] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[4] = __dna_reader.readFloatBig(); /* x44_[5] */ - x44_[5] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[5] = __dna_reader.readFloatBig(); /* x44_[6] */ - x44_[6] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[6] = __dna_reader.readFloatBig(); /* x44_[7] */ - x44_[7] = __dna_reader.readFloatBig(); + x44_translationMaxSpeed[7] = __dna_reader.readFloatBig(); /* x64_ */ x64_ = __dna_reader.readFloatBig(); /* x68_ */ @@ -228,53 +228,53 @@ void CTweakBall::read(athena::io::IStreamReader& __dna_reader) void CTweakBall::write(athena::io::IStreamWriter& __dna_writer) const { /* x4_[0] */ - __dna_writer.writeFloatBig(x4_[0]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[0]); /* x4_[1] */ - __dna_writer.writeFloatBig(x4_[1]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[1]); /* x4_[2] */ - __dna_writer.writeFloatBig(x4_[2]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[2]); /* x4_[3] */ - __dna_writer.writeFloatBig(x4_[3]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[3]); /* x4_[4] */ - __dna_writer.writeFloatBig(x4_[4]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[4]); /* x4_[5] */ - __dna_writer.writeFloatBig(x4_[5]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[5]); /* x4_[6] */ - __dna_writer.writeFloatBig(x4_[6]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[6]); /* x4_[7] */ - __dna_writer.writeFloatBig(x4_[7]); + __dna_writer.writeFloatBig(x4_maxTranslationAcceleration[7]); /* x24_[0] */ - __dna_writer.writeFloatBig(x24_[0]); + __dna_writer.writeFloatBig(x24_translationFriction[0]); /* x24_[1] */ - __dna_writer.writeFloatBig(x24_[1]); + __dna_writer.writeFloatBig(x24_translationFriction[1]); /* x24_[2] */ - __dna_writer.writeFloatBig(x24_[2]); + __dna_writer.writeFloatBig(x24_translationFriction[2]); /* x24_[3] */ - __dna_writer.writeFloatBig(x24_[3]); + __dna_writer.writeFloatBig(x24_translationFriction[3]); /* x24_[4] */ - __dna_writer.writeFloatBig(x24_[4]); + __dna_writer.writeFloatBig(x24_translationFriction[4]); /* x24_[5] */ - __dna_writer.writeFloatBig(x24_[5]); + __dna_writer.writeFloatBig(x24_translationFriction[5]); /* x24_[6] */ - __dna_writer.writeFloatBig(x24_[6]); + __dna_writer.writeFloatBig(x24_translationFriction[6]); /* x24_[7] */ - __dna_writer.writeFloatBig(x24_[7]); + __dna_writer.writeFloatBig(x24_translationFriction[7]); /* x44_[0] */ - __dna_writer.writeFloatBig(x44_[0]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[0]); /* x44_[1] */ - __dna_writer.writeFloatBig(x44_[1]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[1]); /* x44_[2] */ - __dna_writer.writeFloatBig(x44_[2]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[2]); /* x44_[3] */ - __dna_writer.writeFloatBig(x44_[3]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[3]); /* x44_[4] */ - __dna_writer.writeFloatBig(x44_[4]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[4]); /* x44_[5] */ - __dna_writer.writeFloatBig(x44_[5]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[5]); /* x44_[6] */ - __dna_writer.writeFloatBig(x44_[6]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[6]); /* x44_[7] */ - __dna_writer.writeFloatBig(x44_[7]); + __dna_writer.writeFloatBig(x44_translationMaxSpeed[7]); /* x64_ */ __dna_writer.writeFloatBig(x64_); /* x68_ */ @@ -452,63 +452,63 @@ void CTweakBall::read(athena::io::YAMLDocReader& __dna_docin) if (auto v = __dna_docin.enterSubVector("x4_", __x4_Count)) { /* x4_[0] */ - x4_[0] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[0] = __dna_docin.readFloat("x4_"); /* x4_[1] */ - x4_[1] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[1] = __dna_docin.readFloat("x4_"); /* x4_[2] */ - x4_[2] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[2] = __dna_docin.readFloat("x4_"); /* x4_[3] */ - x4_[3] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[3] = __dna_docin.readFloat("x4_"); /* x4_[4] */ - x4_[4] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[4] = __dna_docin.readFloat("x4_"); /* x4_[5] */ - x4_[5] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[5] = __dna_docin.readFloat("x4_"); /* x4_[6] */ - x4_[6] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[6] = __dna_docin.readFloat("x4_"); /* x4_[7] */ - x4_[7] = __dna_docin.readFloat("x4_"); + x4_maxTranslationAcceleration[7] = __dna_docin.readFloat("x4_"); } /* x24_ */ size_t __x24_Count; if (auto v = __dna_docin.enterSubVector("x24_", __x24_Count)) { /* x24_[0] */ - x24_[0] = __dna_docin.readFloat("x24_"); + x24_translationFriction[0] = __dna_docin.readFloat("x24_"); /* x24_[1] */ - x24_[1] = __dna_docin.readFloat("x24_"); + x24_translationFriction[1] = __dna_docin.readFloat("x24_"); /* x24_[2] */ - x24_[2] = __dna_docin.readFloat("x24_"); + x24_translationFriction[2] = __dna_docin.readFloat("x24_"); /* x24_[3] */ - x24_[3] = __dna_docin.readFloat("x24_"); + x24_translationFriction[3] = __dna_docin.readFloat("x24_"); /* x24_[4] */ - x24_[4] = __dna_docin.readFloat("x24_"); + x24_translationFriction[4] = __dna_docin.readFloat("x24_"); /* x24_[5] */ - x24_[5] = __dna_docin.readFloat("x24_"); + x24_translationFriction[5] = __dna_docin.readFloat("x24_"); /* x24_[6] */ - x24_[6] = __dna_docin.readFloat("x24_"); + x24_translationFriction[6] = __dna_docin.readFloat("x24_"); /* x24_[7] */ - x24_[7] = __dna_docin.readFloat("x24_"); + x24_translationFriction[7] = __dna_docin.readFloat("x24_"); } /* x44_ */ size_t __x44_Count; if (auto v = __dna_docin.enterSubVector("x44_", __x44_Count)) { /* x44_[0] */ - x44_[0] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[0] = __dna_docin.readFloat("x44_"); /* x44_[1] */ - x44_[1] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[1] = __dna_docin.readFloat("x44_"); /* x44_[2] */ - x44_[2] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[2] = __dna_docin.readFloat("x44_"); /* x44_[3] */ - x44_[3] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[3] = __dna_docin.readFloat("x44_"); /* x44_[4] */ - x44_[4] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[4] = __dna_docin.readFloat("x44_"); /* x44_[5] */ - x44_[5] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[5] = __dna_docin.readFloat("x44_"); /* x44_[6] */ - x44_[6] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[6] = __dna_docin.readFloat("x44_"); /* x44_[7] */ - x44_[7] = __dna_docin.readFloat("x44_"); + x44_translationMaxSpeed[7] = __dna_docin.readFloat("x44_"); } /* x64_ */ x64_ = __dna_docin.readFloat("x64_"); @@ -691,61 +691,61 @@ void CTweakBall::write(athena::io::YAMLDocWriter& __dna_docout) const if (auto v = __dna_docout.enterSubVector("x4_")) { /* x4_[0] */ - __dna_docout.writeFloat("x4_", x4_[0]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[0]); /* x4_[1] */ - __dna_docout.writeFloat("x4_", x4_[1]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[1]); /* x4_[2] */ - __dna_docout.writeFloat("x4_", x4_[2]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[2]); /* x4_[3] */ - __dna_docout.writeFloat("x4_", x4_[3]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[3]); /* x4_[4] */ - __dna_docout.writeFloat("x4_", x4_[4]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[4]); /* x4_[5] */ - __dna_docout.writeFloat("x4_", x4_[5]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[5]); /* x4_[6] */ - __dna_docout.writeFloat("x4_", x4_[6]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[6]); /* x4_[7] */ - __dna_docout.writeFloat("x4_", x4_[7]); + __dna_docout.writeFloat("x4_", x4_maxTranslationAcceleration[7]); } /* x24_ */ if (auto v = __dna_docout.enterSubVector("x24_")) { /* x24_[0] */ - __dna_docout.writeFloat("x24_", x24_[0]); + __dna_docout.writeFloat("x24_", x24_translationFriction[0]); /* x24_[1] */ - __dna_docout.writeFloat("x24_", x24_[1]); + __dna_docout.writeFloat("x24_", x24_translationFriction[1]); /* x24_[2] */ - __dna_docout.writeFloat("x24_", x24_[2]); + __dna_docout.writeFloat("x24_", x24_translationFriction[2]); /* x24_[3] */ - __dna_docout.writeFloat("x24_", x24_[3]); + __dna_docout.writeFloat("x24_", x24_translationFriction[3]); /* x24_[4] */ - __dna_docout.writeFloat("x24_", x24_[4]); + __dna_docout.writeFloat("x24_", x24_translationFriction[4]); /* x24_[5] */ - __dna_docout.writeFloat("x24_", x24_[5]); + __dna_docout.writeFloat("x24_", x24_translationFriction[5]); /* x24_[6] */ - __dna_docout.writeFloat("x24_", x24_[6]); + __dna_docout.writeFloat("x24_", x24_translationFriction[6]); /* x24_[7] */ - __dna_docout.writeFloat("x24_", x24_[7]); + __dna_docout.writeFloat("x24_", x24_translationFriction[7]); } /* x44_ */ if (auto v = __dna_docout.enterSubVector("x44_")) { /* x44_[0] */ - __dna_docout.writeFloat("x44_", x44_[0]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[0]); /* x44_[1] */ - __dna_docout.writeFloat("x44_", x44_[1]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[1]); /* x44_[2] */ - __dna_docout.writeFloat("x44_", x44_[2]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[2]); /* x44_[3] */ - __dna_docout.writeFloat("x44_", x44_[3]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[3]); /* x44_[4] */ - __dna_docout.writeFloat("x44_", x44_[4]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[4]); /* x44_[5] */ - __dna_docout.writeFloat("x44_", x44_[5]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[5]); /* x44_[6] */ - __dna_docout.writeFloat("x44_", x44_[6]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[6]); /* x44_[7] */ - __dna_docout.writeFloat("x44_", x44_[7]); + __dna_docout.writeFloat("x44_", x44_translationMaxSpeed[7]); } /* x64_ */ __dna_docout.writeFloat("x64_", x64_); diff --git a/DataSpec/DNAMP1/Tweaks/CTweakBall.hpp b/DataSpec/DNAMP1/Tweaks/CTweakBall.hpp index 29cec4864..c2e020a12 100644 --- a/DataSpec/DNAMP1/Tweaks/CTweakBall.hpp +++ b/DataSpec/DNAMP1/Tweaks/CTweakBall.hpp @@ -12,9 +12,9 @@ struct CTweakBall : public ITweakBall { DECL_YAML Delete __d; - Value x4_[8]; - Value x24_[8]; - Value x44_[8]; + Value x4_maxTranslationAcceleration[8]; + Value x24_translationFriction[8]; + Value x44_translationMaxSpeed[8]; Value x64_; Value x68_; Value x6c_; @@ -137,6 +137,9 @@ struct CTweakBall : public ITweakBall x1ec_ = zeus::degToRad(x1ec_); } + 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 GetBallCameraControlDistance() const { return x1d0_ballCameraControlDistance; } float GetLeftStickDivisor() const { return x1e4_leftStickDivisor; } float GetRightStickDivisor() const { return x1e8_rightStickDivisor; } diff --git a/DataSpec/DNAMP1/Tweaks/CTweakPlayer.cpp b/DataSpec/DNAMP1/Tweaks/CTweakPlayer.cpp index ba801703f..00015b301 100644 --- a/DataSpec/DNAMP1/Tweaks/CTweakPlayer.cpp +++ b/DataSpec/DNAMP1/Tweaks/CTweakPlayer.cpp @@ -7,22 +7,22 @@ namespace DNAMP1 { void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader) { - /* x4_[0] */ - x4_[0] = __dna_reader.readFloatBig(); - /* x4_[1] */ - x4_[1] = __dna_reader.readFloatBig(); - /* x4_[2] */ - x4_[2] = __dna_reader.readFloatBig(); - /* x4_[3] */ - x4_[3] = __dna_reader.readFloatBig(); - /* x4_[4] */ - x4_[4] = __dna_reader.readFloatBig(); - /* x4_[5] */ - x4_[5] = __dna_reader.readFloatBig(); - /* x4_[6] */ - x4_[6] = __dna_reader.readFloatBig(); - /* x4_[7] */ - x4_[7] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[0] */ + x4_maxTranslationalAcceleration[0] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[1] */ + x4_maxTranslationalAcceleration[1] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[2] */ + x4_maxTranslationalAcceleration[2] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[3] */ + x4_maxTranslationalAcceleration[3] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[4] */ + x4_maxTranslationalAcceleration[4] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[5] */ + x4_maxTranslationalAcceleration[5] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[6] */ + x4_maxTranslationalAcceleration[6] = __dna_reader.readFloatBig(); + /* x4_maxTranslationalAcceleration[7] */ + x4_maxTranslationalAcceleration[7] = __dna_reader.readFloatBig(); /* x24_[0] */ x24_[0] = __dna_reader.readFloatBig(); /* x24_[1] */ @@ -39,22 +39,22 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader) x24_[6] = __dna_reader.readFloatBig(); /* x24_[7] */ x24_[7] = __dna_reader.readFloatBig(); - /* x44_[0] */ - x44_[0] = __dna_reader.readFloatBig(); - /* x44_[1] */ - x44_[1] = __dna_reader.readFloatBig(); - /* x44_[2] */ - x44_[2] = __dna_reader.readFloatBig(); - /* x44_[3] */ - x44_[3] = __dna_reader.readFloatBig(); - /* x44_[4] */ - x44_[4] = __dna_reader.readFloatBig(); - /* x44_[5] */ - x44_[5] = __dna_reader.readFloatBig(); - /* x44_[6] */ - x44_[6] = __dna_reader.readFloatBig(); - /* x44_[7] */ - x44_[7] = __dna_reader.readFloatBig(); + /* x44_translationFriction[0] */ + x44_translationFriction[0] = __dna_reader.readFloatBig(); + /* x44_translationFriction[1] */ + x44_translationFriction[1] = __dna_reader.readFloatBig(); + /* x44_translationFriction[2] */ + x44_translationFriction[2] = __dna_reader.readFloatBig(); + /* x44_translationFriction[3] */ + x44_translationFriction[3] = __dna_reader.readFloatBig(); + /* x44_translationFriction[4] */ + x44_translationFriction[4] = __dna_reader.readFloatBig(); + /* x44_translationFriction[5] */ + x44_translationFriction[5] = __dna_reader.readFloatBig(); + /* x44_translationFriction[6] */ + x44_translationFriction[6] = __dna_reader.readFloatBig(); + /* x44_translationFriction[7] */ + x44_translationFriction[7] = __dna_reader.readFloatBig(); /* x64_[0] */ x64_[0] = __dna_reader.readFloatBig(); /* x64_[1] */ @@ -87,22 +87,22 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader) x84_[6] = __dna_reader.readFloatBig(); /* x84_[7] */ x84_[7] = __dna_reader.readFloatBig(); - /* xa4_[0] */ - xa4_[0] = __dna_reader.readFloatBig(); - /* xa4_[1] */ - xa4_[1] = __dna_reader.readFloatBig(); - /* xa4_[2] */ - xa4_[2] = __dna_reader.readFloatBig(); - /* xa4_[3] */ - xa4_[3] = __dna_reader.readFloatBig(); - /* xa4_[4] */ - xa4_[4] = __dna_reader.readFloatBig(); - /* xa4_[5] */ - xa4_[5] = __dna_reader.readFloatBig(); - /* xa4_[6] */ - xa4_[6] = __dna_reader.readFloatBig(); - /* xa4_[7] */ - xa4_[7] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[0] */ + xa4_translationMaxSpeed[0] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[1] */ + xa4_translationMaxSpeed[1] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[2] */ + xa4_translationMaxSpeed[2] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[3] */ + xa4_translationMaxSpeed[3] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[4] */ + xa4_translationMaxSpeed[4] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[5] */ + xa4_translationMaxSpeed[5] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[6] */ + xa4_translationMaxSpeed[6] = __dna_reader.readFloatBig(); + /* xa4_translationMaxSpeed[7] */ + xa4_translationMaxSpeed[7] = __dna_reader.readFloatBig(); /* xc4_normalGravAccel */ xc4_normalGravAccel = __dna_reader.readFloatBig(); /* xc8_fluidGravAccel */ @@ -161,10 +161,10 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader) x130_horizontalFreeLookAngleVel = __dna_reader.readFloatBig(); /* x134_verticalFreeLookAngleVel */ x134_verticalFreeLookAngleVel = __dna_reader.readFloatBig(); - /* x138_hudLagAmount */ - x138_hudLagAmount = __dna_reader.readFloatBig(); - /* x13c_ */ - x13c_ = __dna_reader.readFloatBig(); + /* x138_freeLookSpeed */ + x138_freeLookSpeed = __dna_reader.readFloatBig(); + /* x13c_freeLookSnapSpeed */ + x13c_freeLookSnapSpeed = __dna_reader.readFloatBig(); /* x140_ */ x140_ = __dna_reader.readFloatBig(); /* x144_freeLookCenteredThresholdAngle */ @@ -177,8 +177,8 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader) x150_leftDiv = __dna_reader.readFloatBig(); /* x154_rightDiv */ x154_rightDiv = __dna_reader.readFloatBig(); - /* x228_24_ */ - x228_24_ = __dna_reader.readBool(); + /* x228_24_freelookTurnsPlayer */ + x228_24_freelookTurnsPlayer = __dna_reader.readBool(); /* x228_25_ */ x228_25_ = __dna_reader.readBool(); /* x228_26_ */ @@ -447,22 +447,22 @@ void CTweakPlayer::read(athena::io::IStreamReader& __dna_reader) void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const { - /* x4_[0] */ - __dna_writer.writeFloatBig(x4_[0]); - /* x4_[1] */ - __dna_writer.writeFloatBig(x4_[1]); - /* x4_[2] */ - __dna_writer.writeFloatBig(x4_[2]); - /* x4_[3] */ - __dna_writer.writeFloatBig(x4_[3]); - /* x4_[4] */ - __dna_writer.writeFloatBig(x4_[4]); - /* x4_[5] */ - __dna_writer.writeFloatBig(x4_[5]); - /* x4_[6] */ - __dna_writer.writeFloatBig(x4_[6]); - /* x4_[7] */ - __dna_writer.writeFloatBig(x4_[7]); + /* x4_maxTranslationalAcceleration[0] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[0]); + /* x4_maxTranslationalAcceleration[1] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[1]); + /* x4_maxTranslationalAcceleration[2] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[2]); + /* x4_maxTranslationalAcceleration[3] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[3]); + /* x4_maxTranslationalAcceleration[4] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[4]); + /* x4_maxTranslationalAcceleration[5] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[5]); + /* x4_maxTranslationalAcceleration[6] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[6]); + /* x4_maxTranslationalAcceleration[7] */ + __dna_writer.writeFloatBig(x4_maxTranslationalAcceleration[7]); /* x24_[0] */ __dna_writer.writeFloatBig(x24_[0]); /* x24_[1] */ @@ -479,22 +479,22 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const __dna_writer.writeFloatBig(x24_[6]); /* x24_[7] */ __dna_writer.writeFloatBig(x24_[7]); - /* x44_[0] */ - __dna_writer.writeFloatBig(x44_[0]); - /* x44_[1] */ - __dna_writer.writeFloatBig(x44_[1]); - /* x44_[2] */ - __dna_writer.writeFloatBig(x44_[2]); - /* x44_[3] */ - __dna_writer.writeFloatBig(x44_[3]); - /* x44_[4] */ - __dna_writer.writeFloatBig(x44_[4]); - /* x44_[5] */ - __dna_writer.writeFloatBig(x44_[5]); - /* x44_[6] */ - __dna_writer.writeFloatBig(x44_[6]); - /* x44_[7] */ - __dna_writer.writeFloatBig(x44_[7]); + /* x44_translationFriction[0] */ + __dna_writer.writeFloatBig(x44_translationFriction[0]); + /* x44_translationFriction[1] */ + __dna_writer.writeFloatBig(x44_translationFriction[1]); + /* x44_translationFriction[2] */ + __dna_writer.writeFloatBig(x44_translationFriction[2]); + /* x44_translationFriction[3] */ + __dna_writer.writeFloatBig(x44_translationFriction[3]); + /* x44_translationFriction[4] */ + __dna_writer.writeFloatBig(x44_translationFriction[4]); + /* x44_translationFriction[5] */ + __dna_writer.writeFloatBig(x44_translationFriction[5]); + /* x44_translationFriction[6] */ + __dna_writer.writeFloatBig(x44_translationFriction[6]); + /* x44_translationFriction[7] */ + __dna_writer.writeFloatBig(x44_translationFriction[7]); /* x64_[0] */ __dna_writer.writeFloatBig(x64_[0]); /* x64_[1] */ @@ -527,22 +527,22 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const __dna_writer.writeFloatBig(x84_[6]); /* x84_[7] */ __dna_writer.writeFloatBig(x84_[7]); - /* xa4_[0] */ - __dna_writer.writeFloatBig(xa4_[0]); - /* xa4_[1] */ - __dna_writer.writeFloatBig(xa4_[1]); - /* xa4_[2] */ - __dna_writer.writeFloatBig(xa4_[2]); - /* xa4_[3] */ - __dna_writer.writeFloatBig(xa4_[3]); - /* xa4_[4] */ - __dna_writer.writeFloatBig(xa4_[4]); - /* xa4_[5] */ - __dna_writer.writeFloatBig(xa4_[5]); - /* xa4_[6] */ - __dna_writer.writeFloatBig(xa4_[6]); - /* xa4_[7] */ - __dna_writer.writeFloatBig(xa4_[7]); + /* xa4_translationMaxSpeed[0] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[0]); + /* xa4_translationMaxSpeed[1] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[1]); + /* xa4_translationMaxSpeed[2] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[2]); + /* xa4_translationMaxSpeed[3] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[3]); + /* xa4_translationMaxSpeed[4] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[4]); + /* xa4_translationMaxSpeed[5] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[5]); + /* xa4_translationMaxSpeed[6] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[6]); + /* xa4_translationMaxSpeed[7] */ + __dna_writer.writeFloatBig(xa4_translationMaxSpeed[7]); /* xc4_normalGravAccel */ __dna_writer.writeFloatBig(xc4_normalGravAccel); /* xc8_fluidGravAccel */ @@ -601,10 +601,10 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const __dna_writer.writeFloatBig(x130_horizontalFreeLookAngleVel); /* x134_verticalFreeLookAngleVel */ __dna_writer.writeFloatBig(x134_verticalFreeLookAngleVel); - /* x138_ */ - __dna_writer.writeFloatBig(x138_hudLagAmount); - /* x13c_ */ - __dna_writer.writeFloatBig(x13c_); + /* x138_freeLookSpeed */ + __dna_writer.writeFloatBig(x138_freeLookSpeed); + /* x13c_freeLookSnapSpeed */ + __dna_writer.writeFloatBig(x13c_freeLookSnapSpeed); /* x140_ */ __dna_writer.writeFloatBig(x140_); /* x144_freeLookCenteredThresholdAngle */ @@ -617,8 +617,8 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const __dna_writer.writeFloatBig(x150_leftDiv); /* x154_rightDiv */ __dna_writer.writeFloatBig(x154_rightDiv); - /* x228_24_ */ - __dna_writer.writeBool(x228_24_); + /* x228_24_freelookTurnsPlayer */ + __dna_writer.writeBool(x228_24_freelookTurnsPlayer); /* x228_25_ */ __dna_writer.writeBool(x228_25_); /* x228_26_ */ @@ -887,26 +887,26 @@ void CTweakPlayer::write(athena::io::IStreamWriter& __dna_writer) const void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin) { - /* x4_ */ + /* x4_maxTranslationalAcceleration */ size_t __x4_Count; - if (auto v = __dna_docin.enterSubVector("x4_", __x4_Count)) + if (auto v = __dna_docin.enterSubVector("x4_maxTranslationalAcceleration", __x4_Count)) { - /* x4_[0] */ - x4_[0] = __dna_docin.readFloat("x4_"); - /* x4_[1] */ - x4_[1] = __dna_docin.readFloat("x4_"); - /* x4_[2] */ - x4_[2] = __dna_docin.readFloat("x4_"); - /* x4_[3] */ - x4_[3] = __dna_docin.readFloat("x4_"); - /* x4_[4] */ - x4_[4] = __dna_docin.readFloat("x4_"); - /* x4_[5] */ - x4_[5] = __dna_docin.readFloat("x4_"); - /* x4_[6] */ - x4_[6] = __dna_docin.readFloat("x4_"); - /* x4_[7] */ - x4_[7] = __dna_docin.readFloat("x4_"); + /* x4_maxTranslationalAcceleration[0] */ + x4_maxTranslationalAcceleration[0] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[1] */ + x4_maxTranslationalAcceleration[1] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[2] */ + x4_maxTranslationalAcceleration[2] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[3] */ + x4_maxTranslationalAcceleration[3] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[4] */ + x4_maxTranslationalAcceleration[4] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[5] */ + x4_maxTranslationalAcceleration[5] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[6] */ + x4_maxTranslationalAcceleration[6] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); + /* x4_maxTranslationalAcceleration[7] */ + x4_maxTranslationalAcceleration[7] = __dna_docin.readFloat("x4_maxTranslationalAcceleration"); } /* x24_ */ size_t __x24_Count; @@ -929,26 +929,26 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin) /* x24_[7] */ x24_[7] = __dna_docin.readFloat("x24_"); } - /* x44_ */ + /* x44_translationFriction */ size_t __x44_Count; - if (auto v = __dna_docin.enterSubVector("x44_", __x44_Count)) + if (auto v = __dna_docin.enterSubVector("x44_translationFriction", __x44_Count)) { - /* x44_[0] */ - x44_[0] = __dna_docin.readFloat("x44_"); - /* x44_[1] */ - x44_[1] = __dna_docin.readFloat("x44_"); - /* x44_[2] */ - x44_[2] = __dna_docin.readFloat("x44_"); - /* x44_[3] */ - x44_[3] = __dna_docin.readFloat("x44_"); - /* x44_[4] */ - x44_[4] = __dna_docin.readFloat("x44_"); - /* x44_[5] */ - x44_[5] = __dna_docin.readFloat("x44_"); - /* x44_[6] */ - x44_[6] = __dna_docin.readFloat("x44_"); - /* x44_[7] */ - x44_[7] = __dna_docin.readFloat("x44_"); + /* x44_translationFriction[0] */ + x44_translationFriction[0] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[1] */ + x44_translationFriction[1] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[2] */ + x44_translationFriction[2] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[3] */ + x44_translationFriction[3] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[4] */ + x44_translationFriction[4] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[5] */ + x44_translationFriction[5] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[6] */ + x44_translationFriction[6] = __dna_docin.readFloat("x44_translationFriction"); + /* x44_translationFriction[7] */ + x44_translationFriction[7] = __dna_docin.readFloat("x44_translationFriction"); } /* x64_ */ size_t __x64_Count; @@ -992,26 +992,26 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin) /* x84_[7] */ x84_[7] = __dna_docin.readFloat("x84_"); } - /* xa4_ */ + /* xa4_translationMaxSpeed */ size_t __xa4_Count; - if (auto v = __dna_docin.enterSubVector("xa4_", __xa4_Count)) + if (auto v = __dna_docin.enterSubVector("xa4_translationMaxSpeed", __xa4_Count)) { - /* xa4_[0] */ - xa4_[0] = __dna_docin.readFloat("xa4_"); - /* xa4_[1] */ - xa4_[1] = __dna_docin.readFloat("xa4_"); - /* xa4_[2] */ - xa4_[2] = __dna_docin.readFloat("xa4_"); - /* xa4_[3] */ - xa4_[3] = __dna_docin.readFloat("xa4_"); - /* xa4_[4] */ - xa4_[4] = __dna_docin.readFloat("xa4_"); - /* xa4_[5] */ - xa4_[5] = __dna_docin.readFloat("xa4_"); - /* xa4_[6] */ - xa4_[6] = __dna_docin.readFloat("xa4_"); - /* xa4_[7] */ - xa4_[7] = __dna_docin.readFloat("xa4_"); + /* xa4_translationMaxSpeed[0] */ + xa4_translationMaxSpeed[0] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[1] */ + xa4_translationMaxSpeed[1] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[2] */ + xa4_translationMaxSpeed[2] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[3] */ + xa4_translationMaxSpeed[3] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[4] */ + xa4_translationMaxSpeed[4] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[5] */ + xa4_translationMaxSpeed[5] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[6] */ + xa4_translationMaxSpeed[6] = __dna_docin.readFloat("xa4_translationMaxSpeed"); + /* xa4_translationMaxSpeed[7] */ + xa4_translationMaxSpeed[7] = __dna_docin.readFloat("xa4_translationMaxSpeed"); } /* xc4_normalGravAccel */ xc4_normalGravAccel = __dna_docin.readFloat("xc4_normalGravAccel"); @@ -1071,10 +1071,10 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin) x130_horizontalFreeLookAngleVel = __dna_docin.readFloat("x130_horizontalFreeLookAngleVel"); /* x134_verticalFreeLookAngleVel */ x134_verticalFreeLookAngleVel = __dna_docin.readFloat("x134_verticalFreeLookAngleVel"); - /* x138_hudLagAmount */ - x138_hudLagAmount = __dna_docin.readFloat("x138_hudLagAmount"); - /* x13c_ */ - x13c_ = __dna_docin.readFloat("x13c_"); + /* x138_freeLookSpeed */ + x138_freeLookSpeed = __dna_docin.readFloat("x138_freeLookSpeed"); + /* x13c_freeLookSnapSpeed */ + x13c_freeLookSnapSpeed = __dna_docin.readFloat("x13c_freeLookSnapSpeed"); /* x140_ */ x140_ = __dna_docin.readFloat("x140_"); /* x144_freeLookCenteredThresholdAngle */ @@ -1087,8 +1087,8 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin) x150_leftDiv = __dna_docin.readFloat("x150_leftDiv"); /* x154_rightDiv */ x154_rightDiv = __dna_docin.readFloat("x154_rightDiv"); - /* x228_24_ */ - x228_24_ = __dna_docin.readBool("x228_24_"); + /* x228_24_freelookTurnsPlayer */ + x228_24_freelookTurnsPlayer = __dna_docin.readBool("x228_24_freelookTurnsPlayer"); /* x228_25_ */ x228_25_ = __dna_docin.readBool("x228_25_"); /* x228_26_ */ @@ -1402,25 +1402,25 @@ void CTweakPlayer::read(athena::io::YAMLDocReader& __dna_docin) void CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout) const { - /* x4_ */ - if (auto v = __dna_docout.enterSubVector("x4_")) + /* x4_maxTranslationalAcceleration */ + if (auto v = __dna_docout.enterSubVector("x4_maxTranslationalAcceleration")) { - /* x4_[0] */ - __dna_docout.writeFloat("x4_", x4_[0]); - /* x4_[1] */ - __dna_docout.writeFloat("x4_", x4_[1]); - /* x4_[2] */ - __dna_docout.writeFloat("x4_", x4_[2]); - /* x4_[3] */ - __dna_docout.writeFloat("x4_", x4_[3]); - /* x4_[4] */ - __dna_docout.writeFloat("x4_", x4_[4]); - /* x4_[5] */ - __dna_docout.writeFloat("x4_", x4_[5]); - /* x4_[6] */ - __dna_docout.writeFloat("x4_", x4_[6]); - /* x4_[7] */ - __dna_docout.writeFloat("x4_", x4_[7]); + /* x4_maxTranslationalAcceleration[0] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[0]); + /* x4_maxTranslationalAcceleration[1] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[1]); + /* x4_maxTranslationalAcceleration[2] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[2]); + /* x4_maxTranslationalAcceleration[3] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[3]); + /* x4_maxTranslationalAcceleration[4] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[4]); + /* x4_maxTranslationalAcceleration[5] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[5]); + /* x4_maxTranslationalAcceleration[6] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[6]); + /* x4_maxTranslationalAcceleration[7] */ + __dna_docout.writeFloat("x4_maxTranslationalAcceleration", x4_maxTranslationalAcceleration[7]); } /* x24_ */ if (auto v = __dna_docout.enterSubVector("x24_")) @@ -1442,25 +1442,25 @@ void CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout) const /* x24_[7] */ __dna_docout.writeFloat("x24_", x24_[7]); } - /* x44_ */ - if (auto v = __dna_docout.enterSubVector("x44_")) + /* x44_translationFriction */ + if (auto v = __dna_docout.enterSubVector("x44_translationFriction")) { - /* x44_[0] */ - __dna_docout.writeFloat("x44_", x44_[0]); - /* x44_[1] */ - __dna_docout.writeFloat("x44_", x44_[1]); - /* x44_[2] */ - __dna_docout.writeFloat("x44_", x44_[2]); - /* x44_[3] */ - __dna_docout.writeFloat("x44_", x44_[3]); - /* x44_[4] */ - __dna_docout.writeFloat("x44_", x44_[4]); - /* x44_[5] */ - __dna_docout.writeFloat("x44_", x44_[5]); - /* x44_[6] */ - __dna_docout.writeFloat("x44_", x44_[6]); - /* x44_[7] */ - __dna_docout.writeFloat("x44_", x44_[7]); + /* x44_translationFriction[0] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[0]); + /* x44_translationFriction[1] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[1]); + /* x44_translationFriction[2] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[2]); + /* x44_translationFriction[3] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[3]); + /* x44_translationFriction[4] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[4]); + /* x44_translationFriction[5] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[5]); + /* x44_translationFriction[6] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[6]); + /* x44_translationFriction[7] */ + __dna_docout.writeFloat("x44_translationFriction", x44_translationFriction[7]); } /* x64_ */ if (auto v = __dna_docout.enterSubVector("x64_")) @@ -1502,25 +1502,25 @@ void CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout) const /* x84_[7] */ __dna_docout.writeFloat("x84_", x84_[7]); } - /* xa4_ */ - if (auto v = __dna_docout.enterSubVector("xa4_")) + /* xa4_translationMaxSpeed */ + if (auto v = __dna_docout.enterSubVector("xa4_translationMaxSpeed")) { - /* xa4_[0] */ - __dna_docout.writeFloat("xa4_", xa4_[0]); - /* xa4_[1] */ - __dna_docout.writeFloat("xa4_", xa4_[1]); - /* xa4_[2] */ - __dna_docout.writeFloat("xa4_", xa4_[2]); - /* xa4_[3] */ - __dna_docout.writeFloat("xa4_", xa4_[3]); - /* xa4_[4] */ - __dna_docout.writeFloat("xa4_", xa4_[4]); - /* xa4_[5] */ - __dna_docout.writeFloat("xa4_", xa4_[5]); - /* xa4_[6] */ - __dna_docout.writeFloat("xa4_", xa4_[6]); - /* xa4_[7] */ - __dna_docout.writeFloat("xa4_", xa4_[7]); + /* xa4_translationMaxSpeed[0] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[0]); + /* xa4_translationMaxSpeed[1] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[1]); + /* xa4_translationMaxSpeed[2] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[2]); + /* xa4_translationMaxSpeed[3] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[3]); + /* xa4_translationMaxSpeed[4] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[4]); + /* xa4_translationMaxSpeed[5] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[5]); + /* xa4_translationMaxSpeed[6] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[6]); + /* xa4_translationMaxSpeed[7] */ + __dna_docout.writeFloat("xa4_translationMaxSpeed", xa4_translationMaxSpeed[7]); } /* xc4_normalGravAccel */ __dna_docout.writeFloat("xc4_normalGravAccel", xc4_normalGravAccel); @@ -1580,10 +1580,10 @@ void CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout) const __dna_docout.writeFloat("x130_horizontalFreeLookAngleVel", x130_horizontalFreeLookAngleVel); /* x134_verticalFreeLookAngleVel */ __dna_docout.writeFloat("x134_verticalFreeLookAngleVel", x134_verticalFreeLookAngleVel); - /* x138_hudLagAmount */ - __dna_docout.writeFloat("x138_hudLagAmount", x138_hudLagAmount); - /* x13c_ */ - __dna_docout.writeFloat("x13c_", x13c_); + /* x138_freeLookSpeed */ + __dna_docout.writeFloat("x138_freeLookSpeed", x138_freeLookSpeed); + /* x13c_freeLookSnapSpeed */ + __dna_docout.writeFloat("x13c_freeLookSnapSpeed", x13c_freeLookSnapSpeed); /* x140_ */ __dna_docout.writeFloat("x140_", x140_); /* x144_freeLookCenteredThresholdAngle */ @@ -1596,8 +1596,8 @@ void CTweakPlayer::write(athena::io::YAMLDocWriter& __dna_docout) const __dna_docout.writeFloat("x150_leftDiv", x150_leftDiv); /* x154_rightDiv */ __dna_docout.writeFloat("x154_rightDiv", x154_rightDiv); - /* x228_24_ */ - __dna_docout.writeBool("x228_24_", x228_24_); + /* x228_24_freelookTurnsPlayer */ + __dna_docout.writeBool("x228_24_freelookTurnsPlayer", x228_24_freelookTurnsPlayer); /* x228_25_ */ __dna_docout.writeBool("x228_25_", x228_25_); /* x228_26_ */ @@ -1904,8 +1904,8 @@ void CTweakPlayer::FixupValues() { x130_horizontalFreeLookAngleVel = zeus::degToRad(x130_horizontalFreeLookAngleVel); x134_verticalFreeLookAngleVel = zeus::degToRad(x134_verticalFreeLookAngleVel); - x138_hudLagAmount = zeus::degToRad(x138_hudLagAmount); - x13c_ = zeus::degToRad(x13c_); + x138_freeLookSpeed = zeus::degToRad(x138_freeLookSpeed); + x13c_freeLookSnapSpeed = zeus::degToRad(x13c_freeLookSnapSpeed); x140_ = zeus::degToRad(x140_); x144_freeLookCenteredThresholdAngle = zeus::degToRad(x144_freeLookCenteredThresholdAngle); x23c_ = zeus::degToRad(x23c_); diff --git a/DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp b/DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp index e7af7cb32..7980fbad5 100644 --- a/DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp +++ b/DataSpec/DNAMP1/Tweaks/CTweakPlayer.hpp @@ -11,12 +11,12 @@ namespace DNAMP1 struct CTweakPlayer : ITweakPlayer { Delete _d; - Value x4_[8]; + Value x4_maxTranslationalAcceleration[8]; Value x24_[8]; - Value x44_[8]; + Value x44_translationFriction[8]; Value x64_[8]; Value x84_[8]; - Value xa4_[8]; + Value xa4_translationMaxSpeed[8]; Value xc4_normalGravAccel; Value xc8_fluidGravAccel; Value xcc_; @@ -46,8 +46,8 @@ struct CTweakPlayer : ITweakPlayer Value x12c_; Value x130_horizontalFreeLookAngleVel; Value x134_verticalFreeLookAngleVel; - Value x138_hudLagAmount; - Value x13c_; + Value x138_freeLookSpeed; + Value x13c_freeLookSnapSpeed; Value x140_; Value x144_freeLookCenteredThresholdAngle; Value x148_freeLookCenteredTime; @@ -97,7 +97,7 @@ struct CTweakPlayer : ITweakPlayer Value x21c_26_orbitWhileScanning : 1; Value x220_; Value x224_scanningFrameSenseRange; - Value x228_24_ : 1; + Value x228_24_freelookTurnsPlayer : 1; Value x228_25_ : 1; Value x228_26_ : 1; Value x228_27_ : 1; @@ -175,14 +175,14 @@ struct CTweakPlayer : ITweakPlayer Value x300_variaDamageReduction; Value x304_gravityDamageReduction; Value x308_phazonDamageReduction; - float GetX50() const { return x44_[3]; } - float GetX54() const { return x44_[4]; } - float GetX58() const { return x44_[5]; } - float GetX5C() const { return x44_[6]; } + float GetMaxTranslationalAcceleration(int s) const { return x4_maxTranslationalAcceleration[s]; } + float GetPlayerTranslationFriction(int s) const { return x44_translationFriction[s]; } + float GetPlayerTranslationMaxSpeed(int s) const { return xa4_translationMaxSpeed[s]; } float GetNormalGravAccel() const { return xc4_normalGravAccel; } float GetFluidGravAccel() const { return xc8_fluidGravAccel; } float GetEyeOffset() const { return x124_eyeOffset; } - float GetHudLagAmount() const { return x138_hudLagAmount; } + float GetFreeLookSpeed() const { return x138_freeLookSpeed; } + float GetFreeLookSnapSpeed() const { return x13c_freeLookSnapSpeed; } float GetFreeLookCenteredThresholdAngle() const { return x144_freeLookCenteredThresholdAngle; } float GetFreeLookCenteredTime() const { return x148_freeLookCenteredTime; } float GetOrbitNormalDistance() const { return x180_orbitNormalDistance; } @@ -242,7 +242,7 @@ struct CTweakPlayer : ITweakPlayer float GetVerticalFreeLookAngleVel() const { return x134_verticalFreeLookAngleVel; } float GetX184() const { return x184_; } float GetX1fc() const { return x1fc_; } - bool GetX228_24() const { return x228_24_; } + bool GetFreeLookTurnsPlayer() const { return x228_24_freelookTurnsPlayer; } float GetX288() const { return x288_; } float GetX28c() const { return x28c_; } float GetX290() const { return x290_; } @@ -251,7 +251,6 @@ struct CTweakPlayer : ITweakPlayer float GetX29C() const { return x29c_; } float GetX280() const { return x280_; } float GetX2B0() const { return x2b0_; } - float GetX138() const { return x138_hudLagAmount; } float GetX14C() const { return x14c_; } float GetLeftLogicalThreshold() const { return x150_leftDiv; } float GetRightLogicalThreshold() const { return x154_rightDiv; } diff --git a/Runtime/CStateManager.cpp b/Runtime/CStateManager.cpp index 791d73c01..14b0f1e40 100644 --- a/Runtime/CStateManager.cpp +++ b/Runtime/CStateManager.cpp @@ -1310,9 +1310,9 @@ void CStateManager::KnockBackPlayer(CPlayer& player, const zeus::CVector3f& pos, if (player.GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Morphed) { usePower = power * 1000.f; - CPlayer::EPlayerMovementSurface surface = - player.x2b0_ == 2 ? player.x2ac_movementSurface : CPlayer::EPlayerMovementSurface::Four; - if (surface != CPlayer::EPlayerMovementSurface::Normal && + CPlayer::ESurfaceRestraints surface = + player.x2b0_ == 2 ? player.x2ac_surfaceRestraint : CPlayer::ESurfaceRestraints::Four; + if (surface != CPlayer::ESurfaceRestraints::Normal && player.GetOrbitState() == CPlayer::EPlayerOrbitState::Zero) usePower /= 7.f; } diff --git a/Runtime/Camera/CCameraManager.cpp b/Runtime/Camera/CCameraManager.cpp index 660539cec..5704f0e12 100644 --- a/Runtime/Camera/CCameraManager.cpp +++ b/Runtime/Camera/CCameraManager.cpp @@ -262,12 +262,12 @@ void CCameraManager::UpdateListener(CStateManager& mgr) float CCameraManager::CalculateFogDensity(CStateManager& mgr, const CScriptWater* water) { - float f31 = 1.f /* 1.f - water->x1b4_->x40_; */; + float f31 = water->GetFluidPlane().GetAlpha(); float f1 = 0; if (mgr.GetPlayerState()->HasPowerUp(CPlayerState::EItemType::GravitySuit)) - f1 = (g_tweakPlayer->GetX54() * g_tweakPlayer->GetX50()) + f31; + f1 = (g_tweakPlayer->GetPlayerTranslationFriction(4) * g_tweakPlayer->GetPlayerTranslationFriction(3)) + f31; else - f1 = (g_tweakPlayer->GetX5C() * g_tweakPlayer->GetX58()) + f31; + f1 = (g_tweakPlayer->GetPlayerTranslationFriction(6) * g_tweakPlayer->GetPlayerTranslationFriction(5)) + f31; return f1 * x94_; } diff --git a/Runtime/Camera/CFirstPersonCamera.cpp b/Runtime/Camera/CFirstPersonCamera.cpp index 878b3d1ee..283b521b0 100644 --- a/Runtime/Camera/CFirstPersonCamera.cpp +++ b/Runtime/Camera/CFirstPersonCamera.cpp @@ -91,9 +91,9 @@ void CFirstPersonCamera::UpdateTransform(CStateManager& mgr, float dt) angle = (player->x3ec_freeLookPitchAngle > -0.f ? -1.f : 1.f); zeus::CVector3f vec; vec.z = std::sin(angle); - vec.y = std::cos(-player->x3e4_) * std::cos(angle); - vec.x = std::sin(-player->x3e4_) * std::cos(angle); - if (g_tweakPlayer->GetX228_24() && !zeus::close_enough(vec, zeus::CVector3f::skZero)) + vec.y = std::cos(-player->x3e4_freeLookYawAngle) * std::cos(angle); + vec.x = std::sin(-player->x3e4_freeLookYawAngle) * std::cos(angle); + if (g_tweakPlayer->GetFreeLookTurnsPlayer() && !zeus::close_enough(vec, zeus::CVector3f::skZero)) vec.normalize(); rVec = zeus::CQuaternion::lookAt({0.f, 1.f, 0.f}, rVec, zeus::CRelAngle::FromDegrees(360.f)).transform(vec); @@ -240,7 +240,7 @@ void CFirstPersonCamera::UpdateTransform(CStateManager& mgr, float dt) float angle = gunFront.dot(rVec); if (std::fabs(angle) > 1.f) angle = (angle > -0.f ? -1.f : 1.f); - float sdt = dt * g_tweakPlayer->GetX138(); + float sdt = dt * g_tweakPlayer->GetFreeLookSpeed(); qGun = zeus::CQuaternion::lookAt( rVec, gunFront, sdt * zeus::clamp(0.f, g_tweakPlayer->GetX14C() * (std::acos(angle) / sdt), 1.f)); } diff --git a/Runtime/MP1/CSamusFaceReflection.cpp b/Runtime/MP1/CSamusFaceReflection.cpp index ad0ed4efb..33eb0909c 100644 --- a/Runtime/MP1/CSamusFaceReflection.cpp +++ b/Runtime/MP1/CSamusFaceReflection.cpp @@ -110,7 +110,7 @@ void CSamusFaceReflection::Update(float dt, const CStateManager& mgr, CRandom16& lookDot = lookDot > 0.f ? 1.f : -1.f; float lookAng = std::acos(lookDot); x50_lookRot = zeus::CQuaternion::slerp(x50_lookRot, xfLook2, - zeus::clamp(0.f, 18.f * dt * ((lookAng > 0.f) ? 0.5f * dt * g_tweakPlayer->GetHudLagAmount() / lookAng : 0.f), 1.f)); + zeus::clamp(0.f, 18.f * dt * ((lookAng > 0.f) ? 0.5f * dt * g_tweakPlayer->GetFreeLookSpeed() / lookAng : 0.f), 1.f)); x60_lookDir = lookDir; } } diff --git a/Runtime/MP1/CSamusHud.cpp b/Runtime/MP1/CSamusHud.cpp index 9dd0ac3dc..50ecda6dc 100644 --- a/Runtime/MP1/CSamusHud.cpp +++ b/Runtime/MP1/CSamusHud.cpp @@ -690,7 +690,7 @@ void CSamusHud::ApplyClassicLag(const zeus::CUnitVector3f& lookDir, zeus::CQuate float angle = std::acos(dot); float tmp = 0.f; if (angle > 0.f) - tmp = 0.5f * dt * g_tweakPlayer->GetHudLagAmount() / angle; + tmp = 0.5f * dt * g_tweakPlayer->GetFreeLookSpeed() / angle; float t = zeus::clamp(0.f, 18.f * dt * tmp, 1.f); rot = zeus::CQuaternion::slerp(rot, doubleRot, t); diff --git a/Runtime/World/CFluidPlane.cpp b/Runtime/World/CFluidPlane.cpp index bbce900f3..2827eacfe 100644 --- a/Runtime/World/CFluidPlane.cpp +++ b/Runtime/World/CFluidPlane.cpp @@ -1,9 +1,21 @@ +#include #include "CFluidPlane.hpp" +#include "CSimplePool.hpp" namespace urde { -CFluidPlane::CFluidPlane(u32, u32, u32, EFluidType, float, const urde::CFluidUVMotion&, float) + +CFluidPlane::CFluidPlane(ResId texPattern1, ResId texPattern2, ResId texColor, float alpha, EFluidType fluidType, + float f2, const CFluidUVMotion& motion) +: x4_texPattern1Id(texPattern1), x8_texPattern2Id(texPattern2), xc_texColorId(texColor), x40_alpha(alpha), + x44_fluidType(fluidType), x48_f2(f2), x4c_uvMotion(motion) { + if (g_ResFactory->GetResourceTypeById(texPattern1) == FOURCC('TXTR')) + x10_texPattern1.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), texPattern1})); + if (g_ResFactory->GetResourceTypeById(texPattern2) == FOURCC('TXTR')) + x20_texPattern2.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), texPattern2})); + if (g_ResFactory->GetResourceTypeById(texColor) == FOURCC('TXTR')) + x30_texColor.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), texColor})); } void CFluidPlane::Ripple(float mag, TUniqueId rippler, const zeus::CVector3f& pos, diff --git a/Runtime/World/CFluidPlane.hpp b/Runtime/World/CFluidPlane.hpp index 41343a876..df87a6969 100644 --- a/Runtime/World/CFluidPlane.hpp +++ b/Runtime/World/CFluidPlane.hpp @@ -2,6 +2,12 @@ #define __URDE_CFLUIDPLANE_HPP__ #include "RetroTypes.hpp" +#include "CToken.hpp" +#include "Graphics/CTexture.hpp" +#include "CFluidUVMotion.hpp" +#include "zeus/CAABox.hpp" +#include "zeus/CFrustum.hpp" + namespace urde { class CFluidUVMotion; @@ -22,28 +28,36 @@ public: }; private: - u32 x4_; - u32 x8_; - u32 xc_; - float x40_; + ResId x4_texPattern1Id; + ResId x8_texPattern2Id; + ResId xc_texColorId; + std::experimental::optional> x10_texPattern1; + std::experimental::optional> x20_texPattern2; + std::experimental::optional> x30_texColor; + float x40_alpha; EFluidType x44_fluidType; - float x48_; + float x48_f2; + CFluidUVMotion x4c_uvMotion; public: - CFluidPlane() = default; - CFluidPlane(u32, u32, u32, EFluidType, float, const CFluidUVMotion&, float); + CFluidPlane(ResId texPattern1, ResId texPattern2, ResId texColor, float alpha, EFluidType fluidType, + float f2, const CFluidUVMotion& motion); virtual void Ripple(float mag, TUniqueId rippler, const zeus::CVector3f& pos, CScriptWater& water, CStateManager& mgr); virtual void Update(); - float GetAlpha() const; + virtual void Render(const CStateManager& mgr, const zeus::CAABox& aabb, const zeus::CTransform& xf, + const zeus::CTransform& areaXf, bool noSubdiv, const zeus::CFrustum& frustum, + const std::experimental::optional& rippleManager, TUniqueId waterId, + const bool* gridFlags, u32 gridDimX, u32 gridDimY, const zeus::CVector3f& areaCenter) const {} + float GetAlpha() const { return x40_alpha; } EFluidType GetFluidType() const { return x44_fluidType; } - const CFluidUVMotion& GetUVMotion() const; - void GetColorTexture() const; - bool HasColorTexture() const; - void GetTexturePattern1() const; - bool HasTexturePattern1() const; - void GetTexturePattern2() const; - bool HasTexturePattern2() const; + const CFluidUVMotion& GetUVMotion() const { return x4c_uvMotion; } + const CTexture& GetColorTexture() const { return **x30_texColor; } + bool HasColorTexture() const { return x30_texColor.operator bool(); } + const CTexture& GetTexturePattern1() const { return **x10_texPattern1; } + bool HasTexturePattern1() const { return x10_texPattern1.operator bool(); } + const CTexture& GetTexturePattern2() const { return **x20_texPattern2; } + bool HasTexturePattern2() const { return x20_texPattern2.operator bool(); } }; } diff --git a/Runtime/World/CFluidPlaneCPU.cpp b/Runtime/World/CFluidPlaneCPU.cpp index fa0085c76..2fc4a8d97 100644 --- a/Runtime/World/CFluidPlaneCPU.cpp +++ b/Runtime/World/CFluidPlaneCPU.cpp @@ -1,13 +1,91 @@ #include "CFluidPlaneCPU.hpp" +#include "CSimplePool.hpp" +#include "GameGlobalObjects.hpp" + +#define kTableSize 2048 namespace urde { -CFluidPlaneCPU::CFluidPlaneCPU(u32 w1, u32 w2, u32 w3, u32 w4, u32 w5, u32 w6, float f1, u32 w7, u32 w8, - EFluidType fluidType, float f2, const zeus::CVector3f& v1, float f3, - const urde::CFluidUVMotion& motion, float f4, float f5, float f6, float f7, float f8, - float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16, - float f17) -: CFluidPlane(w1, w2, w3, fluidType, f3, motion, f17) +CFluidPlaneCPU::CTurbulence::CTurbulence(float speed, float distance, float freqMax, float freqMin, + float phaseMax, float phaseMin, float amplitudeMax, float amplitudeMin) +: x0_speed(speed), x4_distance(distance), x8_freqMax(freqMax), xc_freqMin(freqMin), + x10_phaseMax(phaseMax), x14_phaseMin(phaseMin), x18_amplitudeMax(amplitudeMax), x1c_amplitudeMin(amplitudeMin), + x2c_ooTurbSpeed(1.f / x0_speed), x30_ooTurbDistance(1.f / x4_distance) { + if (x18_amplitudeMax != 0.f || x1c_amplitudeMin != 0.f) + { + x24_tableCount = kTableSize; + x28_heightSelPitch = x24_tableCount; + x20_table.reset(new float[x24_tableCount]); + float anglePitch = 2.f * M_PIF / x28_heightSelPitch; + float freqConstant = 0.5f * (x8_freqMax + xc_freqMin); + float freqLinear = 0.5f * (x8_freqMax - xc_freqMin); + float phaseConstant = 0.5f * (x10_phaseMax + x14_phaseMin); + float phaseLinear = 0.5f * (x10_phaseMax - x14_phaseMin); + float amplitudeConstant = 0.5f * (x18_amplitudeMax + x1c_amplitudeMin); + float amplitudeLinear = 0.5f * (x18_amplitudeMax - x1c_amplitudeMin); + + float curAng = 0.f; + for (int i=0 ; iGetResourceTypeById(xa0_texIdBumpMap) == FOURCC('TXTR')) + xb0_bumpMap.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), xa0_texIdBumpMap})); + if (g_ResFactory->GetResourceTypeById(xa4_texIdEnvMap) == FOURCC('TXTR')) + xc0_envMap.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), xa4_texIdEnvMap})); + if (g_ResFactory->GetResourceTypeById(xa8_texIdEnvBumpMap) == FOURCC('TXTR')) + xd0_envBumpMap.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), xa8_texIdEnvBumpMap})); + if (g_ResFactory->GetResourceTypeById(xac_texId4) == FOURCC('TXTR')) + xe0_tex4.emplace(g_SimplePool->GetObj(SObjectTag{FOURCC('TXTR'), xac_texId4})); +} + +void CFluidPlaneCPU::CreateRipple(const CRipple& ripple, CStateManager& mgr) +{ + +} + +void CFluidPlaneCPU::RenderSetup(const CStateManager& mgr, float, const zeus::CTransform& xf, + const zeus::CTransform& areaXf, const zeus::CAABox& aabb, CScriptWater* water) const +{ + +} + +void CFluidPlaneCPU::Render(const CStateManager& mgr, const zeus::CAABox& aabb, const zeus::CTransform& xf, + const zeus::CTransform& areaXf, bool noSubdiv, const zeus::CFrustum& frustum, + const std::experimental::optional& rippleManager, TUniqueId waterId, + const bool* gridFlags, u32 gridDimX, u32 gridDimY, const zeus::CVector3f& areaCenter) const +{ + +} + +void CFluidPlaneCPU::RenderCleanup() const +{ + +} + } diff --git a/Runtime/World/CFluidPlaneCPU.hpp b/Runtime/World/CFluidPlaneCPU.hpp index 8a524a968..1a57ef8f6 100644 --- a/Runtime/World/CFluidPlaneCPU.hpp +++ b/Runtime/World/CFluidPlaneCPU.hpp @@ -2,16 +2,91 @@ #define __URDE_CFLUIDPLANECPU_HPP__ #include "CFluidPlane.hpp" +#include "CRipple.hpp" namespace urde { class CFluidUVMotion; class CFluidPlaneCPU : public CFluidPlane { + class CTurbulence + { + float x0_speed; + float x4_distance; + float x8_freqMax; + float xc_freqMin; + float x10_phaseMax; + float x14_phaseMin; + float x18_amplitudeMax; + float x1c_amplitudeMin; + std::unique_ptr x20_table; // x140 + u32 x24_tableCount = 0; // x144 + float x28_heightSelPitch = 0.f; // x148 + float x2c_ooTurbSpeed; // x14c + float x30_ooTurbDistance; // x150 + bool x34_hasTurbulence = false; // x154 + public: + CTurbulence(float speed, float distance, float freqMax, float freqMin, + float phaseMax, float phaseMin, float amplitudeMax, float amplitudeMin); + float GetHeight(float sel) const { return x20_table[(x24_tableCount - 1) & int(sel * x28_heightSelPitch)]; } + float GetOODistance() const { return x30_ooTurbDistance; } + float GetOOSpeed() const { return x2c_ooTurbSpeed; } + bool HasTurbulence() const { return x34_hasTurbulence; } + }; + + ResId xa0_texIdBumpMap; + ResId xa4_texIdEnvMap; + ResId xa8_texIdEnvBumpMap; + ResId xac_texId4; + std::experimental::optional> xb0_bumpMap; + std::experimental::optional> xc0_envMap; + std::experimental::optional> xd0_envBumpMap; + std::experimental::optional> xe0_tex4; + zeus::CVector3f xf0_bumpLightDir; + float xfc_bumpScale; + float x100_tileSize; + u32 x104_tileSubdivisions; + float x108_rippleResolution; + float x10c_specularMin; + float x110_specularMax; + float x114_reflectionBlend; + float x118_reflectionSize; + float x11c_f1; + CTurbulence x120_turbulence; public: - CFluidPlaneCPU(u32, u32, u32, u32, u32, u32, float, u32, u32, EFluidType, float, const zeus::CVector3f&, - float, const CFluidUVMotion&, float, float, float, float, float, float, float, float, float, float, - float, float, float, float); + CFluidPlaneCPU(ResId texPattern1, ResId texPattern2, ResId texColor, ResId bumpMap, ResId envMap, ResId envBumpMap, + ResId unkMap, float f1, float tileSize, u32 tileSubdivisions, EFluidType fluidType, float alpha, + const zeus::CVector3f& bumpLightDir, float bumpScale, const CFluidUVMotion& mot, float turbSpeed, + float turbDistance, float turbFreqMax, float turbFreqMin, float turbPhaseMax, float turbPhaseMin, + float turbAmplitudeMax, float turbAmplitudeMin, float specularMin, float specularMax, + float reflectionBlend, float reflectionSize, float fluidPlaneF2); + void CreateRipple(const CRipple& ripple, CStateManager& mgr); + void RenderSetup(const CStateManager& mgr, float, const zeus::CTransform& xf, const zeus::CTransform& areaXf, + const zeus::CAABox& aabb, CScriptWater* water) const; + void Render(const CStateManager& mgr, const zeus::CAABox& aabb, const zeus::CTransform& xf, + const zeus::CTransform& areaXf, bool noSubdiv, const zeus::CFrustum& frustum, + const std::experimental::optional& rippleManager, TUniqueId waterId, + const bool* gridFlags, u32 gridDimX, u32 gridDimY, const zeus::CVector3f& areaCenter) const; + void RenderCleanup() const; + float GetReflectionBlend() const { return x114_reflectionBlend; } + float GetSpecularMax() const { return x110_specularMax; } + float GetSpecularMin() const { return x10c_specularMin; } + float GetReflectionSize() const { return x118_reflectionSize; } + float GetBumpScale() const { return xfc_bumpScale; } + bool HasBumpMap() const { return xb0_bumpMap.operator bool(); } + const CTexture& GetBumpMap() const { return **xb0_bumpMap; } + bool HasEnvMap() const { return xc0_envMap.operator bool(); } + const CTexture& GetEnvMap() const { return **xc0_envMap; } + bool HasEnvBumpMap() const { return xd0_envBumpMap.operator bool(); } + const CTexture& GetEnvBumpMap() const { return **xd0_envBumpMap; } + const zeus::CVector3f& GetBumpLightDir() const { return xf0_bumpLightDir; } + float GetTileSize() const { return x100_tileSize; } + u32 GetTileSubdivisions() const { return x104_tileSubdivisions; } + float GetRippleResolution() const { return x108_rippleResolution; } + float GetTurbulenceHeight(float sel) const { return x120_turbulence.GetHeight(sel); } + float GetOOTurbulenceDistance() const { return x120_turbulence.GetOODistance(); } + float GetOOTurbulenceSpeed() const { return x120_turbulence.GetOOSpeed(); } + bool HasTurbulence() const { return x120_turbulence.HasTurbulence(); } }; } diff --git a/Runtime/World/CFluidUVMotion.hpp b/Runtime/World/CFluidUVMotion.hpp index 5cca35500..27308b44d 100644 --- a/Runtime/World/CFluidUVMotion.hpp +++ b/Runtime/World/CFluidUVMotion.hpp @@ -23,11 +23,11 @@ public: float x8_b = 0.f; float xc_c = 1.f; float x10_d = 5.f; - float x14_e = 0.2f; + float x14_envNormalScale = 0.2f; SFluidLayerMotion() = default; SFluidLayerMotion(EFluidUVMotion motion, float a, float b, float c, float d) - : x0_motion(motion), x4_a(1.f / a), x8_b(b), xc_c(c), x10_d(d), x14_e(1.f / d) + : x0_motion(motion), x4_a(1.f / a), x8_b(b), xc_c(c), x10_d(d), x14_envNormalScale(1.f / d) { } }; diff --git a/Runtime/World/CMorphBall.hpp b/Runtime/World/CMorphBall.hpp index 6db492c96..dcd3ded15 100644 --- a/Runtime/World/CMorphBall.hpp +++ b/Runtime/World/CMorphBall.hpp @@ -128,7 +128,7 @@ public: void SetTouchedHalfPipeRecently(bool) {} void DisableHalfPipeStatus() {} void BallCloseToCollision(const CStateManager&, float) const {} - void CollidedWith(const TUniqueId&, const CCollisionInfoList&, CStateManager&) {} + 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 {} diff --git a/Runtime/World/CPlayer.cpp b/Runtime/World/CPlayer.cpp index 5fdf28cd1..18ddac504 100644 --- a/Runtime/World/CPlayer.cpp +++ b/Runtime/World/CPlayer.cpp @@ -346,7 +346,7 @@ void CPlayer::TakeDamage(bool significant, const zeus::CVector3f& location, doRumble = true; } - if (damageLoopSfx && !x9c7_24_ && x2ac_movementSurface >= EPlayerMovementSurface::Ice) + if (damageLoopSfx && !x9c7_24_ && x2ac_surfaceRestraint >= ESurfaceRestraints::Ice) { if (!x770_damageLoopSfx || x788_damageLoopSfxId != damageLoopSfx) { @@ -987,7 +987,7 @@ void CPlayer::UpdateFreeLookState(const CFinalInput& input, float dt, CStateMana zeus::CVector3f lookDir = mgr.GetCameraManager()->GetFirstPersonCamera()->GetTransform().basis[1]; zeus::CVector3f lookDirFlat = lookDir; lookDirFlat.z = 0.f; - x3e4_ = 0.f; + x3e4_freeLookYawAngle = 0.f; if (lookDirFlat.canBeNormalized()) { lookDirFlat.normalize(); @@ -1022,7 +1022,7 @@ void CPlayer::UpdateFreeLookState(const CFinalInput& input, float dt, CStateMana ControlMapper::GetAnalogInput(ControlMapper::ECommands::LookDown, input) >= 0.1f || ControlMapper::GetAnalogInput(ControlMapper::ECommands::LookUp, input) >= 0.1f); x3dd_freeLookPitchAngleCalculated = false; - if (std::fabs(x3e4_) < g_tweakPlayer->GetFreeLookCenteredThresholdAngle() && + if (std::fabs(x3e4_freeLookYawAngle) < g_tweakPlayer->GetFreeLookCenteredThresholdAngle() && std::fabs(x3ec_freeLookPitchAngle) < g_tweakPlayer->GetFreeLookCenteredThresholdAngle()) { if (x3e0_curFreeLookCenteredTime > g_tweakPlayer->GetFreeLookCenteredTime()) @@ -1046,9 +1046,34 @@ void CPlayer::UpdateFreeLookState(const CFinalInput& input, float dt, CStateMana UpdateCrosshairsState(input); } -void CPlayer::UpdateFreeLook(float dt) {} +void CPlayer::UpdateFreeLook(float dt) +{ + if (GetFrozenState()) + return; + float lookDeltaAngle = dt * g_tweakPlayer->GetFreeLookSpeed(); + if (!x3de_lookControlHeld) + lookDeltaAngle = dt * g_tweakPlayer->GetFreeLookSnapSpeed(); + float angleVelP = x3f0_vertFreeLookAngleVel - x3ec_freeLookPitchAngle; + float vertLookDamp = zeus::clamp(0.f, std::fabs(angleVelP / 1.0471976f), 1.f); + float dx = lookDeltaAngle * (2.f * vertLookDamp - std::sin((M_PIF / 2.f) * vertLookDamp)); + if (0.f <= angleVelP) + x3ec_freeLookPitchAngle += dx; + else + x3ec_freeLookPitchAngle -= dx; + angleVelP = x3e8_horizFreeLookAngleVel - x3e4_freeLookYawAngle; + dx = lookDeltaAngle * zeus::clamp(0.f, std::fabs(angleVelP / g_tweakPlayer->GetHorizontalFreeLookAngleVel()), 1.f); + if (0.f <= angleVelP) + x3e4_freeLookYawAngle += dx; + else + x3e4_freeLookYawAngle -= dx; + if (g_tweakPlayer->GetFreeLookTurnsPlayer()) + x3e4_freeLookYawAngle = 0.f; +} -float CPlayer::GetMaximumPlayerPositiveVerticalVelocity(CStateManager&) const { return 0.f; } +float CPlayer::GetMaximumPlayerPositiveVerticalVelocity(CStateManager& mgr) const +{ + return mgr.GetPlayerState()->GetItemAmount(CPlayerState::EItemType::SpaceJumpBoots) ? 14.f : 11.666666f; +} void CPlayer::StartLandingControlFreeze() { @@ -1652,16 +1677,16 @@ void CPlayer::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CState SetMoveState(EPlayerMovementState::StartingJump, mgr); break; case EScriptObjectMessage::OnIceSurface: - x2ac_movementSurface = EPlayerMovementSurface::Ice; + x2ac_surfaceRestraint = ESurfaceRestraints::Ice; break; case EScriptObjectMessage::OnMudSlowSurface: - x2ac_movementSurface = EPlayerMovementSurface::MudSlow; + x2ac_surfaceRestraint = ESurfaceRestraints::MudSlow; break; case EScriptObjectMessage::OnNormalSurface: - x2ac_movementSurface = EPlayerMovementSurface::Normal; + x2ac_surfaceRestraint = ESurfaceRestraints::Normal; break; case EScriptObjectMessage::InSnakeWeed: - x2ac_movementSurface = EPlayerMovementSurface::SnakeWeed; + x2ac_surfaceRestraint = ESurfaceRestraints::SnakeWeed; break; case EScriptObjectMessage::AddSplashInhabitant: { @@ -1690,13 +1715,13 @@ void CPlayer::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CState break; case CFluidPlane::EFluidType::Two: case CFluidPlane::EFluidType::Five: - x2ac_movementSurface = EPlayerMovementSurface::Fluid2Or5; + x2ac_surfaceRestraint = ESurfaceRestraints::Fluid2Or5; break; case CFluidPlane::EFluidType::One: x2b0_ = 0; break; case CFluidPlane::EFluidType::Three: - x2ac_movementSurface = EPlayerMovementSurface::Fluid3; + x2ac_surfaceRestraint = ESurfaceRestraints::Fluid3; break; default: break; } @@ -1775,7 +1800,7 @@ void CPlayer::UpdateFootstepSounds(const CFinalInput& input, CStateManager& mgr, float sfxDelay = 0.f; if (forward > 0.05f || x304_orbitState != EPlayerOrbitState::Zero) { - float vel = std::min(1.f, x138_velocity.magnitude() / GetActualFirstPersonMaxVelocity()); + float vel = std::min(1.f, x138_velocity.magnitude() / GetActualFirstPersonMaxVelocity(dt)); if (vel > 0.05f) { sfxDelay = -0.475f * vel + 0.85f; @@ -3830,6 +3855,11 @@ float CPlayer::GetEyeHeight() const return x9c8_eyeZBias + (x2d8_fpBounds.max.z - g_tweakPlayer->GetEyeOffset()); } +float CPlayer::GetUnbiasedEyeHeight() const +{ + return x2d8_fpBounds.max.z - g_tweakPlayer->GetEyeOffset(); +} + float CPlayer::GetStepUpHeight() const { if (x258_movementState == EPlayerMovementState::Jump || @@ -3878,11 +3908,34 @@ const CCollidableSphere* CPlayer::GetCollidableSphere() const return x768_morphball->GetCollidableSphere(); } -zeus::CTransform CPlayer::GetPrimitiveTransform() const { return {}; } +zeus::CTransform CPlayer::GetPrimitiveTransform() const +{ + return CPhysicsActor::GetPrimitiveTransform(); +} -void CPlayer::CollidedWith(TUniqueId, const CCollisionInfoList&, CStateManager& mgr) {} +void CPlayer::CollidedWith(TUniqueId id, const CCollisionInfoList& list, CStateManager& mgr) +{ + if (x2f8_morphTransState != EPlayerMorphBallState::Unmorphed) + x768_morphball->CollidedWith(id, list, mgr); +} -float CPlayer::GetActualFirstPersonMaxVelocity() const { return 0.f; } +float CPlayer::GetActualBallMaxVelocity(float dt) const +{ + ESurfaceRestraints surf = x2b0_ == 2 ? x2ac_surfaceRestraint : ESurfaceRestraints::Four; + float friction = g_tweakBall->GetBallTranslationFriction(int(surf)); + float maxSpeed = g_tweakBall->GetBallTranslationMaxSpeed(int(surf)); + float acceleration = g_tweakBall->GetMaxBallTranslationAcceleration(int(surf)); + return -(friction * xe8_mass * maxSpeed / (acceleration * dt) - maxSpeed - friction); +} + +float CPlayer::GetActualFirstPersonMaxVelocity(float dt) const +{ + ESurfaceRestraints surf = x2b0_ == 2 ? x2ac_surfaceRestraint : ESurfaceRestraints::Four; + float friction = g_tweakPlayer->GetPlayerTranslationFriction(int(surf)); + float maxSpeed = g_tweakPlayer->GetPlayerTranslationMaxSpeed(int(surf)); + float acceleration = g_tweakPlayer->GetMaxTranslationalAcceleration(int(surf)); + return -(friction * xe8_mass * maxSpeed / (acceleration * dt) - maxSpeed - friction); +} void CPlayer::SetMoveState(EPlayerMovementState, CStateManager& mgr) {} @@ -4004,7 +4057,7 @@ void CPlayer::LeaveMorphBallState(CStateManager& mgr) SetHudDisable(FLT_EPSILON, 0.f, 2.f); SetIntoBallReadyAnimation(mgr); CPhysicsActor::Stop(); - x3e4_ = 0.f; + x3e4_freeLookYawAngle = 0.f; x3e8_horizFreeLookAngleVel = 0.f; x3ec_freeLookPitchAngle = 0.f; x3f0_vertFreeLookAngleVel = 0.f; diff --git a/Runtime/World/CPlayer.hpp b/Runtime/World/CPlayer.hpp index 0d79f686e..74d8779db 100644 --- a/Runtime/World/CPlayer.hpp +++ b/Runtime/World/CPlayer.hpp @@ -122,7 +122,7 @@ public: Four }; - enum class EPlayerMovementSurface + enum class ESurfaceRestraints { Normal, One, @@ -217,7 +217,7 @@ private: float x2a0_ = 0.f; bool x2a4_cancelCameraPitch = false; float x2a8_ = 1000.f; - EPlayerMovementSurface x2ac_movementSurface = EPlayerMovementSurface::Normal; + ESurfaceRestraints x2ac_surfaceRestraint = ESurfaceRestraints::Normal; u32 x2b0_ = 2; rstl::reserved_vector x2b4_; u32 x2d0_ = 3; @@ -271,7 +271,7 @@ private: bool x3dd_freeLookPitchAngleCalculated = false; bool x3de_lookControlHeld = false; float x3e0_curFreeLookCenteredTime = 0.f; - float x3e4_ = 0.f; + float x3e4_freeLookYawAngle = 0.f; float x3e8_horizFreeLookAngleVel = 0.f; float x3ec_freeLookPitchAngle = 0.f; float x3f0_vertFreeLookAngleVel = 0.f; @@ -554,6 +554,7 @@ public: zeus::CVector3f GetBallPosition() const; zeus::CVector3f GetEyePosition() const; float GetEyeHeight() const; + float GetUnbiasedEyeHeight() const; float GetStepUpHeight() const; float GetStepDownHeight() const; void Teleport(const zeus::CTransform& xf, CStateManager& mgr, bool); @@ -563,7 +564,8 @@ public: const CCollidableSphere* GetCollidableSphere() const; zeus::CTransform GetPrimitiveTransform() const; void CollidedWith(TUniqueId, const CCollisionInfoList&, CStateManager& mgr); - float GetActualFirstPersonMaxVelocity() const; + float GetActualBallMaxVelocity(float dt) const; + float GetActualFirstPersonMaxVelocity(float dt) const; void SetMoveState(EPlayerMovementState, CStateManager& mgr); float JumpInput(const CFinalInput& input, CStateManager& mgr); float TurnInput(const CFinalInput& input) const; diff --git a/Runtime/World/CScriptWater.hpp b/Runtime/World/CScriptWater.hpp index 0690aa1a7..69886c5cc 100644 --- a/Runtime/World/CScriptWater.hpp +++ b/Runtime/World/CScriptWater.hpp @@ -39,6 +39,26 @@ private: u32 x264_ = 0; TLockedToken x268_splashEffects[5]; u16 x29c_splashSounds[5]; + u32 x2c0_tesselationSize; + u32 x2c4_gridDimX = 0; + u32 x2c8_gridDimY = 0; + u32 x2cc_gridCellCount = 0; + std::unique_ptr x2d8_gridFlags; + std::unique_ptr x2e0_; + u32 x2e4_gridCellCount2 = 0; + union + { + struct + { + bool x2e8_24 : 1; + bool x2e8_25 : 1; + bool x2e8_26 : 1; + bool x2e8_27 : 1; + bool x2e8_28 : 1; + }; + u32 _dummy = 0; + }; + void SetupGrid(bool b); public: CScriptWater(CStateManager&, TUniqueId, const std::string& name, const CEntityInfo&, const zeus::CVector3f&, const zeus::CAABox&, CDamageInfo const&, zeus::CVector3f&, ETriggerFlags, bool, bool, ResId, ResId, ResId, ResId,