From 11d17d0fe5a27d1937032101cdbcd006ad1f1e64 Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Sat, 25 Nov 2017 17:04:25 -1000 Subject: [PATCH] Various bug fixes --- DataSpec/DNACommon/ParticleCommon.hpp | 32 +-- DataSpec/DNAMP1/ANCS.hpp | 2 +- DataSpec/DNAMP1/EVNT.hpp | 2 +- DataSpec/DNAMP1/FRME.hpp | 4 +- .../ScriptObjects/CameraBlurKeyframe.hpp | 2 +- .../ScriptObjects/CameraFilterKeyframe.hpp | 2 +- DataSpec/DNAMP3/CHAR.hpp | 6 +- DataSpec/SpecBase.cpp | 6 +- Runtime/CStateManager.cpp | 24 +- Runtime/Camera/CCameraManager.cpp | 4 +- .../Shaders/CFluidPlaneShaderGLSL.cpp | 4 +- .../Shaders/CFluidPlaneShaderHLSL.cpp | 2 +- .../Shaders/CFluidPlaneShaderMetal.cpp | 2 +- Runtime/MkCastTo.py | 4 +- Runtime/World/CActor.cpp | 11 +- Runtime/World/CActor.hpp | 4 +- Runtime/World/CEntity.hpp | 2 + Runtime/World/CFishCloud.cpp | 20 ++ Runtime/World/CFishCloud.hpp | 22 ++ Runtime/World/CPhysicsActor.cpp | 1 + Runtime/World/CScriptDebugCameraWaypoint.cpp | 14 + Runtime/World/CScriptDebugCameraWaypoint.hpp | 19 ++ Runtime/World/CScriptGunTurret.cpp | 21 ++ Runtime/World/CScriptGunTurret.hpp | 32 +++ Runtime/World/CScriptRelay.cpp | 32 +-- Runtime/World/CScriptRelay.hpp | 2 +- Runtime/World/CScriptTrigger.cpp | 25 +- Runtime/World/CScriptTrigger.hpp | 2 +- Runtime/World/FishCloud.cpp | 0 Runtime/World/FishCloud.hpp | 0 Runtime/World/ScriptLoader.cpp | 4 +- Runtime/World/ScriptObjectSupport.cpp | 243 ++++++++++++++++++ Runtime/World/ScriptObjectSupport.hpp | 9 + hecl | 2 +- 34 files changed, 481 insertions(+), 80 deletions(-) delete mode 100644 Runtime/World/FishCloud.cpp delete mode 100644 Runtime/World/FishCloud.hpp diff --git a/DataSpec/DNACommon/ParticleCommon.hpp b/DataSpec/DNACommon/ParticleCommon.hpp index 5a54ab2b2..d8da24d0f 100644 --- a/DataSpec/DNACommon/ParticleCommon.hpp +++ b/DataSpec/DNACommon/ParticleCommon.hpp @@ -16,7 +16,7 @@ struct IElement : BigYAML virtual const char* ClassID() const=0; }; -struct IRealElement : IElement {Delete _d;}; +struct IRealElement : IElement {Delete _d2;}; struct RealElementFactory : BigYAML { Delete _d; @@ -30,7 +30,7 @@ struct RealElementFactory : BigYAML void write(athena::io::IStreamWriter& w) const; }; -struct IIntElement : IElement {Delete _d;}; +struct IIntElement : IElement {Delete _d2;}; struct IntElementFactory : BigYAML { Delete _d; @@ -44,7 +44,7 @@ struct IntElementFactory : BigYAML void write(athena::io::IStreamWriter& w) const; }; -struct IVectorElement : IElement {Delete _d;}; +struct IVectorElement : IElement {Delete _d2;}; struct VectorElementFactory : BigYAML { Delete _d; @@ -58,7 +58,7 @@ struct VectorElementFactory : BigYAML void write(athena::io::IStreamWriter& w) const; }; -struct IColorElement : IElement {Delete _d;}; +struct IColorElement : IElement {Delete _d2;}; struct ColorElementFactory : BigYAML { Delete _d; @@ -72,7 +72,7 @@ struct ColorElementFactory : BigYAML void write(athena::io::IStreamWriter& w) const; }; -struct IModVectorElement : IElement {Delete _d;}; +struct IModVectorElement : IElement {Delete _d2;}; struct ModVectorElementFactory : BigYAML { Delete _d; @@ -86,7 +86,7 @@ struct ModVectorElementFactory : BigYAML void write(athena::io::IStreamWriter& w) const; }; -struct IEmitterElement : IElement {Delete _d;}; +struct IEmitterElement : IElement {Delete _d2;}; struct EmitterElementFactory : BigYAML { Delete _d; @@ -102,13 +102,13 @@ struct EmitterElementFactory : BigYAML struct IUVElement : IElement { - Delete _d; + Delete _d2; virtual void gatherDependencies(std::vector& pathsOut) const=0; }; struct BoolHelper : IElement { - Delete _d; + Delete _d2; bool value = false; operator bool() const {return value;} BoolHelper& operator=(bool val) {value = val; return *this;} @@ -151,7 +151,7 @@ struct RELifetimeTween : IRealElement struct REConstant : IRealElement { - Delete _d; + Delete _d3; Value val; void read(athena::io::YAMLDocReader& r) @@ -464,7 +464,7 @@ struct IEAdd : IIntElement struct IEConstant : IIntElement { - Delete _d; + Delete _d3; Value val; void read(athena::io::YAMLDocReader& r) @@ -625,7 +625,7 @@ struct VECircleCluster : IVectorElement struct VEConstant : IVectorElement { - Delete _d; + Delete _d3; RealElementFactory comps[3]; void read(athena::io::YAMLDocReader& r) @@ -772,7 +772,7 @@ struct CEKeyframeEmitter : IColorElement struct CEConstant : IColorElement { - Delete _d; + Delete _d3; RealElementFactory comps[4]; void read(athena::io::YAMLDocReader& r) @@ -895,7 +895,7 @@ struct MVEBounce : IModVectorElement struct MVEConstant : IModVectorElement { - Delete _d; + Delete _d3; RealElementFactory comps[3]; void read(athena::io::YAMLDocReader& r) @@ -1026,7 +1026,7 @@ struct VEAngleSphere : IEmitterElement struct EESimpleEmitterTR : EESimpleEmitter { - Delete _d; + Delete _d3; void read(athena::io::YAMLDocReader& r) { @@ -1078,7 +1078,7 @@ struct EESimpleEmitterTR : EESimpleEmitter template struct UVEConstant : IUVElement { - Delete _d; + Delete _d3; IDType tex; void read(athena::io::YAMLDocReader& r) { @@ -1119,7 +1119,7 @@ struct UVEConstant : IUVElement template struct UVEAnimTexture : IUVElement { - Delete _d; + Delete _d3; IDType tex; IntElementFactory tileW; IntElementFactory tileH; diff --git a/DataSpec/DNAMP1/ANCS.hpp b/DataSpec/DNAMP1/ANCS.hpp index 84e4ec917..a14ed29a7 100644 --- a/DataSpec/DNAMP1/ANCS.hpp +++ b/DataSpec/DNAMP1/ANCS.hpp @@ -183,7 +183,7 @@ struct ANCS : BigYAML }; struct MetaAnimPrimitive : IMetaAnim { - Delete expl; + Delete expl2; MetaAnimPrimitive() : IMetaAnim(Type::Primitive, "Primitive") {} diff --git a/DataSpec/DNAMP1/EVNT.hpp b/DataSpec/DNAMP1/EVNT.hpp index 97078e721..8b27ec4f2 100644 --- a/DataSpec/DNAMP1/EVNT.hpp +++ b/DataSpec/DNAMP1/EVNT.hpp @@ -64,7 +64,7 @@ struct EVNT : BigYAML { DECL_YAML Value duration; - DNAFourCC type; + DNAFourCC ptype; UniqueID32 id; String<-1> locator; Value scale; diff --git a/DataSpec/DNAMP1/FRME.hpp b/DataSpec/DNAMP1/FRME.hpp index c71f70400..cf17d697c 100644 --- a/DataSpec/DNAMP1/FRME.hpp +++ b/DataSpec/DNAMP1/FRME.hpp @@ -56,13 +56,13 @@ struct FRME : BigDNA struct BWIGInfo : IWidgetInfo { - Delete _d; + Delete _d2; FourCC fourcc() const { return FOURCC('BWIG'); } }; struct HWIGInfo : IWidgetInfo { - Delete _d; + Delete _d2; FourCC fourcc() const { return FOURCC('HWIG'); } }; diff --git a/DataSpec/DNAMP1/ScriptObjects/CameraBlurKeyframe.hpp b/DataSpec/DNAMP1/ScriptObjects/CameraBlurKeyframe.hpp index a77c07d5c..04989701c 100644 --- a/DataSpec/DNAMP1/ScriptObjects/CameraBlurKeyframe.hpp +++ b/DataSpec/DNAMP1/ScriptObjects/CameraBlurKeyframe.hpp @@ -14,7 +14,7 @@ struct CameraBlurKeyframe : IScriptObject DECL_YAML String<-1> name; Value active; - Value type; + Value btype; Value amount; Value unk; Value timeIn; diff --git a/DataSpec/DNAMP1/ScriptObjects/CameraFilterKeyframe.hpp b/DataSpec/DNAMP1/ScriptObjects/CameraFilterKeyframe.hpp index f49715687..5098b3c9d 100644 --- a/DataSpec/DNAMP1/ScriptObjects/CameraFilterKeyframe.hpp +++ b/DataSpec/DNAMP1/ScriptObjects/CameraFilterKeyframe.hpp @@ -14,7 +14,7 @@ struct CameraFilterKeyframe : IScriptObject DECL_YAML String<-1> name; Value active; - Value type; + Value ftype; Value shape; Value filterIdx; Value unk; diff --git a/DataSpec/DNAMP3/CHAR.hpp b/DataSpec/DNAMP3/CHAR.hpp index 51838b7db..79f940d6a 100644 --- a/DataSpec/DNAMP3/CHAR.hpp +++ b/DataSpec/DNAMP3/CHAR.hpp @@ -114,9 +114,9 @@ struct CHAR : BigYAML Delete expl; UniqueID64 caudId; - Value unk1; - Value unk2; - Value unk3; + Value unk1_; + Value unk2_; + Value unk3_; std::vector unk3Vals; Value extraType; Value extraFloat; diff --git a/DataSpec/SpecBase.cpp b/DataSpec/SpecBase.cpp index 13d66e426..df2e49298 100644 --- a/DataSpec/SpecBase.cpp +++ b/DataSpec/SpecBase.cpp @@ -546,10 +546,9 @@ void SpecBase::doPackage(const hecl::ProjectPath& path, const hecl::Database::Da hecl::ProjectPath outPath(m_project.getProjectWorkingPath(), _S("out/") + components[0] + _S("/") + components[1] + _S(".upak")); outPath.makeDirChain(false); - hecl::SystemString tmpPath = hecl::SystemString(outPath.getAbsolutePath()) + _S("~"); /* Output file */ - athena::io::FileWriter pakOut(tmpPath); + athena::io::FileWriter pakOut(outPath.getAbsolutePath()); std::vector buildList; atUint64 resTableOffset = 0; @@ -656,9 +655,6 @@ void SpecBase::doPackage(const hecl::ProjectPath& path, const hecl::Database::Da /* Write file index */ writePakFileIndex(pakOut, buildList, fileIndex, resTableOffset); pakOut.close(); - - /* Atomic rename */ - hecl::Rename(tmpPath.c_str(), outPath.getAbsolutePath().data()); } hecl::ProjectPath SpecBase::getCookedPath(const hecl::ProjectPath& working, bool pcTarget) const diff --git a/Runtime/CStateManager.cpp b/Runtime/CStateManager.cpp index e49bf5767..d871766d2 100644 --- a/Runtime/CStateManager.cpp +++ b/Runtime/CStateManager.cpp @@ -1036,6 +1036,10 @@ void CStateManager::SendScriptMsg(CEntity* dest, TUniqueId src, EScriptObjectMes { if (dest && !dest->x30_26_scriptingBlocked) { +#ifndef NDEBUG + LogModule.report(logvisor::Info, "Sending '%s' to '%s'", + ScriptObjectMessageToStr(msg).data(), dest->GetName().data()); +#endif dest->AcceptScriptMsg(msg, src, *this); } } @@ -1050,7 +1054,13 @@ void CStateManager::SendScriptMsgAlways(TUniqueId dest, TUniqueId src, EScriptOb { CEntity* dst = ObjectById(dest); if (dst) + { +#ifndef NDEBUG + LogModule.report(logvisor::Info, "Sending '%s' to '%s'", + ScriptObjectMessageToStr(msg).data(), dst->GetName().data()); +#endif dst->AcceptScriptMsg(msg, src, *this); + } } void CStateManager::SendScriptMsg(TUniqueId src, TEditorId dest, EScriptObjectMessage msg, EScriptObjectState state) @@ -1110,6 +1120,10 @@ void CStateManager::FreeScriptObject(TUniqueId id) x874_sortedListManager->Remove(act.GetPtr()); act->SetUseInSortedLists(false); } + +#ifndef NDEBUG + LogModule.report(logvisor::Info, "Removed '%s'", ent->GetName().data()); +#endif } std::pair CStateManager::GetBuildForScript(TEditorId id) const @@ -2083,7 +2097,7 @@ void CStateManager::CrossTouchActors() ent2->Touch(actor, *this); } - visits[ent2->GetUniqueId().Value()] = true; + visits[actor.GetUniqueId().Value()] = true; } } } @@ -2383,14 +2397,14 @@ void CStateManager::BuildNearList(rstl::reserved_vector& listOu void CStateManager::UpdateActorInSortedLists(CActor& act) { - if (!act.GetUseInSortedLists() || !act.xe4_27_) + if (!act.GetUseInSortedLists() || !act.xe4_27_notInSortedLists) return; std::experimental::optional aabb = CalculateObjectBounds(act); bool actorInLists = x874_sortedListManager->ActorInLists(&act); if (actorInLists || aabb) { - act.xe4_27_ = false; + act.xe4_27_notInSortedLists = false; if (actorInLists) { if (!act.GetActive() || !aabb) @@ -2469,6 +2483,10 @@ void CStateManager::AddObject(CEntity& ent) if (area->IsValidated()) SendScriptMsg(&ent, kInvalidUniqueId, EScriptObjectMessage::InitializedInArea); } + +#ifndef NDEBUG + LogModule.report(logvisor::Info, "Added '%s'", ent.GetName().data()); +#endif } void CStateManager::AddObject(CEntity* ent) diff --git a/Runtime/Camera/CCameraManager.cpp b/Runtime/Camera/CCameraManager.cpp index ebb0aa467..568a6370e 100644 --- a/Runtime/Camera/CCameraManager.cpp +++ b/Runtime/Camera/CCameraManager.cpp @@ -746,7 +746,9 @@ bool CCameraManager::HasBallCameraInitialPositionHint(CStateManager& mgr) const void CCameraManager::RemoveCinemaCamera(TUniqueId uid, CStateManager& mgr) { - x4_cineCameras.erase(std::remove(x4_cineCameras.begin(), x4_cineCameras.end(), uid)); + auto search = std::find(x4_cineCameras.begin(), x4_cineCameras.end(), uid); + if (search != x4_cineCameras.end()) + x4_cineCameras.erase(search); } void CCameraManager::DeleteCameraHint(TUniqueId id, CStateManager& mgr) diff --git a/Runtime/Graphics/Shaders/CFluidPlaneShaderGLSL.cpp b/Runtime/Graphics/Shaders/CFluidPlaneShaderGLSL.cpp index 5b2f8ec2b..d35609589 100644 --- a/Runtime/Graphics/Shaders/CFluidPlaneShaderGLSL.cpp +++ b/Runtime/Graphics/Shaders/CFluidPlaneShaderGLSL.cpp @@ -652,7 +652,7 @@ CFluidPlaneShader::BuildBinding(boo::GLDataFactory::Context& ctx, boo::PipelineStage ubufStages[] = { boo::PipelineStage::Vertex, boo::PipelineStage::Vertex, boo::PipelineStage::Fragment }; size_t ubufOffs[] = {0, 0, 768}; - size_t ubufSizes[] = {768, 768, 256}; + size_t ubufSizes[] = {768, 768, sizeof(CModelShaders::LightingUniform)}; size_t texCount = 0; boo::ObjToken texs[7]; if (m_patternTex1) @@ -682,7 +682,7 @@ CFluidPlaneShader::BuildBinding(boo::VulkanDataFactory::Context& ctx, boo::PipelineStage ubufStages[] = { boo::PipelineStage::Vertex, boo::PipelineStage::Vertex, boo::PipelineStage::Fragment }; size_t ubufOffs[] = {0, 0, 768}; - size_t ubufSizes[] = {768, 768, 256}; + size_t ubufSizes[] = {768, 768, sizeof(CModelShaders::LightingUniform)}; size_t texCount = 0; boo::ObjToken texs[7] = {}; if (m_patternTex1) diff --git a/Runtime/Graphics/Shaders/CFluidPlaneShaderHLSL.cpp b/Runtime/Graphics/Shaders/CFluidPlaneShaderHLSL.cpp index c3634148f..3e751976d 100644 --- a/Runtime/Graphics/Shaders/CFluidPlaneShaderHLSL.cpp +++ b/Runtime/Graphics/Shaders/CFluidPlaneShaderHLSL.cpp @@ -566,7 +566,7 @@ CFluidPlaneShader::BuildBinding(boo::ID3DDataFactory::Context& ctx, boo::PipelineStage ubufStages[] = { boo::PipelineStage::Vertex, boo::PipelineStage::Vertex, boo::PipelineStage::Fragment }; size_t ubufOffs[] = {0, 0, 768}; - size_t ubufSizes[] = {768, 768, 256}; + size_t ubufSizes[] = {768, 768, sizeof(CModelShaders::LightingUniform)}; size_t texCount = 0; boo::ObjToken texs[7] = {}; if (m_patternTex1) diff --git a/Runtime/Graphics/Shaders/CFluidPlaneShaderMetal.cpp b/Runtime/Graphics/Shaders/CFluidPlaneShaderMetal.cpp index 7817fcc9b..4ef6be5e4 100644 --- a/Runtime/Graphics/Shaders/CFluidPlaneShaderMetal.cpp +++ b/Runtime/Graphics/Shaders/CFluidPlaneShaderMetal.cpp @@ -595,7 +595,7 @@ boo::ObjToken CFluidPlaneShader::BuildBinding(boo::Meta boo::PipelineStage ubufStages[] = { boo::PipelineStage::Vertex, boo::PipelineStage::Vertex, boo::PipelineStage::Fragment }; size_t ubufOffs[] = {0, 0, 768}; - size_t ubufSizes[] = {768, 768, 256}; + size_t ubufSizes[] = {768, 768, sizeof(CModelShaders::LightingUniform)}; size_t texCount = 0; boo::ObjToken texs[7]; if (m_patternTex1) diff --git a/Runtime/MkCastTo.py b/Runtime/MkCastTo.py index 655a19e8e..8ae8bea57 100644 --- a/Runtime/MkCastTo.py +++ b/Runtime/MkCastTo.py @@ -32,7 +32,7 @@ CENTITY_TYPES = ( ('CAi', 'World/CAi.hpp'), ('CPatterned', 'World/CPatterned.hpp'), ('CPhysicsActor', 'World/CPhysicsActor.hpp'), - ('CPlayer', 'World/CPhysicsActor.hpp'), + ('CPlayer', 'World/CPlayer.hpp'), ('CRepulsor', 'World/CRepulsor.hpp'), ('CScriptActor', 'World/CScriptActor.hpp'), ('CScriptActorKeyframe', 'World/CScriptActorKeyframe.hpp'), @@ -188,6 +188,8 @@ for tp in CENTITY_TYPES: sourcef.write('''template void TCastToPtr::Visit(%s* p) { + static_assert(sizeof(T) > 0, "TCastToPtr can not cast to incomplete type"); + static_assert(!std::is_void::value, "TCastToPtr can not cast to incomplete type"); ptr = reinterpret_cast(std::is_convertible<%s*, T*>::value ? p : nullptr); } diff --git a/Runtime/World/CActor.cpp b/Runtime/World/CActor.cpp index 0f629c4e4..269ac2885 100644 --- a/Runtime/World/CActor.cpp +++ b/Runtime/World/CActor.cpp @@ -22,9 +22,10 @@ static CMaterialList MakeActorMaterialList(const CMaterialList& materialList, co return ret; } -CActor::CActor(TUniqueId uid, bool active, std::string_view name, const CEntityInfo& info, const zeus::CTransform&, +CActor::CActor(TUniqueId uid, bool active, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CMaterialList& list, const CActorParameters& params, TUniqueId otherUid) : CEntity(uid, info, active, name) +, x34_transform(xf) , x68_material(MakeActorMaterialList(list, params)) , x70_materialFilter(CMaterialFilter::MakeIncludeExclude({EMaterialTypes::Solid}, {0ull})) , xc6_nextDrawNode(otherUid) @@ -34,7 +35,7 @@ CActor::CActor(TUniqueId uid, bool active, std::string_view name, const CEntityI x64_modelData = std::make_unique(std::move(mData)); xd0_ = params.x64_; xd8_nonLoopingSfxHandles.resize(2); - xe4_27_ = true; + xe4_27_notInSortedLists = true; xe4_28_ = true; xe4_29_actorLightsDirty = true; xe4_31_lightsDirty = true; @@ -315,7 +316,7 @@ void CActor::SetSoundEventPitchBend(s32 val) void CActor::SetRotation(const zeus::CQuaternion &q) { x34_transform = q.toTransform(x34_transform.origin); - xe4_27_ = true; + xe4_27_notInSortedLists = true; xe4_28_ = true; xe4_29_actorLightsDirty = true; } @@ -323,7 +324,7 @@ void CActor::SetRotation(const zeus::CQuaternion &q) void CActor::SetTranslation(const zeus::CVector3f& tr) { x34_transform.origin = tr; - xe4_27_ = true; + xe4_27_notInSortedLists = true; xe4_28_ = true; xe4_29_actorLightsDirty = true; } @@ -331,7 +332,7 @@ void CActor::SetTranslation(const zeus::CVector3f& tr) void CActor::SetTransform(const zeus::CTransform& tr) { x34_transform = tr; - xe4_27_ = true; + xe4_27_notInSortedLists = true; xe4_28_ = true; xe4_29_actorLightsDirty = true; } diff --git a/Runtime/World/CActor.hpp b/Runtime/World/CActor.hpp index 88776e4e1..e7c257935 100644 --- a/Runtime/World/CActor.hpp +++ b/Runtime/World/CActor.hpp @@ -53,7 +53,7 @@ protected: struct { u8 xe4_24_nextNonLoopingSfxHandle : 3; - bool xe4_27_ : 1; + bool xe4_27_notInSortedLists : 1; bool xe4_28_ : 1; bool xe4_29_actorLightsDirty : 1; bool xe4_30_outOfFrustum : 1; @@ -103,7 +103,7 @@ public: virtual void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&); virtual void SetActive(bool active) { - xe4_27_ = true; + xe4_27_notInSortedLists = true; xe4_28_ = true; xe4_29_actorLightsDirty = true; xe7_29_actorActive = active; diff --git a/Runtime/World/CEntity.hpp b/Runtime/World/CEntity.hpp index 7c16b5a71..e5eea0f37 100644 --- a/Runtime/World/CEntity.hpp +++ b/Runtime/World/CEntity.hpp @@ -68,6 +68,8 @@ public: const std::vector& GetConnectionList() const { return x20_conns; } std::vector& ConnectionList() { return x20_conns; } + + std::string_view GetName() const { return x10_name; } }; } diff --git a/Runtime/World/CFishCloud.cpp b/Runtime/World/CFishCloud.cpp index e69de29bb..ea9322277 100644 --- a/Runtime/World/CFishCloud.cpp +++ b/Runtime/World/CFishCloud.cpp @@ -0,0 +1,20 @@ +#include "CFishCloud.hpp" +#include "CActorParameters.hpp" + +namespace urde +{ + +CFishCloud::CFishCloud(TUniqueId uid, bool active, std::string_view name, const CEntityInfo& info, + const zeus::CVector3f& scale, const zeus::CTransform& xf, CModelData&& mData, + const CAnimRes& aRes, u32 w1, float f1, float f2, float f3, float f4, float f5, float f6, + float f7, float f8, float f9, float f10, float f11, float f12, float f13, u32 w2, + const zeus::CColor& color, bool b1, float f14, CAssetId part1, u32 w3, CAssetId part2, u32 w4, + CAssetId part3, u32 w5, CAssetId part4, u32 w6, u32 w7, bool b2, bool b3) +: CActor(uid, active, name, info, xf, std::move(mData), {EMaterialTypes::Unknown}, + CActorParameters::None(), kInvalidUniqueId) +{ + +} + +} + diff --git a/Runtime/World/CFishCloud.hpp b/Runtime/World/CFishCloud.hpp index e69de29bb..a96079e24 100644 --- a/Runtime/World/CFishCloud.hpp +++ b/Runtime/World/CFishCloud.hpp @@ -0,0 +1,22 @@ +#ifndef __URDE_CFISHCLOUD_HPP__ +#define __URDE_CFISHCLOUD_HPP__ + +#include "CActor.hpp" + +namespace urde +{ + +class CFishCloud : public CActor +{ +public: + CFishCloud(TUniqueId uid, bool active, std::string_view name, const CEntityInfo& info, + const zeus::CVector3f& scale, const zeus::CTransform& xf, CModelData&& mData, + const CAnimRes& aRes, u32 w1, float f1, float f2, float f3, float f4, float f5, float f6, + float f7, float f8, float f9, float f10, float f11, float f12, float f13, u32 w2, + const zeus::CColor& color, bool b1, float f14, CAssetId part1, u32 w3, CAssetId part2, u32 w4, + CAssetId part3, u32 w5, CAssetId part4, u32 w6, u32 w7, bool b2, bool b3); +}; + +} + +#endif // __URDE_CFISHCLOUD_HPP__ diff --git a/Runtime/World/CPhysicsActor.cpp b/Runtime/World/CPhysicsActor.cpp index f4c5cc04a..6431d9560 100644 --- a/Runtime/World/CPhysicsActor.cpp +++ b/Runtime/World/CPhysicsActor.cpp @@ -11,6 +11,7 @@ CPhysicsActor::CPhysicsActor(TUniqueId uid, bool active, std::string_view name, , xe8_mass(moverData.x30_mass) , xec_massRecip(moverData.x30_mass <= 0.f ? 1.f : 1.f / moverData.x30_mass) , x150_momentum(moverData.x18_momentum) +, x1a4_baseBoundingBox(box) , x1c0_collisionPrimitive(box, matList) , x1f4_lastNonCollidingState(xf.origin, xf.buildMatrix3f()) , x23c_stepUpHeight(stepUp) diff --git a/Runtime/World/CScriptDebugCameraWaypoint.cpp b/Runtime/World/CScriptDebugCameraWaypoint.cpp index e69de29bb..af5375de9 100644 --- a/Runtime/World/CScriptDebugCameraWaypoint.cpp +++ b/Runtime/World/CScriptDebugCameraWaypoint.cpp @@ -0,0 +1,14 @@ +#include "CScriptDebugCameraWaypoint.hpp" +#include "CActorParameters.hpp" + +namespace urde +{ + +CScriptDebugCameraWaypoint::CScriptDebugCameraWaypoint(TUniqueId uid, std::string_view name, const CEntityInfo& info, + const zeus::CTransform& xf, u32 w1) +: CActor(uid, true, name, info, xf, CModelData::CModelDataNull(), {EMaterialTypes::Unknown}, + CActorParameters::None(), kInvalidUniqueId), xe8_w1(w1) +{ +} + +} diff --git a/Runtime/World/CScriptDebugCameraWaypoint.hpp b/Runtime/World/CScriptDebugCameraWaypoint.hpp index e69de29bb..eab2e237e 100644 --- a/Runtime/World/CScriptDebugCameraWaypoint.hpp +++ b/Runtime/World/CScriptDebugCameraWaypoint.hpp @@ -0,0 +1,19 @@ +#ifndef __URDE_CSCRIPTDEBUGCAMERAWAYPOINT_HPP__ +#define __URDE_CSCRIPTDEBUGCAMERAWAYPOINT_HPP__ + +#include "CActor.hpp" + +namespace urde +{ + +class CScriptDebugCameraWaypoint : public CActor +{ + u32 xe8_w1; +public: + CScriptDebugCameraWaypoint(TUniqueId uid, std::string_view name, const CEntityInfo& info, + const zeus::CTransform& xf, u32 w1); +}; + +} + +#endif // __URDE_CSCRIPTDEBUGCAMERAWAYPOINT_HPP__ diff --git a/Runtime/World/CScriptGunTurret.cpp b/Runtime/World/CScriptGunTurret.cpp index e69de29bb..838a3c4cb 100644 --- a/Runtime/World/CScriptGunTurret.cpp +++ b/Runtime/World/CScriptGunTurret.cpp @@ -0,0 +1,21 @@ +#include "CScriptGunTurret.hpp" + +namespace urde +{ + +static const CMaterialList skGunMaterialList = { EMaterialTypes::Solid, EMaterialTypes::Character, + EMaterialTypes::Orbit, EMaterialTypes::Target }; +static const CMaterialList skTurretMaterialList = { EMaterialTypes::Character }; + +CScriptGunTurret::CScriptGunTurret(TUniqueId uid, std::string_view name, ETurretComponent comp, const CEntityInfo& info, + const zeus::CTransform& xf, CModelData&& mData, const zeus::CAABox& aabb, + const CHealthInfo& hInfo, const CDamageVulnerability& dVuln, + const CActorParameters& aParms, const CScriptGunTurretData& turretData) +: CPhysicsActor(uid, true, name, info, xf, std::move(mData), + comp == ETurretComponent::Turret ? skTurretMaterialList : skGunMaterialList, + aabb, SMoverData(1000.f), aParms, 0.3f, 0.1f) +{ + +} + +} diff --git a/Runtime/World/CScriptGunTurret.hpp b/Runtime/World/CScriptGunTurret.hpp index e69de29bb..072e3c8cb 100644 --- a/Runtime/World/CScriptGunTurret.hpp +++ b/Runtime/World/CScriptGunTurret.hpp @@ -0,0 +1,32 @@ +#ifndef __URDE_CSCRIPTGUNTURRET_HPP__ +#define __URDE_CSCRIPTGUNTURRET_HPP__ + +#include "CPhysicsActor.hpp" + +namespace urde +{ + +class CScriptGunTurretData +{ + +}; + +class CScriptGunTurret : public CPhysicsActor +{ +public: + enum class ETurretComponent + { + Turret, + Gun + }; +private: +public: + CScriptGunTurret(TUniqueId uid, std::string_view name, ETurretComponent comp, const CEntityInfo& info, + const zeus::CTransform& xf, CModelData&& mData, const zeus::CAABox& aabb, + const CHealthInfo& hInfo, const CDamageVulnerability& dVuln, + const CActorParameters& aParms, const CScriptGunTurretData& turretData); +}; + +} + +#endif // __URDE_CSCRIPTGUNTURRET_HPP__ diff --git a/Runtime/World/CScriptRelay.cpp b/Runtime/World/CScriptRelay.cpp index d15f6374c..7d65bd845 100644 --- a/Runtime/World/CScriptRelay.cpp +++ b/Runtime/World/CScriptRelay.cpp @@ -24,39 +24,39 @@ void CScriptRelay::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CS } else if (msg == EScriptObjectMessage::SetToZero) { - if (x30_24_active) + if (!x30_24_active) return; - x38_refCount++; + x38_sendCount++; TUniqueId tmp = stateMgr.GetLastRelayId(); - while (tmp != kInvalidUniqueId) + while (tmp != GetUniqueId() && tmp != kInvalidUniqueId) { - const CEntity* obj = stateMgr.GetObjectById(tmp); + const CScriptRelay* obj = static_cast(stateMgr.GetObjectById(tmp)); if (!obj) { - tmp = x34_nextRelay; - continue; + tmp = kInvalidUniqueId; + break; } - if (obj->GetUniqueId() == tmp) - break; + tmp = obj->x34_nextRelay; } if (tmp == kInvalidUniqueId) - return; - x34_nextRelay = stateMgr.GetLastRelayId(); - stateMgr.SetLastRelayId(GetUniqueId()); + { + x34_nextRelay = stateMgr.GetLastRelayId(); + stateMgr.SetLastRelayId(GetUniqueId()); + } } } void CScriptRelay::Think(float, CStateManager& stateMgr) { - if (x38_refCount == 0) + if (x38_sendCount == 0) return; - while (x38_refCount != 0) + while (x38_sendCount != 0) { - x38_refCount--; + x38_sendCount--; SendScriptMsgs(EScriptObjectState::Zero, stateMgr, EScriptObjectMessage::None); } UpdateObjectRef(stateMgr); @@ -65,14 +65,14 @@ void CScriptRelay::Think(float, CStateManager& stateMgr) void CScriptRelay::UpdateObjectRef(CStateManager& stateMgr) { TUniqueId* tmp = stateMgr.GetLastRelayIdPtr(); - while (*tmp != kInvalidUniqueId && tmp != nullptr) + while (tmp != nullptr && *tmp != kInvalidUniqueId) { if (*tmp == GetUniqueId()) { *tmp = x34_nextRelay; return; } - CScriptRelay* obj = dynamic_cast(stateMgr.ObjectById(*tmp)); + CScriptRelay* obj = static_cast(stateMgr.ObjectById(*tmp)); if (obj == nullptr) return; tmp = &obj->x34_nextRelay; diff --git a/Runtime/World/CScriptRelay.hpp b/Runtime/World/CScriptRelay.hpp index 57063f2c0..8884e093b 100644 --- a/Runtime/World/CScriptRelay.hpp +++ b/Runtime/World/CScriptRelay.hpp @@ -8,7 +8,7 @@ namespace urde class CScriptRelay : public CEntity { TUniqueId x34_nextRelay = kInvalidUniqueId; - u32 x38_refCount = 0; + u32 x38_sendCount = 0; public: CScriptRelay(TUniqueId, std::string_view, const CEntityInfo&, bool); diff --git a/Runtime/World/CScriptTrigger.cpp b/Runtime/World/CScriptTrigger.cpp index 6c3fdee59..7f2729203 100644 --- a/Runtime/World/CScriptTrigger.cpp +++ b/Runtime/World/CScriptTrigger.cpp @@ -11,8 +11,8 @@ namespace urde CScriptTrigger::CScriptTrigger(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CVector3f& pos, const zeus::CAABox& bounds, const CDamageInfo& dInfo, - const zeus::CVector3f& forceField, ETriggerFlags triggerFlags, bool active, bool deactivateOnEntered, - bool deactivateOnExited) + const zeus::CVector3f& forceField, ETriggerFlags triggerFlags, bool active, + bool deactivateOnEntered, bool deactivateOnExited) : CActor(uid, active, name, info, zeus::CTransform::Translate(pos), CModelData::CModelDataNull(), CMaterialList(EMaterialTypes::Trigger), CActorParameters::None(), kInvalidUniqueId) , x100_damageInfo(dInfo) @@ -44,9 +44,9 @@ void CScriptTrigger::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CS x148_25_camSubmerged = false; } - if (x148_28_playerDamage) + if (x148_28_playerTriggerProc) { - x148_28_playerDamage = false; + x148_28_playerTriggerProc = false; if (x148_29_didPhazonDamage) { mgr.Player()->DecrementPhazon(); @@ -97,9 +97,9 @@ void CScriptTrigger::UpdateInhabitants(float dt, CStateManager& mgr) { xe8_inhabitants.erase(it); sendExited = true; - if (x148_28_playerDamage) + if (x148_28_playerTriggerProc) { - x148_28_playerDamage = false; + x148_28_playerTriggerProc = false; if (x148_29_didPhazonDamage) { mgr.GetPlayer().DecrementPhazon(); @@ -150,9 +150,9 @@ void CScriptTrigger::UpdateInhabitants(float dt, CStateManager& mgr) { xe8_inhabitants.erase(it); sendExited = true; - if (mgr.GetPlayer().GetUniqueId() == it->GetObjectId() && x148_28_playerDamage) + if (mgr.GetPlayer().GetUniqueId() == it->GetObjectId() && x148_28_playerTriggerProc) { - x148_28_playerDamage = false; + x148_28_playerTriggerProc = false; if (x148_29_didPhazonDamage) { mgr.Player()->DecrementPhazon(); @@ -169,9 +169,9 @@ void CScriptTrigger::UpdateInhabitants(float dt, CStateManager& mgr) else { xe8_inhabitants.erase(it); - if (mgr.GetPlayer().GetUniqueId() == it->GetObjectId() && x148_28_playerDamage) + if (mgr.GetPlayer().GetUniqueId() == it->GetObjectId() && x148_28_playerTriggerProc) { - x148_28_playerDamage = false; + x148_28_playerTriggerProc = false; if (x148_29_didPhazonDamage) { mgr.Player()->DecrementPhazon(); @@ -259,7 +259,6 @@ void CScriptTrigger::Touch(CActor& act, CStateManager& mgr) TCastToPtr pl(act); if (pl) { - if (x128_forceMagnitude > 0.f && (x12c_flags & ETriggerFlags::DetectPlayer) != ETriggerFlags::None && mgr.GetLastTriggerId() == kInvalidUniqueId) mgr.SetLastTriggerId(x8_uid); @@ -297,9 +296,9 @@ void CScriptTrigger::Touch(CActor& act, CStateManager& mgr) if (pl) { - if (!x148_28_playerDamage) + if (!x148_28_playerTriggerProc) { - x148_28_playerDamage = true; + x148_28_playerTriggerProc = true; if (x148_29_didPhazonDamage) { mgr.Player()->DecrementPhazon(); diff --git a/Runtime/World/CScriptTrigger.hpp b/Runtime/World/CScriptTrigger.hpp index 16bb8ca73..03d672fd2 100644 --- a/Runtime/World/CScriptTrigger.hpp +++ b/Runtime/World/CScriptTrigger.hpp @@ -61,7 +61,7 @@ protected: bool x148_25_camSubmerged : 1; bool x148_26_deactivateOnEntered : 1; bool x148_27_deactivateOnExited : 1; - bool x148_28_playerDamage : 1; + bool x148_28_playerTriggerProc : 1; bool x148_29_didPhazonDamage : 1; }; u8 dummy = 0; diff --git a/Runtime/World/FishCloud.cpp b/Runtime/World/FishCloud.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/Runtime/World/FishCloud.hpp b/Runtime/World/FishCloud.hpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/Runtime/World/ScriptLoader.cpp b/Runtime/World/ScriptLoader.cpp index 3f6738355..41be8258a 100644 --- a/Runtime/World/ScriptLoader.cpp +++ b/Runtime/World/ScriptLoader.cpp @@ -1033,7 +1033,7 @@ CEntity* ScriptLoader::LoadCameraFilterKeyframe(CStateManager& mgr, CInputStream return nullptr; std::string name = mgr.HashInstanceName(in); bool active = in.readBool(); - EFilterType type = EFilterType(in.readUint32Big()); + EFilterType ftype = EFilterType(in.readUint32Big()); EFilterShape shape = EFilterShape(in.readUint32Big()); u32 filterIdx = in.readUint32Big(); u32 unk = in.readUint32Big(); @@ -1043,7 +1043,7 @@ CEntity* ScriptLoader::LoadCameraFilterKeyframe(CStateManager& mgr, CInputStream float timeOut = in.readFloatBig(); CAssetId txtr = in.readUint32Big(); - return new CScriptCameraFilterKeyframe(mgr.AllocateUniqueId(), name, info, type, shape, filterIdx, unk, color, + return new CScriptCameraFilterKeyframe(mgr.AllocateUniqueId(), name, info, ftype, shape, filterIdx, unk, color, timeIn, timeOut, txtr, active); } diff --git a/Runtime/World/ScriptObjectSupport.cpp b/Runtime/World/ScriptObjectSupport.cpp index e69de29bb..f43afead8 100644 --- a/Runtime/World/ScriptObjectSupport.cpp +++ b/Runtime/World/ScriptObjectSupport.cpp @@ -0,0 +1,243 @@ +#include "ScriptObjectSupport.hpp" + +using namespace std::literals; + +namespace urde +{ + +#ifndef NDEBUG +std::string_view ScriptObjectTypeToStr(EScriptObjectType type) +{ + switch (type) + { + case EScriptObjectType::Actor: return "Actor"sv; + case EScriptObjectType::Waypoint: return "Waypoint"sv; + case EScriptObjectType::Door: return "Door"sv; + case EScriptObjectType::Trigger: return "Trigger"sv; + case EScriptObjectType::Timer: return "Timer"sv; + case EScriptObjectType::Counter: return "Counter"sv; + case EScriptObjectType::Effect: return "Effect"sv; + case EScriptObjectType::Platform: return "Platform"sv; + case EScriptObjectType::Sound: return "Sound"sv; + case EScriptObjectType::Generator: return "Generator"sv; + case EScriptObjectType::Dock: return "Dock"sv; + case EScriptObjectType::Camera: return "Camera"sv; + case EScriptObjectType::CameraWaypoint: return "CameraWaypoint"sv; + case EScriptObjectType::NewIntroBoss: return "NewIntroBoss"sv; + case EScriptObjectType::SpawnPoint: return "SpawnPoint"sv; + case EScriptObjectType::CameraHint: return "CameraHint"sv; + case EScriptObjectType::Pickup: return "Pickup"sv; + case EScriptObjectType::MemoryRelay: return "MemoryRelay"sv; + case EScriptObjectType::RandomRelay: return "RandomRelay"sv; + case EScriptObjectType::Relay: return "Relay"sv; + case EScriptObjectType::Beetle: return "Beetle"sv; + case EScriptObjectType::HUDMemo: return "HUDMemo"sv; + case EScriptObjectType::CameraFilterKeyframe: return "CameraFilterKeyframe"sv; + case EScriptObjectType::CameraBlurKeyframe: return "CameraBlurKeyframe"sv; + case EScriptObjectType::DamageableTrigger: return "DamageableTrigger"sv; + case EScriptObjectType::Debris: return "Debris"sv; + case EScriptObjectType::CameraShaker: return "CameraShaker"sv; + case EScriptObjectType::ActorKeyframe: return "ActorKeyframe"sv; + case EScriptObjectType::Water: return "Water"sv; + case EScriptObjectType::Warwasp: return "Warwasp"sv; + case EScriptObjectType::SpacePirate: return "SpacePirate"sv; + case EScriptObjectType::FlyingPirate: return "FlyingPirate"sv; + case EScriptObjectType::ElitePirate: return "ElitePirate"sv; + case EScriptObjectType::MetroidBeta: return "MetroidBeta"sv; + case EScriptObjectType::ChozoGhost: return "ChozoGhost"sv; + case EScriptObjectType::CoverPoint: return "CoverPoint"sv; + case EScriptObjectType::SpiderBallWaypoint: return "SpiderBallWaypoint"sv; + case EScriptObjectType::BloodFlower: return "BloodFlower"sv; + case EScriptObjectType::FlickerBat: return "FlickerBat"sv; + case EScriptObjectType::PathCamera: return "PathCamera"sv; + case EScriptObjectType::GrapplePoint: return "GrapplePoint"sv; + case EScriptObjectType::PuddleSpore: return "PuddleSpore"sv; + case EScriptObjectType::DebugCameraWaypoint: return "DebugCameraWaypoint"sv; + case EScriptObjectType::SpiderBallAttractionSurface: return "SpiderBallAttractionSurface"sv; + case EScriptObjectType::PuddleToadGamma: return "PuddleToadGamma"sv; + case EScriptObjectType::DistanceFog: return "DistanceFog"sv; + case EScriptObjectType::FireFlea: return "FireFlea"sv; + case EScriptObjectType::MetareeAlpha: return "MetareeAlpha"sv; + case EScriptObjectType::DockAreaChange: return "DockAreaChange"sv; + case EScriptObjectType::ActorRotate: return "ActorRotate"sv; + case EScriptObjectType::SpecialFunction: return "SpecialFunction"sv; + case EScriptObjectType::SpankWeed: return "SpankWeed"sv; + case EScriptObjectType::Parasite: return "Parasite"sv; + case EScriptObjectType::PlayerHint: return "PlayerHint"sv; + case EScriptObjectType::Ripper: return "Ripper"sv; + case EScriptObjectType::PickupGenerator: return "PickupGenerator"sv; + case EScriptObjectType::AIKeyframe: return "AIKeyframe"sv; + case EScriptObjectType::PointOfInterest: return "PointOfInterest"sv; + case EScriptObjectType::Drone: return "Drone"sv; + case EScriptObjectType::MetroidAlpha: return "MetroidAlpha"sv; + case EScriptObjectType::DebrisExtended: return "DebrisExtended"sv; + case EScriptObjectType::Steam: return "Steam"sv; + case EScriptObjectType::Ripple: return "Ripple"sv; + case EScriptObjectType::BallTrigger: return "BallTrigger"sv; + case EScriptObjectType::TargetingPoint: return "TargetingPoint"sv; + case EScriptObjectType::EMPulse: return "EMPulse"sv; + case EScriptObjectType::IceSheegoth: return "IceSheegoth"sv; + case EScriptObjectType::PlayerActor: return "PlayerActor"sv; + case EScriptObjectType::Flaahgra: return "Flaahgra"sv; + case EScriptObjectType::AreaAttributes: return "AreaAttributes"sv; + case EScriptObjectType::FishCloud: return "FishCloud"sv; + case EScriptObjectType::FishCloudModifier: return "FishCloudModifier"sv; + case EScriptObjectType::VisorFlare: return "VisorFlare"sv; + case EScriptObjectType::WorldTeleporter: return "WorldTeleporter"sv; + case EScriptObjectType::VisorGoo: return "VisorGoo"sv; + case EScriptObjectType::JellyZap: return "JellyZap"sv; + case EScriptObjectType::ControllerAction: return "ControllerAction"sv; + case EScriptObjectType::Switch: return "Switch"sv; + case EScriptObjectType::PlayerStateChange: return "PlayerStateChange"sv; + case EScriptObjectType::Thardus: return "Thardus"sv; + case EScriptObjectType::WallCrawlerSwarm: return "WallCrawlerSwarm"sv; + case EScriptObjectType::AIJumpPoint: return "AIJumpPoint"sv; + case EScriptObjectType::FlaahgraTentacle: return "FlaahgraTentacle"sv; + case EScriptObjectType::RoomAcoustics: return "RoomAcoustics"sv; + case EScriptObjectType::ColorModulate: return "ColorModulate"sv; + case EScriptObjectType::ThardusRockProjectile: return "ThardusRockProjectile"sv; + case EScriptObjectType::Midi: return "Midi"sv; + case EScriptObjectType::StreamedAudio: return "StreamedAudio"sv; + case EScriptObjectType::WorldTeleporterToo: return "WorldTeleporterToo"sv; + case EScriptObjectType::Repulsor: return "Repulsor"sv; + case EScriptObjectType::GunTurret: return "GunTurret"sv; + case EScriptObjectType::FogVolume: return "FogVolume"sv; + case EScriptObjectType::Babygoth: return "Babygoth"sv; + case EScriptObjectType::Eyeball: return "Eyeball"sv; + case EScriptObjectType::RadialDamage: return "RadialDamage"sv; + case EScriptObjectType::CameraPitchVolume: return "CameraPitchVolume"sv; + case EScriptObjectType::EnvFxDensityController: return "EnvFxDensityController"sv; + case EScriptObjectType::Magdolite: return "Magdolite"sv; + case EScriptObjectType::TeamAIMgr: return "TeamAIMgr"sv; + case EScriptObjectType::SnakeWeedSwarm: return "SnakeWeedSwarm"sv; + case EScriptObjectType::ActorContraption: return "ActorContraption"sv; + case EScriptObjectType::Oculus: return "Oculus"sv; + case EScriptObjectType::Geemer: return "Geemer"sv; + case EScriptObjectType::SpindleCamera: return "SpindleCamera"sv; + case EScriptObjectType::AtomicAlpha: return "AtomicAlpha"sv; + case EScriptObjectType::CameraHintTrigger: return "CameraHintTrigger"sv; + case EScriptObjectType::RumbleEffect: return "RumbleEffect"sv; + case EScriptObjectType::AmbientAI: return "AmbientAI"sv; + case EScriptObjectType::AtomicBeta: return "AtomicBeta"sv; + case EScriptObjectType::IceZoomer: return "IceZoomer"sv; + case EScriptObjectType::Puffer: return "Puffer"sv; + case EScriptObjectType::Tryclops: return "Tryclops"sv; + case EScriptObjectType::Ridley: return "Ridley"sv; + case EScriptObjectType::Seedling: return "Seedling"sv; + case EScriptObjectType::ThermalHeatFader: return "ThermalHeatFader"sv; + case EScriptObjectType::Burrower: return "Burrower"sv; + case EScriptObjectType::ScriptBeam: return "ScriptBeam"sv; + case EScriptObjectType::WorldLightFader: return "WorldLightFader"sv; + case EScriptObjectType::MetroidPrimeStage2: return "MetroidPrimeStage2"sv; + case EScriptObjectType::MetroidPrimeStage1: return "MetroidPrimeStage1"sv; + case EScriptObjectType::MazeNode: return "MazeNode"sv; + case EScriptObjectType::OmegaPirate: return "OmegaPirate"sv; + case EScriptObjectType::PhazonPool: return "PhazonPool"sv; + case EScriptObjectType::PhazonHealingNodule: return "PhazonHealingNodule"sv; + case EScriptObjectType::NewCameraShaker: return "NewCameraShaker"sv; + case EScriptObjectType::ShadowProjector: return "ShadowProjector"sv; + case EScriptObjectType::EnergyBall: return "EnergyBall"sv; + default: return "..."sv; + } +} + +std::string_view ScriptObjectStateToStr(EScriptObjectState state) +{ + switch (state) + { + case EScriptObjectState::Active: return "Active"sv; + case EScriptObjectState::Arrived: return "Arrived"sv; + case EScriptObjectState::Closed: return "Closed"sv; + case EScriptObjectState::Entered: return "Entered"sv; + case EScriptObjectState::Exited: return "Exited"sv; + case EScriptObjectState::Inactive: return "Inactive"sv; + case EScriptObjectState::Inside: return "Inside"sv; + case EScriptObjectState::MaxReached: return "MaxReached"sv; + case EScriptObjectState::Open: return "Open"sv; + case EScriptObjectState::Zero: return "Zero"sv; + case EScriptObjectState::Attack: return "Attack"sv; + case EScriptObjectState::UNKS1: return "UNKS1"sv; + case EScriptObjectState::Retreat: return "Retreat"sv; + case EScriptObjectState::Patrol: return "Patrol"sv; + case EScriptObjectState::Dead: return "Dead"sv; + case EScriptObjectState::CameraPath: return "CameraPath"sv; + case EScriptObjectState::CameraTarget: return "CameraTarget"sv; + case EScriptObjectState::UNKS2: return "UNKS2"sv; + case EScriptObjectState::Play: return "Play"sv; + case EScriptObjectState::UNKS3: return "UNKS3"sv; + case EScriptObjectState::DeathRattle: return "DeathRattle"sv; + case EScriptObjectState::UNKS4: return "UNKS4"sv; + case EScriptObjectState::Damage: return "Damage"sv; + case EScriptObjectState::InvulnDamage: return "InvulnDamage"sv; + case EScriptObjectState::UNKS5: return "UNKS5"sv; + case EScriptObjectState::Modify: return "Modify"sv; + case EScriptObjectState::ScanStart: return "ScanStart"sv; + case EScriptObjectState::ScanProcessing: return "ScanProcessing"sv; + case EScriptObjectState::ScanDone: return "ScanDone"sv; + case EScriptObjectState::UnFrozen: return "UnFrozen"sv; + case EScriptObjectState::Default: return "Default"sv; + case EScriptObjectState::ReflectedDamage: return "ReflectedDamage"sv; + case EScriptObjectState::InheritBounds: return "InheritBounds"sv; + default: return "..."sv; + } +} + +std::string_view ScriptObjectMessageToStr(EScriptObjectMessage message) +{ + switch (message) + { + case EScriptObjectMessage::UNKM0: return "UNKM0"sv; + case EScriptObjectMessage::Activate: return "Activate"sv; + case EScriptObjectMessage::Arrived: return "Arrived"sv; + case EScriptObjectMessage::Close: return "Close"sv; + case EScriptObjectMessage::Deactivate: return "Deactivate"sv; + case EScriptObjectMessage::Decrement: return "Decrement"sv; + case EScriptObjectMessage::Follow: return "Follow"sv; + case EScriptObjectMessage::Increment: return "Increment"sv; + case EScriptObjectMessage::Next: return "Next"sv; + case EScriptObjectMessage::Open: return "Open"sv; + case EScriptObjectMessage::Reset: return "Reset"sv; + case EScriptObjectMessage::ResetAndStart: return "ResetAndStart"sv; + case EScriptObjectMessage::SetToMax: return "SetToMax"sv; + case EScriptObjectMessage::SetToZero: return "SetToZero"sv; + case EScriptObjectMessage::Start: return "Start"sv; + case EScriptObjectMessage::Stop: return "Stop"sv; + case EScriptObjectMessage::StopAndReset: return "StopAndReset"sv; + case EScriptObjectMessage::ToggleActive: return "ToggleActive"sv; + case EScriptObjectMessage::UNKM18: return "UNKM18"sv; + case EScriptObjectMessage::Action: return "Action"sv; + case EScriptObjectMessage::Play: return "Play"sv; + case EScriptObjectMessage::Alert: return "Alert"sv; + case EScriptObjectMessage::InternalMessage00: return "InternalMessage00"sv; + case EScriptObjectMessage::OnFloor: return "OnFloor"sv; + case EScriptObjectMessage::InternalMessage02: return "InternalMessage02"sv; + case EScriptObjectMessage::InternalMessage03: return "InternalMessage03"sv; + case EScriptObjectMessage::Falling: return "Falling"sv; + case EScriptObjectMessage::OnIceSurface: return "OnIceSurface"sv; + case EScriptObjectMessage::OnMudSlowSurface: return "OnMudSlowSurface"sv; + case EScriptObjectMessage::OnNormalSurface: return "OnNormalSurface"sv; + case EScriptObjectMessage::InternalMessage08: return "InternalMessage08"sv; + case EScriptObjectMessage::AddPlatformRider: return "AddPlatformRider"sv; + case EScriptObjectMessage::LandOnNotFloor: return "LandOnNotFloor"sv; + case EScriptObjectMessage::Registered: return "Registered"sv; + case EScriptObjectMessage::Deleted: return "Deleted"sv; + case EScriptObjectMessage::InitializedInArea: return "InitializedInArea"sv; + case EScriptObjectMessage::InternalMessage14: return "InternalMessage14"sv; + case EScriptObjectMessage::AddSplashInhabitant: return "AddSplashInhabitant"sv; + case EScriptObjectMessage::UpdateSplashInhabitant: return "UpdateSplashInhabitant"sv; + case EScriptObjectMessage::RemoveSplashInhabitant: return "RemoveSplashInhabitant"sv; + case EScriptObjectMessage::InternalMessage18: return "InternalMessage18"sv; + case EScriptObjectMessage::Damage: return "Damage"sv; + case EScriptObjectMessage::InvulnDamage: return "InvulnDamage"sv; + case EScriptObjectMessage::ProjectileCollide: return "ProjectileCollide"sv; + case EScriptObjectMessage::InSnakeWeed: return "InSnakeWeed"sv; + case EScriptObjectMessage::AddPhazonPoolInhabitant: return "AddPhazonPoolInhabitant"sv; + case EScriptObjectMessage::UpdatePhazonPoolInhabitant: return "UpdatePhazonPoolInhabitant"sv; + case EScriptObjectMessage::RemovePhazonPoolInhabitant: return "RemovePhazonPoolInhabitant"sv; + case EScriptObjectMessage::InternalMessage26: return "InternalMessage26"sv; + default: return "..."sv; + } +} +#endif + +} diff --git a/Runtime/World/ScriptObjectSupport.hpp b/Runtime/World/ScriptObjectSupport.hpp index a2bfbf3d7..8a2f83eb1 100644 --- a/Runtime/World/ScriptObjectSupport.hpp +++ b/Runtime/World/ScriptObjectSupport.hpp @@ -1,6 +1,8 @@ #ifndef __SCRIPT_OBJECT_SUPPORT_HPP__ #define __SCRIPT_OBJECT_SUPPORT_HPP__ +#include + namespace urde { @@ -227,6 +229,13 @@ enum class EScriptObjectMessage RemovePhazonPoolInhabitant = 47, InternalMessage26 = 48 }; + +#ifndef NDEBUG +std::string_view ScriptObjectTypeToStr(EScriptObjectType type); +std::string_view ScriptObjectStateToStr(EScriptObjectState state); +std::string_view ScriptObjectMessageToStr(EScriptObjectMessage message); +#endif + } #endif // __SCRIPT_OBJECT_SUPPORT_HPP__ diff --git a/hecl b/hecl index 6c480c70f..e90ad7489 160000 --- a/hecl +++ b/hecl @@ -1 +1 @@ -Subproject commit 6c480c70f1f46f35658576d91241b529d19c7a61 +Subproject commit e90ad748993e4662f39a723a54b75bdc2e364bd8