CPatterned arg type fix

Relay loader imps
CBeetle loader imp
Change CAiFuncMap's const char* to std::string
This commit is contained in:
Phillip Stephens 2016-05-17 20:57:43 -07:00
parent a6ec3afa08
commit 63985b6063
16 changed files with 228 additions and 7 deletions

20
Runtime/MP1/CBeetle.cpp Normal file
View File

@ -0,0 +1,20 @@
#include "CBeetle.hpp"
#include "World/CDamageInfo.hpp"
namespace urde
{
namespace MP1
{
CBeetle::CBeetle(TUniqueId uid, const std::string& name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData,
const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor, CBeetle::EEntranceType, const CDamageInfo&,
const CDamageVulnerability&, const zeus::CVector3f&, float, float, float, const CDamageVulnerability&,
const CActorParameters& aParams, const rstl::optional_object<CStaticRes>)
: CPatterned(EUnknown::Three, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Ground,
EColliderType::One, EBodyType::One, aParams, bool(flavor))
{
}
}
}

28
Runtime/MP1/CBeetle.hpp Normal file
View File

@ -0,0 +1,28 @@
#ifndef CBEETLE_HPP
#define CBEETLE_HPP
#include "World/CPatterned.hpp"
namespace urde
{
class CDamageInfo;
namespace MP1
{
class CBeetle : public CPatterned
{
public:
enum EEntranceType
{
};
private:
public:
CBeetle(TUniqueId, const std::string&, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, CPatterned::EFlavorType,EEntranceType, const CDamageInfo &, const CDamageVulnerability&,
const zeus::CVector3f&, float, float, float, const CDamageVulnerability&, const CActorParameters&,
const rstl::optional_object<CStaticRes>);
};
}
}
#endif // CBEETLE_HPP

View File

@ -7,6 +7,7 @@ set(MP1_SOURCES
CPlayMovie.hpp CPlayMovie.cpp CPlayMovie.hpp CPlayMovie.cpp
CFrontEndUI.hpp CFrontEndUI.cpp CFrontEndUI.hpp CFrontEndUI.cpp
CNewIntroBoss.hpp CNewIntroBoss.cpp CNewIntroBoss.hpp CNewIntroBoss.cpp
CBeetle.hpp CBeetle.cpp
CWarWasp.hpp CWarWasp.cpp CWarWasp.hpp CWarWasp.cpp
MP1.hpp MP1.cpp) MP1.hpp MP1.cpp)

View File

@ -10,7 +10,7 @@ CNewIntroBoss::CNewIntroBoss(TUniqueId uid, const std::string& name, const CEnti
const CActorParameters& actParms, float, u32, const CDamageInfo& dInfo, const CActorParameters& actParms, float, u32, const CDamageInfo& dInfo,
u32, u32, u32, u32) u32, u32, u32, u32)
: CPatterned(EUnknown::TwentyThree, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo, : CPatterned(EUnknown::TwentyThree, uid, name, EFlavorType::Zero, info, xf, std::move(mData), pInfo,
EMovementType::Flyer, EColliderType::One, EBodyType::Two, actParms, 1) EMovementType::Flyer, EColliderType::One, EBodyType::Two, actParms, true)
{ {
} }

View File

@ -9,7 +9,7 @@ CWarWasp::CWarWasp(TUniqueId uid, const std::string& name, const CEntityInfo& in
CPatterned::EColliderType collider, const CDamageInfo& dInfo1, const CActorParameters& actorParms, CPatterned::EColliderType collider, const CDamageInfo& dInfo1, const CActorParameters& actorParms,
ResId weapon, const CDamageInfo& dInfo2, ResId particle, u32 w3) ResId weapon, const CDamageInfo& dInfo2, ResId particle, u32 w3)
: CPatterned(EUnknown::ThirtyNine, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Flyer, collider, EBodyType::Three, : CPatterned(EUnknown::ThirtyNine, uid, name, flavor, info, xf, std::move(mData), pInfo, EMovementType::Flyer, collider, EBodyType::Three,
actorParms, 0) actorParms, false)
{ {
} }

View File

