Games of Tiberian Sun, Red Alert 2 and Yuri's Revenge use scripted AI for the computer controlled players. While the rules(md).ini defines three difficulty based flags which influences the AI, the ai(md).ini defines the programming of what teams to form and what action it will perform. To do this, the ai(md).ini consists of 4 sections of TaskForces, ScriptTypes, TeamTypes and AITriggerTypes. TaskForces, ScriptTypes and TeamTypes consists of the list of their respective section IDs, where the IDs have their own sections to define individual TaskForce, ScriptType and TeamTypes. AITriggerTypes section consists of AITriggers defined in single lines. Entries in ai(md).ini are considered global which can be used in maps and maps can also have their own local TaskForces, ScriptTypes, TeamTypes and AITriggerTypes.
A TaskForce consists of a set of units to be created to form a team. Each TaskForce can have a maximum of 6 unit definitions which can consist of same or different types of units. Indices for these are fixed from 0 to 5. Game reads the lines indexed from 0 to 5 in ascending order and units defined in lower index are queued first for production. TaskForce section also consists of Name flag which holds a string for readable reference. Group flag can hold a number, which is used by the game only when the TeamType referencing this TaskForce has set its Group value set to -1. In ai(md).ini, it is advised to set this value to -1 only.
Example :[TaskForces] 0=05C60C4C-G 1=0D082CFC-G [05C60C4C-G] Name=3 GIs, 3 Guards 0=3,E1 1=3,GGI Group=-1
Unit list format is defined as
Index=UnitCount,UnitIDIndex can have values 0 to 5. UnitCount specifies the number of units of type denoted by UnitID. Valid UnitID are from the AircraftTypes, InfantryTypes and VehicleTypes list in rules(md).ini. The -G appended at the end of indices is for readability only, it doesn't have any affect or logic associated with it. Vanilla game's ai(md).ini has -G to consider it as global and entries in maps are considered as local which don't have -G appended.
A ScriptType consists of a set of script actions for the team to perform. Game uses only a max of first 50 script actions, the index is 0-based and is limited with 0 to 49. Script actions perform actions like attack enemy structure or move to a building or load onto transport etc. Script actions apply to all units in the team, they perform their task individually (usually units occupy different cells, so they may take different path to its target and may also choose different target) but when a script action is completed, it is synchrinized so that all units in the team move together on to execute the next script action. In cases where a target that the team is seeking for, is not found in the map, that script action is assumed as completed and the team moves on to execute its next script action. On completion of all the script actions defined in a script, the team is disbanded and units assume their default stance of guard mode.
Exanple :[ScriptTypes] 0=0C9C878C-G 1=0CE4CC8C-G [0C9C878C-G] Name=Allied Refinery Guard 0=58,1 1=5,10 2=58,196609 3=5,10 4=58,196609 5=5,10 6=6,1
Script action format is
Index=ScriptAction,ParameterIndex can have values from 0 to 49 in ascending order. Game is coded with various tasks to perform, those are referred here as ScriptAction. A list detailing the script action types and its parameter follows.
0,n = Attack Target Type, n = target type to attack
This instructs the TeamType to use the TaskForce to approach and attack the target specified by the second parameter. These attack script actions are inherently self repeating. For example, when executing script action attack structure (0,2), the task force will attack the next structure when the current structure being attacked is destroyed and will continue to destroy enemy buildings until there are no more left. When no more target is left to attack, the script action is complete and the task force moves on to execute its next script action. The completion of this script action could get cut-short in cases the task force gets destroyed or runs out of ammo.
These script actions use TargetDistanceCoefficientDefault (or overriden by TechnoType's TargetDistanceCoefficient) to determine the threat rating scan range for target selection. Vanilla value of -10 in this flag gives a range of approximately 39 cells whereas a value of -1 covers almost the entire map. When the enemy objects are within the scan range, nearest object is selected as target. When enemy objects are outside this scan range, the first object of that TargetType built by the enemy becomes the target. For Attack Anything (0,1), when the enemy objects are outside the scan range, the precedence for target selection of first built object by the enemy is given by units first, then aircrafts, then infantry and the last for buildings.
The following are the target types which can be used:
| Parameter | Target Type | Meaning |
| n/a | Cancel attack mission | |
| Anything | Anything [VehicleTypes], [AircraftTypes], [InfantryTypes] and [BuildingTypes] | |
| Structures | Any enemy [BuildingTypes] | |
| Ore Miners / Harvesters | Any enemy [VehicleTypes] with Harvester=yes set | |
| Infantry | Any enemy [InfantryTypes] | |
| Vehicles | Any enemy [VehicleTypes] | |
| Factories | Any enemy [BuildingTypes] with a Factory= setting | |
| Base Defenses | Any enemy [BuildingTypes] with IsBaseDefense=yes set. In YR, also buildings defined in AlliedBaseDefenses, SovietBaseDefenses and ThirdBaseDefenses | |
| Base Threats | Any enemy objects approaching (or already in) its base and which are in an attack mission | |
| Power Plants | Any enemy [BuildingTypes] with positive Power= values set | |
| Occupiable | Any [BuildingTypes] with CanBeOccupied=yes set (usually neutral structures) (not in TS) | |
| Tech Buildings | Any [BuildingTypes] with NeedsEngineer=yes set (usually NeutralTechBuildings=) (not in TS) |
NOTE: in Yuri's Revenge, Occupiable structures are defined by having CanOccupyFire=yes set instead of CanBeOccupied=yes.
1,n = Attack Waypoint, n = waypoint number to attack
This instructs the TeamType to use the TaskForce to attack the waypoint number specified by the second parameter. If any members have Infiltrate=yes set they will enter the structure at the waypoint. Members with Engineer=yes set will capture the structure provided it does not have Capturable=no set or if it has NeedsEngineer=yes set. Members with Agent=yes set will spy on the structure if it has Spyable=yes set. Members that do not have Assaulter=no set will garrison the structure if it has CanBeOccupied=yes set. Members with C4=yes set will blow up the structure if does not have CanC4=no set. If there is no building at the specified waypoint, the TaskForce will attack the ground when reaching in range of the waypoint. Refer Waypoints for details on waypoint.
2,0 = Go Berzerk
Forces infantry units with Cyborg=yes set to go berserk (they consider all objects, including friendly units, equally in their threat scan).(Doesn't seem to work).
3,n = Move To Waypoint, n = waypoint number to move to
This instructs the TeamType to use the TaskForce to move to the waypoint number specified by the second parameter. Refer Waypoints for details on waypoint. TIP: you could use this script action to get a TeamType to move to Waypoint= number 99 (just about every map has this defined as the center point) - that will mean it will always strive to get to the center of the map, providing a good vantage point from which to perform further script actions and giving the impression that the computer is scouting for enemies.
4,n = Move Into Specific Celltag, n = celltag to move into
This instructs the TeamType to use the TaskForce to move into the CellTag specified by the second parameter. This is used when you want the TeamType to trigger a specific Action (when the game tests for the CellTag being entered). CellTags are attached to cells and are used to trigger Events and thus fire Actions when that cell is entered by a unit (or any unit from the TaskForce). The CellTag parameter should be the waypoint parameter for that CellTag from the [CellTags]listing in the map file, hence this script action is only of use on specific map files. Refer CellTags for details on celltag.
5,n = Guard Area, n = time to guard area in tenths of a minute (multiples of 6 seconds)
This instructs the TeamType to put the TaskForce into Guard Mode (same effect as selecting a group of units and pressing the Guard Mode key as defined in KEYBOARD.INI or clicking the relevant button on the Advanced Command Bar). Units will move to attack enemy units that fall within their Sight= range.
6,n = Jump To Script Action, n = line number of script action to jump to.
This is used to repeat actions within the ScriptType. The second parameter is the action line number of the ScriptType that you want to jump to. Script Action index starts at 0 whereas the line number starts at 1. So, to jump to the first Script Action whose index is 0, use n=6,1 for this script. Jump to line number could be specified to any of the preceding line numbers, not just to the first Script Action to create a loop of Script Actions.
7,0 = Force Player Win
Forces a game win condition for the owner of the TeamType (they win the game).
8,n = Unload, n = type of unloading
If the TaskForce contains a unit or units that have a valid Passengers= value set, and those units contain passengers, this command will make the units inside the transport(s) disembark. Note that once the passengers have disembarked, the transport itself is suspended until given a new mission and is therefore no longer considered a part of this TaskForce - this means that you cannot, for example, get units to disembark, do something, then get back into the transport in the same script. The second parameter can be used to control what happens to the transport after it 'deploys' its cargo:
| Parameter | Meaning |
| Keep transports and units - all remain in the team and execute the remainder of the script | |
| Keep transport and lose the units - only the transport will execute the remainder of the script | |
| Lose transport and keep units - only the units will execute the remainder of the script | |
| Lose transports and lose units - nothing executes the remainder of the script |
9,0 = Deploy
If the TaskForce contains a unit or units that are able to deploy (for example a unit which DeploysInto= a [BuildingType] or has any of Deployer=yes, DeployFire=yes, DeployToFire=yes set) then this action causes them to deploy at the current cell they are occupying (same effect as selecting a unit and pressing the Deploy key as defined in KEYBOARD.INI or clicking the relevant button on the Advanced Command Bar). Units that deploy into buildings doesn't remain units, so can't execute any more script actions.
10,0 = Follow friendlies
This command causes the TaskForce to follow the nearest friendly unit when it moves although it will not function as if it is 'guarding' the unit. The following is not permanent, when the TaskForce is assigned another mission it abandons the following. TIP: If the support TeamType has this as the first line in its ScriptType, then it will escort the first TeamType.
11,n = Assign New Mission, n = new mission type
The objects in the TaskForce are all assigned the new mission defined by the second parameter. The actions such as Sleep/Sticky/Guard/Area Guard/Hunt etc. changes the state/mission in which the units are and those remain in that state until those units are destroyed or recruited into another team and given a different command. Such actions are never completed so as to move on to execute the next script action, so these are given as the last script action in their scripts. The following are valid settings for the second parameter:
| Game | Parameter | Action | Meaning |
| RA2/YR | Sleep | object sits around and plays dead, will not acquire targets | |
| RA2/YR | Attack | special attack mission used by AI team types (utilizes threat rating logic) | |
| RA2/YR | Move | simply moving to destination | |
| RA2/YR | QMove | special move to destination after other queued moves occur | |
| RA2/YR | Retreat | object runs away (may even leave the map) | |
| RA2/YR | Guard | object sits around and will engage an enemy that falls within its weapon range | |
| RA2/YR | Sticky | just like guard mode, except the object will engage enemies but not pursue them | |
| RA2/YR | Enter | enter building or transport | |
| RA2/YR | Capture | engineer entry logic used by MultiEngineer | |
| RA2/YR | Eaten | when object is being repaired (applies only to structures) | |
| RA2/YR | Harvest | the loop controlling harvesting of Ore and dumping at a Refinery | |
| RA2/YR | Area Guard | guard the general area where the object starts at | |
| RA2/YR | Return | return to co-ordinating object (e.g. spawned object returns to the spawner) | |
| RA2/YR | Stop | stop moving or firing at the first available opportunity | |
| RA2/YR | Ambush | force fire (units with Infiltrate=yes will enter target if possible) | |
| RA2/YR | Hunt | scan for and attack enemies wherever they may be on the map | |
| RA2/YR | Unload | while dropping off cargo (e.g. Landing Craft unloading passengers) | |
| RA2/YR | Sabotage | unit runs to place C4 on a building or Ivan goes to place bomb on object | |
| RA2/YR | Construction | structures use this when building up after initial placement | |
| RA2/YR | Selling | structures use this for deconstruction after being sold | |
| RA2/YR | Repair | used when repairing an object (e.g. Service Depot) | |
| RA2/YR | Rescue | special team over-ride mission | |
| RA2/YR | Missile | Nuke Silo special launch missile mission | |
| RA2/YR | Harmless | object doesn't fire and is not considered in any threat scan | |
| RA2/YR | Open | while opening or closing a gate to allow passage | |
| RA2/YR | Patrol | patrol a series of waypoints | |
| RA2/YR | Paradrop Approach | object is approaching the paradrop site | |
| RA2/YR | Paradrop Overfly | object is flying over the paradrop site (i.e. dropping the paratroopers) | |
| RA2/YR | Wait | paused and awaiting next mission | |
| RA2/YR | Move | (special duplicate) used when Chrono units are moving to destination | |
| RA2/YR | Attack | (special duplicate) used when units are deployed to fire (e.g. weapons with an area fire effect) | |
| YR | Spyplane Approach | object is flying towards target | |
| YR | Spyplane Overfly | object is flying over the target |
| Game | Parameter | Action | Meaning |
| TS | Sleep | object sits around and plays dead, will not acquire targets | |
| TS | Attack | special attack mission used by AI team types (utilizes threat rating logic) | |
| TS | Move | simply moving to destination | |
| TS | QMove | special move to destination after other queued moves occur | |
| TS | Retreat | object runs away (may even leave the map) | |
| TS | Guard | object sits around and will engage an enemy that falls within its weapon range | |
| TS | Sticky | just like guard mode, except the object will engage enemies but not pursue them | |
| TS | Enter | enter building or transport | |
| TS | Capture | engineer entry logic used by MultiEngineer | |
| TS | Harvest | the loop controlling harvesting of tiberium and dumping at a Refinery | |
| TS | Area Guard | guard the general area where the object starts at | |
| TS | Return | return to co-ordinating object (e.g. spawned object returns to the spawner) | |
| TS | Stop | stop moving or firing at the first available opportunity | |
| TS | Ambush | force fire (units with Infiltrate=yes will enter target if possible) | |
| TS | Hunt | scan for and attack enemies wherever they may be on the map | |
| TS | Unload | while dropping off cargo | |
| TS | Sabotage | unit runs to place C4 on a building | |
| TS | Construction | structures use this when building up after initial placement | |
| TS | Selling | structures use this for deconstruction after being sold | |
| TS | Repair | used when repairing an object (e.g. Service Depot) | |
| TS | Rescue | special team over-ride mission | |
| TS | Missile | Nuke Silo special launch missile mission | |
| TS | Harmless | object doesn't fire and is not considered in any threat scan | |
| TS | Open | while opening or closing a gate to allow passage | |
| TS | Patrol | patrol a series of waypoints |
12,n = Set Global, n = global number to be set
The global number specified in the second parameter is defined as being 'set' (it is allocated a value of '1' or 'true'). This should be employed in specific map files only. This is part of the boolean logic employed by the global variables system in the game engine.
13,n = Play Idle Anim Sequence, n = sequence number
If the TaskForce contains a unit or units that are SHPs (i.e. infantry) then the relevant idle SHP sequence is displayed as defined by the frame numbering system in ART.INI.
14,0 = Load Onto Transport
If the TaskForce contains a unit or units that have a valid Passengers= value set, and units whose Size= and PhysicalSize= settings allow them to be carried by that transport, this command will make the units enter the transport.
15,n = Enter Structure At Waypoint, n = waypoint number
This instructs the TaskForce to enter the structure at the waypoint number specified by the second parameter. In RA2/YR, could be used for units with Infiltrate=yes and Agent=yes set and spy on the structure if it has Spyable=yes set. In TS, this is used for entering a building at waypoint, like engineer to enter a bridge repair hut at a given waypoint to repair that bridge.
16,n = Patrol To Waypoint, n = waypoint number
This is similar to Move to waypoint. This instructs the TeamType to use the TaskForce to move to the waypoint number specified by the second parameter. The difference is that the units in the TaskForce will move out of their patrol route to actively go and engage any enemy objects that are within their Sight= as they move to the waypoint. NOTE: this action eats up processor time, because the TaskForce will scan for enemy objects with each movement. If you have a lot of TaskForces (or lots of units in them) engaged in this action, you will experience slowdown in the game - this is one reason why the single player missions are comparatively slow, they use this action a lot. The rate at which the scanning for targets whilst in this mission is controlled by the PatrolScan= statement in the [AI]section of RULES.INI.
17,n = Change Script, n = script number to execute
This instructs the TaskForce to execute another ScriptType. The second parameter specifies the number of the ScriptType to execute as listed in the [ScriptTypes] table (consider the table as being numbered starting at 0 for this purpose).
18,n = Change Team, n = team number to join
This instructs the TaskForce to join another TeamType. The second parameter specifies the number of the TeamType to join as listed in the [TeamTypes] table (consider the table as being numbered starting at 0 for this purpose). In TS, vanilla FS expansion single player maps use this a lot, so any change in the number in the list of TeamTypes, affects those mission maps.
19,0 = Panic
If the TaskForce contains a unit or units that have Fraidycat=yes set then they will run around aimlessly, using the Panic animation from their sequence as defined in ART.INI. Normally used for the civilian units. Units that do not fulfil this criteria lie down and act as if prone.
20,n = Change House Ownership, n = house number of new owner
Used in single player missions on specific map files only, this changes ownership of the entire TeamType to the house number specified by the second parameter.
21,0 = Scatter
This instructs the TaskForce to scatter (same effect as selecting a group of units and pressing the Scatter key as defined in KEYBOARD.INI).
22,0 = Afraid & Run To Shroud
This instructs the TaskForce to behave in a scared manner and it will run to the nearest shrouded cell. The TaskForce will not actively engage in combat, will not acquire targets and will not retaliate (it will scatter instead if attacked).
23,0 = Force Player Loss
Forces a game loss condition for the owner of the TeamType (they lose the game).
24,n = Play Speech, n = number of speech to play
This instructs the TaskForce to play one of the Sofia or EVA voices from EVA.INI (depending upon the ParentCountry= or the owner of this TaskForce). The second parameter is the number of the sound to be played from the [DialogList] in the EVA.INI file (note that you should consider this list as being numbered from 0 instead of 1 to get the correct numbering convention). In TS, it the voice clips from SPEECH.INI.
25,n = Play Sound, n = number of sound to play
This instructs the TaskForce to play one of the generic in game sounds from the [SoundList] in the SOUND.INI file (note that for all in game Action and Trigger purposes this number is from an internal table.
26,n = Play Movie, n = number of movie to play
This instructs the TaskForce to play one of the movies from the [Movies] list in the ART.INI file (note that for all in game Action and Trigger purposes this number is from an internal table.
27,n = Play Theme, n = number of theme to play
This instructs the TaskForce to play one of the game soundtracks from the [Themes] list in the THEME.INI file (note that for all in game Action and Trigger purposes this number is from an internal table.
28,0 = Reduce Ore
Reduces the amount of Ore in the cell that the TeamType is occupying. Used by the special 'weapon' that is inherent with Ore Miners.
29,0 = Begin Production
Forces the owner of the TeamType to begin the auto-production process (the AI's behaviour in skirmish games). Should only be used on AI controlled houses.
30,0 = Force Sale
Forces the 'fire sale' of all remaining structures owned by the House= to which the TeamType belongs.
31,0 = Suicide
This instructs the TaskForce to destroy itself. In effect it commits suicide, usually accompanied by an explosion.
32,n = Start Weather Storm In (in TS, Ion Storm), n = number of seconds
This initiates the Weather Storm intro effect (when the screen goes dark prior to the clouds appearing) and is set to be delayed by the number of seconds specified by parameter 2.
33,0 = End Weather Storm (in TS, Ion Storm)
This forces an end to the Weather Storm intro effect (when the screen goes dark prior to the clouds appearing).
34,n = Center Map On Team
This will center the screen on the TeamType. The same effect as hitting the Home key as defined in KEYBOARD.INI when the screen centers on your MCV (or the unit defined by the BaseUnit= statement in RULES.INI). The second parameter determines the speed at which the 'camera' switches view to the TaskForce with 0 being instant.
35,n = Shroud Map For Time Interval, n = time to remain shrouded
This action will shroud the entire map except for the area around the players MCV's (if they have one). The second parameter determines the number of frames for which the map should remain shrouded (1 second = approximately 15 frames) after which the explored areas are revealed again.
36,n = Reveal Map For Time Interval, n = time to remain revealed
This action will reveal the entire map. The second parameter determines the number of frames for which the map should remain revealed (1 second = approximately 15 frames) after which the map is shrouded again.
37,0 = Delete Team Members
This forces dissolved members of the TaskForce to leave the map after which they are deleted (for example aerial transports after their passengers have disembarked).
38,n = Clear Global, n = Global number to be cleared
The global number specified in the second parameter is defined as being 'clear' (it is allocated a value of '0' or 'false'). This should be employed in specific map files only in which the global variable has been defined. This is part of the boolean logic employed by the global variables system in the game engine.
39,n = Set Local, n = Local number to be set
The local variable number specified in the second parameter is defined as being 'set' (it is allocated a value of '1' or 'true'). This should be employed in specific map files only in which the local variable has been defined. This is part of the boolean logic employed by the local variables system in the game engine.
40,n = Clear Local, n = Local number to be cleared
The local variable number specified in the second parameter is defined as being 'cleared' (it is allocated a value of '0' or 'false'). This should be employed in specific map files only in which the local variable has been defined. This is part of the boolean logic employed by the local variables system in the game engine.
41,n = Unpanic
If the TaskForce contains a unit or units that have Fraidycat=yes set which are currently assigned the Panic= sequence then this action nullifies that effect and the unit(s) adopt their default behaviour.
42,n = Change Facing, n = new direction to face
This instructs the TaskForce to turn and face the new direction specified by the second parameter. The facings are as follows:
| Parameter | Facing |
| North | |
| North East | |
| East | |
| South East | |
| South | |
| South West | |
| West | |
| North West |
43,0 = Wait Until Fully Loaded
This is always used after members of the TaskForce have entered a transport in the same TaskForce and serves two purposes. The effect of this is that the transport will be used to carry out any subsequent movement or deploy actions but after that it is no longer considered a part of this TaskForce and as such is available to be recruited into new TeamTypes. It is this action which enables use of the TransportsReturnOnUnload=yes statement in the corresponding TeamType entry. The second purpose is to flag the transport as being 'loaded' with passengers and thus is considered in the AI's targeting logic as a potential threat (see the ContentScan= entry in the RULES.INI). This action also orders the transport to wait until it is fully loaded before executing any subsequent script actions.
44,0 = Unload TRUCKB > TRUCKA
Used purely for a graphical effect and applicable uniquely to the [TRUCKB] unit, this has the effect of converting [TRUCKB] into [TRUCKA] to give the impression that the unit has unloaded its cargo. NOTE: this is residual from Tiberian Sun and as such may not work correctly since [TRUCKA] refers to the Demo Truck image in Red Alert 2 which has no 'unloaded' image. Changing the image for the Demo Truck and assigning new units to [TRUCKA] and [TRUCKB] enables use of this logic.
45,0 = Load TRUCKA > TRUCKB
Used purely for a graphical effect and applicable uniquely to the [TRUCKA] unit, this has the effect of converting [TRUCKA] into [TRUCKB]to give the impression that the unit has been loaded with cargo. NOTE: this is residual from Tiberian Sun and as such may not work correctly since [TRUCKA] refers to the Demo Truck image in Red Alert 2 which has no 'unloaded' image. Changing the image for the Demo Truck and assigning new units to [TRUCKA] and [TRUCKB] enables use of this logic.
46,n = Attack Enemy Structure, n = structure number (see note below)
Members of this TaskForce attack the enemy structure specified by the second parameter. This action depends upon the type of units in the TaskForce and if certain members have Infiltrate=yes set. Members with Engineer=yes set will capture the structure provided it does not have Capturable=no set or if it has NeedsEngineer=yes set. Members with Agent=yes set will spy on the structure if it has Spyable=yes set. Members that do not have Assaulter=no set will garrison the structure if it has CanBeOccupied=yes set. Members with C4=yes set will blow up the structure if does not have CanC4=no set.
47,n = Move To Enemy Structure, n = structure number (see note below)
Members of this TaskForce move and stay adjacent to the enemy structure specified by the second parameter.
48,0 = Scout
Causes members of this TaskForce to move to a pre-determined point on the map in an attempt to scout an area. The effect is that the TaskForce will move in one randomly chosen direction until it is no longer able to do so which can make it very useful or a waste of time depending on the direction chosen. If you want to continually scout the map, you should loop this script action.
49,0 = Register Success For AITrigger Weight Adjustment.
Executing this script action even once in a script by its task force is considered as a success. A script not containing this script action is a fail for its task force. A script containing this script action but the task force being unable to reach and execute this script action even once is a fail. These success and failure are used to adjust the current weight defined in AITriggers. Refer AITriggerType's weights.
50,n = Flash (visual effect), n = number of flashes
This causes the TaskForce to 'flash', the visual effect you get on an object when you order something to attack it. The second parameter is the number of times to flash the unit 'white'.
51,n= Play Animation, n = animation number
This instructs the TaskForce to play one of the animations from the [Animations] in the RULES.INI.INI file (note that for all in game Action and Trigger purposes this number is from an internal table).
52,n = Display Talk Bubble, n = talk bubble number
Should be used for single-unit TaskForces only, this causes a 'talk bubble' to appear above the unit. The second parameter determines which type of talk bubble to display:
| Parameter | Symbol | Meaning |
| general speech | ||
| question | ||
| shouting or statement |
Note that the length of time for which the talk bubble is displayed is controlled through the TalkBubbleTime= statement in RULES.INI - refer to the RULES.INI Guide for details of this and the steps to take to enable its inclusion in Red Alert 2 as this remains residual from Tiberian Sun:Firestorm.
53,0 = Gather (at enemy base) (not in TS)
This causes the TaskForce to gather together (sometimes used when members of the TaskForce move at different speeds and you want the faster ones to stop while the slower ones catch up) after the previous action has been executed. If the TaskForce is in an attack mission and moving towards an enemy base, this command is usually executed when the first member of the TaskForce reaches the distance from that base defined by the AISafeDistance= statement in RULES.INI.
54,0 = Regroup (at friendly base) (not in TS)
This causes the TaskForce to regroup, if for example any of its members have become engaged in a base defense mission or strayed away whilst in guard mode, or even the TeamType itself has been suspended for whatever reason. The members regroup directly next to each other leaving no 'gaps' at the nearest available point with sufficient space, and is used, for example, prior to activating the Iron Curtain so that all applicable members are affected (i.e. they fall within its range of effect).
55,0 = Activate Iron Curtain on TaskForce (not in TS)
If the owner of the TaskForce to which this ScriptType is attached also has the Iron Curtain fully charged then it will be fired at this TaskForce. Note that the use of the Iron Curtain in this manner depends on the percentage chance of the AI incorporating them into its actions as defined by the AIMinorSuperReadyPercent= statement in RULES.INI.
56,n = ChronoSphere TaskForce (not in TS), n = structure number to be Chronoshifted to (see note below)
If the owner of the TaskForce to which this ScriptType is attached also has the Chronosphere fully charged then it will be used on the TaskForce before moving on to the next action. Note that the use of the Chronosphere in this manner depends on the percentage chance of the AI incorporating them into its actions as defined by the AIMinorSuperReadyPercent= statement in RULES.INI.
57,n = ChronoWarp TaskForce (not in TS), n = target number to be Chronoshifted to (see note below)
If the owner of the TaskForce to which this ScriptType is attached has been Chronosphered then it will be used on the same TaskForce to shift them to the enemy structure number specified in the second parameter before moving on to the next action. Note that the use of the Chronosphere in this manner depends on the percentage chance of the AI incorporating them into its actions as defined by the AIMinorSuperReadyPercent= statement in RULES.INI.
58,n = Move To Friendly Structure (not in TS), n = structure number (see note below)
Members of this TaskForce move and stay adjacent to the friendly structure specified by the second parameter. The structure can be one owned by the owner of the TaskForce or any of its allies.
59,n = Attack Structure At Waypoint (YR only, not in TS/RA2)
Members of this TaskForce attack the structure at the waypoint specified by the second parameter. This action is very similar to action number 43 although this action does not test for ownership of the structure itself - thus the inclusion of this action allows, for example, InfantryTypes with Engineer=yes set to enter structures owned by the same side for the purposes of repair. This would be the most appropriate action to use to get the AI to repair bridges. Use of this also means that the TaskForce will attack the structure with one of its weapons meaning, for example, that units with C4=yes set will not C4 the building but shoot at it instead. This is useful if you want to get a TaskForce to destroy a nearby occupiable structure instead of entering it in a bid to prevent the enemy getting hold of it - a tactic used in the Yuri's Revenge AI.
60,0 = Enter Grinder (YR only, not in TS/RA2)
Members of this TaskForce will enter the nearest structure with Grinding=yes set if it is owned by the owner of the TaskForce or any of its allies.
61,0 = Occupy Tank Bunker (YR only, not in TS/RA2)
Any VehicleType members of this TaskForce which do not have Bunkerable=no set will enter the nearest vacant structure with Bunker=yes set if it is owned by the owner of the TaskForce or any of its allies.
62,0 = Enter Bio Reactor (YR only, not in TS/RA2)
Any InfantryType members of this TaskForce will enter the nearest structure with InfantryAbsorb=yes set if it is owned by the owner of the TaskForce or any of its allies and has space available.
63,0 = Occupy Battle Bunker (YR only, not in TS/RA2)
Any InfantryType members of this TaskForce with Occupier=yes set will enter the nearest structure (which they own) with CanOccupyFire=yes set.
64,0 = Garrison Structure (YR only, not in TS/RA2)
Any InfantryType members of this TaskForce with Occupier=yes set will enter the nearest (neutral) structure with CanOccupyFire=yes set. This action is used specifically for this purpose due to action #59 (see above) since the logic in Yuri's Revenge has changed so that the units weapon is transferred to the structure. Use of this action also allows the computer to repair those structures by sending an InfantryType with Engineer=yes set into them and also allows the AI to differentiate between attacking such a structure and entering it, which is useful if you want the AI to use infantry to destroy an occupiable structure thus preventing its enemy from using it.
Structure number allows the AI to target a specific instance of a building. For example, if there are 5 instances of a power plant in enemy base, AI can choose one of them as target depending on its distance or threat value. By itself several instances of the same building doesn't have different threat value, but threat is cumulative. For example, if there are some units nearby a specific building, its threat rating becomes higher with the additional threat values of the nearby units.
Building index used in computation is the position of that building in the [BuildingTypes] list, counting from 0.
Logic for target selection:Reference to 262144 or higher number makes it a do nothing script action and the next action in the script, if it exists is executed.
In cases where there is only one instance of a specific building then all the four options would result in selecting the same target.
In cases where multiple instances of the building have equal threat, AI will choose the one which was constructed first by the target side. If the first was destroyed/sold etc., then next constructed building becomes target. Friendlies doesn't pose threat, so it becomes a case of equal threat.
Even though the script is specified for a team/task force, every unit in the team executes it individually. This may result in team members choosing a different building as target in cases where multiple instances of a building seem to be equidistant.
TeamTypes section lists all the TeamType IDs available in the ai(md).ini. Maps can have their own local TeamTypes. Each TeamType is a set of attributes of a team which includes the TaskForce it forms and the ScriptType it will execute.
Example :[TeamTypes] 0=06175EFC-G 1=0CE4CEFC-G [06175EFC-G] Name=Allied Base Guard - Refine VeteranLevel=1 MindControlDecision=0 Loadable=no Full=no Annoyance=no GuardSlower=no House=<none> Recruiter=no Autocreate=yes Prebuild=no Reinforce=yes Droppod=no UseTransportOrigin=no Whiner=yes LooseRecruit=no Aggressive=yes Suicide=no Priority=5 Max=2 TechLevel=0 Group=-1 OnTransOnly=no AvoidThreats=no IonImmune=no TransportsReturnOnUnload=no AreTeamMembersRecruitable=no IsBaseDefense=yes OnlyTargetHouseEnemy=no Script=0C9C878C-G TaskForce=05C60C4C-GGeneric:
Name
Name flag which holds a string for readable reference. Name strings are truncated to 23 characters maximum regardless of how long of a string you enter.
VeteranLevel
Specifies the rank that all units in this team should have when the team is created. Only works for reinforcement-type teams (created by map trigger action #7 or #80). Accepted values are 1 for Rookie, 2 for Veteran and 3 for Elite.
TechLevel
Minimum TechLevel needed for this team to be built. 0 is used to make it available for all tech levels.
House
The House this team belongs to. <none> is used to make it available to all.
Max
Maximum count of teams of a TeamType produced through AITriggers. -1 is unlimited. Usually when all members of a team are either destroyed or recruited into other teams then the total count of that team is decreased. Game still maintains the total count of a team even when that team has finished its script actions but the units are not yet recruited into other teams or not yet destroyed. Max count is subject to TotalAITeamCap restrictions. When teams are created through Create Team map action, Max count is not considered.
Prebuild
Set with yes/no. If a copy of a taskforce be created before it is actually requested. (need testing)
Reinforce
Set with yes/no. For if this team type is formed as reinforcement. Used in single player maps. The team is created and given to the house free of cost.
GuardSlower
With yes, it increases the value of BaseDefenseDelay= (in the rules(md).ini) for this team. The team will respond slower to attacks in its base. (need testing)
Annoyance
Set with yes/no. AI will replace any destroyed team members. (need testing)
IsBaseDefense
IsBaseDefense=yes on a TeamType makes it a base defense team which responds to attacks on its base. These type of teams could be produced even without AI choosing an enemy. Total of such teams is subject to the limits set by MinimumAIDefensiveTeams and MaximumAIDefensiveTeams under [General] section. This team could be chosen along with free units to protect the units with ToProtect=yes when those are under attack.
Whiner
Set with yes/no. Used on base defense teams, to replace any destroyed team members. If Whiner=yes is set, members of the team taking any damage are treated as an attack on the AI's base and base defense operations kick in.
MindControlDecision
Specifies what this team should do with mind-controlled enemy units. The team must have at least one unit capable of mind-controlling for this to have any effect.
| Value | Description |
| Don't use this logic | |
| Recruit | |
| Send to Grinder | |
| Send to Bio Reactor | |
| Assign to hunt | |
| Do nothing |
IonImmune
Set with yes/no. On yes, team is immune to Ion Storm.
Essential:
Script and TaskForce are essential to defining a team.
Script
The associated ScritpType from the ScriptTypes list which gives the script actions to perform for this team.
TaskForce
The associated TaskForce from the TaskForces list to create this team.
During team formation the units could be recruited from the available units on the map or could be produced from factories or a combination of these two. Teams formed through AITriggers or by Create Team Map Action etc. use recruitment. Reinforcement teams are formed on the spot, so those don't use recruitment.
Game doesn't recruit units that are busy in system generated activities. Like when unit comes out of factory it still is running around and hasn't yet settled into a cell. Or unit automatically tries to regroup with its team members (not the regroup script action) before performing a script action but is still running around and hasn't yet reached its regroup destination.
When a unit belongs to a team its behavior is according to its TeamType attributes. TeamType attributes involved in recruitment are AreTeamMembersRecruitable Priority Recruiter Group and Autocreate.
AreTeamMembersRecruitable
AreTeamMembersRecruitable=yes means that the units in this team can be recruited into other teams. When set to no the team members are not available for recruitment. When the team members finish their script actions they loose their AreTeamMembersRecruitable value and become available for recruitment into other teams.
Priority
A TeamType with higher Priority value can recruit team members from a TeamType with lower Priority value even if the lower Priority value team hasn't yet completed its script actions. A lower Priority TeamType cannot recruit from a TeamType with higher Priority value. TeamTypes with equal Priority values cannot recruit from one another. When the team members finish their script actions they loose their Priority value and can be recruited into teams with any Priority value.
Because of the equal Priority mechanism, similar teams with same Priority don't recruit from one another and also if Max count is more than 1, the next team won't recruit from its previous team. Teams with low Priority are used as pool teams, typically doing base defense jobs and when attack teams are formed which has a higher Priority value then units get recruited from the pool teams to form the attack teams quickly.
Vanilla AI INI uses values in multiples of 4 (in TS) or 5/7 (in RA2/YR). In-between and other numbers (in 0-50) are used in single player maps which gives granular recruitment control based on the priority status.
Recruiter
A TeamType with Recruiter=yes disregards the unit's Group value when recruiting which makes inter-Group recruitment possible. When set to no the TeamType cannot recruit units that have different group value than itself (Group=-2 teamtypes are exception).
As global AI can be enabled in maps, Recruiter=yes and Group numbers 0 to 9, -2 and -40094 (-40094 is used in TS only) which are used in vanilla SP maps should be avoided in AI INI so that unknowingly the hero units in SP maps don't get recruited into generic/global AI teams.
Group
A unit always has a Group value whether it is in a team or not. Produced units are assigned to the group defined in its TeamType/TaskForce. Units get their Group value from its TeamType except when it has Group=-1 where they get their Group value from its task force's group. When the team members finish their script actions they still retain their group value. Group value of a unit only changes when it gets recruited into a TeamType with a different Group value. Pre-placed units on maps have their Group defined as part of their format.
Group=-1 is No Group case. Pre-placed units with Group set to -1 and units in its TeamType/TaskForce's Group set to -1 get assigned to Group=-1. Starting units Freeunits that come with buildings droppod/paradrop units units from crates escaping units from destroyed buildings etc. have their Group set to -1. AI auto-produced units like harvesters which doesn't have a TeamType/TaskForce are also assigned with Group -1.
Group=-2 is Any Group case. TeamType having Group=-2 can recruit units of any Group value even with Recruiter=no set on the recruiting team. Units with Group=-2 are like any other group other than -1.
Main usage of Group is for recruiting specific pre-placed units on maps for specific missions we call those as hero/RPG/mission units. Vanilla SP maps uses Group numbers like 0 to 9-2 and -40094 (-40094 is used in TS only) in conjunction with Recruiter=no to recruit specific pre-placed units into the specific teams.
TeamTypes produced from factories with Groups other than -1/-2 whether in SP or MP maps fail to execeute their script when Recruiter=no is used. For example vanilla TS using -40094 in AI INI are such cases. It is not clear how it is coded in the game. After coming out of the factory these units are kind of busy doing nothing and cannot be recruited further. When TeamTypes produced from factories with Group other than -1/-2 are using Recruiter=yes then such teams are able to execute its script actions and can be recruited further into other TeamTypes with same Group and are able to execute their script actions with Recruiter=no also.
Unexpected job queuing happen in some cases. Like when a first TeamType with Group other than -1 and Recruiter=no produce units from factory it fails to execute its script. A next TeamType with Group other than -1 and Recruiter=yes produces units from factory the game is unable to recruit the first team units but uses those units for the 2nd team and gives replacement for the first teams units. In such case if the 2nd team units finishes their script it executes the first team's script also after that.
Autocreate
Autocreate in TeamTypes is used to check whether a unit should be recruited from the pre-placed unit on the map or it should be produced from a factory. This has less relevance on multiplayer/skirmish maps as it is not expected to have pre-placed units in the maps belonging to the playing house. It becomes relevant in single player maps when either the global AI is enabled or local TeamTypes are defined and there are pre-placed units on the map which can be recruited into teams for the same house.
[Infantry] Index=Owner,ID,Health,X,Y,Sub_Cell,Mission,Facing,Tag,Veterancy,Group,High,Autocreate_no_recruitable,Autocreate_yes_recruitable [Units] Index=Owner,ID,Health,X,Y,Facing,Mission,Tag,Veterancy,Group,High,Follows_Index,Autocreate_no_recruitable,Autocreate_yes_recruitable [Aircraft] Index=Owner,ID,Health,X,Y,Facing,Mission,Tag,Veterancy,Group,Autocreate_no_recruitable,Autocreate_yes_recruitable
When a TeamType has Autocreate=no then the units with Autocreate_no_recruitable as 0 are not considered for recruitment. If there are units with Autocreate_no_recruitable as 1 then recruit those and form the team. If it falls short to form the team then produce remaining units from the factory to complete the team. If it fails to recruit the units on the map with Autocreate_no_recruitable as 1 because of any reason like Group mismatch along with Recruiter=no then it cannot produce replacement for such units from the factory so the team formation is interrupted.
When a TeamType has Autocreate=yes then the units with Autocreate_yes_recruitable as 0 are not considered for recruitment. If there are units with Autocreate_yes_recruitable as 1 then recruit those and form the team. If it fails to recruit available units on the map because of any reason like Group mismatch along with Recruiter=no then produce those units from the factory only when Autocreate_no_recruitable is 0 and complete the team; if in this case Autocreate_no_recruitable is 1 then can't produce from factory so team formation is interrupted. If it falls short to form the team then produce remaining units from the factory to complete the team.
Example: Consider that the concerned house has required factory (barracks/war factory etc.) and has credits to produce units. Map has 2 pre-placed units with same relevant parameters and a TeamType to be formed also requires those 2 units only. Combinations are listed as follows:
| Pre-placed Unit's Group | Autocreate_no_recruitable | Autocreate_yes_recruitable | TeamType's Group | Autocreate | Recruiter | Outcome |
| No needed units on map | n/a | n/a | any number | yes/no | no | Produce from factory |
| -1 | 0 | 0 | any number | yes/no | no | Produce from factory |
| -1 | 0 | 1 | -1 | yes | no | Recruit the pre-placed units |
| -3 | 0 | 1 | -1 | yes | no | Recruitment fails, produce from factory |
| -1 | 0 | 1 | -1 | no | no | Produce from factory |
| -1 | 1 | 0 | -1 | yes | no | Can't produce from factory, can't recruit, team not formed |
| -1 | 1 | 0 | -1 | no | no | Recruit the pre-placed units |
| -3 | 1 | 0 | -1 | no | no | Can't produce from factory, recruitment fails, team not formed |
| -1 | 1 | 1 | -1 | yes | no | Recruit the pre-placed units |
| -3 | 1 | 1 | -1 | yes | no | Can't produce from factory, recruitment fails, team not formed |
| -1 | 1 | 1 | -1 | no | no | Recruit the pre-placed units |
| -3 | 1 | 1 | -1 | no | no | Can't produce from factory, recruitment fails, team not formed |
In the above example with a team of 2 units, if the map has one additional pre-placed unit that can be recruited into the team successfully then also the team cannot be formed completely, so the above combinations apply. If there are 2 or more of the additional pre-placed units which can be recruited successfully then if the team formation fails in the above combinations then the team will be formed with the additional units.
FA2/FinalSun creates units with Autocreate_no_recruitable (1), Autocreate_yes_recruitable (0) by default and in TeamTypes with Autocreate=yes. When you find that the pre-placed units are not getting recruited into the expected TeamType, then uncheck the Autocreate checkbox to make it Autocreate=no.
LooseRecruits
It doesn't seem to have any effect so don't know what it does. When the team members finish their script actions those units could be recruited immediately into other teams regardless of LooseRecruits being yes or no.
AvoidThreats
Set with yes/no. When set to yes, the units of this team chooses a path with least threat. This is done by re-evaluating the cumulative threat posed on the paths from its current cell to its destination and then choosing the path with least threat. The re-evaluation is not done on every cell the unit travels but at regular time intervals, so faster units may travel for a few cells with old intel.
OnlyTargetHouseEnemy
Set with yes/no. When set to yes, the team will not attack neutral side objects.
Aggressive and Suicide
Aggressive entry in TeamTypes pertains to initiating an attack when a threat posing enemy comes in range. Suicide entry in TeamTypes pertains to response to an attack. These can be set to yes/no. Depending on the current script action being executed and the combination of these two entries, the behavior differs. For some script actions, these two flags don't have any relevance. Variation are seen in the script actions where movement is involved. Typically, attack script actions are not affected by Aggressive entry and the team does not initiate attack while on the move to its target when the threat-posing enemy comes in range. In move script actions, Aggressive=yes favors attacking when the threat-posing enemy comes in range which results in the team losing its current script action, and when the team resumes it executes the next script action in its script. Suicide=yes tries to suppress the retaliation when attacked in favor of completing the current script action.
| ScriptAction | Aggressive | Suicide | ||
| 0 Attack target type 1 Attack waypoint 46 Attack enemy structure 59 Attack structure at waypoint |
Does not initiate attack; continues its script action. | Does not respond to attack; continues the script action. | ||
| Responds to attack and continues the script action. | ||||
| Does not respond to attack; continues the script action. | ||||
| Responds to attack and continues the script action. | ||||
| 3 Move to waypoint 47 Move to enemy structure 53 Gather at enemy base |
Does not initiate attack; continues its script action. | Does not respond to attack; continues the script action. | ||
| Abandons the current script action and attacks the enemy. Once attack is over, executes the next script action. | Responds to attack. If the engagement is only response or if the enemy moves out of range, continues the current script action. If the engagement turns into an attack, it abandons the current script action. Once the attack is over, executes the next script action. | |||
| Does not initiate attack when enemy comes in range; continues its script action. | Does not respond to attack; continues the script action. | |||
| 16 Patrol to waypoint | Attacks the enemy, then resumes the script action. | Does not respond to attack; continues the script action. | ||
| Abandons the current script action and attacks the enemy. Once attack is over, executes the next script action. | Responds to attack. If the engagement is only response or if the enemy moves out of range, continues the current script action. If the engagement turns into an attack, it abandons the current script action. Once the attack is over, executes the next script action. | |||
| Attacks the enemy, then resumes the script action. | Does not respond to attack; continues the script action. | |||
| Attacks the enemy while moving to given waypoint. | Moves back to retaliate. Attacks if in range, otherwise ignores the enemy. Continues the script action. |
Loadable
Typically set to no. Used if the team members need to reload by docking when units run out of Ammo=. (need testing)
Full
For use in map files with yes/no. Should any units with PipScale in the team initially be full. Applies to harvesters/weed eaters/ore miners/transport units. If the teams contains a transport and other units, the other units are placed in the transport for reinforcement purposes. (need testing)
Droppod
Set with yes/no. Typically set to no. Whether the team arrives in droppod. (need testing).
TransportWaypoint
Specifies the waypoint where a team type with transport and UseTransportOrigin=yes will spawn at. This tag expects a waypoint in the notation known from map actions: A = 0, B = 1, .. AA = 26. The maximum value is ZZ = 701.
UseTransportOrigin
Specifies whether a team type with transport will spawn at the waypoint specified by TransportWaypoint. Otherwise the transport will spawn on a random cell on the owning player's edge of the map.
TransportsReturnOnUnload
When set to yes, after the first unload script action is completed, it will send away units in the team with Passengers= value.
OnTransOnly
Set with yes/no. Check when executing its script if it has transport load/unload script actions, otherwise end the script. When OnTransOnly=yes is used, the units won't get associated with the Tag attributes of this TeamType. (need testing)
Map related:
Pertains to map definitions.
Tag
Tags can be attached to many objects in maps including TeamType. Here each team member gets tagged with the associated Tag value, unless team is set with OnTransOnly=yes.
Waypoint
This associates the team with the given waypoint. Used in creating team at waypoint location, also used in other flags like TransportWaypoint and UseTransportOrigin. It is also considered as home cell when looking for units to recruit.
Description of the individual fields are as follows:
| ID | This AITrigger's ID. | ||||||||||||||||||||
| Name | A plain string used as a name. Must not contain commas, will be truncated to 47 characters for internal representation. | ||||||||||||||||||||
| Team1 | The first TeamType that will be created when this AI Trigger gets triggered. | ||||||||||||||||||||
| OwnerHouse | The Country(RA2)/House(TS) that should use this AI Trigger. Defaults to <none>, can be set to an individual country's/house's name or to <all> indicating that all countries/houses of the appropriate Side can use this AI Trigger. | ||||||||||||||||||||
| TechLevel | Minimum TechLevel required for this AI Trigger. It is recalculated internally to be the minimum TechLevel required to build all the units in this AI Trigger's first and second TeamTypes. | ||||||||||||||||||||
| ConditionType | Specifies a number to use as a Condition. This ConditionType along with ComparisonObject and Comparator desribed below, defines a logical comparison like "enemy house has more than 0 rhino tanks". In this example, "enemy house has this technotype" is the ConditionType, "rhino tanks" is the ComparisonObject and "more than 0" is the Comparator. See below for Condition check segment examples.
|
||||||||||||||||||||
| ComparisonObject | Specifies the object that will be used as the Comparison Object. IDs of BuildingTypes, AircraftTypes, InfantryTypes and VehicleTypes are accepted here. See below for Condition check segment examples. | ||||||||||||||||||||
| Comparator | Defines the comparator for the ConditionType. This sub-string is composed of eight chunks of eight hexadecimal characters each (64 characters in total). Each octet contains a textual representation of a little-endian hexadecimal number. The first operand/octet is dependant on the ConditionType (typically amount of objects owned, or credits owned). The second operand/octet is the comparison operator. The next six octets are unused. See below for Condition check segment examples.
|
||||||||||||||||||||
| StartingWeight | Specifies a floating point value that will be set as this AI Trigger's Starting Weight when the game starts. See the section on Trigger Weights for more info. | ||||||||||||||||||||
| MinimumWeight | Specifies a floating point value that will be interpreted as this AI Trigger's Minimum Weight. See the section on Trigger Weights for more info. | ||||||||||||||||||||
| MaximumWeight | Specifies a floating point value that will be interpreted as this AI Trigger's Maximum Weight. See the section on Trigger Weights for more info. | ||||||||||||||||||||
| IsForSkirmish | Enables or disables this AITrigger for game modes. 0 for single player. 1 or more for skirmish and multiplayer. | ||||||||||||||||||||
| Unused | Unused value always set to 0. | ||||||||||||||||||||
| Side | Indicates the Side that may use this AI Trigger. 0 means available for all sides. Positive value indicates the specific AI playable side. For RA2/YR, 1 for Allied, 2 for Soviet, 3 for Yuri and so on. For TS, 1 for GDI, 2 for Nod and so on. | ||||||||||||||||||||
| IsBaseDefense | Unused, usually set to 0. | ||||||||||||||||||||
| Team2 | The second TeamType that will be created when this AI Trigger is triggered. | ||||||||||||||||||||
| EnabledInEasy | 0 means not available and 1 means available in easy difficulty. | ||||||||||||||||||||
| EnabledInMedium | 0 means not available and 1 means available in normal difficulty. | ||||||||||||||||||||
| EnabledInHard | 0 means not available and 1 means available in hard difficulty. |
Condition Check Segment Examples
For simplicity only the segments of ConditionType, ComparisonObject and first octet (amount) and second octet (Comparator) are shown. An octet consists of 8 bytes, 2 bytes form a word here. Values are in hexadecimal and represented in little endian format. For a decimal value of 3, its hex value is 0x3, its octet representation becomes 03000000. For a decimal value of 500, its hex value is 0x1F4, its octet representation becomes F4010000.
| Segment | Meaning |
| -1,<none>,0000000000000000 | no condition check, always true. TechnoType and the two octets are irrelevant and can hold any valid values. |
| 0,GAREFN,0400000003000000 | when AI's enemy owns greater or equal to 4 allied ore refineries. |
| 1,SHK,0300000001000000 | when AI's own troops has less than or equal to 3 shock troopers. |
| 4,<none>,8813000003000000 | when AI's enemy has greater or equal to 5000 credits, hex value 0x1388, octet 88130000. |
AITrigger Weights
AI Triggers are given weights to define how important they are. Larger current weight makes that AI Trigger more likely to get triggered. When the game starts, the starting weight is the current weight. Later when it is recomputed, the current weight changes within the given MinimumWeight and MaximumWeight.
Each time an AI controlled TeamType is dissolved (when they complete their ScriptType or are destroyed), all AI Triggers using that TeamType as their primary (Team1) get their current weight modified:
If the Team has executed a Script Action 49, 0 in its lifetime, [General] AITriggerSuccessWeightDelta= is added to its current weight, otherwise, [General] AITriggerFailureWeightDelta= multiplied by [General] AITriggerTrackRecordCoefficient= (the former is usually negative) is added. Care is taken not to push the weight outside the limits set by MinimumWeight and MaximumWeight while doing so.
A Weight equivalent to 5000.0, triggers this AITigger as soon as its conditions are met. In RA2, it is originally used for Teams utilising minor SuperWeapons, the Iron Curtain or the ChronoSphere.
A constant weight given for StartingWeight, MinimumWeight and MaximumWeight like 50.0,50.0,50.0 is not altered by the weight computations.


Lapoozza's Corner
Features
Un-subscribe
Shopping Cart
0
0
Items
Book's List
Common Object Patterns
Javascript design patterns.
Timer Patterns
Javascript design patterns.
AMDs
Javascript design patterns.
Pub Sub
Javascript design patterns.


Hello! I'm a software developer and I'm following new technologies and
currently working with Node.js and Front-End JavaScript technologies.
I've always been interested in astronomy and physics thus desired to learn more
about universe each day. The main reason I'm enjoying coding is just because I can
associate it with physics.
Seeking for different experiences instead of looking at life through a single
window.


Sommerfeld Office Monitoring
This is a hobby project described at
http://henrik.sommerfeld.nu/my-iot-exploration/
.
No data yet, this can take up to 30 seconds...
0% Complete
Updated:
No data yet, this can take up to 30 seconds...
Temperature
?
℃
Humidity
?
%
Air Pressure
?
mbar


@main("Getting There") {
8th Floor, St James Buildings
79 Oxford Street
Manchester
M1 6FQ
Oxford Road Train Station or Manchester Piccadilly Station (3 minute walk)
Nearest parking at The Palace (Whitworth St, Manchester, M1 6NE)
There are lifts that go to all floors and accessible for wheelchair users, there are also disabled toilets.


When faced with vast and noisy seas of data, useful signals can often be drawn with a bit of ingenuity. Skillfully navigating this data is what drives me professionally.
Curriculum VitaeI've worked on processes from documentation automation to capital allocation, from data modeling to machine learning.
I've worked with colleagues and collaborators throughout the world and across specializations, benefiting from diverse perspectives.
Recursively, every subject I learn reveals new ideas I don't yet understand, becoming new subjects to learn, revealing new ideas...
I have worked on data processing for a decade and a half, from sourcing to ETL, from cleaning to analysis to application.
Have a challenge I can help you with?
Let's speak and find out how I can add to your enterprise.


Includes career guidance appointments, drop in sessions, workshops
Includes where to start, assess your values, skills and strengths
Includes application forms, writing tips, examples
CVs guide, writing tips, what to include
Recruiting at Warwick, connecting with graduate talent
Includes research students skills programme, postgraduate taught students
Graduate destinations, support, recruitment cycle, case studies
Includes overseas graduate jobs and internships
Includes interview support, video interviews, telephone interviews
Including placements and work experience
Including placements and work experience, summer internships and careers fairs
Includes sector events, careers fairs, workshops and support
Career motivations, goals, skills and strengthes
Includes job sectors, what employers want, SMEs
Includes awards, personal development, study & research skills, academic writing
Internships and graduate positions available from myAdvantage
Opportunites and skills development
{{ event.simpledate }}
{{ item.employerName }}
Follow us on Twitter


WITNESS LIST Pensions & Investments Committee April 14, 2005-8:00A HB 346 For: Bacon, Tim (Texas State Teachers Assoc.) Fickel, Ann (Texas Classroom Teachers Association) Hoerig, Patty (Self and TRTA) Lee, Tim (Texas Retired Teacher Association) Mendez, Mary Alice (Self) Quinzi, Patty (Association of TX Professional Educators (ATPE)) Raab, Ted Melina (Texas Federation of Teachers) Riveta, Derly E. (Self and TRTA) Rogers, Tom (TRTA Legislative Committee (Cochairman)) Stipnieks, Anita (Self) Wiley, Novella (Self) HB 1079 - Committee Substitute (Krusee/CSHB 1079) For: Rex, James L. (Self) HB 1420 For: Bacon, Tim (Texas State Teachers Assoc.) Against: Raab, Ted Melina (Texas Federation of Teachers) HB 1595 - Committee Substitute (Rodriguez/CSHB 1595) On: Nail, William S. (ERS) HB 1809 Against: Brune, Henry (Department of Public Safety Officers Association) HB 1960 For: Prickett, Greg (Self and CLEAT - Combined Law Enforcement Assn's of Texas, UNTPOA - Univ. of North Texas Police Officers Ass) Against: Brune, Henry (Department of Public Safety Officers Association) HB 2368 For: Puckett, Donnie (Texas Parks and Wildlife Game Wardens) HB 2670 For: Davis, Samuel (Self and Corrections Assocation of Texas) Smith Sr., Pastor Floyd Wayne (Correction Association of Texas) HB 2825 For: Salinas, "Art" Arturo (Self) HB 2945 For: Floyd, Beaman (Texas Community College Teachers Association) HB 3125 For: Floyd, Beaman (Texas Community College Teachers Association) HB 3126 For: Floyd, Beaman (Texas Community College Teachers Association) Hempstead, Chuck (Texas Association of College Teachers)


{{ post.title }}
{% include post-metadata.html %}{{ post.description}}
{% include post-subtitle.html %}
{{ post.excerpt }}
--- layout: default title: binarymash ---
I occassionally write blog posts about things I've learnt. Here are some recent posts.
{% for post in site.posts %}


| Games I made: |
SuperForeverAloneInThaDungeon
|
I loved(and still) batch when I was younger, I love console games, and then C# came... It's time for my own roguelike! |
|
Page |
C# Console Four in a row(vier op 'n rij!)
|
Something revolutionary... You can play four in a row on your PC!
It includes the source code & executable. You can define how many
columns and rows you want. You can even pick 1000!
|
|
Download |
RedBull Santa
|
RedBull Santa! A C# XNA game, which is very trippy and sound-dynamic!
You must prevent santa from falling-of the "roof", while drinking
as many as possible Red Bull! NOTE: Contains flashy images. |
|
Binary Source |
Low-Memory Candy
|
You are a man, whose memory is weird. It needs candies! Otherwise it will forget stuff! Can you keep his memory intact?
Made for the Candyjam! |
|
Binary Source Submission Page |
C# XNA "Stars.EXE"(I am bad at names okay)
|
It was a nice "Test project", where I did all sorts of (useless) stuff. It was originally intended to create this page's background, but I managed to make a nice game from it. Comes with a *nice* *config format* and reasonable code. |
|
Binary Source |
| Software I made: |
PoleCompass, a Minecraft Bukkit Server Java Plugin
|
My first released bukkit plugin! PoleCompass is a very, very simple plugin
which allows you to set your compass to any location!
|
|
Source Website |
C# Magical Encrypter
0:3_228;3_237; 2_152;4_132; |
I made a simple encrypter! It works great! It's random, and you can have different combinations for the same thing! But today, you won't get the source,
you must figure it out your own!(Don't use decompilers please!) I know you can do it. Hint: d = 100! If you really want the source code, you can
email me for it. But you MUST have at least a clue!
|
|
Binary |
Joppiesaus's DataBase System(AKA JDB)
|
I once tried to make my own program where I could manage my books and movies just for fun... But I was REALLY bad at databases! Way to complicated! conn.Connect(connectionString);...
So I wrote my own database system from scratch! It works neat! |
|
Info |
Binulator
|
Bytecalculator? Pfft. This has much, much more functions. Possible combinations, chars, binary values... Comes with a good theory behind it! |
|
Theory Download |
HTML Image Gallery Maker
|
A very simple image gallery generator, for websites! Just select the folder, enter some colors(double-click), click generate, and there you have it! |
|
Binary Source Example |
| Miscellaneous (mostly funny & nerdy) stuff: |
| Hackertyper!
It's awesome! Inpsired by hackertyper.net, I made one too! But then without easter-eggs(sorry) and
jQuery(yay), and with the ByteCalculator class as the hack. It's fun. Hint: F12 is awesome!
|
Try it! For your website |
GuidIsNotRandom.exe
|
What did they told me? GUID IS UNIQUE? Nope, it isn't. It takes several years
to prove it, But once you did it, you are right. |
|
Binary Source |
Windows XP's 3D "Space Cadet" Pinball
|
YES! Another wormhole! One of my favorite games when I was 5 or something. Hours of fun! Runs on Windows 7, 8 and even Linux(via Wine)! Have fun! |
|
English Dutch |
Tactical Ops Assault on Terror
| One of my favorite old games! Completely vanished from the internet! Until now... I had to upload it! Ode to the developers!(even íf it's derpy) |
|
Page Download |
never_thrust_batch_files.bat
|
WARNING: This is a computer virus. So I thought: How can I let someone rage while not harming the whole computer? It's easy! So I came up with this: Your disk drive will open, you are unable to type correctly,
you get spammed and the computer yells to you, and much more... I present to you: never_thrust_batch_files.bat! Please use this for "fun" purposes, not to harm people. It's easy to fix, just open run and type in "msconfig",
then open the tab "startup" and remove never_thrust_batch_files.bat from the list. |
|
Download |
installer.bat
|
Bing bar? Conduit toolbar!? Norton Antivirus!?! That trash wouldn't be able to beat THIS! Designed just for you, to generate trash. If you have an old computer, you want to bomb, just enter -1 trash! Die in style. |
|
Download! |
| Old & unusefull stuff I made in order to learn: |
C++ Apple Loser
|
WARNING: This program creates milions of apples but forgets where they are located. Notice your RAM.
I LOVE pointers! This is made to learn more about pointers. What this program does:
- Create a apple and assign it to a pointer
- Create a new apple and assign it to the same pointer
- Goto 1
This program will fire up your RAM and will throw a bad_alloc . |
|
Binary Source |
ByteCalculator
|
I had a some sort of mind-wave, I was impressed by Binary code. It calculates by bytes(just enter number) or bits(enter after your number "b"), what the maximum value is in binary.
For example: 1b = 1, 7b = 127, 1 = 255, 13b = 8191. It's quite "advanced". Not really fun, but geeky. I also figured out that if you want to calculate possibilities, it's almost the same:
calculate the total things in bits, then add 1. See also Binulator. |
|
Binary Source Mindwave |
C# XNA Weather engine
|
I made this a while ago, just for fun. A fully customizable weather engine.
It includes a sample, the source, and a executable. (and more)
How awsome is that? Have fun with it! |
|
Download |
Motorcycle
|
Motorcycle is a C# console (kindof)RPG where you can do what you want.
You can race, upgrade your motor, and that's it I believe. It was my first
console game, and it is really boring actually.
|
|
Download |
SuperHero
|
SuperHero is my second C# console RPG which is a lot better than Motorcycle.
With random and weird things, easter eggs, and some other geeky stuff!
It was never finished actually. If you are interested, you can develop it by yourself and
if you send me an email I will post it on my website!
I'll be very happy if you do that. Anyways, have fun enyoying your powers.
|
|
Download |
C# Click Game
|
EDIT: S***ty as hell. Made in one hour for the I-come-up-with-this-because-derp-competition.
Click Game is a simple click game where your goal is to click buttons as
fast as possible in the correct order, the order is always the same,
but as always the souce is included so you can mess arround with it.<
I made this quick, when I was bored by the way. Have fun! |
|
Binary
Source |
| Stuff I made for the Ludum Dare competition(games): |
C# XNA Snake (LD28 Warmup)
|
It's a snake clone! As a warmup! Messy code with bugs! It's fun! Try it! |
|
Download Source
Submission Page |
C# XNA "One Wall" (LD28 submission)
|
Yeah! My first submission to the Ludum Dare competition! Made in less than 48 hours!
The theme was "You only get one", so I made a game you get only one wall to defend yourself!
It's fun, sorta. But I am proud of it! Play it! |
|
Download Source
Submission Page
Timelapse
|
C# XNA "SuperDriver OVERCLOCK" (Mini-LD49 submission)
|
You are a DVD/CD-ROM Driver laser. Your task is to read all the data from the disk as long as possible. You can miss 3 times.
If you miss more than that, the computer will crash. But the driver is hacked & overclocked by the user.
How long can you read data from the disc? |
|
Download Source
Submission Page |
Who I am:
I am Job van der Zweep!(AKA joppiesaus)☻
I am a 15 year old geek from holland who likes almost everything about computers. Especially programming!
I started programming arround my 11'th year. Before that I was making stuff with batch without really know what I was doing(I didn't even know it was called programming...)
I know lots of languages: C#, batch, HTML(if
you call that a programming language...), javascript(but that's confusing). I am learning(or having little knowledge): PHP, C++, Java, BlitzBasic!
I also LOVE to customize and build pc's(
Here's my own!). And I can fix them too.
I love science! People say I'm awesome in it! Even though science is sometimes really confusing it is
still just screwing arround with writing it down.
I love my
cat. My cat doesn't love me. She loves Google though.
Also, I like joppiesaus!
How I became a programmer:
Well, when I first saw the computer, I mostly played games like
Pajama Sam, and Howie's grote rekenavontuur. Those are the games where you can explore, and do what you want to do.
yes, XP's pinball did it right to me, mspaint.exe was fun, but those where the games which I could play forever. I also played
Keen 5.
Then, there was
RollerCoaster Tycoon. Again, I could do what I want, but I could this time create stuff how I like. I thought it was the best game ever. I still play it nowadays.
Age of Empires II was another game I like. Pure strategy, I got old enough to understand it. I played with .bat files that time. I programmed without even knowing it. NFSU did also good to me.
Than, there was the legendary
Minecraft, which had everything what I like: Exploring, building stuff, no limits. One day, my friend showed Minecraft Classic. I wanted a server, so I came out at
MCDzienny. You could make custom commands, and I loved to make those. I started in Notepad, then I downloaded a IDE. I thought: This is everything for me. Coding.
I started learning JavaScript at
CodeCademy, and coding more custom commands in C#(My best language so far). I followed tutorials for C#, and made neat stuff.
Kerbal Space Program is awesome. It had again the three parts of Minecraft, but than added more science. EVERYTHING FOR SCIENCE! Arround that time, I saw the
XNA Framework, and started to code games. Of course, I learned more stuff.
And now, I am here. I made a website!
I guess I like creating stuff. Do whatever you want. I think that's why I am a programmer; I want to create and understand.
Other stuff I want you to tell you:
- I'd love to hear some comments! ☻
- All of this stuff on this paged has a nice disclaimer called "Works on my machine". What that means? Well I am a human and humans make mistakes... I am not a perfect programmer.  I don't expect any of this will happen, but you never know.


Customized Training Opportunities
Learn applications of the MBTI® and Strong Interest Inventory® instruments in “train the trainer” courses from an acclaimed trainer, Dr. Jean Kummerow.
- Career counseling
- Team development
- Communications
- Conflict management
- Decision-making
- Leadership/management development
- Type Dynamics and Development
- Stress management
Feedback from clients indicates she is valued for her clarity in explaining concepts, her practical focus and her sense of humor.
Public Training Opportunities
November 25th, 2016
Coaching Using MBTI® personality type to achieve the Crucial Cs, masterclass by Jean Kummerow
The Crucial Cs Model of Adler's Core Needs posits that everyone needs to Connect, feel Capable, Count, and have Courage. Using the concepts of the Myers-Briggs Type Indicator assessment, coaches can find pathways to achieve these. Participants must know their MBTI Type and the basic preference definitions to participate.
Check out Type Association Benelux for more information and registration.
She has conducted numerous programs related to the above topics throughout the USA and in Canada, England, Ireland, Belgium, Denmark, The Netherlands, Sweden, China, Hong Kong, Japan, India, Singapore, Australia, New Zealand, Argentina and Brazil.


Greetings, my Lord. Would you care to hire the mercenaries of our guild?
Although you have already signed a Contract with special mercenaries who were after the Seal of Strife previously, you will not be able to place them unless they belong to our guild.
If you don't know how to draw up a Contract, just ask me.
Ask about how to draw up a Contract.
Hire mercenaries.
Hire elite mercenary guild members.
Hire a teleporter.


Content
PhotographMePortfolio are a one-stop-shop creative agency with the ability to tackle everything from ideation to production, from social media to Out of home, from editorial to experiential. You name it, we do it – and we do it with style PhotographMePortfolio legacy as one of the founders of Meerun Media gives us a unique perspective and editorial expertise. No matter what the project, our team and multiple studio spaces (including the humungous PhotographMe Studio and our in-house space meters away from the creative dreamers) offer a process that allows us to push ideas, spark conversations and deliver something different. When the world changes, we don’t just change with it; we have the speed, the space, the flexibility and the minds to remain one step ahead and influence the future of creativity.


To quickly restore the wallet, type the words of your mnemonic into the text box below, and you will get a list of index numbers for the words.
You can use the "Index restore" option to quickly restore the wallet, rather than typing each word individually. Do this before executing the operation, as the browser will become locked while the BitLox is restoring the wallet.
This word list is not transmittied to either the device, nor sent over the internet.


Easily copy the code by clicking the "Copy" button. A popover message will be shown after successful copy operation.
Available on Edit Page:
Button Position:


Before Change
theta, cost, ret = fmin_l_bfgs_b(
self.cost_grad, theta, args=(X, Y.ravel()), **self.fmin_args)
if ret["warnflag"] != 0:
logging.info("L-BFGS failed to converge")
return LogisticRegressionClassifier(theta, self.normalize, self.mean, self.std)
class LogisticRegressionClassifier(classification.Model):
After Change
raise ValueError("Logistic regression does not support "
"multi-label classification")
if np.isnan(np.sum(X)) or np.isnan(np.sum(Y)):
raise ValueError("Logistic regression does not support "
"unknown values")
self.mean = np.mean(X, axis=0)
self.std = np.std(X, axis=0)
if self.normalize:
X = (X - self.mean) / self.std


Yu can do this! -fieldset


| Package | com.threerings.display |
| Class | public class CameraSnapshotter |
| Inheritance | CameraSnapshotter flash.display.Sprite |
| Property | Defined by | ||
|---|---|---|---|
| height : Number [read-only]
| CameraSnapshotter | ||
| width : Number [read-only]
| CameraSnapshotter |
| Property | Defined by | ||
|---|---|---|---|
| _bitmap : Bitmap | CameraSnapshotter | ||
| _camera : Camera | CameraSnapshotter | ||
| _correctionHeight : int | CameraSnapshotter | ||
| _correctionWidth : int | CameraSnapshotter | ||
| _video : Video | CameraSnapshotter |
| Method | Defined by | ||
|---|---|---|---|
|
CameraSnapshotter(cameraName:String = null)
| CameraSnapshotter | ||
|
clearSnapshot():void
| CameraSnapshotter | ||
|
getCameraName():String
| CameraSnapshotter | ||
|
getSnapshot():BitmapData
| CameraSnapshotter | ||
|
hasCamera():Boolean
[static]
Static method to determine if the user even has a camera.
| CameraSnapshotter | ||
|
setCamera(camera:Camera):void
| CameraSnapshotter | ||
|
setCameraName(cameraName:String = null):void
| CameraSnapshotter | ||
|
setMode(width:int, height:int, fps:Number, favorArea:Boolean = true):void
Just like Camera's setMode().
| CameraSnapshotter | ||
|
takeSnapshot():void
| CameraSnapshotter |
| Method | Defined by | ||
|---|---|---|---|
|
attachVideo():void
| CameraSnapshotter | ||
|
detachVideo():void
| CameraSnapshotter | ||
|
handleCameraStatus(event:StatusEvent):void
| CameraSnapshotter | ||
|
setCorrection():void
There appears to be a bug with the camera that "locks" it to the size it was at when
it was unmuted.
| CameraSnapshotter |
| _bitmap | property |
protected var _bitmap:Bitmap
| _camera | property |
protected var _camera:Camera
| _correctionHeight | property |
protected var _correctionHeight:int
| _correctionWidth | property |
protected var _correctionWidth:int
| height | property |
height:Number
[read-only]Implementation
public function get height():Number
| _video | property |
protected var _video:Video
| width | property |
width:Number
[read-only]Implementation
public function get width():Number
| CameraSnapshotter | () | constructor |
public function CameraSnapshotter(cameraName:String = null)
Parameters
cameraName:String (default = null )
|
See also
| attachVideo | () | method |
protected function attachVideo():void
| clearSnapshot | () | method |
public function clearSnapshot():void
| detachVideo | () | method |
protected function detachVideo():void
| getCameraName | () | method |
public function getCameraName():String
Returns
String |
| getSnapshot | () | method |
public function getSnapshot():BitmapData
Returns
BitmapData |
| handleCameraStatus | () | method |
protected function handleCameraStatus(event:StatusEvent):void
Parameters
event:StatusEvent |
| hasCamera | () | method |
public static function hasCamera():Boolean
Static method to determine if the user even has a camera.
ReturnsBoolean |
| setCamera | () | method |
public function setCamera(camera:Camera):void
Parameters
camera:Camera |
| setCameraName | () | method |
public function setCameraName(cameraName:String = null):void
Parameters
cameraName:String (default = null ) — the actual name of the camera, not the index (as used to get it from
the Camera class).
|
| setCorrection | () | method |
protected function setCorrection():void
There appears to be a bug with the camera that "locks" it to the size it was at when it was unmuted.
| setMode | () | method |
public function setMode(width:int, height:int, fps:Number, favorArea:Boolean = true):void
Just like Camera's setMode().
Parameterswidth:int |
|
height:int |
|
fps:Number |
|
favorArea:Boolean (default = true )
|
See also
| takeSnapshot | () | method |
public function takeSnapshot():void


{% extends "layout.html" %} {% block page_title %} GOV.UK prototyping kit {% endblock %} {% block content %} ALPHA This is a new service – your feedback will help us to improve it. What type of waste did you transfer? Waste engine, gear and lubricating oils Mineral-based chlorinated engine, gear and lubricating oils Mineral-based non-chlorinated engine, gear and lubricating oils Synthetic engine, gear and lubricating oils Readily biodegradable engine, gear and lubricating oils Other engine, gear and lubricating oils {% endblock %}
ALPHA This is a new service – your feedback will help us to improve it.


Howdy!
You are seeing this message because of one of the following reasons
1. You have not added any hosts to the host-list file.
To add hosts to monitoring, add hostnames in the following format to
/opt/mylinuxmon/core/host_list
hostname1.domain.com
hostname2.domain.com
hostname3.domain.com
...
2. You have not waited long enough after installing this program. Come back in a while!