Although I did copy the MCV and Rig codings for the unpack ability, something else may be missing.
Spartan.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:xi="http://www.w3.org/2001/XInclude"> <Tags></Tags> <Includes> <Include type="all" source="ART:Spartan/GUVEHICLEY_SKN.w3x" /> <Include type="all" source="ART:Spartan/GUVEHICLEY_DPLY.w3x" /> <!--<Include type="all" source="ART:Spartan/GUVEHICLEY_DPLY_AN.w3x" />--> <Include type="all" source="ART:NUBeam.xml" /> <Include type="all" source="ART:FXWhiteSquare.xml" /> <Include type="all" source="ART:FXRailGunCoreMask.xml" /> <Include type="all" source="ART:FXRailGunCoreDistortion.xml" /> <Include type="instance" source="ART:EXTnkTrack.xml" /> <Include type="instance" source="DATA:BaseObjects/BaseVehicle.xml" /> </Includes> <GameObject id="GDISpartan" inheritFrom="BaseVehicle" SelectPortrait="Portrait_GDISpartan" ButtonImage="Portrait_GDISpartan" Side="GDI" EditorSorting="UNIT" TransportSlotCount="1" BuildCost="100" BuildTime="3" CommandSet="GDISpartanCommandSet" CommandPoints="100" KindOf="PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS SCORE VEHICLE CAN_REVERSE_MOVE CAN_BE_FAVORITE_UNIT" RadarPriority="UNIT" ThreatLevel="10" ProductionQueueType="VEHICLE" UnitCategory="VEHICLE" WeaponCategory="CANNON" VoicePriority="184" EditorName="GDISpartan" Description="Desc:GDISpartan" TypeDescription="Type:GDISpartan"> <DisplayName xai:joinAction="Replace" xmlns:xai="uri:ea.com:eala:asset:instance">Name:GDISpartan</DisplayName> <ArmorSet Armor="GDIPredatorTankArmor" DamageFX="VehicleDamageFX" /> <LocomotorSet Locomotor="GDIPredatorTankLocomotor" Condition="NORMAL" Speed="60.0" /> <SkirmishAIInformation UnitBuilderStandardCombatUnit="true" /> <Draws> <!-- BONE_TREAD_FRONT_LEFT and BONE_TREAD_FRONT_RIGHT have no effect --> <TankDraw id="ModuleTag_Draw" OkToChangeModelColor="true" ExtraPublicBone="FXTracksL FXTracksR FXMUZZLEFLASH" TrackMarks="EXTnkTrack" TrackMarksLeftBone="FXTracksL" TrackMarksRightBone="FXTracksR" TreadAnimationRate="0.15" TreadDriveSpeedFraction="0.25" TreadPivotSpeedFraction="0.9"> <ModelConditionState ParseCondStateType="PARSE_DEFAULT" RetainSubObjects="true"> <Model Name="GUVEHICLEY_SKN" /> <WeaponFireFXBone WeaponSlotType="PRIMARY_WEAPON" BoneName="F8C60ACD" /> <WeaponRecoilBone WeaponSlotType="PRIMARY_WEAPON" BoneName="F8C60ACD" /> <WeaponMuzzleFlash WeaponSlotType="PRIMARY_WEAPON" BoneName="F8C60ACD" /> <WeaponLaunchBone WeaponSlotType="PRIMARY_WEAPON" BoneName="F8C60ACD" /> <Turret TurretNameKey="Turret" TurretPitch="Barrel" TurretID="1" /> </ModelConditionState> <!--<ModelConditionState ParseCondStateType="PARSE_DEFAULT" RetainSubObjects="true"> <Model Name="GUVEHICLEY_DPLY" /> <WeaponFireFXBone WeaponSlotType="PRIMARY_WEAPON" BoneName="AA55F6CC" /> <WeaponRecoilBone WeaponSlotType="PRIMARY_WEAPON" BoneName="AA55F6CC" /> <WeaponMuzzleFlash WeaponSlotType="PRIMARY_WEAPON" BoneName="AA55F6CC" /> <WeaponLaunchBone WeaponSlotType="PRIMARY_WEAPON" BoneName="AA55F6CC" /> <Turret TurretNameKey="Turret" TurretPitch="Barrel" TurretID="2" /> </ModelConditionState>--> <ModelConditionState ParseCondStateType="PARSE_NORMAL" RetainSubObjects="true" ConditionsYes="UNPACKING REALLYDAMAGED"> <Model Name="GUVEHICLEY_DPLY" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY_D" /> </ModelConditionState> <ModelConditionState ParseCondStateType="PARSE_NORMAL" RetainSubObjects="true" ConditionsYes="UNPACKING"> <Model Name="GUVEHICLEY_DPLY" /> </ModelConditionState> <ModelConditionState ParseCondStateType="PARSE_NORMAL" ConditionsYes="DYING USER_5"> <Model Name="GUVEHICLEY_SKN" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY_D" /> <ParticleSysBone BoneName="ROOTTRANSFORM" FXParticleSystemTemplate="GDIDebrisSmallFire" FollowBone="true" /> <ParticleSysBone BoneName="ROOTTRANSFORM" FXParticleSystemTemplate="GDIDebrisSmallFireDistortion" FollowBone="true" /> <ParticleSysBone BoneName="ROOTTRANSFORM" FXParticleSystemTemplate="GDIDebrisSmallSmoke" FollowBone="true" /> </ModelConditionState> <ModelConditionState ParseCondStateType="PARSE_NORMAL" RetainSubObjects="true" ConditionsYes="REALLYDAMAGED USER_5"> <Model Name="GUVEHICLEY_SKN" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY_D" /> <ParticleSysBone BoneName="BARREL" FXParticleSystemTemplate="GDIPredDamagedFire" FollowBone="true" /> <ParticleSysBone BoneName="BARREL" FXParticleSystemTemplate="GDIPredDamagedFireDistortion" FollowBone="true" /> <ParticleSysBone BoneName="BARREL" FXParticleSystemTemplate="GDIPredDamagedSmoke" FollowBone="true" /> </ModelConditionState> <ModelConditionState ParseCondStateType="PARSE_NORMAL" ConditionsYes="DYING"> <Model Name="GUVEHICLEY_SKN" /> <ParticleSysBone BoneName="ROOTTRANSFORM" FXParticleSystemTemplate="GDIDebrisSmallFire" FollowBone="true" /> <ParticleSysBone BoneName="ROOTTRANSFORM" FXParticleSystemTemplate="GDIDebrisSmallFireDistortion" FollowBone="true" /> <ParticleSysBone BoneName="ROOTTRANSFORM" FXParticleSystemTemplate="GDIDebrisSmallSmoke" FollowBone="true" /> </ModelConditionState> <ModelConditionState ParseCondStateType="PARSE_NORMAL" RetainSubObjects="true" ConditionsYes="REALLYDAMAGED"> <Model Name="GUVEHICLEY_SKN" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY_D" /> <ParticleSysBone BoneName="BARREL" FXParticleSystemTemplate="GDIPredDamagedFire" FollowBone="true" /> <ParticleSysBone BoneName="BARREL" FXParticleSystemTemplate="GDIPredDamagedFireDistortion" FollowBone="true" /> <ParticleSysBone BoneName="BARREL" FXParticleSystemTemplate="GDIPredDamagedSmoke" FollowBone="true" /> </ModelConditionState> <ModelConditionState ParseCondStateType="PARSE_NORMAL" RetainSubObjects="true" ConditionsYes="USER_5"> <Model Name="GUVEHICLEY_SKN" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY" /> </ModelConditionState> <!--<ModelConditionState ParseCondStateType="PARSE_NORMAL" ConditionsYes="UNPACKING DAMAGED REALLYDAMAGED"> <Model Name="GUVEHICLEY_DPLY" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY_D" /> </ModelConditionState>--> <!--<ModelConditionState ParseCondStateType="PARSE_NORMAL" ConditionsYes="FORMATION_PREVIEW"> <Model Name="" /> </ModelConditionState>--> <!--<ModelConditionState ParseCondStateType="PARSE_NORMAL" ConditionsYes="UNPACKING"> <Model Name="GUVEHICLEY_DPLY" /> </ModelConditionState>--> <!-- <ModelConditionState ParseCondStateType="PARSE_NORMAL" ConditionsYes="UNPACKING DAMAGED"> <Model Name="GUVEHICLEY_DPLY" /> <Texture Original="GUVEHICLEY" New="GUVEHICLEY_D" /> </ModelConditionState> --> <AnimationState ParseCondStateType="PARSE_DEFAULT"> <Animation AnimationName="GUVEHICLEY_DPLY" AnimationMode="ONCE" /> </AnimationState> <!--<AnimationState ParseCondStateType="PARSE_NORMAL" Flags="START_FRAME_LAST" ConditionsYes="UNPACKING"> <Animation AnimationName="GUVEHICLEY_DPLY" AnimationMode="ONCE_BACKWARDS" /> <ParticleSysBone BoneName="NONE" FXParticleSystemTemplate="Con_Small" FollowBone="true" /> </AnimationState>--> <AnimationState ParseCondStateType="PARSE_DEFAULT"> <!-- Circumvents blend issues when the arrow is being shown... --> <script> CurDrawableShowSubObject("TreadsStop") CurDrawableHideSubObject("TreadsMove") CurDrawableHideSubObject("TreadsLeft") CurDrawableHideSubObject("TreadsRight") </Script> </AnimationState> <AnimationState ParseCondStateType="PARSE_NORMAL" ConditionsYes="MOVING TURN_LEFT"> <!-- Circumvents blend issues when the arrow is being shown... --> <script> CurDrawableHideSubObject("TreadsStop") CurDrawableHideSubObject("TreadsMove") CurDrawableShowSubObject("TreadsLeft") CurDrawableHideSubObject("TreadsRight") </Script> </AnimationState> <AnimationState ParseCondStateType="PARSE_NORMAL" ConditionsYes="MOVING TURN_RIGHT"> <!-- Circumvents blend issues when the arrow is being shown... --> <script> CurDrawableHideSubObject("TreadsStop") CurDrawableHideSubObject("TreadsMove") CurDrawableHideSubObject("TreadsLeft") CurDrawableShowSubObject("TreadsRight") </Script> </AnimationState> <AnimationState ParseCondStateType="PARSE_NORMAL" ConditionsYes="MOVING"> <!-- Circumvents blend issues when the arrow is being shown... --> <script> CurDrawableHideSubObject("TreadsStop") CurDrawableShowSubObject("TreadsMove") CurDrawableHideSubObject("TreadsLeft") CurDrawableHideSubObject("TreadsRight") </Script> </AnimationState> <LeftTread>"TreadsL"</LeftTread> <RightTread>"TreadsR"</RightTread> </TankDraw> <scriptedModelDraw id="ModuleTag_FX"> <ModelConditionState ParseCondStateType="PARSE_DEFAULT"> <Model Name="" /> </ModelConditionState> <AnimationState ParseCondStateType="PARSE_NORMAL" ConditionsYes="MOVING"> <ParticleSysBone BoneName="NONE" FXParticleSystemTemplate="TreadDustPred" FollowBone="true" /> <ParticleSysBone BoneName="NONE" FXParticleSystemTemplate="TreadDirt" FollowBone="true" /> </AnimationState> </ScriptedModelDraw> <LaserDraw id="ModuleTag_LaserDistort" UseDistortionShader="true" Texture1_UTile="1" Texture1_VTile=".5" Texture1_UScrollRate="0" Texture1_VScrollRate=".2" Texture1_NumFrames="1" Texture1_FrameRate="30" Texture2_UTile="1" Texture2_VTile=".01" Texture2_UScrollRate="0" Texture2_VScrollRate="1" Texture2_NumFrames="1" Texture2_FrameRate="1" LaserWidth="50"> <FXShader ShaderName="Laser.fx" TechniqueIndex="0"> <Constants> <Texture Name="Texture1"> <Value>FXRailGunCoreDistortion</Value> </Texture> <Texture Name="Texture2"> <Value>FXRailGunCoreMask</Value> </Texture> </Constants> </FXShader> </LaserDraw> </Draws> <Behaviors> <ProductionUpdate id="ProductionUpdateModuleTag" GiveNoXP="true" /> <WeaponSetUpdate id="ModuleTag_WeaponSetUpdate"> <WeaponSlotTurret ID="1"> <Weapon Ordering="PRIMARY_WEAPON" Template="GDIPredatorTankCannon" Upgrade="Upgrade_Pack" /> <TurretSettings TurretTurnRate="360" TurretPitchRate="20" AllowsPitch="true" PitchHeight="99%" MinimumPitch="-20d" MinIdleScanTime="1.0s" MaxIdleScanTime="5.0s" MinIdleScanAngle="0.0" MaxIdleScanAngle="90.0"> <TurretAITargetChooserData CanAcquireDynamicIfAssignedOutOfRange="true" /> </TurretSettings> </WeaponSlotTurret> <!--<WeaponSlotTurret ID="2"> <Weapon Ordering="PRIMARY_WEAPON" Template="GDIPredatorTankCannon" Upgrade="Upgrade_UnPack" /> <TurretSettings TurretTurnRate="360" TurretPitchRate="20" AllowsPitch="true" PitchHeight="99%" MinimumPitch="-20d" MinIdleScanTime="1.0s" MaxIdleScanTime="5.0s" MinIdleScanAngle="0.0" MaxIdleScanAngle="90.0"> <TurretAITargetChooserData CanAcquireDynamicIfAssignedOutOfRange="true" /> </TurretSettings> </WeaponSlotTurret>--> </WeaponSetUpdate> <SlowDeath id="ModuleTag_Death" SinkDelay="3s" SinkRate="1.0" DestructionDelay="7s"> <OCL Type="INITIAL"> <OCL>OCL_GDIPredatorTankDebris</OCL> </OCL> <DieMuxData DeathTypes="ALL" DeathTypesForbidden="TOPPLED" /> <Sound Type="INITIAL" List="GDI_Generic_VoiceDieMS" /> </SlowDeath> <FXListBehavior id="ModuleTag_FXList"> <DieMuxData DeathTypes="ALL" /> <Event Index="onDeath" FX="FX_GDIMammothExplode" /> </FXListBehavior> <SpecialPower id="ModuleTag_GiveUnpackUpgradeSpecialPowerTrigger" SpecialPowerTemplate="SpecialPower_GrantUnpackUpgrade" UpdateModuleStartsAttack="true" SetModelCondition="UNPACKING" SetModelConditionTime="4.0s" DisableDuringAnimDuration="true" /> <GiveOrRestoreUpgradeSpecialPower id="ModuleTag_GiveUnpackUpgradeSpecialPowerUpdate" SpecialPowerTemplate="SpecialPower_GrantUnpackUpgrade" UpgradeToGive="Upgrade_UnPack" PreparationTime="4.0s" Options="SHOW_PREPARATION_PROGRESS MUST_FINISH_ABILITY" /> <SpecialPower id="ModuleTag_GivePackUpgradeSpecialPowerTrigger" SpecialPowerTemplate="SpecialPower_GrantPackUpgrade" UpdateModuleStartsAttack="true" SetModelCondition="PACKING" SetModelConditionTime="4.0s" DisableDuringAnimDuration="true" /> <GiveOrRestoreUpgradeSpecialPower id="ModuleTag_GivePackUpgradeSpecialPowerUpdate" SpecialPowerTemplate="SpecialPower_GrantPackUpgrade" UpgradeToGive="Upgrade_Pack" PreparationTime="4.0s" Options="SHOW_PREPARATION_PROGRESS MUST_FINISH_ABILITY" /> <LocomotorSetUpgrade id="ModuleTag_AttributeModifierDeployed2"> <TriggeredBy>Upgrade_UnPack</TriggeredBy> </LocomotorSetUpgrade> <AttributeModifierUpgrade id="ModuleTag_AttributeModifierDeployed" AttributeModifier="AttributeModifier_SpartanDeployed"> <TriggeredBy>Upgrade_UnPack</TriggeredBy> </AttributeModifierUpgrade> <RemoveUpgradeUpgrade id="ModuleTag_RemoveUpgradeUpgrade1"> <UpgradeToRemove>Upgrade_Pack</UpgradeToRemove> <TriggeredBy>Upgrade_UnPack</TriggeredBy> </RemoveUpgradeUpgrade> <RemoveUpgradeUpgrade id="ModuleTag_RemoveUpgradeUpgrade2"> <UpgradeToRemove>Upgrade_UnPack</UpgradeToRemove> <TriggeredBy>Upgrade_Pack</TriggeredBy> </RemoveUpgradeUpgrade> <AISpecialPowerUpdate id="ModuleTag_SpartanUnpackAI" CommandButtonName="Command_UnpackSpartan" SpecialPowerAIType="SPECIAL_POWER_BASIC_SELF_BUFF" SpecialPowerRadius="200.0" AllyUnitInclude="NEUTRAL_TECH" EnemyUnitExclude="CAN_ATTACK" /> <ArmorUpgrade id="ModuleTag_RemoveDirectionalArmor" ArmorSetFlag="PLAYER_UPGRADE"> <TriggeredBy>Upgrade_UnPack</TriggeredBy> </ArmorUpgrade> <!--<WeaponSetUpdate id="ModuleTag_WeaponSetUpdate"> <WeaponSlotTurret ID="1" AllowInterleavedFiring="false" InterleavedStyle="INTERLEAVE_FIRST_AVAILABLE" WeaponChoiceCriteria="PREFER_MOST_DAMAGE"> <Weapon Ordering="PRIMARY_WEAPON" Template="GDIPredatorTankCannon" /> <TurretSettings TurretTurnRate="200" TurretPitchRate="40" AllowsPitch="true" MinIdleScanTime="1.0s" MaxIdleScanTime="5.0s" MinIdleScanAngle="0.0" MaxIdleScanAngle="90.0"> <TurretAITargetChooserData CanAcquireDynamicIfAssignedOutOfRange="true" /> </TurretSettings> </WeaponSlotTurret> </WeaponSetUpdate> <LaserState id="ModuleTag_LaserState" LaserId="0"></LaserState> <Physics id="ModuleTag_Physics" /> <SlowDeath id="ModuleTag_Death" SinkDelay="3s" SinkRate="1.0" DestructionDelay="7s"> <OCL Type="INITIAL"> <OCL>OCL_GDIPredatorTankDebris</OCL> </OCL> <DieMuxData DeathTypes="ALL" DeathTypesForbidden="TOPPLED" /> <Sound Type="INITIAL" List="GDI_Generic_VoiceDieMS" /> </SlowDeath> <FXListBehavior id="ModuleTag_FXList"> <DieMuxData DeathTypes="ALL" /> <Event Index="onDeath" FX="FX_GDIMammothExplode" /> </FXListBehavior> <StatusBitsUpgrade id="ModuleTag_VeterancyUpgrade" StatusToSet="WEAPON_UPGRADED_03"> <TriggeredBy>Upgrade_Veterancy_HEROIC</TriggeredBy> </StatusBitsUpgrade> <ModelConditionUpgrade id="ModuleTag_AllFactionUpgrade" AddConditionFlags="USER_5"> <TriggeredBy>Upgrade_AllFactionUpgrade</TriggeredBy> </ModelConditionUpgrade>--> </Behaviors> <AI> <AIUpdate id="ModuleTag_AI" AutoAcquireEnemiesWhenIdle="YES" AILuaEventsList="GDIPredatorFunctions"> <UnitAITargetChooserData CanPickDynamicTargets="false" SympathyRange="100.0" /> </AIUpdate> </AI> <Body> <ActiveBody id="ModuleTag_Body" MaxHealth="4000" /> </Body> <Geometry IsSmall="false"> <Shape Type="BOX" MajorRadius="18.0" MinorRadius="12.0" Height="10.0" ContactPointGeneration="VEHICLE" /> </Geometry> <ClientBehaviors> <ModelConditionAudioLoopClientBehavior id="ModuleTag_MCALCB"> <ModelConditionSound Sound="GDI_MCVPackBed" RequiredFlags="UNPACKING" /> </ModelConditionAudioLoopClientBehavior> <AnimationSoundClientBehavior id="AnimationSoundCB" > <Sound Sound="GDI_MCVPack1" Animation="GUVEHICLEY_DPLY_AN" Frame="84" /> <Sound Sound="GDI_MCVPack2" Animation="GUVEHICLEY_DPLY_AN" Frame="52" /> <Sound Sound="GDI_MCVPack3" Animation="GUVEHICLEY_DPLY_AN" Frame="12" /> <Sound Sound="GDI_MCVPack4" Animation="GUVEHICLEY_DPLY_AN" Frame="20" /> <Sound Sound="GDI_MCVPack5" Animation="GUVEHICLEY_DPLY_AN" Frame="1" /> </AnimationSoundClientBehavior> </ClientBehaviors> <AudioArrayVoice> <AudioEntry Sound="GDI_Spartan_VoiceAttack" AudioType="voiceAttack" /> <AudioEntry Sound="GDI_Spartan_VoiceCreate" AudioType="voiceCreated" /> <AudioEntry Sound="GDI_Spartan_VoiceCreate" AudioType="voiceFullyCreated" /> <AudioEntry Sound="GDI_Spartan_VoiceMove" AudioType="voiceGuard" /> <AudioEntry Sound="GDI_Spartan_VoiceMoveAttack" AudioType="voiceAttackAfterMoving" /> <AudioEntry Sound="GDI_Spartan_VoiceMove" AudioType="voiceMove" /> <AudioEntry Sound="GDI_Spartan_VoiceRetreat" AudioType="voiceRetreatToCastle" /> <AudioEntry Sound="GDI_Spartan_VoiceSelect" AudioType="voiceSelect" /> <AudioEntry Sound="GDI_Spartan_VoiceSelectBattle" AudioType="voiceSelectBattle" /> </AudioArrayVoice> <AudioArraySound> <AudioEntry Sound="PredatorIdleLoop" AudioType="soundAmbient" /> <AudioEntry Sound="PredatorMoveStart" AudioType="soundMoveStart" /> </AudioArraySound> <ShadowInfo Type="VOLUME" /> <VisionInfo VisionRange="350" ShroudClearingRange="400" /> </GameObject> <AttributeModifier id="AttributeModifier_SpartanDeployed" Category="NONE" ObjectStatusToSet="DEPLOYED IMMOBILE" ModelConditionsSet="DEPLOYED"> <Modifier Type="ARMOR" Value="75%"/> </AttributeModifier> </AssetDeclaration>
UnitAbilityButtonTemplates.xml
<UnitAbilityButtonTemplateStore id="UnitAbilityButtonTemplateStore"> <Templates> <SpecialPowerButton Id="Command_UnPackSpartan"> <State Image="Button_AbilityUnPack" Title="NAME:AbilityUnPackRig" Description="DESC:AbilityUnPackRig" /> </SpecialPowerButton> </Templates> </UnitAbilityButtonTemplateStore>
Logic Command
<LogicCommand Type="UNIT_BUILD" id="Command_ConstructGDISpartan"> <Object>GDISpartan</Object> </LogicCommand> <LogicCommand Type="SPECIAL_POWER" id="Command_UnpackSpartan"> <SpecialPower>SpecialPower_GrantUnpackUpgrade</SpecialPower> </LogicCommand> <LogicCommandSet id="GDISpartanCommandSet"> <Cmd>Command_AttackMove</Cmd> <Cmd>Command_UnpackSpartan</Cmd> </LogicCommandSet>