@ -16,8 +16,8 @@ typedef void (CAi::*CAiStateFunc)(CStateManager&, EStateMsg, float);
typedef bool (CAi::*CAiTriggerFunc)(CStateManager&, float); typedef bool (CAi::*CAiTriggerFunc)(CStateManager&, float);
class CAiFuncMap class CAiFuncMap
{ {
std::map<const char*, CAiStateFunc> x0_stateFuncs; std::unordered_map<std::string, CAiStateFunc> x0_stateFuncs;
std::map<const char*, CAiTriggerFunc> x10_triggerFuncs; std::unordered_map<std::string, CAiTriggerFunc> x10_triggerFuncs;
public: public:
CAiFuncMap(); CAiFuncMap();
CAiStateFunc GetStateFunc(const char*); CAiStateFunc GetStateFunc(const char*);

View File

@ -37,6 +37,9 @@ set(WORLD_SOURCES
CScriptSpawnPoint.hpp CScriptSpawnPoint.cpp CScriptSpawnPoint.hpp CScriptSpawnPoint.cpp
CScriptCameraHint.hpp CScriptCameraHint.cpp CScriptCameraHint.hpp CScriptCameraHint.cpp
CScriptPickup.hpp CScriptPickup.cpp CScriptPickup.hpp CScriptPickup.cpp
CScriptMemoryRelay.hpp CScriptMemoryRelay.cpp
CScriptRandomRelay.hpp CScriptRandomRelay.cpp
CScriptRelay.hpp CScriptRelay.cpp
CScriptDamageableTrigger.hpp CScriptDamageableTrigger.cpp CScriptDamageableTrigger.hpp CScriptDamageableTrigger.cpp
CScriptActorRotate.hpp CScriptActorRotate.cpp CScriptActorRotate.hpp CScriptActorRotate.cpp
CScriptSpecialFunction.hpp CScriptSpecialFunction.cpp CScriptSpecialFunction.hpp CScriptSpecialFunction.cpp

View File

@ -17,7 +17,7 @@ CMaterialList gkPatternedFlyerMaterialList(EMaterialTypes::ThirtyThree,
CPatterned::CPatterned(EUnknown, TUniqueId uid, const std::string& name, CPatterned::EFlavorType flavor, CPatterned::CPatterned(EUnknown, TUniqueId uid, const std::string& name, CPatterned::EFlavorType flavor,
const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData,
const CPatternedInfo& pInfo, CPatterned::EMovementType moveType, CPatterned::EColliderType, const CPatternedInfo& pInfo, CPatterned::EMovementType moveType, CPatterned::EColliderType,
EBodyType, const CActorParameters& actorParms, u32) EBodyType, const CActorParameters& actorParms, bool)
: CAi(uid, pInfo.xf8_active, name, info, xf, std::move(mData), : CAi(uid, pInfo.xf8_active, name, info, xf, std::move(mData),
zeus::CAABox(pInfo.xcc_bodyOrigin - zeus::CVector3f{pInfo.xc4_halfExtent, pInfo.xc4_halfExtent, 0.f}, zeus::CAABox(pInfo.xcc_bodyOrigin - zeus::CVector3f{pInfo.xc4_halfExtent, pInfo.xc4_halfExtent, 0.f},
pInfo.xcc_bodyOrigin + zeus::CVector3f{pInfo.xc4_halfExtent, pInfo.xc4_halfExtent, pInfo.xc8_height}), pInfo.xcc_bodyOrigin + zeus::CVector3f{pInfo.xc4_halfExtent, pInfo.xc4_halfExtent, pInfo.xc8_height}),

View File

@ -9,6 +9,7 @@ class CPatternedInfo;
enum class EBodyType enum class EBodyType
{ {
One,
Two = 2, Two = 2,
Three Three
}; };
@ -18,12 +19,14 @@ class CPatterned : public CAi
public: public:
enum class EUnknown enum class EUnknown
{ {
Three = 3,
TwentyThree = 23, TwentyThree = 23,
ThirtyNine ThirtyNine
}; };
enum class EFlavorType enum class EFlavorType
{ {
Zero = 0 Zero = 0,
One = 1
}; };
enum class EMovementType enum class EMovementType
{ {
@ -40,7 +43,7 @@ public:
CPatterned(EUnknown unk, TUniqueId uid, const std::string& name, EFlavorType flavor, CPatterned(EUnknown unk, TUniqueId uid, const std::string& name, EFlavorType flavor,
const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData,
const CPatternedInfo& pinfo, CPatterned::EMovementType movement, EColliderType collider, const CPatternedInfo& pinfo, CPatterned::EMovementType movement, EColliderType collider,
EBodyType body, const CActorParameters& params, u32 w1); EBodyType body, const CActorParameters& params, bool b1);
virtual void Death(const zeus::CVector3f& , CStateManager& ) {} virtual void Death(const zeus::CVector3f& , CStateManager& ) {}
virtual void KnockBack(const zeus::CVector3f &, CStateManager &) {} virtual void KnockBack(const zeus::CVector3f &, CStateManager &) {}

View File

@ -0,0 +1,14 @@
#include "CScriptMemoryRelay.hpp"
namespace urde
{
CScriptMemoryRelay::CScriptMemoryRelay(TUniqueId uid, const std::string& name, const CEntityInfo& info, bool b1, bool b2, bool b3)
: CEntity(uid, info, true, name),
x34_24_(b1),
x34_25_(b2),
x34_26_(b3)
{
}
}

View File

@ -0,0 +1,25 @@
#ifndef CSCRIPTMEMORYRELAY_HPP
#define CSCRIPTMEMORYRELAY_HPP
#include "CEntity.hpp"
namespace urde
{
class CScriptMemoryRelay : public CEntity
{
union
{
struct
{
bool x34_24_;
bool x34_25_;
bool x34_26_;
};
u8 dummy = 0;
};
public:
CScriptMemoryRelay(TUniqueId, const std::string& name, const CEntityInfo&, bool, bool, bool);
};
}
#endif // CSCRIPTMEMORYRELAY_HPP

View File

@ -0,0 +1,13 @@
#include "CScriptRandomRelay.hpp"
namespace urde
{
CScriptRandomRelay::CScriptRandomRelay(TUniqueId uid, const std::string& name, const CEntityInfo& info, s32 connCount, s32 variance,
bool clamp, bool active)
: CEntity(uid, info, active, name),
x34_connectionCount((clamp && connCount > 100) ? 100 : connCount),
x38_variance(variance),
x3c_clamp(clamp)
{
}
}

View File

@ -0,0 +1,18 @@
#ifndef CSCRIPTRANDOMRELAY_HPP
#define CSCRIPTRANDOMRELAY_HPP
#include "CEntity.hpp"
namespace urde
{
class CScriptRandomRelay : public CEntity
{
u32 x34_connectionCount;
u32 x38_variance;
bool x3c_clamp;
public:
CScriptRandomRelay(TUniqueId, const std::string&, const CEntityInfo&, s32, s32, bool, bool);
};
}
#endif // CSCRIPTRANDOMRELAY_HPP

View File

@ -0,0 +1,11 @@
#include "CScriptRelay.hpp"
namespace urde
{
CScriptRelay::CScriptRelay(TUniqueId uid, const std::string& name, const CEntityInfo& info, bool active)
: CEntity(uid, info, active, name)
{
}
}

View File

@ -0,0 +1,17 @@
#ifndef CSCRIPTRELAY_HPP
#define CSCRIPTRELAY_HPP
#include "CEntity.hpp"
namespace urde
{
class CScriptRelay : public CEntity
{
TUniqueId x34_ = kInvalidUniqueId;
u32 x38_ = 0;
public:
CScriptRelay(TUniqueId, const std::string&, const CEntityInfo&, bool);
};
}
#endif // CSCRIPTRELAY_HPP

View File

@ -31,11 +31,15 @@
#include "CScriptSpawnPoint.hpp" #include "CScriptSpawnPoint.hpp"
#include "CScriptCameraHint.hpp" #include "CScriptCameraHint.hpp"
#include "CScriptPickup.hpp" #include "CScriptPickup.hpp"
#include "CScriptMemoryRelay.hpp"
#include "CScriptRandomRelay.hpp"
#include "CScriptRelay.hpp"
#include "CScriptDamageableTrigger.hpp" #include "CScriptDamageableTrigger.hpp"
#include "CScriptActorRotate.hpp" #include "CScriptActorRotate.hpp"
#include "CScriptSpecialFunction.hpp" #include "CScriptSpecialFunction.hpp"
#include "Camera/CCinematicCamera.hpp" #include "Camera/CCinematicCamera.hpp"
#include "MP1/CNewIntroBoss.hpp" #include "MP1/CNewIntroBoss.hpp"
#include "MP1/CBeetle.hpp"
#include "MP1/CWarWasp.hpp" #include "MP1/CWarWasp.hpp"
#include "CPatternedInfo.hpp" #include "CPatternedInfo.hpp"
#include "CSimplePool.hpp" #include "CSimplePool.hpp"
@ -924,21 +928,85 @@ CEntity* ScriptLoader::LoadPickup(CStateManager& mgr, CInputStream& in,
CEntity* ScriptLoader::LoadMemoryRelay(CStateManager& mgr, CInputStream& in, CEntity* ScriptLoader::LoadMemoryRelay(CStateManager& mgr, CInputStream& in,
int propCount, const CEntityInfo& info) int propCount, const CEntityInfo& info)
{ {
if (!EnsurePropertyCount(propCount, 3, "MemoryRelay") || propCount > 4)
return nullptr;
const std::string* name = mgr.HashInstanceName(in);
bool b1 = in.readBool();
bool b2 = in.readBool();
bool b3 = false;
if (propCount > 3)
b3 = in.readBool();
return new CScriptMemoryRelay(mgr.AllocateUniqueId(), *name, info, b1, b2, b3);
} }
CEntity* ScriptLoader::LoadRandomRelay(CStateManager& mgr, CInputStream& in, CEntity* ScriptLoader::LoadRandomRelay(CStateManager& mgr, CInputStream& in,
int propCount, const CEntityInfo& info) int propCount, const CEntityInfo& info)
{ {
if (!EnsurePropertyCount(propCount, 5, "RandomRelay"))
return nullptr;
const std::string* name = mgr.HashInstanceName(in);
u32 w1 = in.readUint32Big();
u32 w2 = in.readUint32Big();
bool b1 = in.readBool();
bool b2 = in.readBool();
return new CScriptRandomRelay(mgr.AllocateUniqueId(), *name, info, w1, w2, b1, b2);
} }
CEntity* ScriptLoader::LoadRelay(CStateManager& mgr, CInputStream& in, CEntity* ScriptLoader::LoadRelay(CStateManager& mgr, CInputStream& in,
int propCount, const CEntityInfo& info) int propCount, const CEntityInfo& info)
{ {
if (!EnsurePropertyCount(propCount, 2, "Relay") || propCount > 3)
return nullptr;
const std::string* name = mgr.HashInstanceName(in);
if (propCount >= 3)
in.readUint32Big();
bool b1 = in.readBool();
return new CScriptRelay(mgr.AllocateUniqueId(), *name, info, b1);
} }
CEntity* ScriptLoader::LoadBeetle(CStateManager& mgr, CInputStream& in, CEntity* ScriptLoader::LoadBeetle(CStateManager& mgr, CInputStream& in,
int propCount, const CEntityInfo& info) int propCount, const CEntityInfo& info)
{ {
if (!EnsurePropertyCount(propCount, 16, "Beetle"))
return nullptr;
const std::string* name = mgr.HashInstanceName(in);
CPatterned::EFlavorType flavor = CPatterned::EFlavorType(in.readUint32Big());
zeus::CTransform xfrm = LoadEditorTransform(in);
zeus::CVector3f scale = zeus::CVector3f::ReadBig(in);
std::pair<bool, u32> pcount = CPatternedInfo::HasCorrectParameterCount(in);
if (!pcount.first)
return nullptr;
CPatternedInfo pInfo(in, pcount.second);
CActorParameters aParams = LoadActorParameters(in);
CDamageInfo dInfo(in);
zeus::CVector3f v1 = zeus::CVector3f::ReadBig(in);
float f1 = in.readFloatBig();
CDamageVulnerability dVuln1(in);
CDamageVulnerability dVuln2(in);
ResId abdomen = in.readUint32Big();
MP1::CBeetle::EEntranceType entrance = MP1::CBeetle::EEntranceType(in.readUint32Big());
float f2 = in.readFloatBig();
float f3 = in.readFloatBig();
FourCC animType = g_ResFactory->GetResourceTypeById(pInfo.GetAnimationParameters().GetACSFile());
if (animType != SBIG('ANCS'))
return nullptr;
rstl::optional_object<CStaticRes> abdomenRes;
if (flavor == CPatterned::EFlavorType::One)
abdomenRes.emplace(CStaticRes(abdomen, scale));
const CAnimationParameters& animParams = pInfo.GetAnimationParameters();
CAnimRes animRes(animParams.GetACSFile(), animParams.GetCharacter(), scale, animParams.GetInitialAnimation(), true);
return new MP1::CBeetle(mgr.AllocateUniqueId(), *name, info, xfrm, animRes, pInfo, flavor, entrance, dInfo, dVuln2, v1, f2,
f3, f1, dVuln1, aParams, abdomenRes);
} }
CEntity* ScriptLoader::LoadHUDMemo(CStateManager& mgr, CInputStream& in, CEntity* ScriptLoader::LoadHUDMemo(CStateManager& mgr, CInputStream& in,