CODE
Object MiddleEarthOathbreakerHorde
SelectPortrait = UPOathBreakers
Draw = W3DScriptedModelDraw ModuleTag_W3DModelDraw
DependencySharedModelFlags = EMOTION_ALERT EMOTION_MORALE_HIGH EMOTION_MORALE_LOW EMOTION_AFRAID EMOTION_COWER SELECTED EMOTION_TERROR
DefaultModelConditionState
Model = None //InvisHrdeTmp
End
ModelConditionState = HORDE_EMPTY
Model = None
End
ModelConditionState = WORLD_BUILDER
Model = HordeMarkRUOat
End
End
Side = MiddleEarth
EditorSorting = UNIT
EmotionRange = 240
DisplayName = OBJECT:HordeOathBreakers
WeaponSet
Conditions = None
Weapon = PRIMARY OathbreakerSword // NormalMeleeHordeRangefinder
// Weapon = PRIMARY NormalMeleeHordeRangefinder
End
CommandSet = RohanOathbreakerHordeCommandSet
// *** AUDIO Parameters ***//
// Note: Don't put voice parameters here -- they will be ignored. Voice play requests
// are always passed through to members
#include "..\..\..\includes\StandardHordeEvaEvents.inc"
BuildCost = 1000 //not build just spawned
BuildTime = 40
VisionRange = 500
VisionSide = 50%
VisionRear = 25%
VisionBonusPercentPerFoot = 1.0%
CommandPoints = 50
// AOD can crush anything.
CrushableLevel = 4 //What am I?: 0 = for infantry, 1 = for trees, 2 = general vehicles
CrusherLevel = 5
MinCrushVelocityPercent = 0% // Always crushes
CrushDecelerationPercent = 0% // Lose 0 percent of max velocity when crushing.
CrushKnockback = 0 // Don't knock back.
CrushZFactor = 100.0 // How much we knock upwards.
TransportSlotCount = TRANSPORTSLOTCOUNT_SMALL_HORDE
KindOf = SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT INFANTRY HORDE MELEE_HORDE NO_FORMATION_MOVEMENT ARMY_OF_DEAD SCARY SUMMONED //UNATTACKABLE
Body = ImmortalBody ModuleTag_ImmortalBody
MaxHealth = 1
End
Behavior = StancesBehavior ModuleTag_StancesBehavior
StanceTemplate = FighterHorde
End
Behavior = HordeAIUpdate ModuleTag_HordeAIUpdate
AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS
MoodAttackCheckRate = 500
MaxCowerTime = 5000
MinCowerTime = 3000
AttackPriority = DefaultAttackPriority
End
;Behavior = LifetimeUpdate ModuleTag_LifetimeUpdate
; MinLifetime = OATHBREAKER_LIFETIME
; MaxLifetime = OATHBREAKER_LIFETIME
; DeathType = FADED
;End
Behavior = AODHordeContain ModuleTag_HordeContain
ObjectStatusOfContained =
InitialPayload = RohanOathbreaker OATHBREAKER_HORDE_SIZE
Slots = 10
PassengerFilter = ANY +INFANTRY +CAVALRY
ShowPips = No
ThisFormationIsTheMainFormation = Yes //Used to determine which armorset to use (and anything else we want!)
RandomOffset = X:0 Y:0 // X:25 Y:25
// AOD sine wave movement.
FrequencyScale = 0.3// // how fast they move left to right.
FrequencyRandomness = 0.3// how random - 0==no randomness, 1.0 = very random.
AmplitudeScale = 20// how far they move left to right.
AmplitudeRandomness = 0.4// how random - 0==no randomness, 1.0 = very random.
StillAmplitude = 0.10// // how much they move left to right when not moving. 0==none, 1.0==full movement.
// z movement.
FrequencyScaleZ = 0.2// // how fast they move up&down.
FrequencyRandomnessZ = 0.4// how random - 0==no randomness, 1.0 = very random.
AmplitudeScaleZ = 4// how far they up and down.
AmplitudeRandomnessZ = 0.2// how random - 0==no randomness, 1.0 = very random.
StillAmplitudeZ = 0.15// // how much they move up & down when not moving. 0==none, 1.0==full movement.
// Horde flowing up over large units it kills.
LargeUnitHeightFactor = 0.85 // Start with this * the object's geometry height.
LargeUnitMinHeight = 20.0// Go up at least this amount.
LargeUnitMaxHeight = 300.0// Go up at no more than amount.
LargeUnitTimeout = 12000// How long the horde flows up over the unit, ms. 4000==4 seconds.
LargeUnitTailOff = 2.0f// How quickly the units drop back to the ground.
// Oath fulfilled behavior.
//E3 No up OathFulfilledZFactor = 0.5 // How fast they rise up after oath is fulfilled.
ScatterSpeedFactor = 0.4// How fast they scatter.
ScatterRandomness = 0.1// How random the scatter speed is.
// Positions for 40
//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
//RankInfo = RankNumber:6 UnitType:RohanOathbreaker Position:X:45 Y:45
//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
//RankInfo = RankNumber:7 UnitType:RohanOathbreaker Position:X:0 Y:-45
//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
//RankInfo = RankNumber:8 UnitType:RohanOathbreaker Position:X:-45 Y:90
//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
//RankInfo = RankNumber:9 UnitType:RohanOathbreaker Position:X:-91 Y:0
//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
//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
//RankInfo = RankNumber:15 UnitType:RohanOathbreaker Position:X:-180 Y:45
//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
//RankInfo = RankNumber:16 UnitType:RohanOathbreaker Position:X:-225 Y:-45
//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
//RankInfo = RankNumber:17 UnitType:RohanOathbreaker Position:X:-270 Y:90
//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
//RankInfo = RankNumber:18 UnitType:RohanOathbreaker Position:X:-315 Y:0
//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
// Positions for 20
//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
//RankInfo = RankNumber:6 UnitType:RohanOathbreakersCavalry Position:X:45 Y:45
//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
//RankInfo = RankNumber:7 UnitType:RohanOathbreakersCavalry Position:X:0 Y:-45
//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
//RankInfo = RankNumber:8 UnitType:RohanOathbreakersCavalry Position:X:-45 Y:90
//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
//RankInfo = RankNumber:9 UnitType:RohanOathbreakersCavalry Position:X:-91 Y:0
//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
// Positions for 10
RankInfo = RankNumber:1 UnitType:MiddleEarthOathbreaker 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
RankInfo = RankNumber:2 UnitType:MiddleEarthOathbreaker 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
RanksToReleaseWhenAttacking = 1 2
End
Behavior = PhysicsBehavior ModuleTag_PhysicsBehavior
GravityMult = 1.0
End
Behavior = OathbreakersFadeAwayBehavior ModuleTag_05
FadeOutTime = 999999 // Hordes don't fade out, members do.
End
Behavior = CommandButtonHuntUpdate ModuleTag_CommandButtonHuntUpdate
End
Behavior = HordeNotifyTargetsOfImminentProbableCrushingUpdate ModuleTag_NotifyCrushScan
ScanWidth = 30.0 ; A little less than the width of the horde (which is 2 * 20 = 40)
End
LocomotorSet
Locomotor = AODHordeLocomotor
Condition = SET_NORMAL
Speed = 65
End
/////////////////////
// AISpecialPowers
/////////////////////
Behavior = AISpecialPowerUpdate MenRohirrimHordeCaptureBuildingAI
CommandButtonName = Command_CaptureBuilding
SpecialPowerAIType = AI_SPECIAL_POWER_CAPTURE_BUILDING
End
Behavior = AISpecialPowerUpdate GondorFighterHordeStanceBattle
CommandButtonName = Command_SetStanceBattle
SpecialPowerAIType = AI_SPECIAL_POWER_STANCEBATTLE
End
Behavior = AISpecialPowerUpdate GondorFighterHordeStanceAggressive
CommandButtonName = Command_SetStanceAggressive
SpecialPowerAIType = AI_SPECIAL_POWER_STANCEAGGRESSIVE
End
Behavior = AISpecialPowerUpdate GondorFighterHordeHoldGround
CommandButtonName = Command_SetStanceHoldGround
SpecialPowerAIType = AI_SPECIAL_POWER_STANCEHOLDGROUND
End
Geometry = BOX
GeometryMajorRadius = 20.0
GeometryMinorRadius = 20.0
GeometryHeight = 10.0
GeometryIsSmall = No
End