;--------------------------------------------
Author: DeeZire
Website: http://www.deezire.net/index.php?

Updated By Chris for C&C Generals ZeroHour
Module List For Generals and ZeroHour.
This is created for use as reference only.

Note: Some of the parameters here where changed and\or added is for ZeroHour Only.
      Some parameters of Classic Generals might not work anymore.

NOTE: USE'EM MODULES PROPERLY OR YOU WILL KNOW THE TERRIBLE TRUTH..

;--------------------------------------------
;UPDATE : 10/14/07
  added special power ini's enum type list

;--------------------------------------------
;UPDATE : 06/16/08
  Added more descriptions to the modules.
  Added a few more missing entries.
  Corrected a few parameter descriptions.
;--------------------------------------------
;UPDATE: 08/04/08
  Added more discovered parameters by me.
  Added a few more discovered parameters by beng.
  Corrected a few parameters.
;--------------------------------------------
;UPDATE: 12/09/08
  Added a few more descriptions to the modules.
  Fixed a few double entries.
  Corrected a few typographical errors.
  Organized the modules a little bit.
;--------------------------------------------
;UPDATE: 01/22/09
  Corrcted a few module parameters with help from beng.
  Fixed a few typing errors again.
  Added abit more description to the module/parameters.


Modules:
ActiveBody
[this is a Body module not a Behavior module, The Subdual part of the module allows the use of JAMMED Model Condition State]
      MaxHealth = [integer]
      InitialHealth = [integer]

     [Subdual damage "Subdues" you (reaction defined by BodyModule) when it passes your max health.
      The cap limits how extra-subdued you can be, and the other numbers detemine how fast it drains away on its own.
      A Projectile or Missile doesn't get "subdued", Instead they loose stability and scatters.] 
      SubdualDamageCap = [integer]
      SubdualDamageHealRate = [integer]  
      SubdualDamageHealAmount = [integer] 
End

AnimationSteeringUpdate
    MinTransitionTime = [real number]
End

ActiveShroudUpgrade
[Once activated, It will create a black shroud around the object that triggered this
You cannot see it your self but it can be seen by your enemy]
 	TriggeredBy = [entry(s) from Upgrade.INI]
 	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
	NewShroudRange = [real number]
End

AIUpdateInterface
     AutoAcquireEnemiesWhenIdle = [Yes/No][NOTWHILEATTACKING/ATTACK_BUILDINGS/STEALTHED]
     MoodAttackCheckRate = [integer, milliseconds. default is 2000]
     ForbidPlayerCommands =  [Yes/No]
     TurretsLinked =[Yes/No]
[this part of the module allows the use of TurretMoveStart and TurretMoveLoop within UnitSpecificSounds section of the object]
  Turret
            TurretTurnRate = [integer]
            TurretPitchRate = [integer]
            NaturalTurretAngle = [integer, default 0 = horizontal]
            NaturalTurretPitch = [integer, default 0 = horizontal]
            FirePitch = [integer, default 0 = horizontal]
            MinPhysicalPitch = [integer, default 0 = horizontal]
            GroundUnitPitch = [integer, default 0 = horizontal] 
            TurretFireAngleSweep = [weaponslot][integer]
            TurretSweepSpeedModifier = [weaponslot    real number]
            ControlledWeaponSlots = [weaponslots]
    	    AllowsPitch = [Yes/No]
       	    MinIdleScanAngle = [real number]
      	    MaxIdleScanAngle = [real number]
            MinIdleScanInterval = [integer, milliseconds]
            MaxIdleScanInterval = [integer, milliseconds]
            RecenterTime = [integer,milliseconds]
            FiresWhileTurning = [Yes/No]
            InitiallyDisabled = [Yes/No]
    End
    AltTurret
        [as above]
    End
End

AnimatedParticleSysBoneClientUpdate
[no parameters - this module is a ClientUpdate not a Behavior and allows the object to have particle system effects dynamically attached to animated sub objects or bones]
End

ArmorUpgrade
[triggers use of PLAYER_UPGRADE ArmorSet on this object]
      TriggeredBy = [entry(s) from Upgrade.INI]
      FXListUpgrade = [entry(s) from FXList.INI]
      ConflictsWith = [entry(s) from Upgrade.INI]
      RequiresAllTriggers = [Yes/No]
End

AssaultTransportAIUpdate
[This AI, If armed with a weapon using the DEPLOY Damaged type, Will order the passengers
To hop out of the vehicle and attack the selected target. The passengers will auto return
If ordered to stop or the target is dead]
	AutoAcquireEnemiesWhenIdle = [Yes/No][NOTWHILEATTACKING/ATTACK_BUILDINGS/STEALTHED]
    MoodAttackCheckRate = [integer, milliseconds. default is 2000]
    ForbidPlayerCommands =  [Yes/No]
	MembersGetHealedAtLifeRatio = [real number]
	ClearRangeRequiredToContinueAttackMove = [interger]
End

AssistedTargetingUpdate
[Allows weapons (or defense) to relay with a similar weapon (or defense) within it's range.]
	AssistingClipSize = [integer]            [How many shots to make when asked by someone of my kind who has a RequestAssistRange weapon]
	AssistingWeaponSlot = [Weapon slot list] [And the weapon to use.  Should have huge range and no natural clip]
	LaserFromAssisted = [object name]        [Stream to draw from the requestor to me]
	LaserToTarget = [object name]            [Stream to draw from me to the target] 
End

AutoDepositUpdate
    ActualMoney   = [Yes/No]        [If set to No, This will not give you any money bonus. Instead, the "$" that appears above is used for props only]
 	DepositTiming = [milliseconds]  [Give me money (the player) every XXX milliseconds]
	DepositAmount = [integer]       [How much to give the player?]
	InitialCaptureBonus = [integer] [How much to give the player when you first capture the object]
    UpgradedBoost = [UpgradeType:[Entry From Upgrade.ini] Boost:[interger]]
End

AutoFindHealingUpdate
[This update will have the unit search for a healing station if injured]
[Extra note: This should be put below the AI Module and this works for AI units only]
    ScanRate = [milliseconds] ; how much we search for a healing station?
    ScanRange =[interger]     ; and how far we have to look for a healing station?
    NeverHeal = [0.1 to 1.0]  ; don't heal if we are > 85% healthy.
    AlwaysHeal = [0.1 to 1.0] ; if we get below 25%, find healing right away.
End

AutoHealBehavior
	TriggeredBy = [entry from Upgrade.INI, requires StartsActive = No]
	FXListUpgrade         = [entry from FXList.INI]
	ConflictsWith         = [entry from Upgrade.INI]
	RequiresAllTriggers   = [Yes/No] 
	HealingAmount = [integer]
	HealingDelay = [integer, milliseconds]
	StartHealingDelay = [integer, milliseconds]
	Radius = [real number]
	StartsActive = [Yes/No]
	SingleBurst = [Yes/No]
	AffectsWholePlayer = [Yes/No]
	KindOf = [KindOf list]
    ForbiddenKindOf = [KindOf list] 
	RadiusParticleSystemName = [entry from ParticleSystem.INI]
	UnitHealPulseParticleSystemName = [entry from ParticleSystem.INI]
    SkipSelfForHealing = [Yes/No]
End

BattleBusSlowDeathBehavior
[Requires the object to have the UndeadBody Module and allows the use of the SECOND_LIFE Model and Armour Conditionstate.] 
    DeathTypes = [DeathType listing]
	SinkRate = [real number]
	ExemptStatus = [status name]   
    RequiredStatus = [status name]
	ProbabilityModifier = [integer]
	ModifierBonusPerOverkillPercent = [percent]
	SinkDelay = [integer, milliseconds]
	SinkDelayVariance = [integer]
	DestructionDelay = [integer, milliseconds]
	DestructionDelayVariance = [integer]
	DestructionAltitude = [integer]
	FlingForce = [integer]
	FlingForceVariance = [integer]
	FlingPitch = [integer]
	FlingPitchVariance = [integer]
        FXStartUndeath = [Entry from Fxlist.ini]
        OCLStartUndeath = [Entry from ObjectCreationList.ini]
        FXHitGround = [Entry from Fxlist.ini]
        OCLHitGround = [Entry from ObjectCreationList.ini]
        DelayFromGroundToFinalDeath = [integer]
        ThrowForce = [integer]
        PercentDamageToPassengers =  [percent]
        EmptyHulkDestructionDelay = [integer]
	FX = [INITIAL/MIDPOINT/FINAL	Entry from FXList.INI, multiple statements can be used for multiple FX's]
	OCL = [INITIAL/MIDPOINT/FINAL	Entry from ObjectCreationList.INI, multiple statements can be used for multiple OCL's]
	Weapon = [INITIAL/MIDPOINT/FINAL Entry from Weapon.INI, multiple statements can be used for multiple "death" weapons.]
End

BunkerBusterBehavior
	UpgradeRequired             = [Entry from Upgrade.ini]   [Do we require an upgrade first?]           
	DetonationFX                = [Entry from FXList.ini]    [The big detonation kaboom at the bottom]
	CrashThroughBunkerFX        = [Entry from FXList.ini]    [FX Used when going thru the targeted bunker]
	CrashThroughBunkerFXFrequency = [interger, milliseconds] [How often to play the crash bang crunch FX on the way through the bunker ceiling?]
	SeismicEffectRadius           = [integer]
	SeismicEffectMagnitude        = [integer]
	ShockwaveWeaponTemplate       = [Entry from weapon.ini]  [What weapon should we use when we detonate on the ground?]
	OccupantDamageWeaponTemplate  = [Entry from weapon.ini]  [What weapon should we use when we clear a bunker?]
End

BaikonurLaunchPower
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	DetonationObject = [object name]
	StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
End

BaseRegenerateUpdate
[no parameters - forces object to auto-repair itself over time, parameters defined in GameData.INI through BaseRegenHealthPerSecond and BaseRegenDelay]
End

BattlePlanUpdate
	SpecialPowerTemplate = [entry from SpecialPower.INI]

    ;Transition Timings
	BombardmentPlanAnimationTime = [integer, milliseconds]
	HoldTheLinePlanAnimationTime = [integer, milliseconds]
	SearchAndDestroyPlanAnimationTime = [integer, milliseconds]
	TransitionIdleTime                = [integer, milliseconds]

    ;Audio hooks
	BombardmentAnnouncementName    = [entry from SoundEffects.INI]
	BombardmentPlanUnpackSoundName = [entry from SoundEffects.INI]
	BombardmentPlanPackSoundName   = [entry from SoundEffects.INI]

	SearchAndDestroyPlanUnpackSoundName   = [entry from SoundEffects.INI]
	SearchAndDestroyPlanIdleLoopSoundName = [entry from SoundEffects.INI]
	SearchAndDestroyPlanPackSoundName     = [entry from SoundEffects.INI]
	SearchAndDestroyAnnouncementName      = [entry from SoundEffects.INI]

	HoldTheLinePlanUnpackSoundName = [entry from SoundEffects.INI]
	HoldTheLinePlanPackSoundName  = [entry from SoundEffects.INI]
	HoldTheLineAnnouncementName   = [entry from SoundEffects.INI]


    ;battle plan labels
	HoldTheLineMessageLabel = [entry from string file]
	BombardmentMessageLabel = [entry from string file]
	SearchAndDestroyMessageLabel = [entry from string file]

    ;Army bonuses granted by different battle plans
	ValidMemberKindOf = [KindOf list]
	InvalidMemberKindOf = [KindOf list]
	BattlePlanChangeParalyzeTime = [integer, milliseconds]
	HoldTheLinePlanArmorDamageScalar = [real number]
	SearchAndDestroyPlanSightRangeScalar = [real number]

    ;***NOTE*** WEAPON bonuses for army are specified in GameData.ini file!
    ;Building bonuses granted based on battle plan mode.
	StrategyCenterSearchAndDestroySightRangeScalar = [real number]
	StrategyCenterSearchAndDestroyDetectsStealth = [Yes/No]
	StrategyCenterHoldTheLineMaxHealthScalar = [real number]
	StrategyCenterHoldTheLineMaxHealthChangeType = [Change Type List]

	VisionObjectName = [object name]
End

BeaconClientUpdate
[this module is a ClientUpdate not a Behavior and is hardcoded to produce the BeaconSmokeFFFFFF particle system definition by default but will call the BeaconSmoke###### particle system definition relative to the players color]
	RadarPulseFrequency = [integer, milliseconds]
	RadarPulseDuration = [integer, milliseconds]
End

BoneFXDamage
[no parameters - enables use of BoneFXUpdate module on this object where an additional dynamic FX logic can be used]
End

BoneFXUpdate
[N takes numbers from 1-8]
	PristineParticleSystemN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} PSys:{entry from ParticleSystem.INI}]
	PristineOCLN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} OCL:{entry from ObjectCreationList.INI}]
	PristineFXListN = [bone:{name}  OnlyOnce:{Yes/No} {Min} {Max} FXList:{entry from FXList.INI}]

	DamageParticleTypes = [DamageTypes listing]
	DamagedParticleSystemN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} PSys:{entry from ParticleSystem.INI}]
	DamageOCLTypes = [DamageTypes listing]
	DamagedOCLN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} OCL:{entry from ObjectCreationList.INI}]
	DamageFXTypes = [DamageTypes listing]
	DamagedFXListN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} FXList:{entry from FXList.INI}]

	ReallyDamagedFXListN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} FXList:{entry from FXList.INI}]
	ReallyDamagedOCLN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} OCL:{entry from ObjectCreationList.INI}]
	ReallyDamagedParticleSystemN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} PSys:{entry from ParticleSystem.INI}]

	RubbleParticleSystemN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} PSys:{entry from ParticleSystem.INI}]
	RubbleOCLN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} OCL:{entry from ObjectCreationList.INI}]
	RubbleFXListN = [bone:{name} OnlyOnce:{Yes/No} {Min} {Max} FXList:{entry from FXList.INI}]
End

;///////////////////////////////////////////////////////////////////
;NOTE!NOTE!NOTE!NOTE!NOTE!
;This Three modules doesn't properly work ingame but needed if you want your object to be a bridge (optional: define bridge in Road.ini)
;But The "BridgeScaffoldBehavior" and "BridgeTowerBehavior" Doesn't work as it should be. (EG: show corner towers for repairing the damaged bridge.)
;///////////////////////////////////////////////////////////////////
BridgeBehavior
[special case logic allows for ParentObject to be specified as a bone name to allow other objects to appear on the bridge]
  LateralScaffoldSpeed = [integer]
  VerticalScaffoldSpeed = [integer]
  BridgeDieFX = [FX:{entry from FXList.INI} Delay:{milliseconds} Bone:{bone name}, multiple entries can be used for multiple fx]
  BridgeDieOCL = [OCL:{entry from ObjectCreationList.INI} Delay:{milliseconds} Bone:{bone name}, multiple entries can be used for multiple fx]
End

BridgeScaffoldBehavior
[no parameters - this module allows the object to surround the parent object like a scaffold]
End

BridgeTowerBehavior
[no parameters - this module transfers damage done to itself to its parent bridge too]
End
;///////////////////////////////////////////////////////////////////
;///////////////////////////////////////////////////////////////////
CashBountyPower
  SpecialPowerTemplate = [entry from SpecialPower.INI]
  Bounty = [integer]
  StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
End

CashHackSpecialPower
[Allows you to steal money from an enemy supply center. this module needs to use the "SPECIAL_CASH_HACK" special power enum type]
  SpecialPowerTemplate = [entry from SpecialPower.INI]
  MoneyAmount          = [integer] 
  UpgradeMoneyAmount   = [entry from Science.INI integer cash amount to steal, multiple entries can be used for multiple upgrades]
  StartsPaused         = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
End

CaveContain
[objects will be connected to the same cave system (eachother) if they share the CaveIndex]
  CaveIndex = [integer, can be adjusted in WorldBuilder, required]
  AllowInsideKindOf = [KindOfs]
  ForbidInsideKindOf = [KindOfs]
End

CountermeasuresBehavior
   	 TriggeredBy           = [Entry From Upgrade.ini]
	  FXListUpgrade         = [entry from FXList.INI]
	  ConflictsWith         = [entry from Upgrade.INI]
	  RequiresAllTriggers   = [Yes/No] 
    	FlareTemplateName     = [Object Entry]    ; IF theres no defined Object, Then no Flares for you!
    	FlareBoneBaseName     = [bone name]       ; Bone names of where to spawn the flares.
    	VolleySize            = [Interger]        ; Number of flares launched per volley (requires bones)
    	VolleyArcAngle        = [Interger]        ; Max angle of flare relative to forward direction (with VolleySize of 1, flare will always goes straight back).
    	VolleyVelocityFactor  = [Interger]        ; Shoots out flares at a stronger velocity with a higher value.
    	DelayBetweenVolleys   = [Interger, milliseconds]        ; Time between flare volleys
    	NumberOfVolleys       = [Interger]                      ; Number of times the volleys will fire before reloading
    	ReloadTime            = [Interger, milliseconds]        ; After all volleys launched, then reloading must occur. If 0, then reloading occurs at airstrip only.
    	EvasionRate           = [Percent]                       ; With active flares, the specified percentage will be diverted.
    	ReactionLaunchLatency = [Interger, milliseconds]        ; Reaction between getting shot at and the firing of the first volley of countermeasures.
    	MissileDecoyDelay     = [Interger, milliseconds] ; A reported missile that has been determined to hit a decoy will wait this long before acquiring countermeasures.
        MustReloadAtAirfield  = [Yes/No]                 ; Reload Countermeasures at the airfield? If No, It will auto reload while in mid air.
End

CheckpointUpdate
[no parameters - allows object to open and close like a gate when a friendly object approaches it - requires DOOR_1_OPENING and DOOR_1_CLOSING ConditionStates]
End

ChinookAIUpdate
[logic requires bones for either end of the rope to be defined as RopeEnd and RopeStart]

