#ifndef _DNAMP1_PARAMETERS_HPP_ #define _DNAMP1_PARAMETERS_HPP_ #include "../../DNACommon/DNACommon.hpp" #include "../DNAMP1.hpp" namespace Retro { namespace DNAMP1 { enum EPickupType { PkPowerBeam, PkIceBeam, PkWaveBeam, PkPlasmaBeam, PkMissile, PkScanVisor, PkMorphBallBomb, PkPowerBomb, PkFlamethrower, PkChargeBeam, PkXRayVisor, PkIceSpreader, PkSpaceJump, PkMorphBall, PkCombatVisor, PkSpiderBall, PkPowerSuit, PkGravitySuit, PkVariaSuit, PkPhazonSuit, PkEnergyTank, PkUnknownItem1, PkHealthRefill, PkUnknownItem2, PkWaveBuster, PkTruth, PkStrength, PkElder, PkWild, PkLifeGiver, PkWarrior, PkChozo, PkNature, PkSun, PkWorld, PkSpirit, PkNewborn }; enum ESpecialFunctionType { SpFnWhat, SpFnPlayerFollowLocator, SpFnSpinnerController, SpFnObjectFollowLocator, SpFnFunction4, SpFnInventoryActivator, SpFnMapStation, SpFnSaveStation, SpFnIntroBossRingController, SpFnViewFrustumTest, SpFnShotSpinnerController, SpFnEscapeSequence, SpFnBossEnergyBar, SpFnEndGame, SpFnHUDFadeIn, SpFnCinematicSkip, SpFnScriptLyaerController, SpFnRainSimulator, SpFnAreaDamage, SpFnObjectFollowObject, SpFnHintSystem, SpFnDropBomb, SpFnFunction22, SpFnMissileStation, SpFnBillboard, SpFnPlayerInAreaRelay, SpFnHUDTarget, SpFnFogFader, SpFnEnterLogbook, SpFnPowerBombStation, SpFnEnding, SpFnFusionRelay, SpFnWeaponSwitch // PAL Only }; struct AnimationParameters : BigYAML { DECL_YAML UniqueID32 animationCharacterSet; Value character; Value defaultAnimation; UniqueID32 getCINF(PAKRouter& pakRouter) const; void nameANCS(PAKRouter& pakRouter, const std::string& name) const { if (!animationCharacterSet) return; PAK::Entry* ancsEnt = (PAK::Entry*)pakRouter.lookupEntry(animationCharacterSet); if (ancsEnt->name.empty()) ancsEnt->name = name; } }; struct BehaveChance : BigYAML { DECL_YAML Value propertyCount; Value unknown1; Value unknown2; Value unknown3; Value unknown4; Value unknown5; Value unknown6; Value unknown7; }; struct DamageInfo : BigYAML { DECL_YAML Value propertyCount; Value weaponType; Value damage; Value radius; Value knockbackPower; }; struct DamageVulnerability : BigYAML { DECL_YAML Value propertyCount; Value power; Value ice; Value wave; Value plasma; Value bomb; Value powerBomb; Value missile; Value boostBall; Value phazon; Value enemyWeapon1; Value enemyWeapon2Poison; Value enemyWeapon3Lava; Value enemyWeapon4; Value unkownWeapon1; Value unkownWeapon2; Value unkownWeapon3; struct ChargedBeams : BigYAML { DECL_YAML Value propertyCount; Value power; Value ice; Value wave; Value plasma; Value phazon; } chargedBeams; struct BeamCombos : BigYAML { DECL_YAML Value propertyCount; Value superMissiles; Value iceSpreader; Value wavebuster; Value flameThrower; Value phazonCombo; } beamCombos; }; struct FlareDefinition : BigYAML { DECL_YAML Value propertyCount; UniqueID32 texture; Value unknown1; Value unknown2; Value unknown4; // CColor void nameIDs(PAKRouter& pakRouter, const std::string& name) const { if (texture) { PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(texture); ent->name = name + "_texture"; } } }; struct GrappleParameters : BigYAML { DECL_YAML Value propertyCount; Value unknown1; Value unknown2; Value unknown3; Value unknown4; Value unknown5; Value unknown6; Value unknown7; Value unknown8; Value unknown9; Value unknown10; Value unknown11; Value disableTurning; }; struct HealthInfo : BigYAML { DECL_YAML Value propertyCount; Value health; Value knockbackResistence; }; struct LightParameters : BigYAML { DECL_YAML Value propertyCount; Value unknown1; Value unknown2; Value shadowTesselation; Value unknown3; Value unknown4; Value unknown5; // CColor Value unknown6; Value worldLightingOptions; Value lightRecalculationOptions; Value unknown7; Value unknown8; Value unknown9; Value unknown10; Value unknown11; }; struct PatternedInfo : BigYAML { DECL_YAML Value propertyCount; Value mass; Value speed; Value turnSpeed; Value detectionRange; Value detectionHeightRange; Value dectectionAngle; Value minAttackRange; Value maxAttackRange; Value averageAttackTime; Value attackTimeVariation; Value leashRadius; Value playerLeashRadius; Value playerLeashTime; DamageInfo contactDamage; Value damageWaitTime; HealthInfo healthInfo; DamageVulnerability damageVulnerability; Value unkown1; Value unkown2; Value unkown3; Value unkown4; Value unkown5; Value unkown6; Value unkown7; Value soundID1; AnimationParameters animationParameters; Value active; UniqueID32 stateMachine; Value unknown8; Value unknown9; Value unknown10; Value unknown11; Value unknown12; UniqueID32 particle1; Value unknown13; Value unknown14; UniqueID32 particle2; Value soundID2; void nameIDs(PAKRouter& pakRouter, const std::string& name) const { animationParameters.nameANCS(pakRouter, name + "_animp"); if (stateMachine) { PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(stateMachine); ent->name = name + "_fsm"; } if (particle1) { PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(particle1); ent->name = name + "_part1"; } if (particle2) { PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(particle2); ent->name = name + "_part2"; } } }; struct PlayerHintParameters : BigYAML { DECL_YAML Value propertyCount; Value unknown1; Value unknown2; Value unknown3; Value unknown4; Value unknown5; Value unknown6; Value unknown7; Value unknown8; Value unknown9; Value unknown10; Value unknown11; Value unknown12; Value unknown13; Value unknown14; Value unknown15; }; struct ScannableParameters : BigYAML { DECL_YAML Value propertyCount; UniqueID32 scanId; void nameIDs(PAKRouter& pakRouter, const std::string& name) const { if (scanId) { PAK::Entry* scanEnt = (PAK::Entry*)pakRouter.lookupEntry(scanId); scanEnt->name = name + "_scan"; } } }; struct VisorParameters : BigYAML { DECL_YAML Value propertyCount; Value unknown1; Value unknown2; Value unknown3; }; struct ActorParameters : BigYAML { DECL_YAML Value propertyCount; LightParameters lightParameters; ScannableParameters scannableParameters; UniqueID32 xrayModel; UniqueID32 xraySkin; UniqueID32 thermalModel; UniqueID32 thermalSkin; Value unknown1; Value unknown2; Value unknown3; VisorParameters visorParameters; Value thermalHeat; Value unknown4; Value unknown5; Value unknown6; void addCMDLRigPairs(std::unordered_map>& addTo, const UniqueID32& cinf) const { if (xrayModel && xraySkin) addTo[xrayModel] = std::make_pair(xraySkin, cinf); if (thermalModel && thermalSkin) addTo[thermalModel] = std::make_pair(thermalSkin, cinf); } void nameIDs(PAKRouter& pakRouter, const std::string& name) const { scannableParameters.nameIDs(pakRouter, name); if (xrayModel) { PAK::Entry* xmEnt = (PAK::Entry*)pakRouter.lookupEntry(xrayModel); xmEnt->name = name + "_xraymodel"; } if (xraySkin) { PAK::Entry* xsEnt = (PAK::Entry*)pakRouter.lookupEntry(xraySkin); xsEnt->name = name + "_xrayskin"; } if (thermalModel) { PAK::Entry* xmEnt = (PAK::Entry*)pakRouter.lookupEntry(thermalModel); xmEnt->name = name + "_thermalmodel"; } if (thermalSkin) { PAK::Entry* xsEnt = (PAK::Entry*)pakRouter.lookupEntry(thermalSkin); xsEnt->name = name + "_thermalskin"; } } }; } } #endif