From 8d90edd55fd8e48721b6b3c596a92afafa0b0b83 Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Mon, 20 Jan 2020 20:00:40 -0800 Subject: [PATCH] Initial CChozoGhost imp --- DataSpec/DNAMP1/ScriptObjects/Parameters.hpp | 2 +- Runtime/CMemoryCardSys.cpp | 4 +- Runtime/MP1/World/CChozoGhost.cpp | 63 +++++++++++++++++++- Runtime/MP1/World/CChozoGhost.hpp | 17 +++++- Runtime/World/CActor.cpp | 8 +-- 5 files changed, 83 insertions(+), 11 deletions(-) diff --git a/DataSpec/DNAMP1/ScriptObjects/Parameters.hpp b/DataSpec/DNAMP1/ScriptObjects/Parameters.hpp index 61ab65e5b..6ec46990b 100644 --- a/DataSpec/DNAMP1/ScriptObjects/Parameters.hpp +++ b/DataSpec/DNAMP1/ScriptObjects/Parameters.hpp @@ -121,7 +121,7 @@ struct BehaveChance : BigDNA { Value unknown4; Value unknown5; Value unknown6; - Value unknown7; + Value unknown7; }; struct DamageInfo : BigDNA { diff --git a/Runtime/CMemoryCardSys.cpp b/Runtime/CMemoryCardSys.cpp index 2d7428dfc..a01ccbe7a 100644 --- a/Runtime/CMemoryCardSys.cpp +++ b/Runtime/CMemoryCardSys.cpp @@ -101,9 +101,7 @@ bool CMemoryCardSys::InitializePump() { return false; } - if (!x0_hints.IsLoaded() || !x0_hints.GetObj()) - return false; - return true; + return !(!x0_hints.IsLoaded() || !x0_hints.GetObj()); } bool done = true; diff --git a/Runtime/MP1/World/CChozoGhost.cpp b/Runtime/MP1/World/CChozoGhost.cpp index f68501497..6bc381343 100644 --- a/Runtime/MP1/World/CChozoGhost.cpp +++ b/Runtime/MP1/World/CChozoGhost.cpp @@ -1,5 +1,9 @@ #include "Runtime/MP1/World/CChozoGhost.hpp" +#include "Runtime/CStateManager.hpp" +#include "Runtime/CRandom16.hpp" + +#include "TCastTo.hpp" // Generated file, do not modify include path namespace urde::MP1 { CChozoGhost::CBehaveChance::CBehaveChance(CInputStream& in) : x0_propertyCount(in.readUint32Big()) @@ -17,6 +21,42 @@ CChozoGhost::CBehaveChance::CBehaveChance(CInputStream& in) x10_ *= f2; } +u32 CChozoGhost::CBehaveChance::GetBehave(EBehaveType type, CStateManager& mgr) const { + float dVar5 = x4_; + float dVar4 = x8_; + float dVar3 = xc_; + if (type == EBehaveType::Zero) { + float dVar2 = dVar5 / 3.f; + dVar5 = 0.f; + dVar4 += dVar2; + dVar3 += dVar2; + } else if (type == EBehaveType::One) { + float dVar2 = dVar4 / 3.f; + dVar4 = 0.f; + dVar5 += dVar2; + dVar3 += dVar2; + } else if (type == EBehaveType::Two) { + float dVar2 = dVar3 / 3.f; + dVar3 = 0.f; + dVar5 += dVar2; + dVar4 += dVar2; + } else if (type == EBehaveType::Three) { + float dVar2 = x10_ / 3.f; + dVar5 += dVar2; + dVar4 += dVar2; + dVar3 += dVar2; + } + + float rnd = mgr.GetActiveRandom()->Float(); + if (dVar5 > rnd) + return 0; + else if (dVar4 > (rnd - dVar5)) + return 1; + else if (dVar3 > (rnd - dVar5) - dVar4) + return 2; + return 3; +} + CChozoGhost::CChozoGhost(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CActorParameters& actParms, const CPatternedInfo& pInfo, float f1, float f2, float f3, float f4, CAssetId wpsc1, const CDamageInfo& dInfo1, CAssetId wpsc2, @@ -40,5 +80,26 @@ CChozoGhost::CChozoGhost(TUniqueId uid, std::string_view name, const CEntityInfo , x632_(sId3) , x634_(f6) , x638_(f7) -, x63c_(w2) {} +, x63c_(w2) +, x650_(sId4) +, x654_(f8) +, x658_(f9) +, x65c_(w3) +, x660_(w4) +, x664_24_(w1) +, x664_25_(w1) +, x664_26_(false) +, x664_27_(false) +, x664_28_(false) +, x664_29_(false) +, x664_30_(false) +, x664_31_(false) +, x665_24_(true) +, x665_25_(false) +, x665_26_(false) +, x665_27_(false) +, x665_28_(false) +, x665_29_(false) +, x68c_boneTracking(*GetModelData()->GetAnimationData(), "Head_1"sv, zeus::degToRad(80.f), zeus::degToRad(180.f), + EBoneTrackingFlags::None) {} } // namespace urde::MP1 \ No newline at end of file diff --git a/Runtime/MP1/World/CChozoGhost.hpp b/Runtime/MP1/World/CChozoGhost.hpp index b866cb6b3..c5b782647 100644 --- a/Runtime/MP1/World/CChozoGhost.hpp +++ b/Runtime/MP1/World/CChozoGhost.hpp @@ -10,6 +10,13 @@ #include namespace urde::MP1 { +enum class EBehaveType { + Zero, + One, + Two, + Three +}; + class CChozoGhost : public CPatterned { public: class CBehaveChance { @@ -24,6 +31,8 @@ public: public: CBehaveChance(CInputStream&); + + u32 GetBehave(EBehaveType type, CStateManager& mgr) const; }; private: @@ -72,15 +81,17 @@ private: float x66c_ = 0.f; float x670_ = 0.f; TUniqueId x674_ = kInvalidUniqueId; + float x678_ = 0.f; u32 x67c_ = -1; - u32 x680_; + u32 x680_ = 0; float x684_ = 1.f; CSteeringBehaviors x688_; - //CBoneTracking x68c_boneTracking; + CBoneTracking x68c_boneTracking; TUniqueId x6c4_ = kInvalidUniqueId; float x6c8_ = 0.f; zeus::CVector3f x6cc_; u32 x6d8_ = 1; + u32 x6dc_; public: DEFINE_PATTERNED(ChozoGhost) @@ -89,5 +100,7 @@ public: CAssetId, const CDamageInfo&, const CChozoGhost::CBehaveChance&, const CChozoGhost::CBehaveChance&, const CBehaveChance&, u16, float, u16, u16, u32, float, u32, float, CAssetId, s16, float, float, u32, u32); + + float GetGravityConstant() const { return 60.f; } }; } // namespace urde::MP1 \ No newline at end of file diff --git a/Runtime/World/CActor.cpp b/Runtime/World/CActor.cpp index 623254653..07ecd917b 100644 --- a/Runtime/World/CActor.cpp +++ b/Runtime/World/CActor.cpp @@ -207,8 +207,8 @@ void CActor::DrawTouchBounds() const { } void CActor::RenderInternal(const CStateManager& mgr) const { - SCOPED_GRAPHICS_DEBUG_GROUP(fmt::format(fmt("CActor::RenderInternal {} {} {}"), - x8_uid, xc_editorId, x10_name).c_str(), zeus::skOrange); + SCOPED_GRAPHICS_DEBUG_GROUP( + fmt::format(fmt("CActor::RenderInternal {} {} {}"), x8_uid, xc_editorId, x10_name).c_str(), zeus::skOrange); CModelData::EWhichModel which = CModelData::GetRenderingModel(mgr); if (which == CModelData::EWhichModel::ThermalHot) { @@ -265,8 +265,8 @@ void CActor::Render(const CStateManager& mgr) const { if (xe5_29_globalTimeProvider) { RenderInternal(mgr); } else { - float timeSince = CGraphics::GetSecondsMod900() - xbc_time; - float tpTime = timeSince - std::floor(timeSince / 900.f) * 900.f; + const float timeSince = CGraphics::GetSecondsMod900() - xbc_time; + const float tpTime = timeSince - std::floor(timeSince / 900.f) * 900.f; CTimeProvider tp(tpTime); RenderInternal(mgr); }