[If you want your infantry (or tank :P) to Rappel down a rope, Just add the CAN_RAPPEL to the objects KindOf field, after doing that,
[You can now use the "RAPPELLING" ModelConditonState for rappelling out of the object that has the rappel code 
[Of this module.  

[This part of the module will allow your tank or infantry to use the rappel feature if CAN_RAPPEL is defined in the kindof field of the certain unit, and allows the use of the CombatDropKillFX within UnitSpecificFX section of the object and module allows the use of VoiceCombatDrop and VoiceSupply and VoiceClearBuilding  
within UnitSpecificSounds section of the object]

      	RappelSpeed = [integer]
      	RopeDropSpeed = [integer]
      	RopeName = [object name, defaults to 'GenericRope' object definition in system.ini]
      	RopeFinalHeight = [integer]
      	RopeWidth = [real number]
      	RopeWobbleLen = [integer]	
      	RopeWobbleAmplitude = [real number]
      	RopeWobbleRate = [integer]
      	RopeColor = [r: g: b:]
      	RotorWashParticleSystem = [Entry From ParticleSystem.ini]
      	NumRopes = [integer]
      	PerRopeDelayMin = [integer]
      	PerRopeDelayMax = [integer]
      	MinDropHeight = [integer]
      	WaitForRopesToDrop = [Yes/No]

[This part requires the object to have KindOf = HARVESTER]
      	MaxBoxes = [integer]
        SupplyCenterActionDelay = [integer]
      	SupplyWarehouseActionDelay = [integer]
      	SupplyWarehouseScanDistance = [integer]
      	SuppliesDepletedVoice = [Entry from Voice.INI]
      	UpgradedSupplyBoost = [integer]    

[Just a normal AIUpdateInterface field]
     AutoAcquireEnemiesWhenIdle = [Yes/No][NOTWHILEATTACKING/ATTACK_BUILDINGS/STEALTHED]
     MoodAttackCheckRate = [integer, milliseconds. default is 2000]
     ForbidPlayerCommands =  [Yes/No]
     TurretsLinked =[Yes/No]
 
[this part of the module allows the use of TurretMoveStart and TurretMoveLoop within UnitSpecificSounds section of the object]
  Turret
            TurretTurnRate = [integer]
            TurretPitchRate = [integer]
            NaturalTurretAngle = [integer, default 0 = horizontal]
            NaturalTurretPitch = [integer, default 0 = horizontal]
            FirePitch = [integer, default 0 = horizontal]
            MinPhysicalPitch = [integer, default 0 = horizontal]
            GroundUnitPitch = [integer, default 0 = horizontal] 
            TurretFireAngleSweep = [weaponslot][integer]
            TurretSweepSpeedModifier = [weaponslot    real number]
            ControlledWeaponSlots = [weaponslots]
    	    AllowsPitch = [Yes/No]
       	    MinIdleScanAngle = [real number]
      	    MaxIdleScanAngle = [real number]
            MinIdleScanInterval = [integer, milliseconds]
            MaxIdleScanInterval = [integer, milliseconds]
            RecenterTime = [integer,milliseconds]
            FiresWhileTurning = [Yes/No]
            InitiallyDisabled = [Yes/No]
    End
    AltTurret
        [as above]
    End
End

CleanupAreaPower
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	MaxMoveDistanceFromLocation = [real number]
	StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
    InitiateSound = [Entry from Voice.ini] 
End

CleanupHazardUpdate
	WeaponSlot = [Weapon Slot List]
	ScanRate = [integer, milliseconds]
	ScanRange = [real number]
End

CommandButtonHuntUpdate
[no parameters - this module allows this object to hunt using a particular ability or command via scripts -AI Only]
End

CommandSetUpgrade
[Gives the object the ability to change commandsets back and forth when this module two times]
	  TriggeredBy = [entry(s) from Upgrade.INI]
	  FXListUpgrade = [entry from FXList.INI]
	  ConflictsWith = [entry(s) from Upgrade.INI]
	  RequiresAllTriggers = [Yes/No]
      RemovesUpgrades [entry(s) from Upgrade.INI, multiple "upgrade" entrys can be put here]
      CommandSet = [entry from CommandSet.INI]
      CommandSetAlt = [entry from CommandSet.INI]
      TriggerAlt = [entry(s) from Upgrade.INI]
End

ConvertToCarBombCrateCollide
[Triggers the use of CARBOMB WeaponSet Condition of the hijacked object and turns it to a suicide unit unless given with a different weapon]
    	RequiredKindOf = [KindOf]
    	ForbiddenKindOf = [KindOf]
    	FXList = [entry from FXList.INI]
End

ConvertToHijackedVehicleCrateCollide
[module is hardcoded to play the HijackDriver sound definition when triggered and converts the unit to your side]
    	RequiredKindOf = [KindOf]
    	ForbiddenKindOf = [KindOf]
    	FXList = [entry from FXList.INI]
End

CostModifierUpgrade
	TriggeredBy = [entry from Upgrade.INI]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
    EffectKindOf = [KindOf]
	Percentage = [percentage]
End

CreateCrateDie
[independant CrateData listings will each produce a maximum of one crate]
        DeathTypes = [DeathTypes listing]
        RequiredStatus = [StatusBits type]
        ExemptStatus = [StatusBits type]
    	CrateData = [entry from Crate.INI]
End

CreateObjectDie
	DeathTypes = [DeathTypes listing]
	ExemptStatus = [status name]
	CreationList = [entry from ObjectCreationList.INI]
    TransferPreviousHealth = [Yes/No] 
End

CrushDie
[this module allows for the use of the FRONTCRUSHED and BACKCRUSHED ConditionStates with this object]
	DeathTypes = [DeathType listing]
	TotalCrushSound = [entry from SoundEffects.INI]
	BackEndCrushSound = [entry from SoundEffects.INI]
	FrontEndCrushSound = [entry from SoundEffects.INI]
	TotalCrushSoundPercent = [percent]
	BackEndCrushSoundPercent = [percent]
	FrontEndCrushSoundPercent = [percent]
End

DamDie
[no parameters, allows object to continue existing as an obstacle but allowing water terrain to move through - the module must be applied after any other death modules]
End

DefectorSpecialPower
[When used in junction with the "SPECIAL_DEFECTOR" special power, The unit will defect to your side]
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	FatCursorRadius = [real number]
	StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
End

DefaultProductionExitUpdate
[logic requires NaturalRallyPoint x: co-ordinate to match the object GeometryMajorRadius]
	UnitCreatePoint = [x: y: z:]
	NaturalRallyPoint = [x: y: z:]
    UseSpawnRallyPoint = [Yes/No]
End

DelayedUpgrade
[this module triggers use of the DelayedWeaponSetUpgradeUpdate module on this object]
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
	DelayTime = [integer, milliseconds]
End

DelayedWeaponSetUpgradeUpdate
[no parameters, this module delays the effect of a WeaponSet player upgrade - requires DelayedUpgrade module]
End

DeletionUpdate
[Deletes the object when the lifetime expires]
	MinLifetime = [integer, milliseconds]
	MaxLifetime = [integer, milliseconds]
End

DeliverPayloadAIUpdate
[this module allows the use of StartDive within UnitSpecificSounds section of the object]
	DoorDelay = [integer]
	DeliveryDistance = [integer]
	MaxAttempts = [integer]
	DropDelay = [integer]
	DropOffset = [x: y: z:]
	DropVariance = [x: y: z:]
	PutInContainer = [object name]
End

DemoTrapUpdate
[Requires object to have "DEMOTRAP" Kind of defined in the KindOf Field]
	DefaultProximityMode = [Yes/No]
	DetonationWeaponSlot = [Weapon Slot List]
	ProximityModeWeaponSlot = [Weapon Slot List]
	ManualModeWeaponSlot = [Weapon Slot List]
	TriggerDetonationRange = [real number]
	IgnoreTargetTypes = [KindOfs]
	AutoDetonationWithFriendsInvolved = [Yes/No]
	DetonateWhenKilled = [Yes/No]
    DetonationWeapon = [Entry from Weapon.ini] 
End

DeployStyleAIUpdate
[this module allows use of PACKING and UNPACKING ConditionState(s)and allows the use of Deploy and Undeploy within UnitSpecificSounds section of the object]
	PackTime = [integer]
	UnpackTime = [integer]
	TurretsFunctionOnlyWhenDeployed = [Yes/No]
	TurretsMustCenterBeforePacking = [Yes/No]
	ManualDeployAnimations = [Yes/No]
	ResetTurretBeforePacking = [Yes/No]
	AutoAcquireEnemiesWhenIdle = [Yes/No][NOTWHILEATTACKING/ATTACK_BUILDINGS/STEALTHED]
	MoodAttackCheckRate = [integer, milliseconds, default 2000]
	ForbidPlayerCommands =  [Yes/No]
	TurretsLinked =[Yes/No]
	Turret
     	TurretTurnRate = [integer]
     	TurretPitchRate = [integer]
		NaturalTurretAngle = [integer]
		NaturalTurretPitch = [integer]
  		FirePitch = [integer]
		MinPhysicalPitch = [integer, defalt 0 = horizontal]
		GroundUnitPitch = [integer, default 0 = horizontal] 
           	TurretFireAngleSweep = [weaponslot][integer]
       		TurretSweepSpeedModifier = [weaponslot	real number]
      		ControlledWeaponSlots = [weaponslots]
    		AllowsPitch = [Yes/No]
			MinIdleScanAngle = [real number]
      		MaxIdleScanAngle = [real number]
        	MinIdleScanInterval = [integer, milliseconds]
		MaxIdleScanInterval = [integer, milliseconds]
		RecenterTime = [integer,milliseconds]
		FiresWhileTurning = [Yes/No]
		InitiallyDisabled = [Yes/No]
	End
	AltTurret
		[as above]
	End
End

DestroyDie
      DeathTypes = [DeathTypes listing]
      RequiredStatus = [StatusBits type]
      ExemptStatus = [StatusBits type]
End

DozerAIUpdate
[this module allows the use of VoiceRepair  and  VoiceBuildResponse and  VoiceNoBuild and VoiceTaskComplete within UnitSpecificSounds section of the object -Requires Kindof = DOZER]
	RepairHealthPercentPerSecond = [percent]
	BoredTime = [integer, milliseconds]
	BoredRange = [integer]
	AutoAcquireEnemiesWhenIdle = [Yes/No]
	MoodAttackCheckRate = [integer, milliseconds]
    ForbidPlayerCommands =  [Yes/No]
    TurretsLinked =[Yes/No]
	Turret
     	TurretTurnRate = [integer]
     	TurretPitchRate = [integer]
		NaturalTurretAngle = [integer]
		NaturalTurretPitch = [integer]
  		FirePitch = [integer]
		MinPhysicalPitch = [integer, defalt 0 = horizontal]
		GroundUnitPitch = [integer, default 0 = horizontal] 
           	TurretFireAngleSweep = [weaponslot][integer]
       		TurretSweepSpeedModifier = [weaponslot	real number]
      		ControlledWeaponSlots = [weaponslots]
    		AllowsPitch = [Yes/No]
       	        MinIdleScanAngle = [real number]
      		MaxIdleScanAngle = [real number]
        	MinIdleScanInterval = [integer, milliseconds]
           	MaxIdleScanInterval = [integer, milliseconds]
		RecenterTime = [integer,milliseconds]
		FiresWhileTurning = [Yes/No]
		InitiallyDisabled = [Yes/No]
	End
	AltTurret
		[as above]
	End
End

DumbProjectileBehavior
	MaxLifespan = [integer, milliseconds]
	TumbleRandomly = [Yes/No]
	DetonateCallsKill = [Yes/No]
	OrientToFlightPath = [Yes/No]
	FirstHeight = [integer]
	FirstPercentIndent = [percent]
	SecondHeight = [integer]
	SecondPercentIndent = [percent]
	GarrisonHitKillRequiredKindOf = [KindOf]
	GarrisonHitKillForbiddenKindOf = [KindOf]
	GarrisonHitKillCount= [integer]
	GarrisonHitKillFX = [entry from FXList.INI]
	FlightPathAdjustDistPerSecond = [real number]
End

DynamicGeometryInfoUpdate
	InitialDelay = [integer, milliseconds]
	InitialHeight = [real number]
	InitialMajorRadius = [real number]
	InitialMinorRadius = [real number]
	FinalHeight = [real number]
	FinalMajorRadius = [real number]
	FinalMinorRadius = [real number]
	TransitionTime = [integer, milliseconds]
	ReverseAtTransitionTime = [Yes/No]
End

DynamicShroudClearingRangeUpdate
	ChangeInterval = [integer, milliseconds]
	GrowInterval = [integer, milliseconds]
	ShrinkDelay = [integer, milliseconds]
	ShrinkTime = [integer, milliseconds]
	GrowDelay = [integer, milliseconds]
	GrowTime = [integer, milliseconds]
	FinalVision = [real number]
	GridDecalTemplate
		Texture = [texture name without file extension]
		Style = [texture application style type]
		OpacityMin = [percent]
		OpacityMax = [percent]
		OpacityThrobTime = [integer, milliseconds]
		OnlyVisibleToOwningPlayer = [Yes/No]
		Color = [r: g: b: a:]
	End
End

EjectPilotDie
[this module allows use of SoundEject and VoiceEject within UnitSpecificSounds section of the object]
	DeathTypes = [DeathTypes listing]
	GroundCreationList = [entry from ObjectCreationList.INI]
	AirCreationList = [entry from ObjectCreationList.INI]
	ExemptStatus = [status name]
	VeterancyLevels = [veterancy levels listing]
End

EMPUpdate
	DisabledDuration = [integer, milliseconds]
	Lifetime         = [integer, milliseconds]
	StartColor       = [r: g: b:]
	StartFadeTime    = [integer, milliseconds]
	StartScale       = [real number]
	EndColor         = [r: g: b:]
	TargetScaleMin   = [real number]
	TargetScaleMax   = [real number]
	DisableFXParticleSystem     = [entry from ParticleSystem.INI]
	SparksPerCubicFoot          = [integer]
    DoesNotAffectMyOwnBuildings = [Yes/No]
    DoesNotAffect               = [Either from : ALLIES/ENEMIES/NEUTRALS/SELF]
    EffectRadius                = [Interger]
    VictimForbiddenKindOf       = [kindof listing]
    VictimRequiredKindOf        = [kindof listing]
End

EnemyNearUpdate
[no parameters - this module allows the the use of VoiceMeetEnemy and 
also allows the object to use the ENEMYNEAR ConditionState 
which will be triggered when an enemy object is within this objects VisionRange]
End

ExperienceScalarUpgrade
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
	AdXPScalar = [real number]
End

FireSpreadUpdate
	OCLEmbers = [entry from ObjectCreationList.INI] [ Should we spawn a "fire ember" in order to spread fire?]
	MinSpreadDelay = [integer, milliseconds]        [ Minimum Time we try spreading fire]
	MaxSpreadDelay = [integer, milliseconds]        [ Maximum Time we try spreading fire]
	SpreadTryRange = [real number]                  [ A non-zero entry means fires will be set explicitly without relying on embers
                                                    [ The closest flammable thing will be set on fire automatically.
End

FirestormDynamicGeometryInfoUpdate
	InitialDelay = [integer, milliseconds]
	InitialHeight = [real number]
	InitialMajorRadius = [real number]
	InitialMinorRadius = [real number]
	FinalHeight = [real number]
	FinalMajorRadius = [real number]
	FinalMinorRadius = [real number]
	TransitionTime = [integer, milliseconds]
	ReverseAtTransitionTime = [Yes/No]
	ScorchSize = [real number]
	ParticleOffsetZ = [real number]
	ParticleSystemN = [N = 1-16, entry from ParticleSystem.INI]
	FXList = [entry from FXList.INI]    
	DelayBetweenDamageFrames = [integer, milliseconds]
	MaxHeightForDamage = [integer]
	DamageAmount = [integer]
End

FireOCLAfterWeaponCooldownUpdate
	WeaponSlot = [Weapon Slot List]
	TriggeredBy = [entry(s) from Upgrade.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	OCL = [entry from ObjectCreationList.INI] 
	MinShotsToCreateOCL = [integer]
	OCLLifetimePerSecond = [integer]
	OCLLifetimeMaxCap = [integer]
End

FireWeaponCollide
	CollideWeapon = [entry from Weapon.INI]
	ForbiddenStatus = [status name]
	RequiredStatus = [status name]
End

FireWeaponWhenDamagedBehavior
	StartsActive = [Yes/No]
	ReactionWeaponPristine = [entry from Weapon.INI]
	ReactionWeaponDamaged = [entry from Weapon.INI]
	ReactionWeaponReallyDamaged = [entry from Weapon.INI]
	ReactionWeaponRubble = [entry from Weapon.INI]
	ContinuousWeaponPristine = [entry from Weapon.INI]
	ContinuousWeaponDamaged = [entry from Weapon.INI]
	ContinuousWeaponReallyDamaged = [entry from Weapon.INI]
	ContinuousWeaponRubble = [entry from Weapon.INI]
	DamageTypes = [DamageTypes listing]
    DamageAmount = [integer]
End

FireWeaponWhenDeadBehavior
	DeathWeapon = [entry from Weapon.INI]
	DeathTypes = [DeathTypes listing]
	TriggeredBy = [entry(s) from Upgrade.INI]
    RequiredStatus  = [StatusBit type]
    ExemptStatus = [StatusBit type]
	StartsActive = [Yes/No]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
End

FireWeaponUpdate
      Weapon               = [entry from Weapon.INI] [What weapon should we use?]
      ExclusiveWeaponDelay = [Interger]              [If we fire a real weapon, we turn this module off for this long]
      InitialDelay         = [interger/milliseconds] [amount of delay before we use the weapon in this module]
End

FireWeaponPower
    SpecialPowerTemplate = [Entry(s) from SpecialPower.ini]
    MaxShotsToFire    = [real number]
End

FlightDeckBehavior
[requires AIRCRAFT_CARRIER and FS_AIRFIELD Kindof]
    NumRunways              = [real number]
   	NumSpacesPerRunway      = [real number]

      [N takes numbers from 1-2]
    	RunwayNSpaces           = [Names of Bones of the Model]
    	RunwayNTakeoff          = [Names of Bones of the Model]
    	RunwayNLanding          = [Names of Bones of the Model]
    	RunwayNTaxi             = [Names of Bones of the Model]
    	RunwayNCreation         = [Names of Bones of the Model]
    	RunwayNCatapultSystem   = [Entry From Particlesystem.ini]

    	HealAmountPerSecond     = [integer]  [How much health do we give the landed aircraft on our deck?] 
    	ApproachHeight          = [integer]  [What should the minimum height of aircrafts be in order to land?]
    	LandingDeckHeightOffset = [integer]	 [How high is the landing deck?]
    	ParkingCleanupPeriod    = [integer]  [How often the carrier checks to move planes forward in the queue to fill empty spaces]
    	HumanFollowPeriod       = [integer]  [Human factor for delay like a traffic jam.. takes time to react when the guy in front moves]

      [Template of payload, and how quickly destroyed ones get replaced.]
    	PayloadTemplate         = [Object Name] [If theres no defined unit then...no jets for you!]
    	ReplacementDelay        = [integer, milliseconds]
    	DockAnimationDelay      = [integer, milliseconds]

      [How quickly a wave of fighters can be launched]
    	LaunchWaveDelay         = [integer, milliseconds]
    	LaunchRampDelay         = [integer, milliseconds]
    	LowerRampDelay          = [integer, milliseconds]
    	CatapultFireDelay       = [integer, milliseconds]
End


FlammableUpdate
[this module allows the use of the AFLAME and SMOLDERING and BURNED ConditionState(s) with this object]
	AflameDuration        = [integer, milliseconds]       [If I catch fire, I'll burn for this long in millisecond]
	AflameDamageAmount    = [integer]                     [Taking this much damage]
	AflameDamageDelay     = [integer, milliseconds]       [This often]
	BurnedDelay           = [integer, milliseconds]       [How long do we burn before we smolder]
	BurningSoundName      = [entry from SoundEffects.INI] [What sound to use when we're on fire]
	FlameDamageLimit      = [integer]                     [How much flame damage to recieve before catching fire]
	FlameDamageExpiration = [integer, milliseconds]       [in a span of this long, in millisecond] 
End

FloatUpdate
[forces object to remain relative to sea level and allows for use of SEA_LEVEL locomotion rules. Enabled = Yes means 'float on water and stay relative to water level' while Enabled = No means 'float on water and bob about']
    Enabled = [Yes/No]
End

FXListDie
      DeathTypes = [DeathTypes listing]
      DeathFX = [entry from FXList.INI]
      OrientToObject = [Yes/No]
      RequiredStatus = [StatusBits type]
      ExemptStatus = [StatusBits type]
      StartsActive = [Yes/No]
      TriggeredBy = [entry(s) from Upgrade.INI]  
      ConflictsWith = [entry(s) from Upgrade.INI]
      RequiresAllTriggers = [Yes/No]
End

GarrisonContain
[Module is hardcoded to use the GarrisonGun object definition for the weapons pointing from the object when occupants are firing and these are drawn at bones named FIREPOINT. Also, It Allows you to use the GARRISONED Model ConditionState]

[NOTE: THE FIREBASE LOGIC IS ONLY FOR ZEROHOUR]
[If The Model has STATIONx (X can range from 1 to a bajillion =P) and the Draw module (AKA W3DModelDraw) has a "ExtraPublicBone = STATIONx <mulitple statements can be made> defined and the garrison module has the "IsEnclosingContainer = No" ]
[The Garrisoned guys will appear at the location of the "STATION" bones...this will work like the Firebase -Requires the HiveStructureBody]

	ContainMax = [integer]	
	EnterSound = [entry from SoundEffects.INI]
	ExitSound = [entry from SoundEffects.INI]
	DamagePercentToUnits = [percent]
	MobileGarrison = [Yes/No]
	InitialRoster = [object name integer]
	ImmuneToClearBuildingAttacks = [Yes/No]
    IsEnclosingContainer         = [Yes/No] 
	HealObjects   = [Yes/No]
	TimeForFullHeal = [integer, milliseconds]
	PassengersAllowedToFire = [Yes/No]
	AllowInsideKindOf = [KindOF list]
	ForbidInsideKindOf = [KindOf listing]
	AllowAlliesInside = [Yes/No]
	AllowEnemiesInside = [Yes/No]
	AllowNeutralInside = [Yes/No]
End

GrantStealthBehavior
    StartRadius               = [integer]	
    FinalRadius               = [integer]
    RadiusGrowRate            = [integer]	
    RadiusParticleSystemName  = [Entry(s) from ParticleSystem.ini]
    KindOf                    = [KindOF list]
    ForbiddenKindOf           = [KindOF list]
End

GenerateMinefieldBehavior
	MineName = [object name]
	GenerationFX = [entry from FXList.INI]
	DistanceAroundObject = [integer]
	MinesPerSquareFoot = [integer]
	GenerateOnlyOnDeath = [Yes/No]
	BorderOnly = [Yes/No]
	SmartBorder = [Yes/No]
	SmartBorderSkipInterior = [Yes/No]
    AlwaysCircular = [Yes/No]
	RandomJitter = [integer]
	SkipIfThisMuchUnderStructure = [integer]
    Upgradable = [Yes/No]           
    UpgradedMineName = [object name]  
    UpgradedTriggeredBy = [entry from Upgrade.INI]
End

GrantUpgradeCreate
   UpgradeToGrant = [entry from Upgrade.INI]
   ExemptStatus      = [Status Bits type]
End

GrantScienceUpgrade ModuleTag_Science
    GrantScience = [Entry from Science.ini]
    TriggeredBy = [entry from Upgrade.INI]
End

InternetHackContain
[Contain module that triggers the HackInternetAIUpdate command to passengers -see TransportContain module for required parameters of this module]
End

HackInternetAIUpdate
[this module allows the use of UnitPack and UnitUnpack and UnitCashPing within UnitSpecificSounds section of the object allows use of PACKING and UNPACKING ConditionState(s)]
	UnpackTime = [integer, milliseconds]
	PackTime = [integer, milliseconds]
	PackUnpackVariationFactor = [real number]
	CashUpdateDelay = [integer, milliseconds]
    CashUpdateDelayFast = [integer, milliseconds]
	RegularCashAmount = [integer]
	VeteranCashAmount = [integer]
	EliteCashAmount = [integer]
	HeroicCashAmount = [integer]
	XpPerCashUpdate = [integer]
End

HealCrateCollide
[no parameters - this module heals all objects belonging to the same owner as the object that collides with this object]
End

HealContain
[This module will automatically heal and restore the health of units that enters or exits the transport]
	ContainMax = [integer]
	TimeForFullHeal = [integer, milliseconds]
	EnterSound = [entry from SoundEffects.INI]
	ExitSound = [entry from SoundEffects.INI]
	AllowInsideKindOf = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	AllowAlliesInside = [Yes/No]
	AllowEnemiesInside = [Yes/No]
	AllowNeutralInside = [Yes/No]
End

HeightDieUpdate
	TargetHeight = [real number]
	TargetHeightIncludesStructures = [Yes/No]
	OnlyWhenMovingDown = [Yes/No]
	InitialDelay = [integer, milliseconds]
	SnapToGroundOnDeath = [Yes/No]
	DestroyAttachedParticlesAtHeight = [real number]
End

HelicopterSlowDeathBehavior
[this module requires LocomotorWorksWhenDead = Yes on the objects Locomotor to function correctly]
	DestructionDelay = [integer, milliseconds]
	DestructionDelayVariance = [integer]
	DestructionAltitude = [integer]
	SpiralOrbitTurnRate = [real number]
	SpiralOrbitForwardSpeed = [real number]
	SpiralOrbitForwardSpeedDamping = [real number]
	MinSelfSpin = [integer]
	MaxSelfSpin = [integer]
	SelfSpinUpdateDelay = [integer, milliseconds]
	SelfSpinUpdateAmount = [integer, degrees]
	FallHowFast = [percent]
	MinBladeFlyOffDelay = [integer, milliseconds]
	MaxBladeFlyOffDelay = [integer, milliseconds]
	AttachParticle = [entry from ParticleSystem.INI]
	AttachParticleBone = [bone name]
  	AttachParticleLoc = [x: y: z:]
	BladeObjectName = [object name]
	BladeBoneName = [bone name]
	OCLEjectPilot = [entry from ObjectCreationList.INI]
	FXBlade = [entry from FXList.INI]
	OCLBlade = [entry from ObjectCreationList.INI]
	FXHitGround = [entry from FXList.INI]
	OCLHitGround = [entry from ObjectCreationList.INI]
	FXFinalBlowUp = [entry from FXList.INI]
	OCLFinalBlowUp = [entry from ObjectCreationList.INI]
	DelayFromGroundToFinalDeath = [integer]
	FinalRubbleObject = [object name]
	MaxBraking = [integer]
	SoundDeathLoop = [entry from SoundEffects.INI]
End

HighlanderBody
[this is a Body module not a Behavior module and allows the object to take damage but not die - the object will only die from irresistable damage]
      MaxHealth = [integer]
      InitialHealth = [integer
End

HijackerUpdate
	ParachuteName = [object name]
	AttachToTargetBone = [sub object/bone name]
	OffsetZ = [integer]
End

HiveStructureBody
[this is a Body module not a Behavior module and requires the SpawnBehavior module to work properly]
        MaxHealth = [integer]
        InitialHealth = [integer
        SubdualDamageCap = [integer]
        SubdualDamageHealRate = [integer]  
        SubdualDamageHealAmount = [integer] 
        PropagateDamageTypesToSlavesWhenExisting = [DamageTypes listing]
        SwallowDamageTypesIfSlavesNotExisting = [DamageTypes listing]
End

HordeUpdate
[module is hardcoded to apply the following textures to objects that are affected by this module: EXHorde, EXHorde_UP, EXHordeB, EXHordeB_UP]
	UpdateRate   = [integer, milliseconds][ how often to recheck horde status ]
	RubOffRadius = [integer]              [ if I am this close to a real hordesman, I will get to be an honorary hordesman ]
	AlliesOnly   = [Yes/No]               [ do we only count allies towards horde status? ]
	ExactMatch   = [Yes/No]               [ do we only count units of our exact same type towards horde status? (overrides kindof)]
	Action       = [WeaponBonus name]     [ when horde-ing, grant us the HORDE bonus ]
	Radius             = [integer]        [ how close other units must be to us to count towards our horde-ness (~30 feet or so) ]
	KindOf             = [KindOfs]        [ what KindOf's must match to count towards horde-ness ]
	Count              = [integer]        [ how many units must be within Radius to grant us horde-ness ]
	AllowedNationalism = [Yes/No]
	FlagSubObjectNames = [sub object name] 
End

HelixContain
[Like Transport, but when full, passes transport queries along to first passenger (redirects like tunnel). Basically works like the Overlord Contain.]
	Slots = [integer]
	DamagePercentToUnits = [percentage]
	AllowInsideKindOf = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	AllowAlliesInside = [Yes/No]
    AllowNeutralInside = [Yes/No]
	AllowEnemiesInside = [Yes/No]
	ExitDelay = [integer, milliseconds]
    NumberOfExitPaths = [integer, should corrospond to N]
	GoAggressiveOnExit = [Yes/No]
	ScatterNearbyOnExit = [Yes/No]
	OrientLikeContainerOnExit = [Yes/No]
	KeepContainerVelocityOnExit = [Yes/No]
    BurnedDeathToUnits  = [Yes/No]
	ExitPitchRate = [integer]
	ExitBone = [bone name]
	DoorOpenTime = [integer, milliseconds]
	HealthRegen%PerSec = [percentage]
	DestroyRidersWhoAreNotFreeToExit = [Yes/No]
	ResetMoodCheckTimeOnExit = [Yes/No]
	InitialPayload = [object name	integer, multiple statements can be used]
	ArmedRidersUpgradeMyWeaponSet = [Yes/No]
    DelayExitInAir = [Yes/No]
	EnterSound = [entry from SoundEffects.INI] ;SoundEnter Override
	ExitSound = [entry from SoundEffects.INI]  ;SoundExit Override
	PassengersAllowedToFire = [Yes/No]
	PassengersInTurret = [Yes/No]
    WeaponBonusPassedToPassengers = [Yes/No]
    PayloadTemplateName = [object name]
    ShouldDrawPips = [Yes/No]
End

ImmortalBody
[this is a Body module not a Behavior module and prevents the object from dying or taking damage]
      MaxHealth = [integer]
      InitialHealth = [integer
      SubdualDamageCap = [integer]
      SubdualDamageHealRate = [integer]  
      SubdualDamageHealAmount = [integer] 
End 

InactiveBody
[no parameters - this is a Body module not a Behavior module and prevents normal interaction with other objects]
End

InstantDeathBehavior
	DeathTypes = [DeathTypes listing]
	FX = [entry from FXList.INI]
	OCL = [entry from ObjectCreationList.INI]
    Weapon = [Entry from Weapon.ini]
	RequiredStatus = [status name]
	ExemptStatus = [status name]
End

JetAIUpdate
[this module allows the use of VoiceLowFuel and Afterburner within UnitSpecificSounds section of the object -Requires Kindof = AIRCRAFT]
[And Allows the use of JETEXHAUST JETAFTERBURNER Model conditionstates, this is triggered when its taking off from the runway]
	OutOfAmmoDamagePerSecond      = [percent]  ; Amount of damage to take per SEC (not per frame) when out of ammo
	NeedsRunway                   = [Yes/No]   ; Does the aircraft need a runway when it takes off?
	KeepsParkingSpaceWhenAirborne = [Yes/No]   ; Does the aircraft that took off from that "hanger" keeps it or not?
	TakeoffDistForMaxLift         = [percent]  ; Larger numbers give more lift sooner when taking off
	TakeoffPause                  = [millisecond]  ; How long does the aircraft pause for a moment before taking off?
	MinHeight                     = [integer]   ; How low can the aircraft go? offsets using the Z axis 
	ParkingOffset                 = [-X.0 offsets the plane to the rear, X.0 offsets it foward, X can be any number]  ; scooch it a little forward so the tail doesn't hit the doors  
	SneakyOffsetWhenAttacking     = [integer]   ; This is how far behind us people aim when we are in attack mode 
	AttackLocomotorType           = [LocomotorSetType] ; what locomotor set are we going to use if we're in attack mode?
	AttackLocomotorPersistTime    = [real number]  ;how long the "attack" locomotor persist after we finished attacking? 
	AttackersMissPersistTime      = [real number]  ;how long do we remain unattackable when the attackmode is done?
	ReturnToBaseIdleTime = [integer, milliseconds] ; if idle for this long, return to base, even if not out of ammo
	ReturnForAmmoLocomotorType    = [LocomotorSetType] ; what locomotor set are we going to use if we're going back to re-arm?
	LockonTime                    = [integer, milliseconds] ; how long does the lockon tick sound last?
	LockonCursor                  = [object name] ;what should the "lockon" cursor look like? (use LockonCursor defined in system.ini)
	LockonInitialDist             = [integer]     ; how far does the enemy anti-air required to trigger this
	LockonFreq                    = [real number] ; smaller==longer pulse delay, larger==shorter pulse delay
	LockonAngleSpin               = [real number] ;how fast to spin the lockon blinker 
	LockonBlinky                  = [Yes/No]      ; does it blinker?
	AutoAcquireEnemiesWhenIdle    = [Yes/No NOTWHILEATTACKING/ATTACK_BUILDINGS/STEALTHED]
	MoodAttackCheckRate           = [integer, milliseconds, default is 2000]
	Turret
     	    TurretTurnRate = [integer]
            TurretPitchRate = [integer]
            NaturalTurretAngle = [integer]
            NaturalTurretPitch = [integer]
            FirePitch = [integer]
            MinPhysicalPitch = [integer, defalt 0 = horizontal]
            GroundUnitPitch = [integer, default 0 = horizontal] 
            TurretFireAngleSweep = [weaponslot][integer]
            TurretSweepSpeedModifier = [weaponslot	real number]
            ControlledWeaponSlots = [weaponslots]
            AllowsPitch = [Yes/No]
            MinIdleScanAngle = [real number]
            MaxIdleScanAngle = [real number]
            MinIdleScanInterval = [integer, milliseconds]
            MaxIdleScanInterval = [integer, milliseconds]
            RecenterTime = [integer,milliseconds]
            FiresWhileTurning = [Yes/No]
            InitiallyDisabled = [Yes/No]
	End
	AltTurret
		[as above]
	End
End

JetSlowDeathBehavior
[this module requires LocomotorWorksWhenDead = Yes on the objects Locomotor to function correctly]
	FXOnGroundDeath = [entry from FXList.INI]
	OCLOnGroundDeath = [entry from ObjectCreationList.INI]
	FXInitialDeath = [entry from FXList.INI]
	OCLInitialDeath = [entry from ObjectCreationList.INI]
	DelaySecondaryFromInitialDeath = [integer, milliseconds]
	FXSecondary = [entry from FXList.INI]
	OCLSecondary = [entry from ObjectCreationList.INI]
	DelayFinalBlowUpFromHitGround = [integer, milliseconds]
	DeathLoopSound = [entry from SoundEffects.INI]
	DestructionDelay = [integer, milliseconds]
	DestructionDelayVariance = [integer]
	DestructionAltitude = [integer]
	RollRate = [real number]
	RollRateDelta = [percent]
	PitchRate = [real number]
	FallHowFast = [percent]
	FXHitGround = [entry from FXList.INI]
	OCLHitGround = [entry from ObjectCreationList.INI]
	FXFinalBlowUp = [entry from FXList.INI]
	OCLFinalBlowUp = [entry from ObjectCreationList.INI]
    RequiredStatus = [status name]
    ExemptStatus = [status name]
    DeathTypes  = [DeathType listing]
End

KeepObjectDie
[no parameters - this module ensures the object remains in the game world when it is destroyed although it will no longer interact]
End

LaserUpdate
[this module is a ClientUpdate not a Behavior]
      MuzzleParticleSystem = [entry from ParticleSystem.INI]
      TargetParticleSystem = [entry from ParticleSystem.INI]
      PunchThroughScalar = [Real Number] ; If our target dies, we get this much bigger so it looks like we punched through
End

LifetimeUpdate
	MinLifetime = [integer, milliseconds]
	MaxLifetime = [integer, milliseconds, should be greater than or equal to MinLifetime]
End

LockWeaponCreate
[Prevents indeterminate state plus two unpickable weapons equaling no attack.]
   	 SlotToLock = [Weapon Slot List]
End

LocomotorSetUpgrade
[triggers use of SET_NORMAL_UPGRADED locomotor on this object and allows the use of VoiceMoveUpgrade within UnitSpecificSounds section of the object]
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
End

LeafletDropBehavior
[This module temporarily Disables Units within it's radius in a period of time. this should be use in conjunction with the "SPECIAL_LEAFLET_DROP" Special Power Enum]
    	DisabledDuration    =  [Interger]
    	Delay               =  [Interger]
    	AffectRadius        =  [Interger]
    	LeafletFXParticleSystem = [entry from ParticleSystem.INI]
End

MaxHealthUpgrade
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
		AddMaxHealth = [real number]
	ChangeType = [Change Type List]
End


MinefieldBehavior
[NOTE: This is a misleading Module name, since it's really single-Mine Behavior not a Minefield...]
	DetonationWeapon           = [entry from Weapon.INI]
	DetonatedBy                = [ENEMIES, ALLIES, NEUTRAL]
	Regenerates                = [Yes/No]
	StopsRegenAfterCreatorDies = [Yes/No]
	WorkersDetonate            = [Yes/No]
	CreatorDeathCheckRate      = [integer, milliseconds]
	ScootFromStartingPointTime = [integer, milliseconds]
	NumVirtualMines            = [integer]
	RepeatDetonateMoveThresh   = [real number]
	DegenPercentPerSecondAfterCreatorDies = [percent]
    CreationList = [Entry from ObjectCreationList.INI]   
End

MissileAIUpdate
    DetonateOnNoFuel = [Yes/No]
    DetonateCallsKill = [Yes/No]
    UseWeaponSpeed = [Yes/No] [Weapon speed is defined on the weapon itself]
    IgnitionFX = [entry from FXList.INI] 
    InitialVelocity = [integer]
    IgnitionDelay = [integer, milliseconds]
    FuelLifetime = [integer, milliseconds]
    TryToFollowTarget = [Yes/No]
    KillSelfDelay = [interger in msec]
    DistanceScatterWhenJammed       = [interger, This part of the module allows the use of JAMMED Model Condition State]
    GarrisonHitKillRequiredKindOf   = [KindOf]
    GarrisonHitKillForbiddenKindOf  = [KindOf]
    GarrisonHitKillCount            = [integer]
    GarrisonHitKillFX               = [entry from FXList.INI]
    DistanceToTargetForLock = [integer]
    DistanceToTargetBeforeDiving = [integer]
    DistanceToTravelBeforeTurning = [integer]
End 

MissileLauncherBuildingUpdate
[Allows the use of the DOOR_1_WAITING_OPEN, DOOR_1_CLOSING, DOOR_1_OPENING Model condition states]
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	DoorOpenTime = [integer, milliseconds]
	DoorWaitOpenTime = [integer, milliseconds]
	DoorCloseTime = [integer, milliseconds]
	DoorOpeningFX = [entry from FXList.INI]
	DoorOpenFX = [entry from FXList.INI]
	DoorWaitingToCloseFX = [entry from FXList.INI]
	DoorClosingFX = [entry from FXList.INI]
	DoorClosedFX = [entry from FXList.INI]
	DoorOpenIdleAudio = [entry from SoundEffects.INI]
End

MobMemberSlavedUpdate
	MustCatchUpRadius = [integer]
	NoNeedToCatchUpRadius = [integer]
	Squirrelliness = [real number]
	CatchUpCrisisBailTime = [integer]
End

MobNexusContain
	Slots = [integer]
	InitialPayload = [object name integer, multiple statements can be used]
	DamagePercentToUnits = [percent]
	HealthRegen%PerSec = [percentage]
End

MoneyCrateCollide
  	MoneyProvided = [integer]
	ForbiddenKindOf = [KindOf]
	HumanOnly = [Yes/No]
	BuildingPickup = [Yes/No]
    UpgradedBoost = [UpgradeType:{Entry from Upgrade.ini} Boost:{Interger}]
	PickupScience = [Entry from Science.INI]
	ForbidOwnerPlayer = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

ModelConditionUpgrade
[Allows you to switch to a model conditionstate via upgrades]
	TriggeredBy = [entry(s) from Upgrade.INI]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
	ConditionFlag = [Condition State list]
End

NeutronMissileSlowDeathBehavior
	DeathTypes = [DeathType listing]
	DestructionDelay = [integer, milliseconds]
	DestructionDelayVariance = [integer]
	DestructionAltitude = [integer]

	FX = [INITIAL/MIDPOINT/FINAL	entry from FXList.INI, multiple statements can be used]
	OCL = [INITIAL/MIDPOINT/FINAL	entry from ObjectCreationList.INI, multiple statements can be used]
	Weapon = [INITIAL/MIDPOINT/FINAL entry from Weapon.INI, multiple statements can be used]

	ScorchMarkSize = [integer]
	FXList = [enty from FXList.INI]
[N takes numbers from 1-9]    
	BlastNEnabled = [Yes/No]
	BlastNDelay = [integer, milliseconds]
	BlastNScorchDelay [integer, milliseconds]
	BlastNInnerRadius = [real number]
	BlastNOuterRadius = [real number]
	BlastNMaxDamage = [real number]
	BlastNMinDamage = [real number]
	BlastNToppleSpeed = [real number]
	BlastNPushForce = [real number]
End

NeutronBlastBehavior
[Kills the Pilot of the vehicles when shot by a projectile that has this module]
     BlastRadius = [interger]
     AffectAirborne = [Yes/No]
     AffectAllies = [Yes/No]
End

NeutronMissileUpdate
	LaunchFX = [entry from FXList.INI]
	TargetFromDirectlyAbove = [integer]
	RelativeSpeed = [real number]
	MaxTurnRate = [integer]
	ForwardDamping = [real number]
	SpecialSpeedTime = [integer, milliseconds]
	SpecialSpeedHeight = [integer]
	SpecialAccelFactor = [integer]
	SpecialJitterDistance = [real number]
    IgnitionFX = [entry from FXList.INI]
	DistanceToTargetBeforeDiving = [integer]
	DistanceToTravelBeforeTurning = [integer]
   	IgnitionDelay = [integer]
	DeliveryDecalRadius = [integer]
	DeliveryDecal
		Texture = [texture name without file extension]
		Style = [shadow style type]
		OpacityMin = [percent]
		OpacityMax = [percent]
		OpacityThrobTime = [integer, milliseconds]
		Color = [r: g: b: a:]
		OnlyVisibleToOwningPlayer = [Yes/No]
	End
End


ObjectCreationUpgrade
[Allows an Object create/spawn a new object via upgrades]
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
	UpgradeObject = [entry from ObjectCreationList.INI]
End


OCLSpecialPower
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	OCL = [entry from ObjectCreationList.INI]
	UpgradeOCL = [entry from Science.INI, entry from ObjectCreationList.INI, multiple entries for multiple upgrades]
	CreateLocation = [creation point(s)]
	StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
    ReferenceObject [object name]
    OCLAdjustPositionToPassable = [Yes/No]
    ScriptedSpecialPowerOnly = [Yes/No]
End


OCLUpdate
[A Context window is a reaction to this, no CommandSet] 
    FactionTriggered = [Yes/No]
    FactionOCL = [Faction: [faction] ] [entry from ObjectCreationList.INI, multiple statements can be made]
	MinDelay = [integer, milliseconds]
	MaxDelay = [integer, milliseconds]
	CreateAtEdge = [Yes/No]
	OCL = [entry from ObjectCreationList.INI]
End


OpenContain
	ContainMax = [integer]	
	EnterSound = [entry from SoundEffects.INI]
	ExitSound = [entry from SoundEffects.INI]
	AllowInsideKindOf = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	PassengersAllowedToFire = [Yes/No]
	PassengersInTurret = [Yes/No]
	NumberOfExitPaths = [integer]
	AllowAlliesInside = [Yes/No]
	AllowEnemiesInside = [Yes/No]
	AllowNeutralInside = [Yes/No]
	DamagePercentToUnits = [percent]
End


OverchargeBehavior
[module will display GUI:OverchargeExhausted when objects health is below specified percentage 
Allows the use of the "EnergyBonus" Object parameterand 
Allows this object to turn on or off the POWER_PLANT_UPGRADING and POWER_PLANT_UPGRADED Model ConditionState(s)]
	HealthPercentToDrainPerSecond    = [percent] [% of max health to drain per second when in overcharge mode]
	NotAllowedWhenHealthBelowPercent = [percent] [When the object's current health is below this, turn off overcharge bonus automatically]
End


OverlordContain
[Like Transport, but when full, passes transport queries along to first passenger (redirects like tunnel)]
	Slots = [integer]
	DamagePercentToUnits = [percentage]
	AllowInsideKindOf = [KindOf]
	PassengersAllowedToFire = [Yes/No]
	PassengersInTurret = [Yes/No]
    ExperienceSinkForRider = [Yes/No]
    WeaponBonusPassedToPassengers = [Yes/No]
    PayloadTemplateName = [object name]
	InitialPayload = [object name	integer, multiple statements can be used]
End


ParkingPlaceBehavior
[this module is used by FS_AIRFIELD KindOfs and if HasRunways is set then the model requires RunwayStartN, RunwayEndN, RunwayNPrepN, RunwayNParkingN and RunwayNParkNHan bones where N corrosponds to rows and columns. Module will only use the HeliPark01 bone for helicopters]
	HealAmountPerSecond = [integer]
	NumRows = [integer]
	NumCols = [integer]
	HasRunways = [Yes/No]
	ApproachHeight = [integer]
	ParkInHangars = [Yes/No]
    LandingDeckHeightOffset = [integer]	
End

PassengersFireUpgrade
[Contain Modules should have the "PassengersAllowedToFire" parameter to "No" in order for this module to work]
    TriggeredBy   = [entry(s) from Upgrade.INI]
    FXListUpgrade = [entry from FXList.INI]
    ConflictsWith = [entry(s) from Upgrade.INI]
    RequiresAllTriggers = [Yes/No]
End

ParachuteContain
[module hardcoded to utilize PARA_MAN, PARA_ATTACH and PARA_COG bones on contained object]
	PitchRateMax = [integer] 
	RollRateMax = [integer]
	LowAltitudeDamping = [real number]
	ParachuteOpenDist = [real number]
	KillWhenLandingInWaterSlop = [Yes/No]
	FreeFallDamagePercent = [percent]
	AllowInsideKindOf  = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	ParachuteOpenSound = [entry from SoundEffects.INI]
End

ParticleUplinkCannonUpdate
	SpecialPowerTemplate = [entry from SpecialPower.INI]

	BeginChargeTime = [integer, milliseconds]
	RaiseAntennaTime = [integer, milliseconds]

	ReadyDelayTime = [integer, milliseconds]
	WidthGrowTime = [integer, milliseconds]
	BeamTravelTime = [integer, milliseconds]
	TotalFiringTime  = [integer, milliseconds]

	RevealRange = [integer]

	OuterEffectBoneName = [bone name]
	OuterEffectNumBones = [integer]
	OuterNodesLightFlareParticleSystem = [entry from ParticleSystem.INI]
	OuterNodesMediumFlareParticleSystem = [entry from ParticleSystem.INI]
	OuterNodesIntenseFlareParticleSystem = [entry from ParticleSystem.INI]

	ConnectorBoneName = [bone name]
	ConnectorMediumLaserName = [entry from ParticleSystem.INI]
	ConnectorIntenseLaserName = [entry from ParticleSystem.INI]
	ConnectorMediumFlare = [entry from ParticleSystem.INI]
	ConnectorIntenseFlare = [entry from ParticleSystem.INI]

	FireBoneName = [bone name]

	LaserBaseLightFlareParticleSystemName = [entry from ParticleSystem.INI]
	LaserBaseMediumFlareParticleSystemName = [entry from ParticleSystem.INI]
	LaserBaseIntenseFlareParticleSystemName = [entry from ParticleSystem.INI]

	ParticleBeamLaserName = [entry from ParticleSystem.INI]
	SwathOfDeathDistance = [real number]
	SwathOfDeathAmplitude = [real number]
	TotalScorchMarks = [integer]
	ScorchMarkScalar = [real number]
	BeamLaunchFX = [entry from FXList.INI]
	DelayBetweenLaunchFX = [entry from FXList.INI]
	GroundHitFX = [entry from FXList.INI]
	DamagePerSecond = [integer]
	TotalDamagePulses = [integer]
	DamageType = [DamageType]
	DamageRadiusScalar = [real number]

	PoweringUpSoundLoop = [entry from SoundEffects.INI]
	UnpackToIdleSoundLoop = [entry from SoundEffects.INI]
	FiringToPackSoundLoop = [entry from SoundEffects.INI]
	GroundAnnihilationSoundLoop = [entry from SoundEffects.INI]

	DamagePulseRemnantObjectName = [object name]
	ManualDrivingSpeed = [integer]
	ManualFastDrivingSpeed = [integer]
	DoubleClickToFastDriveDelay = [integer, milliseconds]
End

PhysicsBehavior
[Allows the object to interact, tilt or define how heavy it is in the game world]
    VehicleCrashesIntoNonBuildingWeaponTemplate = [Entry from Weapon.ini]  
    VehicleCrashesIntoBuildingWeaponTemplate = [Entry from Weapon.ini]
	Mass                     = [integer]   [NOTE: negative values (eg: -0.5) will cause the game to crash but you can do something like this: 0.00002, Default is 50]
    ForwardFriction          = [integer]   [This is now friction-per-sec]
	ZFriction                = [integer]   [This countrols how many friction to apply when falling] 
	LateralFriction          = [integer]   [This is now friction-per-sec]
	AerodynamicFriction      = [integer]   [Everything is perfectly aerodynamic by default (0), 1 means not, so this will slow down while in the air (>1 means REALLY not)]
	CenterOfMassOffset       = [integer]   [Default of 0 means nothing tips as it falls.  Positive tips forward, negative tips back]
	AllowBouncing            = [Yes/No]    [Is the Object Allowed to Bounce? when hitting the ground or something? IF Yes, Allow bouncing, If no, No Bouncing]  
	AllowCollideForce        = [Yes/No]    [Allow Collide force when colliding to some thingy?]
	KillWhenRestingOnGround  = [Yes/No]    [If Yes, Kill the object while on the ground, If No, Allows object to live when resting on the ground] 
	MinFallHeightForDamage   = [integer]   
	FallHeightDamageFactor   = [real number]
	PitchRollYawFactor       = [real number]

   [This Part allows the use of the STUNNED and STUNNED_FLAILING Model ConditionState(s)]
 	ShockMaxRoll   = [real number]
	ShockMaxPitch  = [real number]
	ShockMaxYaw    = [real number]
	ShockResistance = [Enter from 0.1 to 1.0, 0.10 would be 10% while 1.0 is 100%]
	[NOTE: negative values to the "ShockResistance" field (eg: -0.5) will cause the game to crash but you can something like this: 0.00002]
End

PilotFindVehicleUpdate
[This update will have the pilot go find a "Friendly" vehicle To Enter -AI Only]
    ScanRate = [integer, millisecond. Limit 2000]
	ScanRange = [integer, milliseconds]
	MinHealth = [Enter from 0.1 to 1.0, 0.10 would be 10% while 1.0 is 100%]
                [If the vehicle is 0.5 or 50% healthy, The AI pilot will not entire the said vehicle he spotted] 	
End

PointDefenseLaserUpdate
	WeaponTemplate = [entry from Weapon.INI]
    	PrimaryTargetTypes = [KindOf]
    	SecondaryTargetTypes = [KindOf]
    	ScanRate = [integer, millisecond. Limit 2000]
    	ScanRange = [integer]
    	PredictTargetVelocityFactor = [real number]
End

PoisonedBehavior
	PoisonDamageInterval = [integer] ; Every this many msec, I will retake the poison damage dealt me...
	PoisonDuration       = [integer] ; ... for this long after last hit by poison damage
End

PowerPlantUpdate
[allows this object to act as an (upgradeable) power supply and Allows this object to use the POWER_PLANT_UPGRADING and POWER_PLANT_UPGRADED Model ConditionState(s)]
	RodsExtendTime = [integer, milliseconds]
End

PowerPlantUpgrade
[triggers use of EnergyBonus = setting on this object to provide extra power to the faction]
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
End

PreorderCreate
[no parameters - this module allows the use of the PREORDER ConditionState with this object which in turn is only triggered by presence of registry key 'Preorder' set to '1' in HKLM\Software\ElectronicArts\EAGames\Generals]
End

ProductionUpdate
[module is required on an object that uses PublicTimer code for any SpecialPower and/or required for units/structures with object upgrades]

	QuantityModifier             = [object name,integer]   [Redguards uses this so they can comeout of the barracks in pairs]
	DisabledTypesToProcess       = [disabled types list]

[Allows the use of the DOOR_x_WAITING_OPEN, DOOR_x_CLOSING, DOOR_x_OPENING Model condition state]
[X is from 1 to 4 since there's a hardcoded limit of four only]
	NumDoorAnimations            = [integer, maximum is 4] [How many doors to use when unit training is complete?]   
    DoorOpeningTime              = [integer, milliseconds] [in mSeconds, how long you want doors to be in open state]
    DoorWaitOpenTime             = [integer, milliseconds] [in mSeconds, time the door stays open, so units can exit]
    DoorCloseTime                = [integer, milliseconds] [in mSeconds, how long you want doors to be in open state]

    MaxQueueEntries              = [integer] [If Set to 1, you can't build multiple upgrades at the same time]
    ConstructionCompleteDuration = [integer, milliseconds] [in mSeconds, wait time so if you have multiple units they don't run over each other]
End

ProjectileStreamUpdate
[no parameters - this module allows the object to behave as a stream like water or other liquid ordinance]
End

ProneUpdate
[this module allows the use of the PRONE ConditionState with this object]
	DamageToFramesRatio = [real number]
End

PropagandaTowerBehavior
	Radius                        = [real number]            [How far can we affect units?]
	DelayBetweenUpdates           = [integer, milliseconds]  [How often to recheck the propaganda status (msec)
	HealPercentEachSecond         = [percent]                [Give this unit % of max health every second] 
	PulseFX                       = [entry from FXList.INI]  [Plays as often as DelayBetweenUpdates]
    AffectsSelf                   = [yes/no]                 [Does the bonus affects the owner?]
	UpgradeRequired               = [entry from Upgrade.INI] [What kind of upgrade do we need in order to increase our health bonus?]
	UpgradedHealPercentEachSecond = [percent]                [Give this unit % of max health every second when upgraded]  
	UpgradedPulseFX               = [entry from FXList.INI]  [Plays as often as DelayBetweenUpdates]
End

QueueProductionExitUpdate
	UnitCreatePoint = [x: y: z:]
	NaturalRallyPoint = [x: y: z:]
	ExitDelay = [integer, milliseconds]
	InitialBurst = [integer]
End

RadarUpdate
[Allows the use of the RADAR_EXTENDING and RADAR_UPGRADED model conditionstate and enables the Radar in the Commandbar]
	RadarExtendTime = [integer, milliseconds]
End

RadarUpgrade
[triggers use of RadarUpdate module on this object if present and enables the Radar in the Commandbar]
	TriggeredBy = [entry(s) from Upgrade.INI]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
	DisableProof = [Yes/No]
End

RadiusDecalUpdate
[no parameters - this module allows use of a radius decal cursor from Mouse.INI on the objects weapon when not explicitly fired]
End

RailedTransportAIUpdate
[Used on TRANSPORT KindOfs that follow a specific pre-defined waypoint path in a scripted manner]
[The Evacuate buton should use the "EXECUTE_RAILED_TRANSPORT" Command Enum in order to evacuate properly]
	PathPrefixName = [waypoint prefix name]
End

RailedTransportContain
[Used on TRANSPORT KindOfs that follow a specific pre-defined waypoint path in a scripted manner]
[The Evacuate buton should use the "EXECUTE_RAILED_TRANSPORT" Command Enum in order to evacuate properly]
	Slots = [integer]
	DamagePercentToUnits = [percentage]
	AllowInsideKindOf = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	DoorOpenTime = [integer, milliseconds]
	ScatterNearbyOnExit = [Yes/No]
	DestroyRidersWhoAreNotFreeToExit = [Yes/No]
	ResetMoodCheckTimeOnExit = [Yes/No]
	OrientLikeContainerOnExit = [Yes/No]
	KeepContainerVelocityOnExit = [Yes/No]
End

RailedTransportDockUpdate
[defaults to docking with DOCKWAITING07 bone on destination object]
	NumberApproachPositions = [integer]
	PullInsideDuration = [integer, milliseconds]
	PushOutsideDuration = [integer, milliseconds]
    ToleranceDistance = [integer]
End

RailroadBehavior
[requires object to follow waypoint path named as Tunnel, Disembark or Station with 'Start' and 'End' convention]
	IsLocomotive = [Yes/No]
	CrashFXTemplateName = [object name]
	PathPrefixName = [waypoint path prefix name if different from default]
	CarriageTemplateName = [object name, one entry required for each carriage, requires IsLocomotive = Yes]
	BigMetalBounceSound = [entry from SoundEffects.INI]
	SmallMetalBounceSound = [entry from SoundEffects.INI]
	MeatyBounceSound = [entry from SoundEffects.INI]
	RunningGarrisonSpeedMax = [integer]
    KillSpeedMin = [integer]
	SpeedMax = [integer, requires IsLocomotive = Yes]
	WaitAtStationTime = [integer, milliseconds, requires IsLocomotive = Yes]
	RunningSound = [entry from SoundEffects.INI, requires IsLocomotive = Yes]
	ClicketyClackSound = [entry from SoundEffects.INI]
	WhistleSound = [entry from SoundEffects.INI]
	Friction = [real number]
End

ReplaceObjectUpgrade
    TriggeredBy = [Entry(S) from upgrade.ini]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
    ReplaceObject = [Object name]
End

RebuildHoleBehavior
[Requires the "REBUILD_HOLE" Kind of on the object that will use this to work properly]
	WorkerObjectName = [object name]
	WorkerRespawnDelay = [integer, milliseconds]
	HoleHealthRegen%PerSecond = [percentage]
End 

RebuildHoleExposeDie
[requires the "object" stated on the HoleName Parameter to have the REBUILD_HOLE KindOF and RebuildHoleBehavior Module in order to work]
	HoleName = [object name] 
	HoleMaxHealth = [real number]
	TransferAttackers = [Yes/No]
    DeathTypes = [DeathTypes listing]
End

RepairDockUpdate
[module is hardcoded to require DockWaitingN, DockEndN, DockActionN and DockStartN bones, where N should correspond to NumberApproachPositions]
	TimeForFullHeal = [integer, milliseconds]
    AllowsPassthrough = [Yes\No] 
	NumberApproachPositions = [integer]
End

RiderChangeContain
    [module requires ExitStartN and ExitEndN bones defined unless over-ridden by ExitBone definition and allows the use of SoundEnter And SoundExit ]
    
    [Description]
    [A list of each valid rider that is allowed to ride this object. Each rider is
    assigned a modelcondition state, a weaponset flag, an object status bit, and
    a commandset override. The actual object is hidden inside the container so the 
    visible rider is fluff. Also riders are deleted (not killed) when the bike is
    destroyed, so all deaths must be OCLs on the bike]

    [N  Takes number from 1 to 8]
    RiderN                = [Object] [Model CondtionState] [WeaponSetCondition] [StatusBitType] [Entry From CommandSet.ini] [LocomotorSetType]
    ScuttleDelay          = [interger, milliseconds]
    ScuttleStatus         = [StatusBit Type]
	Slots                 = [integer}
	DamagePercentToUnits  = [percentage]
	AllowInsideKindOf     = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	ExitDelay = [integer, milliseconds]
    NumberOfExitPaths = [integer, should corrospond to N]
	GoAggressiveOnExit = [Yes/No]
	ScatterNearbyOnExit = [Yes/No]
	OrientLikeContainerOnExit = [Yes/No]
	KeepContainerVelocityOnExit = [Yes/No]
    BurnedDeathToUnits  = [Yes/No]
	ExitPitchRate = [integer]
	ExitBone = [bone name]
	DoorOpenTime = [integer, milliseconds]
	HealthRegen%PerSec = [percentage]
	DestroyRidersWhoAreNotFreeToExit = [Yes/No]
	ResetMoodCheckTimeOnExit = [Yes/No]
	InitialPayload = [object name	integer, multiple statements can be used]
	ArmedRidersUpgradeMyWeaponSet = [Yes/No]
    DelayExitInAir = [Yes/No]
	EnterSound = [entry from SoundEffects.INI] ;SoundEnter Override
	ExitSound = [entry from SoundEffects.INI]  ;SoundExit Override
End

 SalvageCrateCollide
 [module is hardcoded to apply the EXJunkCrate texture to this object]
    MoneyChance = [percent]
	MinMoney = [integer]
	MaxMoney = [integer]
	LevelChance = [percent]
	WeaponChance = [percent]
	ForbiddenKindOf = [KindOf]
	HumanOnly = [Yes/No]
	PickupScience = [entry from Science.INI]
	ForbidOwnerPlayer = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotagePowerPlantCrateCollide
[module is hardcoded to play the SabotageBuildingPower sound definition when triggered]
      BuildingPickup = [Yes/No]
      SabotagePowerDuration = [real number]
      ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageSupplyDropzoneCrateCollide 
      BuildingPickup = [Yes/No]
	StealCashAmount = [real number]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageSuperweaponCrateCollide
[module is hardcoded to play the SabotageBuilding  sound definition when triggered]
      BuildingPickup = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageCommandCenterCrateCollide
[module is hardcoded to play the SabotageBuilding  sound definition when triggered]
      BuildingPickup = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageSupplyCenterCrateCollide
[module is hardcoded to play the SabotageBuilding  sound definition when triggered]
      BuildingPickup = [Yes/No]
	StealCashAmount = [real number]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageMilitaryFactoryCrateCollide
[module is hardcoded to play the SabotageBuilding  sound definition when triggered]
      BuildingPickup = [Yes/No]
      SabotageDuration = [real number]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageFakeBuildingCrateCollide
[module is hardcoded to play the SabotageBuilding  sound definition when triggered]
      BuildingPickup = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SabotageInternetCenterCrateCollide
[module is hardcoded to play the SabotageBuilding  sound definition when triggered]
      BuildingPickup = [Yes/No]
      SabotageDuration = [real number]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

ShroudCrateCollide 
[no parameters - this module shrouds the entire map for the owner of the object that collides with this object]
	HumanOnly = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

SlavedUpdate
	GuardMaxRange = [integer]
	GuardWanderRange = [integer]
	AttackRange = [integer]
	AttackWanderRange = [integer]
	ScoutRange = [integer]
	ScoutWanderRange = [integer]
	StayOnSameLayerAsMaster = [Yes/No]
	DistToTargetToGrantRangeBonus = [integer] 
	RepairRange = [integer]
	RepairMinAltitude = [real number]
	RepairMaxAltitude = [real number]
	RepairRatePerSecond = [integer]
	RepairWhenBelowHealth% = [percent]
	RepairMinReadyTime = [integer, milliseconds]
	RepairMaxReadyTime  = [integer, milliseconds]
	RepairMinWeldTime = [integer, milliseconds]
	RepairMaxWeldTime = [integer, milliseconds]
	RepairWeldingSys = [entry from ParticleSystem.INI]
	RepairWeldingFXBone = [bone name]
End

SlowDeathBehavior
	DeathTypes = [DeathType listing]
	SinkRate = [real number]
	ExemptStatus = [status name]
    RequiredStatus = [status name]
	ProbabilityModifier = [integer]
	ModifierBonusPerOverkillPercent = [percent]
	SinkDelay = [integer, milliseconds]
	SinkDelayVariance = [integer]
	DestructionDelay = [integer, milliseconds]
	DestructionDelayVariance = [integer]
	DestructionAltitude = [integer]
	FlingForce = [integer]
	FlingForceVariance = [integer]
	FlingPitch = [integer]
	FlingPitchVariance = [integer]
	FX = [INITIAL/MIDPOINT/FINAL	entry from FXList.INI, multiple statements can be used]
	OCL = [INITIAL/MIDPOINT/FINAL	entry from ObjectCreationList.INI, multiple statements can be used]
	Weapon = [INITIAL/MIDPOINT/FINAL entry from Weapon.INI, multiple statements can be used]
End

SpawnBehavior
	SpawnNumber = [integer]
	SpawnReplaceDelay = [integer, milliseconds multiple statements can be used for multiple spawn.]
	OneShot = [Yes/No]
	CanReclaimOrphans = [Yes/No]
	AggregateHealth = [Yes/No]
	ExitByBudding = [Yes/No]
	SpawnTemplateName = [object name, multiple entries can be used for multiple objects]
	SpawnedRequireSpawner = [Yes/No]
	InitialBurst = [integer]
    SlavesHaveFreeWill = [Yes/No]
End

SpawnPointProductionExitUpdate
	SpawnPointBoneName = [bone name]
End

SpecialAbility
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	UpdateModuleStartsAttack = [Yes/No]
	InitiateSound = [entry from SoundEffects.INI]
	StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
End

SpecialAbilityUpdate
[this module  allows the use of PACKING and UNPACKING ConditionState(s)]
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	StartAbilityRange = [real number]
	AbilityAbortRange = [real number]
	PreparationTime = [integer, milliseconds]]
	PreTriggerUnstealthTime = [integer, milliseconds]
	SkipPackingWithNoTarget = [Yes/No]
	SpecialObject = [object name]
	SpecialObjectAttachToBone = [bone name]
	MaxSpecialObjects = [integer]
	SpecialObjectsPersistent = [Yes/No]
	EffectDuration = [integer, milliseconds]
	EffectValue = [integer]
	UniqueSpecialObjectTargets = [Yes/No]
	SpecialObjectsPersistWhenOwnerDies = [Yes/No]
	AlwaysValidateSpecialObjects = [Yes/No]
	FlipOwnerAfterPacking = [Yes/No]
	FlipOwnerAfterUnpacking = [Yes/No]
	FleeRangeAfterCompletion = [real number]
	DisableFXParticleSystem = [entry from ParticleSystem.INI]
	DoCaptureFX = [Yes/No]
	PackSound = [entry from SoundEffects.INI]
	UnpackSound = [entry from SoundEffects.INI]
	PrepSoundLoop = [entry from SoundEffects.INI]
	TriggerSound = [entry from SoundEffects.INI]
	LoseStealthOnTrigger = [Yes/No]
	AwardXPForTriggering = [integer]
	SkillPointsForTriggering = [integer]
	ApproachRequiresLOS = [Yes/No]
    NeedToFaceTarget = [Yes/No]
	UnpackTime = [integer, milliseconds]
	PackTime = [integer, milliseconds]
    PersistentPrepTime        = [integer]
    PersistenceRequiresRecharge = [Yes/No]
End 

SpecialPowerCreate
[no parameters - this module forces the objects SpecialPower to start charging upon creation of the object - required by special powers that have PublicTimer = Yes]
End

SpecialPowerCompletionDie
	SpecialPowerTemplate = [entry from SpecialPower.INI]
End

SpectreGunshipUpdate
    	GattlingStrafeFXParticleSystem  = [entry from ParticleSystem.INI]
        SpecialPowerTemplate            = [entry from Weapon.INI]
		HowitzerWeaponTemplate          = [entry from Weapon.INI]
    	GattlingTemplateName            = [entry from Weapon.INI]
    	RandomOffsetForHowitzer = [real number]     
    	TargetingReticleRadius  = [real number]
    	OrbitInsertionSlope     = [real number]    ; steepness of orbit entry
    	GunshipOrbitRadius      = [real number]
    	HowitzerFiringRate      = [milliseconds]    ; how long between each attempted shot of howitzer
    	HowitzerFollowLag       = [interger]    ; how long after gattling acquires target can howitzer shoot same
    	StrafingIncrement       = [real number]    ; how far apart is each shot of the gattling as it strafes
    	AttackAreaRadius        = [real number]
		OrbitTime               = [milliseconds]
		AttackAreaDecal
		Texture = [texture name without file extension]
			Style = [shadow style type]
			OpacityMin = [percent]
			OpacityMax = [percent]
			OpacityThrobTime = [integer, milliseconds]
			Color = [r: g: b: a:]
			OnlyVisibleToOwningPlayer = [Yes/No]
        End
        TargetingReticleDecal
			Texture = [texture name without file extension]
			Style = [shadow style type]
			OpacityMin = [percent]
			OpacityMax = [percent]
			OpacityThrobTime = [integer, milliseconds]
			Color = [r: g: b: a:]
			OnlyVisibleToOwningPlayer = [Yes/No]
		End
End

SpectreGunshipDeploymentUpdate
    	SpecialPowerTemplate = [entry(s) from SpecialPower.ini
        RequiredScience  = [Entry From Science.ini]
    	GunshipTemplateName = [Object Entry]
    	AttackAreaRadius = [interger
    	CreateLocation = [OCL CreationPointType List ]
End

SpyVisionUpdate
        NeedsUpgrade  = [Yes/No]
        SelfPowered   = [Yes/No]
        SelfPoweredDuration = [Interger, Millisecond]
        SelfPoweredInterval = [Interger, Millisecond]
        TriggeredBy   = [Entry from upgrade.ini]
		FXListUpgrade =[entry from FXList.INI]
    	ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
    	SpyOnKindof   = [KindOf list] [DEFAULTS	 Too all defined kindof]
End

SpyVisionSpecialPower
	SpecialPowerTemplate = [entry from SpecialPower.INI]
	BaseDuration = [integer, milliseconds]
	BonusDurationPerCaptured = [integer, milliseconds]
	MaxDuration = [integer, milliseconds]
	StartsPaused = [Yes/No, yes requires UnpauseSpecialPowerUpgrade module]
End

SquishCollide
[no parameters - this module allows the object to use the SPLATTED death type and SPLATTED ConditionState - infantry only]
End

StatusBitsUpgrade
	TriggeredBy = [entry(s) from Upgrade.INI]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
    RemovesUpgrades [entry(s) from Upgrade.INI, multiple "upgrade" entrys can be put here]
	RequiresAllTriggers = [Yes/No]
	StatusToSet = [status name]
	StatusToClear = [status name]
End

SmartBombTargetHomingUpdate
[this module dynamically adjust the "bomb" so it will drop to its designated target instead of missing it]
    CourseCorrectionScalar = [real number] [ 1=no homing, 0=snapto; 0.99=smooth, 0.95=too-fast]
End

  
StealthDetectorUpdate
[module is hardcoded to display MESSAGE:StealthDiscovered when triggered]
	DetectionRate            = [integer, milliseconds] [how often to rescan for stealthed things in my sight (msec)] [how far can we scan for stealthed things?]
	DetectionRange           = [integer. if not specified, Defaults to Object's VisionRange]
	CanDetectWhileGarrisoned = [Yes/No] [Can i detect or scan for stealthed things when i'm garrisoned?]
	CanDetectWhileContained  = [Yes/No] [Or loaded in a vehicle?]
	ExtraRequiredKindOf      = [KindOf] [If the unit have a particular kind of defined here, Detect and reveal it] [For an example on how this works, check the Dozers]
	ExtraForbiddenKindOf     = [KindOf] [If the unit have a particular kind of defined here, Don't Detect and reveal it]
	PingSound                = [entry from SoundEffects.INI]   [If scanning for stealthed items, play this]
	LoudPingSound            = [entry from SoundEffects.INI]   [If we found stealthed items, play this]
	IRParticleSysName        = [entry from ParticleSystem.INI] [Use this particle while we're scanning while doing nothing]
	IRBrightParticleSysName  = [entry from ParticleSystem.INI] [Use this particle if we found stealthed things]
	IRGridParticleSysName    = [entry from ParticleSystem.INI] [Use this particle to put a grid on the stealthed things we found]
	IRBeaconParticleSysName  = [entry from ParticleSystem.INI] [Use this particle if we found stealthed things]
	IRParticleSysBone        = [bone name]                     [Where to spawn the particle fx's]
	InitiallyDisabled        = [Yes/No]                        [Used by strategy centers]
End

StealthUpdate
[This module allows the use of SoundStealthOn and SoundStealthOff parameters on the object and is hardcoded to display MESSAGE:StealthNeutralized when the object has been discovered]
        UseRiderStealth             = [Yes/No]
		StealthDelay = [integer, milliseconds]
		MoveThresholdSpeed = [integer]
		StealthForbiddenConditions = [Status Bit types]
		HintDetectableConditions = [Status Bit types]
		FriendlyOpacityMin = [percentage]
		FriendlyOpacityMax = [percentage]
		PulseFrequency = [integer, milliseconds]
		RevealDistanceFromTarget = [real number]
        ForbiddenStatus  = [Status Bit types]
        RequiredStatus = [Status Bit types]
		OrderIdleEnemiesToAttackMeUponReveal = [Yes/No]
		InnateStealth = [Yes/No]
        EnemyDetectionEvaEvent = [Entry from Eva.ini]
        OwnDetectionEvaEvent = [Entry from Eva.ini]
        GrantedBySpecialPower = [Yes/No]      
        BlackMarketCheckDelay = [integer, milliseconds]

    [Note: This part needs the DISGUISER KindOf defined on the object and 
    [allows the use of DisguiseStarted and DisguiseRevealedSuccess 
    [and DisguiseRevealedFailure within UnitSpecificSounds section of the object]
	DisguisesAsTeam = [Yes/No]
	DisguiseFX = [entry from FXList.INI]
	DisguiseRevealFX = [entry from FXList.INI]
	DisguiseTransitionTime = [integer, milliseconds]
	DisguiseRevealTransitionTime = [integer, milliseconds]
End

StealthUpgrade
[enables use of StealthUpdate module on this object, requires InnateStealth = No defined in the StealthUpdate module]
	TriggeredBy = [entry(s) from Upgrade.INI]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
End

StickyBombUpdate
[this module keeps this object attached properly to the intended target if the targetted object moves 
and allows the use of UnitBombPing and StickyBombCreated within UnitSpecificSounds section of the object]
       GeometryBasedDamageWeapon = [Entry from Weapon.ini][We add our bounding circle to the radius of this weapon, and damage people ourselves]
       GeometryBasedDamageFX = [Entry from FXList.INI][And we modify our detonation fx here]
End

StructureBody
[This is a Body module not a Behavior module. Used by objects with STRUCTURE and IMMOBILE KindOf's defined.]
      MaxHealth = [integer]
      InitialHealth = [integer
      SubdualDamageCap = [integer]
      SubdualDamageHealRate = [integer]  
      SubdualDamageHealAmount = [integer] 
End

StructureCollapseUpdate
    ExemptStatus = [StatusBits type]
	MinCollapseDelay = [integer, milliseconds]
	MaxCollapseDelay = [integer, milliseconds]
	CollapseDamping = real number]
	MaxShudder = [real number]
	MinBurstDelay = [integer, milliseconds]
	MaxBurstDelay = [integer, milliseconds]
	BigBurstFrequency = [integer]
	OCL = [INITIAL/FINAL/DELAY/BURST	entry from ObjectCreationList.INI,Multiple Statements can me made]
	FXList = [INITIAL/FINAL/DELAY/BURST	entry from FXList.INI,Multiple Statements can me made]
End

StructureToppleUpdate
	MinToppleDelay = [integer, milliseconds]
	MaxToppleDelay = [integer, milliseconds]
	MinToppleBurstDelay = [integer, milliseconds]
	MaxToppleBurstDelay = [integer, milliseconds]
	StructuralIntegrity = [real number]
	StructuralDecay = [real number]
	TopplingFX = [entry from FXList.INI]
	ToppleDelayFX = [entry from FXList.INI]
	ToppleStartFX = [entry from FXList.INI]
	ToppleDoneFX = [entry from FXList.INI]
	CrushingFX = [entry from FXList.INI]
	CrushingWeaponName = [entry from Weapon.INI]
	DamageFXTypes = [DamageTypes listing]
	AngleFX = [real number entry from FXList.INI]
End

SubObjectsUpgrade
[shows/hides sub-objects on this objects model via upgrading]
	TriggeredBy = [entry(s) from Upgrade.INI]
	FXListUpgrade = [entry from FXList.INI]
	ConflictsWith = [entry(s) from Upgrade.INI]
	RequiresAllTriggers = [Yes/No]
	ShowSubObjects = [sub object name(s)]
	HideSubObjects = [sub object name(s)]
End


SupplyCenterCreate
[This modules requires the "SUPPLY_SOURCE" KindOf defined in order to properly work]
[no parameters - this module ensures the object acts as a destination for collection of supplies]
End


SupplyCenterDockUpdate
[This modules requires the "SUPPLY_SOURCE" KindOf defined in order to properly work]
	NumberApproachPositions = [integer]
	AllowsPassthrough       = [Yes/No]
    GrantTemporaryStealth   = [interger]
End


SupplyCenterProductionExitUpdate
[This modules requires the "SUPPLY_SOURCE" KindOf defined in order to properly work]
[logic requires NaturalRallyPoint x: co-ordinate to match the object GeometryMajorRadius!]
	UnitCreatePoint = [x: y: z:]
 	NaturalRallyPoint = [x: y: z:]
    GrantTemporaryStealth = [interger/millisec]  [Give temporary stealth to the harvester whenever created. Loses it when player order given.]
End


SupplyTruckAIUpdate
[This requires the object to have KindOf = HARVESTER]
	MaxBoxes = [integer]
	SupplyCenterActionDelay = [integer]
	SupplyWarehouseActionDelay = [integer]
	SupplyWarehouseScanDistance = [integer]
	SuppliesDepletedVoice = [sound name from Voice.INI]
	AutoAcquireEnemiesWhenIdle = [Yes/No][NOTWHILEATTACKING/ATTACK_BUILDINGS/STEALTHED]
	MoodAttackCheckRate = [integer, milliseconds, default is 2000]
    ForbidPlayerCommands =  [Yes/No]
    TurretsLinked =[Yes/No]
	Turret
     	 TurretTurnRate = [integer]
     	TurretPitchRate = [integer]
		NaturalTurretAngle = [integer]
		NaturalTurretPitch = [integer]
  		FirePitch = [integer]
		MinPhysicalPitch = [integer, defalt 0 = horizontal]
		GroundUnitPitch = [integer, default 0 = horizontal] 
        TurretFireAngleSweep = [weaponslot][integer]
        TurretSweepSpeedModifier = [weaponslot	real number]
      	ControlledWeaponSlots = [weaponslots]
    	AllowsPitch = [Yes/No]
       	MinIdleScanAngle = [real number]
      	MaxIdleScanAngle = [real number]
        MinIdleScanInterval = [integer, milliseconds]
        MaxIdleScanInterval = [integer, milliseconds]
		RecenterTime = [integer,milliseconds]
		FiresWhileTurning = [Yes/No]
		InitiallyDisabled = [Yes/No]
	End
	AltTurret
		[as above]
	End
End


SupplyWarehouseCreate
[no parameters - this module ensures the object acts as a source for collection of supplies]
End


SupplyWarehouseCripplingBehavior
[This modules requires the "SUPPLY_SOURCE" KindOf defined in order to properly work, Forces object to dynamically restore itself - module is triggered when object is REALLYDAMAGED or at 30% of MaxHealth]
	SelfHealingSupression = [integer, milliseconds] [Time since last damage until I can start to heal]
	SelfHealDelay = [integer, milliseconds]         [Once I am okay to heal, how often to do so]
	SelfHealAmount = [integer]                      [And how much to restore my health points]
End

SupplyWarehouseDockUpdate
[This modules requires the "SUPPLY_SOURCE" KindOf defined in order to properly work]
	NumberApproachPositions = [integer]  [If set, Use DockWaitingN, DockEndN, DockActionN and DockStartN bones, where N should correspond to NumberApproachPositions] 
									     [If -1 is set, anyone can approch this without using any docking bones]
	AllowPassthrough        = [Yes/No]   [Should we allow harvesters to go thru?]
	StartingBoxes           = [integer]  [Even if you use a script to set the cash value, this will determine graphically what "full" is]
	DeleteWhenEmpty         = [Yes/No]   [Delete Supply Resource if depleted]
End

SwayClientUpdate
[no parameters, this module is a ClientUpdate not a Behavior and allows object to sway if enabled in GameData.INI or allowed by LOD/map specific settings]
End

TechBuildingBehavior
[Objects with TECH_BUILDING Kindof requires this module]
	PulseFX = [entry from FXList.INI]
    PulseFXRate = [integer, milliseconds]
End

TensileFormationUpdate
[allows object to share dynamic formation - if not enabled then damage to this object will affect all nearby objects that have this module, otherwise damage only affects this object]
	Enabled = [Yes/No]
    CrackSound = [entry from SoundEffects.INI]
End

ToppleUpdate
	ToppleFX = [entry from FXList.INI]
	BounceFX = [entry from FXList.INI]
	StumpName = [object name]
	KillWhenStartToppling = [Yes/No]
    KillWhenFinishedToppling = [yes/no]
	KillStumpWhenToppled = [Yes/No]
	ToppleLeftOrRightOnly = [Yes/No]
	ReorientToppledRubble = [Yes/No]
	InitialVelocityPercent = [percent, default is 1%]
	InitialAccelPercent = [percent,default is 1%]
	BounceVelocityPercent = [percent, default is 30%]
End

TransitionDamageFX
[N takes numbers from 1-12]
	DamagedFXListN = [Loc:{x: y: z:} FXList:{entry from FXList.INI}]
	DamagedParticleSystemN = [bone:{name} RandomBone:{Yes/No} PSys:{entry from ParticleSystem.INI}]
	DamagedOCLN = [Loc:{x: y: z:} OCL:{entry from ObjectCreationList.INI}]

	ReallyDamagedFXListN = [Loc:{x: y: z:} FXList:{entry from FXList.INI}]
	ReallyDamagedOCLN = [Loc:{x: y: z:} OCL:{entry from ObjectCreationList.INI}]
	ReallyDamagedParticleSystemN = [bone:{name} RandomBone:{Yes/No} PSys:{entry from ParticleSystem.INI}]

	RubbleFXListN = [Loc:{x: y: z:} FXList:{entry from FXList.INI}]
	RubbleOCLN = [Loc:{x: y: z:} OCL:{entry from ObjectCreationList.INI}]
	RubbleParticleSystemN = [bone:{name} RandomBone:{Yes/No} PSys:{entry from ParticleSystem.INI}]
End


TransportAIUpdate
[used on TRANSPORT KindOfs that contain other objects - see AIUpdateInterface Module for all associated parameters]
End


TransportContain
[module requires ExitStartN and ExitEndN bones defined unless over-ridden by ExitBone definition and allows the use of SoundEnter And SoundExit UnitSpecificSounds ]
	Slots = [integer]
	DamagePercentToUnits = [percentage]
	AllowInsideKindOf = [KindOf listing]
	ForbidInsideKindOf = [KindOf listing]
	AllowAlliesInside = [Yes/No]
    AllowNeutralInside = [Yes/No]
	AllowEnemiesInside = [Yes/No]
	ExitDelay = [integer, milliseconds]
    NumberOfExitPaths = [integer, should corrospond to N]
	GoAggressiveOnExit = [Yes/No]
	ScatterNearbyOnExit = [Yes/No]
	OrientLikeContainerOnExit = [Yes/No]
	KeepContainerVelocityOnExit = [Yes/No]
    BurnedDeathToUnits  = [Yes/No]
	ExitPitchRate = [integer]
	ExitBone = [bone name]
	DoorOpenTime = [integer, milliseconds]
	HealthRegen%PerSec = [percentage]
	DestroyRidersWhoAreNotFreeToExit = [Yes/No]
	ResetMoodCheckTimeOnExit = [Yes/No]
	InitialPayload = [object name	integer, multiple statements can be used]
	ArmedRidersUpgradeMyWeaponSet = [Yes/No]
    DelayExitInAir = [Yes/No]
	EnterSound = [entry from SoundEffects.INI] ;SoundEnter Override
	ExitSound = [entry from SoundEffects.INI]  ;SoundExit Override
    WeaponBonusPassedToPassengers = [Yes/No]
    ShouldDrawPips = [Yes/No]
End

TunnelContain
[tunnel contain limit is special case global logic defined by MaxTunnelCapacity in GameData.INI and allows the use of SoundEnter And SoundExit]
	TimeForFullHeal = [integer, milliseconds]
	AllowAlliesInside = [Yes/No]
    AllowNeutralInside = [Yes/No]
	AllowEnemiesInside = [Yes/No]
End

UndeadBody 
[Body module that treats the first death as a state change, Triggers the Use of SECOND_LIFE ConditionState/ArmorSet and allows the use of the BattleBusSlowDeathBehavior module]
    MaxHealth           = [integer]
    InitialHealth       = [integer]
    SecondLifeMaxHealth =[integer]
    SubdualDamageCap = [integer]
    SubdualDamageHealRate = [integer]
    SubdualDamageHealAmount = [integer]
End

UnitCrateCollide
	UnitCount = [integer]
	UnitName = [object name]
	ForbiddenKindOf = [KindOf]
	HumanOnly = [Yes/No]
	BuildingPickup = [Yes/No]
	PickupScience = [entry from Science.INI]
	ForbidOwnerPlayer = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

UnpauseSpecialPowerUpgrade
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
	SpecialPowerTemplate = [entry from SpecialPower.INI]
End

UpgradeDie
[This frees the object based upgrade for the producer object]
[NOTE: the Module tag name and Upgrade Name you will define in the "UpgradeToRemove" tag should be the exact upgrade name or your game will crash]
	DeathTypes = [DeathTypes listing]
	UpgradeToRemove = [entry from Upgrade.INI moduletag name, 
        RequiredStatus = [StatusBits type]
        ExemptStatus = [StatusBits type]
End

VeterancyGainCreate
	StartingLevel = [Veterancy Level List]
	ScienceRequired = [entry from Science.INI]
End

VeterancyCrateCollide
    	EffectRange = [real number, 0 range affects only the object that collides with this]
    	RequiredKindOf = [KindOf]
    	ForbiddenKindOf = [KindOf]
    	AddsOwnerVeterancy = [Yes/No]
    	IsPilot = [Yes/No]
	HumanOnly = [Yes/No]
	BuildingPickup = [Yes/No]
	PickupScience = [entry from Science.INI]
	ForbidOwnerPlayer = [Yes/No]
	ExecuteFX = [entry from FXList.INI]
	ExecuteAnimation = [entry from Animation2D.INI]
	ExecuteAnimationTime = [real number, seconds]
	ExecuteAnimationZRise = [integer, units per second to rise]
	ExecuteAnimationFades = [Yes/No]
End

WanderAIUpdate
[no parameters - this module allows this object to move randomly about its point of origin using a SET_WANDER locomotor]
End

WaveGuideUpdate
[module is hardcoded to use the following particle system definitions: WaveSpray03, WaveSpray02, WaveSpray01, WaveSplashRight01, WaveSplashLeft01, WaveHit01, WaveSplash01 and also uses the WaterWaveBridge object definition as a template when it collides with a bridge- Requires a WAVEGUIDE KindOf]
	WaveDelay = [integer, milliseconds]
	YSize = [real number]
	LinearWaveSpacing = [real number]
	WaveBendMagnitude = [real number]
	WaterVelocity = [real number]
	PreferredHeight = [real number]
	ShorelineEffectDistance = [real number]
	DamageRadius = [real number]
	DamageAmount = [integer]
	ToppleForce = [real number]
	RandomSplashSound = [entry from SoundEffects.INI]
	RandomSplashSoundFrequency = [integer]
	BridgeParticle = [entry from ParticleSystem.INI]
	BridgeParticleAngleFudge = [floating point number]
	LoopingSound = [entry from SoundEffects.INI]
End 

WeaponBonusUpgrade
[Triggers use of WeaponBonus = parameter on this objects weapons]
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
End

WeaponBonusUpdate
[Temporarily Triggers use of a certain WeaponBonus found in Gamedata.ini]
    RequiredAffectKindOf = [Kindof]            ; what kindof we allow so it will get affected by the "temp" weapon bonus?
    ForbiddenAffectKindOf = [Kindof]           ; what kindof we forbid so it will not get affected by the "temp" weapon bonus?
    BonusDuration = [milliseconds]	           ; How long effect lasts,ms
    BonusDelay = [integer]	                 ; How often to pulse (short lifetime will trump, of course)
    BonusRange = [integer]                     ; Keep in line with radius cursor size in special power template
    BonusConditionType = [Weapon Bonus List]   ; And which bonus to give
End

WeaponSetUpgrade
[Triggers use of PLAYER_UPGRADE WeaponSet on this object and Allows the use of WeaponUpgradeSound within UnitSpecificSounds section of the object and Allows the use of the WEAPONSET_PLAYER_UPGRADE ConditionState]
	TriggeredBy = [entry(s) from Upgrade.INI]
		FXListUpgrade = [entry from FXList.INI]
		ConflictsWith = [entry(s) from Upgrade.INI]
		RequiresAllTriggers = [Yes/No]
End

WorkerAIUpdate
[this module allows the use of VoiceRepair  and  VoiceBuildResponse and VoiceSupply and  VoiceNoBuild and VoiceTaskComplete within UnitSpecificSounds section of the object -Requires Kindof = DOZER HARVESTER]
	RepairHealthPercentPerSecond = [percent]
	BoredTime = [integer, milliseconds]
	BoredRange = [integer]
	MaxBoxes = [integer]
	AutoAcquireEnemiesWhenIdle = [Yes/No]
    UpgradedSupplyBoost  = [integer] 
	SupplyCenterActionDelay = [integer]
	SupplyWarehouseActionDelay = [integer]
	SupplyWarehouseScanDistance = [integer]
	SuppliesDepletedVoice = [sound name from Voice.INI]
End

W3D Draw Modules:
NOTE: Draw modules should ALWAYS Be on the beginning of the object code in order to appear properly in Worldbuilder and/or ingame]

W3DDebrisDraw
[no parameters - special case draw module used by ObjectCreationList.INI when using the CreateDebris code which defaults to calling the GenericDebris object definition as a template for each debris object generated]
End

W3DDefaultDraw
[no parameters - all world objects should use a draw module, this module is employed where an object should never actually be drawn due either to the nature or type of the object or because its drawing is handled by other logic, e.g. bridges]
End

W3DDependencyModelDraw
[special case draw module which is interdependent with the W3DOverlordTankDraw and the W3DOverlordAirCraftDraw and the W3DOverlordTruckDraw module(s)]
	[see W3DModelDraw module for associated parameters]
	AttachToBoneInContainer = [bone name from object in W3DOverlordTankDraw module]
End

W3DModelDraw
      DefaultConditionState [OR, ConditionState = NONE]
		Model = [W3D model filename]
		
		[Weapon Bone Settings]
		WeaponRecoilBone   = [Weapon Slot list,bone name, multiple statements can be used]
		WeaponFireFXBone   = [Weapon Slot list, bone name, multiple statements can be used]
		WeaponMuzzleFlash  = [Weapon Slot list, bone name, multiple statements can be used]
		WeaponLaunchBone   = [Weapon Slot list, bone name, multiple statements can be used]
		WeaponHideShowBone = [Weapon Slot list, bone name]

		[Model Animation Settings]
		Animation = [model animation name, interger, interger , multiple statements can be used]
        AnimationMode = [Animation Mode Types]
		AnimationSpeedFactorRange = [interger, interger]
		IdleAnimation = [model animation name, interger, interger] [multiple statements can be used]
		TransitionKey = [TransitionKey name]
		Flags = [AnimationFlag types list]
        WaitForStateToFinishIfPossible = [transition state]
		
		[Turret Settings]
		Turret = [sub object name]
		TurretArtAngle = [integer]
		TurretPitch = [integer]
		TurretArtPitch = [integer]
		AltTurret = [sub object name]
		AltTurretArtAngle = [integer]
		AltTurretArtPitch = [integer]
		AltTurretPitch = [integer]
	    
		[Misc Settings]
		ShowSubObject = [sub object name(s)]
		HideSubObject = [sub object name(s)]
		ParticleSysBone = [Bone name  Entry from ParticleSystem.INI, multiple statements can be used]
		
	End
	ConditionState = [ConditionState name, multiple statements can be made]
		[as above]
	End
	AliasConditionState = [ConditionState, multiple statements can be made]
	
	TransitionState = [FromTransitionKey name	ToTransitionKeyName, viceversa]
		[as above]
	End

    [Misc Settings]
    AnimationsRequirePower  = [Yes/No]      [Does our animation needs power in order to work?] 
    MinLODRequired          = [LOD listing] [Whats the minimum Level of Detail required before we show up ingame]
    OkToChangeModelColor    = [Yes/no]      [Set to yes in order for housecolour's to work]
    ReceivesDynamicLights   = [Yes/no]      [If Yes, Give the model some extra lighting]
    ParticlesAttachedToAnimatedBones = [Yes/No]               [works like "AnimatedParticleSysBoneClientUpdate" module]
	IgnoreConditionStates            = [Condition State Names][What model condition states should we ignore. Multiple ConditionState names can be defined]
	ExtraPublicBone                  = [bone name]            [ multiple entries can be used for additional bones to expose to logic]
	ProjectileBoneFeedbackEnabledSlots = [Weapon Slot list]
	TrackMarks                         = [texture filename with file extension]
	AttachToBoneInAnotherModule        = [bone name]

	[Controls how fast and deep the barrel recoils]
	InitialRecoilSpeed = [integer]
	MaxRecoilDistance = [integer]
	RecoilDamping = [integer]
	RecoilSettleSpeed = [integer]
End 

W3DOverlordTankDraw
[special case draw module which is interdependent with the W3DDependencyModelDraw module - allows other objects to be attached to this object through use of AttachToBoneInContainer logic]
	[see W3DModelDraw module for associated parameters]
    
    [Controls how fast the treads will move or stop]
	TreadDriveSpeedFraction = [real number]
	TreadPivotSpeedFraction = [real number]
	TreadAnimationRate = [real number]
    TreadDebrisLeft    = [Entry From ParticleSystem.ini]
    TreadDebrisRight   = [Entry From ParticleSystem.ini]

	[Controls how fast and deep the barrel recoils]
	InitialRecoilSpeed = [integer]
	MaxRecoilDistance = [integer]
	RecoilDamping = [integer]
	RecoilSettleSpeed = [integer]
End

W3DOverlordAircraftDraw
[special case draw module which is interdependent with the W3DDependencyModelDraw module - allows other objects to be attached to this object through use of AttachToBoneInContainer logic]
	[see W3DModelDraw module for associated parameters]
End

W3DOverlordTruckDraw
[special case draw module which is interdependent with the W3DDependencyModelDraw module - allows other objects to be attached to this object through use of AttachToBoneInContainer logic]
	[see W3DModelDraw and W3DTruckDraw module for associated parameters]
End

W3DLaserDraw
[this module is interdependent with the LaserUpdate module and requires the object to have KindOf = INERT IMMOBILE]
	Texture              = [texture filename with file extension, defaults to EXLaser.tga]
	NumBeams             = [integer]    [Number of overlapping cylinders that make the beam. 1 beam will just use inner data]
	InnerBeamWidth       = [real number][The total width of the inner beam]
	OuterBeamWidth       = [real number][The total width of the outer beam] 
	InnerColor           = [r: g: b: a:][The inside color of the laser (hot)] 
	OuterColor           = [r: g: b: a:][The outside color of the laser (cool)]
	MaxIntensityLifetime = [milliseconds] [Laser stays at max intensity for specified time in ms]
	FadeLifetime         = [milliseconds] [How long will the Laser last before it fades out and delete itself]
	Tile                 = [Yes/No]     [The height of the texture will determine how many times to tile the texture to fit without scaling]
	Segments             = [integer]    [Number of segments -- more segments give smoother curve (but more joints) Current max: 20]
	SegmentOverlapRatio  = [real number][This value overlaps(+) or separates(-) the segments by ratio]
	ArcHeight            = [real number][The height of the arc]
	TilingScalar         = [real number][Stretches tiling if value > 1.0, otherwise shrinks it (1.0 is natural)]
End


W3DPoliceCarDraw
[This module allows for the use of the FRONTCRUSHED and BACKCRUSHED ConditionStates with this object]
[And this modules allows the object to cast a ambient light around itself]
	[see W3DModelDraw module for associated parameters]
End

W3DTreeDraw
[The W3DTreeDraw handles normal drawing and sway, and knock over behavior.
   Normally this happens in the W3DTreeBuffer, and there is no corresponding drawable or
   object. Required to have KindOf OPTIMIZED_TREE]
   
[Note: 
Objects with this Module will not properly appear in WorldBuilder if your Texture is not in Art/Terrain folder and your model in Art/W3D Folder
The texture should be in targa (.tga) format in order for it to work.]

    	ModelName          = [Model Name]  
        TextureName        = [Models texture name with file extension]
    	MinimumToppleSpeed = [percent, default is 1%]
    	DarkeningFactor    = [milliseconds]
	    MoveInwardTime     = [milliseconds]
	    MoveOutwardTime    = [milliseconds]
     	MoveOutwardDistanceFactor = [real number]
    	DoTopple           = [yes/no]
    	DoShadow           = [yes/no]
    	ToppleFX           = [Entry From FXList.ini]
    	BounceFX           = [Entry From FXList.ini]
    	KillWhenFinishedToppling = [yes/no]
    	SinkDistance       = [real number]
    	SinkTime           = [milliseconds]
End

W3DPropDraw
[When used, it will not interact to the game world and will just act as a none interacting prop with no shadow. can be cleared by building ontop.
Requires PROP KindOf]
[Note: Objects with this Module will not properly appear in WorldBuilder since there's a bug EA apparently left]
    	ModelName = [Model Name]  
End

W3DProjectileStreamDraw
[requires object to have KindOf = INERT]
	Texture = [texture filename with file extension]
	Width = [real number]
	TileFactor = [integer]
	ScrollRate = [real number]
	MaxSegments = [integer]
End

W3DRopeDraw
[no parameters - this module requires the object to be KindOf = DRAWABLE_ONLY]
End


W3DScienceModelDraw
[special case draw module that allows object to be seen only by players who have the RequiredScience]
	[see W3DModelDraw module for associated parameters]
	RequiredScience = [entry from Science.INI]
End


W3DSupplyDraw
[this module is interdependant with the SupplyWarehouseDockUpdate module and together the two modules will automatically show and hide a percentage of the bones on the object that have the SupplyBonePrefix]
	[see W3DModelDraw module for associated parameters]
	SupplyBonePrefix = [bone name]
End


W3DTankDraw
[Default Draw used by Tanks. The module is hardcoded to call for the TrackDebrisDirtRight and TrackDebrisDirtLeft particle system definitions]
see W3DModelDraw module for associated parameters]

    [Controls how fast the treads will move or stop]
	TreadDriveSpeedFraction = [real number]
	TreadPivotSpeedFraction = [real number]
	TreadAnimationRate = [real number]

    [NOTE: This doesnt properly work with the "W3DTankTruckDraw" Draw module]
    TreadDebrisLeft      = [Entry From ParticleSystem.ini]
    TreadDebrisRight     = [Entry From ParticleSystem.ini]
	
	[Controls how fast and deep the barrel recoils]
	InitialRecoilSpeed = [integer]
	MaxRecoilDistance = [integer]
	RecoilDamping = [integer]
	RecoilSettleSpeed = [integer]
End


W3DTankTruckDraw
[special case module that allows parameters from W3DTankDraw and W3DTruckDraw to be used - effectively this is a module that combines the other two]
[This can be useful for half track type units]
	[see W3DModelDraw module for associated parameters]
	
    [Controls how fast the treads will move or stop]
	TreadDriveSpeedFraction = [real number]
	TreadPivotSpeedFraction = [real number]
	TreadAnimationRate = [real number]
	
	[Controls how fast and deep the barrel recoils]
	InitialRecoilSpeed = [integer]
	MaxRecoilDistance = [integer]
	RecoilDamping = [integer]
	RecoilSettleSpeed = [integer]
	
    [Controls the attached "cab" model on the vehicle]
	RotationDamping = [real number]
	TrailerRotationMultiplier = [real number]]
	TrailerBone = [bone name]
	CabRotationMultiplier = [real number]
	CabBone = [bone name]
	
    [Wheels setup]
	PowerslideRotationAddition = [real number]
	TireRotationMultiplier = [real number]
	MidRightMidTireBone = [bone name]
	MidLeftMidTireBone = [bone name]
	MidRightRearTireBone = [bone name]
	MidLeftRearTireBone = [bone name]
	MidRightFrontTireBone = [bone name]
	MidLeftFrontTireBone = [bone name]
	RightRearTireBone = [bone name]
	LeftRearTireBone = [bone name]
	RightFrontTireBone = [bone name]
	LeftFrontTireBone = [bone name]
	
	[Dust Spray setup]
	PowerslideSpray = [entry from ParticleSystem.INI]
	DirtSpray = [entry from ParticleSystem.INI]
	Dust = [entry from ParticleSystem.INI]
End


W3DTracerDraw
[no parameters - this module requires object to be KindOf = DRAWABLE_ONLY]
End


W3DTruckDraw
[module is hardcoded to call for the TreadDebrisRight and TreadDebrisLeft (unless overriden) particle system definitions 
and allows use of TruckPowerslideSound and TruckLandingSound within the UnitSpecificSounds section of the object 
- this module also includes automatic logic for showing and hiding of HEADLIGHT bones in and out of the NIGHT ConditionState]
	[see W3DModelDraw module for associated parameters]

    [Controls the attached "cab" model on the vehicle]
	RotationDamping = [real number]
	TrailerRotationMultiplier = [real number]]
	TrailerBone = [bone name]
	CabRotationMultiplier = [real number]
	CabBone = [bone name]
	
    [Wheels setup]
	PowerslideRotationAddition = [real number]
	TireRotationMultiplier = [real number]
	MidRightMidTireBone = [bone name]
	MidLeftMidTireBone = [bone name]
	MidRightRearTireBone = [bone name]
	MidLeftRearTireBone = [bone name]
	MidRightFrontTireBone = [bone name]
	MidLeftFrontTireBone = [bone name]
	RightRearTireBone = [bone name]
	LeftRearTireBone = [bone name]
	RightFrontTireBone = [bone name]
	LeftFrontTireBone = [bone name]
	
	[Dust Spray setup]
	PowerslideSpray = [entry from ParticleSystem.INI]
	DirtSpray = [entry from ParticleSystem.INI]
	Dust = [entry from ParticleSystem.INI]
End

Appendices:

Change Type List:
PRESERVE_RATIO 
ADD_CURRENT_HEALTH_TOO 
SAME_CURRENTHEALTH

LOD listing:
LOW
MEDIUM
HIGH

Veterancy Level List:
REGULAR 
VETERAN  
ELITE
HEROIC

Weapon Slot List:
PRIMARY
SECONDARY
TERTIARY

ObjectConditionTypes:
RIDERS_ATTACKING
TAKING_DAMAGE
NO_BLACK_MARKET
FIRING_TERTIARY
FIRING_SECONDARY
FIRING_PRIMARY
MOVING
ATTACKING

WeaponSetCondition Types:
PLAYER_UPGRADE
MINE_CLEARING_DETAIL
CARBOMB
VEHICLE_HIJACK
CRATEUPGRADE_ONE
CRATEUPGRADE_TWO
WEAPON_RIDER1
WEAPON_RIDER2 
WEAPON_RIDER3 
WEAPON_RIDER4
WEAPON_RIDER5
WEAPON_RIDER6
WEAPON_RIDER7
WEAPON_RIDER8

VETERAN  [This can trigger the WEAPONSET_VETERAN model state]
ELITE    [this can trigger the WEAPONSET_ELITE mode state]  
HERO     [this can trigger the WEAPONSET_HERO mode state] 

AutoChooseSources Types:
FROM_DOZER
FROM_AI
FROM_SCRIPT
FROM_PLAYER
DEFAULT_SWITCH_WEAPON

ArmorSetCondition Types:
PLAYER_UPGRADE
CRATEUPGRADE_ONE
CRATEUPGRADE_TWO
SECOND_LIFE ;requires the undeadbody module.
VETERAN
ELITE
HERO

Disabled Types:
DISABLED_SCRIPT_UNDERPOWERED
DISABLED_SCRIPT_DISABLED 
DISABLED_FREEFALL
DISABLED_UNDERPOWERED
DISABLED_UNMANNED
DISABLED_PARALYZED
DISABLED_HELD
DISABLED_EMP
DISABLED_HACKED
DISABLED_BRAINWASHED
DISABLED_SUBDUED
DISABLED_AWESTRUCK
DISABLED_HELD
DEFAULT


StatusBitTypes:
KILLING_SELF 
DISGUISED
BOOBY_TRAPPED
FAERIE_FIRE
STATUS_RIDER8
STATUS_RIDER7 
STATUS_RIDER6 
STATUS_RIDER5 
STATUS_RIDER4 
STATUS_RIDER3 
STATUS_RIDER2 
STATUS_RIDER1
DECK_HEIGHT_OFFSET 
IGNORING_STEALTH 
NO_ATTACK_FROM_AI  
USING_ABILITY 
MASKED
RECONSTRUCTING 
UNDERGOING_REPAIR 
SOLD
TOPPLED
CAN_STEALTH 
DETECTED
STEALTHED 
IS_AIMING_WEAPON
IS_BRAKING
IS_CARBOMB
IS_FIRING_WEAPON
WET 
AFLAME 
HIJACKED 
REPULSOR
PARACHUTING 
AIRBORNE_TARGET 
NO_ATTACK 
NO_COLLISIONS 
UNSELECTABLE 
UNDER_CONSTRUCTION 
CAN_ATTACK 
DESTROYED
REASSIGN_PARKING
DEPLOYED

LocomotorSetTypes:
SET_NORMAL
SET_SUPERSONIC
SET_SLUGGISH
SET_TAXIING
SET_PANIC
SET_WANDER
SET_FREEFALL
SET_NORMAL_UPGRADED

DamageTypes:
DEFAULT ;this sets the level for all nonspecified damage types in armor.
EXPLOSION 
CRUSH 
ARMOR_PIERCING 
SMALL_ARMS 
GATTLING 
RADIATION 
FLAME 
LASER 
SNIPER 
POISON 
HEALING 
UNRESISTABLE 
WATER 
DEPLOY 
SURRENDER 
HACK 
KILL_PILOT 
PENALTY 
KILL_GARRISONED
FALLING 
MELEE 
DISARM 
HAZARD_CLEANUP 
PARTICLE_BEAM
TOPPLING 
INFANTRY_MISSILE 
AURORA_BOMB 
LAND_MINE 
JET_MISSILES 
STEALTHJET_MISSILES 
MOLOTOV_COCKTAIL 
COMANCHE_VULCAN 
MICROWAVE
STATUS
SUBDUAL_BUILDING
SUBDUAL_VEHICLE
SUBDUAL_MISSILE
SUBDUAL_UNRESISTABLE

DeathTypes:
ALL
NORMAL 
CRUSHED 
BURNED 
EXPLODED 
POISONED 
TOPPLED 
FLOODED 
SUICIDED
LASERED 
DETONATED 
SPLATTED
POISONED 
POISONED_BETA 
POISONED_GAMMA
EXTRA_2
EXTRA_3
EXTRA_4
EXTRA_5
EXTRA_6
EXTRA_7
EXTRA_8

ShadowStyleTypes:
SHADOW_DECAL 
SHADOW_VOLUME 
SHADOW_PROJECTION 
SHADOW_DYNAMIC_PROJECTION
SHADOW_DIRECTIONAL_PROJECTION 
SHADOW_ALPHA_DECAL 
SHADOW_ADDITIVE_DECAL

OCLCreationPointTypes:
CREATE_AT_EDGE_FARTHEST_FROM_TARGET 
CREATE_AT_EDGE_FARTHEST_FROM_SOURCE 
CREATE_ABOVE_LOCATION 
USE_OWNER_OBJECT 
CREATE_AT_LOCATION 
CREATE_AT_EDGE_NEAR_TARGET
CREATE_AT_EDGE_NEAR_SOURCE
CREATE_OBJECT 

ConditionStateTypes:
USER_1
USER_2
WEAK_VERSUS_BASEDEFENSES
JAMMED
ATTACKING
ARMORSET_CRATEUPGRADE_TWO
ARMORSET_CRATEUPGRADE_ONE
PREORDER 
USING_WEAPON_A 
USING_WEAPON_B
USING_WEAPON_C 
STUNNED
STUNNED_FLAILING
EXPLODED_BOUNCING 
EXPLODED_FLAILING 
CAPTURED
RAISING_FLAG
CONTINUOUS_FIRE_SLOW 
CONTINUOUS_FIRE_FAST
CONTINUOUS_FIRE_MEAN
SPECIAL_CHEERING
ARMED
RAPELLING
PARACHUTING
CLIMBING
SPLATTED
BURNED
AFLAME
SMOLDERING 
POWER_PLANT_UPGRADING
POWER_PLANT_UPGRADED
OVER_WATER
MOVING
DEPLOYED 
UNPACKING 
PACKING 
JETEXHAUST 
JETAFTERBURNER 
LOADED 
CARRYING 
DOCKING_ENDING 
DOCKING_ACTIVE 
DOCKING_BEGINNING 
DOCKING 
PANICKING
RADAR_UPGRADED 
RADAR_EXTENDED 
CONSTRUCTION_COMPLETE 
ACTIVELY_CONSTRUCTING 
ACTIVELY_BEING_CONSTRUCTED
PARTIALLY_CONSTRUCTED
AWAITING_CONSTRUCTION
DYING
PRONE 
FREEFALL
POST_COLLAPSE
TOPPLED
TURRET_ROTATE

RELOADING_A
BETWEEN_FIRING_SHOTS_A 
FIRING_A 
PREATTACK_A

RELOADING_B
BETWEEN_FIRING_SHOTS_B
FIRING_B 
PREATTACK_B 

RELOADING_C 
BETWEEN_FIRING_SHOTS_C
FIRING_C 
PREATTACK_C 

DOOR_4_WAITING_TO_CLOSE 
DOOR_4_WAITING_OPEN 
DOOR_4_CLOSING
DOOR_4_OPENING 

DOOR_3_WAITING_TO_CLOSE 
DOOR_3_WAITING_OPEN 
DOOR_3_CLOSING
DOOR_3_OPENING 

DOOR_2_WAITING_TO_CLOSE 
DOOR_2_WAITING_OPEN
DOOR_2_CLOSING
DOOR_2_OPENING 

DOOR_1_WAITING_TO_CLOSE 
DOOR_1_WAITING_OPEN
DOOR_1_CLOSING
DOOR_1_OPENING 

WEAPONSET_PLAYER_UPGRADE 
WEAPONSET_CRATEUPGRADE_ONE 
WEAPONSET_CRATEUPGRADE_TWO 
WEAPONSET_HERO
WEAPONSET_ELITE 
WEAPONSET_VETERAN 
ENEMYNEAR
REALLYDAMAGED
RUBBLE
DAMAGED
SNOW 
SOLD
DISGUISED
NIGHT 
SPECIAL_DAMAGED 
BACKCRUSHED 
FRONTCRUSHED
SECOND_LIFE
RIDER1
RIDER2
RIDER3
RIDER4
RIDER5
RIDER6
RIDER7
RIDER8
PRISTINE
RIGHT_TO_CENTER
CENTER_TO_RIGHT
LEFT_TO_CENTER
CENTER_TO_LEFT

AnimationFlagTypes:
RANDOMSTART
START_FRAME_FIRST
START_FRAME_LAST
ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
PRISTINE_BONE_POS_IN_FINAL_FRAME
MAINTAIN_FRAME_ACROSS_STATES 
MAINTAIN_FRAME_ACROSS_STATES2 
MAINTAIN_FRAME_ACROSS_STATES3
MAINTAIN_FRAME_ACROSS_STATES4 
RESTART_ANIM_WHEN_COMPLETE

Animation Mode Types:
MANUAL 
ONCE 
ONCE_BACKWARDS
LOOP_BACKWARDS 
LOOP_PINGPONG
LOOP

KindOf list:
IGNORE_DOCKING_BONES    
CONSERVATIVE_BUILDING   
DEMOTRAP    
EMP_HARDENED    
TECH_BASE_DEFENSE   
CANNOT_RETALIATE    
REJECT_UNMANNED 
NO_SELECT   
AIRCRAFT_CARRIER       
OPTIMIZED_TREE  
PROP    
BLAST_CRATER    
BOOBY_TRAP  
REVEALS_ENEMY_PATHS 
MONEY_HACKER  
CLIFF_JUMPER    
DONT_AUTO_CRUSH_INFANTRY    
IGNORES_SELECT_ALL  
HERO    
INERT   
DISGUISER   
REVEAL_TO_ALL   
SUPPLY_SOURCE   
CANNOT_BUILD_NEAR_SUPPLIES  
SPAWNS_ARE_THE_WEAPONS  
SHOW_PORTRAIT_WHEN_CONTROLLED   
HULK    
IMMUNE_TO_CAPTURE   
BOAT    
GARRISONABLE_UNTIL_DESTROYED    
PARACHUTE   
PARACHUTABLE    
SUPPLY_SOURCE_ON_PREVIEW    
CLICK_THROUGH   
BALLISTIC_MISSILE   
CAN_SEE_THROUGH_STRUCTURE   
DRONE   
PRODUCED_AT_HELIPAD 
POWERED 
TECH_BUILDING   
AUTO_RALLYPOINT 
FORCEATTACKABLE 
LOW_OVERLAPPABLE    
AIRCRAFT_PATH_AROUND    
DEFENSIVE_WALL  
WALK_ON_TOP_OF_WALL 
ATTACK_NEEDS_LINE_OF_SIGHT  
ALWAYS_SELECTABLE   
PORTABLE_STRUCTURE  
CLEANUP_HAZARD  
MINE    
UNATTACKABLE    
ALWAYS_VISIBLE  
SMALL_MISSILE   
CLEARED_BY_BUILD    
CAPTURABLE  
CRATE   
IGNORED_IN_GUI  
MOB_NEXUS   
CAN_BE_REPULSED 
CAN_RAPPEL  
NO_HEAL_ICON    
SCORE_DESTROY   
SCORE_CREATE    
SCORE   
REBUILD_HOLE    
MP_COUNT_FOR_VICTORY    
DRAWABLE_ONLY   
CASH_GENERATOR  
STEALTH_GARRISON    
HEAL_PAD    
REPAIR_PAD  
NO_COLLIDE  
WAVE_EFFECT 
WAVEGUIDE   
NO_GARRISON 
PRELOAD 
PROJECTILE  
BRIDGE_TOWER    
LANDMARK_BRIDGE 
BRIDGE  
TRANSPORT   
WEAPON_SALVAGER 
ARMOR_SALVAGER
SALVAGER    
LINEBUILD   
COMMANDCENTER   
HARVESTER   
DOZER   
HUGE_VEHICLE    
AIRCRAFT    
VEHICLE 
INFANTRY    
STRUCTURE   
SHRUBBERY   
CAN_CAST_REFLECTIONS    
STICK_TO_TERRAIN_SLOPE  
CAN_ATTACK  
IMMOBILE    
SELECTABLE  
OBSTACLE
FS_STRATEGY_CENTER  
FS_SUPPLY_CENTER    
FS_BLACK_MARKET 
FS_SUPERWEAPON  
FS_SUPPLY_DROPZONE  
FS_AIRFIELD 
FS_WARFACTORY   
FS_BARRACKS 
FS_ADVANCED_TECH
FS_TECHNOLOGY   
FS_BASE_DEFENSE 
FS_FACTORY  
FS_POWER
FS_INTERNET_CENTER  
FS_FAKE 

MISC SECTION:

CommandButton Command list:
SELECT_ALL_UNITS_OF_TYPE    
SPECIAL_POWER_CONSTRUCT_FROM_SHORTCUT   
SPECIAL_POWER_CONSTRUCT 
SPECIAL_POWER_FROM_SHORTCUT 
PLACE_BEACON    
SABOTAGE_BUILDING   
CONVERT_TO_CARBOMB  
HIJACK_VEHICLE  
SWITCH_WEAPON   
COMBATDROP  
TOGGLE_OVERCHARGE   
HACK_INTERNET   
PURCHASE_SCIENCE    
SPECIAL_POWER   
FIRE_WEAPON 
SELL    
SET_RALLY_POINT 
BEACON_DELETE   
EXECUTE_RAILED_TRANSPORT    
EVACUATE    
EXIT_CONTAINER  
WAYPOINTS   
STOP    
GUARD_FLYING_UNITS_ONLY 
GUARD_WITHOUT_PURSUIT   
GUARD   
ATTACK_MOVE 
CANCEL_UPGRADE  
OBJECT_UPGRADE  
PLAYER_UPGRADE  
CANCEL_UNIT_BUILD   
UNIT_BUILD  
DOZER_CONSTRUCT_CANCEL  
DOZER_CONSTRUCT 


CommandButton Options list:
MUST_BE_STOPPED 
CAN_USE_WAYPOINTS   
USES_MINE_CLEARING_WEAPONSET    
IGNORES_UNDERPOWERED    
SCRIPT_ONLY 
---DO-NOT-USE---    
SINGLE_USE_COMMAND  
NOT_QUEUEABLE   
OPTION_THREE    
OPTION_TWO  
OPTION_ONE  
ATTACK_OBJECTS_POSITION 
ALLOW_MINE_TARGET   
CHECK_LIKE  
CONTEXTMODE_COMMAND 
OK_FOR_MULTI_SELECT
NEED_SPECIAL_POWER_SCIENCE  
NEED_UPGRADE    
NEED_TARGET_POS 
ALLOW_SHRUBBERY_TARGET  
unused-reserved 
NEED_TARGET_ALLY_OBJECT 
NEED_TARGET_NEUTRAL_OBJECT  
NEED_TARGET_ENEMY_OBJECT


Command Button WeaponSlot list:
PRIMARY
SECONDARY
TERTIARY

Command Button Bordertypes:
SYSTEM  
ACTION  
UPGRADE 
BUILD

Command Button  RadiusCursorType list:
"this are tied to the IngameUI.ini"
AMBULANCE   
CLEARMINES  
FRENZY  
SPYDRONE    
RADAR   
AMBUSH  
ANTHRAXBOMB 
SCUDSTORM   
CLUSTERMINES    
NAPALMSTRIKE    
ARTILLERYBARRAGE    
EMPPULSE   
NUCLEARMISSILE  
HELIX_NAPALM_BOMB   
SPECTREGUNSHIP  
SPYSATELLITE    
PARADROP    
DAISYCUTTER 
CARPETBOMB  
A10STRIKE   
PARTICLECANNON  
SUPERWEAPON_SCATTER_AREA    
OFFENSIVE_SPECIALPOWER  
FRIENDLY_SPECIALPOWER   
EMERGENCY_REPAIR    
GUARD_AREA  
ATTACK_CONTINUE_AREA    
ATTACK_SCATTER_AREA 
ATTACK_DAMAGE_AREA


 

Weapon Bonuses:
[NOTE: See Gamedata.ini to see what it does]
[This are located in Gamedata.ini, Note that the weapon bonus types are:]
GARRISONED
HORDE
CONTINUOUS_FIRE_MEAN
CONTINUOUS_FIRE_FAST
NATIONALISM
PLAYER_UPGRADE
DRONE_SPOTTING
ENTHUSIASTIC
VETERAN
ELITE
HERO
BATTLEPLAN_BOMBARDMENT
BATTLEPLAN_HOLDTHELINE
BATTLEPLAN_SEARCHANDDESTROY
SUBLIMINAL
SOLO_HUMAN_EASY
SOLO_HUMAN_NORMAL
SOLO_HUMAN_HARD
SOLO_AI_EASY
SOLO_AI_NORMAL
SOLO_AI_HARD
FRENZY_ONE 
FRENZY_TWO
FRENZY_THREE
FANATICISM
DEMORALIZED_OBSOLETE
TARGET_FAERIE_FIRE

[...And the weapon bonus 'fields' are:
DAMAGE
RADIUS
RANGE
RATE_OF_FIRE
PRE_ATTACK


SpecialPower.ini Enum types:
SPECIAL_BATTLESHIP_BOMBARDMENT
SUPW_SPECIAL_NEUTRON_MISSILE
LAZR_SPECIAL_PARTICLE_UPLINK_CANNON
SUPR_SPECIAL_CRUISE_MISSILE
AIRF_SPECIAL_CARPET_BOMB
SLTH_SPECIAL_GPS_SCRAMBLER
INFA_SPECIAL_PARADROP_AMERICA
AIRF_SPECIAL_SPECTRE_GUNSHIP
AIRF_SPECIAL_A10_THUNDERBOLT_STRIKE
NUKE_SPECIAL_NEUTRON_MISSILE
NUKE_SPECIAL_CLUSTER_MINES
AIRF_SPECIAL_DAISY_CUTTER
SUPW_SPECIAL_PARTICLE_UPLINK_CANNON
SPECIAL_TANK_PARADROP
EARLY_SPECIAL_REPAIR_VEHICLES
SPECIAL_COMMUNICATIONS_DOWNLOAD
EARLY_SPECIAL_FRENZY
EARLY_SPECIAL_LEAFLET_DROP
SPECIAL_LEAFLET_DROP
EARLY_SPECIAL_CHINA_CARPET_BOMB
SPECIAL_CHINA_CARPET_BOMB
SPECIAL_SNEAK_ATTACK
SPECIAL_FRENZY
SPECIAL_GPS_SCRAMBLER
SPECIAL_SPECTRE_GUNSHIP
SPECIAL_LAUNCH_BAIKONUR_ROCKET
SPECIAL_CLEANUP_AREA
SPECIAL_CIA_INTELLIGENCE
SPECIAL_CHANGE_BATTLE_PLANS
SPECIAL_CASH_BOUNTY
SPECIAL_PARTICLE_UPLINK_CANNON
SPECIAL_REPAIR_VEHICLES
SPECIAL_BOOBY_TRAP
SPECIAL_DISGUISE_AS_VEHICLE
SPECIAL_SPY_DRONE
SPECIAL_RADAR_VAN_SCAN
SPECIAL_INFANTRY_CAPTURE_BUILDING
SPECIAL_BLACKLOTUS_STEAL_CASH_HACK
SPECIAL_BLACKLOTUS_DISABLE_VEHICLE_HACK
SPECIAL_BLACKLOTUS_CAPTURE_BUILDING
SPECIAL_TANKHUNTER_TNT_ATTACK
SPECIAL_HACKER_DISABLE_BUILDING
SPECIAL_HELIX_NAPALM_BOMB
SPECIAL_TIMED_CHARGES
SPECIAL_REMOTE_CHARGES
SPECIAL_MISSILE_DEFENDER_LASER_GUIDED_MISSILES
SPECIAL_ARTILLERY_BARRAGE
SPECIAL_DETONATE_DIRTY_NUKE
SPECIAL_A10_THUNDERBOLT_STRIKE
SPECIAL_CRATE_DROP
SPECIAL_DEMORALIZE_OBSOLETE
SPECIAL_SCUD_STORM
SPECIAL_ANTHRAX_BOMB
SPECIAL_BLACK_MARKET_NUKE
SPECIAL_AMBUSH
SPECIAL_TERROR_CELL
SPECIAL_DEFECTOR
SPECIAL_SPY_SATELLITE
SPECIAL_NEUTRON_MISSILE
SPECIAL_CASH_HACK
SPECIAL_NAPALM_STRIKE
SPECIAL_EMP_PULSE
SPECIAL_CLUSTER_MINES
SPECIAL_CARPET_BOMB
SPECIAL_PARADROP_AMERICA
SPECIAL_DAISY_CUTTER
SPECIAL_INVALID