home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 April / Gamestar_83_2006-04_dvd.iso / Dema / lotrbfme2_demo.exe / INI.big / data_ini_object_goodfaction_hordes_men_menhordes.ini < prev    next >
Text File  |  2006-01-31  |  83KB  |  2,199 lines

  1. //------------------------------------------------------------------------------
  2. //
  3. //    WestHordes.ini
  4. //
  5. //------------------------------------------------------------------------------
  6. Object GondorFighterHorde
  7.  
  8.     // This is required for garrisoned objects - please put in all objects.
  9.     ButtonImage        = WOR_GondorSoldier
  10.     SelectPortrait        = UPGondor_Soldier
  11.  
  12.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  13.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER EMOTION_TERROR EMOTION_LOOK_TO_SKY EMOTION_TAUNTING EMOTION_POINTING SELECTED
  14.         DefaultModelConditionState
  15.             Model = None //InvisHrdeTmp5x2
  16.         End
  17.  
  18.         ModelConditionState = HORDE_EMPTY
  19.             Model = None
  20.         End        
  21.         
  22.         ModelConditionState = WORLD_BUILDER
  23.             Model = HordeMarkGUSol
  24.         End        
  25.     End
  26.     
  27.     Side = Men
  28.     EditorSorting = UNIT
  29.     EmotionRange = 240
  30.     DisplayName = OBJECT:HordeGondorSoldier
  31.     DisplayNameStrategic = CONTROLBAR:LW_Unit_GondorFighterHorde
  32.     DescriptionStrategic = CONTROLBAR:LW_ToolTip_GondorFighterHorde
  33.     
  34.     WeaponSet
  35.         Conditions = None 
  36.         Weapon = PRIMARY    NormalMeleeHordeRangefinder
  37.     End
  38.  
  39.     // *** AUDIO Parameters ***//
  40.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  41.     // are always passed through to members
  42.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  43.  
  44.     UnitSpecificSounds
  45.         VoiceDesperateAttack  = GondorSoldierVoiceDesperateCharge 
  46.     End
  47.  
  48.     BuildCost = GONDOR_SOLDIER_BUILDCOST
  49.     BuildTime = GONDOR_SOLDIER_BUILDTIME
  50.     ShroudClearingRange = GONDOR_SOLDIER_HORDE_SHROUD_RANGE       
  51.     VisionRange = GONDOR_SOLDIER_HORDE_VISION_RANGE
  52.     VisionSide = 50%
  53.     VisionRear = 25%
  54.     MaxVisionBonusPercent = 300%
  55.     VisionBonusTestRadius = 200
  56.     VisionBonusPercentPerFoot = 1.0%
  57.     CommandPoints = 60
  58.     
  59.     FormationWidth = 2 // Width it occupies in formations. Current choices are 1 or 2.
  60.     FormationDepth = 1 // Depth it occupies in formations. Current choices are 1 or 2.
  61.     
  62.      CrushableLevel = 0  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  63.     CrusherLevel = 0
  64.      
  65.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  66.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE MELEE_HORDE NOTIFY_OF_PREATTACK ARMY_SUMMARY LARGE_RECTANGLE_PATHFIND //UNATTACKABLE 
  67.  
  68.     ThreatLevel = GONDOR_FIGHTER_HORDE_THREAT
  69.     ThreatBreakdown GondorFighterHorde_DetailedThreat
  70.         AIKindOf = INFANTRY
  71.     End
  72.     
  73.     Body = ImmortalBody ModuleTag_ImmortalBody
  74.         MaxHealth = 1
  75.     End
  76.  
  77.     #include "..\..\..\includes\CaptureBuilding.inc"
  78.     
  79.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  80.         StanceTemplate = FighterHorde
  81.     End
  82.     
  83.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  84.         AutoAcquireEnemiesWhenIdle    = Yes ATTACK_BUILDINGS
  85.         MoodAttackCheckRate            = 500
  86.         MaxCowerTime                = 5000
  87.         MinCowerTime                = 3000
  88.         AILuaEventsList                = InfantryFunctions
  89.         AttackPriority                = AttackPriority_Infantry
  90.     End
  91.  
  92.     Behavior = HordeContain ModuleTag_HordeContain
  93.         FrontAngle = 270
  94.         FlankedDelay = 2000
  95.         ObjectStatusOfContained = 
  96.         InitialPayload = GondorFighter GOOD_MEN_GIANT_HORDE_SIZE
  97.         Slots = 15
  98.         PassengerFilter    = NONE +INFANTRY
  99.         ShowPips = No
  100.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  101.         RandomOffset=X:0 Y:0
  102.         MeleeBehavior = Amoeba
  103.         End
  104.  
  105.         // Banner Carrier info        
  106.         BannerCarriersAllowed    = GondorInfantryBanner                                        // types of units that are allowed as banner carriers
  107.         BannerCarrierPosition    = UnitType:GondorFighter    Pos:X:70.0 Y:0.0        // (DEFAULT) position of banner carrier
  108.         
  109.         RankInfo = RankNumber:1 UnitType:GondorFighter Position:X:50 Y:0            Position:X:50 Y:20                Position:X:50 Y:-20                Position:X:50 Y:40                Position:X:50 Y:-40 
  110.         RankInfo = RankNumber:2 UnitType:GondorFighter Position:X:30 Y:0 Leader 1 0    Position:X:30 Y:20 Leader 1 1    Position:X:30 Y:-20 Leader 1 2    Position:X:30 Y:40 Leader 1 3    Position:X:30 Y:-40 Leader 1 4
  111.         RankInfo = RankNumber:3 UnitType:GondorFighter Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:20 Leader 2 1    Position:X:10 Y:-20 Leader 2 2    Position:X:10 Y:40 Leader 2 3    Position:X:10 Y:-40 Leader 2 4
  112.         
  113.         RanksToReleaseWhenAttacking = 1 
  114.  
  115.         AlternateFormation = GondorFighterHordeBlock
  116.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  117.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  118.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  119.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  120.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  121.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  122.     End
  123.  
  124.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  125.         GravityMult = 1.0
  126.     End
  127.     
  128.     Behavior = CommandButtonHuntUpdate ModuleTag_CommandButtonHuntUpdate
  129.     End
  130.   
  131.        Behavior = EmotionTrackerUpdate    Module_EmotionTracker
  132.         TauntAndPointDistance     = INFANTRY_TAUNT_POINT_RADIUS       // max distance to taunted/pointed objet
  133.         TauntAndPointUpdateDelay = 1000           // how often    scan (milliseconds)
  134.         TauntAndPointExcluded     = NONE
  135.         AfraidOf                 = EMOTION_AFRAIDOF_OBJECTFILTER
  136.         AlwaysAfraidOf             = EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER
  137.         PointAt                     = EMOTION_POINTAT_OBJECTFILTER
  138.         HeroScanDistance         = 150
  139.         FearScanDistance         = INFANTRY_FEAR_SCAN_RADIUS
  140.  
  141.         AddEmotion            =    Terror_Base
  142.         AddEmotion            =    Doom_Base                //OVERRIDE
  143.             //StartFXList        =    FX_GondorSoldierDoom            //these have been hooked up in the FXList.INI
  144.             //End
  145.  
  146.         AddEmotion            =   BraceForBeingCrushed_Base
  147.         
  148.         AddEmotion            =    UncontrollableFear_Base            //OVERRIDE
  149.             //StartFXList        =    FX_GondorSoldierFear
  150.             //End
  151.         
  152.         AddEmotion            =    FearIdle_Base                //OVERRIDE
  153.             //StartFXList        =    FX_GondorSoldierFear
  154.             //End
  155.         
  156.         AddEmotion            =    FearBusy_Base                //OVERRIDE
  157.             //StartFXList        =    FX_GondorSoldierFear
  158.             //End
  159.     
  160.         AddEmotion            =    Point_Base                //OVERRIDE
  161.             //Duration        =    13980
  162.             //StartFXList        =    FX_GondorSoldierPoint
  163.             //End
  164.         
  165.         AddEmotion            =    Taunt_Base                //OVERRIDE
  166.              //AttributeModifier    =    GondorFighterTaunt
  167.              //End        
  168.          
  169.          AddEmotion            =    CheerIdle_Base
  170.         AddEmotion            =    CheerBusy_Base
  171.         AddEmotion            =    HeroCheerIdle_Base
  172.         AddEmotion            =    HeroCheerBusy_Base
  173.         AddEmotion            =    Alert_Base
  174.     End
  175.     
  176.     Behavior = PickupStuffUpdate ModuleTag_PickupStuffUpdate
  177.         SkirmishAIOnly = Yes
  178.         StuffToPickUp = NONE +CRATE
  179.         ScanRange = 200
  180.         ScanIntervalSeconds = 0.5
  181.     End
  182.   
  183.     LocomotorSet
  184.         Locomotor     = NormalMeleeHordeLocomotor
  185.         Condition     = SET_NORMAL
  186.         Speed         = NORMAL_GOOD_FAST_HORDE_SPEED
  187.     End
  188.     
  189.     LocomotorSet
  190.         Locomotor     = ScaredMeleeHordeLocomotor
  191.         Condition     = SET_SCARED
  192.         Speed         = NORMAL_GOOD_FAST_HORDE_SPEED
  193.     End
  194.     
  195.     Behavior = ProductionUpdate ProductionUpdateModuleTag
  196.         GiveNoXP = Yes
  197.     End
  198.  
  199.     Behavior = LevelUpUpgrade ModuleTag_BasicTraining
  200.         TriggeredBy = Upgrade_GondorBasicTraining
  201.         LevelsToGain = 1
  202.         LevelCap = 2
  203.     End
  204.     
  205.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality
  206.         TriggeredBy = Upgrade_GondorForgedBlades
  207.     End
  208.     
  209.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality2
  210.         TriggeredBy = Upgrade_GondorHeavyArmor
  211.     End
  212.     
  213.     
  214.     /////////////////////
  215.     // AISpecialPowers
  216.     /////////////////////
  217.     
  218.     Behavior = AISpecialPowerUpdate GondorFighterHordeCaptureBuildingAI
  219.         CommandButtonName = Command_CaptureBuilding
  220.         SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
  221.     End
  222.     
  223.     Behavior = AISpecialPowerUpdate GondorFighterHordeStanceBattle
  224.         CommandButtonName = Command_SetStanceBattle
  225.         SpecialPowerAIType = AI_SPECIAL_POWER_STANCEBATTLE
  226.     End
  227.  
  228.     Behavior = AISpecialPowerUpdate GondorFighterHordeStanceAggressive
  229.         CommandButtonName = Command_SetStanceAggressive
  230.         SpecialPowerAIType = AI_SPECIAL_POWER_STANCEAGGRESSIVE
  231.     End
  232.  
  233.     Behavior = AISpecialPowerUpdate GondorFighterHordeHoldGround
  234.         CommandButtonName = Command_SetStanceHoldGround
  235.         SpecialPowerAIType = AI_SPECIAL_POWER_STANCEHOLDGROUND
  236.     End
  237.     
  238.     CommandSet = GondorFighterHordeCommandSet
  239.  
  240.     Geometry = BOX
  241.     GeometryMajorRadius = 30.0
  242.     GeometryMinorRadius = 45.0
  243.     GeometryHeight = 20.0
  244.     GeometryIsSmall = No
  245.     
  246.     
  247.     //-------------------------------------------------------------------------------------------------
  248.     // World Map specific data
  249.     //-------------------------------------------------------------------------------------------------
  250.     
  251.     // *** AUTO RESOLVE DATA ***
  252.     AutoResolveUnitType = AutoResolveUnit_Soldier
  253.     AutoResolveCombatChain = AutoResolve_SoldierCombatChain
  254.     
  255.     AutoResolveBody = AutoResolve_GondorFighterHordeBody
  256.  
  257.     AutoResolveArmor
  258.         RequiredUpgrades = Upgrade_GondorHeavyArmor
  259.         Armor = AutoResolve_GondorSoldierHeavyArmor
  260.     End
  261.  
  262.     AutoResolveArmor
  263.         ExcludedUpgrades = Upgrade_GondorHeavyArmor
  264.         Armor = AutoResolve_GondorSoldierArmor
  265.     End
  266.  
  267.     AutoResolveWeapon
  268.         RequiredUpgrades = Upgrade_GondorForgedBlades
  269.         Weapon = AutoResolve_GondorSoldierUpgradedWeapon
  270.     End
  271.  
  272.     AutoResolveWeapon
  273.         ExcludedUpgrades = Upgrade_GondorForgedBlades
  274.         Weapon = AutoResolve_GondorSoldierWeapon
  275.     End
  276.  
  277.     WorldMapArmoryUpgradesAllowed = Upgrade_GondorBasicTraining Upgrade_GondorForgedBlades Upgrade_GondorHeavyArmor
  278. End
  279.  
  280. ChildObject GondorFighterHorde_Summoned GondorFighterHorde
  281.     IsTrainable      =    No
  282.     CommandPoints =    0
  283.     CommandSet      =    GondorFighterHordeCommandSet_Summoned
  284.     EquivalentTo  =    GondorFighterHorde
  285.  
  286.     DisplayName  =  OBJECT:HordeGondorSoldier
  287.  
  288.     Behavior = HordeContain ModuleTag_HordeContain
  289.         FrontAngle = 270
  290.         FlankedDelay = 2000
  291.         ObjectStatusOfContained = 
  292.         InitialPayload = GondorFighter_Summoned GOOD_MEN_GIANT_HORDE_SIZE
  293.         Slots = 15
  294.         PassengerFilter    = NONE +INFANTRY
  295.         ShowPips = No
  296.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  297.         RandomOffset=X:0 Y:0
  298.         MeleeBehavior = Amoeba
  299.         End
  300.  
  301.         RankInfo = RankNumber:1 UnitType:GondorFighter Position:X:50 Y:0            Position:X:50 Y:20                Position:X:50 Y:-20                Position:X:50 Y:40                Position:X:50 Y:-40 
  302.         RankInfo = RankNumber:2 UnitType:GondorFighter Position:X:30 Y:0 Leader 1 0    Position:X:30 Y:20 Leader 1 1    Position:X:30 Y:-20 Leader 1 2    Position:X:30 Y:40 Leader 1 3    Position:X:30 Y:-40 Leader 1 4
  303.         RankInfo = RankNumber:3 UnitType:GondorFighter Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:20 Leader 2 1    Position:X:10 Y:-20 Leader 2 2    Position:X:10 Y:40 Leader 2 3    Position:X:10 Y:-40 Leader 2 4
  304.         
  305.         RanksToReleaseWhenAttacking = 1 
  306.  
  307.         AlternateFormation = GondorFighterHordeBlock
  308.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  309.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  310.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  311.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  312.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  313.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  314.     End
  315.     
  316.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  317.     // This one displays the timer, but the one in the uint does the work 
  318.         MinLifetime        = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  319.         MaxLifetime        = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  320.         DeathType        = FADED
  321.     End    
  322.  
  323. End
  324.  
  325. //------------------------------------------------------------------------------
  326. ChildObject GondorFighterHordeBlock GondorFighterHorde
  327.  
  328.     // Note - for alternate formations, all info outside of the Contain Behavior module is ignored.
  329.     // Any modifications need to be done via the Attribute Modifiers in the contain module. 
  330.     Behavior = HordeContain ModuleTag_HordeContain
  331.         FrontAngle                        = 270
  332.         FlankedDelay                    = 2000
  333.         ObjectStatusOfContained            = 
  334.         InitialPayload                    = GondorFighter GOOD_MEN_GIANT_HORDE_SIZE
  335.         Slots                            = 15
  336.         PassengerFilter                    = NONE +INFANTRY
  337.         ShowPips                        = No
  338.         ThisFormationIsTheMainFormation = No    //Used to determine which armorset to use (and anything else we want!)
  339.         AttributeModifiers                = GondorFighterBlock
  340.         RandomOffset                    = X:0 Y:0
  341.         MeleeBehavior = Amoeba
  342.         End
  343.         
  344.         // Banner Carrier info        
  345.         BannerCarriersAllowed    = GondorInfantryBanner                                        // types of units that are allowed as banner carriers
  346.         BannerCarrierPosition    = UnitType:GondorFighter    Pos:X:46.0 Y:0.0        // (DEFAULT) position of banner carrier
  347.         
  348.         RankInfo = RankNumber:1 UnitType:GondorFighter Position:X:34 Y:0            Position:X:34 Y:10                Position:X:34 Y:-10                Position:X:34 Y:20                Position:X:34 Y:-20
  349.         RankInfo = RankNumber:2 UnitType:GondorFighter Position:X:22 Y:0 Leader 1 0    Position:X:22 Y:10 Leader 1 1    Position:X:22 Y:-10 Leader 1 2    Position:X:22 Y:20 Leader 1 3    Position:X:22 Y:-20 Leader 1 4
  350.         RankInfo = RankNumber:3 UnitType:GondorFighter Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:10 Leader 2 1    Position:X:10 Y:-10 Leader 2 2    Position:X:10 Y:20 Leader 2 3    Position:X:10 Y:-20 Leader 2 4
  351.         
  352.         RanksToReleaseWhenAttacking = 1
  353.                 
  354.         AlternateFormation = GondorFighterHorde
  355.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  356.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  357.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  358.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  359.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  360.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.        
  361.     End
  362. End
  363.  
  364. //------------------------------------------------------------------------------
  365. Object GondorTowerShieldGuardHorde
  366.  
  367.     // This is required for garrisoned objects - please put in all objects.
  368.     ButtonImage        = WOR_GondorTowerGuard
  369.     SelectPortrait    = UPGondor_TowerGuard
  370.  
  371.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  372.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR EMOTION_LOOK_TO_SKY
  373.         DefaultModelConditionState
  374.             Model = None //InvisHrdeTmp5x2
  375.         End
  376.         ModelConditionState = HORDE_EMPTY
  377.             Model = None
  378.         End        
  379.         
  380.         ModelConditionState = WORLD_BUILDER
  381.             Model = HordeMarkGUTow
  382.         End
  383.     End
  384.     
  385.     Side = Men
  386.     EditorSorting = UNIT
  387.     EmotionRange = 240
  388.     DisplayName = OBJECT:HordeGondorTowerGuard
  389.     DisplayNameStrategic = CONTROLBAR:LW_Unit_GondorTowerGuardHorde
  390.     DescriptionStrategic = CONTROLBAR:LW_ToolTip_GondorTowerGuardHorde
  391.     
  392.     WeaponSet
  393.         Conditions = None 
  394.         Weapon = PRIMARY    TowerGuardHordeRangefinder
  395.     End
  396.  
  397.     // *** AUDIO Parameters ***//
  398.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  399.     // are always passed through to members
  400.  
  401.  
  402.     BuildCost = GONDOR_TOWERGUARD_BUILDCOST
  403.     BuildTime = GONDOR_TOWERGUARD_BUILDTIME
  404.     VisionRange = GONDOR_TOWERGUARD_HORDE_VISION_RANGE
  405.     ShroudClearingRange = GONDOR_TOWERGUARD_HORDE_SHROUD_RANGE
  406.     VisionSide = 50%
  407.     VisionRear = 25%
  408.     MaxVisionBonusPercent = 300%
  409.     VisionBonusTestRadius = 200
  410.     VisionBonusPercentPerFoot = 1.0%
  411.     CommandPoints = 60
  412.     
  413.     CommandSet = GondorTowerShieldGuardCommandSet
  414.         
  415.     FormationWidth = 2 // Width it occupies in formations. Current choices are 1 or 2.
  416.     FormationDepth = 1 // Depth it occupies in formations. Current choices are 1 or 2.
  417.     
  418.      CrushableLevel = 0  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  419.     CrusherLevel = 0
  420.  
  421.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  422.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE ARMY_SUMMARY MELEE_HORDE PIKE LARGE_RECTANGLE_PATHFIND
  423.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  424.     
  425.     Body = ImmortalBody ModuleTag_ImmortalBody
  426.         MaxHealth = 1
  427.     End
  428.  
  429.     ThreatLevel = GONDOR_TOWERSHIELDGUARD_HORDE_THREAT
  430.     ThreatBreakdown GondorTowerShieldGuardHorde_DetailedThreat
  431.         AIKindOf = PIKEMAN
  432.     End
  433.     
  434.     #include "..\..\..\includes\CaptureBuilding.inc"
  435.     
  436.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  437.         StanceTemplate = PikeHorde
  438.     End
  439.         
  440.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  441.         AutoAcquireEnemiesWhenIdle    =    Yes ATTACK_BUILDINGS
  442.         MoodAttackCheckRate            =    500
  443.         MaxCowerTime                =    5000
  444.         MinCowerTime                =    3000
  445.         AILuaEventsList                =    InfantryFunctions
  446.         AttackPriority                =     AttackPriority_Spearman
  447.     End
  448.     
  449.     Behavior = HordeContain ModuleTag_HordeContain
  450.         FrontAngle = 180
  451.         FlankedDelay = 4000
  452.         ObjectStatusOfContained = 
  453.         InitialPayload = GondorTowerShieldGuard GOOD_MEN_GIANT_HORDE_SIZE
  454.         Slots = 15
  455.         PassengerFilter    = NONE +INFANTRY
  456.         ShowPips = No
  457.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  458.         RandomOffset=X:0 Y:0
  459.         MeleeBehavior = Amoeba
  460.             FacingBonus            =    30.0
  461.             AngleLimitCos        =    -0.17
  462.             InnerRange            =    30
  463.             OuterRange            =    80
  464.             OuterRangeBuildings    =    140
  465.         End
  466.  
  467.         // Banner Carrier info        
  468.         BannerCarriersAllowed    = GondorInfantryBanner                                        // types of units that are allowed as banner carriers
  469.         BannerCarrierPosition    = UnitType:GondorFighter    Pos:X:70.0 Y:0.0        // (DEFAULT) position of banner carrier
  470.         
  471.         RankInfo = RankNumber:1 UnitType:GondorTowerShieldGuard Position:X:50 Y:0        Position:X:50 Y:20        Position:X:50 Y:-20        Position:X:50 Y:40        Position:X:50 Y:-40 
  472.         RankInfo = RankNumber:2 UnitType:GondorTowerShieldGuard Position:X:30 Y:0 Leader 1 0    Position:X:30 Y:20 Leader 1 1    Position:X:30 Y:-20 Leader 1 2    Position:X:30 Y:40 Leader 1 3    Position:X:30 Y:-40 Leader 1 4
  473.         RankInfo = RankNumber:3 UnitType:GondorTowerShieldGuard Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:20 Leader 2 1    Position:X:10 Y:-20 Leader 2 2    Position:X:10 Y:40 Leader 2 3    Position:X:10 Y:-40 Leader 2 4
  474.         
  475.         RanksToReleaseWhenAttacking = 1 
  476.  
  477.         AlternateFormation = GondorTowerShieldGuardHordePorcupine
  478.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  479.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  480.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  481.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  482.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  483.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  484.     End
  485.  
  486.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  487.         GravityMult = 1.0
  488.     End
  489.     
  490.        Behavior = EmotionTrackerUpdate    Module_EmotionTracker
  491.         TauntAndPointDistance        =    INFANTRY_TAUNT_POINT_RADIUS        // max distance to taunted/pointed objet
  492.         TauntAndPointUpdateDelay    =    1000    // how often scan (milliseconds)
  493.         TauntAndPointExcluded        =    NONE
  494.          AfraidOf                    =    EMOTION_AFRAIDOF_OBJECTFILTER
  495.         AlwaysAfraidOf                =    EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER
  496.          PointAt                        =    EMOTION_POINTAT_OBJECTFILTER
  497.         HeroScanDistance            =    150
  498.         FearScanDistance            =    INFANTRY_FEAR_SCAN_RADIUS
  499.  
  500.         AddEmotion            =    Terror_Base
  501.         AddEmotion            =    Doom_Base
  502.         //    AddEmotion            =   BraceForBeingCrushed_Base        // Pikemen don't fear getting crushed
  503.         AddEmotion            =    UncontrollableFear_Base
  504.         AddEmotion            =    FearIdle_Base
  505.         AddEmotion            =    FearBusy_Base
  506.         AddEmotion            =    Point_Base
  507.         
  508.         AddEmotion            =    OVERRIDE Taunt_Base    
  509.          //    AttributeModifier    =    GondorFighterTaunt
  510.          End        
  511.          
  512.         AddEmotion    =    CheerIdle_Base
  513.         AddEmotion    =    CheerBusy_Base
  514.         AddEmotion    =    HeroCheerIdle_Base
  515.         AddEmotion    =    HeroCheerBusy_Base
  516.         AddEmotion    =    Alert_Base
  517.     End
  518.     
  519.     Behavior = PickupStuffUpdate ModuleTag_PickupStuffUpdate
  520.         SkirmishAIOnly = Yes
  521.         StuffToPickUp = NONE +CRATE
  522.         ScanRange = 200
  523.         ScanIntervalSeconds = 0.5
  524.     End
  525.  
  526.     LocomotorSet
  527.         Locomotor     = NormalMeleeHordeLocomotor
  528.         Condition     = SET_NORMAL
  529.         Speed         = NORMAL_GOOD_INFANTRY_HORDE_SPEED
  530.     End
  531.  
  532.     Behavior = ProductionUpdate ProductionUpdateModuleTag
  533.         GiveNoXP = Yes
  534.     End
  535.  
  536.     Behavior = LevelUpUpgrade ModuleTag_BasicTraining
  537.         TriggeredBy = Upgrade_GondorBasicTraining
  538.         LevelsToGain = 1
  539.         LevelCap = 2
  540.     End
  541.     
  542.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality
  543.         TriggeredBy = Upgrade_GondorForgedBlades
  544.     End
  545.     
  546.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality2
  547.         TriggeredBy = Upgrade_GondorHeavyArmor
  548.     End
  549.     
  550.     /////////////////////
  551.     // AISpecialPowers
  552.     /////////////////////
  553.     
  554.     Behavior = AISpecialPowerUpdate GondorTowerShieldGuardHordeCaptureBuildingAI
  555.         CommandButtonName = Command_CaptureBuilding
  556.         SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
  557.     End
  558.     
  559.     Geometry = BOX
  560.     GeometryMajorRadius = 30.0
  561.     GeometryMinorRadius = 45.0
  562.     GeometryHeight = 20.0
  563.     GeometryIsSmall = No
  564.     
  565.     
  566.     // *** AUTO RESOLVE DATA *** 
  567.     AutoResolveUnitType = AutoResolveUnit_Pikemen
  568.     AutoResolveCombatChain = AutoResolve_PikemenCombatChain
  569.     
  570.     AutoResolveBody = AutoResolve_GondorTowerGuardHordeBody
  571.     
  572.     AutoResolveArmor
  573.         RequiredUpgrades = Upgrade_GondorHeavyArmor
  574.         Armor = AutoResolve_GondorTowerGuardHeavyArmor
  575.     End
  576.  
  577.     AutoResolveArmor
  578.         ExcludedUpgrades = Upgrade_GondorHeavyArmor
  579.         Armor = AutoResolve_GondorTowerGuardArmor
  580.     End
  581.  
  582.     AutoResolveWeapon
  583.         RequiredUpgrades = Upgrade_GondorForgedBlades
  584.         Weapon = AutoResolve_GondorTowerGuardUpgradedWeapon
  585.     End
  586.  
  587.     AutoResolveWeapon
  588.         ExcludedUpgrades = Upgrade_GondorForgedBlades
  589.         Weapon = AutoResolve_GondorTowerGuardWeapon
  590.     End
  591.     
  592.     WorldMapArmoryUpgradesAllowed = Upgrade_GondorBasicTraining Upgrade_GondorForgedBlades Upgrade_GondorHeavyArmor    
  593. End
  594.             
  595. ChildObject GondorTowerShieldGuardHorde_Summoned GondorTowerShieldGuardHorde
  596.     IsTrainable      =    No
  597.     CommandPoints =    0
  598.     CommandSet      =    GondorTowerShieldGuardCommandSet_Summoned
  599.     EquivalentTo  =    GondorTowerShieldGuardHorde
  600.  
  601.     DisplayName = OBJECT:HordeGondorTowerGuard
  602.     
  603.     Behavior = HordeContain ModuleTag_HordeContain
  604.         FrontAngle = 180
  605.         FlankedDelay = 4000
  606.         ObjectStatusOfContained = 
  607.         InitialPayload = GondorTowerShieldGuard_Summoned GOOD_MEN_GIANT_HORDE_SIZE
  608.         Slots = 15
  609.         PassengerFilter    = NONE +INFANTRY
  610.         ShowPips = No
  611.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  612.         RandomOffset=X:0 Y:0
  613.         MeleeBehavior = Amoeba
  614.             FacingBonus            =    30.0
  615.             AngleLimitCos        =    -0.17
  616.             InnerRange            =    30
  617.             OuterRange            =    80
  618.             OuterRangeBuildings    =    140
  619.         End
  620.  
  621.         RankInfo = RankNumber:1 UnitType:GondorTowerShieldGuard Position:X:50 Y:0        Position:X:50 Y:20        Position:X:50 Y:-20        Position:X:50 Y:40        Position:X:50 Y:-40 
  622.         RankInfo = RankNumber:2 UnitType:GondorTowerShieldGuard Position:X:30 Y:0 Leader 1 0    Position:X:30 Y:20 Leader 1 1    Position:X:30 Y:-20 Leader 1 2    Position:X:30 Y:40 Leader 1 3    Position:X:30 Y:-40 Leader 1 4
  623.         RankInfo = RankNumber:3 UnitType:GondorTowerShieldGuard Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:20 Leader 2 1    Position:X:10 Y:-20 Leader 2 2    Position:X:10 Y:40 Leader 2 3    Position:X:10 Y:-40 Leader 2 4
  624.         
  625.         RanksToReleaseWhenAttacking = 1 
  626.  
  627.         AlternateFormation = GondorTowerShieldGuardHordePorcupine
  628.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  629.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  630.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  631.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  632.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  633.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  634.     End
  635.     
  636.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  637.     // This one displays the timer, but the one in the uint does the work 
  638.         MinLifetime        = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  639.         MaxLifetime        = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  640.         DeathType        = FADED
  641.     End    
  642. End
  643.  
  644. ChildObject GondorTowerShieldGuardHordePorcupine GondorTowerShieldGuardHorde
  645.  
  646.     // Note - for alternate formations, all info outside of the Contain Behavior module is ignored.
  647.     // Any modifications need to be done via the Attribute Modifiers in the contain module. 
  648.     Behavior = HordeContain ModuleTag_HordeContain
  649.         FrontAngle = 360    //    Can't be flanked
  650.         FlankedDelay = 2000
  651.         ObjectStatusOfContained = 
  652.         InitialPayload                    = GondorTowerShieldGuard GOOD_MEN_HORDE_SIZE
  653.         Slots                            = 15
  654.         PassengerFilter                    = NONE +INFANTRY
  655.         ShowPips                        = No
  656.         ThisFormationIsTheMainFormation = No    //Used to determine which armorset to use (and anything else we want!)
  657.         RandomOffset                    = X:2 Y:1
  658.         RanksToReleaseWhenAttacking        = 0
  659.         RanksToJustFreeWhenAttacking   = 0
  660.         AttributeModifiers                = GondorTowerShieldGuardHordePorcupine
  661.         IsPorcupineFormation            = Yes
  662.         MinimumHordeSize                = 5
  663.  
  664.         AlternateFormation                = GondorTowerShieldGuardHorde
  665.         NotComboFormation                = Yes // this formation is not suitable for combo, so it will switch out of this when combo-ing
  666.  
  667.         // Banner Carrier info        
  668.         BannerCarriersAllowed            = GondorInfantryBanner                                                // types of units that are allowed as banner carriers
  669.         BannerCarrierPosition            = UnitType:GondorTowerShieldGuard    Pos:X:0.0 Y:0.0        // (DEFAULT) position of banner carrier
  670.         
  671.         RankInfo    = RankNumber:1 UnitType:GondorTowerShieldGuard Position:X:20 Y:0    Position:X:-16.18 Y:11.76        Position:X:6.18 Y:-19.02    Position:X:6.18 Y:19.02    Position:X:-16.18 Y:-11.76    Position:X:36.54 Y:16.27    Position:X:-39.13 Y:8.32    Position:X:26.77 Y:-29.73    Position:X:-4.18 Y:39.78    Position:X:-20 Y:-34.64    Position:X:26.77 Y:29.73    Position:X:-39.13 Y:-8.32    Position:X:36.54 Y:-16.27    Position:X:-20 Y:34.64    Position:X:-4.18 Y:-39.78
  672.     End
  673. End
  674.  
  675. //------------------------------------------------------------------------------
  676. Object GondorArcherHorde
  677.  
  678.     // This is required for garrisoned objects - please put in all objects.
  679.     ButtonImage        = WOR_GondorArcher
  680.     SelectPortrait    = UPGondor_Archer
  681.  
  682.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  683.         DependencySharedModelFlags = EMOTION_TAUNTING EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED  EMOTION_TERROR EMOTION_LOOK_TO_SKY
  684.         DefaultModelConditionState
  685.             Model = None //InvisHrdeTmp5x2
  686.         End
  687.         ModelConditionState = HORDE_EMPTY
  688.             Model = None
  689.         End        
  690.         
  691.         ModelConditionState = WORLD_BUILDER
  692.             Model = HordeMarkGUArc
  693.         End
  694.     End
  695.     
  696.     Side = Men
  697.     EditorSorting = UNIT
  698.     EmotionRange = 240
  699.     DisplayName = OBJECT:HordeGondorArcher
  700.     DisplayNameStrategic = CONTROLBAR:LW_Unit_GondorArcherHorde
  701.     DescriptionStrategic = CONTROLBAR:LW_ToolTip_GondorArcherHorde
  702.     
  703.     WeaponSet
  704.         Conditions = None 
  705.         Weapon = PRIMARY    GoodArcherMissileHordeRangefinder
  706.         Weapon = TERTIARY    GoodArcherMissileHordeRangefinderBombard
  707.         AutoChooseSources = TERTIARY FROM_PLAYER FROM_SCRIPT                ; Not AI.
  708.     End
  709.  
  710.     // *** AUDIO Parameters ***
  711.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  712.     // are always passed through to members
  713.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  714.  
  715.  
  716.     BuildCost = GONDOR_ARCHER_BUILDCOST
  717.     BuildTime = GONDOR_ARCHER_BUILDTIME
  718.     VisionRange = GONDOR_ARCHER_HORDE_VISION_RANGE 
  719.     ShroudClearingRange = GONDOR_ARCHER_HORDE_SHROUD_RANGE 
  720.     VisionSide = 50%
  721.     VisionRear = 25%
  722.     MaxVisionBonusPercent = 300%
  723.     VisionBonusTestRadius = 200
  724.     VisionBonusPercentPerFoot = 1%
  725.     CommandPoints = 60
  726.         
  727.     FormationWidth = 2 // Width it occupies in formations. Current choices are 1 or 2.
  728.     FormationDepth = 1 // Depth it occupies in formations. Current choices are 1 or 2.
  729.     
  730.      CrushableLevel = 0  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  731.     CrusherLevel = 0
  732.     UseCrushAttack = No    ;Archer hordes cannot crush or Bombard will not work
  733.  
  734.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  735.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE ARCHER ARMY_SUMMARY LARGE_RECTANGLE_PATHFIND// UNATTACKABLE
  736.     ;KindOf = SELECTABLE CAN_ATTACK INFANTRY HORDE ARCHER ARMY_SUMMARY LARGE_RECTANGLE_PATHFIND// UNATTACKABLE
  737.     
  738.     ThreatLevel = GONDOR_ARCHER_HORDE_THREAT
  739.     ThreatBreakdown GondorArcherHorde_DetailedThreat
  740.         AIKindOf = ARCHER
  741.     End
  742.     
  743.     CommandSet = GondorArcherHordeCommandSet
  744.     
  745.     Body = ImmortalBody ModuleTag_ImmortalBody
  746.         MaxHealth = 1
  747.     End
  748.  
  749.     #include "..\..\..\includes\CaptureBuilding.inc"
  750.     
  751.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  752.         StanceTemplate = ArcherHorde
  753.     End
  754.  
  755.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  756.         AutoAcquireEnemiesWhenIdle    =    Yes ATTACK_BUILDINGS
  757.         MoodAttackCheckRate            =    500
  758.         MaxCowerTime                =    5000
  759.         MinCowerTime                =    3000
  760.         CanAttackWhileContained        =    Yes  // Can fire out of garrisoned building        
  761.         AILuaEventsList                =    InfantryFunctions
  762.         AttackPriority                =     AttackPriority_Archer
  763.     End
  764.     
  765.     Behavior = HordeContain ModuleTag_HordeContain
  766.         FrontAngle = 270
  767.         FlankedDelay = 2000
  768.         ObjectStatusOfContained = 
  769.         InitialPayload = GondorArcher GOOD_MEN_GIANT_HORDE_SIZE
  770.         Slots = 15
  771.         PassengerFilter    = NONE +INFANTRY
  772.         ShowPips = No
  773.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  774.         RandomOffset=X:0 Y:0
  775.         MeleeBehavior = Amoeba
  776.         End
  777.  
  778.         // Banner Carrier info        
  779.         BannerCarriersAllowed    = GondorInfantryBanner                                        // types of units that are allowed as banner carriers
  780.         BannerCarrierPosition    = UnitType:GondorArcher    Pos:X:70.0 Y:0.0        // (DEFAULT) position of banner carrier
  781.         
  782.         RankInfo = RankNumber:1 UnitType:GondorArcher Position:X:50 Y:0            Position:X:50 Y:20        Position:X:50 Y:-20        Position:X:50 Y:40        Position:X:50 Y:-40 
  783.         RankInfo = RankNumber:2 UnitType:GondorArcher Position:X:30 Y:0 Leader 1 0    Position:X:30 Y:20 Leader 1 1    Position:X:30 Y:-20 Leader 1 2    Position:X:30 Y:40 Leader 1 3    Position:X:30 Y:-40 Leader 1 4
  784.         RankInfo = RankNumber:3 UnitType:GondorArcher Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:20 Leader 2 1    Position:X:10 Y:-20 Leader 2 2    Position:X:10 Y:40 Leader 2 3    Position:X:10 Y:-40 Leader 2 4
  785.         
  786.         RanksToReleaseWhenAttacking = 1 2 3 
  787.  
  788.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  789.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  790.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  791.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  792.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  793.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  794.     End
  795.  
  796.     
  797.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  798.         GravityMult = 1.0
  799.     End
  800.     
  801.        Behavior = EmotionTrackerUpdate    Module_EmotionTracker
  802.         TauntAndPointDistance        =    INFANTRY_TAUNT_POINT_RADIUS        // max distance to taunted/pointed objet
  803.         TauntAndPointUpdateDelay    =    1000    // how often scan (milliseconds)
  804.         TauntAndPointExcluded        =    NONE
  805.          AfraidOf                    =    EMOTION_AFRAIDOF_OBJECTFILTER
  806.         AlwaysAfraidOf                =    EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER
  807.          PointAt                        =    EMOTION_POINTAT_OBJECTFILTER
  808.         HeroScanDistance        =    150
  809.         FearScanDistance        =     ARCHER_FEAR_SCAN_RADIUS
  810.  
  811.         AddEmotion            =    Terror_Base            //OVERRIDE
  812.             //StartFXList        =    FX_GondorArcherTerror
  813.             //End
  814.  
  815.         AddEmotion            =    Doom_Base            //OVERRIDE
  816.             //StartFXList        =    FX_GondorArcherDoom
  817.             //End
  818.  
  819.         AddEmotion    =   BraceForBeingCrushed_Base
  820.         
  821.         AddEmotion            =    UncontrollableFear_Base        //OVERRIDE
  822.             //StartFXList        =    FX_GondorArcherFear
  823.             //End
  824.  
  825.         AddEmotion            =    FearIdle_Base            //OVERRIDE
  826.             //StartFXList        =    FX_GondorArcherCower
  827.             //End
  828.         
  829.         AddEmotion            =    FearBusy_Base            //OVERRIDE
  830.             //StartFXList        =    FX_GondorArcherCower
  831.             //End
  832.         
  833.         AddEmotion            =    Point_Base            //OVERRIDE
  834.             //Duration        =    4000
  835.             //StartFXList        =    FX_GondorArcherPoint
  836.             //End
  837.         
  838.         AddEmotion            =    Taunt_Base            //OVERRIDE
  839.              //AttributeModifier    =    GondorFighterTaunt
  840.              //End        
  841.          
  842.          AddEmotion    =    CheerIdle_Base
  843.         AddEmotion    =    CheerBusy_Base
  844.         AddEmotion    =    HeroCheerIdle_Base
  845.         AddEmotion    =    HeroCheerBusy_Base
  846.         AddEmotion    =    Alert_Base
  847.     End    
  848.     
  849.     Behavior = ProductionUpdate ProductionUpdateModuleTag
  850.         GiveNoXP = Yes
  851.     End
  852.  
  853.     Behavior = LevelUpUpgrade ModuleTag_BasicTraining
  854.         TriggeredBy = Upgrade_GondorBasicTraining
  855.         LevelsToGain = 1
  856.         LevelCap = 2
  857.     End
  858.     
  859.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality
  860.         TriggeredBy = Upgrade_GondorFireArrows
  861.     End
  862.     
  863.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality2
  864.         TriggeredBy = Upgrade_GondorHeavyArmor
  865.     End
  866.     
  867.     Behavior = PickupStuffUpdate ModuleTag_PickupStuffUpdate
  868.         SkirmishAIOnly = Yes
  869.         StuffToPickUp = NONE +CRATE
  870.         ScanRange = 200
  871.         ScanIntervalSeconds = 0.5
  872.     End
  873.     
  874.     LocomotorSet
  875.         Locomotor     = NormalRangedHordeLocomotor
  876.         Condition     = SET_NORMAL
  877.         Speed         = NORMAL_GOOD_INFANTRY_HORDE_SPEED
  878.     End
  879.     
  880.     /////////////////////
  881.     // AISpecialPowers
  882.     /////////////////////
  883.     
  884.     Behavior = AISpecialPowerUpdate GondorArcherHordeCaptureBuildingAI
  885.         CommandButtonName = Command_CaptureBuilding
  886.         SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
  887.     End
  888.     
  889.     Geometry = BOX
  890.     GeometryMajorRadius = 30.0
  891.     GeometryMinorRadius = 45.0
  892.     GeometryHeight = 20.0
  893.     GeometryIsSmall = No
  894.  
  895.  
  896.     // *** AUTO RESOLVE DATA *** 
  897.     AutoResolveUnitType = AutoResolveUnit_Archer
  898.     AutoResolveCombatChain = AutoResolve_ArcherCombatChain
  899.     
  900.     AutoResolveBody = AutoResolve_GondorArcherHordeBody
  901.  
  902.     AutoResolveArmor
  903.         RequiredUpgrades = Upgrade_GondorHeavyArmor
  904.         Armor = AutoResolve_GondorArcherHeavyArmor
  905.     End
  906.  
  907.     AutoResolveArmor
  908.         ExcludedUpgrades = Upgrade_GondorHeavyArmor
  909.         Armor = AutoResolve_GondorArcherArmor
  910.     End
  911.  
  912.     AutoResolveWeapon
  913.         RequiredUpgrades = Upgrade_GondorFireArrows
  914.         Weapon = AutoResolve_GondorArcherUpgradedWeapon
  915.     End
  916.  
  917.     AutoResolveWeapon
  918.         ExcludedUpgrades = Upgrade_GondorFireArrows
  919.         Weapon = AutoResolve_GondorArcherWeapon
  920.     End
  921.     
  922.     WorldMapArmoryUpgradesAllowed = Upgrade_GondorBasicTraining Upgrade_GondorFireArrows Upgrade_GondorHeavyArmor    
  923. End
  924.  
  925. ChildObject GondorArcherHorde_Summoned GondorArcherHorde
  926.     IsTrainable      =    No
  927.     CommandPoints =    0
  928.     CommandSet      =    GondorArcherHordeCommandSet_Summoned
  929.     EquivalentTo  =    GondorArcherHorde
  930.  
  931.     DisplayName = OBJECT:HordeGondorArcher
  932.     
  933.     Behavior = HordeContain ModuleTag_HordeContain
  934.         FrontAngle = 270
  935.         FlankedDelay = 2000
  936.         ObjectStatusOfContained = 
  937.         InitialPayload = GondorArcher_Summoned GOOD_MEN_GIANT_HORDE_SIZE
  938.         Slots = 15
  939.         PassengerFilter    = NONE +INFANTRY
  940.         ShowPips = No
  941.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  942.         RandomOffset=X:0 Y:0
  943.         MeleeBehavior = Amoeba
  944.         End
  945.  
  946.         RankInfo = RankNumber:1 UnitType:GondorArcher Position:X:50 Y:0        Position:X:50 Y:20        Position:X:50 Y:-20        Position:X:50 Y:40        Position:X:50 Y:-40 
  947.         RankInfo = RankNumber:2 UnitType:GondorArcher Position:X:30 Y:0 Leader 1 0    Position:X:30 Y:20 Leader 1 1    Position:X:30 Y:-20 Leader 1 2    Position:X:30 Y:40 Leader 1 3    Position:X:30 Y:-40 Leader 1 4
  948.         RankInfo = RankNumber:3 UnitType:GondorArcher Position:X:10 Y:0 Leader 2 0    Position:X:10 Y:20 Leader 2 1    Position:X:10 Y:-20 Leader 2 2    Position:X:10 Y:40 Leader 2 3    Position:X:10 Y:-40 Leader 2 4
  949.         
  950.         RanksToReleaseWhenAttacking = 1 2 3 
  951.  
  952.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  953.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  954.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  955.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  956.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  957.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  958.     End
  959.     
  960.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  961.     // This one displays the timer, but the one in the uint does the work 
  962.         MinLifetime    = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  963.         MaxLifetime    = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  964.         DeathType    = FADED
  965.     End    
  966. End
  967.  
  968. //////////////////////////////////////////////////////////////////////////////////
  969. Object GondorRangerHorde
  970.  
  971.     // This is required for garrisoned objects - please put in all objects.
  972.     ButtonImage        = WOR_IthilienRangers
  973.     SelectPortrait    = UPGondor_Ranger
  974.  
  975.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  976.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR EMOTION_LOOK_TO_SKY EMOTION_TAUNTING
  977.         DefaultModelConditionState
  978.             Model = None //InvisHrdeTmp5x2
  979.         End
  980.         ModelConditionState = HORDE_EMPTY
  981.             Model = None
  982.         End        
  983.         
  984.         ModelConditionState = WORLD_BUILDER
  985.             Model = HordeMarkGURan
  986.         End
  987.     End
  988.     
  989.     Side = Men
  990.     EditorSorting = UNIT
  991.     EmotionRange = 240
  992.     DisplayName = OBJECT:HordeGondorRanger
  993.     DisplayNameStrategic = CONTROLBAR:LW_Unit_GondorRangerHorde
  994.     DescriptionStrategic = CONTROLBAR:LW_ToolTip_GondorRangerHorde
  995.     
  996.     WeaponSet
  997.         Conditions = None 
  998.         Weapon = PRIMARY    GondorRangerMissileHordeRangefinder
  999.         Weapon = TERTIARY   GondorRangerMissileHordeRangefinderBombard
  1000.         AutoChooseSources = TERTIARY FROM_PLAYER FROM_SCRIPT                ; Not AI.
  1001.     End
  1002.  
  1003.     // *** AUDIO Parameters ***
  1004.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  1005.     // are always passed through to members
  1006.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  1007.  
  1008.  
  1009.     BuildCost = GONDOR_RANGER_BUILDCOST
  1010.     BuildTime = GONDOR_RANGER_BUILDTIME
  1011.     VisionRange = GONDOR_RANGER_HORDE_VISION_RANGE
  1012.     ShroudClearingRange = GONDOR_RANGER_HORDE_SHROUD_RANGE
  1013.     VisionSide = 50%
  1014.     VisionRear = 25%
  1015.     MaxVisionBonusPercent = 300%
  1016.     VisionBonusTestRadius = 200
  1017.     VisionBonusPercentPerFoot = 1.0%
  1018.     CommandPoints = 60
  1019.         
  1020.      CrushableLevel = 0  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  1021.     CrusherLevel = 0
  1022.     UseCrushAttack = No    ;Archer hordes cannot crush or Bombard will not work
  1023.  
  1024.     FormationWidth = 2 // Width it occupies in formations. Current choices are 1 or 2.
  1025.     FormationDepth = 1 // Depth it occupies in formations. Current choices are 1 or 2.
  1026.     
  1027.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  1028.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE ARCHER ARMY_SUMMARY LARGE_RECTANGLE_PATHFIND//UNATTACKABLE 
  1029.     
  1030.     Body = ImmortalBody ModuleTag_ImmortalBody
  1031.         MaxHealth = 1
  1032.     End
  1033.     
  1034.     ThreatLevel = GONDOR_RANGER_HORDE_THREAT
  1035.     ThreatBreakdown GondorRangerHorde_DetailedThreat
  1036.         AIKindOf = ARCHER
  1037.     End
  1038.     
  1039.     #include "..\..\..\includes\CaptureBuilding.inc"
  1040.     
  1041.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  1042.         StanceTemplate = ArcherHorde
  1043.     End
  1044.  
  1045.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  1046.         AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS STEALTHED
  1047.         MoodAttackCheckRate        = 500
  1048.         MaxCowerTime                =    5000
  1049.         MinCowerTime                =    3000
  1050.         CanAttackWhileContained    = Yes  // Can fire out of garrisoned building        
  1051.         AILuaEventsList                = InfantryFunctions
  1052.         AttackPriority                =     AttackPriority_Archer
  1053.     End
  1054.  
  1055.     Behavior = HordeContain ModuleTag_HordeContain
  1056.         FrontAngle = 270
  1057.         FlankedDelay = 2000
  1058.         ObjectStatusOfContained = 
  1059.         InitialPayload = GondorRanger GOOD_MEN_HORDE_SIZE
  1060.         Slots = 10
  1061.         PassengerFilter = NONE +INFANTRY
  1062.         ShowPips = No
  1063.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1064.         RandomOffset=X:4 Y:4
  1065.         MeleeBehavior = Amoeba
  1066.         End
  1067.         
  1068.         // Banner Carrier info        
  1069.         BannerCarriersAllowed    = GondorInfantryBanner                                        // types of units that are allowed as banner carriers
  1070.         BannerCarrierPosition    = UnitType:GondorRanger        Pos:X:30.0 Y:0.0        // (DEFAULT) position of banner carrier
  1071.         
  1072.         // Positions for 5
  1073.         RankInfo = RankNumber:1 UnitType:GondorRanger Position:X:20 Y:0            Position:X:20 Y:25        Position:X:20 Y:-25        Position:X:20 Y:50        Position:X:20 Y:-50 
  1074.         RankInfo = RankNumber:2 UnitType:GondorRanger Position:X:0 Y:0    Leader 1 0     Position:X:0 Y:25 Leader 1 1    Position:X:0 Y:-25 Leader 1 2    Position:X:0 Y:50 Leader 1 3    Position:X:0 Y:-50 Leader 1 4
  1075.  
  1076.         RanksToReleaseWhenAttacking = 1 2 
  1077.                 
  1078.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  1079.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  1080.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  1081.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  1082.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  1083.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  1084.     End
  1085.  
  1086.     #include "..\..\..\includes\DefaultInvisibilityUpdate.inc"
  1087.  
  1088.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  1089.         GravityMult = 1.0
  1090.     End
  1091.     
  1092.        Behavior = EmotionTrackerUpdate    Module_EmotionTracker
  1093.         TauntAndPointDistance        =    INFANTRY_TAUNT_POINT_RADIUS        // max distance to taunted/pointed objet
  1094.         TauntAndPointUpdateDelay    =    1000    // how often scan (milliseconds)
  1095.         TauntAndPointExcluded        =    NONE
  1096.          AfraidOf                    =    EMOTION_AFRAIDOF_OBJECTFILTER
  1097.         AlwaysAfraidOf                =    EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER
  1098.          PointAt                        =    EMOTION_POINTAT_OBJECTFILTER
  1099.         HeroScanDistance        =    150
  1100.         FearScanDistance        =    ARCHER_FEAR_SCAN_RADIUS
  1101.  
  1102.         AddEmotion    =    Terror_Base
  1103.         AddEmotion    =    Doom_Base
  1104.         AddEmotion    =   BraceForBeingCrushed_Base
  1105.         AddEmotion    =    UncontrollableFear_Base
  1106.         AddEmotion    =    FearIdle_Base
  1107.         AddEmotion    =    FearBusy_Base
  1108.         AddEmotion    =    Point_Base
  1109.         
  1110.         //Rangers are very stoic and do not taunt. - 
  1111.         //AddEmotion    =    OVERRIDE Taunt_Base    
  1112.              //AttributeModifier        =    GondorFighterTaunt
  1113.          //End        
  1114.          
  1115.          AddEmotion    =    CheerIdle_Base
  1116.         AddEmotion    =    CheerBusy_Base
  1117.         AddEmotion    =    HeroCheerIdle_Base
  1118.         AddEmotion    =    HeroCheerBusy_Base
  1119.         AddEmotion    =    Alert_Base
  1120.     End    
  1121.         
  1122.     LocomotorSet
  1123.         Locomotor     = NormalRangedHordeLocomotor
  1124.         Condition     = SET_NORMAL
  1125.         Speed         = NORMAL_GOOD_FAST_HORDE_SPEED
  1126.     End
  1127.  
  1128.     CommandSet = GondorRangerHordeCommandSet
  1129.  
  1130.     Behavior = OCLSpecialPower ModuleTag_ArrowVolleyEvil
  1131.         SpecialPowerTemplate        = SpecialAbilityMenLongShot
  1132.         OCL                            = OCL_LongShotAbility
  1133.         CreateLocation                = CREATE_AT_LOCATION
  1134.         UpdateModuleStartsAttack    = No
  1135.         
  1136.         ;// Need to set a model condition (unused by the horde anyway) in order to
  1137.         ;// freeze the horde for the duration of the spell
  1138.         SetModelCondition            = ModelConditionState:USER_1
  1139.         SetModelConditionTime        = 5.0
  1140.         DisableDuringAnimDuration    = Yes
  1141.     End
  1142.     Behavior = WeaponFireSpecialAbilityUpdate ModuleTag_FireballUpdate   
  1143.         SpecialPowerTemplate    = SpecialAbilityMenLongShot
  1144.         PackTime                = 5000                                    // returning to flap
  1145.         MustFinishAbility        = Yes
  1146.         SpecialWeapon            = MenLongShotWeapon
  1147.         NeedLivingTargets        = No
  1148.         ;PackSound                = LongshotRangerCall    ;this worked!
  1149.         ;UnpackSound                = LongshotRangerCall    ;this didn't work
  1150.         ;PrepSoundLoop            = LongshotRangerCall    ;this worked!
  1151.         TriggerSound            = RangerVoiceLongShot
  1152.         ApproachRequiresLOS        = No
  1153.     End
  1154.     
  1155.     Behavior = ProductionUpdate ProductionUpdateModuleTag
  1156.         GiveNoXP = Yes
  1157.     End
  1158.  
  1159.     Behavior = LevelUpUpgrade ModuleTag_BasicTraining
  1160.         TriggeredBy = Upgrade_GondorBasicTraining
  1161.         LevelsToGain = 1
  1162.         LevelCap = 2
  1163.     End
  1164.     
  1165.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality
  1166.         TriggeredBy = Upgrade_GondorFireArrows
  1167.     End
  1168.     
  1169.     Behavior = PickupStuffUpdate ModuleTag_PickupStuffUpdate
  1170.         SkirmishAIOnly = Yes
  1171.         StuffToPickUp = NONE +CRATE
  1172.         ScanRange = 200
  1173.         ScanIntervalSeconds = 0.5
  1174.     End
  1175.     
  1176.     /////////////////////
  1177.     // AISpecialPowers
  1178.     /////////////////////
  1179.     
  1180.     Behavior = AISpecialPowerUpdate GondorRangerHordeCaptureBuildingAI
  1181.         CommandButtonName = Command_CaptureBuilding
  1182.         SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
  1183.     End
  1184.     
  1185.     Geometry = BOX
  1186.     GeometryMajorRadius = 20.0
  1187.     GeometryMinorRadius = 60.0
  1188.     GeometryHeight = 10.0
  1189.     GeometryIsSmall = No
  1190.     
  1191.     
  1192.     // *** AUTO RESOLVE DATA *** 
  1193.     AutoResolveUnitType = AutoResolveUnit_Archer
  1194.     AutoResolveCombatChain = AutoResolve_ArcherCombatChain
  1195.     
  1196.     AutoResolveBody = AutoResolve_GondorRangerHordeBody
  1197.  
  1198.     AutoResolveArmor
  1199.         Armor = AutoResolve_GondorRangerArmor
  1200.     End
  1201.  
  1202.     AutoResolveWeapon
  1203.         RequiredUpgrades = Upgrade_GondorFireArrows
  1204.         Weapon = AutoResolve_GondorRangerUpgradedWeapon
  1205.     End
  1206.  
  1207.     AutoResolveWeapon
  1208.         ExcludedUpgrades = Upgrade_GondorFireArrows
  1209.         Weapon = AutoResolve_GondorRangerWeapon
  1210.     End
  1211.     
  1212.     WorldMapArmoryUpgradesAllowed = Upgrade_GondorBasicTraining Upgrade_GondorFireArrows
  1213. End
  1214.  
  1215. //////////////////////////////////////////////////////////////////////////////////
  1216. ChildObject GondorRangerInnHorde GondorRangerHorde
  1217.     BuildCost = INN_UNIT_BUILDCOST_MEN
  1218.     Behavior = HordeContain ModuleTag_HordeContain
  1219.         FrontAngle = 270
  1220.         FlankedDelay = 2000
  1221.         ObjectStatusOfContained = 
  1222.         InitialPayload = GondorRangerInn GOOD_MEN_HORDE_SIZE
  1223.         Slots = 10
  1224.         PassengerFilter = NONE +INFANTRY
  1225.         ShowPips = No
  1226.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1227.         RandomOffset=X:4 Y:4
  1228.         MeleeBehavior = Amoeba
  1229.         End
  1230.         
  1231.         // Banner Carrier info        
  1232.         BannerCarriersAllowed    = GondorInfantryBanner                                        // types of units that are allowed as banner carriers
  1233.         BannerCarrierPosition    = UnitType:GondorRangerInn        Pos:X:30.0 Y:0.0        // (DEFAULT) position of banner carrier
  1234.         
  1235.         // Positions for 5
  1236.         RankInfo = RankNumber:1 UnitType:GondorRangerInn Position:X:0 Y:0    Position:X:0 Y:25    Position:X:0 Y:-25    Position:X:0 Y:50    Position:X:0 Y:-50 
  1237.         RankInfo = RankNumber:2 UnitType:GondorRangerInn Position:X:20 Y:0    Position:X:15 Y:25    Position:X:20 Y:-25    Position:X:20 Y:50    Position:X:20 Y:-50 
  1238.  
  1239.         RanksToReleaseWhenAttacking = 1 2 
  1240.                 
  1241.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  1242.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  1243.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  1244.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  1245.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  1246.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.
  1247.     End
  1248.  
  1249. End
  1250.  
  1251. //////////////////////////////////////////////////////////////////////////////////
  1252. ChildObject GondorRangerHorde_Summoned GondorRangerHorde
  1253.     IsTrainable = No
  1254.     CommandPoints = 0
  1255.     CommandSet = GondorRangerHordeCommandSet_Summoned
  1256.     EquivalentTo = GondorRangerHorde
  1257.  
  1258.     DisplayName  =  OBJECT:HordeDunedainRanger
  1259.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE ARCHER ARMY_SUMMARY LARGE_RECTANGLE_PATHFIND SUMMONED
  1260.  
  1261.     Behavior = HordeContain ModuleTag_HordeContain
  1262.         FrontAngle = 270
  1263.         FlankedDelay = 2000
  1264.         ObjectStatusOfContained = 
  1265.         InitialPayload = GondorRanger_Summoned GOOD_MEN_HORDE_SIZE
  1266.         Slots = 10
  1267.         PassengerFilter = NONE +INFANTRY
  1268.         ShowPips = No
  1269.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1270.         RandomOffset=X:4 Y:4
  1271.         
  1272.         // Positions for 5
  1273.         RankInfo = RankNumber:1 UnitType:GondorRanger Position:X:0 Y:0    Position:X:0 Y:20    Position:X:0 Y:-20    Position:X:0 Y:40    Position:X:0 Y:-40 
  1274.         RankInfo = RankNumber:2 UnitType:GondorRanger Position:X:15 Y:0    Position:X:15 Y:20    Position:X:15 Y:-20    Position:X:15 Y:40    Position:X:15 Y:-40 
  1275.  
  1276.         RanksToReleaseWhenAttacking = 1 2 
  1277.                 
  1278.         MeleeAttackLeashDistance = 25// How far the hordes can move from the center of the horde when melee attacking.
  1279.     End
  1280.     
  1281.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  1282.         // This one displays the timer, but the one in the uint does the work 
  1283.         MinLifetime        = DUNEDAIN_ALLIES_LIFETIME
  1284.         MaxLifetime        = DUNEDAIN_ALLIES_LIFETIME
  1285.         DeathType        = FADED
  1286.     End    
  1287.  
  1288.     //Summoned Rangers can detect Stealthed Units    
  1289.     Behavior = StealthDetectorUpdate StealthDetectorUpdateModuleTag
  1290.         DetectionRange        = 100    // range to detect
  1291.         DetectionRate        = 500   // how often to rescan for stealthed things in my sight (msec)
  1292.         CancelOneRingEffect = Yes    // forces uses of one-ring to pop out of it
  1293.     End
  1294. End
  1295.  
  1296. //////////////////////////////////////////////////////////////////////////////////
  1297. Object GondorKnightHorde
  1298.  
  1299.     // This is required for garrisoned objects - please put in all objects.
  1300.     ButtonImage        = WOR_GondorKnights
  1301.     SelectPortrait    = UPGondor_Knight
  1302.  
  1303.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  1304.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR EMOTION_LOOK_TO_SKY
  1305.         DefaultModelConditionState
  1306.             Model = None //InvisHrdeTmp5x1
  1307.         End
  1308.         ModelConditionState = HORDE_EMPTY
  1309.             Model = None
  1310.         End        
  1311.         ModelConditionState = WORLD_BUILDER
  1312.             Model = HordeMarkGUKni
  1313.         End
  1314.     End
  1315.     
  1316.     Side = Men
  1317.     EditorSorting = UNIT
  1318.     EmotionRange = 240
  1319.     DisplayName = OBJECT:HordeGondorKnight
  1320.     DisplayNameStrategic = CONTROLBAR:LW_Unit_GondorKnightHorde
  1321.     DescriptionStrategic = CONTROLBAR:LW_ToolTip_GondorKnightHorde
  1322.     
  1323.     WeaponSet
  1324.         Conditions = None 
  1325.         Weapon = PRIMARY    NormalMeleeHordeRangefinder
  1326.     End
  1327.     
  1328.     CommandSet = GondorKnightHordeCommandSet
  1329.  
  1330.  
  1331.     // *** AUDIO Parameters ***//
  1332.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  1333.     // are always passed through to members
  1334.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  1335.  
  1336.     BuildCost             = GONDOR_KNIGHT_BUILDCOST
  1337.     BuildTime             = GONDOR_KNIGHT_BUILDTIME  
  1338.     VisionRange             = GONDOR_KNIGHT_HORDE_VISION_RANGE
  1339.     VisionSide             = 35%
  1340.     VisionRear             = 25%
  1341.     MaxVisionBonusPercent        = 300%
  1342.     VisionBonusTestRadius        = 200
  1343.     VisionBonusPercentPerFoot     = 5.0%
  1344.     ShroudClearingRange         = GONDOR_KNIGHT_HORDE_SHROUD_RANGE    
  1345.     
  1346.     CommandPoints = 60
  1347.           
  1348.     FormationWidth = 2 // Width it occupies in formations. Current choices are 1 or 2.
  1349.     FormationDepth = 1 // Depth it occupies in formations. Current choices are 1 or 2.
  1350.     
  1351.     CrushableLevel = 2  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  1352.     CrusherLevel = 1 
  1353.     MinCrushVelocityPercent = 50% // Has to be moving at at least 25% of full speed.
  1354.     CrushDecelerationPercent = 50 // Lose 10 percent (100/5 horde members) of max velocity when crushing.
  1355.     CrushKnockback = 40  // how hard we knock back crushed units.
  1356.     CrushZFactor = 1.0  // How much we knock upwards.
  1357.         
  1358.     
  1359.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  1360.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAVALRY HORDE MELEE_HORDE ARMY_SUMMARY LARGE_RECTANGLE_PATHFIND//UNATTACKABLE 
  1361.     
  1362.     Body = ImmortalBody ModuleTag_ImmortalBody
  1363.         MaxHealth = 1
  1364.     End
  1365.     
  1366.     ThreatLevel = GONDOR_KNIGHT_HORDE_THREAT
  1367.     ThreatBreakdown GondorKnightHorde_DetailedThreat
  1368.         AIKindOf = CAVALRY
  1369.     End
  1370.     
  1371.     #include "..\..\..\includes\CaptureBuilding.inc"
  1372.     
  1373.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  1374.         StanceTemplate = CavalryHorde
  1375.     End
  1376.     
  1377.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  1378.         AutoAcquireEnemiesWhenIdle    = Yes ATTACK_BUILDINGS
  1379.         MoodAttackCheckRate            = 500
  1380.         MaxCowerTime                = 5000
  1381.         MinCowerTime                = 3000
  1382.         AILuaEventsList                = CavalryFunctions  
  1383.         AttackPriority                = AttackPriority_Cavalry
  1384.     End
  1385.  
  1386.     Behavior = HorseHordeContain ModuleTag_HordeContain
  1387.         
  1388.         FrontAngle = 270
  1389.         FlankedDelay = 2000
  1390.         ObjectStatusOfContained = 
  1391.         InitialPayload = GondorCavalry  GOOD_RIDER_LARGE_HORDE_SIZE
  1392.         Slots = 10
  1393.         PassengerFilter = NONE +CAVALRY +GondorCavalryBanner
  1394.         ShowPips = No
  1395.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1396.         RandomOffset=X:0 Y:0
  1397.         MeleeBehavior = Amoeba
  1398.         End
  1399.  
  1400.         // Banner Carrier info        
  1401.         BannerCarriersAllowed    = GondorCavalryBanner                                        // types of units that are allowed as banner carriers
  1402.         BannerCarrierPosition    = UnitType:GondorCavalry    Pos:X:70.0 Y:0.0        // (DEFAULT) position of banner carrier for archer horde
  1403.         
  1404.         RankInfo = RankNumber:1 UnitType:GondorCavalry Position:X:40 Y:0        Position:X:40 Y:15        Position:X:40 Y:-15        Position:X:40 Y:30        Position:X:40 Y:-30 
  1405.         RankInfo = RankNumber:2 UnitType:GondorCavalry Position:X:10 Y:0 Leader 1 0    Position:X:10 Y:15 Leader 1 1    Position:X:10 Y:-15 Leader 1 2    Position:X:10 Y:30 Leader 1 3    Position:X:10 Y:-30 Leader 1 4
  1406.         
  1407.         RanksToReleaseWhenAttacking = 1 
  1408.  
  1409.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  1410.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  1411.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  1412.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  1413.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  1414.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.    
  1415.     End
  1416.     
  1417.     
  1418.     
  1419.  
  1420.     Behavior = HordeNotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
  1421.         ScanWidth = 70.0 ; A little less than the width of the horde (which is 2 * 40 = 80)
  1422.     End
  1423.  
  1424.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  1425.         GravityMult = 1.0
  1426.     End
  1427.     
  1428.     Behavior = EmotionTrackerUpdate    Module_EmotionTracker
  1429.         TauntAndPointDistance        =    INFANTRY_TAUNT_POINT_RADIUS        // max distance to taunted/pointed objet
  1430.          TauntAndPointUpdateDelay    =    1000    // how often scan (milliseconds)
  1431.          TauntAndPointExcluded        =    NONE
  1432.          AfraidOf                    =    EMOTION_AFRAIDOF_OBJECTFILTER
  1433.         AlwaysAfraidOf                =    EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER
  1434.          PointAt                        =    EMOTION_POINTAT_OBJECTFILTER
  1435.          HeroScanDistance            =    150
  1436.          FearScanDistance            =    INFANTRY_FEAR_SCAN_RADIUS
  1437.          
  1438.         AddEmotion            =    Terror_Base
  1439.         AddEmotion            =    Doom_Base
  1440.         AddEmotion            =   BraceForBeingCrushed_Base
  1441.         AddEmotion            =    UncontrollableFear_Base
  1442.         AddEmotion            =    FearIdle_Base
  1443.         AddEmotion            =    FearBusy_Base
  1444.         AddEmotion            =    Point_Base
  1445.         AddEmotion            =    Taunt_Base
  1446.          AddEmotion            =    CheerIdle_Base
  1447.         AddEmotion            =    CheerBusy_Base
  1448.         AddEmotion            =    HeroCheerIdle_Base
  1449.         AddEmotion            =    HeroCheerBusy_Base
  1450.         AddEmotion            =    Alert_Base
  1451.         AddEmotion                =   CheerForAboutToCrush_Base
  1452.      End    
  1453.     
  1454.     LocomotorSet
  1455.         Locomotor     = NormalCavalryHordeLocomotor 
  1456.         Condition     = SET_NORMAL
  1457.         Speed         = NORMAL_CAVALRY_HORDE_SPEED
  1458.     End
  1459.  
  1460.     Behavior = ProductionUpdate ProductionUpdateModuleTag
  1461.         GiveNoXP = Yes
  1462.     End
  1463.  
  1464.     Behavior = LevelUpUpgrade ModuleTag_BasicTraining
  1465.         TriggeredBy = Upgrade_GondorBasicTraining
  1466.         LevelsToGain = 1
  1467.         LevelCap = 2
  1468.     End
  1469.     
  1470.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality
  1471.         TriggeredBy = Upgrade_GondorForgedBlades
  1472.     End
  1473.     
  1474.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality2
  1475.         TriggeredBy = Upgrade_GondorHeavyArmor
  1476.     End
  1477.     
  1478.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality3
  1479.         TriggeredBy = Upgrade_GondorKnightShield
  1480.     End
  1481.     
  1482.     Behavior = PickupStuffUpdate ModuleTag_PickupStuffUpdate
  1483.         SkirmishAIOnly = Yes
  1484.         StuffToPickUp = NONE +CRATE
  1485.         ScanRange = 200
  1486.         ScanIntervalSeconds = 0.5
  1487.     End
  1488.     
  1489.     /////////////////////
  1490.     // AISpecialPowers
  1491.     /////////////////////
  1492.     
  1493.     Behavior = AISpecialPowerUpdate GondorKnightHordeCaptureBuildingAI
  1494.         CommandButtonName = Command_CaptureBuilding
  1495.         SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
  1496.     End
  1497.     
  1498.     Geometry = BOX
  1499.     GeometryMajorRadius = 30.0
  1500.     GeometryMinorRadius = 40.0
  1501.     GeometryHeight = 20.0
  1502.     GeometryIsSmall = No
  1503.     
  1504.     
  1505.     // *** AUTO RESOLVE DATA *** 
  1506.     AutoResolveUnitType = AutoResolveUnit_Cavalry
  1507.     AutoResolveCombatChain = AutoResolve_CavalryCombatChain
  1508.  
  1509.     AutoResolveBody = AutoResolve_GondorKnightHordeBody
  1510.  
  1511.     AutoResolveArmor
  1512.         RequiredUpgrades = Upgrade_GondorHeavyArmor
  1513.         Armor = AutoResolve_GondorKnightHeavyArmor
  1514.     End
  1515.  
  1516.     AutoResolveArmor
  1517.         ExcludedUpgrades = Upgrade_GondorHeavyArmor
  1518.         Armor = AutoResolve_GondorKnightArmor
  1519.     End
  1520.  
  1521.     AutoResolveWeapon
  1522.         RequiredUpgrades = Upgrade_GondorForgedBlades
  1523.         Weapon = AutoResolve_GondorKnightUpgradedWeapon
  1524.     End
  1525.  
  1526.     AutoResolveWeapon
  1527.         ExcludedUpgrades = Upgrade_GondorForgedBlades
  1528.         Weapon = AutoResolve_GondorKnightWeapon
  1529.     End
  1530.     
  1531.     WorldMapArmoryUpgradesAllowed = Upgrade_GondorBasicTraining Upgrade_GondorForgedBlades Upgrade_GondorHeavyArmor
  1532. End
  1533.  
  1534. //////////////////////////////////////////////////////////////////////////////////
  1535. ChildObject GondorKnightHorde_Summoned GondorKnightHorde
  1536.     IsTrainable = No
  1537.     CommandPoints = 0
  1538.     CommandSet = GondorKnightHordeCommandSet_Summoned
  1539.     EquivalentTo = GondorKnightHorde
  1540.  
  1541.     DisplayName = OBJECT:HordeGondorKnight
  1542.  
  1543.     Behavior = HorseHordeContain ModuleTag_HordeContain
  1544.         
  1545.         FrontAngle = 270
  1546.         FlankedDelay = 2000
  1547.         ObjectStatusOfContained = 
  1548.         InitialPayload = GondorCavalry_Summoned GOOD_RIDER_LARGE_HORDE_SIZE
  1549.         Slots = 10
  1550.         PassengerFilter = NONE +CAVALRY +GondorCavalryBanner
  1551.         ShowPips = No
  1552.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1553.         RandomOffset=X:0 Y:0
  1554.         MeleeBehavior = Amoeba
  1555.         End
  1556.  
  1557.         RankInfo = RankNumber:1 UnitType:GondorCavalry Position:X:40 Y:0        Position:X:40 Y:15        Position:X:40 Y:-15        Position:X:40 Y:30        Position:X:40 Y:-30 
  1558.         RankInfo = RankNumber:2 UnitType:GondorCavalry Position:X:10 Y:0 Leader 1 0    Position:X:10 Y:15 Leader 1 1    Position:X:10 Y:-15 Leader 1 2    Position:X:10 Y:30 Leader 1 3    Position:X:10 Y:-30 Leader 1 4
  1559.         
  1560.         RanksToReleaseWhenAttacking = 1 
  1561.  
  1562.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  1563.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  1564.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  1565.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  1566.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  1567.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.    
  1568.     End
  1569.     
  1570.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  1571.     // This one displays the timer, but the one in the uint does the work 
  1572.         MinLifetime        = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  1573.         MaxLifetime        = CREATE_A_HERO_REINFORCEMENT_LIFETIME
  1574.         DeathType        = FADED
  1575.     End    
  1576. End
  1577.  
  1578. //------------------------------------------------------------------------------
  1579. Object RohanRohirrimHorde
  1580.  
  1581.     // This is required for garrisoned objects - please put in all objects.
  1582.     ButtonImage        = WOR_Rohirrim
  1583.     SelectPortrait    = UPGondor_Rohirrim
  1584.  
  1585.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  1586.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR EMOTION_CELEBRATING
  1587.         DefaultModelConditionState
  1588.             Model = None //InvisHrdeTmp5x1
  1589.         End
  1590.         ModelConditionState = HORDE_EMPTY
  1591.             Model = None
  1592.         End        
  1593.         ModelConditionState = WORLD_BUILDER
  1594.             Model = HordeMarkRURoh
  1595.         End
  1596.     End
  1597.     
  1598.     Side = Men
  1599.     EditorSorting = UNIT
  1600.     EmotionRange = 240
  1601.     DisplayName = OBJECT:HordeRohanRohirrim
  1602.     DisplayNameStrategic = CONTROLBAR:LW_Unit_RohanRohirrimHorde
  1603.     DescriptionStrategic = CONTROLBAR:LW_ToolTip_RohanRohirrimHorde
  1604.     
  1605.     WeaponSet
  1606.         Conditions    = None 
  1607.         Weapon        = PRIMARY    NormalMeleeHordeRangefinder        // Spear
  1608.     End
  1609.  
  1610.     WeaponSet
  1611.         Conditions    = WEAPONSET_TOGGLE_1 
  1612.         Weapon        = PRIMARY    NormalMissileHordeRangefinder    // Bow
  1613.     End
  1614.  
  1615.     // *** AUDIO Parameters ***//
  1616.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  1617.     // are always passed through to members
  1618.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  1619.  
  1620.     BuildCost = ROHAN_ROHIRRIM_BUILDCOST            
  1621.     BuildTime = ROHAN_ROHIRRIM_BUILDTIME            
  1622.     VisionRange = ROHAN_ROHIRRIM_HORDE_VISION_RANGE
  1623.     ShroudClearingRange = ROHAN_ROHIRRIM_HORDE_SHROUD_RANGE 
  1624.     VisionSide = 50%
  1625.     VisionRear = 25%
  1626.     MaxVisionBonusPercent = 300%
  1627.     VisionBonusTestRadius = 200
  1628.     VisionBonusPercentPerFoot = 1.0%
  1629.     CommandPoints = 60
  1630.           
  1631.     FormationWidth = 2 // Width it occupies in formations. Current choices are 1 or 2.
  1632.     FormationDepth = 1 // Depth it occupies in formations. Current choices are 1 or 2.
  1633.     
  1634.     CrushableLevel = 2  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  1635.     CrusherLevel = 1 
  1636.     MinCrushVelocityPercent = 50% // Has to be moving at at least 25% of full speed.
  1637.     CrushDecelerationPercent = 30% // Lose 10 percent (100/5 horde members) of max velocity when crushing.
  1638.     CrushKnockback = 40  // how hard we knock back crushed units.
  1639.     CrushZFactor = 1.0  // How much we knock upwards.
  1640.         
  1641.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  1642.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAVALRY HORDE MELEE_HORDE  ARMY_SUMMARY  LARGE_RECTANGLE_PATHFIND//UNATTACKABLE 
  1643.     CommandSet = RohirrimHordeCommandSet
  1644.     
  1645.     Body = ImmortalBody ModuleTag_ImmortalBody
  1646.         MaxHealth = 1
  1647.     End
  1648.     
  1649.     ThreatLevel = ROHAN_ROHIRRIM_HORDE_THREAT
  1650.     ThreatBreakdown RohanRohirrimHorde_DetailedThreat
  1651.         AIKindOf = CAVALRY
  1652.     End
  1653.     
  1654.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  1655.         StanceTemplate = CavalryHorde
  1656.     End
  1657.  
  1658.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  1659.         AutoAcquireEnemiesWhenIdle    = Yes ATTACK_BUILDINGS
  1660.         MoodAttackCheckRate            = 500
  1661.         MaxCowerTime                = 5000
  1662.         MinCowerTime                = 3000
  1663.         AILuaEventsList                = CavalryFunctions  
  1664.         AttackPriority                = AttackPriority_Cavalry
  1665.     End
  1666.  
  1667.     Behavior = HorseHordeContain ModuleTag_HordeContain
  1668.         
  1669.         FrontAngle = 270
  1670.         FlankedDelay = 2000
  1671.         ObjectStatusOfContained = 
  1672.         InitialPayload = RohanRohirrim  GOOD_RIDER_LARGE_HORDE_SIZE
  1673.         Slots = 10
  1674.         PassengerFilter = NONE +CAVALRY +RohanBanner
  1675.         ShowPips = No
  1676.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1677.         RandomOffset=X:0 Y:0
  1678.         MeleeBehavior = Amoeba
  1679.         End
  1680.  
  1681.         // Banner Carrier info        
  1682.         BannerCarriersAllowed    = RohanBanner                                        // types of units that are allowed as banner carriers
  1683.         BannerCarrierPosition    = UnitType:RohanRohirrim    Pos:X:70.0 Y:0.0        // (DEFAULT) position of banner carrier for archer horde
  1684.         
  1685.         RankInfo = RankNumber:1 UnitType:RohanRohirrim Position:X:40 Y:0        Position:X:40 Y:15        Position:X:40 Y:-15        Position:X:40 Y:30        Position:X:40 Y:-30 
  1686.         RankInfo = RankNumber:2 UnitType:RohanRohirrim Position:X:10 Y:0 Leader 1 0    Position:X:10 Y:15 Leader 1 1    Position:X:10 Y:-15 Leader 1 2    Position:X:10 Y:30 Leader 1 3    Position:X:10 Y:-30 Leader 1 4
  1687.         
  1688.         RanksToReleaseWhenAttacking = 1 2
  1689.  
  1690.         MeleeAttackLeashDistance = 1   //How far the hordes    can    move from the center of    the    horde when melee attacking.                  
  1691.         BackUpMinDelayTime         = 1    //The minimum amount of    time to    delay before backing up
  1692.         BackUpMaxDelayTime         = 3000    //The maximum amount of    time to    delay before backing up
  1693.         BackUpMinDistance         = 1    //The minimum number of    cells to backup
  1694.         BackUpMaxDistance         = 3    //The maximum number of    cells to backup
  1695.         BackupPercentage         = 80%    //The amount of    chance that    a unit will    back up.    
  1696.     End
  1697.  
  1698.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  1699.         GravityMult = 1.0
  1700.     End
  1701.     
  1702.     Behavior = HordeNotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
  1703.         ScanWidth = 70.0 ; A little less than the width of the horde (which is 2 * 40 = 80)
  1704.     End
  1705.  
  1706.     Behavior = EmotionTrackerUpdate    Module_EmotionTracker
  1707.         TauntAndPointDistance        =    INFANTRY_TAUNT_POINT_RADIUS        // max distance to taunted/pointed objet
  1708.          TauntAndPointUpdateDelay    =    1000    // how often scan (milliseconds)
  1709.          TauntAndPointExcluded        =    NONE
  1710.         AfraidOf                    =    EMOTION_AFRAIDOF_OBJECTFILTER
  1711.         AlwaysAfraidOf                =    EMOTION_ALWAYS_AFRAIDOF_OBJECTFILTER
  1712.          PointAt                        =    EMOTION_POINTAT_OBJECTFILTER
  1713.          HeroScanDistance            =    150
  1714.          FearScanDistance            =    CAVALRY_FEAR_SCAN_RADIUS
  1715.          
  1716.         AddEmotion            =    Terror_Base
  1717.         AddEmotion            =    Doom_Base
  1718.         AddEmotion            =   BraceForBeingCrushed_Base
  1719.         AddEmotion            =    UncontrollableFear_Base
  1720.         AddEmotion            =    FearIdle_Base
  1721.         AddEmotion            =    FearBusy_Base
  1722.         AddEmotion            =    Point_Base
  1723.         AddEmotion            =    Taunt_Base
  1724.          AddEmotion            =    CheerIdle_Base
  1725.         AddEmotion            =    CheerBusy_Base
  1726.         AddEmotion            =    HeroCheerIdle_Base
  1727.         AddEmotion            =    HeroCheerBusy_Base
  1728.         AddEmotion            =    Alert_Base
  1729.         AddEmotion    =   CheerForAboutToCrush_Base
  1730.         
  1731.      End        
  1732.     
  1733.     LocomotorSet
  1734.         Locomotor     = NormalCavalryHordeLocomotor
  1735.         Condition     = SET_NORMAL
  1736.         Speed         = NORMAL_CAVALRY_FAST_HORDE_SPEED
  1737.     End
  1738.  
  1739.     Behavior = ProductionUpdate ProductionUpdateModuleTag
  1740.         GiveNoXP = Yes
  1741.     End
  1742.  
  1743.     Behavior = LevelUpUpgrade ModuleTag_BasicTraining
  1744.         TriggeredBy = Upgrade_RohanBasicTraining 
  1745.         LevelsToGain = 1
  1746.         LevelCap = 2
  1747.     End
  1748.     
  1749.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality
  1750.         TriggeredBy =  Upgrade_RohanForgedBladesForRohirrim 
  1751.     End
  1752.     
  1753.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality2
  1754.         TriggeredBy = Upgrade_RohanHeavyArmorForRohirrim 
  1755.     End
  1756.     
  1757.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality3
  1758.         TriggeredBy = Upgrade_RohanHorseShield 
  1759.     End
  1760.  
  1761.     Behavior = StatusBitsUpgrade ModuleTag_ProductionLegality4
  1762.         TriggeredBy = Upgrade_RohanFireArrows 
  1763.     End
  1764.  
  1765.     //Toggle CommandSet Based on Weaponset condition flags
  1766.     Behavior = MonitorConditionUpdate ModuleTag_CommandSetSwapper
  1767.         WeaponSetFlags            = WEAPONSET_TOGGLE_1
  1768.         WeaponToggleCommandSet    = RohirrimHordeBowCommandSet
  1769.     End
  1770.     
  1771.     Behavior = PickupStuffUpdate ModuleTag_PickupStuffUpdate
  1772.         SkirmishAIOnly = Yes
  1773.         StuffToPickUp = NONE +CRATE
  1774.         ScanRange = 200
  1775.         ScanIntervalSeconds = 0.5
  1776.     End
  1777.     
  1778.     #include "..\..\..\includes\CaptureBuilding.inc"
  1779.     
  1780.     /////////////////////
  1781.     // AISpecialPowers
  1782.     /////////////////////
  1783.     
  1784.     Behavior = AISpecialPowerUpdate MenRohirrimHordeCaptureBuildingAI
  1785.         CommandButtonName = Command_CaptureBuilding
  1786.         SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
  1787.     End
  1788.     
  1789.     Geometry = BOX
  1790.     GeometryMajorRadius = 30.0
  1791.     GeometryMinorRadius = 40.0
  1792.     GeometryHeight = 20.0
  1793.     GeometryIsSmall = No
  1794.     
  1795.     
  1796.     // *** AUTO RESOLVE DATA *** 
  1797.     AutoResolveUnitType = AutoResolveUnit_Cavalry
  1798.     AutoResolveCombatChain = AutoResolve_CavalryCombatChain
  1799.     
  1800.     AutoResolveBody = AutoResolve_RohanRohirrimHordeBody
  1801.     
  1802.     AutoResolveArmor
  1803.         RequiredUpgrades = Upgrade_RohanHeavyArmorForRohirrim
  1804.         Armor = AutoResolve_RohanRohirrimHeavyArmor
  1805.     End
  1806.  
  1807.     AutoResolveArmor
  1808.         ExcludedUpgrades = Upgrade_RohanHeavyArmorForRohirrim
  1809.         Armor = AutoResolve_RohanRohirrimArmor
  1810.     End
  1811.  
  1812.     AutoResolveWeapon
  1813.         RequiredUpgrades = Upgrade_RohanForgedBladesForRohirrim Upgrade_RohanFireArrows
  1814.         Weapon = AutoResolve_RohanRohirrimForgedBladesAndFireArrows
  1815.     End
  1816.  
  1817.     AutoResolveWeapon
  1818.         RequiredUpgrades = Upgrade_RohanFireArrows
  1819.         Weapon = AutoResolve_RohanRohirrimFireArrows
  1820.     End
  1821.  
  1822.     AutoResolveWeapon
  1823.         RequiredUpgrades = Upgrade_RohanForgedBladesForRohirrim
  1824.         Weapon = AutoResolve_RohanRohirrimForgedBlades
  1825.     End
  1826.  
  1827.     AutoResolveWeapon
  1828.         ExcludedUpgrades = Upgrade_RohanForgedBladesForRohirrim Upgrade_RohanFireArrows
  1829.         Weapon = AutoResolve_RohanRohirrimWeapon
  1830.     End
  1831.     
  1832.     WorldMapArmoryUpgradesAllowed = Upgrade_RohanBasicTraining Upgrade_RohanForgedBladesForRohirrim Upgrade_RohanFireArrows Upgrade_RohanHeavyArmorForRohirrim
  1833. End
  1834.  
  1835. //////////////////////////////////////////////////////////////////////////////////
  1836. ChildObject RohanRohirrimHorde_Summoned RohanRohirrimHorde
  1837.     IsTrainable = No
  1838.     CommandPoints = 0
  1839.     CommandSet = RohirrimHordeCommandSet_Summoned
  1840.     EquivalentTo = RohanRohirrimHorde
  1841.     
  1842.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAVALRY HORDE MELEE_HORDE SUMMONED LARGE_RECTANGLE_PATHFIND
  1843.     
  1844.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  1845.     // This one displays the timer, but the one in the uint does the work 
  1846.         MinLifetime        = 180000
  1847.         MaxLifetime        = 180000
  1848.         DeathType        = FADED
  1849.     End    
  1850.     Behavior = HorseHordeContain ModuleTag_HordeContain
  1851.         ObjectStatusOfContained = 
  1852.         InitialPayload = RohanRohirrim_Summoned GOOD_RIDER_HORDE_SIZE
  1853.         Slots = 5
  1854.         PassengerFilter = NONE +CAVALRY //+RohanBanner
  1855.         ShowPips = No
  1856.         RandomOffset = X:3 Y:4
  1857.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1858.  
  1859.         // Banner Carrier info        
  1860. //        BannerCarriersAllowed    = RohanBanner                                        // types of units that are allowed as banner carriers
  1861. //        BannerCarrierPosition    = UnitType:RohanRohirrim    Pos:X:75.0 Y:0.0        // (DEFAULT) position of banner carrier for archer horde
  1862.         
  1863.         RankInfo = RankNumber:1 UnitType:RohanRohirrim_Summoned Position:X:6 Y:0        Position:X:0 Y:25        Position:X:0 Y:-25        Position:X:-7 Y:50        Position:X:-7 Y:-50 
  1864.  
  1865.         RanksToReleaseWhenAttacking = 1
  1866.         MeleeAttackLeashDistance = 25// How far the hordes can move from the center of the horde when melee attacking.
  1867.     End
  1868.  
  1869. End
  1870.  
  1871. //////////////////////////////////////////////////////////////////////////////////
  1872. Object RohanOathbreakerHorde
  1873.  
  1874.     SelectPortrait         = UPOathBreakers
  1875.  
  1876.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  1877.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR
  1878.         DefaultModelConditionState
  1879.             Model = None //InvisHrdeTmp
  1880.         End
  1881.         ModelConditionState = HORDE_EMPTY
  1882.             Model = None
  1883.         End        
  1884.         ModelConditionState = WORLD_BUILDER
  1885.             Model = HordeMarkRUOat
  1886.         End
  1887.     End
  1888.     
  1889.     
  1890.     Side = Men
  1891.     EditorSorting = UNIT
  1892.     EmotionRange = 240
  1893.     DisplayName = OBJECT:HordeOathBreakers
  1894.     
  1895.     WeaponSet
  1896.         Conditions = None 
  1897.         Weapon = PRIMARY    OathbreakerSword // NormalMeleeHordeRangefinder
  1898. //        Weapon = PRIMARY    NormalMeleeHordeRangefinder
  1899.     End
  1900.     
  1901.     CommandSet = RohanOathbreakerHordeCommandSet
  1902.  
  1903.     // *** AUDIO Parameters ***//
  1904.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  1905.     // are always passed through to members
  1906.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  1907.  
  1908.  
  1909.     BuildCost = 0 //not build just spawned
  1910.     BuildTime = 0       
  1911.     VisionRange = 500
  1912.     VisionSide = 50%
  1913.     VisionRear = 25%
  1914.     VisionBonusPercentPerFoot = 1.0%
  1915.     CommandPoints = 50 
  1916.     
  1917.     // AOD can crush anything.
  1918.     CrushableLevel = 4  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  1919.     CrusherLevel = 5 
  1920.     MinCrushVelocityPercent = 0% // Always crushes
  1921.     CrushDecelerationPercent = 0% // Lose 0 percent of max velocity when crushing.
  1922.     CrushKnockback = 0  // Don't knock back.
  1923.     CrushZFactor = 100.0  // How much we knock upwards.
  1924.  
  1925.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  1926.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE MELEE_HORDE NO_FORMATION_MOVEMENT ARMY_OF_DEAD SCARY SUMMONED //UNATTACKABLE 
  1927.     
  1928.     Body = ImmortalBody ModuleTag_ImmortalBody
  1929.         MaxHealth = 1
  1930.     End
  1931.     
  1932.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  1933.         AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS
  1934.         MoodAttackCheckRate        = 500
  1935.         MaxCowerTime                =    5000
  1936.         MinCowerTime                =    3000
  1937.         AttackPriority                =     DefaultAttackPriority
  1938.     End
  1939.  
  1940.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  1941.         MinLifetime        = OATHBREAKER_LIFETIME
  1942.         MaxLifetime        = OATHBREAKER_LIFETIME
  1943.         DeathType       = FADED
  1944.     End    
  1945.  
  1946.     Behavior = AODHordeContain ModuleTag_HordeContain
  1947.         ObjectStatusOfContained = 
  1948.         InitialPayload = RohanOathbreaker OATHBREAKER_HORDE_SIZE
  1949.         Slots = 40
  1950.         PassengerFilter = ANY +INFANTRY +CAVALRY
  1951.         ShowPips = No
  1952.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  1953.         RandomOffset = X:0 Y:0 // X:25 Y:25
  1954.         
  1955.         // AOD sine wave movement.
  1956.         FrequencyScale = 0.3// // how fast they move left to right.
  1957.         FrequencyRandomness = 0.3// how random - 0==no randomness, 1.0 = very random.
  1958.         AmplitudeScale = 20// how far they move left to right.
  1959.         AmplitudeRandomness = 0.4// how random - 0==no randomness, 1.0 = very random.
  1960.         StillAmplitude = 0.10// // how much they move left to right when not moving. 0==none, 1.0==full movement.
  1961.  
  1962.         // z movement.
  1963.         FrequencyScaleZ = 0.2// // how fast they move up&down.
  1964.         FrequencyRandomnessZ = 0.4// how random - 0==no randomness, 1.0 = very random.
  1965.         AmplitudeScaleZ = 4// how far they up and down.
  1966.         AmplitudeRandomnessZ = 0.2// how random - 0==no randomness, 1.0 = very random.
  1967.         StillAmplitudeZ = 0.15// // how much they move up & down when not moving. 0==none, 1.0==full movement.
  1968.         
  1969.         // Horde flowing up over large units it kills.
  1970.         LargeUnitHeightFactor = 0.85 // Start with this * the object's geometry height.
  1971.         LargeUnitMinHeight = 20.0// Go up at least this amount.
  1972.         LargeUnitMaxHeight = 300.0// Go up at no more than amount.
  1973.         LargeUnitTimeout = 12000// How long the horde flows up over the unit, ms.  4000==4 seconds.
  1974.         LargeUnitTailOff = 2.0f// How quickly the units drop back to the ground.
  1975.         
  1976.         // Oath fulfilled behavior.
  1977. //E3 No up        OathFulfilledZFactor = 0.5 // How fast they rise up after oath is fulfilled.
  1978.         ScatterSpeedFactor = 0.4// How fast they scatter.
  1979.         ScatterRandomness = 0.1// How random the scatter speed is.
  1980.         
  1981.         // Positions for 40
  1982.         RankInfo = RankNumber:1 UnitType:RohanOathbreaker    Position:X:45            Y:0    Position:X:45 Y:90        Position:X:45 Y:-45        //Position:X:45 Y:45    
  1983.         RankInfo = RankNumber:6 UnitType:RohanOathbreaker Position:X:45 Y:45    
  1984.         RankInfo = RankNumber:2 UnitType:RohanOathbreaker    Position:X:0            Y:0    Position:X:0 Y:45        Position:X:0 Y:90        //Position:X:0 Y:-45            
  1985.         RankInfo = RankNumber:7 UnitType:RohanOathbreaker Position:X:0 Y:-45    
  1986.         RankInfo = RankNumber:3 UnitType:RohanOathbreaker    Position:X:-45 Y:0    Position:X:-45 Y:45            Position:X:-45 Y:-45    //Position:X:-45 Y:90        
  1987.         RankInfo = RankNumber:8 UnitType:RohanOathbreaker Position:X:-45 Y:90    
  1988.         RankInfo = RankNumber:4 UnitType:RohanOathbreaker    Position:X:-91 Y:45    Position:X:-91 Y:-45        Position:X:-91 Y:90        //Position:X:-91 Y:0        
  1989.         RankInfo = RankNumber:9 UnitType:RohanOathbreaker Position:X:-91 Y:0    
  1990.         RankInfo = RankNumber:5 UnitType:RohanOathbreaker    Position:X:-135 Y:0    Position:X:-135 Y:45            Position:X:-135 Y:-45    Position:X:-135 Y:90        
  1991.  
  1992.         RankInfo = RankNumber:10 UnitType:RohanOathbreaker    Position:X:-180            Y:0    Position:X:-180 Y:90        Position:X:-180 Y:-45        //Position:X:-180 Y:45    
  1993.         RankInfo = RankNumber:15 UnitType:RohanOathbreaker Position:X:-180 Y:45    
  1994.         RankInfo = RankNumber:11 UnitType:RohanOathbreaker    Position:X:-225            Y:0    Position:X:-225 Y:45        Position:X:-225 Y:90        //Position:X:-225 Y:-45            
  1995.         RankInfo = RankNumber:16 UnitType:RohanOathbreaker Position:X:-225 Y:-45    
  1996.         RankInfo = RankNumber:12 UnitType:RohanOathbreaker    Position:X:-270 Y:0    Position:X:-270 Y:45            Position:X:-270 Y:-45    //Position:X:-270 Y:90        
  1997.         RankInfo = RankNumber:17 UnitType:RohanOathbreaker Position:X:-270 Y:90    
  1998.         RankInfo = RankNumber:13 UnitType:RohanOathbreaker    Position:X:-315 Y:45    Position:X:-315 Y:-45        Position:X:-315 Y:90        //Position:X:-315 Y:0        
  1999.         RankInfo = RankNumber:18 UnitType:RohanOathbreaker Position:X:-315 Y:0    
  2000.         RankInfo = RankNumber:14 UnitType:RohanOathbreaker    Position:X:-360 Y:0    Position:X:-360 Y:45            Position:X:-360 Y:-45    Position:X:-360 Y:90        
  2001.         // Positions for 20
  2002.         //RankInfo = RankNumber:1 UnitType:RohanOathbreaker    Position:X:45            Y:0    Position:X:45 Y:90        Position:X:45 Y:-45        //Position:X:45 Y:45    
  2003.         //RankInfo = RankNumber:6 UnitType:RohanOathbreakersCavalry Position:X:45 Y:45    
  2004.         //RankInfo = RankNumber:2 UnitType:RohanOathbreaker    Position:X:0            Y:0    Position:X:0 Y:45        Position:X:0 Y:90        //Position:X:0 Y:-45            
  2005.         //RankInfo = RankNumber:7 UnitType:RohanOathbreakersCavalry Position:X:0 Y:-45    
  2006.         //RankInfo = RankNumber:3 UnitType:RohanOathbreaker    Position:X:-45 Y:0    Position:X:-45 Y:45            Position:X:-45 Y:-45    //Position:X:-45 Y:90        
  2007.         //RankInfo = RankNumber:8 UnitType:RohanOathbreakersCavalry Position:X:-45 Y:90    
  2008.         //RankInfo = RankNumber:4 UnitType:RohanOathbreaker    Position:X:-91 Y:45    Position:X:-91 Y:-45        Position:X:-91 Y:90        //Position:X:-91 Y:0        
  2009.         //RankInfo = RankNumber:9 UnitType:RohanOathbreakersCavalry Position:X:-91 Y:0    
  2010.         //RankInfo = RankNumber:5 UnitType:RohanOathbreaker    Position:X:-135 Y:0    Position:X:-135 Y:45            Position:X:-135 Y:-45    Position:X:-135 Y:90        
  2011.  
  2012.         // Positions for 10
  2013.         // RankInfo = RankNumber:1 UnitType:RohanOathbreaker Position:X:10 Y:0    Position:X:10 Y:20        Position:X:10 Y:-20        Position:X:10 Y:40        Position:X:10 Y:-40 
  2014.         // RankInfo = RankNumber:2 UnitType:RohanOathbreaker Position:X:-10 Y:0    Position:X:-10 Y:20        Position:X:-10 Y:-20    Position:X:-10 Y:40        Position:X:-10 Y:-40 
  2015.         
  2016.         RanksToReleaseWhenAttacking = 1 2 
  2017.         
  2018.     End
  2019.  
  2020.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  2021.         GravityMult = 1.0
  2022.     End
  2023.     
  2024.     Behavior = OathbreakersFadeAwayBehavior ModuleTag_05
  2025.         FadeOutTime   = 999999 // Hordes don't fade out, members do.
  2026.     End
  2027.  
  2028.   Behavior = CommandButtonHuntUpdate ModuleTag_CommandButtonHuntUpdate
  2029.   End
  2030.     
  2031.     Behavior = HordeNotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
  2032.         ScanWidth = 30.0 ; A little less than the width of the horde (which is 2 * 20 = 40)
  2033.     End
  2034.  
  2035.     LocomotorSet
  2036.         Locomotor     = AODHordeLocomotor
  2037.         Condition     = SET_NORMAL
  2038.         Speed         = 65
  2039.     End
  2040.  
  2041.     Geometry = BOX
  2042.     GeometryMajorRadius = 20.0
  2043.     GeometryMinorRadius = 20.0
  2044.     GeometryHeight = 10.0
  2045.     GeometryIsSmall = No
  2046. End
  2047.  
  2048. //////////////////////////////////////////////////////////////////////////////////
  2049. Object RohanOathbreakerHordeSmall // used for Aragorn's oathbreaker summon skill
  2050.  
  2051.     SelectPortrait         = UPOathBreakers
  2052.  
  2053.     Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
  2054.         DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR
  2055.         DefaultModelConditionState
  2056.             Model = None //InvisHrdeTmp
  2057.         End
  2058.         ModelConditionState = HORDE_EMPTY
  2059.             Model = None
  2060.         End        
  2061.         ModelConditionState = WORLD_BUILDER
  2062.             Model = HordeMarkRUOat
  2063.         End
  2064.     End
  2065.     
  2066.     
  2067.     Side = Men
  2068.     IsTrainable = No
  2069.     EditorSorting = UNIT
  2070.     EmotionRange = 240
  2071.     DisplayName = OBJECT:HordeOathBreakers
  2072.     
  2073.     WeaponSet
  2074.         Conditions = None 
  2075.         Weapon = PRIMARY    OathbreakerSword // NormalMeleeHordeRangefinder
  2076.     End
  2077.     
  2078.     CommandSet = RohanOathbreakerHordeSmallCommandSet
  2079.  
  2080.     // *** AUDIO Parameters ***//
  2081.     // Note: Don't put voice parameters here -- they will be ignored. Voice play requests
  2082.     // are always passed through to members
  2083.     #include "..\..\..\includes\StandardHordeEvaEvents.inc"
  2084.  
  2085.     BuildCost = 700
  2086.     BuildTime = 20.0 //5.0      
  2087.     VisionRange = 500
  2088.     VisionSide = 50%
  2089.     VisionRear = 25%
  2090.     VisionBonusPercentPerFoot = 1.0%
  2091.     CommandPoints = 7
  2092.     
  2093.     // AOD can crush anything.
  2094.     CrushableLevel = 4  //What am I?:        0 = for infantry, 1 = for trees, 2 = general vehicles
  2095.     CrusherLevel = 5 
  2096.     MinCrushVelocityPercent = 0% // Always crushes
  2097.     CrushDecelerationPercent = 0% // Lose 0 percent of max velocity when crushing.
  2098.     CrushKnockback = 0  // Don't knock back.
  2099.     CrushZFactor = 100.0  // How much we knock upwards.
  2100.  
  2101.     TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
  2102.     KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE NO_FORMATION_MOVEMENT ARMY_OF_DEAD SCARY SUMMONED LARGE_RECTANGLE_PATHFIND //UNATTACKABLE 
  2103.     
  2104.     Body = ImmortalBody ModuleTag_ImmortalBody
  2105.         MaxHealth = 1
  2106.     End
  2107.     
  2108.     Behavior = StancesBehavior ModuleTag_StancesBehavior
  2109.         StanceTemplate = FighterHorde
  2110.     End
  2111.  
  2112.     Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
  2113.         AutoAcquireEnemiesWhenIdle    =    Yes ATTACK_BUILDINGS
  2114.         MoodAttackCheckRate            =    500
  2115.         MaxCowerTime                =    5000
  2116.         MinCowerTime                =    3000
  2117.         AttackPriority                =     DefaultAttackPriority
  2118.     End
  2119.  
  2120.     Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
  2121.         MinLifetime        = OATHBREAKER_LIFETIME
  2122.         MaxLifetime        = OATHBREAKER_LIFETIME
  2123.         DeathType       = FADED
  2124.     End    
  2125.  
  2126.     Behavior = AODHordeContain ModuleTag_HordeContain
  2127.         ObjectStatusOfContained = 
  2128.         InitialPayload = RohanOathbreaker OATHBREAKER_SMALL_HORDE_SIZE //7
  2129.         //InitialPayload = RohanOathbreakersCavalry 8
  2130.         Slots = 16 //7
  2131.         PassengerFilter = ANY +INFANTRY +CAVALRY
  2132.         ShowPips = No
  2133.         ThisFormationIsTheMainFormation = Yes    //Used to determine which armorset to use (and anything else we want!)
  2134.         RandomOffset = X:0 Y:0 // X:25 Y:25
  2135.         
  2136.         // AOD sine wave movement.
  2137.         FrequencyScale = 0.3// // how fast they move left to right.
  2138.         FrequencyRandomness = 0.3// how random - 0==no randomness, 1.0 = very random.
  2139.         AmplitudeScale = 20// how far they move left to right.
  2140.         AmplitudeRandomness = 0.4// how random - 0==no randomness, 1.0 = very random.
  2141.         StillAmplitude = 0.10// // how much they move left to right when not moving. 0==none, 1.0==full movement.
  2142.  
  2143.         // z movement.
  2144.         FrequencyScaleZ = 0.2// // how fast they move up&down.
  2145.         FrequencyRandomnessZ = 0.4// how random - 0==no randomness, 1.0 = very random.
  2146.         AmplitudeScaleZ = 4// how far they up and down.
  2147.         AmplitudeRandomnessZ = 0.2// how random - 0==no randomness, 1.0 = very random.
  2148.         StillAmplitudeZ = 0.15// // how much they move up & down when not moving. 0==none, 1.0==full movement.
  2149.         
  2150.         // Horde flowing up over large units it kills.
  2151.         LargeUnitHeightFactor = 0.85 // Start with this * the object's geometry height.
  2152.         LargeUnitMinHeight = 20.0// Go up at least this amount.
  2153.         LargeUnitMaxHeight = 300.0// Go up at no more than amount.
  2154.         LargeUnitTimeout = 12000// How long the horde flows up over the unit, ms.  4000==4 seconds.
  2155.         LargeUnitTailOff = 2.0f// How quickly the units drop back to the ground.
  2156.         
  2157.         // Oath fulfilled behavior.
  2158. //E3 No up        OathFulfilledZFactor = 0.5 // How fast they rise up after oath is fulfilled.
  2159.         ScatterSpeedFactor = 0.4// How fast they scatter.
  2160.         ScatterRandomness = 0.1// How random the scatter speed is.
  2161.         
  2162.         // Positions for 10
  2163.         RankInfo = RankNumber:1 UnitType:RohanOathbreaker Position:X:10 Y:0    Position:X:10 Y:30        Position:X:10 Y:-30        Position:X:10 Y:60        //Position:X:10 Y:-60 
  2164.         RankInfo = RankNumber:2 UnitType:RohanOathbreaker Position:X:-10 Y:0    Position:X:-10 Y:30        Position:X:-10 Y:-30        Position:X:-10 Y:60        //Position:X:-10 Y:-60 
  2165.         RankInfo = RankNumber:2 UnitType:RohanOathbreaker Position:X:-30 Y:0    Position:X:-30 Y:30        Position:X:-30 Y:-30        Position:X:-30 Y:60        //Position:X:-30 Y:-60 
  2166.         RankInfo = RankNumber:2 UnitType:RohanOathbreaker Position:X:-50 Y:0    Position:X:-50 Y:30        Position:X:-50 Y:-30        Position:X:-50 Y:60        //Position:X:-50 Y:-60         
  2167.         RanksToReleaseWhenAttacking = 1 2 3 4
  2168.         
  2169.         //AlternateFormation = GondorFighterHordeWedge
  2170.     End
  2171.  
  2172.     Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
  2173.         GravityMult = 1.0
  2174.     End
  2175.     
  2176.     Behavior = HordeNotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
  2177.         ScanWidth = 20.0 ; A little less than the width of the horde (which is 2 * 15 = 30)
  2178.     End
  2179.  
  2180.     Behavior = OathbreakersFadeAwayBehavior ModuleTag_05
  2181.         FadeOutTime   = 999999 // Hordes don't fade out, members do.
  2182.     End
  2183.  
  2184.     Behavior = CommandButtonHuntUpdate ModuleTag_CommandButtonHuntUpdate
  2185.     End    
  2186.  
  2187.     LocomotorSet
  2188.         Locomotor     = AODHordeLocomotor
  2189.         Condition     = SET_NORMAL
  2190.         Speed         = 65
  2191.     End
  2192.  
  2193.     Geometry = BOX
  2194.     GeometryMajorRadius = 15.0
  2195.     GeometryMinorRadius = 15.0
  2196.     GeometryHeight = 10.0
  2197.     GeometryIsSmall = No
  2198. End
  2199.