DCFronted/public/AlliedAntiAirShip.xml
2025-08-01 02:05:23 +08:00

546 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<AssetDeclaration xmlns="uri:ea.com:eala:asset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xai="uri:ea.com:eala:asset:instance">
<Tags></Tags>
<Includes>
<Include type="all" source="DATA:GlobalData/GlobalDefines.xml" />
<Include
type="all"
source="ART:AUAntiAirShip_D.xml" />
<Include
type="all"
source="ART:AUAntiAirShip_FX.w3x" />
<Include
type="all"
source="ART:AUAntiAirShip_FPZ.w3x" />
<Include
type="all"
source="ART:AUAntiAirShip_SKN.w3x" />
<Include
type="all"
source="ART:FXGradient01.xml" />
<Include
type="all"
source="ART:FXTracer.xml" />
<Include
type="all"
source="ART:FXTracerHeroic.xml" />
<!-- needed for temp laserEndParticleSystemFX? -->
<Include
type="all"
source="ART:SUAntiVehicleVehicleTech3_FX.w3x" />
<Include
type="instance"
source="ART:FXGrid_3.xml" />
<Include
type="instance"
source="ART:FXHarpoonBeam.xml" />
<!-- Base Object -->
<Include
type="instance"
source="DATA:BaseObjects/BaseVehicle.xml" />
</Includes>
<!-- aka The Hydrofoil -->
<GameObject
id="AlliedAntiAirShip"
inheritFrom="BaseVehicle"
SelectPortrait="Portrait_AlliedAntiAirShip"
ButtonImage="Button_AlliedAntiAirShip_on"
Side="Allies"
SubGroupPriority="440"
EditorSorting="UNIT"
HealthBoxHeightOffset="30"
TransportSlotCount="10"
BuildTime="10"
CommandSet="AlliedAntiAirShipCommandSet"
KindOf="SELECTABLE CAN_ATTACK CAN_CAST_REFLECTIONS SCORE VEHICLE SHIP CAN_BE_FAVORITE_UNIT"
RadarPriority="UNIT"
ProductionQueueType="WATERCRAFT"
UnitCategory="VEHICLE"
WeaponCategory="CANNON"
VoicePriority="188"
EditorName="AlliedAntiAirShip"
Description="Desc:AlliedAntiAirShip"
TypeDescription="Type:AlliedAntiAirShip"
UnitIntro="Allied_Hydrofoil_UnitIntro">
<DisplayName
xai:joinAction="Replace" xmlns:xai="uri:ea.com:eala:asset:instance">Name:AlliedAntiAirShip</DisplayName>
<ObjectResourceInfo>
<BuildCost Account="=$ACCOUNT_ORE" Amount="900"/>
</ObjectResourceInfo>
<ArmorSet
Armor="AlliedAntiAirShipArmor"
DamageFX="VehicleDamageFX" />
<LocomotorSet
id="DefaultWaterLocomotorSet"
Locomotor="AlliedAntiAirShipWaterLocomotor"
Condition="NORMAL"
Speed="125.0" />
<LocomotorSet
Locomotor="AlliedAntiAirShipWaterLocomotor_LeavingFactory"
Condition="EXITING_PRODUCTION_STRUCTURE"
Speed="125.0" />
<SkirmishAIInformation
UnitBuilderStandardCombatUnit="true" />
<Draws>
<ScriptedModelDraw
id="ModuleTag_Draw"
OkToChangeModelColor="true"
InitialRecoilSpeed="0.1"
MaxRecoilDistance="0.1"
RecoilDamping="2.0"
RecoilSettleSpeed="3.0"
ExtraPublicBone="FX_Weapon_01 FX_Weapon_02" >
<ModelConditionState
ParseCondStateType="PARSE_DEFAULT"
RetainSubObjects="true">
<Model
Name="AUAntiAirShip_SKN" />
<WeaponFireFXBone
WeaponSlotID="1"
WeaponSlotType="PRIMARY_WEAPON"
BoneName="FX_Weapon_01" />
<WeaponRecoilBone
WeaponSlotID="1"
WeaponSlotType="PRIMARY_WEAPON"
BoneName="FX_Weapon_01" />
<WeaponLaunchBone
WeaponSlotID="1"
WeaponSlotType="PRIMARY_WEAPON"
BoneName="FX_Weapon_01" />
<WeaponFireFXBone
WeaponSlotID="1"
WeaponSlotType="SECONDARY_WEAPON"
BoneName="FX_Weapon_02" />
<WeaponRecoilBone
WeaponSlotID="1"
WeaponSlotType="SECONDARY_WEAPON"
BoneName="FX_Weapon_02" />
<WeaponLaunchBone
WeaponSlotID="1"
WeaponSlotType="SECONDARY_WEAPON"
BoneName="FX_Weapon_02" />
<Turret
TurretNameKey="turret"
TurretPitch="Turret_Pitch"
TurretID="1" />
</ModelConditionState>
<ModelConditionState
ParseCondStateType="PARSE_NORMAL"
ConditionsYes="FORMATION_PREVIEW">
<Model
Name="AUAntiAirShip_SKN" />
<Material
ShaderName="FX_FormPreview.fx"
TechniqueName="Default">
<Constants>
<Texture Name="SpecMap">
<Value>FXGradient01</Value>
</Texture>
</Constants>
</Material>
</ModelConditionState>
<ModelConditionState
ParseCondStateType="PARSE_NORMAL"
RetainSubObjects="true"
ConditionsYes="REALLYDAMAGED">
<Model
Name="AUAntiAirShip_SKN" />
<Texture
Original="AUAntiAirShip"
New="AUAntiAirShip_D" />
</ModelConditionState>
<AnimationState
ParseCondStateType="PARSE_DEFAULT">
<Script>
CurDrawableShowSubObjectPermanently("GUN")
CurDrawableHideSubObjectPermanently("BEAM")
</Script>
<ParticleSysBone
BoneName="None"
FXParticleSystemTemplate="SmallShipWakeIdle"
FollowBone="false" />
</AnimationState>
<AnimationState
ParseCondStateType="PARSE_NORMAL"
ConditionsYes="MOVING">
<ParticleSysBone
BoneName="NONE"
FXParticleSystemTemplate="AUHydrofoilWaterWake"
FollowBone="false" />
</AnimationState>
<AnimationState
ParseCondStateType="PARSE_NORMAL"
ConditionsYes="WEAPONSTATE_TWO">
<Script>
CurDrawableHideSubObjectPermanently("GUN")
CurDrawableShowSubObjectPermanently("BEAM")
</Script>
</AnimationState>
</ScriptedModelDraw>
<ScriptedModelDraw
id="ModuleTag_DrawZ"
OkToChangeModelColor="true"
InitialRecoilSpeed="0.1"
MaxRecoilDistance="0.1"
RecoilDamping="2.0"
RecoilSettleSpeed="3.0"
ExtraPublicBone="FX_Weapon_01 FX_Weapon_02">
<ModelConditionState
ParseCondStateType="PARSE_DEFAULT"
RetainSubObjects="true">
<Model
Name="" />
</ModelConditionState>
<ModelConditionState
ParseCondStateType="PARSE_NORMAL"
ConditionsYes="FORMATION_PREVIEW">
<Model
Name="AUAntiAirShip_FPZ" />
</ModelConditionState>
<AnimationState
ParseCondStateType="PARSE_DEFAULT">
<Script>
CurDrawableShowSubObjectPermanently("GUN")
CurDrawableHideSubObjectPermanently("BEAM")
</Script>
</AnimationState>
</ScriptedModelDraw>
<!-- Used in the Weapon Scramble Beam -->
<LaserDraw
id="ModuleTag_LaserDraw"
Texture1_UTile="1"
Texture1_VTile="1"
Texture1_UScrollRate="0"
Texture1_VScrollRate="0"
Texture1_NumFrames="1"
Texture1_FrameRate="30"
Texture2_UTile="1"
Texture2_VTile="1"
Texture2_UScrollRate="0"
Texture2_VScrollRate="1"
Texture2_NumFrames="1"
Texture2_FrameRate="30"
LaserWidth="40"
LaserStateID="1">
<FXShader
ShaderName="Laser.fx"
TechniqueIndex="0">
<Constants>
<Texture
Name="Texture1">
<Value>FXGrid_3</Value>
</Texture>
<Texture
Name="Texture2">
<Value>FXInterlacedMask2</Value>
</Texture>
<Float Name="ColorEmissive">
<Value>0.00000</Value>
<Value>2.00000</Value>
<Value>1.000000</Value>
</Float>
</Constants>
</FXShader>
</LaserDraw>
<!-- Used for the Phalanx Gun -->
<TracerModelDraw
id="ModuleTag_TracerModelDraw"
MinLength="10.0"
MaxLength="25.0"
Width="15.0"
MinSpeed="22"
MaxSpeed="32"
SweepSpeed="3.0"
SpreadAngle="5.0"
MinTracersPerFrame="0.4"
MaxTracersPerFrame="0.4"
FrameLifeTime="25"
WeaponSlotType="PRIMARY_WEAPON"
Texture="FXTracer"
UseAdditiveBlending="true" >
<HeadColor
r="1.0"
g="1.0"
b="1.0"
a="1.0" />
<TailColor
r="1.0"
g="0.75"
b="0.65"
a="0.0" />
<ObjectStatusValidation
ForbiddenStatus="WEAPON_UPGRADED_01 GENERIC_TOGGLE_STATE" />
</TracerModelDraw>
<TracerModelDraw
id="ModuleTag_TracerModelDrawVeterancy"
MinLength="10.0"
MaxLength="25.0"
Width="15.0"
MinSpeed="30"
MaxSpeed="30"
SweepSpeed="0.5"
SpreadAngle="0.5"
MinTracersPerFrame="0.4"
MaxTracersPerFrame="0.4"
FrameLifeTime="35"
WeaponSlotType="PRIMARY_WEAPON"
Texture="FXTracerHeroic"
UseAdditiveBlending="true" >
<HeadColor
r="1.0"
g="0.0"
b="0.0"
a="1.0" />
<TailColor
r="1.0"
g="0.75"
b="0.65"
a="0.0" />
<ObjectStatusValidation
RequiredStatus="WEAPON_UPGRADED_01"
ForbiddenStatus="GENERIC_TOGGLE_STATE" />
</TracerModelDraw>
<!-- DRAW PARTICLES -->
<ScriptedModelDraw
id="ModuleTag_Draw_FX"
OkToChangeModelColor="true">
<ModelConditionState
ParseCondStateType="PARSE_DEFAULT">
<Model
Name="AUAntiAirShip_FX" />
</ModelConditionState>
<ModelConditionState
ParseCondStateType="PARSE_NORMAL"
ConditionsYes="DAMAGED">
<Model
Name="AUAntiAirShip_FX" />
<ParticleSysBone
BoneName="FX_BONE01"
FXParticleSystemTemplate="VehicleDamageSmoke"
FollowBone="true" />
</ModelConditionState>
<ModelConditionState
ParseCondStateType="PARSE_NORMAL"
ConditionsYes="REALLYDAMAGED">
<Model
Name="AUAntiAirShip_FX" />
<ParticleSysBone
BoneName="FX_BONE01"
FXParticleSystemTemplate="VehicleDamageSmoke"
FollowBone="true" />
<ParticleSysBone
BoneName="FX_BONE01"
FXParticleSystemTemplate="VehicleDamageFire"
FollowBone="true" />
<ParticleSysBone
BoneName="FX_BONE01"
FXParticleSystemTemplate="VehicleDamageFire02"
FollowBone="true" />
</ModelConditionState>
</ScriptedModelDraw>
</Draws>
<Behaviors>
<WeaponSetUpdate
id="ModuleTag_WeaponSetUpdate">
<WeaponSlotTurret
ID="1">
<!-- This weapon is always around, but the weapon template itself prevents it
from being able to be fired once it's upgraded. -->
<Weapon
Ordering="PRIMARY_WEAPON"
Template="AlliedAntiAirShipPhalanxGun"
ForbiddenObjectStatus="GENERIC_TOGGLE_STATE"
/>
<Weapon
Ordering="SECONDARY_WEAPON"
Template="AlliedAntiAirShipWeaponScrambler"
ObjectStatus="GENERIC_TOGGLE_STATE"/>
<TurretSettings
TurretTurnRate="360"
MinimumPitch="0d"
AllowsPitch="true"
TurretPitchRate="180"
MinIdleScanTime="1.0s"
MaxIdleScanTime="5.0s"
MinIdleScanAngle="10.0"
MaxIdleScanAngle="90.0"
ComeToHaltJiggle="3d">
<TurretAITargetChooserData
IdleScanDelay="=$FAST_IDLE_SCAN_DELAY"
CanAcquireDynamicIfAssignedOutOfRange="true" />
</TurretSettings>
</WeaponSlotTurret>
</WeaponSetUpdate>
<Physics
id="ModuleTag_Physics" />
<CreateObjectDie
id="ModuleTag_CreateObjectDie"
CreationList="AUAntiAirShip_Die_OCL">
<DieMuxData
DeathTypes="ALL"
DeathTypesForbidden="FLOODED"/>
</CreateObjectDie>
<CreateObjectDie
id="ModuleTag_CreateObjectDieWhole"
CreationList="AUAntiAirShip_Die_OCL">
<DieMuxData
DeathTypes="FLOODED" />
</CreateObjectDie>
<DynamicsUpdate
id="ModuleTag_DefaultDynamicsUpdate"
xai:joinAction="Remove" />
<DestroyDie
id="ModuleTag_Die">
<DieMuxData
DeathTypes="ALL" />
</DestroyDie>
<FXListBehavior
id="ModuleTag_FXList">
<DieMuxData
DeathTypes="ALL" />
<Event
Index="onDeath"
FX="FX_ALL_HydrofoilDie" />
</FXListBehavior>
<!-- The toggle for the Weapon Scrambler -->
<SpecialPower
id="ModuleTag_ActivateWeaponScrambler"
SpecialPowerTemplate="SpecialPower_ToggleWeaponScrambler"
UpdateModuleStartsAttack="true" />
<ToggleStatusSpecialAbilityUpdate
id="ModuleTag_ActivateWeaponScramblerUpdate"
SpecialPowerTemplate="SpecialPower_ToggleWeaponScrambler"
Options="RECONSTITUTE_STORED_COMMAND">
<ToggleState
EnterStateSound="ALL_HydroFoil_ScramblerToggleOffMS">
<SkirmishAiInfo
ToggleHint="TOGGLE_DEFAULT">
<StateWeapon
Weapon="AlliedAntiAirShipPhalanxGun" />
</SkirmishAiInfo>
</ToggleState>
<ToggleState
ObjectStatus="GENERIC_TOGGLE_STATE"
ModelConditions="WEAPONSTATE_TWO"
EnterStateSound="ALL_HydroFoil_ScramblerToggleOnMS">
<SkirmishAiInfo
ToggleHint="TOGGLE_LOCKDOWN"
NeverUseInState="RETREAT">
<StateWeapon
Weapon="AlliedAntiAirShipWeaponScrambler" />
</SkirmishAiInfo>
</ToggleState>
</ToggleStatusSpecialAbilityUpdate>
<!-- The special power that is used by the weapon -->
<SpecialPower
id="ModuleTag_WeaponScrambler"
SpecialPowerTemplate="SpecialPower_WeaponScrambler"
TriggerFX="FX_None"
UpdateModuleStartsAttack="false" />
<LaserState
id="ModuleTag_LaserState"
LaserId="1" >
<LaserEndParticleSystem>AlliedHydroScrambler_Sparks</LaserEndParticleSystem>
<LaserStartParticleSystem>AlliedHydroScrambler_Start</LaserStartParticleSystem>
</LaserState>
<StatusBitsUpgrade
id="ModuleTag_VeterancyUpgrade"
StatusToSet="WEAPON_UPGRADED_01">
<TriggeredBy>Upgrade_Veterancy_HEROIC</TriggeredBy>
</StatusBitsUpgrade>
</Behaviors>
<AI>
<AIUpdate
id="ModuleTag_AI"
AutoAcquireEnemiesWhenIdle="YES"
StateMachine="UnitAIStateMachine">
<UnitAITargetChooserData
CanPickDynamicTargets="false"/>
</AIUpdate>
</AI>
<Body>
<ActiveBody
id="ModuleTag_02"
MaxHealth="400" />
</Body>
<ClientBehaviors>
<ModelConditionAudioLoopClientBehavior id="ModuleTag_ShrunkenVoice">
<ModelConditionSound Sound="ALL_Hydrofoil_VoiceShrunken" RequiredFlags="SHRINK_EFFECT" />
</ModelConditionAudioLoopClientBehavior>
<ModelConditionSoundSelectorClientBehavior id="ModuleTag_VoiceAttackWeaponJammer">
<Override RequiredFlags="WEAPONSTATE_TWO">
<AudioArrayVoice>
<AudioEntry Sound="ALL_Hydrofoil_VoiceAttackSpecial" AudioType="voiceAttack" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceSelectMS" AudioType="voiceSelectBattle" />
</AudioArrayVoice>
</Override>
</ModelConditionSoundSelectorClientBehavior>
<ModelConditionAudioLoopClientBehavior xai:joinAction="Replace" xmlns:xai="uri:ea.com:eala:asset:instance" id="ModuleTag_MagneticSatelliteSuckedAway">
<ModelConditionSound Sound="SOV_MagneticSatellite_SuckedAwayWater" RequiredFlags="SUCKED_UP_HIGH" />
</ModelConditionAudioLoopClientBehavior>
</ClientBehaviors>
<Geometry>
<Shape
Type="BOX"
MajorRadius="30.0"
MinorRadius="18.0"
Height="20.0"
ContactPointGeneration="VEHICLE"/>
</Geometry>
<AudioArrayVoice>
<AudioEntry Sound="ALL_Hydrofoil_VoiceAttack" AudioType="voiceAttack" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceMoveAttack" AudioType="voiceAttackAfterMoving" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceCreate" AudioType="voiceCreated" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceMove" AudioType="voiceMove" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceRetreat" AudioType="voiceRetreatToCastle" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceSelectMS" AudioType="voiceSelect" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceSelectBattleMS" AudioType="voiceSelectBattle" />
<AudioEntry Sound="ALL_Hydrofoil_VoiceSelectUnderFireMS" AudioType="voiceSelectUnderFire" />
<!-- <NamedEntry Sound="ALL_Hydrofoil_VoiceAttackSpecial" Name="VoiceWeaponScrambler" /> oops plays on toggle -->
</AudioArrayVoice>
<AudioArraySound>
<AudioEntry
Sound="ALL_Hydrofoil_MoveStart"
AudioType="soundMoveStart" />
<AudioEntry
Sound="VehicleCrush"
AudioType="soundCrushing" />
<AudioEntry
Sound="Ship_Small_MoveLoopWater"
AudioType="soundMoveLoop" />
</AudioArraySound>
<VisionInfo
VisionRange="325"
ShroudClearingRange="=$STANDARD_SHROUD_CLEAR" />
<CrusherInfo
id="id_CrusherInfo"
CrusherLevel="1"
CrushableLevel="20" />
</GameObject>
</AssetDeclaration>