mirror of https://github.com/AxioDL/metaforce.git
More cleanup
This commit is contained in:
parent
c2043557c7
commit
3edf21b3ed
|
@ -195,9 +195,11 @@ static zeus::CAABox GetCollisionBox(CStateManager& stateMgr, TAreaId id, const z
|
||||||
u32 ScriptLoader::LoadParameterFlags(CInputStream& in) {
|
u32 ScriptLoader::LoadParameterFlags(CInputStream& in) {
|
||||||
u32 count = in.readUint32Big();
|
u32 count = in.readUint32Big();
|
||||||
u32 ret = 0;
|
u32 ret = 0;
|
||||||
for (u32 i = 0; i < count; ++i)
|
for (u32 i = 0; i < count; ++i) {
|
||||||
if (in.readBool())
|
if (in.readBool()) {
|
||||||
ret |= 1 << i;
|
ret |= 1 << i;
|
||||||
|
}
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,8 +225,9 @@ CActorParameters ScriptLoader::LoadActorParameters(CInputStream& in) {
|
||||||
CLightParameters lParms = ScriptLoader::LoadLightParameters(in);
|
CLightParameters lParms = ScriptLoader::LoadLightParameters(in);
|
||||||
|
|
||||||
CScannableParameters sParams;
|
CScannableParameters sParams;
|
||||||
if (propCount > 5)
|
if (propCount > 5) {
|
||||||
sParams = LoadScannableParameters(in);
|
sParams = LoadScannableParameters(in);
|
||||||
|
}
|
||||||
|
|
||||||
CAssetId xrayModel = in.readUint32Big();
|
CAssetId xrayModel = in.readUint32Big();
|
||||||
CAssetId xraySkin = in.readUint32Big();
|
CAssetId xraySkin = in.readUint32Big();
|
||||||
|
@ -232,44 +235,54 @@ CActorParameters ScriptLoader::LoadActorParameters(CInputStream& in) {
|
||||||
CAssetId infraSkin = in.readUint32Big();
|
CAssetId infraSkin = in.readUint32Big();
|
||||||
|
|
||||||
bool globalTimeProvider = true;
|
bool globalTimeProvider = true;
|
||||||
if (propCount > 7)
|
if (propCount > 7) {
|
||||||
globalTimeProvider = in.readBool();
|
globalTimeProvider = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
float fadeInTime = 1.f;
|
float fadeInTime = 1.f;
|
||||||
if (propCount > 8)
|
if (propCount > 8) {
|
||||||
fadeInTime = in.readFloatBig();
|
fadeInTime = in.readFloatBig();
|
||||||
|
}
|
||||||
|
|
||||||
float fadeOutTime = 1.f;
|
float fadeOutTime = 1.f;
|
||||||
if (propCount > 9)
|
if (propCount > 9) {
|
||||||
fadeOutTime = in.readFloatBig();
|
fadeOutTime = in.readFloatBig();
|
||||||
|
}
|
||||||
|
|
||||||
CVisorParameters vParms;
|
CVisorParameters vParms;
|
||||||
if (propCount > 6)
|
if (propCount > 6) {
|
||||||
vParms = LoadVisorParameters(in);
|
vParms = LoadVisorParameters(in);
|
||||||
|
}
|
||||||
|
|
||||||
bool thermalHeat = false;
|
bool thermalHeat = false;
|
||||||
if (propCount > 10)
|
if (propCount > 10) {
|
||||||
thermalHeat = in.readBool();
|
thermalHeat = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
bool renderUnsorted = false;
|
bool renderUnsorted = false;
|
||||||
if (propCount > 11)
|
if (propCount > 11) {
|
||||||
renderUnsorted = in.readBool();
|
renderUnsorted = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
bool noSortThermal = false;
|
bool noSortThermal = false;
|
||||||
if (propCount > 12)
|
if (propCount > 12) {
|
||||||
noSortThermal = in.readBool();
|
noSortThermal = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
float thermalMag = 1.f;
|
float thermalMag = 1.f;
|
||||||
if (propCount > 13)
|
if (propCount > 13) {
|
||||||
thermalMag = in.readFloatBig();
|
thermalMag = in.readFloatBig();
|
||||||
|
}
|
||||||
|
|
||||||
std::pair<CAssetId, CAssetId> xray = {};
|
std::pair<CAssetId, CAssetId> xray = {};
|
||||||
if (g_ResFactory->GetResourceTypeById(xrayModel).IsValid())
|
if (g_ResFactory->GetResourceTypeById(xrayModel).IsValid()) {
|
||||||
xray = {xrayModel, xraySkin};
|
xray = {xrayModel, xraySkin};
|
||||||
|
}
|
||||||
|
|
||||||
std::pair<CAssetId, CAssetId> infra = {};
|
std::pair<CAssetId, CAssetId> infra = {};
|
||||||
if (g_ResFactory->GetResourceTypeById(infraModel).IsValid())
|
if (g_ResFactory->GetResourceTypeById(infraModel).IsValid()) {
|
||||||
infra = {infraModel, infraSkin};
|
infra = {infraModel, infraSkin};
|
||||||
|
}
|
||||||
|
|
||||||
return CActorParameters(lParms, sParams, xray, infra, vParms, globalTimeProvider, thermalHeat, renderUnsorted,
|
return CActorParameters(lParms, sParams, xray, infra, vParms, globalTimeProvider, thermalHeat, renderUnsorted,
|
||||||
noSortThermal, fadeInTime, fadeOutTime, thermalMag);
|
noSortThermal, fadeInTime, fadeOutTime, thermalMag);
|
||||||
|
@ -283,10 +296,12 @@ CVisorParameters ScriptLoader::LoadVisorParameters(CInputStream& in) {
|
||||||
bool b1 = in.readBool();
|
bool b1 = in.readBool();
|
||||||
bool scanPassthrough = false;
|
bool scanPassthrough = false;
|
||||||
u8 mask = 0xf;
|
u8 mask = 0xf;
|
||||||
if (propCount > 2)
|
if (propCount > 2) {
|
||||||
scanPassthrough = in.readBool();
|
scanPassthrough = in.readBool();
|
||||||
if (propCount >= 2)
|
}
|
||||||
|
if (propCount >= 2) {
|
||||||
mask = u8(in.readUint32Big());
|
mask = u8(in.readUint32Big());
|
||||||
|
}
|
||||||
return CVisorParameters(mask, b1, scanPassthrough);
|
return CVisorParameters(mask, b1, scanPassthrough);
|
||||||
}
|
}
|
||||||
return CVisorParameters();
|
return CVisorParameters();
|
||||||
|
@ -294,8 +309,9 @@ CVisorParameters ScriptLoader::LoadVisorParameters(CInputStream& in) {
|
||||||
|
|
||||||
CScannableParameters ScriptLoader::LoadScannableParameters(CInputStream& in) {
|
CScannableParameters ScriptLoader::LoadScannableParameters(CInputStream& in) {
|
||||||
u32 propCount = in.readUint32Big();
|
u32 propCount = in.readUint32Big();
|
||||||
if (propCount == 1)
|
if (propCount == 1) {
|
||||||
return CScannableParameters(in.readUint32Big());
|
return CScannableParameters(in.readUint32Big());
|
||||||
|
}
|
||||||
return CScannableParameters();
|
return CScannableParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,7 +320,7 @@ CLightParameters ScriptLoader::LoadLightParameters(CInputStream& in) {
|
||||||
if (propCount == 14) {
|
if (propCount == 14) {
|
||||||
bool a = in.readBool();
|
bool a = in.readBool();
|
||||||
float b = in.readFloatBig();
|
float b = in.readFloatBig();
|
||||||
CLightParameters::EShadowTesselation shadowTess = CLightParameters::EShadowTesselation(in.readUint32Big());
|
auto shadowTess = CLightParameters::EShadowTesselation(in.readUint32Big());
|
||||||
float d = in.readFloatBig();
|
float d = in.readFloatBig();
|
||||||
float e = in.readFloatBig();
|
float e = in.readFloatBig();
|
||||||
|
|
||||||
|
@ -312,9 +328,8 @@ CLightParameters ScriptLoader::LoadLightParameters(CInputStream& in) {
|
||||||
noLightsAmbient.readRGBABig(in);
|
noLightsAmbient.readRGBABig(in);
|
||||||
|
|
||||||
bool makeLights = in.readBool();
|
bool makeLights = in.readBool();
|
||||||
CLightParameters::EWorldLightingOptions lightOpts = CLightParameters::EWorldLightingOptions(in.readUint32Big());
|
auto lightOpts = CLightParameters::EWorldLightingOptions(in.readUint32Big());
|
||||||
CLightParameters::ELightRecalculationOptions recalcOpts =
|
auto recalcOpts = CLightParameters::ELightRecalculationOptions(in.readUint32Big());
|
||||||
CLightParameters::ELightRecalculationOptions(in.readUint32Big());
|
|
||||||
|
|
||||||
zeus::CVector3f actorPosBias;
|
zeus::CVector3f actorPosBias;
|
||||||
actorPosBias.readBig(in);
|
actorPosBias.readBig(in);
|
||||||
|
@ -327,12 +342,14 @@ CLightParameters ScriptLoader::LoadLightParameters(CInputStream& in) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ambientChannelOverflow = false;
|
bool ambientChannelOverflow = false;
|
||||||
if (propCount >= 13)
|
if (propCount >= 13) {
|
||||||
ambientChannelOverflow = in.readBool();
|
ambientChannelOverflow = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
s32 layerIdx = 0;
|
s32 layerIdx = 0;
|
||||||
if (propCount >= 14)
|
if (propCount >= 14) {
|
||||||
layerIdx = in.readUint32Big();
|
layerIdx = in.readUint32Big();
|
||||||
|
}
|
||||||
|
|
||||||
return CLightParameters(a, b, shadowTess, d, e, noLightsAmbient, makeLights, lightOpts, recalcOpts, actorPosBias,
|
return CLightParameters(a, b, shadowTess, d, e, noLightsAmbient, makeLights, lightOpts, recalcOpts, actorPosBias,
|
||||||
maxDynamicLights, maxAreaLights, ambientChannelOverflow, layerIdx);
|
maxDynamicLights, maxAreaLights, ambientChannelOverflow, layerIdx);
|
||||||
|
@ -389,8 +406,9 @@ zeus::CTransform ScriptLoader::ConvertEditorEulerToTransform4f(const zeus::CVect
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadActor(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadActor(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 24, "Actor"))
|
if (!EnsurePropertyCount(propCount, 24, "Actor")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
|
|
||||||
|
@ -425,20 +443,24 @@ CEntity* ScriptLoader::LoadActor(CStateManager& mgr, CInputStream& in, int propC
|
||||||
bool materialFlag54 = in.readBool();
|
bool materialFlag54 = in.readBool();
|
||||||
|
|
||||||
FourCC animType = g_ResFactory->GetResourceTypeById(aParms.GetACSFile());
|
FourCC animType = g_ResFactory->GetResourceTypeById(aParms.GetACSFile());
|
||||||
if (!g_ResFactory->GetResourceTypeById(staticId).IsValid() && !animType.IsValid())
|
if (!g_ResFactory->GetResourceTypeById(staticId).IsValid() && !animType.IsValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), collisionExtent, centroid);
|
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), collisionExtent, centroid);
|
||||||
|
|
||||||
CMaterialList list;
|
CMaterialList list;
|
||||||
if (immovable) // Bool 2
|
if (immovable) { // Bool 2
|
||||||
list.Add(EMaterialTypes::Immovable);
|
list.Add(EMaterialTypes::Immovable);
|
||||||
|
}
|
||||||
|
|
||||||
if (solid) // Bool 3
|
if (solid) { // Bool 3
|
||||||
list.Add(EMaterialTypes::Solid);
|
list.Add(EMaterialTypes::Solid);
|
||||||
|
}
|
||||||
|
|
||||||
if (cameraPassthrough) // Bool 4
|
if (cameraPassthrough) { // Bool 4
|
||||||
list.Add(EMaterialTypes::CameraPassthrough);
|
list.Add(EMaterialTypes::CameraPassthrough);
|
||||||
|
}
|
||||||
|
|
||||||
CModelData data;
|
CModelData data;
|
||||||
if (animType == SBIG('ANCS')) {
|
if (animType == SBIG('ANCS')) {
|
||||||
|
@ -448,8 +470,10 @@ CEntity* ScriptLoader::LoadActor(CStateManager& mgr, CInputStream& in, int propC
|
||||||
data = CModelData{CStaticRes(staticId, head.x40_scale)};
|
data = CModelData{CStaticRes(staticId, head.x40_scale)};
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((collisionExtent.x() < 0.f || collisionExtent.y() < 0.f || collisionExtent.z() < 0.f) || collisionExtent.isZero())
|
if ((collisionExtent.x() < 0.f || collisionExtent.y() < 0.f || collisionExtent.z() < 0.f) ||
|
||||||
|
collisionExtent.isZero()) {
|
||||||
aabb = data.GetBounds(head.x10_transform.getRotation());
|
aabb = data.GetBounds(head.x10_transform.getRotation());
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptActor(mgr.AllocateUniqueId(), head.x0_name, info, head.x10_transform, std::move(data), aabb, mass,
|
return new CScriptActor(mgr.AllocateUniqueId(), head.x0_name, info, head.x10_transform, std::move(data), aabb, mass,
|
||||||
zMomentum, list, hInfo, dVuln, actParms, looping, active, shaderIdx, xrayAlpha, noThermalHotZ,
|
zMomentum, list, hInfo, dVuln, actParms, looping, active, shaderIdx, xrayAlpha, noThermalHotZ,
|
||||||
|
@ -457,8 +481,9 @@ CEntity* ScriptLoader::LoadActor(CStateManager& mgr, CInputStream& in, int propC
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadWaypoint(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadWaypoint(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 13, "Waypoint"))
|
if (!EnsurePropertyCount(propCount, 13, "Waypoint")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SActorHead head = LoadActorHead(in, mgr);
|
SActorHead head = LoadActorHead(in, mgr);
|
||||||
|
|
||||||
|
@ -479,8 +504,9 @@ CEntity* ScriptLoader::LoadWaypoint(CStateManager& mgr, CInputStream& in, int pr
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadDoor(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadDoor(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 13, "Door") || propCount > 14)
|
if (!EnsurePropertyCount(propCount, 13, "Door") || propCount > 14) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
CAnimationParameters aParms = LoadAnimationParameters(in);
|
CAnimationParameters aParms = LoadAnimationParameters(in);
|
||||||
|
@ -500,27 +526,32 @@ CEntity* ScriptLoader::LoadDoor(CStateManager& mgr, CInputStream& in, int propCo
|
||||||
|
|
||||||
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), collisionExtent, offset);
|
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), collisionExtent, offset);
|
||||||
|
|
||||||
if (!g_ResFactory->GetResourceTypeById(aParms.GetACSFile()).IsValid())
|
if (!g_ResFactory->GetResourceTypeById(aParms.GetACSFile()).IsValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
CModelData mData{CAnimRes(aParms.GetACSFile(), aParms.GetCharacter(), head.x40_scale, 0, false)};
|
CModelData mData{CAnimRes(aParms.GetACSFile(), aParms.GetCharacter(), head.x40_scale, 0, false)};
|
||||||
if (collisionExtent.isZero())
|
if (collisionExtent.isZero()) {
|
||||||
aabb = mData.GetBounds(head.x10_transform.getRotation());
|
aabb = mData.GetBounds(head.x10_transform.getRotation());
|
||||||
|
}
|
||||||
|
|
||||||
bool isMorphballDoor = false;
|
bool isMorphballDoor = false;
|
||||||
if (propCount == 13) {
|
if (propCount == 13) {
|
||||||
if (aParms.GetACSFile() == MorphballDoorANCS.id)
|
if (aParms.GetACSFile() == MorphballDoorANCS.id) {
|
||||||
isMorphballDoor = true;
|
isMorphballDoor = true;
|
||||||
} else if (propCount == 14)
|
}
|
||||||
|
} else if (propCount == 14) {
|
||||||
isMorphballDoor = in.readBool();
|
isMorphballDoor = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptDoor(mgr.AllocateUniqueId(), head.x0_name, info, head.x10_transform, std::move(mData), actParms,
|
return new CScriptDoor(mgr.AllocateUniqueId(), head.x0_name, info, head.x10_transform, std::move(mData), actParms,
|
||||||
orbitPos, aabb, active, open, projectilesCollide, animationLength, isMorphballDoor);
|
orbitPos, aabb, active, open, projectilesCollide, animationLength, isMorphballDoor);
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadTrigger(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadTrigger(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 9, "Trigger"))
|
if (!EnsurePropertyCount(propCount, 9, "Trigger")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
|
|
||||||
|
@ -532,7 +563,7 @@ CEntity* ScriptLoader::LoadTrigger(CStateManager& mgr, CInputStream& in, int pro
|
||||||
|
|
||||||
zeus::CVector3f forceVec = zeus::CVector3f::ReadBig(in);
|
zeus::CVector3f forceVec = zeus::CVector3f::ReadBig(in);
|
||||||
|
|
||||||
ETriggerFlags flags = ETriggerFlags(in.readUint32Big());
|
auto flags = ETriggerFlags(in.readUint32Big());
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
bool b2 = in.readBool();
|
bool b2 = in.readBool();
|
||||||
bool b3 = in.readBool();
|
bool b3 = in.readBool();
|
||||||
|
@ -547,8 +578,9 @@ CEntity* ScriptLoader::LoadTrigger(CStateManager& mgr, CInputStream& in, int pro
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadTimer(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadTimer(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 6, "Timer"))
|
if (!EnsurePropertyCount(propCount, 6, "Timer")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
|
|
||||||
|
@ -562,8 +594,9 @@ CEntity* ScriptLoader::LoadTimer(CStateManager& mgr, CInputStream& in, int propC
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadCounter(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadCounter(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 5, "Counter"))
|
if (!EnsurePropertyCount(propCount, 5, "Counter")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
|
|
||||||
|
@ -576,8 +609,9 @@ CEntity* ScriptLoader::LoadCounter(CStateManager& mgr, CInputStream& in, int pro
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadEffect(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadEffect(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 24, "Effect"))
|
if (!EnsurePropertyCount(propCount, 24, "Effect")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
|
|
||||||
|
@ -588,11 +622,13 @@ CEntity* ScriptLoader::LoadEffect(CStateManager& mgr, CInputStream& in, int prop
|
||||||
bool rebuildSystemsOnActivate = in.readBool();
|
bool rebuildSystemsOnActivate = in.readBool();
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
|
|
||||||
if (!partId.IsValid() && !elscId.IsValid())
|
if (!partId.IsValid() && !elscId.IsValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (!g_ResFactory->GetResourceTypeById(partId).IsValid() && !g_ResFactory->GetResourceTypeById(elscId).IsValid())
|
if (!g_ResFactory->GetResourceTypeById(partId).IsValid() && !g_ResFactory->GetResourceTypeById(elscId).IsValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
bool useRateInverseCamDist = in.readBool();
|
bool useRateInverseCamDist = in.readBool();
|
||||||
float rateInverseCamDist = in.readFloatBig();
|
float rateInverseCamDist = in.readFloatBig();
|
||||||
|
@ -619,8 +655,9 @@ CEntity* ScriptLoader::LoadEffect(CStateManager& mgr, CInputStream& in, int prop
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadPlatform(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadPlatform(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 19, "Platform"))
|
if (!EnsurePropertyCount(propCount, 19, "Platform")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
|
|
||||||
|
@ -650,8 +687,9 @@ CEntity* ScriptLoader::LoadPlatform(CStateManager& mgr, CInputStream& in, int pr
|
||||||
u32 rainGenRate = in.readUint32Big();
|
u32 rainGenRate = in.readUint32Big();
|
||||||
|
|
||||||
FourCC animType = g_ResFactory->GetResourceTypeById(aParms.GetACSFile());
|
FourCC animType = g_ResFactory->GetResourceTypeById(aParms.GetACSFile());
|
||||||
if (!g_ResFactory->GetResourceTypeById(staticId).IsValid() && !animType.IsValid())
|
if (!g_ResFactory->GetResourceTypeById(staticId).IsValid() && !animType.IsValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), extent, centroid);
|
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), extent, centroid);
|
||||||
|
|
||||||
|
@ -670,8 +708,9 @@ CEntity* ScriptLoader::LoadPlatform(CStateManager& mgr, CInputStream& in, int pr
|
||||||
data = CModelData{CStaticRes(staticId, head.x40_scale)};
|
data = CModelData{CStaticRes(staticId, head.x40_scale)};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extent.isZero())
|
if (extent.isZero()) {
|
||||||
aabb = data.GetBounds(head.x10_transform.getRotation());
|
aabb = data.GetBounds(head.x10_transform.getRotation());
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptPlatform(mgr.AllocateUniqueId(), head.x0_name, info, head.x10_transform, std::move(data), actParms,
|
return new CScriptPlatform(mgr.AllocateUniqueId(), head.x0_name, info, head.x10_transform, std::move(data), actParms,
|
||||||
aabb, speed, detectCollision, xrayAlpha, active, hInfo, dInfo, dclnToken, rainSplashes,
|
aabb, speed, detectCollision, xrayAlpha, active, hInfo, dInfo, dclnToken, rainSplashes,
|
||||||
|
@ -679,8 +718,9 @@ CEntity* ScriptLoader::LoadPlatform(CStateManager& mgr, CInputStream& in, int pr
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadSound(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadSound(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 20, "Sound"))
|
if (!EnsurePropertyCount(propCount, 20, "Sound")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SActorHead head = LoadActorHead(in, mgr);
|
SActorHead head = LoadActorHead(in, mgr);
|
||||||
s32 soundId = in.readInt32Big();
|
s32 soundId = in.readInt32Big();
|
||||||
|
@ -713,8 +753,9 @@ CEntity* ScriptLoader::LoadSound(CStateManager& mgr, CInputStream& in, int propC
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadGenerator(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadGenerator(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 8, "Generator"))
|
if (!EnsurePropertyCount(propCount, 8, "Generator")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
|
|
||||||
|
@ -733,8 +774,9 @@ CEntity* ScriptLoader::LoadGenerator(CStateManager& mgr, CInputStream& in, int p
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadDock(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadDock(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 7, "Dock"))
|
if (!EnsurePropertyCount(propCount, 7, "Dock")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
|
@ -749,8 +791,9 @@ CEntity* ScriptLoader::LoadDock(CStateManager& mgr, CInputStream& in, int propCo
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadCamera(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadCamera(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 14, "Camera"))
|
if (!EnsurePropertyCount(propCount, 14, "Camera")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SActorHead head = LoadActorHead(in, mgr);
|
SActorHead head = LoadActorHead(in, mgr);
|
||||||
|
|
||||||
|
@ -767,8 +810,9 @@ CEntity* ScriptLoader::LoadCamera(CStateManager& mgr, CInputStream& in, int prop
|
||||||
bool checkFailsafe = in.readBool();
|
bool checkFailsafe = in.readBool();
|
||||||
|
|
||||||
bool disableOutOfInto = false;
|
bool disableOutOfInto = false;
|
||||||
if (propCount > 14)
|
if (propCount > 14) {
|
||||||
disableOutOfInto = in.readBool();
|
disableOutOfInto = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
s32 flags = s32(lookAtPlayer) | s32(outOfPlayerEye) << 1 | s32(intoPlayerEye) << 2 | s32(b7) << 3 |
|
s32 flags = s32(lookAtPlayer) | s32(outOfPlayerEye) << 1 | s32(intoPlayerEye) << 2 | s32(b7) << 3 |
|
||||||
s32(finishCineSkip) << 4 | s32(disableInput) << 5 | s32(drawPlayer) << 6 | s32(checkFailsafe) << 7 |
|
s32(finishCineSkip) << 4 | s32(disableInput) << 5 | s32(drawPlayer) << 6 | s32(checkFailsafe) << 7 |
|
||||||
|
@ -781,8 +825,9 @@ CEntity* ScriptLoader::LoadCamera(CStateManager& mgr, CInputStream& in, int prop
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadCameraWaypoint(CStateManager& mgr, CInputStream& in, int propCount,
|
CEntity* ScriptLoader::LoadCameraWaypoint(CStateManager& mgr, CInputStream& in, int propCount,
|
||||||
const CEntityInfo& info) {
|
const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 6, "CameraWaypoint"))
|
if (!EnsurePropertyCount(propCount, 6, "CameraWaypoint")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SActorHead head = LoadActorHead(in, mgr);
|
SActorHead head = LoadActorHead(in, mgr);
|
||||||
|
|
||||||
|
@ -794,14 +839,16 @@ CEntity* ScriptLoader::LoadCameraWaypoint(CStateManager& mgr, CInputStream& in,
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadNewIntroBoss(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadNewIntroBoss(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 13, "NewIntroBoss"))
|
if (!EnsurePropertyCount(propCount, 13, "NewIntroBoss")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
|
|
||||||
std::pair<bool, u32> pcount = CPatternedInfo::HasCorrectParameterCount(in);
|
std::pair<bool, u32> pcount = CPatternedInfo::HasCorrectParameterCount(in);
|
||||||
if (!pcount.first)
|
if (!pcount.first) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
CPatternedInfo pInfo(in, pcount.second);
|
CPatternedInfo pInfo(in, pcount.second);
|
||||||
|
|
||||||
|
@ -819,8 +866,9 @@ CEntity* ScriptLoader::LoadNewIntroBoss(CStateManager& mgr, CInputStream& in, in
|
||||||
|
|
||||||
const CAnimationParameters& aParms = pInfo.GetAnimationParameters();
|
const CAnimationParameters& aParms = pInfo.GetAnimationParameters();
|
||||||
FourCC animType = g_ResFactory->GetResourceTypeById(aParms.GetACSFile());
|
FourCC animType = g_ResFactory->GetResourceTypeById(aParms.GetACSFile());
|
||||||
if (animType != SBIG('ANCS'))
|
if (animType != SBIG('ANCS')) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
CAnimRes res(aParms.GetACSFile(), aParms.GetCharacter(), head.x40_scale, aParms.GetInitialAnimation(), true);
|
CAnimRes res(aParms.GetACSFile(), aParms.GetCharacter(), head.x40_scale, aParms.GetInitialAnimation(), true);
|
||||||
|
|
||||||
|
@ -830,8 +878,9 @@ CEntity* ScriptLoader::LoadNewIntroBoss(CStateManager& mgr, CInputStream& in, in
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadSpawnPoint(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadSpawnPoint(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 35, "SpawnPoint"))
|
if (!EnsurePropertyCount(propCount, 35, "SpawnPoint")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
|
|
||||||
|
@ -843,14 +892,16 @@ CEntity* ScriptLoader::LoadSpawnPoint(CStateManager& mgr, CInputStream& in, int
|
||||||
|
|
||||||
rstl::reserved_vector<u32, int(CPlayerState::EItemType::Max)> itemCounts;
|
rstl::reserved_vector<u32, int(CPlayerState::EItemType::Max)> itemCounts;
|
||||||
itemCounts.resize(size_t(CPlayerState::EItemType::Max), 0);
|
itemCounts.resize(size_t(CPlayerState::EItemType::Max), 0);
|
||||||
for (int i = 0; i < propCount - 6; ++i)
|
for (int i = 0; i < propCount - 6; ++i) {
|
||||||
itemCounts[i] = in.readUint32Big();
|
itemCounts[i] = in.readUint32Big();
|
||||||
|
}
|
||||||
|
|
||||||
bool defaultSpawn = in.readBool();
|
bool defaultSpawn = in.readBool();
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
bool morphed = false;
|
bool morphed = false;
|
||||||
if (propCount > 34)
|
if (propCount > 34) {
|
||||||
morphed = in.readBool();
|
morphed = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptSpawnPoint(mgr.AllocateUniqueId(), name, info, ConvertEditorEulerToTransform4f(rotation, position),
|
return new CScriptSpawnPoint(mgr.AllocateUniqueId(), name, info, ConvertEditorEulerToTransform4f(rotation, position),
|
||||||
itemCounts, defaultSpawn, active, morphed);
|
itemCounts, defaultSpawn, active, morphed);
|
||||||
|
@ -882,9 +933,9 @@ CEntity* ScriptLoader::LoadCameraHint(CStateManager& mgr, CInputStream& in, int
|
||||||
chaseLookAtOffset.readBig(in);
|
chaseLookAtOffset.readBig(in);
|
||||||
zeus::CVector3f ballToCam;
|
zeus::CVector3f ballToCam;
|
||||||
ballToCam.readBig(in);
|
ballToCam.readBig(in);
|
||||||
overrideFlags |= in.readBool() << 27;
|
overrideFlags |= static_cast<int>(in.readBool()) << 27;
|
||||||
float fov = in.readFloatBig();
|
float fov = in.readFloatBig();
|
||||||
overrideFlags |= in.readBool() << 28;
|
overrideFlags |= static_cast<int>(in.readBool()) << 28;
|
||||||
float attitudeRange = zeus::degToRad(in.readFloatBig());
|
float attitudeRange = zeus::degToRad(in.readFloatBig());
|
||||||
overrideFlags |= in.readBool() << 29;
|
overrideFlags |= in.readBool() << 29;
|
||||||
float azimuthRange = zeus::degToRad(in.readFloatBig());
|
float azimuthRange = zeus::degToRad(in.readFloatBig());
|
||||||
|
@ -892,7 +943,7 @@ CEntity* ScriptLoader::LoadCameraHint(CStateManager& mgr, CInputStream& in, int
|
||||||
float anglePerSecond = zeus::degToRad(in.readFloatBig());
|
float anglePerSecond = zeus::degToRad(in.readFloatBig());
|
||||||
float clampVelRange = in.readFloatBig();
|
float clampVelRange = in.readFloatBig();
|
||||||
float clampRotRange = zeus::degToRad(in.readFloatBig());
|
float clampRotRange = zeus::degToRad(in.readFloatBig());
|
||||||
overrideFlags |= in.readBool() << 31;
|
overrideFlags |= static_cast<int>(in.readBool()) << 31;
|
||||||
float elevation = in.readFloatBig();
|
float elevation = in.readFloatBig();
|
||||||
float interpolateTime = in.readFloatBig();
|
float interpolateTime = in.readFloatBig();
|
||||||
float clampVelTime = in.readFloatBig();
|
float clampVelTime = in.readFloatBig();
|
||||||
|
@ -905,13 +956,14 @@ CEntity* ScriptLoader::LoadCameraHint(CStateManager& mgr, CInputStream& in, int
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadPickup(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadPickup(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 18, "Pickup"))
|
if (!EnsurePropertyCount(propCount, 18, "Pickup")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
zeus::CVector3f extent = zeus::CVector3f::ReadBig(in);
|
zeus::CVector3f extent = zeus::CVector3f::ReadBig(in);
|
||||||
zeus::CVector3f offset = zeus::CVector3f::ReadBig(in);
|
zeus::CVector3f offset = zeus::CVector3f::ReadBig(in);
|
||||||
CPlayerState::EItemType itemType = CPlayerState::EItemType(in.readUint32Big());
|
auto itemType = CPlayerState::EItemType(in.readUint32Big());
|
||||||
u32 capacity = in.readUint32Big();
|
u32 capacity = in.readUint32Big();
|
||||||
u32 amount = in.readUint32Big();
|
u32 amount = in.readUint32Big();
|
||||||
float possibility = in.readFloatBig();
|
float possibility = in.readFloatBig();
|
||||||
|
@ -925,8 +977,9 @@ CEntity* ScriptLoader::LoadPickup(CStateManager& mgr, CInputStream& in, int prop
|
||||||
CAssetId pickupEffect(in);
|
CAssetId pickupEffect(in);
|
||||||
|
|
||||||
FourCC acsType = g_ResFactory->GetResourceTypeById(animParms.GetACSFile());
|
FourCC acsType = g_ResFactory->GetResourceTypeById(animParms.GetACSFile());
|
||||||
if (g_ResFactory->GetResourceTypeById(staticModel) == 0 && acsType == 0)
|
if (g_ResFactory->GetResourceTypeById(staticModel) == 0 && acsType == 0) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), extent, offset);
|
zeus::CAABox aabb = GetCollisionBox(mgr, info.GetAreaId(), extent, offset);
|
||||||
|
|
||||||
|
@ -949,22 +1002,25 @@ CEntity* ScriptLoader::LoadPickup(CStateManager& mgr, CInputStream& in, int prop
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadMemoryRelay(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadMemoryRelay(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 3, "MemoryRelay") || propCount > 4)
|
if (!EnsurePropertyCount(propCount, 3, "MemoryRelay") || propCount > 4) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
bool b1 = in.readBool();
|
bool b1 = in.readBool();
|
||||||
bool b2 = in.readBool();
|
bool b2 = in.readBool();
|
||||||
bool b3 = false;
|
bool b3 = false;
|
||||||
if (propCount > 3)
|
if (propCount > 3) {
|
||||||
b3 = in.readBool();
|
b3 = in.readBool();
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptMemoryRelay(mgr.AllocateUniqueId(), name, info, b1, b2, b3);
|
return new CScriptMemoryRelay(mgr.AllocateUniqueId(), name, info, b1, b2, b3);
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadRandomRelay(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadRandomRelay(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 5, "RandomRelay"))
|
if (!EnsurePropertyCount(propCount, 5, "RandomRelay")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
u32 sendSetSize = in.readUint32Big();
|
u32 sendSetSize = in.readUint32Big();
|
||||||
u32 sendSetVariance = in.readUint32Big();
|
u32 sendSetVariance = in.readUint32Big();
|
||||||
|
@ -975,27 +1031,32 @@ CEntity* ScriptLoader::LoadRandomRelay(CStateManager& mgr, CInputStream& in, int
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadRelay(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadRelay(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 2, "Relay") || propCount > 3)
|
if (!EnsurePropertyCount(propCount, 2, "Relay") || propCount > 3) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
if (propCount >= 3)
|
if (propCount >= 3) {
|
||||||
in.readUint32Big();
|
in.readUint32Big();
|
||||||
|
}
|
||||||
bool b1 = in.readBool();
|
bool b1 = in.readBool();
|
||||||
|
|
||||||
return new CScriptRelay(mgr.AllocateUniqueId(), name, info, b1);
|
return new CScriptRelay(mgr.AllocateUniqueId(), name, info, b1);
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadBeetle(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadBeetle(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 16, "Beetle"))
|
if (!EnsurePropertyCount(propCount, 16, "Beetle")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
CPatterned::EFlavorType flavor = CPatterned::EFlavorType(in.readUint32Big());
|
auto flavor = CPatterned::EFlavorType(in.readUint32Big());
|
||||||
zeus::CTransform xfrm = LoadEditorTransform(in);
|
zeus::CTransform xfrm = LoadEditorTransform(in);
|
||||||
zeus::CVector3f scale = zeus::CVector3f::ReadBig(in);
|
zeus::CVector3f scale = zeus::CVector3f::ReadBig(in);
|
||||||
std::pair<bool, u32> pcount = CPatternedInfo::HasCorrectParameterCount(in);
|
std::pair<bool, u32> pcount = CPatternedInfo::HasCorrectParameterCount(in);
|
||||||
if (!pcount.first)
|
if (!pcount.first) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
CPatternedInfo pInfo(in, pcount.second);
|
CPatternedInfo pInfo(in, pcount.second);
|
||||||
CActorParameters aParams = LoadActorParameters(in);
|
CActorParameters aParams = LoadActorParameters(in);
|
||||||
|
@ -1005,17 +1066,19 @@ CEntity* ScriptLoader::LoadBeetle(CStateManager& mgr, CInputStream& in, int prop
|
||||||
CDamageVulnerability tailVuln(in);
|
CDamageVulnerability tailVuln(in);
|
||||||
CDamageVulnerability platingVuln(in);
|
CDamageVulnerability platingVuln(in);
|
||||||
CAssetId tailModel = in.readUint32Big();
|
CAssetId tailModel = in.readUint32Big();
|
||||||
MP1::CBeetle::EEntranceType entranceType = MP1::CBeetle::EEntranceType(in.readUint32Big());
|
auto entranceType = MP1::CBeetle::EEntranceType(in.readUint32Big());
|
||||||
float initialAttackDelay = in.readFloatBig();
|
float initialAttackDelay = in.readFloatBig();
|
||||||
float retreatTime = in.readFloatBig();
|
float retreatTime = in.readFloatBig();
|
||||||
|
|
||||||
FourCC animType = g_ResFactory->GetResourceTypeById(pInfo.GetAnimationParameters().GetACSFile());
|
FourCC animType = g_ResFactory->GetResourceTypeById(pInfo.GetAnimationParameters().GetACSFile());
|
||||||
if (animType != SBIG('ANCS'))
|
if (animType != SBIG('ANCS')) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::optional<CStaticRes> tailRes;
|
std::optional<CStaticRes> tailRes;
|
||||||
if (flavor == CPatterned::EFlavorType::One)
|
if (flavor == CPatterned::EFlavorType::One) {
|
||||||
tailRes.emplace(CStaticRes(tailModel, scale));
|
tailRes.emplace(CStaticRes(tailModel, scale));
|
||||||
|
}
|
||||||
|
|
||||||
const CAnimationParameters& animParams = pInfo.GetAnimationParameters();
|
const CAnimationParameters& animParams = pInfo.GetAnimationParameters();
|
||||||
CAnimRes animRes(animParams.GetACSFile(), animParams.GetCharacter(), scale, animParams.GetInitialAnimation(), true);
|
CAnimRes animRes(animParams.GetACSFile(), animParams.GetCharacter(), scale, animParams.GetInitialAnimation(), true);
|
||||||
|
@ -1044,12 +1107,13 @@ CEntity* ScriptLoader::LoadHUDMemo(CStateManager& mgr, CInputStream& in, int pro
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadCameraFilterKeyframe(CStateManager& mgr, CInputStream& in, int propCount,
|
CEntity* ScriptLoader::LoadCameraFilterKeyframe(CStateManager& mgr, CInputStream& in, int propCount,
|
||||||
const CEntityInfo& info) {
|
const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 10, "CameraFilterKeyframe"))
|
if (!EnsurePropertyCount(propCount, 10, "CameraFilterKeyframe")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
EFilterType ftype = EFilterType(in.readUint32Big());
|
auto filterType = EFilterType(in.readUint32Big());
|
||||||
EFilterShape shape = EFilterShape(in.readUint32Big());
|
auto shape = EFilterShape(in.readUint32Big());
|
||||||
u32 filterIdx = in.readUint32Big();
|
u32 filterIdx = in.readUint32Big();
|
||||||
u32 unk = in.readUint32Big();
|
u32 unk = in.readUint32Big();
|
||||||
zeus::CColor color;
|
zeus::CColor color;
|
||||||
|
@ -1058,18 +1122,19 @@ CEntity* ScriptLoader::LoadCameraFilterKeyframe(CStateManager& mgr, CInputStream
|
||||||
float timeOut = in.readFloatBig();
|
float timeOut = in.readFloatBig();
|
||||||
CAssetId txtr(in);
|
CAssetId txtr(in);
|
||||||
|
|
||||||
return new CScriptCameraFilterKeyframe(mgr.AllocateUniqueId(), name, info, ftype, shape, filterIdx, unk, color,
|
return new CScriptCameraFilterKeyframe(mgr.AllocateUniqueId(), name, info, filterType, shape, filterIdx, unk, color,
|
||||||
timeIn, timeOut, txtr, active);
|
timeIn, timeOut, txtr, active);
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadCameraBlurKeyframe(CStateManager& mgr, CInputStream& in, int propCount,
|
CEntity* ScriptLoader::LoadCameraBlurKeyframe(CStateManager& mgr, CInputStream& in, int propCount,
|
||||||
const CEntityInfo& info) {
|
const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 7, "CameraBlurKeyframe"))
|
if (!EnsurePropertyCount(propCount, 7, "CameraBlurKeyframe")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
EBlurType type = EBlurType(in.readUint32Big());
|
auto type = EBlurType(in.readUint32Big());
|
||||||
float amount = in.readFloatBig();
|
float amount = in.readFloatBig();
|
||||||
u32 unk = in.readUint32Big();
|
u32 unk = in.readUint32Big();
|
||||||
float timeIn = in.readFloatBig();
|
float timeIn = in.readFloatBig();
|
||||||
|
@ -1084,12 +1149,15 @@ u32 ClassifyVector(const zeus::CVector3f& dir) {
|
||||||
max = (absDir[max] > absDir.z() ? max : 2);
|
max = (absDir[max] > absDir.z() ? max : 2);
|
||||||
|
|
||||||
bool positive = (absDir[max] == dir[max]);
|
bool positive = (absDir[max] == dir[max]);
|
||||||
if (max == 0)
|
if (max == 0) {
|
||||||
return (positive ? 0x08 : 0x04);
|
return (positive ? 0x08 : 0x04);
|
||||||
else if (max == 1)
|
}
|
||||||
|
if (max == 1) {
|
||||||
return (positive ? 0x01 : 0x02);
|
return (positive ? 0x01 : 0x02);
|
||||||
else if (max == 2)
|
}
|
||||||
|
if (max == 2) {
|
||||||
return (positive ? 0x10 : 0x20);
|
return (positive ? 0x10 : 0x20);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1099,18 +1167,24 @@ u32 TransformDamagableTriggerFlags(CStateManager& mgr, TAreaId aId, u32 flags) {
|
||||||
zeus::CTransform rotation = area->GetTransform().getRotation();
|
zeus::CTransform rotation = area->GetTransform().getRotation();
|
||||||
|
|
||||||
u32 ret = 0;
|
u32 ret = 0;
|
||||||
if (flags & 0x01)
|
if ((flags & 0x01) != 0u) {
|
||||||
ret |= ClassifyVector(rotation * zeus::skForward);
|
ret |= ClassifyVector(rotation * zeus::skForward);
|
||||||
if (flags & 0x02)
|
}
|
||||||
|
if ((flags & 0x02) != 0u) {
|
||||||
ret |= ClassifyVector(rotation * zeus::skBack);
|
ret |= ClassifyVector(rotation * zeus::skBack);
|
||||||
if (flags & 0x04)
|
}
|
||||||
|
if ((flags & 0x04) != 0u) {
|
||||||
ret |= ClassifyVector(rotation * zeus::skLeft);
|
ret |= ClassifyVector(rotation * zeus::skLeft);
|
||||||
if (flags & 0x08)
|
}
|
||||||
|
if ((flags & 0x08) != 0u) {
|
||||||
ret |= ClassifyVector(rotation * zeus::skRight);
|
ret |= ClassifyVector(rotation * zeus::skRight);
|
||||||
if (flags & 0x10)
|
}
|
||||||
|
if ((flags & 0x10) != 0u) {
|
||||||
ret |= ClassifyVector(rotation * zeus::skUp);
|
ret |= ClassifyVector(rotation * zeus::skUp);
|
||||||
if (flags & 0x20)
|
}
|
||||||
|
if ((flags & 0x20) != 0u) {
|
||||||
ret |= ClassifyVector(rotation * zeus::skDown);
|
ret |= ClassifyVector(rotation * zeus::skDown);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1130,7 +1204,7 @@ CEntity* ScriptLoader::LoadDamageableTrigger(CStateManager& mgr, CInputStream& i
|
||||||
CAssetId patternTex1 = in.readUint32Big();
|
CAssetId patternTex1 = in.readUint32Big();
|
||||||
CAssetId patternTex2 = in.readUint32Big();
|
CAssetId patternTex2 = in.readUint32Big();
|
||||||
CAssetId colorTex = in.readUint32Big();
|
CAssetId colorTex = in.readUint32Big();
|
||||||
CScriptDamageableTrigger::ECanOrbit canOrbit = CScriptDamageableTrigger::ECanOrbit(in.readBool());
|
auto canOrbit = CScriptDamageableTrigger::ECanOrbit(in.readBool());
|
||||||
bool active = in.readBool();
|
bool active = in.readBool();
|
||||||
CVisorParameters vParms = LoadVisorParameters(in);
|
CVisorParameters vParms = LoadVisorParameters(in);
|
||||||
return new CScriptDamageableTrigger(mgr.AllocateUniqueId(), name, info, position, volume, hInfo, dVuln, triggerFlags,
|
return new CScriptDamageableTrigger(mgr.AllocateUniqueId(), name, info, position, volume, hInfo, dVuln, triggerFlags,
|
||||||
|
@ -1138,8 +1212,9 @@ CEntity* ScriptLoader::LoadDamageableTrigger(CStateManager& mgr, CInputStream& i
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadDebris(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadDebris(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 18, "Debris"))
|
if (!EnsurePropertyCount(propCount, 18, "Debris")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
const SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
const SScaledActorHead head = LoadScaledActorHead(in, mgr);
|
||||||
const float zImpulse = in.readFloatBig();
|
const float zImpulse = in.readFloatBig();
|
||||||
|
@ -1168,8 +1243,9 @@ CEntity* ScriptLoader::LoadDebris(CStateManager& mgr, CInputStream& in, int prop
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadCameraShaker(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadCameraShaker(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 9, "CameraShaker"))
|
if (!EnsurePropertyCount(propCount, 9, "CameraShaker")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
CCameraShakeData shakeData = CCameraShakeData::LoadCameraShakeData(in);
|
CCameraShakeData shakeData = CCameraShakeData::LoadCameraShakeData(in);
|
||||||
|
@ -1179,8 +1255,9 @@ CEntity* ScriptLoader::LoadCameraShaker(CStateManager& mgr, CInputStream& in, in
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadActorKeyframe(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadActorKeyframe(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 7, "ActorKeyframe"))
|
if (!EnsurePropertyCount(propCount, 7, "ActorKeyframe")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
s32 animId = in.readInt32Big();
|
s32 animId = in.readInt32Big();
|
||||||
|
@ -1190,16 +1267,18 @@ CEntity* ScriptLoader::LoadActorKeyframe(CStateManager& mgr, CInputStream& in, i
|
||||||
u32 fadeOut = in.readUint32Big();
|
u32 fadeOut = in.readUint32Big();
|
||||||
float totalPlayback = in.readFloatBig();
|
float totalPlayback = in.readFloatBig();
|
||||||
|
|
||||||
if (animId == -1)
|
if (animId == -1) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptActorKeyframe(mgr.AllocateUniqueId(), name, info, animId, looping, lifetime, false, fadeOut, active,
|
return new CScriptActorKeyframe(mgr.AllocateUniqueId(), name, info, animId, looping, lifetime, false, fadeOut, active,
|
||||||
totalPlayback);
|
totalPlayback);
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadWater(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadWater(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 63, "Water"))
|
if (!EnsurePropertyCount(propCount, 63, "Water")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
zeus::CVector3f position;
|
zeus::CVector3f position;
|
||||||
|
@ -1295,12 +1374,14 @@ CEntity* ScriptLoader::LoadWater(CStateManager& mgr, CInputStream& in, int propC
|
||||||
zeus::CAABox box(-extent * 0.5f, extent * 0.5f);
|
zeus::CAABox box(-extent * 0.5f, extent * 0.5f);
|
||||||
|
|
||||||
CAssetId envBumpMap;
|
CAssetId envBumpMap;
|
||||||
if (!bumpMap.IsValid())
|
if (!bumpMap.IsValid()) {
|
||||||
envBumpMap = _envBumpMap;
|
envBumpMap = _envBumpMap;
|
||||||
|
}
|
||||||
|
|
||||||
CAssetId envMap;
|
CAssetId envMap;
|
||||||
if (!bumpMap.IsValid())
|
if (!bumpMap.IsValid()) {
|
||||||
envMap = _envMap;
|
envMap = _envMap;
|
||||||
|
}
|
||||||
|
|
||||||
return new CScriptWater(mgr, mgr.AllocateUniqueId(), name, info, position, box, dInfo, orientedForce, triggerFlags,
|
return new CScriptWater(mgr, mgr.AllocateUniqueId(), name, info, position, box, dInfo, orientedForce, triggerFlags,
|
||||||
thermalCold, displaySurface, patternMap1, patternMap2, colorMap, bumpMap, envMap, envBumpMap,
|
thermalCold, displaySurface, patternMap1, patternMap2, colorMap, bumpMap, envMap, envBumpMap,
|
||||||
|
@ -1315,11 +1396,12 @@ CEntity* ScriptLoader::LoadWater(CStateManager& mgr, CInputStream& in, int propC
|
||||||
}
|
}
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadWarWasp(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
CEntity* ScriptLoader::LoadWarWasp(CStateManager& mgr, CInputStream& in, int propCount, const CEntityInfo& info) {
|
||||||
if (!EnsurePropertyCount(propCount, 13, "WarWasp"))
|
if (!EnsurePropertyCount(propCount, 13, "WarWasp")) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string name = mgr.HashInstanceName(in);
|
std::string name = mgr.HashInstanceName(in);
|
||||||
CPatterned::EFlavorType flavor = CPatterned::EFlavorType(in.readUint32Big());
|
auto flavor = CPatterned::EFlavorType(in.readUint32Big());
|
||||||
zeus::CTransform xf = LoadEditorTransformPivotOnly(in);
|
zeus::CTransform xf = LoadEditorTransformPivotOnly(in);
|
||||||
zeus::CVector3f scale;
|
zeus::CVector3f scale;
|
||||||
scale.readBig(in);
|
scale.readBig(in);
|
||||||
|
|
Loading…
Reference in New Issue