[ Index ] WAROFGENERALS

PHP Cross Reference of WAROFGENERALS MODS SOURCES

title

Body

[close]

/Command and conquer Heure H/Light of five stars/INI/Object/ -> GLAInfantry.ini (source)

   1  
   2  ;------------------------------------------------------------------------------
   3  Object GLAInfantryRebel
   4  
   5    ; *** ART Parameters ***
   6    SelectPortrait         = SURebel_L
   7    ButtonImage            = SURebel
   8  
   9    UpgradeCameo1 = Upgrade_GLAAPBullets
  10    UpgradeCameo2 = Upgrade_GLACamouflage
  11    UpgradeCameo3 = Upgrade_InfantryCaptureBuilding
  12    ;UpgradeCameo4 = NONE
  13    ;UpgradeCameo5 = NONE
  14  
  15    Draw = W3DModelDraw ModuleTag_01
  16  
  17      OkToChangeModelColor = Yes
  18      
  19      ; this says "we don't use these condition states at all, so completely
  20      ; ignore them for purposes of matchmaking"... this is useful to help
  21      ; reduce the number of AliasConditionState clauses you must add in
  22      ; order to avoid ambiguity in some cases.
  23      IgnoreConditionStates = PREATTACK_A FIRING_A BETWEEN_FIRING_SHOTS_A RELOADING_A
  24  
  25      ; ---- standing
  26      DefaultConditionState
  27        Model               = UIRGrd_SKN
  28        IdleAnimation       = UIRGrd_SKL.UIRGrd_STN 0 35
  29        IdleAnimation       = UIRGrd_SKL.UIRGrd_IDA 
  30        IdleAnimation       = UIRGrd_SKL.UIRGrd_IDB 
  31        AnimationMode       = ONCE
  32        WeaponFireFXBone    = PRIMARY Muzzle
  33        WeaponMuzzleFlash   = PRIMARY MuzzleFX
  34        TransitionKey       = TRANS_Standing
  35      End
  36  
  37      ConditionState        = REALLYDAMAGED
  38        IdleAnimation       = UIRGrd_SKL.UIRGrd_STB 0 35
  39        IdleAnimation       = UIRGrd_SKL.UIRGrd_IDC
  40        IdleAnimation       = UIRGrd_SKL.UIRGrd_IDD 
  41        AnimationMode       = ONCE
  42        TransitionKey       = TRANS_StandingHurt
  43      End
  44  
  45      ; ---- moving
  46      ConditionState        = MOVING
  47        Animation           = UIRGrd_SKL.UIRGrd_RNA 15
  48        AnimationMode       = LOOP
  49        TransitionKey       = TRANS_Walking
  50        ParticleSysBone     = None InfantryDustTrails
  51      End
  52      AliasConditionState   = MOVING ATTACKING
  53  
  54      ConditionState        = MOVING REALLYDAMAGED
  55        Animation           = UIRGrd_SKL.UIRGrd_RNB 25
  56        AnimationMode       = LOOP
  57        TransitionKey       = TRANS_WalkingHurt
  58        ParticleSysBone     = None InfantryDustTrails
  59      End
  60      AliasConditionState   = MOVING ATTACKING REALLYDAMAGED
  61      
  62      ; ---- dying 
  63      ConditionState        = DYING
  64        Animation           = UIRGrd_SKL.UIRGrd_DTA 
  65        Animation           = UIRGrd_SKL.UIRGrd_DTB 
  66        AnimationMode       = ONCE
  67        TransitionKey       = TRANS_Dying
  68      End
  69  
  70      TransitionState = TRANS_Dying TRANS_Flailing
  71        Animation = UIRGrd_SKL.UIRGrd_ADTE1
  72        AnimationMode = ONCE
  73      End
  74  
  75      ConditionState = DYING EXPLODED_FLAILING
  76        Animation = UIRGrd_SKL.UIRGrd_ADTE2
  77        AnimationMode = LOOP
  78        TransitionKey = TRANS_Flailing
  79      End
  80  
  81      ConditionState = DYING EXPLODED_BOUNCING
  82        Animation = UIRGrd_SKL.UIRGrd_ADTE3
  83        AnimationMode = ONCE
  84        TransitionKey = None
  85      End
  86      
  87      ConditionState = SPECIAL_CHEERING
  88        Animation = UIRGrd_SKL.UIRGrd_IDB
  89      End
  90  
  91      ; ---- firing
  92      ConditionState = USING_WEAPON_A
  93        Animation = UIRGrd_SKL.UIRGrd_ATA
  94        AnimationMode = LOOP
  95        TransitionKey = TRANS_Firing
  96      End
  97  
  98      ConditionState = USING_WEAPON_A REALLYDAMAGED
  99        Animation = UIRGrd_SKL.UIRGrd_ATA2
 100        AnimationMode = LOOP
 101        TransitionKey = TRANS_FiringHurt
 102      End
 103  
 104      TransitionState = TRANS_Standing TRANS_Firing
 105        Animation = UIRGrd_SKL.UIRGrd_ATAST
 106        AnimationMode = ONCE
 107      End
 108  
 109      TransitionState = TRANS_Firing TRANS_Standing
 110        Animation = UIRGrd_SKL.UIRGrd_ATAED
 111        AnimationMode = ONCE
 112      End
 113  
 114      TransitionState = TRANS_StandingHurt TRANS_FiringHurt
 115        Animation = UIRGrd_SKL.UIRGrd_ATA2ED
 116        AnimationMode = ONCE_BACKWARDS
 117      End
 118  
 119      TransitionState = TRANS_FiringHurt TRANS_StandingHurt
 120        Animation = UIRGrd_SKL.UIRGrd_ATA2ED
 121        AnimationMode = ONCE
 122      End
 123  
 124      TransitionState = TRANS_Standing TRANS_StandingHurt
 125        Animation = UIRGrd_SKL.UIRGrd_ATA2ED
 126        AnimationMode = ONCE
 127      End
 128  
 129      
 130  
 131      ; ------- Bldg-capture
 132  
 133      ConditionState = UNPACKING
 134        Model             = UIRGrd_F_SKN
 135        Animation         = UIRGrd_F_SKL.UIRGrd_F_FDP1
 136        AnimationMode     = ONCE
 137      End
 138      AliasConditionState = UNPACKING REALLYDAMAGED
 139  
 140      ConditionState = RAISING_FLAG
 141        Model             = UIRGrd_F_SKN
 142        Animation         = UIRGrd_F_SKL.UIRGrd_F_FDP2
 143        AnimationMode     = ONCE
 144        TransitionKey     = TRANS_Raising
 145      End
 146      AliasConditionState = RAISING_FLAG REALLYDAMAGED
 147  
 148      ConditionState = PACKING
 149        Model             = UIRGrd_F_SKN
 150        Animation         = UIRGrd_F_SKL.UIRGrd_F_FDP1
 151        AnimationMode     = ONCE_BACKWARDS
 152        Flags             = START_FRAME_LAST
 153        TransitionKey     = TRANS_Packing
 154      End
 155      AliasConditionState = PACKING REALLYDAMAGED
 156  
 157      TransitionState = TRANS_Raising TRANS_Packing
 158        Model             = UIRGrd_F_SKN
 159        Animation         = UIRGrd_F_SKL.UIRGrd_F_FDP2
 160        AnimationMode     = ONCE_BACKWARDS
 161        Flags             = START_FRAME_LAST
 162      End
 163  
 164    End
 165  
 166    ; ***DESIGN parameters ***
 167    DisplayName         = OBJECT:Rebel
 168    Side                = GLA
 169    EditorSorting       = INFANTRY
 170    TransportSlotCount  = 1                 ;how many "slots" we take in a transport (0 == not transportable)
 171   
 172    WeaponSet
 173      Conditions = None 
 174      Weapon = PRIMARY GLARebelMachineGun
 175    End
 176    ArmorSet
 177      Conditions      = None
 178      Armor           = HumanArmor
 179      DamageFX        = InfantryDamageFX
 180    End
 181    VisionRange         = 150
 182    ShroudClearingRange = 300
 183    Prerequisites
 184      Object = GLABarracks
 185    End
 186    BuildCost = 150
 187    BuildTime = 5.0          ;in seconds  
 188  
 189    ExperienceValue     = 15 15 30 40     ;Experience point value at each level
 190    ExperienceRequired  = 0 40 60 120     ;Experience points needed to gain each level
 191    IsTrainable         = Yes             ;Can gain experience
 192    CrushableLevel      = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
 193    CommandSet          = GLAInfantryRebelCommandSet
 194  
 195    ; *** AUDIO Parameters ***
 196    VoiceSelect = RebelVoiceSelect
 197    VoiceMove = RebelVoiceMove
 198    VoiceGuard = RebelVoiceMove
 199    VoiceAttack = RebelVoiceAttack
 200    SoundStealthOn = StealthOn
 201    SoundStealthOff = StealthOff
 202    VoiceFear = RebelVoiceFear
 203    VoiceTaskComplete = RebelVoiceCaptureComplete
 204    UnitSpecificSounds
 205      VoiceCreate = RebelVoiceCreate
 206      VoiceSubdue = RebelVoiceSubdue
 207      VoiceGarrison = RebelVoiceGarrison
 208      VoiceEnter = RebelVoiceMove
 209      VoiceEnterHostile = RebelVoiceMove
 210      VoiceGetHealed      = RebelVoiceMove
 211    End
 212  
 213    ; *** ENGINEERING Parameters ***
 214    RadarPriority = UNIT
 215    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER SCORE 
 216  
 217    Body = ActiveBody ModuleTag_02
 218      MaxHealth       = 120.0
 219      InitialHealth   = 120.0
 220    End
 221  
 222    Behavior = AIUpdateInterface ModuleTag_03
 223      AutoAcquireEnemiesWhenIdle = Yes
 224    End
 225  
 226    Behavior = CommandButtonHuntUpdate  ModuleTag_04 ; allows use of command button hunt script with this unit. 
 227    End
 228  
 229    Locomotor = SET_NORMAL BasicHumanLocomotor
 230  
 231    Behavior = PhysicsBehavior ModuleTag_05
 232      Mass = 5.0
 233    End
 234    Behavior = StealthUpdate ModuleTag_07
 235      StealthDelay                = 2500 ; msec
 236      StealthForbiddenConditions  = ATTACKING USING_ABILITY
 237      MoveThresholdSpeed          = 3
 238      InnateStealth               = No ;Requires upgrade first
 239      OrderIdleEnemiesToAttackMeUponReveal  = Yes
 240    End
 241  
 242    Behavior = WeaponBonusUpgrade ModuleTag_09
 243      TriggeredBy = Upgrade_GLAAPBullets
 244    End
 245    Behavior = StealthUpgrade ModuleTag_10
 246      TriggeredBy = Upgrade_GLACamouflage
 247    End
 248  
 249   
 250    Behavior = SquishCollide ModuleTag_11
 251      ;nothing
 252    End
 253  
 254  
 255  ; --- begin Death modules ---
 256    Behavior = SlowDeathBehavior ModuleTag_Death01
 257      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
 258      SinkDelay           = 3000
 259      SinkRate            = 0.5     ; in Dist/Sec
 260      DestructionDelay    = 8000
 261      FX                  = INITIAL FX_RebelDie
 262    End
 263    Behavior = SlowDeathBehavior ModuleTag_Death02
 264      DeathTypes          = NONE +CRUSHED +SPLATTED
 265      SinkDelay           = 3000
 266      SinkRate            = 0.5     ; in Dist/Sec
 267      DestructionDelay    = 8000
 268      FX                  = INITIAL FX_GIDieCrushed
 269    End
 270    Behavior = SlowDeathBehavior ModuleTag_Death03
 271      DeathTypes          = NONE +EXPLODED
 272      SinkDelay           = 3000
 273      SinkRate            = 0.5     ; in Dist/Sec
 274      DestructionDelay    = 8000
 275      FX                  = INITIAL FX_RebelDie
 276      FlingForce          = 8
 277      FlingForceVariance  = 3
 278      FlingPitch          = 60
 279      FlingPitchVariance  = 10
 280    End
 281    Behavior = SlowDeathBehavior ModuleTag_Death04
 282      DeathTypes          = NONE +BURNED
 283      DestructionDelay    = 0
 284      FX                  = INITIAL FX_DieByFireGLA
 285      OCL                 = INITIAL OCL_FlamingInfantry
 286    End
 287    Behavior = SlowDeathBehavior ModuleTag_Death05
 288      DeathTypes          = NONE +POISONED
 289      DestructionDelay    = 0
 290      FX                  = INITIAL FX_DieByToxinGLA
 291      OCL                 = INITIAL OCL_ToxicInfantry
 292    End
 293    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
 294      DeathTypes          = NONE +POISONED_BETA
 295      DestructionDelay    = 0
 296      FX                  = INITIAL FX_DieByToxinGLA
 297      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
 298    End
 299    Behavior = SlowDeathBehavior ModuleTag_Death07
 300      DeathTypes          = NONE +POISONED_GAMMA
 301      DestructionDelay    = 0
 302      FX                  = INITIAL FX_DieByToxinGLA
 303      OCL                 = INITIAL OCL_ToxicInfantryGamma
 304    End
 305  
 306  ; --- end Death modules ---
 307  
 308    Behavior = PoisonedBehavior ModuleTag_16
 309      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
 310      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
 311    End
 312  
 313    Behavior = SpecialAbility ModuleTag_17
 314      SpecialPowerTemplate      = SpecialAbilityRebelCaptureBuilding
 315      UpdateModuleStartsAttack  = Yes
 316      StartsPaused              = Yes
 317      InitiateSound         = RebelVoiceCapture
 318    End
 319    Behavior = SpecialAbilityUpdate ModuleTag_18
 320      SpecialPowerTemplate  = SpecialAbilityRebelCaptureBuilding
 321      StartAbilityRange  = 5.0
 322      UnpackTime            = 3000  ; (changing this will scale anim speed)
 323      PreparationTime       = 20000 ; time to complete hack once prepared (changing this will scale anim speed)
 324      PackTime              = 2000  ; (changing this will scale anim speed)
 325      DoCaptureFX           = Yes
 326      AwardXPForTriggering  = 12
 327      ;SkillPointsForTriggering = ???  -- Dustin, fill me out if you want different balance values.
 328    End
 329  
 330    Behavior = UnpauseSpecialPowerUpgrade ModuleTag_19
 331      SpecialPowerTemplate = SpecialAbilityRebelCaptureBuilding
 332      TriggeredBy = Upgrade_InfantryCaptureBuilding
 333    End
 334  
 335    Behavior = SpecialAbility ModuleTag_20
 336      SpecialPowerTemplate = SpecialAbilityBoobyTrap
 337      UpdateModuleStartsAttack = Yes
 338      StartsPaused              = Yes
 339      InitiateSound = RebelVoiceBoobyTrapInstall
 340    End
 341    Behavior = SpecialAbilityUpdate ModuleTag_21
 342      SpecialPowerTemplate = SpecialAbilityBoobyTrap
 343      StartAbilityRange = 5.0
 344      PreparationTime = 0
 345      SpecialObject = BoobyTrap
 346      MaxSpecialObjects = 100
 347      SpecialObjectsPersistWhenOwnerDies = Yes
 348      SpecialObjectsPersistent = Yes          ;Charges are persistent till lifetime expires or owner detonates them.
 349  ; Not implemented    UniqueSpecialObjectTargets = Yes        ;This prevents multiple charges placed on the same object.
 350    End
 351  
 352    Behavior = UnpauseSpecialPowerUpgrade ModuleTag_22
 353      SpecialPowerTemplate = SpecialAbilityBoobyTrap
 354      TriggeredBy = Upgrade_GLAInfantryRebelBoobyTrapAttack
 355    End
 356  
 357    Geometry = CYLINDER
 358    GeometryMajorRadius = 10.0
 359    GeometryMinorRadius = 10.0
 360    GeometryHeight = 12.0
 361    GeometryIsSmall = Yes
 362    Shadow = SHADOW_DECAL
 363    ShadowSizeX = 14;
 364    ShadowSizeY = 14;
 365    ShadowTexture = ShadowI;
 366    BuildCompletion = APPEARS_AT_RALLY_POINT
 367  
 368  End
 369  
 370  ;----------------------------------------------------------------------------
 371  Object GLAInfantryJarmenKell
 372  
 373    ; *** ART Parameters ***
 374    SelectPortrait         = SUJermanKell1_L  ;NOTE: Asset spelling mistake
 375    ButtonImage            = SUJermanKell1
 376    
 377    UpgradeCameo1 = Upgrade_GLAAPBullets
 378    ;UpgradeCameo2 = NONE
 379    ;UpgradeCameo3 = NONE
 380    ;UpgradeCameo4 = NONE
 381    ;UpgradeCameo5 = NONE
 382    
 383    Draw = W3DModelDraw ModuleTag_01
 384      OkToChangeModelColor = Yes
 385  
 386      ; --- idle
 387      DefaultConditionState
 388        Model             = UIHERO_SKN
 389        IdleAnimation     = UIHERO_SKL.UIHERO_STA 0 21
 390        IdleAnimation     = UIHERO_SKL.UIHERO_IDA
 391        IdleAnimation     = UIHERO_SKL.UIHERO_IDB
 392        AnimationMode     = ONCE
 393        WeaponFireFXBone  = PRIMARY Muzzle
 394        WeaponMuzzleFlash = PRIMARY MuzzleFX
 395        TransitionKey     = TRANS_Stand
 396      End
 397  
 398      ConditionState      = REALLYDAMAGED
 399        IdleAnimation     = UIHERO_SKL.UIHERO_ISTA 0 30
 400        IdleAnimation     = UIHERO_SKL.UIHERO_IIDA
 401        IdleAnimation     = UIHERO_SKL.UIHERO_IIDB
 402        AnimationMode     = ONCE
 403        TransitionKey     = TRANS_StandInjured
 404      End
 405  
 406      TransitionState     = TRANS_Stand TRANS_StandInjured
 407        Animation         = UIHERO_SKL.UIHERO_ISTAHIT
 408        AnimationMode     = ONCE
 409      End
 410  
 411      ; --- attack
 412  
 413      ConditionState      = FIRING_A 
 414        Animation         = UIHERO_SKL.UIHERO_ATA 
 415        AnimationMode     = ONCE
 416        TransitionKey     = TRANS_FiringA
 417        AnimationSpeedFactorRange = 1.5 1.5
 418      End
 419  
 420      ConditionState      = BETWEEN_FIRING_SHOTS_A
 421        Animation         = UIHERO_SKL.UIHERO_STA
 422        AnimationMode     = ONCE
 423        WaitForStateToFinishIfPossible = TRANS_FiringA
 424      End
 425      AliasConditionState = RELOADING_A
 426    
 427      ConditionState      = FIRING_A REALLYDAMAGED
 428        Animation         = UIHERO_SKL.UIHERO_IATA2
 429        AnimationMode     = ONCE
 430        TransitionKey     = TRANS_FiringAInjured
 431        AnimationSpeedFactorRange = 1.5 1.5
 432      End
 433  
 434      ConditionState      = BETWEEN_FIRING_SHOTS_A REALLYDAMAGED
 435        Animation         = UIHERO_SKL.UIHERO_IATA2
 436        AnimationMode     = MANUAL
 437        Flags             = START_FRAME_LAST
 438        WaitForStateToFinishIfPossible = TRANS_FiringAInjured
 439      End
 440      AliasConditionState = RELOADING_A REALLYDAMAGED
 441  
 442      TransitionState     = TRANS_FiringA TRANS_FiringAInjured
 443        Animation         = UIHERO_SKL.UIHERO_IATAHIT
 444        AnimationMode     = ONCE
 445      End
 446  
 447      ; --- moving
 448      ConditionState      = MOVING
 449        Animation         = UIHERO_SKL.UIHERO_RNA2 30
 450        AnimationMode     = LOOP
 451        Flags             = RANDOMSTART
 452        TransitionKey     = None
 453        ParticleSysBone   = None InfantryDustTrails
 454      End
 455      AliasConditionState = MOVING FIRING_A
 456      AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A
 457      AliasConditionState = MOVING RELOADING_A
 458      AliasConditionState = MOVING DOCKING
 459      AliasConditionState = MOVING DOCKING_BEGINNING
 460      AliasConditionState = MOVING DOCKING_ACTIVE
 461  
 462      ConditionState      = MOVING REALLYDAMAGED
 463        Animation         = UIHERO_SKL.UIHERO_IRNA 30
 464        AnimationMode     = LOOP
 465        Flags             = RANDOMSTART
 466        TransitionKey     = None
 467        ParticleSysBone   = None InfantryDustTrails
 468      End
 469      AliasConditionState = MOVING FIRING_A REALLYDAMAGED
 470      AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A REALLYDAMAGED
 471      AliasConditionState = MOVING RELOADING_A REALLYDAMAGED
 472      
 473      ; --- cheering
 474      ConditionState      = SPECIAL_CHEERING
 475        Animation         = UIHERO_SKL.UIHERO_CHA
 476        AnimationMode     = LOOP
 477      End
 478  
 479      ConditionState      = SPECIAL_CHEERING REALLYDAMAGED
 480        Animation         = UIHERO_SKL.UIHERO_ICHA
 481        AnimationMode     = LOOP
 482      End
 483      
 484      ; --- dying
 485      ConditionState      = DYING
 486        Animation         = UIHERO_SKL.UIHERO_DTA
 487        Animation         = UIHERO_SKL.UIHERO_DTB
 488        Animation         = UIHERO_SKL.UIHERO_IDTA
 489        Animation         = UIHERO_SKL.UIHERO_IDTB
 490        AnimationMode     = ONCE
 491        TransitionKey     = TRANS_Dying
 492      End
 493  
 494      TransitionState     = TRANS_Dying TRANS_Flailing
 495        Animation         = UIHERO_SKL.UIHERO_ADTG21
 496        AnimationMode     = ONCE
 497      End
 498  
 499      ConditionState      = DYING EXPLODED_FLAILING
 500        Animation         = UIHERO_SKL.UIHERO_ADTG22
 501        AnimationMode     = LOOP
 502        TransitionKey     = TRANS_Flailing
 503      End
 504  
 505      ConditionState      = DYING EXPLODED_BOUNCING
 506        Animation         = UIHERO_SKL.UIHERO_ADTG23
 507        AnimationMode     = ONCE
 508        TransitionKey     = None
 509      End
 510      
 511      ; --- falling
 512      ConditionState      = FREEFALL
 513        Animation         = UIHERO_SKL.UIHERO_PFL
 514        AnimationMode     = LOOP
 515        TransitionKey     = TRANS_Falling
 516      End
 517      AliasConditionState = FREEFALL REALLYDAMAGED
 518      AliasConditionState = FREEFALL DYING
 519  
 520      ConditionState      = PARACHUTING
 521        Animation         = UIHERO_SKL.UIHERO_PHG
 522        AnimationMode     = LOOP
 523        Flags             = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
 524        TransitionKey     = TRANS_Chute
 525      End
 526      AliasConditionState = PARACHUTING REALLYDAMAGED
 527      AliasConditionState = PARACHUTING DYING
 528  
 529      TransitionState     = TRANS_Falling TRANS_Chute
 530        Animation         = UIHERO_SKL.UIHERO_POP
 531        AnimationMode     = ONCE
 532        Flags             = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
 533      End
 534  
 535      TransitionState     = TRANS_Chute TRANS_Stand
 536        Animation         = UIHERO_SKL.UIHERO_PTD
 537        AnimationMode     = ONCE
 538      End
 539  
 540      TransitionState     = TRANS_Chute TRANS_StandInjured
 541        Animation         = UIHERO_SKL.UIHERO_PTD
 542        AnimationMode     = ONCE
 543      End
 544      
 545    End
 546  
 547    ; ***DESIGN parameters ***
 548    DisplayName           = OBJECT:JarmenKell
 549    Side                  = GLA
 550    EditorSorting         = INFANTRY
 551    TransportSlotCount    = 1                 ;how many "slots" we take in a transport (0 == not transportable)
 552    MaxSimultaneousOfType = 1
 553   
 554    WeaponSet
 555      Conditions = None 
 556      Weapon = PRIMARY GLAJarmenKellRifle
 557      Weapon = SECONDARY GLAJarmenKellVehiclePilotSniperRifle
 558      AutoChooseSources = SECONDARY NONE
 559    End
 560  
 561    ArmorSet
 562      Conditions      = None
 563      Armor           = HumanArmor
 564      DamageFX        = InfantryDamageFX
 565    End
 566    VisionRange         = 200
 567    ShroudClearingRange = 400
 568    Prerequisites
 569      Object = GLABarracks
 570      Object = GLAPalace
 571    End
 572    BuildCost = 1500
 573    BuildTime = 20.0          ;in seconds  
 574  
 575    ExperienceValue     = 50 50 100 150    ;Experience point value at each level
 576    ExperienceRequired  = 0 100 200 400  ;Experience points needed to gain each level
 577    IsTrainable         = Yes             ;Can gain experience
 578    CrushableLevel      = 2  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
 579    CommandSet          = GLAInfantryJarmenKellCommandSet
 580  
 581    ; *** AUDIO Parameters ***
 582    VoiceSelect = JarmenKellVoiceSelect
 583    VoiceMove = JarmenKellVoiceMove
 584    VoiceGuard = JarmenKellVoiceMove
 585    VoiceAttack = JarmenKellVoiceAttack
 586    VoiceFear = JarmenKellVoiceFear
 587    SoundStealthOn = StealthOn
 588    SoundStealthOff = StealthOff
 589    
 590    UnitSpecificSounds
 591      VoiceCreate          = JarmenKellVoiceCreate
 592      VoiceSnipePilot      = JarmenKellVoiceSnipe
 593      VoiceGarrison = JarmenKellVoiceGarrison
 594      VoiceEnter = JarmenKellVoiceMove
 595      VoiceEnterHostile = JarmenKellVoiceMove
 596      VoiceGetHealed      = JarmenKellVoiceMove
 597    End
 598  
 599  
 600    ; *** ENGINEERING Parameters ***
 601    RadarPriority = UNIT
 602    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER STEALTH_GARRISON SCORE HERO CANNOT_RETALIATE
 603  
 604    Body = ActiveBody ModuleTag_02
 605      MaxHealth       = 200.0
 606      InitialHealth   = 200.0
 607    End
 608  
 609    Behavior = AIUpdateInterface ModuleTag_03
 610      AutoAcquireEnemiesWhenIdle = Yes
 611    End
 612    Locomotor = SET_NORMAL JarmenKellLocomotor
 613  
 614    Behavior = PhysicsBehavior ModuleTag_04
 615      Mass = 5.0
 616    End
 617    Behavior = StealthUpdate ModuleTag_06
 618      StealthDelay                = 2000 ; msec
 619      StealthForbiddenConditions  = ATTACKING
 620      InnateStealth               = Yes
 621      OrderIdleEnemiesToAttackMeUponReveal  = Yes
 622      EnemyDetectionEvaEvent      = EnemyJarmenKellDetected
 623      OwnDetectionEvaEvent        = OwnJarmenKellDetected
 624    End
 625  
 626    Behavior = CommandButtonHuntUpdate  ModuleTag_07 ; allows use of command button hunt script with this unit. 
 627    End
 628  
 629    Behavior = WeaponBonusUpgrade ModuleTag_08
 630      TriggeredBy = Upgrade_GLAAPBullets
 631    End
 632   
 633    ;Hero units can't be squished!
 634    ;Behavior = SquishCollide ModuleTag_09
 635    ;  ;nothing
 636    ;End
 637  
 638  
 639  ; --- begin Death modules ---
 640    Behavior = SlowDeathBehavior ModuleTag_Death01
 641      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
 642      SinkDelay           = 3000
 643      SinkRate            = 0.5     ; in Dist/Sec
 644      DestructionDelay    = 8000
 645      FX                  = INITIAL FX_JarmenKellDie
 646    End
 647    Behavior = SlowDeathBehavior ModuleTag_Death02
 648      DeathTypes          = NONE +CRUSHED +SPLATTED
 649      SinkDelay           = 3000
 650      SinkRate            = 0.5     ; in Dist/Sec
 651      DestructionDelay    = 8000
 652      FX                  = INITIAL FX_GIDieCrushed
 653    End
 654    Behavior = SlowDeathBehavior ModuleTag_Death03
 655      DeathTypes          = NONE +EXPLODED
 656      SinkDelay           = 3000
 657      SinkRate            = 0.5     ; in Dist/Sec
 658      DestructionDelay    = 8000
 659      FX                  = INITIAL FX_JarmenKellDie
 660      FlingForce          = 8
 661      FlingForceVariance  = 3
 662      FlingPitch          = 60
 663      FlingPitchVariance  = 10
 664    End
 665    Behavior = SlowDeathBehavior ModuleTag_Death04
 666      DeathTypes          = NONE +BURNED
 667      DestructionDelay    = 0
 668      FX                  = INITIAL FX_DieByFireGLA
 669      OCL                 = INITIAL OCL_FlamingInfantry
 670    End
 671    Behavior = SlowDeathBehavior ModuleTag_Death05
 672      DeathTypes          = NONE +POISONED
 673      DestructionDelay    = 0
 674      FX                  = INITIAL FX_DieByToxinGLA
 675      OCL                 = INITIAL OCL_ToxicInfantry
 676    End
 677    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
 678      DeathTypes          = NONE +POISONED_BETA
 679      DestructionDelay    = 0
 680      FX                  = INITIAL FX_DieByToxinGLA
 681      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
 682    End
 683    Behavior = SlowDeathBehavior ModuleTag_Death07
 684      DeathTypes          = NONE +POISONED_GAMMA
 685      DestructionDelay    = 0
 686      FX                  = INITIAL FX_DieByToxinGLA
 687      OCL                 = INITIAL OCL_ToxicInfantryGamma
 688    End
 689  
 690  ; --- end Death modules ---
 691  
 692    Behavior = PoisonedBehavior ModuleTag_14
 693      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
 694      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
 695    End
 696   
 697    Geometry = CYLINDER
 698    GeometryMajorRadius = 10.0
 699    GeometryMinorRadius = 10.0
 700    GeometryHeight = 12.0
 701    GeometryIsSmall = Yes
 702    Shadow = SHADOW_DECAL
 703    ShadowSizeX = 14;
 704    ShadowSizeY = 14;
 705    ShadowTexture = ShadowI;
 706    BuildCompletion = APPEARS_AT_RALLY_POINT
 707  
 708  End
 709  
 710  
 711  
 712  
 713  
 714  
 715  
 716  ;------------------------------------------------------------------------------
 717  ;Tunnel Fanatic ;Now called the RPG Trooper
 718  Object GLAInfantryTunnelDefender
 719  
 720    ; *** ART Parameters ***
 721    SelectPortrait         = SURPG_L
 722    ButtonImage            = SURPG
 723    
 724    UpgradeCameo1 = Upgrade_GLAAPRockets
 725    ;UpgradeCameo2 = NONE
 726    ;UpgradeCameo3 = NONE
 727    ;UpgradeCameo4 = NONE
 728    ;UpgradeCameo5 = NONE
 729  
 730    Draw = W3DModelDraw ModuleTag_01
 731      OkToChangeModelColor = Yes
 732  
 733      DefaultConditionState
 734        Model = UITunF_SKN
 735        IdleAnimation = UITunF_SKL.UITunF_STA 0 20
 736        IdleAnimation = UITunF_SKL.UITunF_IDA 
 737        IdleAnimation = UITunF_SKL.UITunF_IDB 
 738        IdleAnimation = UITunF_SKL.UITunF_IDC 
 739        AnimationMode = ONCE
 740        WeaponMuzzleFlash = PRIMARY MuzzleFX
 741        WeaponFireFXBone = PRIMARY Muzzle
 742        WeaponLaunchBone = PRIMARY Muzzle
 743      End
 744  
 745      ConditionState = MOVING
 746        Animation = UITunF_SKL.UITunF_WKA 16
 747        Animation = UITunF_SKL.UITunF_WKB 30
 748        Animation = UITunF_SKL.UITunF_WKC 30
 749        Animation = UITunF_SKL.UITunF_RNA 15
 750        Animation = UITunF_SKL.UITunF_RNB 25   
 751        AnimationMode = LOOP
 752        ParticleSysBone   = None InfantryDustTrails
 753      End
 754  
 755      ConditionState = DYING
 756        Animation = UITunF_SKL.UITunF_DTA 
 757        Animation = UITunF_SKL.UITunF_DTB 
 758        AnimationMode = ONCE
 759        TransitionKey = TRANS_Dying
 760      End
 761  
 762      TransitionState = TRANS_Dying TRANS_Flailing
 763        Animation = UITunF_SKL.UITunF_ADTA1
 764        Animation = UITunF_SKL.UITunF_ADTE1
 765        Animation = UITunF_SKL.UITunF_ADTF1
 766        AnimationMode = ONCE
 767      End
 768  
 769      ConditionState = DYING EXPLODED_FLAILING
 770        Animation = UITunF_SKL.UITunF_ADTA2
 771        Animation = UITunF_SKL.UITunF_ADTE2
 772        Animation = UITunF_SKL.UITunF_ADTF2
 773        AnimationMode = LOOP
 774        TransitionKey = TRANS_Flailing
 775      End
 776  
 777      ConditionState = DYING EXPLODED_BOUNCING
 778        Animation = UITunF_SKL.UITunF_ADTA3
 779        Animation = UITunF_SKL.UITunF_ADTE3
 780        Animation = UITunF_SKL.UITunF_ADTF3
 781        AnimationMode = ONCE
 782        TransitionKey = None
 783      End
 784  
 785      ConditionState = FIRING_A 
 786        Animation = UITunF_SKL.UITunF_ATA 
 787        AnimationMode = ONCE
 788        TransitionKey = TRANS_START_FIRING
 789      End
 790      ConditionState = BETWEEN_FIRING_SHOTS_A
 791        Animation = UITunF_SKL.UITunF_STA
 792        AnimationMode = ONCE
 793        ; this is basically a trick: this guy has a nontrivial animation for firing,
 794        ; and a long recycle time between shots. we want him to finish his fire animation
 795        ; (unless he's ordered to do something else), so this is just a handy trick that
 796        ; says, "if the previous state had this transition key, allow it to finish before
 797        ; switching to us, if possible".
 798        WaitForStateToFinishIfPossible = TRANS_START_FIRING
 799      End
 800      AliasConditionState = RELOADING_A
 801  
 802      ConditionState = SPECIAL_CHEERING
 803        Animation = UITUNF_SKL.UITUNF_CHA
 804        AnimationMode = LOOP
 805      End
 806  
 807    End
 808  
 809    ; ***DESIGN parameters ***
 810    DisplayName      = OBJECT:TunnelDefender
 811    Side = GLA
 812    EditorSorting = INFANTRY
 813    TransportSlotCount = 1                 ;how many "slots" we take in a transport (0 == not transportable)
 814    WeaponSet
 815      Conditions = None 
 816      Weapon = PRIMARY TunnelDefenderRocketWeapon
 817    End
 818    ArmorSet
 819      Conditions      = None
 820      Armor           = HumanArmor
 821      DamageFX        = InfantryDamageFX
 822    End
 823    VisionRange = 150
 824    ShroudClearingRange = 400
 825   ; Prerequisites
 826   ;   Object = GLATunnelNetwork
 827   ; End
 828    BuildCost = 300
 829    BuildTime = 5.0          ;in seconds  
 830  
 831    ExperienceValue = 20 20 40 60    ;Experience point value at each level
 832    ExperienceRequired = 0 100 200 400  ;Experience points needed to gain each level
 833    IsTrainable = Yes             ;Can gain experience
 834    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
 835    CommandSet      = GLAInfantryTunnelDefenderCommandSet
 836  
 837    ; *** AUDIO Parameters ***
 838    VoiceSelect = RPGTrooperVoiceSelect
 839    VoiceMove = RPGTrooperVoiceMove
 840    VoiceGuard = RPGTrooperVoiceMove
 841    VoiceAttack = RPGTrooperVoiceAttack
 842    VoiceFear = RPGTrooperVoiceFear
 843    UnitSpecificSounds
 844      VoiceCreate          = RPGTrooperVoiceCreate
 845      VoiceGarrison = RPGTrooperVoiceGarrison
 846      VoiceEnter = RPGTrooperVoiceMove
 847      VoiceEnterHostile = RPGTrooperVoiceMove
 848      VoiceGetHealed      = RPGTrooperVoiceMove
 849    End
 850  
 851  
 852    ; *** ENGINEERING Parameters ***
 853    RadarPriority = UNIT
 854    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER SCORE
 855  
 856    Body = ActiveBody ModuleTag_02
 857      MaxHealth       = 100.0
 858      InitialHealth   = 100.0
 859    End
 860  
 861    Behavior = AIUpdateInterface ModuleTag_03
 862      AutoAcquireEnemiesWhenIdle = Yes
 863    End
 864    Locomotor = SET_NORMAL MissileDefenderLocomotor
 865  
 866    Behavior = PhysicsBehavior ModuleTag_04
 867      Mass = 5.0
 868    End
 869   
 870    Behavior = SquishCollide ModuleTag_06
 871      ;nothing
 872    End
 873  
 874  ; --- begin Death modules ---
 875    Behavior = SlowDeathBehavior ModuleTag_Death01
 876      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
 877      SinkDelay           = 3000
 878      SinkRate            = 0.5     ; in Dist/Sec
 879      DestructionDelay    = 8000
 880      FX                  = INITIAL FX_RPGTrooperDie
 881    End
 882    Behavior = SlowDeathBehavior ModuleTag_Death02
 883      DeathTypes          = NONE +CRUSHED +SPLATTED
 884      SinkDelay           = 3000
 885      SinkRate            = 0.5     ; in Dist/Sec
 886      DestructionDelay    = 8000
 887      FX                  = INITIAL FX_GIDieCrushed
 888    End
 889    Behavior = SlowDeathBehavior ModuleTag_Death03
 890      DeathTypes          = NONE +EXPLODED
 891      SinkDelay           = 3000
 892      SinkRate            = 0.5     ; in Dist/Sec
 893      DestructionDelay    = 8000
 894      FX                  = INITIAL FX_RPGTrooperDie
 895      FlingForce          = 8
 896      FlingForceVariance  = 3
 897      FlingPitch          = 60
 898      FlingPitchVariance  = 10
 899    End
 900    Behavior = SlowDeathBehavior ModuleTag_Death04
 901      DeathTypes          = NONE +BURNED
 902      DestructionDelay    = 0
 903      FX                  = INITIAL FX_DieByFireGLA
 904      OCL                 = INITIAL OCL_FlamingInfantry
 905    End
 906    Behavior = SlowDeathBehavior ModuleTag_Death05
 907      DeathTypes          = NONE +POISONED
 908      DestructionDelay    = 0
 909      FX                  = INITIAL FX_DieByToxinGLA
 910      OCL                 = INITIAL OCL_ToxicInfantry
 911    End
 912    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
 913      DeathTypes          = NONE +POISONED_BETA
 914      DestructionDelay    = 0
 915      FX                  = INITIAL FX_DieByToxinGLA
 916      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
 917    End
 918    Behavior = SlowDeathBehavior ModuleTag_Death07
 919      DeathTypes          = NONE +POISONED_GAMMA
 920      DestructionDelay    = 0
 921      FX                  = INITIAL FX_DieByToxinGLA
 922      OCL                 = INITIAL OCL_ToxicInfantryGamma
 923    End
 924  
 925  ; --- end Death modules ---
 926  
 927    Behavior = PoisonedBehavior ModuleTag_12
 928      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
 929      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
 930    End
 931   
 932    Geometry = CYLINDER
 933    GeometryMajorRadius = 10.0
 934    GeometryMinorRadius = 10.0
 935    GeometryHeight = 12.0
 936    GeometryIsSmall = Yes
 937    Shadow = SHADOW_DECAL
 938    ShadowSizeX = 14;
 939    ShadowSizeY = 14;
 940    ShadowTexture = ShadowI;
 941    BuildCompletion = APPEARS_AT_RALLY_POINT
 942  
 943  End
 944  
 945  ;------------------------------------------------------------------------------
 946  ;***THESE UNITS ARE NOT SELECTABLE ANYMORE! To kill them, you must target
 947  ;   the stinger site. If the weapon does particular types of damage, it'll
 948  ;   kill guys inside first, then the site.
 949  Object GLAInfantryStingerSoldier
 950  
 951    ; *** ART Parameters ***
 952    SelectPortrait         = SUStinger_L
 953    ButtonImage            = SUStinger
 954  
 955    Draw = W3DModelDraw ModuleTag_01
 956      OkToChangeModelColor = Yes
 957  
 958      DefaultConditionState
 959        Model = UISmsd_SKN
 960        IdleAnimation = UISmsd_SKL.UISmsd_STA 0 45
 961        IdleAnimation = UISmsd_SKL.UISmsd_IDA 
 962        IdleAnimation = UISmsd_SKL.UISmsd_IDB 
 963        IdleAnimation = UISmsd_SKL.UISmsd_IDC 
 964        IdleAnimation = UISmsd_SKL.UISmsd_IDD 
 965        AnimationMode = ONCE
 966        WeaponMuzzleFlash = PRIMARY MuzzleFX
 967        WeaponFireFXBone = PRIMARY Exhaust
 968        WeaponLaunchBone = PRIMARY Muzzle
 969        WeaponFireFXBone = SECONDARY Exhaust
 970        WeaponLaunchBone = SECONDARY Muzzle
 971  
 972        WaitForStateToFinishIfPossible = TRANS_START_FIRING
 973  
 974      End
 975      AliasConditionState = BETWEEN_FIRING_SHOTS_A
 976      AliasConditionState = BETWEEN_FIRING_SHOTS_B
 977      AliasConditionState = RELOADING_A
 978      AliasConditionState = RELOADING_B
 979  
 980      ConditionState = MOVING
 981        Animation = UISmsd_SKL.UISmsd_WKB 25
 982        AnimationMode = LOOP
 983      End
 984  
 985      ConditionState = DYING
 986        Animation = UISmsd_SKL.UISmsd_DTA 
 987        Animation = UISmsd_SKL.UISmsd_DTB 
 988        AnimationMode = ONCE
 989        TransitionKey = TRANS_Dying
 990        WaitForStateToFinishIfPossible = NONE ; We got a Key from Default state, but Death does not need to wait for firing to finish
 991      End
 992  
 993      TransitionState = TRANS_Dying TRANS_Flailing
 994        Animation = UISmsd_SKL.UISmsd_ADTF1
 995        Animation = UISmsd_SKL.UISmsd_ADTG21
 996        AnimationMode = ONCE
 997      End
 998  
 999      ConditionState = DYING EXPLODED_FLAILING
1000        Animation = UISmsd_SKL.UISmsd_ADTF2
1001        Animation = UISmsd_SKL.UISmsd_ADTG22
1002        AnimationMode = LOOP
1003        TransitionKey = TRANS_Flailing
1004        WaitForStateToFinishIfPossible = NONE ; We got a Key from Default state, but Death does not need to wait for firing to finish
1005      End
1006  
1007      ConditionState = DYING EXPLODED_BOUNCING
1008        Animation = UISmsd_SKL.UISmsd_ADTF3
1009        Animation = UISmsd_SKL.UISmsd_ADTG23
1010        AnimationMode = ONCE
1011        TransitionKey = None
1012        WaitForStateToFinishIfPossible = NONE ; We got a Key from Default state, but Death does not need to wait for firing to finish
1013      End
1014  
1015      ConditionState = FIRING_A
1016        Animation = UISmsd_SKL.UISmsd_ATA
1017        AnimationMode = ONCE
1018        TransitionKey = TRANS_START_FIRING
1019      End
1020      ; AliasConditionState is a new keyword that says,
1021      ; "give me another ConditionState exactly like the previous
1022      ; one, except with different conditions". Useful when you
1023      ; have several states that are the same with only different condition bits.
1024      ; these aliases handle the moving-between-shots case. (we can't actually move-and-fire at the same time.).
1025      AliasConditionState = MOVING FIRING_A
1026      AliasConditionState = MOVING RELOADING_A
1027  
1028      ConditionState = FIRING_B
1029        Animation = UISmsd_SKL.UISmsd_ATB
1030        AnimationMode = ONCE
1031        TransitionKey = TRANS_START_FIRINGB
1032      End
1033      ; AliasConditionState is a new keyword that says,
1034      ; "give me another ConditionState exactly like the previous
1035      ; one, except with different conditions". Useful when you
1036      ; have several states that are the same with only different condition bits.
1037      ; these aliases handle the moving-between-shots case. (we can't actually move-and-fire at the same time.).
1038      AliasConditionState = MOVING FIRING_B
1039      AliasConditionState = MOVING RELOADING_B
1040  
1041  
1042      ConditionState = SPECIAL_CHEERING
1043        Animation = UISMSD_SKL.UISMSD_CHA
1044        AnimationMode = LOOP
1045      End
1046  
1047    End
1048  
1049    ; ***DESIGN parameters ***
1050    DisplayName      = OBJECT:StingerSoldier
1051    Side = GLA
1052    EditorSorting = INFANTRY
1053    TransportSlotCount = 1                 ;how many "slots" we take in a transport (0 == not transportable)
1054    WeaponSet
1055      Conditions          = None 
1056      Weapon              = PRIMARY   StingerMissileWeapon
1057      AutoChooseSources   = PRIMARY   FROM_PLAYER FROM_AI FROM_SCRIPT
1058      Weapon              = SECONDARY StingerMissileWeaponAir
1059      PreferredAgainst    = SECONDARY BALLISTIC_MISSILE AIRCRAFT
1060    End
1061    ArmorSet
1062      Conditions      = None
1063      Armor           = StingerSoldierArmor ;Extra protection due to being enclosed by the stinger site.
1064      DamageFX        = None
1065    End
1066    VisionRange = 400.0
1067    ShroudClearingRange = 400
1068  
1069    Prerequisites
1070      Object = GLABarracks
1071    End
1072    BuildCost = 100
1073    BuildTime = 1.0          ;in seconds    
1074    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
1075  
1076  ;  CommandSet      = GLAInfantryRebelCommandSet
1077  
1078    ; *** AUDIO Parameters ***
1079    VoiceSelect = StingerSoldierVoiceSelect
1080    VoiceMove = StingerSoldierVoiceMove
1081    VoiceAttack = StingerSoldierVoiceAttack
1082  
1083    ; *** ENGINEERING Parameters ***
1084    RadarPriority = UNIT
1085    KindOf = PRELOAD CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER CLICK_THROUGH SPAWNS_ARE_THE_WEAPONS
1086  
1087    Body = ActiveBody ModuleTag_02
1088      MaxHealth       = 100.0
1089      InitialHealth   = 100.0
1090    End
1091  
1092    Behavior = StealthDetectorUpdate ModuleTag_16
1093      DetectionRate   = 500   ; how often to rescan for stealthed things in my sight (msec)
1094      DetectionRange = 200 ;Dustin, enable this for independant balancing!
1095      CanDetectWhileGarrisoned  = No ;Garrisoned means being in a structure that you units can shoot out of.
1096      CanDetectWhileContained   = No ;Contained means being in a transport or tunnel network.
1097    End
1098  
1099    Behavior = AIUpdateInterface ModuleTag_03
1100      AutoAcquireEnemiesWhenIdle = Yes Stealthed ATTACK_BUILDINGS
1101      MoodAttackCheckRate        = 250
1102    End
1103    Locomotor = SET_NORMAL BasicHumanLocomotor
1104    Behavior = PhysicsBehavior ModuleTag_04
1105      Mass = 5.0
1106    End
1107    Behavior = SlavedUpdate ModuleTag_06
1108      ;nothing
1109    End
1110  ;  Behavior = ProneUpdate ModuleTag_07
1111  ;    DamageToFramesRatio = 5.0 ; I take 20 damage, I go prone for 100.  For this guy, if any of my buds or my building take damage too (I have SlaveUpdate + ProneUpdate) Prone may get cut by itself though
1112  ;  End
1113  
1114    Behavior = SquishCollide ModuleTag_08
1115      ;nothing
1116    End
1117  
1118    Behavior = StealthUpdate ModuleTag_09
1119      StealthDelay                = 2500 ; msec
1120      StealthForbiddenConditions  = ATTACKING USING_ABILITY
1121      MoveThresholdSpeed          = 3
1122      InnateStealth               = No ;Requires upgrade first
1123      OrderIdleEnemiesToAttackMeUponReveal  = Yes
1124    End
1125    Behavior = StealthUpgrade ModuleTag_10
1126      TriggeredBy = Upgrade_GLACamoNetting
1127    End
1128  
1129  
1130  ; --- begin Death modules ---
1131    Behavior = SlowDeathBehavior ModuleTag_Death01
1132      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
1133      SinkDelay           = 3000
1134      SinkRate            = 0.5     ; in Dist/Sec
1135      DestructionDelay    = 8000
1136      FX                  = INITIAL FX_StingerSoldierDie
1137    End
1138    Behavior = SlowDeathBehavior ModuleTag_Death02
1139      DeathTypes          = NONE +CRUSHED +SPLATTED
1140      SinkDelay           = 3000
1141      SinkRate            = 0.5     ; in Dist/Sec
1142      DestructionDelay    = 8000
1143      FX                  = INITIAL FX_GIDieCrushed
1144    End
1145    Behavior = SlowDeathBehavior ModuleTag_Death03
1146      DeathTypes          = NONE +EXPLODED
1147      SinkDelay           = 3000
1148      SinkRate            = 0.5     ; in Dist/Sec
1149      DestructionDelay    = 8000
1150      FX                  = INITIAL FX_StingerSoldierDie
1151      FlingForce          = 8
1152      FlingForceVariance  = 3
1153      FlingPitch          = 60
1154      FlingPitchVariance  = 10
1155    End
1156    Behavior = SlowDeathBehavior ModuleTag_Death04
1157      DeathTypes          = NONE +BURNED
1158      DestructionDelay    = 0
1159      FX                  = INITIAL FX_DieByFireGLA
1160      OCL                 = INITIAL OCL_FlamingInfantry
1161    End
1162    Behavior = SlowDeathBehavior ModuleTag_Death05
1163      DeathTypes          = NONE +POISONED
1164      DestructionDelay    = 0
1165      FX                  = INITIAL FX_DieByToxinGLA
1166      OCL                 = INITIAL OCL_ToxicInfantry
1167    End
1168    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
1169      DeathTypes          = NONE +POISONED_BETA
1170      DestructionDelay    = 0
1171      FX                  = INITIAL FX_DieByToxinGLA
1172      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
1173    End
1174    Behavior = SlowDeathBehavior ModuleTag_Death07
1175      DeathTypes          = NONE +POISONED_GAMMA
1176      DestructionDelay    = 0
1177      FX                  = INITIAL FX_DieByToxinGLA
1178      OCL                 = INITIAL OCL_ToxicInfantryGamma
1179    End
1180  
1181  ; --- end Death modules ---
1182  
1183    Behavior = PoisonedBehavior ModuleTag_14
1184      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
1185      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
1186    End
1187   
1188    Geometry = CYLINDER
1189    GeometryMajorRadius = 10.0
1190    GeometryMinorRadius = 10.0
1191    GeometryHeight = 12.0
1192    GeometryIsSmall = Yes
1193    Shadow = SHADOW_DECAL
1194    ShadowSizeX = 14
1195    ShadowSizeY = 14
1196    ShadowTexture = ShadowI;
1197    BuildCompletion = APPEARS_AT_RALLY_POINT
1198  
1199  End
1200  
1201  
1202  
1203  
1204  
1205  
1206  ;------------------------------------------------------------------------------
1207  Object GLAInfantryTerrorist
1208  
1209  ; *** ART Parameters ***
1210    SelectPortrait         = SUTerrorist_L
1211    ButtonImage            = SUTerrorist
1212    
1213    ;UpgradeCameo1 = NONE
1214    ;UpgradeCameo2 = NONE
1215    ;UpgradeCameo3 = NONE
1216    ;UpgradeCameo4 = NONE
1217    ;UpgradeCameo5 = NONE
1218  
1219    Draw = W3DModelDraw ModuleTag_01
1220      OkToChangeModelColor = Yes
1221      DefaultConditionState
1222        Model = UITRST_SKN
1223        IdleAnimation = UITRST_SKL.UITRST_STA 0 25
1224        ;Regular spice animations
1225        IdleAnimation = UITRST_SKL.UITRST_IDA
1226        IdleAnimation = UITRST_SKL.UITRST_IDB
1227        AnimationMode = ONCE
1228        TransitionKey = TRANS_Stand
1229      End
1230  
1231      ConditionState = REALLYDAMAGED
1232        Animation = UITRST_SKL.UITRST_STA
1233        AnimationMode = LOOP
1234        TransitionKey = TRANS_Stand
1235      End
1236  
1237      ConditionState = FREEFALL
1238        Animation = UITRST_SKL.UITRST_PFL
1239        AnimationMode = LOOP
1240        TransitionKey = TRANS_Falling
1241      End
1242      AliasConditionState = FREEFALL REALLYDAMAGED
1243      AliasConditionState = FREEFALL DYING
1244  
1245      ConditionState = PARACHUTING
1246        Animation = UITRST_SKL.UITRST_PHG
1247        AnimationMode = LOOP
1248        Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
1249        TransitionKey = TRANS_Chute
1250      End
1251      AliasConditionState = PARACHUTING REALLYDAMAGED
1252      AliasConditionState = PARACHUTING DYING
1253  
1254      ConditionState = MOVING
1255        Animation = UITRST_SKL.UITRST_RNA 15
1256        AnimationMode = LOOP
1257        Flags = RANDOMSTART
1258        TransitionKey = None
1259        ParticleSysBone   = None InfantryDustTrails
1260      End
1261      AliasConditionState = MOVING REALLYDAMAGED
1262  
1263      ConditionState = ATTACKING MOVING
1264        Animation = UITRST_SKL.UITRST_RNB 10
1265        AnimationMode = LOOP
1266        Flags = RANDOMSTART
1267        TransitionKey = None
1268      End
1269      AliasConditionState = ATTACKING MOVING REALLYDAMAGED
1270  
1271      ConditionState = PREATTACK_A
1272        Animation = UITRST_SKL.UITRST_ATA
1273        AnimationMode = ONCE
1274      End
1275      AliasConditionState = PREATTACK_A MOVING
1276   
1277      ConditionState = DYING
1278        Animation = UITRST_SKL.UITRST_DTA
1279        Animation = UITRST_SKL.UITRST_DTC
1280        AnimationMode = ONCE
1281        TransitionKey = TRANS_Dying
1282      End
1283  
1284      TransitionState = TRANS_Dying TRANS_Flailing
1285        Animation = UITRST_SKL.UITRST_ADTE1
1286        AnimationMode = ONCE
1287      End
1288  
1289      ConditionState = DYING EXPLODED_FLAILING
1290        Animation = UITRST_SKL.UITRST_ADTE2
1291        AnimationMode = LOOP
1292        TransitionKey = TRANS_Flailing
1293      End
1294  
1295      ConditionState = DYING EXPLODED_BOUNCING
1296        Animation = UITRST_SKL.UITRST_ADTE3
1297        AnimationMode = ONCE
1298        TransitionKey = None
1299      End
1300  
1301      ConditionState = SPECIAL_CHEERING
1302        Animation = UITRST_SKL.UITRST_CHA
1303        AnimationMode = LOOP
1304      End
1305  
1306      TransitionState = TRANS_Falling TRANS_Chute
1307        Animation = UITRST_SKL.UITRST_POP
1308        AnimationMode = ONCE
1309        Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
1310      End
1311  
1312      TransitionState = TRANS_Chute TRANS_Stand
1313        Animation = UITRST_SKL.UITRST_PTD
1314        AnimationMode = ONCE
1315      End
1316  
1317    End
1318  
1319    ; ***DESIGN parameters ***
1320    DisplayName      = OBJECT:Terrorist
1321    Side = GLA
1322    EditorSorting = INFANTRY
1323    TransportSlotCount = 1                 ;how many "slots" we take in a transport (0 == not transportable)
1324    WeaponSet
1325      Conditions = None 
1326      ;Kill himself so we can use FireWeaponWhenDead to fire the real weapon -- and use UNRESISTABLE
1327      ;damage to do ini logic for type of death to play -- unresistable for success.
1328      Weapon = PRIMARY TerroristSuicideWeapon 
1329    End
1330    ArmorSet
1331      Conditions      = None
1332      Armor           = HumanArmor
1333      DamageFX        = InfantryDamageFX
1334    End
1335    VisionRange = 150
1336    ShroudClearingRange = 200
1337    Prerequisites
1338      Object = GLABarracks
1339    End
1340    BuildCost = 200
1341    BuildTime = 5.0          ;in seconds    
1342    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
1343    CommandSet    = GLAInfantryTerroristCommandSet
1344  
1345    ; *** AUDIO Parameters ***
1346    VoiceSelect = TerroristVoiceSelect
1347    VoiceMove = TerroristVoiceMove
1348    VoiceAttack = TerroristVoiceAttack
1349    VoiceFear = TerroristVoiceFear
1350    VoiceGuard = TerroristVoiceMove
1351    UnitSpecificSounds
1352      VoiceGarrison         = TerroristVoiceMove
1353      VoiceCreate           = TerroristVoiceCreate
1354      VoiceEnter            = TerroristVoiceEnter
1355      VoiceEnterHostile     = TerroristVoiceEnterHostile
1356      VoiceGetHealed      = TerroristVoiceMove
1357    End
1358  
1359    ; *** ENGINEERING Parameters ***
1360    RadarPriority = UNIT
1361    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER SCORE
1362  
1363    Body = ActiveBody ModuleTag_02
1364      MaxHealth       = 120.0
1365      InitialHealth   = 120.0
1366    End
1367  
1368    ExperienceValue     = 20 20 20 20  ; Experience point value at each level
1369  
1370    Behavior = AIUpdateInterface ModuleTag_03
1371      AutoAcquireEnemiesWhenIdle = Yes
1372    End
1373    Behavior = CommandButtonHuntUpdate  ModuleTag_CBH01 ; allows use of command button hunt script with this unit. 
1374    End
1375  
1376    Locomotor = SET_NORMAL FastHumanLocomotor
1377    Behavior = PhysicsBehavior ModuleTag_04
1378      Mass = 5.0
1379    End
1380  
1381    ;Kris
1382    Behavior = ConvertToCarBombCrateCollide       ModuleTag_06
1383      RequiredKindOf    = VEHICLE      ; we only give our bonus to VEHICLEs we collide with
1384      ;ForbiddenKindOf  = TRANSPORT DOZER  ; but not to TRANSPORTs or DOZERs!
1385      FXList            = FX_MakeCarBombSuccess
1386    End
1387   
1388    Behavior = SquishCollide ModuleTag_07
1389      ;nothing
1390    End
1391  
1392  ; --- begin Death modules ---
1393    Behavior = SlowDeathBehavior ModuleTag_Death01
1394      DeathTypes          = ALL  -SUICIDED -POISONED -POISONED_BETA -POISONED_GAMMA
1395      SinkDelay           = 3000
1396      SinkRate            = 0.5     ; in Dist/Sec
1397      DestructionDelay    = 8000
1398      FX                  = INITIAL FX_TerroristDie
1399    End
1400  
1401  
1402    ;POISON_DEATHS POISON_DEATHS POISON_DEATHS POISON_DEATHS
1403    Behavior = SlowDeathBehavior ModuleTag_Death02
1404      DeathTypes          = NONE +POISONED
1405      DestructionDelay    = 0
1406      FX                  = INITIAL FX_DieByToxinGLA
1407      OCL                 = INITIAL OCL_ToxicInfantry_TerroristOnly
1408    End
1409    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
1410      DeathTypes          = NONE +POISONED_BETA
1411      DestructionDelay    = 0
1412      FX                  = INITIAL FX_DieByToxinGLA
1413      OCL                 = INITIAL OCL_ToxicInfantryBeta_TerroristOnly ;you'll have to create this OCL and make it use the blue guys instead of green ones
1414    End
1415    Behavior = SlowDeathBehavior ModuleTag_Death07
1416      DeathTypes          = NONE +POISONED_GAMMA
1417      DestructionDelay    = 0
1418      FX                  = INITIAL FX_DieByToxinGLA
1419      OCL                 = INITIAL OCL_ToxicInfantryGamma_TerroristOnly
1420    End
1421  
1422    ;POISON_DEATHS POISON_DEATHS POISON_DEATHS POISON_DEATHS
1423  
1424  
1425    ; I have just pulled my ripcord, and this ain't no parachute!
1426    Behavior = SlowDeathBehavior ModuleTag_Death03
1427      DeathTypes          = NONE +SUICIDED
1428      SinkDelay           = 3000
1429      SinkRate            = 0.5     ; in Dist/Sec
1430      DestructionDelay    = 8000
1431      FX                  = INITIAL FX_TerroristExplode
1432      FlingForce          = 8
1433      FlingForceVariance  = 3
1434      FlingPitch          = 60
1435      FlingPitchVariance  = 10
1436    End
1437    Behavior = FireWeaponWhenDeadBehavior ModuleTag_Death04
1438      DeathWeapon   = SuicideDynamitePack
1439      StartsActive  = Yes                      ; turned on by upgrade
1440      DeathTypes = NONE +SUICIDED +CRUSHED +SPLATTED +LASERED +BURNED +EXPLODED
1441    End
1442  ; --- end Death modules ---
1443  
1444    Behavior = PoisonedBehavior ModuleTag_14
1445      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
1446      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
1447    End
1448   
1449    Geometry = CYLINDER
1450    GeometryMajorRadius = 10.0
1451    GeometryMinorRadius = 10.0
1452    GeometryHeight = 12.0
1453    GeometryIsSmall = Yes
1454    Shadow = SHADOW_DECAL
1455    ShadowSizeX = 14;
1456    ShadowSizeY = 14;
1457    ShadowTexture = ShadowI;
1458    BuildCompletion = APPEARS_AT_RALLY_POINT
1459  
1460  End
1461  
1462  
1463  
1464  
1465  
1466  
1467  
1468  
1469  ;------------------------------------------------------------------------------
1470  ;------------------------------------------------------------------------------
1471  Object GLAInfantryAngryMobNexus 
1472  
1473  ;**** ART Parameters **************************
1474    SelectPortrait         = SUAngryMob_L
1475    ButtonImage            = SUAngryMob
1476    
1477    UpgradeCameo1 = Upgrade_GLAArmTheMob
1478    ;UpgradeCameo2 = NONE
1479    ;UpgradeCameo3 = NONE
1480    ;UpgradeCameo4 = NONE
1481    ;UpgradeCameo5 = NONE
1482    
1483    Draw = W3DModelDraw ModuleTag_01
1484      OkToChangeModelColor = Yes
1485      DefaultConditionState
1486        Model = None
1487  ;      Model = AVBomber_B
1488      End
1489    End
1490  
1491  
1492  ;****DESIGN parameters **************************
1493  
1494    DisplayName      = OBJECT:AngryMobNexus
1495    Side = GLA
1496  
1497    RadarPriority       = NOT_ON_RADAR
1498  
1499    EditorSorting   = INFANTRY
1500    TransportSlotCount = 0                 ;how many "slots" we take in a transport (0 == not transportable)
1501  
1502    WeaponSet
1503      Conditions = None 
1504      Weapon = PRIMARY GLAAngryMobNexusHarmlessWeapon
1505      Weapon = SECONDARY GLAAngryMobNexusHarmlessWeapon
1506      Weapon = TERTIARY GLAAngryMobNexusHarmlessWeapon
1507    End
1508  
1509  
1510    ArmorSet
1511      Conditions      = None
1512      Armor           = InvulnerableAllArmor
1513      DamageFX        = None
1514    End
1515  
1516    BuildCost       = 800
1517    BuildTime       = 15.0          ;in seconds    
1518    VisionRange     = 150  ; it can scout for the spawn
1519    ShroudClearingRange = 0
1520  
1521    Prerequisites
1522      Object = GLABarracks
1523      Object = GLAPalace
1524    End
1525  
1526    ExperienceValue    = 5 5 5 5 ;Experience point value at each level
1527  
1528    IsTrainable     = No
1529  
1530  
1531  
1532    CommandSet    = GLAInfantryAngryMobCommandSet;
1533  
1534  ;**** AUDIO Parameters *****************************
1535    VoiceSelect = AngryMobVoiceSelect
1536    VoiceMove = AngryMobVoiceMove
1537    VoiceGuard = AngryMobVoiceMove
1538    VoiceAttack = AngryMobVoiceAttack
1539    SoundMoveStart = NoSound
1540    SoundAmbient = AngryMobAmbientLoop
1541    SoundAmbientRubble = NoSound
1542    UnitSpecificSounds
1543      VoiceCreate          = AngryMobVoiceCreate
1544    End
1545  
1546  
1547  ;**** ENGINEERING Parameters ******************************
1548  
1549    RadarPriority = UNIT
1550    KindOf = PRELOAD CAN_ATTACK INFANTRY MOB_NEXUS ATTACK_NEEDS_LINE_OF_SIGHT NO_COLLIDE SELECTABLE SCORE
1551    Body = ImmortalBody ModuleTag_02
1552      MaxHealth       = 99999.0
1553      InitialHealth   = 99999.0
1554    End
1555  
1556    Behavior = AIUpdateInterface ModuleTag_03
1557      AutoAcquireEnemiesWhenIdle = Yes
1558    End
1559  
1560    Locomotor = SET_NORMAL AngryMobNexusLocomotor ;Important! don't make the Nexus any faster!
1561    Locomotor = SET_WANDER AngryMobNexusLocomotor ;Important! don't make the Nexus any faster!
1562    Locomotor = SET_PANIC AngryMobNexusLocomotor ;Important! don't make the Nexus any faster!
1563  
1564  ;  Locomotor = SET_NORMAL WanderHumanLocomotor ;Important! don't make the Nexus any faster!
1565  ;  Locomotor = SET_WANDER WanderHumanLocomotor ;Important! don't make the Nexus any faster!
1566  ;  Locomotor = SET_PANIC WanderHumanLocomotor ;Important! don't make the Nexus any faster!
1567  
1568    Behavior = PhysicsBehavior ModuleTag_04
1569      Mass = 50.0
1570    End
1571  
1572    Behavior            = SpawnBehavior ModuleTag_05
1573      SpawnNumber       = 10
1574      SpawnReplaceDelay = 30000 ; 30 seconds
1575  
1576          SpawnTemplateName = GLAInfantryAngryMobPistol01 ; Aladdin
1577          SpawnTemplateName = GLAInfantryAngryMobRock02 ; Woman in the Gypsy Costume
1578          SpawnTemplateName = GLAInfantryAngryMobMolotov02 ; The Lady with the hot sauce
1579          SpawnTemplateName = GLAInfantryAngryMobPistol03 ; Skinny Guy with the Green Beret
1580          SpawnTemplateName = GLAInfantryAngryMobRock04 ; Fat guy with the tank top
1581          SpawnTemplateName = GLAInfantryAngryMobMolotov02 ; The Lady with the hot sauce
1582          SpawnTemplateName = GLAInfantryAngryMobPistol05 ; The robed dude with the Man-Veil
1583  
1584  
1585  
1586      ExitByBudding = Yes;!
1587  
1588      InitialBurst = 5 ; the first set of 5 will not delay
1589      OneShot     = No
1590      AggregateHealth = Yes
1591      SlavesHaveFreeWill = No
1592    End
1593  
1594    Behavior = QueueProductionExitUpdate ModuleTag_06
1595      UnitCreatePoint   = X:  0.0  Y:  0.0   Z:0.0
1596      NaturalRallyPoint = X: 0.0  Y:  0.0   Z:0.0
1597      ExitDelay     = 5000 ; 5 sec
1598      InitialBurst = 5 ; the first set of 5 will not delay
1599    End
1600  
1601    Behavior = DestroyDie ModuleTag_07
1602      DeathTypes = ALL
1603    End
1604  
1605    Geometry = CYLINDER
1606    GeometryMajorRadius = 1.0
1607    GeometryMinorRadius = 1.0
1608    GeometryHeight = 1.0     
1609    GeometryIsSmall = Yes 
1610    Shadow = SHADOW_VOLUME
1611  
1612  End
1613  
1614  
1615  
1616  
1617  
1618  ;------------------------------------------------------------------------------
1619  ;------------------------------------------------------------------------------
1620  Object GLAInfantryAngryMobPistol01
1621  
1622  ;**** ART Parameters ***
1623    Draw = W3DModelDraw DrawTag_01
1624      OkToChangeModelColor = Yes
1625  
1626      ; WHILE CARRYING PISTOL
1627      ;---------------------------------------------------------
1628      DefaultConditionState ;Idle with Pistol Holstered
1629        Model = UIMOB01_SKN
1630        IdleAnimation = UIMOB01_SKL.UIMOB01_IDA1 0 12
1631        IdleAnimation = UIMOB01_SKL.UIMOB01_IDA2 0 5
1632        IdleAnimation = UIMOB01_SKL.UIMOB01_CHA  0 5
1633        IdleAnimation = UIMOB01_SKL.UIMOB01_STA  0 5
1634        AnimationMode = ONCE
1635        AnimationSpeedFactorRange 0.9 1.1
1636        TransitionKey = TRANS_STAND_A
1637  
1638        WeaponFireFXBone = PRIMARY Muzzle
1639        WeaponMuzzleFlash = PRIMARY MuzzleFX
1640        WeaponFireFXBone = SECONDARY MuzzleAK
1641        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
1642      End
1643  
1644      ; Drawing pistol
1645      ConditionState  = PREATTACK_A
1646        Animation     = UIMOB01_SKL.UIMOB01_ATA1_ST ; start firing
1647        AnimationMode = ONCE
1648      End
1649      AliasConditionState = PREATTACK_A FIRING_A
1650      AliasConditionState = PREATTACK_A BETWEEN_FIRING_SHOTS_A
1651  
1652      ; Firing pistol
1653      ConditionState = FIRING_A
1654        Animation = UIMOB01_SKL.UIMOB01_ATA1_LP ; looping firing
1655        AnimationMode = LOOP
1656        TransitionKey = TRANS_FIRING_A
1657      End
1658      AliasConditionState  = BETWEEN_FIRING_SHOTS_A
1659      
1660      ConditionState  = RELOADING_A
1661        Animation     = UIMOB01_SKL.UIMOB01_ATA1_ED ; end firing
1662        AnimationMode = ONCE
1663      End
1664  
1665      ; This transition allows him to put his gun away when he's finished attacking.
1666      TransitionState = TRANS_FIRING_A TRANS_STAND_A
1667        Animation     = UIMOB01_SKL.UIMOB01_ATA1_ED ; end firing
1668        AnimationMode = ONCE
1669      End
1670  
1671      ConditionState = MOVING
1672        Animation = UIMOB01_SKL.UIMOB01_RNA 
1673        AnimationMode = LOOP
1674        Flags = RANDOMSTART
1675        TransitionKey   = MOVING
1676        ParticleSysBone   = None InfantryDustTrails
1677      End
1678      AliasConditionState = MOVING RELOADING_A
1679      AliasConditionState = MOVING PREATTACK_A
1680      AliasConditionState = MOVING FIRING_A
1681      AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A
1682      AliasConditionState = MOVING RELOADING_C RELOADING_A 
1683      AliasConditionState = MOVING PREATTACK_C BETWEEN_FIRING_SHOTS_A 
1684  
1685      ConditionState = DYING
1686        Animation = UIMOB01_SKL.UIMOB01_DA1    
1687        Animation = UIMOB01_SKL.UIMOB01_DA2
1688        AnimationMode = ONCE
1689        TransitionKey = TRANS_Dying
1690      End
1691  
1692  
1693      ConditionState = SPECIAL_CHEERING
1694        Animation = UIMOB01_SKL.UIMOB01_CHA
1695        AnimationMode = ONCE
1696      End
1697  
1698      ;--------------------------------------------------------
1699      ; TRANSITION FROM PISTOL TO AK47
1700      TransitionState = TRANS_STAND_A TRANS_STAND_AK
1701        Animation = UIMOB01_SKL.UIMOB01_TA-D
1702        AnimationMode = ONCE
1703      End
1704  
1705      ; WHILE CARRYING AK47 
1706      ;---------------------------------------------------------
1707      ConditionState WEAPONSET_PLAYER_UPGRADE ;Idle with AK Slung
1708        Model = UIMOB01_SKN
1709        IdleAnimation = UIMOB01_SKL.UIMOB01_IDD1 0 6
1710        IdleAnimation = UIMOB01_SKL.UIMOB01_IDD2 0 6
1711        IdleAnimation = UIMOB01_SKL.UIMOB01_CHD  0 6
1712        IdleAnimation = UIMOB01_SKL.UIMOB01_STD
1713        AnimationMode = ONCE
1714        AnimationSpeedFactorRange 0.9 1.1
1715        TransitionKey = TRANS_STAND_AK
1716      End
1717  
1718      ConditionState = MOVING WEAPONSET_PLAYER_UPGRADE
1719        Animation = UIMOB01_SKL.UIMOB01_RND 
1720        AnimationMode = LOOP
1721        Flags = RANDOMSTART
1722        TransitionKey   = MOVING_AK
1723      End
1724  
1725      ConditionState = DYING WEAPONSET_PLAYER_UPGRADE
1726        Animation = UIMOB01_SKL.UIMOB01_DD1    
1727        Animation = UIMOB01_SKL.UIMOB01_DD2
1728        AnimationMode = ONCE
1729        TransitionKey = TRANS_Dying
1730      End
1731  
1732      ConditionState = SPECIAL_CHEERING WEAPONSET_PLAYER_UPGRADE
1733        Animation = UIMOB01_SKL.UIMOB01_CHD
1734        AnimationMode = ONCE
1735      End
1736  
1737      ; Drawing AK47
1738      ConditionState  = PREATTACK_B WEAPONSET_PLAYER_UPGRADE
1739        Animation     = UIMOB01_SKL.UIMOB01_ATD1_ST ; start firing
1740        AnimationMode = ONCE
1741      End
1742      AliasConditionState = PREATTACK_B FIRING_B WEAPONSET_PLAYER_UPGRADE
1743      AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
1744  
1745      ; Firing Gun
1746      ConditionState = FIRING_B WEAPONSET_PLAYER_UPGRADE
1747        Animation = UIMOB01_SKL.UIMOB01_ATD1_LP ; looping firing
1748        AnimationMode = LOOP
1749        WeaponFireFXBone = SECONDARY MuzzleAK
1750        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
1751        TransitionKey = TRANS_FIRING_AK
1752      End
1753      AliasConditionState  = BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
1754  
1755  
1756      ConditionState  = RELOADING_B WEAPONSET_PLAYER_UPGRADE
1757        Animation     = UIMOB01_SKL.UIMOB01_ATD1_ED ; end firing
1758        AnimationMode = ONCE
1759      End
1760  
1761  
1762      ; This transition allows him to put his gun away when he's finished attacking.
1763      TransitionState = TRANS_FIRING_AK TRANS_STAND_AK
1764        Animation     = UIMOB01_SKL.UIMOB01_ATD1_ED ; end firing
1765        AnimationMode = ONCE
1766      End
1767  
1768  ;    ;Throwing bottle----------------------------------------------------------------
1769  ;    ConditionState = PREATTACK_C 
1770  ;      Animation     = UIMOB01_SKL.UIMOB01_ATCA_BF ; the wind up
1771  ;    End
1772  ;    AliasConditionState = PREATTACK_C FIRING_A
1773  ;    AliasConditionState = PREATTACK_C RELOADING_A
1774  ;    AliasConditionState = PREATTACK_C BETWEEN_FIRING_SHOTS_A 
1775  ;
1776  ;    ConditionState = FIRING_C 
1777  ;      Animation     = UIMOB01_SKL.UIMOB01_ATCA_AF ; the release and follow-thru
1778  ;      TransitionKey = TRANS_THROW
1779  ;    End
1780  ;    AliasConditionState = FIRING_C BETWEEN_FIRING_SHOTS_A
1781  ;
1782  ;    ConditionState RELOADING_C
1783  ;      Animation =UIMOB01_SKL.UIMOB01_IDA1
1784  ;      WaitForStateToFinishIfPossible = TRANS_THROW ; universal hub for follow-thru
1785  ;    End
1786  ;    AliasConditionState = RELOADING_C RELOADING_A
1787  ;    AliasConditionState = RELOADING_C FIRING_A
1788  ;    AliasConditionState = RELOADING_C BETWEEN_FIRING_SHOTS_A
1789  
1790  
1791  ;    TransitionState = TRANSXXX TRANS_THROW
1792  ;      Animation     = UIMOB01_SKL.UIMOB01_XXXXXXXXputaway gun and take out bottle
1793  ;    End
1794  
1795  ;    TransitionState = TRANS_THROW TRANS_FIRING_A
1796  ;      Animation     = UIMOB01_SKL.UIMOB01_XXXXXXXXputaway bottle and get PISTOL
1797  ;    End
1798  
1799  ;    TransitionState = TRANSXXXAK TRANS_THROW
1800  ;      Animation     = UIMOB01_SKL.UIMOB01_XXXXXXXXputaway AK and take out bottle
1801  ;    End
1802  
1803  ;    TransitionState = TRANS_THROW TRANS_FIRING_AK
1804  ;      Animation     = UIMOB01_SKL.UIMOB01_XXXXXXXXputaway bottle and get AK
1805  ;    End
1806  
1807      ;--------------------------------------------------------
1808  
1809      TransitionState = TRANS_Dying TRANS_Flailing
1810        Animation = UIMOB01_SKL.UIMOB01_A_ADTE1
1811        Animation = UIMOB01_SKL.UIMOB01_D_ADTE1
1812        AnimationMode = ONCE
1813      End
1814  
1815      ConditionState = DYING EXPLODED_FLAILING
1816        Animation = UIMOB01_SKL.UIMOB01_A_ADTE2
1817        Animation = UIMOB01_SKL.UIMOB01_D_ADTE2
1818        AnimationMode = LOOP
1819        TransitionKey = TRANS_Flailing
1820      End
1821  
1822      ConditionState = DYING EXPLODED_BOUNCING
1823        Animation = UIMOB01_SKL.UIMOB01_A_ADTE3
1824        Animation = UIMOB01_SKL.UIMOB01_D_ADTE3
1825        AnimationMode = ONCE
1826        TransitionKey = None
1827      End
1828    End
1829  
1830  ;**** DESIGN parameters ***
1831  
1832    DisplayName      = OBJECT:AngryMob
1833    Side = GLA
1834    EditorSorting = INFANTRY
1835    TransportSlotCount = 0                 ;how many "slots" we take in a transport (0 == not transportable)
1836  
1837    WeaponSet
1838      Conditions = None 
1839      Weapon = PRIMARY GLAAngryMobPistolWeapon
1840    End
1841  
1842    WeaponSet
1843      Conditions = PLAYER_UPGRADE 
1844      Weapon = PRIMARY GLAAngryMobAK47NoDamageWeapon ; for atttacking in AK-proof conditions
1845      Weapon = SECONDARY GLAAngryMobAK47Weapon
1846    End
1847  
1848    ArmorSet
1849      Conditions      = None
1850      Armor           = HumanArmor
1851      DamageFX        = InfantryDamageFX
1852    End
1853  
1854    VisionRange = 150
1855    ShroudClearingRange = 150
1856    Prerequisites
1857      Object = GLABarracks
1858    End
1859    BuildCost = 100
1860    BuildTime = 0.0           
1861  
1862    ExperienceValue = 5 5 5 5    ;Experience point value at each level
1863    ExperienceRequired = 0 150 450 900  ;Experience points needed to gain each level
1864    IsTrainable = Yes             ;Can gain experience
1865    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
1866  
1867    ; *** AUDIO Parameters ***
1868    VoiceSelect = NoSound 
1869    VoiceMove = NoSound   
1870    VoiceAttack = NoSound 
1871  
1872  ;**** ENGINEERING Parameters *** ;MOB01
1873    RadarPriority = UNIT
1874    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER IGNORED_IN_GUI  ;NO_COLLIDE ;Lorenzen disables 
1875  
1876    Body = ActiveBody BodyTag_01
1877      MaxHealth       = 50.0
1878      InitialHealth   = 50.0
1879    End
1880  
1881    Behavior = AIUpdateInterface ModuleTag_03
1882      AutoAcquireEnemiesWhenIdle = Yes
1883    End
1884  
1885    Behavior = MobMemberSlavedUpdate ModuleTag_04
1886      MustCatchUpRadius   = 40
1887      NoNeedToCatchUpRadius = 15
1888      Squirrelliness = 0.05
1889      CatchUpCrisisBailTime = 30; this is in calls to this update, not in frames
1890    End
1891  
1892    Locomotor = SET_NORMAL AngryMobNormalLocomotor
1893    Locomotor = SET_WANDER AngryMobWanderLocomotor
1894    Locomotor = SET_PANIC AngryMobPanicLocomotor
1895  
1896    Behavior = PhysicsBehavior BehaviorTag_01
1897      Mass = 5.0
1898    End
1899  
1900    Behavior = SquishCollide ModuleTag_08
1901      ;nothing
1902    End
1903  
1904    Behavior = WeaponSetUpgrade UpgradeTag_01
1905      TriggeredBy = Upgrade_GLAArmTheMob
1906    End
1907  
1908  
1909  ; --- begin Death modules ---
1910    Behavior = SlowDeathBehavior DeathTag_01
1911      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
1912      SinkDelay           = 3000
1913      SinkRate            = 0.5     ; in Dist/Sec
1914      DestructionDelay    = 8000
1915      FX                  = INITIAL FX_CivilianArabMaleDie
1916    End
1917    Behavior = SlowDeathBehavior DeathTag_02
1918      DeathTypes          = NONE +CRUSHED +SPLATTED
1919      SinkDelay           = 3000
1920      SinkRate            = 0.5     ; in Dist/Sec
1921      DestructionDelay    = 8000
1922      FX                  = INITIAL FX_GIDieCrushed
1923    End
1924    Behavior = SlowDeathBehavior DeathTag_03
1925      DeathTypes          = NONE +EXPLODED
1926      SinkDelay           = 3000
1927      SinkRate            = 0.5     ; in Dist/Sec
1928      DestructionDelay    = 8000
1929      FX                  = INITIAL FX_CivilianArabMaleDie
1930      FlingForce          = 8
1931      FlingForceVariance  = 3
1932      FlingPitch          = 60
1933      FlingPitchVariance  = 10
1934    End
1935    Behavior = SlowDeathBehavior DeathTag_04
1936      DeathTypes          = NONE +BURNED
1937      DestructionDelay    = 0
1938      FX                  = INITIAL FX_GIDie
1939      OCL                 = INITIAL OCL_FlamingInfantry
1940    End
1941    Behavior = SlowDeathBehavior ModuleTag_Death05
1942      DeathTypes          = NONE +POISONED
1943      DestructionDelay    = 0
1944      FX                  = INITIAL FX_DieByToxinGLA
1945      OCL                 = INITIAL OCL_ToxicInfantry
1946    End
1947    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
1948      DeathTypes          = NONE +POISONED_BETA
1949      DestructionDelay    = 0
1950      FX                  = INITIAL FX_DieByToxinGLA
1951      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
1952    End
1953    Behavior = SlowDeathBehavior ModuleTag_Death07
1954      DeathTypes          = NONE +POISONED_GAMMA
1955      DestructionDelay    = 0
1956      FX                  = INITIAL FX_DieByToxinGLA
1957      OCL                 = INITIAL OCL_ToxicInfantryGamma
1958    End
1959  ; --- end Death modules ---
1960  
1961    Behavior = PoisonedBehavior BehaviorTag_02
1962      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
1963      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
1964    End
1965   
1966    Geometry = CYLINDER
1967    GeometryMajorRadius = 4.0 ; very thin
1968    GeometryHeight = 12.0
1969    GeometryIsSmall = Yes
1970    Shadow = SHADOW_DECAL
1971    ShadowSizeX = 14;
1972    ShadowSizeY = 14;
1973    ShadowTexture = ShadowI;
1974    BuildCompletion = APPEARS_AT_RALLY_POINT
1975  
1976  End
1977  
1978  
1979  ;------------------------------------------------------------------------------
1980  ;------------------------------------------------------------------------------
1981  Object GLAInfantryAngryMobRock02
1982  
1983  ;**** ART Parameters ***
1984    Draw = W3DModelDraw ModuleTag_01
1985      OkToChangeModelColor = Yes
1986  
1987      ; WHILE CARRYING ROCK
1988      ;---------------------------------------------------------
1989      DefaultConditionState
1990        Model = UIMOB02_SKN
1991        IdleAnimation = UIMOB02_SKL.UIMOB02_IDB1 0 12
1992        IdleAnimation = UIMOB02_SKL.UIMOB02_IDB2 0 5
1993        IdleAnimation = UIMOB02_SKL.UIMOB02_CHB  0 5
1994        IdleAnimation = UIMOB02_SKL.UIMOB02_STB  0 12
1995        AnimationMode = ONCE
1996        AnimationSpeedFactorRange 0.9 1.1
1997        TransitionKey = TRANS_STAND_A
1998  
1999        ;WeaponFireFXBone  = PRIMARY   "UIMOB02 R HAND"
2000        ;WeaponMuzzleFlash = PRIMARY   "UIMOB02 R HAND"
2001        WeaponFireFXBone =  SECONDARY MuzzleAK
2002        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2003      End
2004  
2005  
2006      ; Drawing rock
2007      ConditionState  = PREATTACK_A
2008        Animation     = UIMOB02_SKL.UIMOB02_ATB2_BF ; wind up
2009        AnimationMode = ONCE
2010      End
2011      AliasConditionState = PREATTACK_A FIRING_A
2012      AliasConditionState = PREATTACK_A BETWEEN_FIRING_SHOTS_A
2013  
2014      ; throwing rock
2015      ConditionState = FIRING_A
2016        Animation = UIMOB02_SKL.UIMOB02_ATB1_AF ; throw
2017        Animation = UIMOB02_SKL.UIMOB02_ATB2_AF ; throw
2018        AnimationMode = ONCE
2019        TransitionKey = TRANS_FIRING_A
2020      End
2021      
2022      ConditionState = BETWEEN_FIRING_SHOTS_A
2023        Animation         = UIMOB02_SKL.UIMOB02_STB
2024        AnimationMode     = ONCE
2025        ; this is basically a trick: this guy has a nontrivial animation for firing,
2026        ; and a long recycle time between shots. we want him to finish his fire animation
2027        ; (unless he's ordered to do something else), so this is just a handy trick that
2028        ; says, "if the previous state had this transition key, allow it to finish before
2029        ; switching to us, if possible".
2030        WaitForStateToFinishIfPossible = TRANS_FIRING_A
2031      End
2032      AliasConditionState = RELOADING_A
2033  
2034  
2035      ConditionState = MOVING
2036        Animation = UIMOB02_SKL.UIMOB02_RNB 
2037        AnimationMode = LOOP
2038        Flags = RANDOMSTART
2039        TransitionKey   = MOVING
2040        ParticleSysBone   = None InfantryDustTrails
2041      End
2042  
2043      ConditionState = DYING
2044        Animation = UIMOB02_SKL.UIMOB02_DB1    
2045        Animation = UIMOB02_SKL.UIMOB02_DB2
2046        AnimationMode = ONCE
2047        TransitionKey = TRANS_Dying
2048      End
2049  
2050      ConditionState = SPECIAL_CHEERING
2051        Animation = UIMOB02_SKL.UIMOB02_CHB
2052        Flags = RANDOMSTART
2053        AnimationMode = LOOP
2054      End
2055  
2056  
2057      ;--------------------------------------------------------
2058      ; TRANSITION FROM PISTOL TO AK47
2059      TransitionState = TRANS_STAND_A TRANS_STAND_AK
2060        Animation = UIMOB02_SKL.UIMOB02_TB-D
2061        AnimationMode = ONCE
2062      End
2063  
2064  
2065      ; WHILE CARRYING AK47 
2066      ;---------------------------------------------------------
2067      ConditionState WEAPONSET_PLAYER_UPGRADE ;Idle with AK Slung
2068        Model = UIMOB02_SKN
2069        IdleAnimation = UIMOB02_SKL.UIMOB02_IDD1 0 6
2070        IdleAnimation = UIMOB02_SKL.UIMOB02_IDD2 0 6
2071        IdleAnimation = UIMOB02_SKL.UIMOB02_CHD  0 6
2072        IdleAnimation = UIMOB02_SKL.UIMOB02_STD
2073        AnimationMode = ONCE
2074        AnimationSpeedFactorRange 0.9 1.1
2075        TransitionKey = TRANS_STAND_AK
2076      End
2077  
2078      ConditionState = MOVING WEAPONSET_PLAYER_UPGRADE
2079        Animation = UIMOB02_SKL.UIMOB02_RND 
2080        AnimationMode = LOOP
2081        Flags = RANDOMSTART
2082        TransitionKey   = MOVING_AK
2083      End
2084  
2085      ConditionState = DYING WEAPONSET_PLAYER_UPGRADE
2086        Animation = UIMOB02_SKL.UIMOB02_DD1    
2087        Animation = UIMOB02_SKL.UIMOB02_DD2
2088        AnimationMode = ONCE
2089        TransitionKey = TRANS_Dying
2090      End
2091  
2092      ConditionState = SPECIAL_CHEERING WEAPONSET_PLAYER_UPGRADE
2093        Animation = UIMOB02_SKL.UIMOB02_CHD
2094        AnimationMode = ONCE
2095      End
2096  
2097      ; Drawing AK47
2098      ConditionState  = PREATTACK_B WEAPONSET_PLAYER_UPGRADE
2099        Animation     = UIMOB02_SKL.UIMOB02_ATD1_ST ; start firing
2100        AnimationMode = ONCE
2101      End
2102      AliasConditionState = PREATTACK_B FIRING_B WEAPONSET_PLAYER_UPGRADE
2103      AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2104  
2105      ; Firing Gun
2106      ConditionState = FIRING_B WEAPONSET_PLAYER_UPGRADE
2107        Animation = UIMOB02_SKL.UIMOB02_ATD1_LP ; looping firing
2108        AnimationMode = LOOP
2109        WeaponFireFXBone = SECONDARY MuzzleAK
2110        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2111        TransitionKey = TRANS_FIRING_AK
2112      End
2113      AliasConditionState  = BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2114  
2115  
2116      ConditionState  = RELOADING_B WEAPONSET_PLAYER_UPGRADE
2117        Animation     = UIMOB02_SKL.UIMOB02_ATD1_ED ; end firing
2118        AnimationMode = ONCE
2119      End
2120  
2121  
2122      ; This transition allows him to put his gun away when he's finished attacking.
2123      TransitionState = TRANS_FIRING_AK TRANS_STAND_AK
2124        Animation     = UIMOB02_SKL.UIMOB02_ATD1_ED ; end firing
2125        AnimationMode = ONCE
2126      End
2127  
2128  
2129  
2130  
2131      TransitionState = TRANS_Dying TRANS_Flailing
2132        Animation = UIMOB02_SKL.UIMOB02_B_ADTA1
2133        Animation = UIMOB02_SKL.UIMOB02_D_ADTA1
2134        AnimationMode = ONCE
2135      End
2136  
2137      ConditionState = DYING EXPLODED_FLAILING
2138        Animation = UIMOB02_SKL.UIMOB02_B_ADTA2
2139        Animation = UIMOB02_SKL.UIMOB02_D_ADTA2
2140        AnimationMode = LOOP
2141        TransitionKey = TRANS_Flailing
2142      End
2143  
2144      ConditionState = DYING EXPLODED_BOUNCING
2145        Animation = UIMOB02_SKL.UIMOB02_B_ADTA3
2146        Animation = UIMOB02_SKL.UIMOB02_D_ADTA3
2147        AnimationMode = ONCE
2148        TransitionKey = None
2149      End
2150  
2151  
2152    End
2153  
2154  
2155  ;**** DESIGN parameters ***
2156  
2157    DisplayName      = OBJECT:AngryMob
2158    Side = GLA
2159    EditorSorting = INFANTRY
2160    TransportSlotCount = 0                 ;how many "slots" we take in a transport (0 == not transportable)
2161  
2162    WeaponSet
2163      Conditions = None 
2164      Weapon = PRIMARY GLAAngryMobRockProjectileWeapon
2165    End
2166  
2167    WeaponSet
2168      Conditions = PLAYER_UPGRADE 
2169      Weapon = PRIMARY GLAAngryMobAK47NoDamageWeapon ; for atttacking in AK-proof conditions
2170      Weapon = SECONDARY GLAAngryMobAK47Weapon
2171    End
2172  
2173    ArmorSet
2174      Conditions      = None
2175      Armor           = HumanArmor
2176      DamageFX        = InfantryDamageFX
2177    End
2178  
2179    VisionRange = 150
2180    ShroudClearingRange = 150
2181    Prerequisites
2182      Object = GLABarracks
2183    End
2184    BuildCost = 100
2185    BuildTime = 0.0            
2186  
2187    ExperienceValue = 5 5 5 5    ;Experience point value at each level
2188    ExperienceRequired = 0 150 450 900  ;Experience points needed to gain each level
2189    IsTrainable = Yes             ;Can gain experience
2190    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
2191  
2192    ; *** AUDIO Parameters ***
2193    VoiceSelect = NoSound 
2194    VoiceMove = NoSound   
2195    VoiceAttack = NoSound 
2196  
2197  ;**** ENGINEERING Parameters *** ;MOB02
2198    RadarPriority = UNIT
2199    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER IGNORED_IN_GUI  ;NO_COLLIDE ;Lorenzen disables 
2200  
2201    Body = ActiveBody BodyTag_01
2202      MaxHealth       = 50.0
2203      InitialHealth   = 50.0
2204    End
2205  
2206    Behavior = AIUpdateInterface ModuleTag_03
2207      AutoAcquireEnemiesWhenIdle = Yes
2208    End
2209  
2210    Behavior = MobMemberSlavedUpdate ModuleTag_04
2211      MustCatchUpRadius   = 40
2212      NoNeedToCatchUpRadius = 15
2213      Squirrelliness = 0.05
2214      CatchUpCrisisBailTime = 30; this is in calls to this update, not in frames
2215    End
2216  
2217    Locomotor = SET_NORMAL AngryMobNormalLocomotor
2218    Locomotor = SET_WANDER AngryMobWanderLocomotor
2219    Locomotor = SET_PANIC AngryMobPanicLocomotor
2220  
2221    Behavior = PhysicsBehavior ModuleTag_05
2222      Mass = 5.0
2223    End
2224  
2225    Behavior = SquishCollide ModuleTag_08
2226      ;nothing
2227    End
2228  
2229    Behavior = WeaponSetUpgrade UpgradeTag_01
2230      TriggeredBy = Upgrade_GLAArmTheMob
2231    End
2232  
2233  
2234  ; --- begin Death modules ---
2235    Behavior = SlowDeathBehavior ModuleTag_Death01
2236      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
2237      SinkDelay           = 3000
2238      SinkRate            = 0.5     ; in Dist/Sec
2239      DestructionDelay    = 8000
2240      FX                  = INITIAL FX_CivilianArabFemaleDie
2241    End
2242    Behavior = SlowDeathBehavior ModuleTag_Death02
2243      DeathTypes          = NONE +CRUSHED +SPLATTED
2244      SinkDelay           = 3000
2245      SinkRate            = 0.5     ; in Dist/Sec
2246      DestructionDelay    = 8000
2247      FX                  = INITIAL FX_GIDieCrushed
2248    End
2249    Behavior = SlowDeathBehavior ModuleTag_Death03
2250      DeathTypes          = NONE +EXPLODED
2251      SinkDelay           = 3000
2252      SinkRate            = 0.5     ; in Dist/Sec
2253      DestructionDelay    = 8000
2254      FX                  = INITIAL FX_CivilianArabFemaleDie
2255      FlingForce          = 8
2256      FlingForceVariance  = 3
2257      FlingPitch          = 60
2258      FlingPitchVariance  = 10
2259    End
2260    Behavior = SlowDeathBehavior ModuleTag_Death04
2261      DeathTypes          = NONE +BURNED
2262      DestructionDelay    = 0
2263      FX                  = INITIAL FX_GIDie
2264      OCL                 = INITIAL OCL_FlamingInfantry
2265    End
2266    Behavior = SlowDeathBehavior ModuleTag_Death05
2267      DeathTypes          = NONE +POISONED
2268      DestructionDelay    = 0
2269      FX                  = INITIAL FX_DieByToxinGLA
2270      OCL                 = INITIAL OCL_ToxicInfantry
2271    End
2272    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
2273      DeathTypes          = NONE +POISONED_BETA
2274      DestructionDelay    = 0
2275      FX                  = INITIAL FX_DieByToxinGLA
2276      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
2277    End
2278    Behavior = SlowDeathBehavior ModuleTag_Death07
2279      DeathTypes          = NONE +POISONED_GAMMA
2280      DestructionDelay    = 0
2281      FX                  = INITIAL FX_DieByToxinGLA
2282      OCL                 = INITIAL OCL_ToxicInfantryGamma
2283    End
2284  ; --- end Death modules ---
2285  
2286    Behavior = PoisonedBehavior ModuleTag_13
2287      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
2288      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
2289    End
2290   
2291    Geometry = CYLINDER
2292    GeometryMajorRadius = 4.0 ; very thin
2293    GeometryHeight = 12.0
2294    GeometryIsSmall = Yes
2295    Shadow = SHADOW_DECAL
2296    ShadowSizeX = 14;
2297    ShadowSizeY = 14;
2298    ShadowTexture = ShadowI;
2299    BuildCompletion = APPEARS_AT_RALLY_POINT
2300  
2301  End
2302  
2303  ;------------------------------------------------------------------------------
2304  ;------------------------------------------------------------------------------
2305  
2306  ObjectReskin GLAInfantryAngryMobPistol03 GLAInfantryAngryMobPistol01
2307  
2308  ;**** ART Parameters ***
2309    Draw = W3DModelDraw DrawTag_01
2310      OkToChangeModelColor = Yes
2311  
2312  
2313  
2314      ; WHILE CARRYING PISTOL
2315      ;---------------------------------------------------------
2316      DefaultConditionState ;Idle with Pistol Holstered
2317        Model = UIMOB03_SKN
2318        IdleAnimation = UIMOB03_SKL.UIMOB03_IDA1 0 12
2319        IdleAnimation = UIMOB03_SKL.UIMOB03_IDA2 0 5
2320        IdleAnimation = UIMOB03_SKL.UIMOB03_CHA  0 5
2321        IdleAnimation = UIMOB03_SKL.UIMOB03_STA  0 5
2322        AnimationMode = ONCE
2323        AnimationSpeedFactorRange 0.9 1.1
2324        TransitionKey = TRANS_STAND_A
2325  
2326        WeaponFireFXBone = PRIMARY Muzzle
2327        WeaponMuzzleFlash = PRIMARY MuzzleFX
2328        WeaponFireFXBone = SECONDARY MuzzleAK
2329        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2330        WeaponFireFXBone = TERTIARY "UIMOB03 R HAND"
2331      End
2332  
2333      ; Drawing pistol
2334      ConditionState  = PREATTACK_A
2335        Animation     = UIMOB03_SKL.UIMOB03_ATA1_ST ; start firing
2336        AnimationMode = ONCE
2337      End
2338      AliasConditionState = PREATTACK_A FIRING_A
2339      AliasConditionState = PREATTACK_A BETWEEN_FIRING_SHOTS_A
2340  
2341      ; Firing pistol
2342      ConditionState = FIRING_A
2343        Animation = UIMOB03_SKL.UIMOB03_ATA1_LP ; looping firing
2344        AnimationMode = LOOP
2345        TransitionKey = TRANS_FIRING_A
2346      End
2347      AliasConditionState  = BETWEEN_FIRING_SHOTS_A
2348  
2349      ConditionState  = RELOADING_A
2350        Animation     = UIMOB03_SKL.UIMOB03_ATA1_ED ; end firing
2351        AnimationMode = ONCE
2352      End
2353  
2354      ; This transition allows him to put his gun away when he's finished attacking.
2355      TransitionState = TRANS_FIRING_A TRANS_STAND_A
2356        Animation     = UIMOB03_SKL.UIMOB03_ATA1_ED ; end firing
2357        AnimationMode = ONCE
2358      End
2359  
2360      ConditionState = MOVING
2361        Animation = UIMOB03_SKL.UIMOB03_RNA 
2362        AnimationMode = LOOP
2363        Flags = RANDOMSTART
2364        TransitionKey   = MOVING
2365        ParticleSysBone   = None InfantryDustTrails
2366      End
2367      AliasConditionState = MOVING RELOADING_A
2368      AliasConditionState = MOVING PREATTACK_A
2369      AliasConditionState = MOVING FIRING_A
2370      AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A
2371      AliasConditionState = MOVING RELOADING_C RELOADING_A 
2372      AliasConditionState = MOVING PREATTACK_C BETWEEN_FIRING_SHOTS_A 
2373  
2374      ConditionState = DYING
2375        Animation = UIMOB03_SKL.UIMOB03_DA1    
2376        Animation = UIMOB03_SKL.UIMOB03_DA2
2377        AnimationMode = ONCE
2378        TransitionKey = TRANS_Dying
2379      End
2380  
2381  
2382      ConditionState = SPECIAL_CHEERING
2383        Animation = UIMOB03_SKL.UIMOB03_CHA
2384        AnimationMode = ONCE
2385      End
2386  
2387      ;--------------------------------------------------------
2388      ; TRANSITION FROM PISTOL TO AK47
2389      TransitionState = TRANS_STAND_A TRANS_STAND_AK
2390        Animation = UIMOB03_SKL.UIMOB03_TA-D
2391        AnimationMode = ONCE
2392      End
2393  
2394  
2395      ; WHILE CARRYING AK47 
2396      ;---------------------------------------------------------
2397      ConditionState WEAPONSET_PLAYER_UPGRADE ;Idle with AK Slung
2398        Model = UIMOB03_SKN
2399        IdleAnimation = UIMOB03_SKL.UIMOB03_IDD1 0 6
2400        IdleAnimation = UIMOB03_SKL.UIMOB03_IDD2 0 6
2401        IdleAnimation = UIMOB03_SKL.UIMOB03_CHD  0 6
2402        IdleAnimation = UIMOB03_SKL.UIMOB03_STD
2403        AnimationMode = ONCE
2404        AnimationSpeedFactorRange 0.9 1.1
2405        TransitionKey = TRANS_STAND_AK
2406      End
2407  
2408      ConditionState = MOVING WEAPONSET_PLAYER_UPGRADE
2409        Animation = UIMOB03_SKL.UIMOB03_RND 
2410        AnimationMode = LOOP
2411        Flags = RANDOMSTART
2412        TransitionKey   = MOVING_AK
2413      End
2414  
2415      ConditionState = DYING WEAPONSET_PLAYER_UPGRADE
2416        Animation = UIMOB03_SKL.UIMOB03_DD1    
2417        Animation = UIMOB03_SKL.UIMOB03_DD2
2418        AnimationMode = ONCE
2419        TransitionKey = TRANS_Dying
2420      End
2421  
2422      ConditionState = SPECIAL_CHEERING WEAPONSET_PLAYER_UPGRADE
2423        Animation = UIMOB03_SKL.UIMOB03_CHD
2424        AnimationMode = ONCE
2425      End
2426  
2427      ; Drawing AK47
2428      ConditionState  = PREATTACK_B WEAPONSET_PLAYER_UPGRADE
2429        Animation     = UIMOB03_SKL.UIMOB03_ATD_ST ; start firing
2430        AnimationMode = ONCE
2431      End
2432      AliasConditionState = PREATTACK_B FIRING_B WEAPONSET_PLAYER_UPGRADE
2433      AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2434  
2435      ; Firing Gun
2436      ConditionState = FIRING_B WEAPONSET_PLAYER_UPGRADE
2437        Animation = UIMOB03_SKL.UIMOB03_ATD_LP ; looping firing
2438        AnimationMode = LOOP
2439        WeaponFireFXBone = SECONDARY MuzzleAK
2440        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2441        TransitionKey = TRANS_FIRING_AK
2442      End
2443      AliasConditionState  = BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2444  
2445  
2446      ConditionState  = RELOADING_B WEAPONSET_PLAYER_UPGRADE
2447        Animation     = UIMOB03_SKL.UIMOB03_ATD_ED ; end firing
2448        AnimationMode = ONCE
2449      End
2450  
2451  
2452      ; This transition allows him to put his gun away when he's finished attacking.
2453      TransitionState = TRANS_FIRING_AK TRANS_STAND_AK
2454        Animation     = UIMOB03_SKL.UIMOB03_ATD_ED ; end firing
2455        AnimationMode = ONCE
2456      End
2457  
2458  
2459  ;    ;Throwing bottle----------------------------------------------------------------
2460  ;    ConditionState = PREATTACK_C 
2461  ;      Animation     = UIMOB03_SKL.UIMOB03_ATCA_BF ; the wind up
2462  ;    End
2463  ;    AliasConditionState = PREATTACK_C FIRING_A
2464  ;    AliasConditionState = PREATTACK_C RELOADING_A
2465  ;    AliasConditionState = PREATTACK_C BETWEEN_FIRING_SHOTS_A 
2466  ;
2467  ;    ConditionState = FIRING_C 
2468  ;      Animation     = UIMOB03_SKL.UIMOB03_ATCA_AF ; the release and follow-thru
2469  ;      TransitionKey = TRANS_THROW
2470  ;    End
2471  ;    AliasConditionState = FIRING_C BETWEEN_FIRING_SHOTS_A
2472  ;
2473  ;    ConditionState RELOADING_C
2474  ;      Animation =UIMOB03_SKL.UIMOB03_IDA1
2475  ;      WaitForStateToFinishIfPossible = TRANS_THROW ; universal hub for follow-thru
2476  ;
2477  ;    End
2478  ;    AliasConditionState = RELOADING_C RELOADING_A
2479  ;    AliasConditionState = RELOADING_C FIRING_A
2480  ;    AliasConditionState = RELOADING_C BETWEEN_FIRING_SHOTS_A
2481  
2482  
2483  ;    TransitionState = TRANSXXX TRANS_THROW
2484  ;      Animation     = UIMOB03_SKL.UIMOB03_XXXXXXXXputaway gun and take out bottle
2485  ;    End
2486  
2487  ;    TransitionState = TRANS_THROW TRANS_FIRING_A
2488  ;      Animation     = UIMOB03_SKL.UIMOB03_XXXXXXXXputaway bottle and get PISTOL
2489  ;    End
2490  
2491  ;    TransitionState = TRANSXXXAK TRANS_THROW
2492  ;      Animation     = UIMOB03_SKL.UIMOB03_XXXXXXXXputaway AK and take out bottle
2493  ;    End
2494  
2495  ;    TransitionState = TRANS_THROW TRANS_FIRING_AK
2496  ;      Animation     = UIMOB03_SKL.UIMOB03_XXXXXXXXputaway bottle and get AK
2497  ;    End
2498  
2499  
2500  
2501  
2502  
2503      ;--------------------------------------------------------
2504  
2505  
2506  
2507  
2508  
2509  
2510      TransitionState = TRANS_Dying TRANS_Flailing
2511        Animation = UIMOB03_SKL.UIMOB03_A_ADTD1
2512        Animation = UIMOB03_SKL.UIMOB03_D_ADTD1
2513        AnimationMode = ONCE
2514      End
2515  
2516      ConditionState = DYING EXPLODED_FLAILING
2517        Animation = UIMOB03_SKL.UIMOB03_A_ADTD2
2518        Animation = UIMOB03_SKL.UIMOB03_D_ADTD2
2519        AnimationMode = LOOP
2520        TransitionKey = TRANS_Flailing
2521      End
2522  
2523      ConditionState = DYING EXPLODED_BOUNCING
2524        Animation = UIMOB03_SKL.UIMOB03_A_ADTD3
2525        Animation = UIMOB03_SKL.UIMOB03_D_ADTD3
2526        AnimationMode = ONCE
2527        TransitionKey = None
2528      End
2529  
2530  
2531    End
2532  
2533  
2534    Geometry = CYLINDER
2535    GeometryMajorRadius = 3.0 ; very thin
2536    GeometryMinorRadius = 3.0 ; very thinD
2537    GeometryHeight = 12.0
2538    GeometryIsSmall = Yes
2539  
2540  End
2541  
2542  ;------------------------------------------------------------------------------
2543  ;------------------------------------------------------------------------------
2544  ObjectReskin GLAInfantryAngryMobRock04 GLAInfantryAngryMobRock02
2545  
2546  ;**** ART Parameters ***
2547    Draw = W3DModelDraw ModuleTag_01
2548      OkToChangeModelColor = Yes
2549  
2550      ; WHILE CARRYING ROCK
2551      ;---------------------------------------------------------
2552      DefaultConditionState
2553        Model = UIMOB04_SKN
2554        IdleAnimation = UIMOB04_SKL.UIMOB04_IDB1 0 12
2555        IdleAnimation = UIMOB04_SKL.UIMOB04_IDB2 0 5 
2556        IdleAnimation = UIMOB04_SKL.UIMOB04_CHB  0 5 
2557        IdleAnimation = UIMOB04_SKL.UIMOB04_STB  0 12
2558        AnimationMode = ONCE
2559        AnimationSpeedFactorRange 0.9 1.1
2560        TransitionKey = TRANS_STAND_A
2561        WaitForStateToFinishIfPossible TRANS_FIRING_A
2562  
2563        ;WeaponFireFXBone  = PRIMARY   "UIMOB04 R HAND"
2564        ;WeaponMuzzleFlash = PRIMARY   "UIMOB04 R HAND"
2565        WeaponFireFXBone =  SECONDARY MuzzleAK
2566        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2567      End
2568  
2569  
2570      ; Drawing rock
2571      ConditionState  = PREATTACK_A
2572        Animation     = UIMOB04_SKL.UIMOB04_ATB2_BF ; wind up
2573        AnimationMode = ONCE
2574        AnimationSpeedFactorRange 1.0 1.0
2575      End
2576      AliasConditionState = PREATTACK_A FIRING_A
2577      AliasConditionState = PREATTACK_A BETWEEN_FIRING_SHOTS_A
2578  
2579      ; throwing rock
2580      ConditionState = FIRING_A
2581        Animation = UIMOB04_SKL.UIMOB04_ATB1_AF ; throw
2582        Animation = UIMOB04_SKL.UIMOB04_ATB2_AF ; throw
2583        AnimationMode = ONCE
2584        TransitionKey = TRANS_FIRING_A
2585      End
2586  
2587      ConditionState = BETWEEN_FIRING_SHOTS_A
2588        Animation         = UIMOB04_SKL.UIMOB04_STB
2589        AnimationMode     = ONCE
2590        ; this is basically a trick: this guy has a nontrivial animation for firing,
2591        ; and a long recycle time between shots. we want him to finish his fire animation
2592        ; (unless he's ordered to do something else), so this is just a handy trick that
2593        ; says, "if the previous state had this transition key, allow it to finish before
2594        ; switching to us, if possible".
2595        WaitForStateToFinishIfPossible = TRANS_FIRING_A
2596      End
2597      AliasConditionState = RELOADING_A
2598  
2599      ConditionState = MOVING
2600        Animation = UIMOB04_SKL.UIMOB04_RUN 
2601        AnimationMode = LOOP
2602        Flags = RANDOMSTART
2603        TransitionKey   = MOVING
2604        ParticleSysBone   = None InfantryDustTrails
2605      End
2606  
2607      ConditionState = DYING
2608        Animation = UIMOB04_SKL.UIMOB04_DB1    
2609        Animation = UIMOB04_SKL.UIMOB04_DB2
2610        AnimationMode = ONCE
2611        TransitionKey = TRANS_Dying
2612      End
2613  
2614      ConditionState = SPECIAL_CHEERING
2615        Animation = UIMOB04_SKL.UIMOB04_CHB
2616        Flags = RANDOMSTART
2617        AnimationMode = LOOP
2618      End
2619  
2620  
2621  
2622  
2623  
2624  
2625  
2626  
2627      ;--------------------------------------------------------
2628      ; TRANSITION FROM PISTOL TO AK47
2629      TransitionState = TRANS_STAND_A TRANS_STAND_AK
2630        Animation = UIMOB04_SKL.UIMOB04_TB-D
2631        AnimationMode = ONCE
2632      End
2633  
2634  
2635      ; WHILE CARRYING AK47 
2636      ;---------------------------------------------------------
2637      ConditionState WEAPONSET_PLAYER_UPGRADE ;Idle with AK Slung
2638        Model = UIMOB04_SKN
2639        IdleAnimation = UIMOB04_SKL.UIMOB04_IDD1 0 6
2640        IdleAnimation = UIMOB04_SKL.UIMOB04_IDD2 0 6
2641        IdleAnimation = UIMOB04_SKL.UIMOB04_CHD  0 6
2642        IdleAnimation = UIMOB04_SKL.UIMOB04_STD
2643        AnimationMode = ONCE
2644        AnimationSpeedFactorRange 0.9 1.1
2645        TransitionKey = TRANS_STAND_AK
2646        WeaponFireFXBone = SECONDARY MuzzleAK
2647        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2648      End
2649  
2650      ConditionState = MOVING WEAPONSET_PLAYER_UPGRADE
2651        Animation = UIMOB04_SKL.UIMOB04_RND 
2652        AnimationMode = LOOP
2653        Flags = RANDOMSTART
2654        TransitionKey   = MOVING_AK
2655      End
2656  
2657      ConditionState = DYING WEAPONSET_PLAYER_UPGRADE
2658        Animation = UIMOB04_SKL.UIMOB04_DD1    
2659        Animation = UIMOB04_SKL.UIMOB04_DD2
2660        AnimationMode = ONCE
2661        TransitionKey = TRANS_Dying
2662      End
2663  
2664      ConditionState = SPECIAL_CHEERING WEAPONSET_PLAYER_UPGRADE
2665        Animation = UIMOB04_SKL.UIMOB04_CHD
2666        AnimationMode = ONCE
2667      End
2668  
2669      ; Drawing AK47
2670      ConditionState  = PREATTACK_B WEAPONSET_PLAYER_UPGRADE
2671        Animation     = UIMOB04_SKL.UIMOB04_ATD1_ST ; start firing
2672        AnimationMode = ONCE
2673      End
2674      AliasConditionState = PREATTACK_B FIRING_B WEAPONSET_PLAYER_UPGRADE
2675      AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2676  
2677      ; Firing Gun
2678      ConditionState = FIRING_B WEAPONSET_PLAYER_UPGRADE
2679        Animation = UIMOB04_SKL.UIMOB04_ATD1_LP ; looping firing
2680        AnimationMode = LOOP
2681        WeaponFireFXBone = PRIMARY MuzzleAK
2682        WeaponMuzzleFlash = PRIMARY MuzzleAKFX
2683        TransitionKey = TRANS_FIRING_AK
2684      End
2685      AliasConditionState  = BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2686  
2687  
2688      ConditionState  = RELOADING_B WEAPONSET_PLAYER_UPGRADE
2689        Animation     = UIMOB04_SKL.UIMOB04_ATD1_ED ; end firing
2690        AnimationMode = ONCE
2691      End
2692  
2693  
2694      ; This transition allows him to put his gun away when he's finished attacking.
2695      TransitionState = TRANS_FIRING_AK TRANS_STAND_AK
2696        Animation     = UIMOB04_SKL.UIMOB04_ATD1_ED ; end firing
2697        AnimationMode = ONCE
2698      End
2699  
2700  
2701  
2702  
2703  
2704  
2705  
2706  
2707  
2708  
2709      TransitionState = TRANS_Dying TRANS_Flailing
2710        Animation = UIMOB04_SKL.UIMOB04_B_ADTF1
2711        Animation = UIMOB04_SKL.UIMOB04_D_ADTF1
2712        AnimationMode = ONCE
2713      End
2714  
2715      ConditionState = DYING EXPLODED_FLAILING
2716        Animation = UIMOB04_SKL.UIMOB04_B_ADTF2
2717        Animation = UIMOB04_SKL.UIMOB04_D_ADTF2
2718        AnimationMode = LOOP
2719        TransitionKey = TRANS_Flailing
2720      End
2721  
2722      ConditionState = DYING EXPLODED_BOUNCING
2723        Animation = UIMOB04_SKL.UIMOB04_B_ADTF3
2724        Animation = UIMOB04_SKL.UIMOB04_D_ADTF3
2725        AnimationMode = ONCE
2726        TransitionKey = None
2727      End
2728  
2729  
2730    End
2731  
2732    Geometry = CYLINDER
2733    GeometryMajorRadius = 5.0 ; kinda thin
2734    GeometryMinorRadius = 5.0 ; kinda thinD
2735    GeometryHeight = 12.0
2736    GeometryIsSmall = Yes
2737  
2738  End
2739  
2740  ;------------------------------------------------------------------------------
2741  ;------------------------------------------------------------------------------
2742  ObjectReskin GLAInfantryAngryMobPistol05 GLAInfantryAngryMobPistol01
2743  
2744  ;**** ART Parameters ***
2745    Draw = W3DModelDraw DrawTag_01
2746      OkToChangeModelColor = Yes
2747  
2748  
2749  
2750      ; WHILE CARRYING PISTOL
2751      ;---------------------------------------------------------
2752      DefaultConditionState ;Idle with Pistol Holstered
2753        Model = UIMOB05_SKN
2754        IdleAnimation = UIMOB05_SKL.UIMOB05_IDA1 0 12
2755        IdleAnimation = UIMOB05_SKL.UIMOB05_IDA2 0 5
2756        IdleAnimation = UIMOB05_SKL.UIMOB05_CHA  0 5
2757        IdleAnimation = UIMOB05_SKL.UIMOB05_STA  0 5
2758        AnimationMode = ONCE
2759        AnimationSpeedFactorRange 0.9 1.1
2760        TransitionKey = TRANS_STAND_A
2761  
2762        WeaponFireFXBone = PRIMARY Muzzle01
2763        WeaponMuzzleFlash = PRIMARY Muzzle01
2764      End
2765  
2766      ; Drawing pistol
2767      ConditionState  = PREATTACK_A
2768        Animation     = UIMOB05_SKL.UIMOB05_ATA1_ST ; start firing
2769        AnimationMode = ONCE
2770      End
2771      AliasConditionState = PREATTACK_A FIRING_A
2772      AliasConditionState = PREATTACK_A BETWEEN_FIRING_SHOTS_A
2773  
2774      ; Firing pistol
2775      ConditionState = FIRING_A
2776        Animation = UIMOB05_SKL.UIMOB05_ATA1_LP ; looping firing
2777        AnimationMode = LOOP
2778        TransitionKey = TRANS_FIRING_A
2779      End
2780      AliasConditionState  = BETWEEN_FIRING_SHOTS_A
2781      
2782      ConditionState  = RELOADING_A
2783        Animation     = UIMOB05_SKL.UIMOB05_ATA1_ED ; end firing
2784        AnimationMode = ONCE
2785      End
2786  
2787      ; This transition allows him to put his gun away when he's finished attacking.
2788      TransitionState = TRANS_FIRING_A TRANS_STAND_A
2789        Animation     = UIMOB05_SKL.UIMOB05_ATA1_ED ; end firing
2790        AnimationMode = ONCE
2791      End
2792  
2793      ConditionState = MOVING
2794        Animation = UIMOB05_SKL.UIMOB05_RNA 
2795        AnimationMode = LOOP
2796        Flags = RANDOMSTART
2797        TransitionKey   = MOVING
2798        ParticleSysBone   = None InfantryDustTrails
2799      End
2800      AliasConditionState = MOVING RELOADING_A
2801      AliasConditionState = MOVING PREATTACK_A
2802      AliasConditionState = MOVING FIRING_A
2803      AliasConditionState = MOVING BETWEEN_FIRING_SHOTS_A
2804      AliasConditionState = MOVING RELOADING_C RELOADING_A 
2805      AliasConditionState = MOVING PREATTACK_C BETWEEN_FIRING_SHOTS_A 
2806  
2807      ConditionState = DYING
2808        Animation = UIMOB05_SKL.UIMOB05_DA1    
2809        Animation = UIMOB05_SKL.UIMOB05_DA2
2810        AnimationMode = ONCE
2811        TransitionKey = TRANS_Dying
2812      End
2813  
2814  
2815      ConditionState = SPECIAL_CHEERING
2816        Animation = UIMOB05_SKL.UIMOB05_CHA
2817        AnimationMode = ONCE
2818      End
2819  
2820      ;--------------------------------------------------------
2821  
2822      ; TRANSITION FROM PISTOL TO AK47
2823      TransitionState = TRANS_STAND_A TRANS_STAND_AK
2824        Animation = UIMOB05_SKL.UIMOB05_TA-D
2825        AnimationMode = ONCE
2826      End
2827  
2828  
2829      ; WHILE CARRYING AK47 
2830      ;---------------------------------------------------------
2831      ConditionState WEAPONSET_PLAYER_UPGRADE ;Idle with AK Slung
2832        Model = UIMOB05_SKN
2833        IdleAnimation = UIMOB05_SKL.UIMOB05_IDD1 0 6
2834        IdleAnimation = UIMOB05_SKL.UIMOB05_IDD2 0 6
2835        IdleAnimation = UIMOB05_SKL.UIMOB05_CHD  0 6
2836        IdleAnimation = UIMOB05_SKL.UIMOB05_STD
2837        AnimationMode = ONCE
2838        AnimationSpeedFactorRange 0.9 1.1
2839        TransitionKey = TRANS_STAND_AK
2840        WeaponFireFXBone = SECONDARY MuzzleAK
2841        WeaponMuzzleFlash = SECONDARY MuzzleAKFX
2842      End
2843  
2844      ConditionState = MOVING WEAPONSET_PLAYER_UPGRADE
2845        Animation = UIMOB05_SKL.UIMOB05_RND 
2846        AnimationMode = LOOP
2847        Flags = RANDOMSTART
2848        TransitionKey   = MOVING_AK
2849      End
2850  
2851      ConditionState = DYING WEAPONSET_PLAYER_UPGRADE
2852        Animation = UIMOB05_SKL.UIMOB05_DD1    
2853        Animation = UIMOB05_SKL.UIMOB05_DD2
2854        AnimationMode = ONCE
2855        TransitionKey = TRANS_Dying
2856      End
2857  
2858      ConditionState = SPECIAL_CHEERING WEAPONSET_PLAYER_UPGRADE
2859        Animation = UIMOB05_SKL.UIMOB05_CHD
2860        AnimationMode = ONCE
2861      End
2862  
2863      ; Drawing AK47
2864      ConditionState  = PREATTACK_B WEAPONSET_PLAYER_UPGRADE
2865        Animation     = UIMOB05_SKL.UIMOB05_ATD1_ST ; start firing
2866        AnimationMode = ONCE
2867      End
2868      AliasConditionState = PREATTACK_B FIRING_B WEAPONSET_PLAYER_UPGRADE
2869      AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2870  
2871      ; Firing Gun
2872      ConditionState = FIRING_B WEAPONSET_PLAYER_UPGRADE
2873        Animation = UIMOB05_SKL.UIMOB05_ATD1_LP ; looping firing
2874        AnimationMode = LOOP
2875        WeaponFireFXBone = PRIMARY MuzzleAK
2876        WeaponMuzzleFlash = PRIMARY MuzzleAKFX
2877        TransitionKey = TRANS_FIRING_AK
2878      End
2879      AliasConditionState  = BETWEEN_FIRING_SHOTS_B WEAPONSET_PLAYER_UPGRADE
2880  
2881  
2882      ConditionState  = RELOADING_B WEAPONSET_PLAYER_UPGRADE
2883        Animation     = UIMOB05_SKL.UIMOB05_ATD1_ED ; end firing
2884        AnimationMode = ONCE
2885      End
2886  
2887  
2888      ; This transition allows him to put his gun away when he's finished attacking.
2889      TransitionState = TRANS_FIRING_AK TRANS_STAND_AK
2890        Animation     = UIMOB05_SKL.UIMOB05_ATD1_ED ; end firing
2891        AnimationMode = ONCE
2892      End
2893  
2894  
2895  ;    ;Throwing bottle----------------------------------------------------------------
2896  ;    ConditionState = PREATTACK_C 
2897  ;      Animation     = UIMOB05_SKL.UIMOB05_ATCA_BF ; the wind up
2898  ;    End
2899  ;    AliasConditionState = PREATTACK_C FIRING_A
2900  ;    AliasConditionState = PREATTACK_C RELOADING_A
2901  ;    AliasConditionState = PREATTACK_C BETWEEN_FIRING_SHOTS_A 
2902  ;
2903  ;    ConditionState = FIRING_C 
2904  ;      Animation     = UIMOB05_SKL.UIMOB05_ATCA_AF ; the release and follow-thru
2905  ;      TransitionKey = TRANS_THROW
2906  ;    End
2907  ;    AliasConditionState = FIRING_C BETWEEN_FIRING_SHOTS_A
2908  ;
2909  ;    ConditionState RELOADING_C
2910  ;      Animation =UIMOB05_SKL.UIMOB05_IDA1
2911  ;      WaitForStateToFinishIfPossible = TRANS_THROW ; universal hub for follow-thru
2912  ;    End
2913  ;    AliasConditionState = RELOADING_C RELOADING_A
2914  ;    AliasConditionState = RELOADING_C FIRING_A
2915  ;    AliasConditionState = RELOADING_C BETWEEN_FIRING_SHOTS_A
2916  
2917  
2918  ;    TransitionState = TRANSXXX TRANS_THROW
2919  ;      Animation     = UIMOB05_SKL.UIMOB05_XXXXXXXXputaway gun and take out bottle
2920  ;    End
2921  
2922  ;    TransitionState = TRANS_THROW TRANS_FIRING_A
2923  ;      Animation     = UIMOB05_SKL.UIMOB05_XXXXXXXXputaway bottle and get PISTOL
2924  ;    End
2925  
2926  ;    TransitionState = TRANSXXXAK TRANS_THROW
2927  ;      Animation     = UIMOB05_SKL.UIMOB05_XXXXXXXXputaway AK and take out bottle
2928  ;    End
2929  
2930  
2931  ;    TransitionState = TRANS_THROW TRANS_FIRING_AK
2932  ;      Animation     = UIMOB05_SKL.UIMOB05_XXXXXXXXputaway bottle and get AK
2933  ;    End
2934  
2935  
2936  
2937  
2938  
2939      ;--------------------------------------------------------
2940  
2941  
2942  
2943  
2944  
2945  
2946      TransitionState = TRANS_Dying TRANS_Flailing
2947        Animation = UIMOB05_SKL.UIMOB05_A_ADTA1
2948        Animation = UIMOB05_SKL.UIMOB05_D_ADTA1
2949        AnimationMode = ONCE
2950      End
2951  
2952      ConditionState = DYING EXPLODED_FLAILING
2953        Animation = UIMOB05_SKL.UIMOB05_A_ADTA2
2954        Animation = UIMOB05_SKL.UIMOB05_D_ADTA2
2955        AnimationMode = LOOP
2956        TransitionKey = TRANS_Flailing
2957      End
2958  
2959      ConditionState = DYING EXPLODED_BOUNCING
2960        Animation = UIMOB05_SKL.UIMOB05_A_ADTA3
2961        Animation = UIMOB05_SKL.UIMOB05_D_ADTA3
2962        AnimationMode = ONCE
2963        TransitionKey = None
2964      End
2965  
2966  
2967    End
2968  
2969  
2970  
2971    Geometry = CYLINDER
2972    GeometryMajorRadius = 3.0 ; very thin
2973    GeometryMinorRadius = 3.0 ; very thinD
2974    GeometryHeight = 12.0
2975    GeometryIsSmall = Yes
2976  
2977  End
2978  
2979  
2980  ;------------------------------------------------------------------------------
2981  ;------------------------------------------------------------------------------
2982  Object GLAInfantryAngryMobMolotov02
2983  
2984  ;**** ART Parameters ***
2985    Draw = W3DModelDraw ModuleTag_01
2986      OkToChangeModelColor = Yes
2987  
2988      ; WHILE CARRYING ROCK
2989      ;---------------------------------------------------------
2990      DefaultConditionState
2991        Model = UIMOB02_SKN
2992        IdleAnimation = UIMOB02_SKL.UIMOB02_IDB1 0 12
2993        IdleAnimation = UIMOB02_SKL.UIMOB02_IDB2 0 5
2994        IdleAnimation = UIMOB02_SKL.UIMOB02_CHB  0 5
2995        IdleAnimation = UIMOB02_SKL.UIMOB02_STB  0 12
2996        AnimationMode = ONCE
2997        AnimationSpeedFactorRange 0.9 1.1
2998        TransitionKey = TRANS_STAND_B
2999  
3000        WeaponFireFXBone  = SECONDARY   "UIMOB02 R HAND"
3001  
3002      End
3003  
3004  
3005      ; Drawing rock
3006      ConditionState  = PREATTACK_B
3007        Animation     = UIMOB02_SKL.UIMOB02_ATCB_BF ; wind up
3008        AnimationMode = ONCE
3009      End
3010      AliasConditionState = PREATTACK_B FIRING_B
3011      AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B
3012  
3013      ; throwing rock
3014      ConditionState = FIRING_B
3015        Animation = UIMOB02_SKL.UIMOB02_ATCB_AF ; throw
3016        AnimationMode = ONCE
3017        TransitionKey = TRANS_FIRING_B
3018      End
3019  
3020      ConditionState = BETWEEN_FIRING_SHOTS_B
3021        Animation         = UIMOB02_SKL.UIMOB02_STB
3022        AnimationMode     = ONCE
3023        ; this is basically a trick: this guy has a nontrivial animation for firing,
3024        ; and a long recycle time between shots. we want him to finish his fire animation
3025        ; (unless he's ordered to do something else), so this is just a handy trick that
3026        ; says, "if the previous state had this transition key, allow it to finish before
3027        ; switching to us, if possible".
3028        WaitForStateToFinishIfPossible = TRANS_FIRING_B
3029      End
3030      AliasConditionState = RELOADING_B
3031  
3032  
3033      ConditionState = MOVING
3034        Animation = UIMOB02_SKL.UIMOB02_RNB 
3035        AnimationMode = LOOP
3036        Flags = RANDOMSTART
3037        TransitionKey   = MOVING
3038        ParticleSysBone   = None InfantryDustTrails
3039      End
3040  
3041      ConditionState = DYING
3042        Animation = UIMOB02_SKL.UIMOB02_DB1    
3043        Animation = UIMOB02_SKL.UIMOB02_DB2
3044        AnimationMode = ONCE
3045        TransitionKey = TRANS_Dying
3046      End
3047  
3048      ConditionState = SPECIAL_CHEERING
3049        Animation = UIMOB02_SKL.UIMOB02_CHB
3050        Flags = RANDOMSTART
3051        AnimationMode = LOOP
3052      End
3053  
3054  
3055  
3056  
3057  
3058  
3059      TransitionState = TRANS_Dying TRANS_Flailing
3060        Animation = UIMOB02_SKL.UIMOB02_B_ADTA1
3061        Animation = UIMOB02_SKL.UIMOB02_D_ADTA1
3062        AnimationMode = ONCE
3063      End
3064  
3065      ConditionState = DYING EXPLODED_FLAILING
3066        Animation = UIMOB02_SKL.UIMOB02_B_ADTA2
3067        Animation = UIMOB02_SKL.UIMOB02_D_ADTA2
3068        AnimationMode = LOOP
3069        TransitionKey = TRANS_Flailing
3070      End
3071  
3072      ConditionState = DYING EXPLODED_BOUNCING
3073        Animation = UIMOB02_SKL.UIMOB02_B_ADTA3
3074        Animation = UIMOB02_SKL.UIMOB02_D_ADTA3
3075        AnimationMode = ONCE
3076        TransitionKey = None
3077      End
3078  
3079  
3080    End
3081  
3082  
3083  ;**** DESIGN parameters ***
3084  
3085    DisplayName      = OBJECT:AngryMob
3086    Side = GLA
3087    EditorSorting = INFANTRY
3088    TransportSlotCount = 0                 ;how many "slots" we take in a transport (0 == not transportable)
3089  
3090    WeaponSet
3091      Conditions = None 
3092      Weapon = PRIMARY GLAAngryMobMolotovCocktailProjectileWeapon ; all she does is throw molotovs
3093    End
3094  
3095    ArmorSet
3096      Conditions      = None
3097      Armor           = HumanArmor
3098      DamageFX        = InfantryDamageFX
3099    End
3100  
3101    VisionRange = 150
3102    ShroudClearingRange = 150
3103    Prerequisites
3104      Object = GLABarracks
3105  
3106    End
3107    BuildCost = 100
3108    BuildTime = 0.0            
3109  
3110    ExperienceValue = 5 5 5 5    ;Experience point value at each level
3111    ExperienceRequired = 0 150 450 900  ;Experience points needed to gain each level
3112    IsTrainable = Yes             ;Can gain experience
3113    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
3114  
3115    ; *** AUDIO Parameters ***
3116    VoiceSelect = NoSound 
3117    VoiceMove = NoSound   
3118    VoiceAttack = NoSound 
3119  
3120  ;**** ENGINEERING Parameters *** ;MOB02
3121    RadarPriority = UNIT
3122    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER IGNORED_IN_GUI  ;NO_COLLIDE ;Lorenzen disables 
3123  
3124    Body = ActiveBody BodyTag_01
3125      MaxHealth       = 50.0
3126      InitialHealth   = 50.0
3127    End
3128  
3129    Behavior = AIUpdateInterface ModuleTag_03
3130      AutoAcquireEnemiesWhenIdle = Yes
3131    End
3132  
3133    Behavior = MobMemberSlavedUpdate ModuleTag_04
3134      MustCatchUpRadius   = 40
3135      NoNeedToCatchUpRadius = 15
3136      Squirrelliness = 0.05
3137      CatchUpCrisisBailTime = 30; this is in calls to this update, not in frames
3138    End
3139  
3140    Locomotor = SET_NORMAL AngryMobNormalLocomotor
3141    Locomotor = SET_WANDER AngryMobWanderLocomotor
3142    Locomotor = SET_PANIC AngryMobPanicLocomotor
3143  
3144    Behavior = PhysicsBehavior ModuleTag_05
3145      Mass = 5.0
3146    End
3147  
3148    Behavior = SquishCollide ModuleTag_08
3149      ;nothing
3150    End
3151  
3152    Behavior = WeaponSetUpgrade UpgradeTag_01
3153      TriggeredBy = Upgrade_GLAArmTheMob
3154    End
3155  
3156  
3157  ; --- begin Death modules ---
3158    Behavior = SlowDeathBehavior ModuleTag_Death01
3159      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
3160      SinkDelay           = 3000
3161      SinkRate            = 0.5     ; in Dist/Sec
3162      DestructionDelay    = 8000
3163      FX                  = INITIAL FX_CivilianArabFemaleDie
3164    End
3165    Behavior = SlowDeathBehavior ModuleTag_Death02
3166      DeathTypes          = NONE +CRUSHED +SPLATTED
3167      SinkDelay           = 3000
3168      SinkRate            = 0.5     ; in Dist/Sec
3169      DestructionDelay    = 8000
3170      FX                  = INITIAL FX_GIDieCrushed
3171    End
3172    Behavior = SlowDeathBehavior ModuleTag_Death03
3173      DeathTypes          = NONE +EXPLODED
3174      SinkDelay           = 3000
3175      SinkRate            = 0.5     ; in Dist/Sec
3176      DestructionDelay    = 8000
3177      FX                  = INITIAL FX_CivilianArabFemaleDie
3178      FlingForce          = 8
3179      FlingForceVariance  = 3
3180      FlingPitch          = 60
3181      FlingPitchVariance  = 10
3182    End
3183    Behavior = SlowDeathBehavior ModuleTag_Death04
3184      DeathTypes          = NONE +BURNED
3185      DestructionDelay    = 0
3186      FX                  = INITIAL FX_GIDie
3187      OCL                 = INITIAL OCL_FlamingInfantry
3188    End
3189    Behavior = SlowDeathBehavior ModuleTag_Death05
3190      DeathTypes          = NONE +POISONED
3191      DestructionDelay    = 0
3192      FX                  = INITIAL FX_DieByToxinGLA
3193      OCL                 = INITIAL OCL_ToxicInfantry
3194    End
3195    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
3196      DeathTypes          = NONE +POISONED_BETA
3197      DestructionDelay    = 0
3198      FX                  = INITIAL FX_DieByToxinGLA
3199      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
3200    End
3201    Behavior = SlowDeathBehavior ModuleTag_Death07
3202      DeathTypes          = NONE +POISONED_GAMMA
3203      DestructionDelay    = 0
3204      FX                  = INITIAL FX_DieByToxinGLA
3205      OCL                 = INITIAL OCL_ToxicInfantryGamma
3206    End
3207  ; --- end Death modules ---
3208  
3209    Behavior = PoisonedBehavior ModuleTag_13
3210      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
3211      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
3212    End
3213   
3214    Geometry = CYLINDER
3215    GeometryMajorRadius = 4.0 ; very thin
3216    GeometryHeight = 12.0
3217    GeometryIsSmall = Yes
3218    Shadow = SHADOW_DECAL
3219    ShadowSizeX = 14;
3220    ShadowSizeY = 14;
3221    ShadowTexture = ShadowI;
3222    BuildCompletion = APPEARS_AT_RALLY_POINT
3223  
3224  End
3225  
3226  ;------------------------------------------------------------------------------
3227  ;------------------------------------------------------------------------------
3228  
3229  
3230  
3231  ;------------------------------------------------------------------------------
3232  ;------------------------------------------------------------------------------
3233  ;------------------------------------------------------------------------------
3234  Object GLAInfantryHijacker
3235  
3236    ; *** ART Parameters ***
3237    SelectPortrait         = SUHijacker_L
3238    ButtonImage            = SUHijacker
3239    
3240    ;UpgradeCameo1 = NONE
3241    ;UpgradeCameo2 = NONE
3242    ;UpgradeCameo3 = NONE
3243    ;UpgradeCameo4 = NONE
3244    ;UpgradeCameo5 = NONE
3245  
3246    Draw = W3DModelDraw ModuleTag_01
3247      OkToChangeModelColor = Yes
3248  
3249      DefaultConditionState
3250        Model = UIHJCK_SKN
3251        IdleAnimation = UIHJCK_SKL.UIHJCK_STA 0 25
3252        IdleAnimation = UIHJCK_SKL.UIHJCK_IDA
3253        IdleAnimation = UIHJCK_SKL.UIHJCK_IDB
3254        AnimationMode = ONCE
3255        TransitionKey = TRANS_Stand
3256      End
3257      AliasConditionState = REALLYDAMAGED
3258  
3259      ConditionState = MOVING
3260        Animation = UIHJCK_SKL.UIHJCK_RUN 
3261        AnimationMode = LOOP
3262        Flags = RANDOMSTART
3263        TransitionKey = None
3264        ParticleSysBone   = None InfantryDustTrails
3265      End
3266      AliasConditionState = REALLYDAMAGED MOVING
3267  
3268  
3269      ConditionState = DYING
3270        Animation = UIHJCK_SKL.UIHJCK_DTA
3271        Animation = UIHJCK_SKL.UIHJCK_DTB
3272        AnimationMode = ONCE
3273        TransitionKey = TRANS_Dying
3274      End
3275  
3276      TransitionState = TRANS_Dying TRANS_Flailing
3277        Animation = UIHJCK_SKL.UIHJCK_ADTE1
3278        AnimationMode = ONCE
3279      End
3280  
3281      ConditionState = DYING EXPLODED_FLAILING
3282        Animation = UIHJCK_SKL.UIHJCK_ADTE2
3283        AnimationMode = LOOP
3284        TransitionKey = TRANS_Flailing
3285      End
3286  
3287      ConditionState = DYING EXPLODED_BOUNCING
3288        Animation = UIHJCK_SKL.UIHJCK_ADTE3
3289        AnimationMode = ONCE
3290        TransitionKey = None
3291      End
3292  
3293      ConditionState = SPECIAL_CHEERING
3294        Animation = UIHJCK_SKL.UIHJCK_CHA
3295        AnimationMode = LOOP
3296      End
3297  
3298  
3299      ConditionState = PARACHUTING
3300        Animation = UIHJCK_SKL.UIHJCK_PHG
3301        AnimationMode = LOOP
3302        Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
3303        TransitionKey = TRANS_Chute
3304      End
3305      AliasConditionState = PARACHUTING REALLYDAMAGED
3306      AliasConditionState = PARACHUTING DYING
3307      TransitionState = TRANS_Falling TRANS_Chute
3308        Animation = UIHJCK_SKL.UIHJCK_POP
3309        AnimationMode = ONCE
3310        Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME  ; our bone positions should come from the last frame, rather than the first
3311      End
3312      TransitionState = TRANS_Chute TRANS_Stand
3313        Animation = UIHJCK_SKL.UIHJCK_PTD
3314        AnimationMode = ONCE
3315      End
3316  
3317  
3318    End
3319  
3320    ; ***DESIGN parameters ***
3321    DisplayName      = OBJECT:Hijacker
3322    Side = GLA
3323    EditorSorting = INFANTRY
3324    TransportSlotCount = 1                 ;how many "slots" we take in a transport (0 == not transportable)
3325    
3326    
3327  
3328    ArmorSet
3329      Conditions      = None
3330      Armor           = HumanArmor
3331      DamageFX        = InfantryDamageFX
3332    End
3333  
3334    VisionRange = 100
3335    ShroudClearingRange = 200
3336    Prerequisites
3337      Object = GLABarracks
3338      Object = GLAPalace
3339      Science = SCIENCE_Hijacker
3340    End
3341  
3342    BuildCost = 400
3343    BuildTime = 10.0          ;in seconds    
3344  
3345  
3346  
3347  
3348    ExperienceValue = 50 100 150 400    ;Experience point value at each level
3349    ExperienceRequired = 0 150 450 900  ;Experience points needed to gain each level
3350    IsTrainable = No                    ;Can gain experience
3351    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
3352    CommandSet    = GLAInfantryHijackerCommandSet
3353  
3354    ; *** AUDIO Parameters ***
3355    VoiceSelect =    HijackerVoiceSelect
3356    VoiceMove =      HijackerVoiceMove
3357    VoiceGuard =      HijackerVoiceMove
3358    VoiceAttack =    HijackerVoiceAttack
3359    VoiceFear =      HijackerVoiceFear
3360    UnitSpecificSounds
3361      VoiceGarrison =  HijackerVoiceGarrison
3362      VoiceCreate           = HijackerVoiceCreate
3363      VoiceEnter            = HijackerVoiceEnter
3364      VoiceEnterHostile     = HijackerVoiceEnterHostile
3365      VoiceGetHealed      = HijackerVoiceMove
3366    End
3367    
3368  
3369    ; *** ENGINEERING Parameters ***
3370    RadarPriority = UNIT
3371    EnterGuard = Yes
3372    HijackGuard = Yes
3373    KindOf = PRELOAD SELECTABLE CAN_CAST_REFLECTIONS INFANTRY SALVAGER SCORE STEALTH_GARRISON
3374    ;STEALTH_GARRISON Added per Dustin, 12/14--ML
3375  
3376  
3377    Behavior = StealthUpdate ModuleTag_02
3378      StealthDelay                = 500                    ; half second delay before stealthy
3379      StealthForbiddenConditions  = MOVING ; only stealthy while stationary
3380      MoveThresholdSpeed          = 3
3381      InnateStealth               = Yes
3382      OrderIdleEnemiesToAttackMeUponReveal  = Yes
3383    End
3384  
3385    Body = ActiveBody ModuleTag_03
3386      MaxHealth       = 100.0
3387      InitialHealth   = 100.0
3388    End
3389  
3390    Behavior = HijackerUpdate ModuleTag_04
3391      ParachuteName = AmericaParachute
3392    End
3393  
3394    Behavior = AIUpdateInterface ModuleTag_05
3395      AutoAcquireEnemiesWhenIdle = Yes
3396    End
3397    Behavior = CommandButtonHuntUpdate  ModuleTag_CBH01 ; allows use of command button hunt script with this unit. 
3398    End
3399    Locomotor = SET_NORMAL JarmenKellLocomotor
3400  
3401    Behavior = PhysicsBehavior ModuleTag_06
3402      Mass = 5.0
3403    End
3404  
3405    Behavior = ConvertToHijackedVehicleCrateCollide       ModuleTag_08
3406      RequiredKindOf = VEHICLE      ; This is my car now, infidel!
3407    End
3408  
3409    Behavior = SquishCollide ModuleTag_09
3410      ;nothing
3411    End
3412  
3413  
3414  ; --- begin Death modules ---
3415    Behavior = SlowDeathBehavior ModuleTag_Death01
3416      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
3417      SinkDelay           = 3000
3418      SinkRate            = 0.5     ; in Dist/Sec
3419      DestructionDelay    = 8000
3420      FX                  = INITIAL FX_HijackerDie
3421    End
3422    Behavior = SlowDeathBehavior ModuleTag_Death02
3423      DeathTypes          = NONE +CRUSHED +SPLATTED
3424      SinkDelay           = 3000
3425      SinkRate            = 0.5     ; in Dist/Sec
3426      DestructionDelay    = 8000
3427      FX                  = INITIAL FX_GIDieCrushed
3428    End
3429    Behavior = SlowDeathBehavior ModuleTag_Death03
3430      DeathTypes          = NONE +EXPLODED
3431      SinkDelay           = 3000
3432      SinkRate            = 0.5     ; in Dist/Sec
3433      DestructionDelay    = 8000
3434      FX                  = INITIAL FX_HijackerDie
3435      FlingForce          = 8
3436      FlingForceVariance  = 3
3437      FlingPitch          = 60
3438      FlingPitchVariance  = 10
3439    End
3440    Behavior = SlowDeathBehavior ModuleTag_Death04
3441      DeathTypes          = NONE +BURNED
3442      DestructionDelay    = 0
3443      FX                  = INITIAL FX_DieByFireGLA
3444      OCL                 = INITIAL OCL_FlamingInfantry
3445    End
3446    Behavior = SlowDeathBehavior ModuleTag_Death05
3447      DeathTypes          = NONE +POISONED
3448      DestructionDelay    = 0
3449      FX                  = INITIAL FX_DieByToxinGLA
3450      OCL                 = INITIAL OCL_ToxicInfantry
3451    End
3452    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
3453      DeathTypes          = NONE +POISONED_BETA
3454      DestructionDelay    = 0
3455      FX                  = INITIAL FX_DieByToxinGLA
3456      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
3457    End
3458    Behavior = SlowDeathBehavior ModuleTag_Death07
3459      DeathTypes          = NONE +POISONED_GAMMA
3460      DestructionDelay    = 0
3461      FX                  = INITIAL FX_DieByToxinGLA
3462      OCL                 = INITIAL OCL_ToxicInfantryGamma
3463    End
3464  
3465  ; --- end Death modules ---
3466  
3467    Behavior = PoisonedBehavior ModuleTag_14
3468      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
3469      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
3470    End
3471   
3472    Geometry = CYLINDER
3473    GeometryMajorRadius = 10.0
3474    GeometryMinorRadius = 10.0
3475    GeometryHeight = 12.0
3476    GeometryIsSmall = Yes
3477    Shadow = SHADOW_DECAL
3478    ShadowSizeX = 14;
3479    ShadowSizeY = 14;
3480    ShadowTexture = ShadowI;
3481    BuildCompletion = APPEARS_AT_RALLY_POINT
3482  
3483  End
3484  
3485  
3486  
3487  
3488  
3489  ;------------------------------------------------------------------------------
3490  Object GLAInfantryWorker
3491  
3492    ; *** ART Parameters ***
3493    SelectPortrait         = SUWorker_L
3494    ButtonImage            = SUWorker
3495    
3496    UpgradeCameo1 = Upgrade_GLAWorkerShoes
3497    ;UpgradeCameo2 = NONE
3498    ;UpgradeCameo3 = NONE
3499    ;UpgradeCameo4 = NONE
3500    ;UpgradeCameo5 = NONE
3501  
3502    Draw = W3DModelDraw ModuleTag_01
3503      OkToChangeModelColor = Yes
3504  
3505      DefaultConditionState
3506        Model         = UIWRKR_SKN
3507        IdleAnimation = UIWRKR_SKL.UIWRKR_STA 0 9
3508        IdleAnimation = UIWRKR_SKL.UIWRKR_IDA
3509        AnimationMode = ONCE
3510        TransitionKey = TRANS_Stand
3511      End
3512  
3513      ConditionState  = MOVING
3514        Animation     = UIWRKR_SKL.UIWRKR_RNA 16
3515        AnimationMode = LOOP
3516        Flags         = RANDOMSTART
3517        TransitionKey = TRANS_Moving
3518        ParticleSysBone = None InfantryDustTrails
3519      End
3520      ; it is legal to be ACTIVELY_CONSTRUCTING and MOVING at the same time,
3521      ; since we flip the bit once we get pretty close to the target. but it looks
3522      ; funky to do the construction animation while moving. 
3523      ; so just use the normal move animation in that case.
3524      AliasConditionState = ACTIVELY_CONSTRUCTING MOVING
3525  
3526      ConditionState = ATTACKING
3527        ShowSubObject = MINED_SKIN
3528        Animation = UIWRKR_SKL.UIWRKR_MS
3529        AnimationMode = LOOP
3530        Flags = RANDOMSTART
3531        TransitionKey = TRANS_MetalDetector_Standing
3532      End
3533  
3534      ConditionState = MOVING ATTACKING
3535        ShowSubObject = MINED_SKIN
3536        Animation = UIWRKR_SKL.UIWRKR_MSW 50
3537        AnimationMode = LOOP
3538        Flags = RANDOMSTART
3539        TransitionKey = TRANS_MetalDetector_Moving
3540        ParticleSysBone = None InfantryDustTrails
3541      End
3542      AliasConditionState = MOVING ATTACKING CARRYING
3543  
3544      TransitionState = TRANS_Stand TRANS_MetalDetector_Standing    ;STANDING -> ATTACKING
3545        ShowSubObject = MINED_SKIN
3546        Animation     = UIWRKR_SKL.UIWRKR_TRB1;take out standing
3547        AnimationMode = ONCE
3548      End
3549      TransitionState = TRANS_MetalDetector_Standing TRANS_Stand    ;ATTACKING -> STANDING
3550        ShowSubObject = MINED_SKIN
3551        Animation     = UIWRKR_SKL.UIWRKR_TRB2;put away standing
3552        AnimationMode = ONCE
3553      End
3554  
3555      TransitionState = TRANS_Carry TRANS_MetalDetector_Standing    ;CARRYING -> ATTACKING
3556        ShowSubObject = MINED_SKIN
3557        Animation     = UIWRKR_SKL.UIWRKR_TRB1;take out standing
3558        AnimationMode = ONCE
3559      End
3560      TransitionState = TRANS_MetalDetector_Standing TRANS_Carry    ;ATTACKING -> CARRYING
3561        ShowSubObject = MINED_SKIN
3562        Animation     = UIWRKR_SKL.UIWRKR_TRB2;put away standing
3563        AnimationMode = ONCE
3564      End
3565      TransitionState = TRANS_Carry TRANS_MetalDetector_Moving      ;CARRYING -> MOVING ATTACKING
3566        ShowSubObject = MINED_SKIN
3567        Animation     = UIWRKR_SKL.UIWRKR_TRC1;take out moving [NEW NON-SKATING ANIMATION]
3568        AnimationMode = ONCE
3569        AnimationSpeedFactorRange = 2.0 2.0
3570      End
3571  
3572      TransitionState = TRANS_MetalDetector_Moving TRANS_Stand      ;MOVING ATTACKING -> STANDING
3573        ShowSubObject = MINED_SKIN
3574        Animation     = UIWRKR_SKL.UIWRKR_TRB2;put away moving
3575        AnimationMode = ONCE
3576      End
3577      TransitionState = TRANS_Stand TRANS_MetalDetector_Moving      ;STANDING -> MOVING ATTACKING
3578        ShowSubObject = MINED_SKIN
3579        Animation     = UIWRKR_SKL.UIWRKR_TRC1;take out moving [NEW NON-SKATING ANIMATION]
3580        AnimationMode = ONCE
3581        AnimationSpeedFactorRange = 2.0 2.0
3582      End
3583  
3584      TransitionState = TRANS_Moving TRANS_MetalDetector_Standing   ;MOVING -> ATTACKING [STANDING]
3585        ShowSubObject = MINED_SKIN
3586        Animation     = UIWRKR_SKL.UIWRKR_TRB1;take out standing
3587        AnimationMode = ONCE
3588      End
3589      TransitionState = TRANS_MetalDetector_Standing TRANS_Moving   ;ATTACKING [STANDING] -> MOVING
3590        ShowSubObject = MINED_SKIN
3591        Animation     = UIWRKR_SKL.UIWRKR_TRC2;put away moving [NEW NON-SKATING ANIMATION]
3592        AnimationMode = ONCE
3593        AnimationSpeedFactorRange = 2.0 2.0
3594      End
3595  
3596      TransitionState = TRANS_Moving TRANS_MetalDetector_Moving     ;MOVING -> MOVING ATTACKING
3597        ShowSubObject = MINED_SKIN
3598        Animation     = UIWRKR_SKL.UIWRKR_TRC1;take out moving [NEW NON-SKATING ANIMATION]
3599        AnimationMode = ONCE
3600        AnimationSpeedFactorRange = 2.0 2.0
3601      End
3602      TransitionState = TRANS_MetalDetector_Moving TRANS_Moving     ;MOVING ATTACKING -> MOVING
3603        ShowSubObject = MINED_SKIN
3604        Animation     = UIWRKR_SKL.UIWRKR_TRC2;put away moving [NEW NON-SKATING ANIMATION]
3605        AnimationMode = ONCE
3606        AnimationSpeedFactorRange = 2.0 2.0
3607      End
3608  
3609  
3610      ConditionState = MOVING CARRYING
3611        ShowSubObject = BOX
3612        Animation = UIWRKR_SKL.UIWRKR_CARY 12
3613        AnimationMode = LOOP
3614        Flags = RANDOMSTART
3615        TransitionKey = TRANS_Carry
3616        ParticleSysBone = None InfantryDustTrails
3617      End
3618      ; it is legal to be ACTIVELY_CONSTRUCTING and MOVING at the same time,
3619      ; since we flip the bit once we get pretty close to the target. but it looks
3620      ; funky to do the construction animation while moving. 
3621      ; so just use the normal move animation in that case.
3622      AliasConditionState = ACTIVELY_CONSTRUCTING MOVING CARRYING
3623  
3624      ConditionState = CARRYING
3625        ShowSubObject = BOX
3626        Animation = UIWRKR_SKL.UIWRKR_CARST 30 
3627        AnimationMode = LOOP
3628        Flags = RANDOMSTART
3629        TransitionKey = TRANS_Carry
3630      End
3631  
3632      ConditionState = DYING
3633        Animation = UIWRKR_SKL.UIWRKR_DTA
3634        AnimationMode = ONCE
3635        TransitionKey = TRANS_Dying
3636      End
3637      AliasConditionState = DYING CARRYING
3638  
3639      TransitionState = TRANS_Dying TRANS_Flailing
3640        Animation = UIWRKR_SKL.UIWRKR_ADTE1
3641        AnimationMode = ONCE
3642      End
3643  
3644      ConditionState = DYING EXPLODED_FLAILING
3645        Animation = UIWRKR_SKL.UIWRKR_ADTE2
3646        AnimationMode = LOOP
3647        TransitionKey = TRANS_Flailing
3648      End
3649  
3650      ConditionState = DYING EXPLODED_BOUNCING
3651        Animation = UIWRKR_SKL.UIWRKR_ADTE3
3652        AnimationMode = ONCE
3653        TransitionKey = None
3654      End
3655  
3656      ConditionState  = SPECIAL_CHEERING
3657        Animation     = UIWRKR_SKL.UIWRKR_CHA
3658        AnimationMode = ONCE
3659      End
3660      
3661      ConditionState  = ACTIVELY_CONSTRUCTING
3662        Animation     = UIWRKR_SKL.UIWRKR_BDA
3663        AnimationMode = LOOP
3664        TransitionKey = TRANS_Constructing
3665      End
3666      AliasConditionState = ACTIVELY_CONSTRUCTING CARRYING
3667  
3668      ; --------------------
3669  
3670      TransitionState = TRANS_Stand TRANS_Carry
3671        ShowSubObject = BOX
3672        Animation     = UIWRKR_SKL.UIWRKR_PIK
3673        AnimationMode = ONCE
3674      End
3675  
3676      TransitionState = TRANS_Carry TRANS_Stand
3677        ShowSubObject = BOX
3678        Animation     = UIWRKR_SKL.UIWRKR_PIK
3679        AnimationMode = ONCE_BACKWARDS
3680        Flags         = START_FRAME_LAST
3681      End
3682      
3683      TransitionState = TRANS_Stand TRANS_Constructing
3684        Animation     = UIWRKR_SKL.UIWRKR_TRA1
3685        AnimationMode = ONCE
3686      End
3687  
3688      TransitionState = TRANS_Constructing TRANS_Stand
3689        Animation     = UIWRKR_SKL.UIWRKR_TRA2
3690        AnimationMode = ONCE
3691      End
3692    End
3693  
3694    ; ***DESIGN parameters ***
3695    DisplayName = OBJECT:Worker
3696    Side = GLA
3697    EditorSorting = INFANTRY
3698    TransportSlotCount = 1                 ;how many "slots" we take in a transport (0 == not transportable)
3699  
3700  
3701    WeaponSet
3702      Conditions = None 
3703      Weapon = PRIMARY None
3704    End
3705    WeaponSet
3706      Conditions = MINE_CLEARING_DETAIL 
3707      Weapon = PRIMARY WorkerMineDisarmingWeapon
3708    End
3709  
3710  
3711    ArmorSet
3712      Conditions      = None
3713      Armor           = HumanArmor
3714      DamageFX        = InfantryDamageFX
3715    End
3716    VisionRange = 100
3717    ShroudClearingRange = 200
3718   ;Prerequisites
3719   ;  Object = GLABarracks GLASupplyStash ;commented out, or else you can't build from Con Yard as Dozer.
3720   ;End
3721    BuildCost = 200
3722    BuildTime = 3.0          ;in seconds    
3723    CrushableLevel         = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
3724    CommandSet = GLAWorkerCommandSet
3725  
3726    ; *** AUDIO Parameters ***
3727    VoiceSelect = WorkerVoiceSelect
3728    VoiceMove = WorkerVoiceMove
3729    VoiceAttack = WorkerVoiceMove
3730    VoiceGuard = WorkerVoiceMove
3731    VoiceFear = WorkerVoiceFear
3732    VoiceTaskComplete = WorkerVoiceBuildComplete
3733    UnitSpecificSounds
3734      VoiceEnter        = WorkerVoiceMoveUpgraded
3735      VoiceEnterHostile = WorkerVoiceMoveUpgraded
3736      VoiceGarrison     = WorkerVoiceGarrison
3737      VoiceCreate       = WorkerVoiceCreate
3738      VoiceSupply       = WorkerVoiceSupply
3739      VoiceNoBuild      = WorkerVoiceBuildNot
3740      VoiceRepair       = WorkerVoiceRepair
3741      VoiceDisarm       = WorkerVoiceClearMine
3742      VoiceBuildResponse = WorkerVoiceBuild
3743      VoiceGetHealed    = WorkerVoiceMoveUpgraded
3744      VoiceMoveUpgraded = WorkerVoiceMoveUpgraded
3745    End
3746  
3747    ; *** ENGINEERING Parameters ***
3748    RadarPriority = UNIT
3749    KindOf = PRELOAD SELECTABLE CAN_CAST_REFLECTIONS INFANTRY SALVAGER DOZER HARVESTER SCORE
3750  
3751    Body = ActiveBody ModuleTag_02
3752      MaxHealth       = 100.0
3753      InitialHealth   = 100.0
3754    End
3755  
3756    Behavior = WorkerAIUpdate ModuleTag_03
3757      RepairHealthPercentPerSecond  = 2%    ; % of max health to repair each second
3758      BoredTime                     = 5000  ; in milliseconds
3759      BoredRange                    = 150   ; when bored, we look this far away to do something 
3760      MaxBoxes                      = 1
3761      UpgradedSupplyBoost           = 8 ; gives this much more cash for every box collected
3762      SupplyCenterActionDelay       = 150 ;400 ; ms for whole thing (one transaction)
3763      SupplyWarehouseActionDelay    = 150 ;400 ;ms per box (many small transactions)
3764      SupplyWarehouseScanDistance   = 700 ;350 ; Max distance to look for a warehouse, or we go home.  (Direct dock command on warehouse overrides, and no max on Center Scan)
3765      SuppliesDepletedVoice = WorkerVoiceSuppliesDepleted
3766      ; the only "enemies" that workers can acquire are mines, to be disarmed...
3767      AutoAcquireEnemiesWhenIdle    = Yes
3768    End
3769    Locomotor = SET_NORMAL FastHumanLocomotor
3770    Locomotor = SET_NORMAL_UPGRADED WorkerShoesLocomotor
3771    Behavior = PhysicsBehavior ModuleTag_04
3772      Mass = 5.0
3773    End
3774   
3775    Behavior = SquishCollide ModuleTag_06
3776      ;nothing
3777    End
3778    Behavior = LocomotorSetUpgrade ModuleTag_07
3779      TriggeredBy = Upgrade_GLAWorkerShoes
3780    End
3781  
3782  ; --- begin Death modules ---
3783    Behavior = SlowDeathBehavior ModuleTag_Death01
3784      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
3785      SinkDelay           = 3000
3786      SinkRate            = 0.5     ; in Dist/Sec
3787      DestructionDelay    = 8000
3788      FX                  = INITIAL FX_WorkerDie
3789    End
3790    Behavior = SlowDeathBehavior ModuleTag_Death02
3791      DeathTypes          = NONE +CRUSHED +SPLATTED
3792      SinkDelay           = 3000
3793      SinkRate            = 0.5     ; in Dist/Sec
3794      DestructionDelay    = 8000
3795      FX                  = INITIAL FX_GIDieCrushed
3796    End
3797    Behavior = SlowDeathBehavior ModuleTag_Death03
3798      DeathTypes          = NONE +EXPLODED
3799      SinkDelay           = 3000
3800      SinkRate            = 0.5     ; in Dist/Sec
3801      DestructionDelay    = 8000
3802      FX                  = INITIAL FX_WorkerDie
3803      FlingForce          = 8
3804      FlingForceVariance  = 3
3805      FlingPitch          = 60
3806      FlingPitchVariance  = 10
3807    End
3808    Behavior = SlowDeathBehavior ModuleTag_Death04
3809      DeathTypes          = NONE +BURNED
3810      DestructionDelay    = 0
3811      FX                  = INITIAL FX_DieByFireGLA
3812      OCL                 = INITIAL OCL_FlamingInfantry
3813    End
3814    Behavior = SlowDeathBehavior ModuleTag_Death05
3815      DeathTypes          = NONE +POISONED
3816      DestructionDelay    = 0
3817      FX                  = INITIAL FX_DieByToxinGLA
3818      OCL                 = INITIAL OCL_ToxicInfantry
3819    End
3820    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
3821      DeathTypes          = NONE +POISONED_BETA
3822      DestructionDelay    = 0
3823      FX                  = INITIAL FX_DieByToxinGLA
3824      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
3825    End
3826    Behavior = SlowDeathBehavior ModuleTag_Death07
3827      DeathTypes          = NONE +POISONED_GAMMA
3828      DestructionDelay    = 0
3829      FX                  = INITIAL FX_DieByToxinGLA
3830      OCL                 = INITIAL OCL_ToxicInfantryGamma
3831    End
3832  
3833  ; --- end Death modules ---
3834  
3835    Behavior = StealthDetectorUpdate ModuleTag_12
3836      DetectionRate         = 500   ; how often to rescan for stealthed things in my sight (msec)
3837      ;DetectionRange       = ??? ;Dustin, enable this for independant balancing!
3838      CanDetectWhileGarrisoned  = No ;Garrisoned means being in a structure that you units can shoot out of.
3839      CanDetectWhileContained   = No ;Contained means being in a transport or tunnel network.
3840      ExtraRequiredKindOf   = MINE  ; we can only detect MINES, not other stealthed things
3841    End
3842  
3843    Behavior = PoisonedBehavior ModuleTag_13
3844      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
3845      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
3846    End
3847  
3848    Behavior = CommandSetUpgrade ModuleTag_14
3849      TriggeredBy = Upgrade_GLAWorkerFakeCommandSet
3850      RemovesUpgrades = Upgrade_GLAWorkerRealCommandSet
3851      CommandSet = GLAWorkerFakeBuildingsCommandSet
3852    End
3853   
3854    Behavior = CommandSetUpgrade ModuleTag_15
3855      TriggeredBy = Upgrade_GLAWorkerRealCommandSet
3856      RemovesUpgrades = Upgrade_GLAWorkerFakeCommandSet Upgrade_GLAWorkerRealCommandSet
3857      CommandSet = GLAWorkerCommandSet
3858    End
3859   
3860    Behavior = ProductionUpdate ModuleTag_16
3861      MaxQueueEntries = 1; For the command set switching upgrade
3862    End
3863  
3864    Geometry = CYLINDER
3865    GeometryMajorRadius = 10.0
3866    GeometryMinorRadius = 10.0
3867    GeometryHeight = 12.0
3868    GeometryIsSmall = Yes
3869    Shadow = SHADOW_DECAL
3870    ShadowSizeX = 14;
3871    ShadowSizeY = 14;
3872    ShadowTexture = ShadowI;
3873    BuildCompletion = APPEARS_AT_RALLY_POINT
3874  
3875  End
3876  
3877  ;------------------------------------------------------------------------------
3878  Object GLAInfantrySaboteur
3879  
3880    ; *** ART Parameters ***
3881    SelectPortrait         = SUSaboteur_L
3882    ButtonImage            = SUSaboteur
3883  
3884    ;UpgradeCameo1 = NONE
3885    ;UpgradeCameo2 = NONE
3886    ;UpgradeCameo3 = NONE
3887    ;UpgradeCameo4 = NONE
3888    ;UpgradeCameo5 = NONE
3889  
3890    Draw = W3DModelDraw ModuleTag_01
3891  
3892      OkToChangeModelColor = Yes
3893      
3894      ; this says "we don't use these condition states at all, so completely
3895      ; ignore them for purposes of matchmaking"... this is useful to help
3896      ; reduce the number of AliasConditionState clauses you must add in
3897      ; order to avoid ambiguity in some cases.
3898      IgnoreConditionStates = PREATTACK_A FIRING_A BETWEEN_FIRING_SHOTS_A RELOADING_A
3899  
3900      ; ---- standing
3901      DefaultConditionState
3902        Model = UISabotr_SKN
3903        IdleAnimation = UIWRKR_SKL.UIWRKR_STA 0 9
3904        IdleAnimation = UIWRKR_SKL.UIWRKR_IDA
3905        AnimationMode = ONCE
3906        TransitionKey = TRANS_Stand
3907      End
3908  
3909      ConditionState  = MOVING
3910        Animation     = UIWRKR_SKL.UIWRKR_RNA 16
3911        AnimationMode = LOOP
3912        Flags         = RANDOMSTART
3913        TransitionKey = TRANS_Moving
3914        ParticleSysBone = None InfantryDustTrails
3915      End
3916  
3917      ConditionState = DYING
3918        Animation = UIWRKR_SKL.UIWRKR_DTA
3919        AnimationMode = ONCE
3920        TransitionKey = TRANS_Dying
3921      End
3922  
3923      TransitionState = TRANS_Dying TRANS_Flailing
3924        Animation = UIWRKR_SKL.UIWRKR_ADTE1
3925        AnimationMode = ONCE
3926      End
3927  
3928      ConditionState = DYING EXPLODED_FLAILING
3929        Animation = UIWRKR_SKL.UIWRKR_ADTE2
3930        AnimationMode = LOOP
3931        TransitionKey = TRANS_Flailing
3932      End
3933  
3934      ConditionState = DYING EXPLODED_BOUNCING
3935        Animation = UIWRKR_SKL.UIWRKR_ADTE3
3936        AnimationMode = ONCE
3937        TransitionKey = None
3938      End
3939  
3940      ConditionState  = SPECIAL_CHEERING
3941        Animation     = UIWRKR_SKL.UIWRKR_CHA
3942        AnimationMode = ONCE
3943      End
3944      
3945    End
3946  
3947    ; ***DESIGN parameters ***
3948    DisplayName         = OBJECT:Saboteur
3949    Side                = GLA
3950    EditorSorting       = INFANTRY
3951    TransportSlotCount  = 1                 ;how many "slots" we take in a transport (0 == not transportable)
3952   
3953    ArmorSet
3954      Conditions      = None
3955      Armor           = HumanArmor
3956      DamageFX        = InfantryDamageFX
3957    End
3958    VisionRange         = 150
3959    ShroudClearingRange = 300
3960    Prerequisites
3961      Object = GLAPalace
3962    End
3963    BuildCost = 800
3964    BuildTime = 15.0          ;in seconds  
3965  
3966    ExperienceValue     = 15 15 30 40     ;Experience point value at each level
3967    IsTrainable         = No             ;Can gain experience
3968    CrushableLevel      = 0  ;What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
3969    CommandSet          = GLAInfantrySaboteurCommandSet
3970  
3971    ; *** AUDIO Parameters ***
3972    VoiceSelect = SaboteurVoiceSelect
3973    VoiceMove = SaboteurVoiceMove
3974    VoiceGuard = SaboteurVoiceMove
3975    VoiceAttack = SaboteurVoiceAttack
3976    SoundStealthOn = StealthOn
3977    SoundStealthOff = StealthOff
3978    VoiceFear = SaboteurVoiceFear
3979    VoiceTaskComplete = NoSound
3980    UnitSpecificSounds
3981      VoiceCreate = SaboteurVoiceCreate
3982      VoiceSubdue = SaboteurVoiceMove
3983      VoiceGarrison = SaboteurVoiceMove
3984      VoiceEnter = SaboteurVoiceMove
3985      VoiceEnterHostile = SaboteurVoiceAttack
3986      VoiceGetHealed      = SaboteurVoiceMove
3987    End
3988  
3989    ; *** ENGINEERING Parameters ***
3990    RadarPriority = UNIT
3991    KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SALVAGER SCORE 
3992  
3993    Body = ActiveBody ModuleTag_02
3994      MaxHealth       = 120.0
3995      InitialHealth   = 120.0
3996    End
3997  
3998    Behavior = AIUpdateInterface ModuleTag_03
3999      AutoAcquireEnemiesWhenIdle = Yes
4000    End
4001  
4002    Behavior = CommandButtonHuntUpdate  ModuleTag_04 ; allows use of command button hunt script with this unit. 
4003    End
4004  
4005    Locomotor = SET_NORMAL SaboteurGroundLocomotor SaboteurCliffLocomotor
4006  
4007    Behavior = PhysicsBehavior ModuleTag_05
4008      Mass = 5.0
4009    End
4010    Behavior = StealthUpdate ModuleTag_07
4011      StealthDelay                = 2500 ; msec
4012      StealthForbiddenConditions  = None
4013      InnateStealth               = Yes ;Requires upgrade first
4014      OrderIdleEnemiesToAttackMeUponReveal  = Yes
4015    End
4016  
4017    Behavior = SquishCollide ModuleTag_11
4018      ;nothing
4019    End
4020  
4021    Behavior = SabotagePowerPlantCrateCollide       SabotageTag_01
4022      BuildingPickup = Yes
4023      SabotagePowerDuration = 30000
4024    End
4025    ;Behavior = SabotageSupplyDropzoneCrateCollide   SabotageTag_02
4026    ;  BuildingPickup  = Yes
4027    ;  StealCashAmount = 800
4028    ;End
4029    Behavior = SabotageSuperweaponCrateCollide      SabotageTag_03
4030      BuildingPickup = Yes
4031    End
4032    Behavior = SabotageCommandCenterCrateCollide    SabotageTag_04
4033      BuildingPickup = Yes
4034    End
4035    Behavior = SabotageSupplyCenterCrateCollide     SabotageTag_05
4036      BuildingPickup  = Yes
4037      StealCashAmount = 1000
4038    End
4039    Behavior = SabotageMilitaryFactoryCrateCollide  SabotageTag_06
4040      BuildingPickup = Yes
4041      SabotageDuration = 30000
4042    End
4043    Behavior = SabotageFakeBuildingCrateCollide     SabotageTag_07
4044      BuildingPickup = Yes
4045    End
4046    Behavior = SabotageInternetCenterCrateCollide   SabotageTag_08
4047      BuildingPickup = Yes
4048      SabotageDuration = 15000
4049    End
4050  
4051  ; --- begin Death modules ---
4052    Behavior = SlowDeathBehavior ModuleTag_Death01
4053      DeathTypes          = ALL -CRUSHED -SPLATTED -EXPLODED -BURNED -POISONED -POISONED_BETA -POISONED_GAMMA
4054      SinkDelay           = 3000
4055      SinkRate            = 0.5     ; in Dist/Sec
4056      DestructionDelay    = 8000
4057      FX                  = INITIAL FX_SaboteurDie
4058    End
4059    Behavior = SlowDeathBehavior ModuleTag_Death02
4060      DeathTypes          = NONE +CRUSHED +SPLATTED
4061      SinkDelay           = 3000
4062      SinkRate            = 0.5     ; in Dist/Sec
4063      DestructionDelay    = 8000
4064      FX                  = INITIAL FX_GIDieCrushed
4065    End
4066    Behavior = SlowDeathBehavior ModuleTag_Death03
4067      DeathTypes          = NONE +EXPLODED
4068      SinkDelay           = 3000
4069      SinkRate            = 0.5     ; in Dist/Sec
4070      DestructionDelay    = 8000
4071      FX                  = INITIAL FX_SaboteurDie
4072      FlingForce          = 8
4073      FlingForceVariance  = 3
4074      FlingPitch          = 60
4075      FlingPitchVariance  = 10
4076    End
4077    Behavior = SlowDeathBehavior ModuleTag_Death04
4078      DeathTypes          = NONE +BURNED
4079      DestructionDelay    = 0
4080      FX                  = INITIAL FX_DieByFireGLA
4081      OCL                 = INITIAL OCL_FlamingInfantry
4082    End
4083    Behavior = SlowDeathBehavior ModuleTag_Death05
4084      DeathTypes          = NONE +POISONED
4085      DestructionDelay    = 0
4086      FX                  = INITIAL FX_DieByToxinGLA
4087      OCL                 = INITIAL OCL_ToxicInfantry
4088    End
4089    Behavior = SlowDeathBehavior ModuleTag_Death06 ; don't forget to give it a new, unique module tag
4090      DeathTypes          = NONE +POISONED_BETA
4091      DestructionDelay    = 0
4092      FX                  = INITIAL FX_DieByToxinGLA
4093      OCL                 = INITIAL OCL_ToxicInfantryBeta ;you'll have to create this OCL and make it use the blue guys instead of green ones
4094    End
4095    Behavior = SlowDeathBehavior ModuleTag_Death07
4096      DeathTypes          = NONE +POISONED_GAMMA
4097      DestructionDelay    = 0
4098      FX                  = INITIAL FX_DieByToxinGLA
4099      OCL                 = INITIAL OCL_ToxicInfantryGamma
4100    End
4101  
4102  ; --- end Death modules ---
4103  
4104    Behavior = PoisonedBehavior ModuleTag_16
4105      PoisonDamageInterval = 100  ; Every this many msec I will retake the poison damage dealt me...
4106      PoisonDuration = 3000       ; ... for this long after last hit by poison damage
4107    End
4108  
4109  ;  Behavior = SpecialAbility ModuleTag_17
4110  ;    SpecialPowerTemplate      = SpecialAbilityRebelCaptureBuilding
4111  ;    UpdateModuleStartsAttack  = Yes
4112  ;    StartsPaused              = Yes
4113  ;    InitiateSound         = RebelVoiceCapture
4114  ;  End
4115  ;  Behavior = SpecialAbilityUpdate ModuleTag_18
4116  ;    SpecialPowerTemplate  = SpecialAbilityRebelCaptureBuilding
4117  ;    StartAbilityRange  = 5.0
4118  ;    UnpackTime            = 3000  ; (changing this will scale anim speed)
4119  ;    PreparationTime       = 20000 ; time to complete hack once prepared (changing this will scale anim speed)
4120  ;    PackTime              = 2000  ; (changing this will scale anim speed)
4121  ;    DoCaptureFX           = Yes
4122  ;    AwardXPForTriggering  = 12
4123  ;    ;SkillPointsForTriggering = ???  -- Dustin, fill me out if you want different balance values.
4124  ;  End
4125  
4126    Geometry = CYLINDER
4127    GeometryMajorRadius = 10.0
4128    GeometryMinorRadius = 10.0
4129    GeometryHeight = 12.0
4130    GeometryIsSmall = Yes
4131    Shadow = SHADOW_DECAL
4132    ShadowSizeX = 14;
4133    ShadowSizeY = 14;
4134    ShadowTexture = ShadowI;
4135    BuildCompletion = APPEARS_AT_RALLY_POINT
4136  
4137  End
4138  


Generated: Sat Mar 28 08:18:23 2009 Cross-referenced by PHPXref 0.7