mirror of https://github.com/AxioDL/metaforce.git
Various imps, completed CCollisionResponse RE
This commit is contained in:
parent
7d33e6ede3
commit
9b62191975
|
@ -6,58 +6,59 @@ namespace DNAParticle
|
||||||
{
|
{
|
||||||
static const std::vector<FourCC> GeneratorTypes =
|
static const std::vector<FourCC> GeneratorTypes =
|
||||||
{
|
{
|
||||||
SBIG('DEFS'),SBIG('CRTS'),SBIG('MTLS'),SBIG('GRAS'),
|
SBIG('NODP'),SBIG('DEFS'),SBIG('CRTS'),SBIG('MTLS'),
|
||||||
SBIG('ICEE'),SBIG('GOOO'),SBIG('WODS'),SBIG('WATR'),
|
SBIG('GRAS'),SBIG('ICEE'),SBIG('GOOO'),SBIG('WODS'),
|
||||||
SBIG('1MUD'),SBIG('1LAV'),SBIG('1SAN'),SBIG('1PRJ'),
|
SBIG('WATR'),SBIG('1MUD'),SBIG('1LAV'),SBIG('1SAN'),
|
||||||
SBIG('DCHR'),SBIG('DCHS'),SBIG('DCSH'),SBIG('DENM'),
|
SBIG('1PRJ'),SBIG('DCHR'),SBIG('DCHS'),SBIG('DCSH'),
|
||||||
SBIG('DESP'),SBIG('DESH'),SBIG('BTLE'),SBIG('WASP'),
|
SBIG('DENM'),SBIG('DESP'),SBIG('DESH'),SBIG('BTLE'),
|
||||||
SBIG('TALP'),SBIG('PTGM'),SBIG('SPIR'),SBIG('FPIR'),
|
SBIG('WASP'),SBIG('TALP'),SBIG('PTGM'),SBIG('SPIR'),
|
||||||
SBIG('FFLE'),SBIG('PARA'),SBIG('BMON'),SBIG('BFLR'),
|
SBIG('FPIR'),SBIG('FFLE'),SBIG('PARA'),SBIG('BMON'),
|
||||||
SBIG('PBOS'),SBIG('IBOS'),SBIG('1SVA'),SBIG('1RPR'),
|
SBIG('BFLR'),SBIG('PBOS'),SBIG('IBOS'),SBIG('1SVA'),
|
||||||
SBIG('1MTR'),SBIG('1PDS'),SBIG('1FLB'),SBIG('1DRN'),
|
SBIG('1RPR'),SBIG('1MTR'),SBIG('1PDS'),SBIG('1FLB'),
|
||||||
SBIG('1MRE'),SBIG('CHOZ'),SBIG('JZAP'),SBIG('1ISE'),
|
SBIG('1DRN'),SBIG('1MRE'),SBIG('CHOZ'),SBIG('JZAP'),
|
||||||
SBIG('1BSE'),SBIG('1ATB'),SBIG('1ATA'),SBIG('BTSP'),
|
SBIG('1ISE'),SBIG('1BSE'),SBIG('1ATB'),SBIG('1ATA'),
|
||||||
SBIG('WWSP'),SBIG('TASP'),SBIG('TGSP'),SBIG('SPSP'),
|
SBIG('BTSP'),SBIG('WWSP'),SBIG('TASP'),SBIG('TGSP'),
|
||||||
SBIG('FPSP'),SBIG('FFSP'),SBIG('PSSP'),SBIG('BMSP'),
|
SBIG('SPSP'),SBIG('FPSP'),SBIG('FFSP'),SBIG('PSSP'),
|
||||||
SBIG('BFSP'),SBIG('PBSP'),SBIG('IBSP'),SBIG('2SVA'),
|
SBIG('BMSP'),SBIG('BFSP'),SBIG('PBSP'),SBIG('IBSP'),
|
||||||
SBIG('2RPR'),SBIG('2MTR'),SBIG('2PDS'),SBIG('2FLB'),
|
SBIG('2SVA'),SBIG('2RPR'),SBIG('2MTR'),SBIG('2PDS'),
|
||||||
SBIG('2DRN'),SBIG('2MRE'),SBIG('CHSP'),SBIG('JZSP'),
|
SBIG('2FLB'),SBIG('2DRN'),SBIG('2MRE'),SBIG('CHSP'),
|
||||||
SBIG('3ISE'),SBIG('3BSE'),SBIG('3ATB'),SBIG('3ATA'),
|
SBIG('JZSP'),SBIG('3ISE'),SBIG('3BSE'),SBIG('3ATB'),
|
||||||
SBIG('BTSH'),SBIG('WWSH'),SBIG('TASH'),SBIG('TGSH'),
|
SBIG('3ATA'),SBIG('BTSH'),SBIG('WWSH'),SBIG('TASH'),
|
||||||
SBIG('SPSH'),SBIG('FPSH'),SBIG('FFSH'),SBIG('PSSH'),
|
SBIG('TGSH'),SBIG('SPSH'),SBIG('FPSH'),SBIG('FFSH'),
|
||||||
SBIG('BMSH'),SBIG('BFSH'),SBIG('PBSH'),SBIG('IBSH'),
|
SBIG('PSSH'),SBIG('BMSH'),SBIG('BFSH'),SBIG('PBSH'),
|
||||||
SBIG('3SVA'),SBIG('3RPR'),SBIG('3MTR'),SBIG('3PDS'),
|
SBIG('IBSH'),SBIG('3SVA'),SBIG('3RPR'),SBIG('3MTR'),
|
||||||
SBIG('3FLB'),SBIG('3DRN'),SBIG('3MRE'),SBIG('CHSH'),
|
SBIG('3PDS'),SBIG('3FLB'),SBIG('3DRN'),SBIG('3MRE'),
|
||||||
SBIG('JZSH'),SBIG('5ISE'),SBIG('5BSE'),SBIG('5ATB'),
|
SBIG('CHSH'),SBIG('JZSH'),SBIG('5ISE'),SBIG('5BSE'),
|
||||||
SBIG('5ATA')
|
SBIG('5ATB'),SBIG('5ATA')
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::vector<FourCC> SFXTypes =
|
static const std::vector<FourCC> SFXTypes =
|
||||||
{
|
{
|
||||||
SBIG('DSFX'),SBIG('CSFX'),SBIG('MSFX'),SBIG('GRFX'),
|
SBIG('DSFX'),SBIG('CSFX'),SBIG('MSFX'),SBIG('GRFX'),
|
||||||
SBIG('ICFX'),SBIG('GOFX'),SBIG('WSFX'),SBIG('WTFX'),
|
SBIG('NSFX'),SBIG('DSFX'),SBIG('CSFX'),SBIG('MSFX'),
|
||||||
SBIG('2MUD'),SBIG('2LAV'),SBIG('2SAN'),SBIG('2PRJ'),
|
SBIG('GRFX'),SBIG('ICFX'),SBIG('GOFX'),SBIG('WSFX'),
|
||||||
SBIG('DCFX'),SBIG('DSFX'),SBIG('DSHX'),SBIG('DEFX'),
|
SBIG('WTFX'),SBIG('2MUD'),SBIG('2LAV'),SBIG('2SAN'),
|
||||||
SBIG('ESFX'),SBIG('SHFX'),SBIG('BEFX'),SBIG('WWFX'),
|
SBIG('2PRJ'),SBIG('DCFX'),SBIG('DSFX'),SBIG('DSHX'),
|
||||||
SBIG('TAFX'),SBIG('GTFX'),SBIG('SPFX'),SBIG('FPFX'),
|
SBIG('DEFX'),SBIG('ESFX'),SBIG('SHFX'),SBIG('BEFX'),
|
||||||
SBIG('FFFX'),SBIG('PAFX'),SBIG('BMFX'),SBIG('BFFX'),
|
SBIG('WWFX'),SBIG('TAFX'),SBIG('GTFX'),SBIG('SPFX'),
|
||||||
SBIG('PBFX'),SBIG('IBFX'),SBIG('4SVA'),SBIG('4RPR'),
|
SBIG('FPFX'),SBIG('FFFX'),SBIG('PAFX'),SBIG('BMFX'),
|
||||||
SBIG('4MTR'),SBIG('4PDS'),SBIG('4FLB'),SBIG('4DRN'),
|
SBIG('BFFX'),SBIG('PBFX'),SBIG('IBFX'),SBIG('4SVA'),
|
||||||
SBIG('4MRE'),SBIG('CZFX'),SBIG('JZAS'),SBIG('2ISE'),
|
SBIG('4RPR'),SBIG('4MTR'),SBIG('4PDS'),SBIG('4FLB'),
|
||||||
SBIG('2BSE'),SBIG('2ATB'),SBIG('2ATA'),SBIG('BSFX'),
|
SBIG('4DRN'),SBIG('4MRE'),SBIG('CZFX'),SBIG('JZAS'),
|
||||||
SBIG('WSFX'),SBIG('TSFX'),SBIG('GSFX'),SBIG('SSFX'),
|
SBIG('2ISE'),SBIG('2BSE'),SBIG('2ATB'),SBIG('2ATA'),
|
||||||
SBIG('FSFX'),SBIG('SFFX'),SBIG('PSFX'),SBIG('MSFX'),
|
SBIG('BSFX'),SBIG('WSFX'),SBIG('TSFX'),SBIG('GSFX'),
|
||||||
SBIG('SBFX'),SBIG('PBSX'),SBIG('IBSX'),SBIG('5SVA'),
|
SBIG('SSFX'),SBIG('FSFX'),SBIG('SFFX'),SBIG('PSFX'),
|
||||||
SBIG('5RPR'),SBIG('5MTR'),SBIG('5PDS'),SBIG('5FLB'),
|
SBIG('MSFX'),SBIG('SBFX'),SBIG('PBSX'),SBIG('IBSX'),
|
||||||
SBIG('5DRN'),SBIG('5MRE'),SBIG('CSFX'),SBIG('JZPS'),
|
SBIG('5SVA'),SBIG('5RPR'),SBIG('5MTR'),SBIG('5PDS'),
|
||||||
SBIG('4ISE'),SBIG('4BSE'),SBIG('4ATB'),SBIG('4ATA'),
|
SBIG('5FLB'),SBIG('5DRN'),SBIG('5MRE'),SBIG('CSFX'),
|
||||||
SBIG('BHFX'),SBIG('WHFX'),SBIG('THFX'),SBIG('GHFX'),
|
SBIG('JZPS'),SBIG('4ISE'),SBIG('4BSE'),SBIG('4ATB'),
|
||||||
SBIG('SHFX'),SBIG('FHFX'),SBIG('HFFX'),SBIG('PHFX'),
|
SBIG('4ATA'),SBIG('BHFX'),SBIG('WHFX'),SBIG('THFX'),
|
||||||
SBIG('MHFX'),SBIG('HBFX'),SBIG('PBHX'),SBIG('IBHX'),
|
SBIG('GHFX'),SBIG('SHFX'),SBIG('FHFX'),SBIG('HFFX'),
|
||||||
SBIG('6SVA'),SBIG('6RPR'),SBIG('6MTR'),SBIG('6PDS'),
|
SBIG('PHFX'),SBIG('MHFX'),SBIG('HBFX'),SBIG('PBHX'),
|
||||||
SBIG('6FLB'),SBIG('6DRN'),SBIG('6MRE'),SBIG('CHFX'),
|
SBIG('IBHX'),SBIG('6SVA'),SBIG('6RPR'),SBIG('6MTR'),
|
||||||
SBIG('JZHS'),SBIG('6ISE'),SBIG('6BSE'),SBIG('6ATB'),
|
SBIG('6PDS'),SBIG('6FLB'),SBIG('6DRN'),SBIG('6MRE'),
|
||||||
SBIG('6ATA')
|
SBIG('CHFX'),SBIG('JZHS'),SBIG('6ISE'),SBIG('6BSE'),
|
||||||
|
SBIG('6ATB'),SBIG('6ATA'),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::vector<FourCC> DecalTypes =
|
static const std::vector<FourCC> DecalTypes =
|
||||||
|
|
|
@ -113,7 +113,7 @@ CStateManager::CStateManager(const std::weak_ptr<CRelayTracker>&,
|
||||||
x904_loaderFuncs[int(EScriptObjectType::FishCloud)] = ScriptLoader::LoadFishCloud;
|
x904_loaderFuncs[int(EScriptObjectType::FishCloud)] = ScriptLoader::LoadFishCloud;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::FishCloudModifier)] = ScriptLoader::LoadFishCloudModifier;
|
x904_loaderFuncs[int(EScriptObjectType::FishCloudModifier)] = ScriptLoader::LoadFishCloudModifier;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::VisorFlare)] = ScriptLoader::LoadVisorFlare;
|
x904_loaderFuncs[int(EScriptObjectType::VisorFlare)] = ScriptLoader::LoadVisorFlare;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::WorldTeleporterx52)] = ScriptLoader::LoadWorldTeleporter;
|
x904_loaderFuncs[int(EScriptObjectType::WorldTeleporter)] = ScriptLoader::LoadWorldTeleporter;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::VisorGoo)] = ScriptLoader::LoadVisorGoo;
|
x904_loaderFuncs[int(EScriptObjectType::VisorGoo)] = ScriptLoader::LoadVisorGoo;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::JellyZap)] = ScriptLoader::LoadJellyZap;
|
x904_loaderFuncs[int(EScriptObjectType::JellyZap)] = ScriptLoader::LoadJellyZap;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::ControllerAction)] = ScriptLoader::LoadControllerAction;
|
x904_loaderFuncs[int(EScriptObjectType::ControllerAction)] = ScriptLoader::LoadControllerAction;
|
||||||
|
@ -128,7 +128,7 @@ CStateManager::CStateManager(const std::weak_ptr<CRelayTracker>&,
|
||||||
x904_loaderFuncs[int(EScriptObjectType::ThardusRockProjectile)] = ScriptLoader::LoadThardusRockProjectile;
|
x904_loaderFuncs[int(EScriptObjectType::ThardusRockProjectile)] = ScriptLoader::LoadThardusRockProjectile;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::Midi)] = ScriptLoader::LoadMidi;
|
x904_loaderFuncs[int(EScriptObjectType::Midi)] = ScriptLoader::LoadMidi;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::StreamedAudio)] = ScriptLoader::LoadStreamedAudio;
|
x904_loaderFuncs[int(EScriptObjectType::StreamedAudio)] = ScriptLoader::LoadStreamedAudio;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::WorldTeleporterx62)] = ScriptLoader::LoadWorldTeleporter;
|
x904_loaderFuncs[int(EScriptObjectType::WorldTeleporterToo)] = ScriptLoader::LoadWorldTeleporter;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::Repulsor)] = ScriptLoader::LoadRepulsor;
|
x904_loaderFuncs[int(EScriptObjectType::Repulsor)] = ScriptLoader::LoadRepulsor;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::GunTurret)] = ScriptLoader::LoadGunTurret;
|
x904_loaderFuncs[int(EScriptObjectType::GunTurret)] = ScriptLoader::LoadGunTurret;
|
||||||
x904_loaderFuncs[int(EScriptObjectType::FogVolume)] = ScriptLoader::LoadFogVolume;
|
x904_loaderFuncs[int(EScriptObjectType::FogVolume)] = ScriptLoader::LoadFogVolume;
|
||||||
|
@ -408,7 +408,7 @@ void CStateManager::InitScriptObjects(std::vector<TEditorId>& ids)
|
||||||
if (id == kInvalidEditorId)
|
if (id == kInvalidEditorId)
|
||||||
continue;
|
continue;
|
||||||
TUniqueId uid = GetIdForScript(id);
|
TUniqueId uid = GetIdForScript(id);
|
||||||
SendScriptMsg(uid, kInvalidUniqueId, EScriptObjectMessage::UNKM15);
|
SendScriptMsg(uid, kInvalidUniqueId, EScriptObjectMessage::InternalMessage13);
|
||||||
}
|
}
|
||||||
MurderScriptInstanceNames();
|
MurderScriptInstanceNames();
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,7 @@ class CStateManager
|
||||||
std::map<TEditorId, SScriptObjectStream> x8a4_loadedScriptObjects;
|
std::map<TEditorId, SScriptObjectStream> x8a4_loadedScriptObjects;
|
||||||
|
|
||||||
std::shared_ptr<CPlayerState> x8b8_playerState;
|
std::shared_ptr<CPlayerState> x8b8_playerState;
|
||||||
std::shared_ptr<CRelayTracker> x8bc_scriptMailbox;
|
std::shared_ptr<CRelayTracker> x8bc_relayTracker;
|
||||||
std::shared_ptr<CMapWorldInfo> x8c0_mapWorldInfo;
|
std::shared_ptr<CMapWorldInfo> x8c0_mapWorldInfo;
|
||||||
std::shared_ptr<CWorldTransManager> x8c4_worldTransManager;
|
std::shared_ptr<CWorldTransManager> x8c4_worldTransManager;
|
||||||
|
|
||||||
|
@ -206,6 +206,7 @@ public:
|
||||||
void FrameBegin();
|
void FrameBegin();
|
||||||
void InitializeState(u32, TAreaId, u32);
|
void InitializeState(u32, TAreaId, u32);
|
||||||
void CreateStandardGameObjects();
|
void CreateStandardGameObjects();
|
||||||
|
const std::unique_ptr<CObjectList>& GetObjectList() const { return x80c_allObjs; }
|
||||||
CObjectList* ObjectListById(EGameObjectList type);
|
CObjectList* ObjectListById(EGameObjectList type);
|
||||||
const CObjectList* GetObjectListById(EGameObjectList type) const;
|
const CObjectList* GetObjectListById(EGameObjectList type) const;
|
||||||
void RemoveObject(TUniqueId);
|
void RemoveObject(TUniqueId);
|
||||||
|
@ -244,6 +245,7 @@ public:
|
||||||
CCameraFilterPass& GetCameraFilterPass(int idx) {return xaf8_camFilterPasses[idx];}
|
CCameraFilterPass& GetCameraFilterPass(int idx) {return xaf8_camFilterPasses[idx];}
|
||||||
|
|
||||||
CWorld* GetWorld() {return x850_world.get();}
|
CWorld* GetWorld() {return x850_world.get();}
|
||||||
|
CRelayTracker* GetRelayTracker() { return x8bc_relayTracker.get(); }
|
||||||
|
|
||||||
std::shared_ptr<CMapWorldInfo> MapWorldInfo() { return x8c0_mapWorldInfo; }
|
std::shared_ptr<CMapWorldInfo> MapWorldInfo() { return x8c0_mapWorldInfo; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,9 +8,15 @@ namespace urde
|
||||||
enum class EMaterialTypes
|
enum class EMaterialTypes
|
||||||
{
|
{
|
||||||
Zero = 0,
|
Zero = 0,
|
||||||
|
One = 1,
|
||||||
|
Two = 2,
|
||||||
Three = 3,
|
Three = 3,
|
||||||
|
Four = 4,
|
||||||
|
Five = 5,
|
||||||
Six = 6,
|
Six = 6,
|
||||||
|
Seven = 7,
|
||||||
Eight = 8,
|
Eight = 8,
|
||||||
|
Nine = 9,
|
||||||
Ten = 10,
|
Ten = 10,
|
||||||
Eleven = 11,
|
Eleven = 11,
|
||||||
Twelve = 12,
|
Twelve = 12,
|
||||||
|
@ -23,6 +29,8 @@ enum class EMaterialTypes
|
||||||
ThirtyThree = 33,
|
ThirtyThree = 33,
|
||||||
ThirtyFour = 34,
|
ThirtyFour = 34,
|
||||||
ThirtySeven = 37,
|
ThirtySeven = 37,
|
||||||
|
ThirtyEight = 38,
|
||||||
|
ThirtyNine = 39,
|
||||||
Fourty = 40,
|
Fourty = 40,
|
||||||
FourtyOne = 41,
|
FourtyOne = 41,
|
||||||
FourtyTwo = 42,
|
FourtyTwo = 42,
|
||||||
|
|
|
@ -10,61 +10,101 @@
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
static const std::vector<FourCC> SFXTypes =
|
const EWeaponCollisionResponseTypes CCollisionResponseData::skWorldMaterialTable[32] =
|
||||||
{
|
{
|
||||||
SBIG('DSFX'),SBIG('CSFX'),SBIG('MSFX'),SBIG('GRFX'),
|
EWeaponCollisionResponseTypes::Default,
|
||||||
SBIG('ICFX'),SBIG('GOFX'),SBIG('WSFX'),SBIG('WTFX'),
|
EWeaponCollisionResponseTypes::Unknown2,
|
||||||
SBIG('2MUD'),SBIG('2LAV'),SBIG('2SAN'),SBIG('2PRJ'),
|
EWeaponCollisionResponseTypes::Metal,
|
||||||
SBIG('DCFX'),SBIG('DSFX'),SBIG('DSHX'),SBIG('DEFX'),
|
EWeaponCollisionResponseTypes::Grass,
|
||||||
SBIG('ESFX'),SBIG('SHFX'),SBIG('BEFX'),SBIG('WWFX'),
|
EWeaponCollisionResponseTypes::Ice,
|
||||||
SBIG('TAFX'),SBIG('GTFX'),SBIG('SPFX'),SBIG('FPFX'),
|
EWeaponCollisionResponseTypes::Goo,
|
||||||
SBIG('FFFX'),SBIG('PAFX'),SBIG('BMFX'),SBIG('BFFX'),
|
EWeaponCollisionResponseTypes::Metal,
|
||||||
SBIG('PBFX'),SBIG('IBFX'),SBIG('4SVA'),SBIG('4RPR'),
|
EWeaponCollisionResponseTypes::Wood,
|
||||||
SBIG('4MTR'),SBIG('4PDS'),SBIG('4FLB'),SBIG('4DRN'),
|
EWeaponCollisionResponseTypes::Grass,
|
||||||
SBIG('4MRE'),SBIG('CZFX'),SBIG('JZAS'),SBIG('2ISE'),
|
EWeaponCollisionResponseTypes::Lava,
|
||||||
SBIG('2BSE'),SBIG('2ATB'),SBIG('2ATA'),SBIG('BSFX'),
|
EWeaponCollisionResponseTypes::Lava,
|
||||||
SBIG('WSFX'),SBIG('TSFX'),SBIG('GSFX'),SBIG('SSFX'),
|
EWeaponCollisionResponseTypes::Ice,
|
||||||
SBIG('FSFX'),SBIG('SFFX'),SBIG('PSFX'),SBIG('MSFX'),
|
EWeaponCollisionResponseTypes::Mud,
|
||||||
SBIG('SBFX'),SBIG('PBSX'),SBIG('IBSX'),SBIG('5SVA'),
|
EWeaponCollisionResponseTypes::Metal,
|
||||||
SBIG('5RPR'),SBIG('5MTR'),SBIG('5PDS'),SBIG('5FLB'),
|
EWeaponCollisionResponseTypes::Default,
|
||||||
SBIG('5DRN'),SBIG('5MRE'),SBIG('CSFX'),SBIG('JZPS'),
|
EWeaponCollisionResponseTypes::Goo,
|
||||||
SBIG('4ISE'),SBIG('4BSE'),SBIG('4ATB'),SBIG('4ATA'),
|
EWeaponCollisionResponseTypes::Goo,
|
||||||
SBIG('BHFX'),SBIG('WHFX'),SBIG('THFX'),SBIG('GHFX'),
|
EWeaponCollisionResponseTypes::Sand,
|
||||||
SBIG('SHFX'),SBIG('FHFX'),SBIG('HFFX'),SBIG('PHFX'),
|
EWeaponCollisionResponseTypes::Default,
|
||||||
SBIG('MHFX'),SBIG('HBFX'),SBIG('PBHX'),SBIG('IBHX'),
|
EWeaponCollisionResponseTypes::Default,
|
||||||
SBIG('6SVA'),SBIG('6RPR'),SBIG('6MTR'),SBIG('6PDS'),
|
EWeaponCollisionResponseTypes::Default,
|
||||||
SBIG('6FLB'),SBIG('6DRN'),SBIG('6MRE'),SBIG('CHFX'),
|
EWeaponCollisionResponseTypes::Metal,
|
||||||
SBIG('JZHS'),SBIG('6ISE'),SBIG('6BSE'),SBIG('6ATB'),
|
EWeaponCollisionResponseTypes::Default,
|
||||||
SBIG('6ATA')
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
|
EWeaponCollisionResponseTypes::Default,
|
||||||
};
|
};
|
||||||
static const std::vector<FourCC> GeneratorTypes =
|
|
||||||
|
const s32 CCollisionResponseData::kInvalidSFX = -1;
|
||||||
|
|
||||||
|
static const std::vector<FourCC> kWCRTSFXIDs =
|
||||||
{
|
{
|
||||||
SBIG('DEFS'),SBIG('CRTS'),SBIG('MTLS'),SBIG('GRAS'),
|
SBIG('NSFX'),SBIG('DSFX'),SBIG('CSFX'),SBIG('MSFX'),
|
||||||
SBIG('ICEE'),SBIG('GOOO'),SBIG('WODS'),SBIG('WATR'),
|
SBIG('GRFX'),SBIG('ICFX'),SBIG('GOFX'),SBIG('WSFX'),
|
||||||
SBIG('1MUD'),SBIG('1LAV'),SBIG('1SAN'),SBIG('1PRJ'),
|
SBIG('WTFX'),SBIG('2MUD'),SBIG('2LAV'),SBIG('2SAN'),
|
||||||
SBIG('DCHR'),SBIG('DCHS'),SBIG('DCSH'),SBIG('DENM'),
|
SBIG('2PRJ'),SBIG('DCFX'),SBIG('DSFX'),SBIG('DSHX'),
|
||||||
SBIG('DESP'),SBIG('DESH'),SBIG('BTLE'),SBIG('WASP'),
|
SBIG('DEFX'),SBIG('ESFX'),SBIG('SHFX'),SBIG('BEFX'),
|
||||||
SBIG('TALP'),SBIG('PTGM'),SBIG('SPIR'),SBIG('FPIR'),
|
SBIG('WWFX'),SBIG('TAFX'),SBIG('GTFX'),SBIG('SPFX'),
|
||||||
SBIG('FFLE'),SBIG('PARA'),SBIG('BMON'),SBIG('BFLR'),
|
SBIG('FPFX'),SBIG('FFFX'),SBIG('PAFX'),SBIG('BMFX'),
|
||||||
SBIG('PBOS'),SBIG('IBOS'),SBIG('1SVA'),SBIG('1RPR'),
|
SBIG('BFFX'),SBIG('PBFX'),SBIG('IBFX'),SBIG('4SVA'),
|
||||||
SBIG('1MTR'),SBIG('1PDS'),SBIG('1FLB'),SBIG('1DRN'),
|
SBIG('4RPR'),SBIG('4MTR'),SBIG('4PDS'),SBIG('4FLB'),
|
||||||
SBIG('1MRE'),SBIG('CHOZ'),SBIG('JZAP'),SBIG('1ISE'),
|
SBIG('4DRN'),SBIG('4MRE'),SBIG('CZFX'),SBIG('JZAS'),
|
||||||
SBIG('1BSE'),SBIG('1ATB'),SBIG('1ATA'),SBIG('BTSP'),
|
SBIG('2ISE'),SBIG('2BSE'),SBIG('2ATB'),SBIG('2ATA'),
|
||||||
SBIG('WWSP'),SBIG('TASP'),SBIG('TGSP'),SBIG('SPSP'),
|
SBIG('BSFX'),SBIG('WSFX'),SBIG('TSFX'),SBIG('GSFX'),
|
||||||
SBIG('FPSP'),SBIG('FFSP'),SBIG('PSSP'),SBIG('BMSP'),
|
SBIG('SSFX'),SBIG('FSFX'),SBIG('SFFX'),SBIG('PSFX'),
|
||||||
SBIG('BFSP'),SBIG('PBSP'),SBIG('IBSP'),SBIG('2SVA'),
|
SBIG('MSFX'),SBIG('SBFX'),SBIG('PBSX'),SBIG('IBSX'),
|
||||||
SBIG('2RPR'),SBIG('2MTR'),SBIG('2PDS'),SBIG('2FLB'),
|
SBIG('5SVA'),SBIG('5RPR'),SBIG('5MTR'),SBIG('5PDS'),
|
||||||
SBIG('2DRN'),SBIG('2MRE'),SBIG('CHSP'),SBIG('JZSP'),
|
SBIG('5FLB'),SBIG('5DRN'),SBIG('5MRE'),SBIG('CSFX'),
|
||||||
SBIG('3ISE'),SBIG('3BSE'),SBIG('3ATB'),SBIG('3ATA'),
|
SBIG('JZPS'),SBIG('4ISE'),SBIG('4BSE'),SBIG('4ATB'),
|
||||||
SBIG('BTSH'),SBIG('WWSH'),SBIG('TASH'),SBIG('TGSH'),
|
SBIG('4ATA'),SBIG('BHFX'),SBIG('WHFX'),SBIG('THFX'),
|
||||||
SBIG('SPSH'),SBIG('FPSH'),SBIG('FFSH'),SBIG('PSSH'),
|
SBIG('GHFX'),SBIG('SHFX'),SBIG('FHFX'),SBIG('HFFX'),
|
||||||
SBIG('BMSH'),SBIG('BFSH'),SBIG('PBSH'),SBIG('IBSH'),
|
SBIG('PHFX'),SBIG('MHFX'),SBIG('HBFX'),SBIG('PBHX'),
|
||||||
SBIG('3SVA'),SBIG('3RPR'),SBIG('3MTR'),SBIG('3PDS'),
|
SBIG('IBHX'),SBIG('6SVA'),SBIG('6RPR'),SBIG('6MTR'),
|
||||||
SBIG('3FLB'),SBIG('3DRN'),SBIG('3MRE'),SBIG('CHSH'),
|
SBIG('6PDS'),SBIG('6FLB'),SBIG('6DRN'),SBIG('6MRE'),
|
||||||
SBIG('JZSH'),SBIG('5ISE'),SBIG('5BSE'),SBIG('5ATB'),
|
SBIG('CHFX'),SBIG('JZHS'),SBIG('6ISE'),SBIG('6BSE'),
|
||||||
SBIG('5ATA')
|
SBIG('6ATB'),SBIG('6ATA'),
|
||||||
};
|
};
|
||||||
static const std::vector<FourCC> DecalTypes =
|
|
||||||
|
static const std::vector<FourCC> kWCRTIDs =
|
||||||
|
{
|
||||||
|
SBIG('NODP'),SBIG('DEFS'),SBIG('CRTS'),SBIG('MTLS'),
|
||||||
|
SBIG('GRAS'),SBIG('ICEE'),SBIG('GOOO'),SBIG('WODS'),
|
||||||
|
SBIG('WATR'),SBIG('1MUD'),SBIG('1LAV'),SBIG('1SAN'),
|
||||||
|
SBIG('1PRJ'),SBIG('DCHR'),SBIG('DCHS'),SBIG('DCSH'),
|
||||||
|
SBIG('DENM'),SBIG('DESP'),SBIG('DESH'),SBIG('BTLE'),
|
||||||
|
SBIG('WASP'),SBIG('TALP'),SBIG('PTGM'),SBIG('SPIR'),
|
||||||
|
SBIG('FPIR'),SBIG('FFLE'),SBIG('PARA'),SBIG('BMON'),
|
||||||
|
SBIG('BFLR'),SBIG('PBOS'),SBIG('IBOS'),SBIG('1SVA'),
|
||||||
|
SBIG('1RPR'),SBIG('1MTR'),SBIG('1PDS'),SBIG('1FLB'),
|
||||||
|
SBIG('1DRN'),SBIG('1MRE'),SBIG('CHOZ'),SBIG('JZAP'),
|
||||||
|
SBIG('1ISE'),SBIG('1BSE'),SBIG('1ATB'),SBIG('1ATA'),
|
||||||
|
SBIG('BTSP'),SBIG('WWSP'),SBIG('TASP'),SBIG('TGSP'),
|
||||||
|
SBIG('SPSP'),SBIG('FPSP'),SBIG('FFSP'),SBIG('PSSP'),
|
||||||
|
SBIG('BMSP'),SBIG('BFSP'),SBIG('PBSP'),SBIG('IBSP'),
|
||||||
|
SBIG('2SVA'),SBIG('2RPR'),SBIG('2MTR'),SBIG('2PDS'),
|
||||||
|
SBIG('2FLB'),SBIG('2DRN'),SBIG('2MRE'),SBIG('CHSP'),
|
||||||
|
SBIG('JZSP'),SBIG('3ISE'),SBIG('3BSE'),SBIG('3ATB'),
|
||||||
|
SBIG('3ATA'),SBIG('BTSH'),SBIG('WWSH'),SBIG('TASH'),
|
||||||
|
SBIG('TGSH'),SBIG('SPSH'),SBIG('FPSH'),SBIG('FFSH'),
|
||||||
|
SBIG('PSSH'),SBIG('BMSH'),SBIG('BFSH'),SBIG('PBSH'),
|
||||||
|
SBIG('IBSH'),SBIG('3SVA'),SBIG('3RPR'),SBIG('3MTR'),
|
||||||
|
SBIG('3PDS'),SBIG('3FLB'),SBIG('3DRN'),SBIG('3MRE'),
|
||||||
|
SBIG('CHSH'),SBIG('JZSH'),SBIG('5ISE'),SBIG('5BSE'),
|
||||||
|
SBIG('5ATB'),SBIG('5ATA')
|
||||||
|
};
|
||||||
|
|
||||||
|
static const std::vector<FourCC> kWCRTDecalIDs =
|
||||||
{
|
{
|
||||||
SBIG('NCDL'),SBIG('DDCL'),SBIG('CODL'),SBIG('MEDL'),
|
SBIG('NCDL'),SBIG('DDCL'),SBIG('CODL'),SBIG('MEDL'),
|
||||||
SBIG('GRDL'),SBIG('ICDL'),SBIG('GODL'),SBIG('WODL'),
|
SBIG('GRDL'),SBIG('ICDL'),SBIG('GODL'),SBIG('WODL'),
|
||||||
|
@ -85,7 +125,7 @@ void CCollisionResponseData::AddParticleSystemToResponse(EWeaponCollisionRespons
|
||||||
bool CCollisionResponseData::CheckAndAddDecalToResponse(FourCC clsId, CInputStream& in, CSimplePool* resPool)
|
bool CCollisionResponseData::CheckAndAddDecalToResponse(FourCC clsId, CInputStream& in, CSimplePool* resPool)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (const FourCC& type : DecalTypes)
|
for (const FourCC& type : kWCRTDecalIDs)
|
||||||
{
|
{
|
||||||
if (type == clsId)
|
if (type == clsId)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +148,7 @@ bool CCollisionResponseData::CheckAndAddDecalToResponse(FourCC clsId, CInputStre
|
||||||
bool CCollisionResponseData::CheckAndAddSoundFXToResponse(FourCC clsId, CInputStream& in)
|
bool CCollisionResponseData::CheckAndAddSoundFXToResponse(FourCC clsId, CInputStream& in)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (const FourCC& type : SFXTypes)
|
for (const FourCC& type : kWCRTSFXIDs)
|
||||||
{
|
{
|
||||||
if (type == clsId)
|
if (type == clsId)
|
||||||
{
|
{
|
||||||
|
@ -128,7 +168,7 @@ bool CCollisionResponseData::CheckAndAddSoundFXToResponse(FourCC clsId, CInputSt
|
||||||
bool CCollisionResponseData::CheckAndAddParticleSystemToResponse(FourCC clsId, CInputStream& in, CSimplePool* resPool)
|
bool CCollisionResponseData::CheckAndAddParticleSystemToResponse(FourCC clsId, CInputStream& in, CSimplePool* resPool)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (const FourCC& type : GeneratorTypes)
|
for (const FourCC& type : kWCRTIDs)
|
||||||
{
|
{
|
||||||
if (type == clsId)
|
if (type == clsId)
|
||||||
{
|
{
|
||||||
|
@ -158,11 +198,11 @@ CCollisionResponseData::CCollisionResponseData(CInputStream& in, CSimplePool* re
|
||||||
x0_generators.resize(94);
|
x0_generators.resize(94);
|
||||||
x10_sfx.resize(94);
|
x10_sfx.resize(94);
|
||||||
x20_decals.resize(94);
|
x20_decals.resize(94);
|
||||||
for (ResId& id : x10_sfx)
|
for (s32& id : x10_sfx)
|
||||||
id = ~0;
|
id = kInvalidSFX;
|
||||||
|
|
||||||
FourCC clsId = CPF::GetClassID(in);
|
FourCC clsId = CPF::GetClassID(in);
|
||||||
if (clsId == SBIG('CRSM'))
|
if (clsId == UncookedResType())
|
||||||
{
|
{
|
||||||
CRandom16 rand{99};
|
CRandom16 rand{99};
|
||||||
CGlobalRandom gr(rand);
|
CGlobalRandom gr(rand);
|
||||||
|
@ -187,6 +227,61 @@ CCollisionResponseData::CCollisionResponseData(CInputStream& in, CSimplePool* re
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rstl::optional_object<TLockedToken<CGenDescription>>& CCollisionResponseData::GetParticleDescription(EWeaponCollisionResponseTypes type) const
|
||||||
|
{
|
||||||
|
return x0_generators[u32(type)];
|
||||||
|
}
|
||||||
|
|
||||||
|
const rstl::optional_object<TLockedToken<CDecalDescription>>& CCollisionResponseData::GetDecalDescription(EWeaponCollisionResponseTypes type) const
|
||||||
|
{
|
||||||
|
return x20_decals[u32(type)];
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 CCollisionResponseData::GetSoundEffectId(EWeaponCollisionResponseTypes type) const
|
||||||
|
{
|
||||||
|
if (x10_sfx[u32(type)] == kInvalidSFX)
|
||||||
|
{
|
||||||
|
if (ResponseTypeIsEnemyNormal(type))
|
||||||
|
type = EWeaponCollisionResponseTypes::EnemyNormal;
|
||||||
|
else if (ResponseTypeIsEnemySpecial(type))
|
||||||
|
type = EWeaponCollisionResponseTypes::EnemySpecial;
|
||||||
|
else if (ResponseTypeIsEnemyShielded(type))
|
||||||
|
type = EWeaponCollisionResponseTypes::EnemyShielded;
|
||||||
|
else
|
||||||
|
type = EWeaponCollisionResponseTypes::Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
return x10_sfx[u32(type)];
|
||||||
|
}
|
||||||
|
|
||||||
|
EWeaponCollisionResponseTypes CCollisionResponseData::GetWorldCollisionResponseType(s32 id)
|
||||||
|
{
|
||||||
|
if (id < 0 || id >= 32)
|
||||||
|
return EWeaponCollisionResponseTypes::Default;
|
||||||
|
|
||||||
|
return skWorldMaterialTable[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CCollisionResponseData::ResponseTypeIsEnemyNormal(EWeaponCollisionResponseTypes type)
|
||||||
|
{
|
||||||
|
return (type >= EWeaponCollisionResponseTypes::Unknown19 && type <= EWeaponCollisionResponseTypes::Unknown43);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CCollisionResponseData::ResponseTypeIsEnemySpecial(EWeaponCollisionResponseTypes type)
|
||||||
|
{
|
||||||
|
return (type >= EWeaponCollisionResponseTypes::Unknown44 && type <= EWeaponCollisionResponseTypes::Unknown68);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CCollisionResponseData::ResponseTypeIsEnemyShielded(EWeaponCollisionResponseTypes type)
|
||||||
|
{
|
||||||
|
return (type >= EWeaponCollisionResponseTypes::Unknown69 && type <= EWeaponCollisionResponseTypes::Unknown93);
|
||||||
|
}
|
||||||
|
|
||||||
|
FourCC CCollisionResponseData::UncookedResType()
|
||||||
|
{
|
||||||
|
return SBIG('CRSM');
|
||||||
|
}
|
||||||
|
|
||||||
CFactoryFnReturn FCollisionResponseDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms)
|
CFactoryFnReturn FCollisionResponseDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms)
|
||||||
{
|
{
|
||||||
CSimplePool* sp = static_cast<CSimplePool*>(static_cast<TObjOwnerParam<IObjectStore*>*>(vparms.GetObj())->GetParam());
|
CSimplePool* sp = static_cast<CSimplePool*>(static_cast<TObjOwnerParam<IObjectStore*>*>(vparms.GetObj())->GetParam());
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
#define __URDE_CCOLLISIONRESPONSEDATA_HPP__
|
#define __URDE_CCOLLISIONRESPONSEDATA_HPP__
|
||||||
|
|
||||||
#include "RetroTypes.hpp"
|
#include "RetroTypes.hpp"
|
||||||
|
#include "Collision/CMaterialList.hpp"
|
||||||
#include "CFactoryMgr.hpp"
|
#include "CFactoryMgr.hpp"
|
||||||
#include "IObj.hpp"
|
#include "IObj.hpp"
|
||||||
#include "CToken.hpp"
|
#include "CToken.hpp"
|
||||||
#include "IOStreams.hpp"
|
#include "IOStreams.hpp"
|
||||||
#include "optional.hpp"
|
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -16,11 +16,11 @@ class CDecalDescription;
|
||||||
|
|
||||||
enum class EWeaponCollisionResponseTypes
|
enum class EWeaponCollisionResponseTypes
|
||||||
{
|
{
|
||||||
Default, Unknown1, Metal, Grass,
|
None, Default, Unknown2, Metal,
|
||||||
Ice, Goo, Wood, Water,
|
Grass, Ice, Goo, Wood,
|
||||||
Mud, Lava, Sand,Unknown11,
|
Water, Mud, Lava, Sand,
|
||||||
Unknown12,Unknown13,Unknown14,Unknown15,
|
Unknown12,Unknown13,Unknown14,Unknown15,
|
||||||
Unknown16,Unknown17,Unknown18,Unknown19,
|
EnemyNormal,EnemySpecial,EnemyShielded,Unknown19,
|
||||||
Unknown20,Unknown21,Unknown22,Unknown23,
|
Unknown20,Unknown21,Unknown22,Unknown23,
|
||||||
Unknown24,Unknown25,Unknown26,Unknown27,
|
Unknown24,Unknown25,Unknown26,Unknown27,
|
||||||
Unknown28,Unknown29,Unknown30,Unknown31,
|
Unknown28,Unknown29,Unknown30,Unknown31,
|
||||||
|
@ -39,15 +39,16 @@ enum class EWeaponCollisionResponseTypes
|
||||||
Unknown80,Unknown81,Unknown82,Unknown83,
|
Unknown80,Unknown81,Unknown82,Unknown83,
|
||||||
Unknown84,Unknown85,Unknown86,Unknown87,
|
Unknown84,Unknown85,Unknown86,Unknown87,
|
||||||
Unknown88,Unknown89,Unknown90,Unknown91,
|
Unknown88,Unknown89,Unknown90,Unknown91,
|
||||||
Unknown92
|
Unknown92,Unknown93
|
||||||
};
|
};
|
||||||
|
|
||||||
class CCollisionResponseData
|
class CCollisionResponseData
|
||||||
{
|
{
|
||||||
|
static const EWeaponCollisionResponseTypes skWorldMaterialTable[32];
|
||||||
std::vector<std::experimental::optional<TLockedToken<CGenDescription>>> x0_generators;
|
static const s32 kInvalidSFX;
|
||||||
std::vector<ResId> x10_sfx;
|
std::vector<rstl::optional_object<TLockedToken<CGenDescription>>> x0_generators;
|
||||||
std::vector<std::experimental::optional<TLockedToken<CDecalDescription>>> x20_decals;
|
std::vector<s32> x10_sfx;
|
||||||
|
std::vector<rstl::optional_object<TLockedToken<CDecalDescription>>> x20_decals;
|
||||||
float x30_RNGE;
|
float x30_RNGE;
|
||||||
float x34_FOFF;
|
float x34_FOFF;
|
||||||
|
|
||||||
|
@ -58,6 +59,16 @@ class CCollisionResponseData
|
||||||
bool CheckAndAddResourceToResponse(FourCC clsId, CInputStream& in, CSimplePool* resPool);
|
bool CheckAndAddResourceToResponse(FourCC clsId, CInputStream& in, CSimplePool* resPool);
|
||||||
public:
|
public:
|
||||||
CCollisionResponseData(CInputStream& in, CSimplePool* resPool);
|
CCollisionResponseData(CInputStream& in, CSimplePool* resPool);
|
||||||
|
const rstl::optional_object<TLockedToken<CGenDescription>>& GetParticleDescription(EWeaponCollisionResponseTypes) const;
|
||||||
|
const rstl::optional_object<TLockedToken<CDecalDescription>>& GetDecalDescription(EWeaponCollisionResponseTypes type) const;
|
||||||
|
s32 GetSoundEffectId(EWeaponCollisionResponseTypes) const;
|
||||||
|
EWeaponCollisionResponseTypes GetWorldCollisionResponseType(s32);
|
||||||
|
static bool ResponseTypeIsEnemyShielded(EWeaponCollisionResponseTypes);
|
||||||
|
static bool ResponseTypeIsEnemyNormal(EWeaponCollisionResponseTypes);
|
||||||
|
static bool ResponseTypeIsEnemySpecial(EWeaponCollisionResponseTypes);
|
||||||
|
float GetAudibleRange() const { return x30_RNGE; }
|
||||||
|
float GetAudibleFallOff() const { return x34_FOFF; }
|
||||||
|
static FourCC UncookedResType();
|
||||||
};
|
};
|
||||||
|
|
||||||
CFactoryFnReturn FCollisionResponseDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms);
|
CFactoryFnReturn FCollisionResponseDataFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms);
|
||||||
|
|
|
@ -41,24 +41,24 @@ void CActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateMana
|
||||||
case EScriptObjectMessage::Decrement:
|
case EScriptObjectMessage::Decrement:
|
||||||
RemoveEmitter();
|
RemoveEmitter();
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::UNKM13: // 33
|
case EScriptObjectMessage::InternalMessage11: // 33
|
||||||
{
|
{
|
||||||
/* TODO: What's x98_?
|
/*
|
||||||
if (x98_)
|
if (x94_simpleShadow)
|
||||||
AddMaterial(EMaterialTypes::ThirtyNine, mgr);
|
AddMaterial(EMaterialTypes::ThirtyNine, mgr);
|
||||||
else
|
else
|
||||||
RemoveMaterial(EMaterialTypes::ThirtyNine, mgr);
|
RemoveMaterial(EMaterialTypes::ThirtyNine, mgr);
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
|
|
||||||
if (HasModelData() && x64_modelData->AnimationData())
|
if (HasModelData() && x64_modelData->AnimationData())
|
||||||
{
|
{
|
||||||
TAreaId aid = GetCurrentAreaId();
|
TAreaId aid = GetAreaId();
|
||||||
x64_modelData->AnimationData()->sub_8002AE6C(mgr, aid, x64_modelData->x0_particleScale);
|
//x64_modelData->AnimationData()->sub_8002AE6C(mgr, aid, x64_modelData->x0_particleScale);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::UNKM14: // 34
|
case EScriptObjectMessage::InternalMessage13: // 34
|
||||||
{
|
{
|
||||||
RemoveEmitter();
|
RemoveEmitter();
|
||||||
/* TODO: Not sure about this
|
/* TODO: Not sure about this
|
||||||
|
@ -67,7 +67,7 @@ void CActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateMana
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::UNKM15: // 35
|
case EScriptObjectMessage::InternalMessage14: // 35
|
||||||
{
|
{
|
||||||
for (const SConnection& conn : x20_conns)
|
for (const SConnection& conn : x20_conns)
|
||||||
{
|
{
|
||||||
|
@ -80,10 +80,10 @@ void CActor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateMana
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::UNKM17: // 37
|
case EScriptObjectMessage::InternalMessage16: // 37
|
||||||
SetInFluid(true, uid);
|
SetInFluid(true, uid);
|
||||||
break;
|
break;
|
||||||
case EScriptObjectMessage::UNKM19: // 39
|
case EScriptObjectMessage::InternalMessage18: // 39
|
||||||
SetInFluid(false, kInvalidUniqueId);
|
SetInFluid(false, kInvalidUniqueId);
|
||||||
break;
|
break;
|
||||||
default:break;
|
default:break;
|
||||||
|
|
|
@ -63,7 +63,7 @@ public:
|
||||||
x30_24_active ^= 1;
|
x30_24_active ^= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAreaId GetCurrentAreaId() const
|
TAreaId GetAreaId() const
|
||||||
{
|
{
|
||||||
if (x30_27_)
|
if (x30_27_)
|
||||||
return x4_areaId;
|
return x4_areaId;
|
||||||
|
|
|
@ -119,7 +119,7 @@ void CScriptCoverPoint::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid,
|
||||||
{
|
{
|
||||||
CActor::AcceptScriptMsg(msg, uid, mgr);
|
CActor::AcceptScriptMsg(msg, uid, mgr);
|
||||||
|
|
||||||
if (msg == EScriptObjectMessage::UNKM15)
|
if (msg == EScriptObjectMessage::InternalMessage14)
|
||||||
{
|
{
|
||||||
for (const SConnection& con : x20_conns)
|
for (const SConnection& con : x20_conns)
|
||||||
if (con.x0_state == EScriptObjectState::Retreat)
|
if (con.x0_state == EScriptObjectState::Retreat)
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
#include "CScriptMemoryRelay.hpp"
|
#include "CScriptMemoryRelay.hpp"
|
||||||
|
#include "CStateManager.hpp"
|
||||||
|
#include "CRelayTracker.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -7,8 +9,30 @@ CScriptMemoryRelay::CScriptMemoryRelay(TUniqueId uid, const std::string& name, c
|
||||||
: CEntity(uid, info, true, name),
|
: CEntity(uid, info, true, name),
|
||||||
x34_24_(b1),
|
x34_24_(b1),
|
||||||
x34_25_(b2),
|
x34_25_(b2),
|
||||||
x34_26_(b3)
|
x34_26_ignoreMessages(b3)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CScriptMemoryRelay::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager &stateMgr)
|
||||||
|
{
|
||||||
|
if (x34_26_ignoreMessages)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (msg == EScriptObjectMessage::Deactivate)
|
||||||
|
{
|
||||||
|
stateMgr.GetRelayTracker()->RemoveRelay(xc_editorId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (msg == EScriptObjectMessage::Activate)
|
||||||
|
{
|
||||||
|
stateMgr.GetRelayTracker()->AddRelay(xc_editorId);
|
||||||
|
if (x34_25_)
|
||||||
|
return;
|
||||||
|
SendScriptMsgs(EScriptObjectState::Active, stateMgr, EScriptObjectMessage::None);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CEntity::AcceptScriptMsg(msg, objId, stateMgr);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,13 @@ class CScriptMemoryRelay : public CEntity
|
||||||
{
|
{
|
||||||
bool x34_24_;
|
bool x34_24_;
|
||||||
bool x34_25_;
|
bool x34_25_;
|
||||||
bool x34_26_;
|
bool x34_26_ignoreMessages;
|
||||||
};
|
};
|
||||||
u8 dummy = 0;
|
u8 dummy = 0;
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
CScriptMemoryRelay(TUniqueId, const std::string& name, const CEntityInfo&, bool, bool, bool);
|
CScriptMemoryRelay(TUniqueId, const std::string& name, const CEntityInfo&, bool, bool, bool);
|
||||||
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager &stateMgr);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "CScriptRandomRelay.hpp"
|
#include "CScriptRandomRelay.hpp"
|
||||||
|
#include "CStateManager.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -10,4 +11,33 @@ CScriptRandomRelay::CScriptRandomRelay(TUniqueId uid, const std::string& name, c
|
||||||
x3c_clamp(clamp)
|
x3c_clamp(clamp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CScriptRandomRelay::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager& stateMgr)
|
||||||
|
{
|
||||||
|
CEntity::AcceptScriptMsg(msg, objId, stateMgr);
|
||||||
|
if (msg == EScriptObjectMessage::SetToZero)
|
||||||
|
{
|
||||||
|
if (!x30_24_active)
|
||||||
|
return;
|
||||||
|
SendLocalScriptMsgs(EScriptObjectState::Zero, stateMgr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CScriptRandomRelay::SendLocalScriptMsgs(EScriptObjectState state, CStateManager &stateMgr)
|
||||||
|
{
|
||||||
|
if (state != EScriptObjectState::Zero)
|
||||||
|
{
|
||||||
|
SendScriptMsgs(state, stateMgr, EScriptObjectMessage::None);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
std::vector<std::pair<CEntity*, EScriptObjectMessage>> objs;
|
||||||
|
objs.reserve(10);
|
||||||
|
for (SConnection& conn : x20_conns)
|
||||||
|
{
|
||||||
|
const std::unique_ptr<CObjectList>& objList = stateMgr.GetObjectList();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,9 @@ class CScriptRandomRelay : public CEntity
|
||||||
bool x3c_clamp;
|
bool x3c_clamp;
|
||||||
public:
|
public:
|
||||||
CScriptRandomRelay(TUniqueId, const std::string&, const CEntityInfo&, s32, s32, bool, bool);
|
CScriptRandomRelay(TUniqueId, const std::string&, const CEntityInfo&, s32, s32, bool, bool);
|
||||||
|
|
||||||
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager &stateMgr);
|
||||||
|
void SendLocalScriptMsgs(EScriptObjectState state, CStateManager& stateMgr);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,4 +8,9 @@ CScriptRelay::CScriptRelay(TUniqueId uid, const std::string& name, const CEntity
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CScriptRelay::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager &stateMgr)
|
||||||
|
{
|
||||||
|
CEntity::AcceptScriptMsg(msg, objId, stateMgr);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ class CScriptRelay : public CEntity
|
||||||
u32 x38_ = 0;
|
u32 x38_ = 0;
|
||||||
public:
|
public:
|
||||||
CScriptRelay(TUniqueId, const std::string&, const CEntityInfo&, bool);
|
CScriptRelay(TUniqueId, const std::string&, const CEntityInfo&, bool);
|
||||||
|
|
||||||
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId, CStateManager &stateMgr);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ enum class EScriptObjectType
|
||||||
FishCloud = 0x4F,
|
FishCloud = 0x4F,
|
||||||
FishCloudModifier = 0x50,
|
FishCloudModifier = 0x50,
|
||||||
VisorFlare = 0x51,
|
VisorFlare = 0x51,
|
||||||
WorldTeleporterx52 = 0x52,
|
WorldTeleporter = 0x52,
|
||||||
VisorGoo = 0x53,
|
VisorGoo = 0x53,
|
||||||
JellyZap = 0x54,
|
JellyZap = 0x54,
|
||||||
ControllerAction = 0x55,
|
ControllerAction = 0x55,
|
||||||
|
@ -94,7 +94,7 @@ enum class EScriptObjectType
|
||||||
ThardusRockProjectile = 0x5F,
|
ThardusRockProjectile = 0x5F,
|
||||||
Midi = 0x60,
|
Midi = 0x60,
|
||||||
StreamedAudio = 0x61,
|
StreamedAudio = 0x61,
|
||||||
WorldTeleporterx62 = 0x62,
|
WorldTeleporterToo = 0x62,
|
||||||
Repulsor = 0x63,
|
Repulsor = 0x63,
|
||||||
GunTurret = 0x64,
|
GunTurret = 0x64,
|
||||||
FogVolume = 0x65,
|
FogVolume = 0x65,
|
||||||
|
@ -199,24 +199,24 @@ enum class EScriptObjectMessage
|
||||||
Action,
|
Action,
|
||||||
Play,
|
Play,
|
||||||
Alert,
|
Alert,
|
||||||
UNKM4,
|
InternalMessage00,
|
||||||
UNKM5,
|
InternalMessage01,
|
||||||
UNKM6,
|
InternalMessage02,
|
||||||
UNKM7,
|
InternalMessage03,
|
||||||
UNKM8,
|
InternalMessage04,
|
||||||
UNKM9,
|
InternalMessage05,
|
||||||
UNKM10,
|
InternalMessage06,
|
||||||
UNKM11,
|
InternalMessage07,
|
||||||
UNKM12,
|
InternalMessage08,
|
||||||
ObjectAdded,
|
InternalMessage09,
|
||||||
DeleteRequested,
|
InternalMessage10,
|
||||||
UNKM13,
|
InternalMessage11,
|
||||||
UNKM14,
|
InternalMessage13,
|
||||||
UNKM15,
|
InternalMessage14,
|
||||||
UNKM16,
|
InternalMessage15,
|
||||||
UNKM17,
|
InternalMessage16,
|
||||||
UNKM18,
|
InternalMessage17,
|
||||||
UNKM19
|
InternalMessage18
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue