Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Empire Deluxe Combined Edition

The latest in the classic Empire Series of games, which has spanned almost five decades. · By Killer Bee Software

How to setup your own AI script. using WW2 script as example.

A topic by ww2_weasel created Apr 08, 2021 Views: 338 Replies: 6
Viewing posts 1 to 7
(1 edit)

###############################################################################

#SCRIPT FOR STANDARD AI PLAYER

#

#  There are many possible settings for the standard player. These are grouped 

#  in the following ways:

#

# Unit Type Lists: Units which will perform various functions

# Strategic Values: Minimum and maximms used in decision making

# Conditional Values: Values mapped to unit types to influence the 

# decision making process

# Rules Of Engagement: Rules for reacting to enemy units

#

#

#

# Each data line starts with: [data topic][values][...]

#

# format is [specifier][data][more data][...]

#

#

# Exploration

# SAI_UT_AIR_EXPLORE - Air Units Used in exploration

# SAI_UT_LAND_EXPLORE - Land units used in exploration

# SAI_UT_GRND_EXPLORE - ground units used for exploration 

# (can traverse both sea and land)

# SAI_UT_SEA_EXPLORE - sea units used in exploration

# SAI_NUM_LAND_UNITS_EXP - number of land units to explore per land mass

# SAI_NUM_SEA_SQ_PER_EXP - size of sea mass for each explorer

# SAI_NUM_LAND_UNITS_EXP_SIZE - size of land mass for additional explorer

#

# Early Exploration

# SAI_UT_EARLY_CQ - attacking units to be produced

# SAI_UT_EARLY_TR - early transport types

# SAI_UT_EARLY_EX - early explorer types

# SAI_PRI_EXP_CITY_CRITERIA - number of cities visible before initial land 

# mass explore ends

# SAI_PRI_EXP_LAND_CRITERIA - number of initial land mass squares visible before 

# initial land mass exploration ends

# SAI_NUM_ADD_CITIES - city factor in adding air explorers

#

# General 'Onshore' and 'Offshore' Missions

# SAI_DIR_ASSAULT_PER - percentage of direct assult on target

# SAI_NUM_OFFSHORE_SUPP_REG - number offshore regular support

# SAI_NUM_OFFSHORE_SUPP_MAX - number of offshore maximum support

# SAI_NUM_NAVAL_SUPP_REG - number of navy support units

# SAI_NUM_NAVAL_SUPP_MAX - max number of navy support units

# SAI_LOSSES_RANGE - losses factor in deciding when to hold a tr for more units

# SAI_EVAL_START - counter to re-eval missions

#

# Neutral Capture

# SAI_UT_NEUT_CAP_ATT - units which can capture a neutral city type

# SAI_UT_NEUT_CAP_ATT4TR - units which can be staged for neutral attacks

# SAI_UT_NEUT_CAP_TR - transports that can carry neutral attackers

# SAI_NEUTRAL_OFFSHORE_LIMIT - limit of offshore neutral misisons

# SAI_NUM_NEUTRAL_ATTACKERS - number of neutral attackers per mission

# SAI_NEUT_TRANSPORTS_MAX - max number of trs used in a mission

# SAI_NEUT_TRANSPORTS_REG - regular number of TR's used in a mission

#

# Enemy Capture

# SAI_UT_ENEMY_CAP_ATT - units which can perform an enemy capture

# SAI_UT_ENEMY_CAP_ATT4TR - enemy capture units that can be staged

# SAI_UT_ENEMY_CAP_TR - transports for enemy capture units

# SAI_UT_ENEMY_CAP_AIR_SUPPORT - air support units for enemy captures

# SAI_UT_ENEMY_CAP_LAND_SUPPORT - land support units for enemy captures

# SAI_UT_ENEMY_CAP_SEA_SUPPORT - sea support units for enemy captures

# SAI_NUM_ENEMY_CAP_ATTACKERS - number of enemy capture attackers

# SAI_OFFSHORE_ENEMY_CAP_LIMIT - offshore enemy capture mission limit

# SAI_ENEMY_TRANSPORTS_MAX - max number of trs used in a mission

# SAI_ENEMY_TRANSPORTS_REG - regular number of TR's used in a mission

#

# Production Drain Considerations

# SAI_UT_PROD_HALT - unit types whose production can be cancelled in 

# the name of the drain

# SAI_UT_UNIT_DISBAND - unit types which can be disbanded in the name

# of the drain

# SAI_DRAIN_LIMIT - drain limiter used in various calculations

# SAI_PRESERVE_PROD - settings where production cannot be changed if 

# the number of turns under value

# SAI_PM_PROD_TOLERANCE - drain tolerance before no production is allowed

# SAI_PM_IDLE_TOLERANCE - used for disbanding units when over drain

# SAI_PM_EXTRA_PROD_TOLERANCE - used for determining when 'pares' can be produced

# SAI_SPARE_TYPES - ordered spare types list for production

#

# Various Unit Roles

# SAI_UT_SATELLITE - units to perform satellite roles

# SAI_UT_ROCKET - units to perform missile roles

# SAI_UT_NUKE - units to perform nuke roles

# SAI_UT_ENGINEER - units to perform engineering roles

# SAI_UT_SUPPLY - units to perform supply roles

# SAI_UT_RES_FAC - units to perform resource roles

# SAI_UT_PORTS - units to perform port roles

# SAI_UT_BASE - units to perform base roles

# SAI_UT_FORT - units to perform fort roles

#

# Carrier Groups

# SAI_UT_CARRIER - units to perform carrier roles

# SAI_UT_CARRIER_GROUP - units to be part of a carrier group

# SAI_UT_CARRIER_ESCORTS - units to perform escorting duties for carriers

# SAI_CARRIER_PORTAGE  - portage amount a carrier wants to carry

#

# Subs

# SAI_UT_SUBS - sub units

# SAI_UT_SUB_SURFACE surface sub units

# SAI_UT_SUB_SUBMERGED - submerged sub units

# SAI_UT_SUB_DEEP - deep sub units

# SAI_UT_SUB_TARGETS - sub targets

# SAI_SUBMERGE_TOLERANCE - rnage near sighting to submerge

# SAI_SUB_LURK_RANGE - lurk around sighting range

# SAI_SUB_STALK_COUNT - enemy notice range

# SAI_SUB_EVADE_COUNT - number of turns to hide when evading

# SAI_SUB_SURFACE_RANGE - range before a sub surfaces heading home

#

# Placement and Buypoint selection

# SAI_UT_SELECTION - what units to select on a map

# SAI_UT_PLACEMENT - where units can be placed

# SAI_BUYPOINT_TYPES - buypoint type buying list

#

# Misc Missions

# SAI_NEXT_CAP_PROD - units to produce in a capital

# SAI_NEXT_IMP_PROD - units to produce in an important city

# SAI_UT_CITY_RETAKE - units which can retake cities (when there are none owned)

# SAI_MAX_BASE_RANGE - maximum range from a city before a base is built

# SAI_MIN_BASE_RANGE - minimum range from a city before a base is built

# SAI_MISSION_REVIEW_FUDGE - factor that helps AI determine how many missions to 

# review, multiplied times his number of cities

#

# Misc Unit

# SAI_EVADE_DIST - distance to try to run if evading

# SAI_NEEDS_REPAIR - hits below which a unit needs repair

#

# Reactions

# SAI_THREAT_TOLERANCE - range at which a threat is acted on

# SAI_THREAT_EVAL_DISTANCE - max distance at which a threat can be acted upon

# SAI_THREAT_AGE - max sighting age that will spark a reaction

#

# Player Names

# SAI_PLAYER_NAMES - name list the AI uses when playing

#

#

# ROE - Rules of Engagement

# These are a list of rules that are evaluated IN ORDER. If a rule is true, the 

# action is returned. If none of the conditions are met, the default action is returned

# (The default - default action is no action).

#

# Conditions Codes

# LVL - level (string code value)

# (EQ and NE operators only apply)

# SB - sub

# GR - ground

# OF - overflight

# OB - orbital

# RE - reentry

#

# DIS - distance (numeric code value)

#

# RNG - attributes (string code value)

# FRNG - distance vs. range firing range

#

# DMG - value vs. current hits

#

# TYPE - unit type (string code value)

# (EQ and NE operators only apply)

#

# PLY - player type(string code value) 

# (EQ and NE operators only apply)

# NEUT - neutral

# MAN - human

# COMP - computer

#

# PEFF - production efficiency

#

# HOST - unit is cargo (bool string code T/F, operator code ignored)

# UNIT - unit has cargo (bool string code T/F, operator code ignored)

#

#

# Comparative Operators

# EQ equal

# NE not equal

# LT less than

# LE less than or equal to

# GT greater than

# GE greater than or equal to

#

# Actions

# NA - no action

# ME - move engage

# FE - fire engage

# EV - evade

#

# And or Or Value

# A - and is used

# O - or is used

#

# SAI_ROE - a rule of engagement

# ROE order Syntax for SAI_ROE:

# [<roe type>][<unit type>][(<And or Or Value>) <CONDITION SETS>][<Action>]

# Where CONDITONS SETS is any number of the following triplets

# (<condition code>)(<operator>)(<code value>)

#

# SAI_ROE_PRI - priority setting for encountering a type

# syntax: [<roe type>][<unit type>][<sight type>][<priority value>]

#

# SAI_ROE_DEF - default ROE when conditions don't apply

# syntax: [<roe type>][<unit type>][<action>]

(2 edits)

RoeConditionSet   C# file

HOSTED -  T or F

UNITS -  T or F   looking for unit number of if true

PEFF  -  looking for percentage/number

LEVEL  - ground/air/overflight/submerged

DMG  -  looking for number

RANGE   --> child process within range, FRANGE is prolly not a main process - meaning true or false will do nothing unless - under Range queries.

DIST - looking for number

TYPE -  looking for unit type like BB

PLAYER - Neutral, computer or player

--------------------------------------------------------

SAI_UT_CITY_RETAKE  - units which can retake cities (when there are none owned)

[SAI_UT_CITY_RETAKE][IN][AR][EN][BA][I7][I8][IG][IR][IS][P4][N8][GE]          

The General and other units are placed here so when all his cities have been captured he will attempt to capture any city.

-------------------------------------------------------

[ ]  Array set

( )  Conditional set

[SAI_ROE]  Rules Of Engagement

[SAI_ROE_PRI]  priority setting for encountering a type

[SAI_ROE_DEF]  default setting when conditions don't apply

[GE] General unit 

(GE)  greater than or equal to

(A)  and   All conditions must be true in order to work.

(O) or      Any condition must be true in order to work.

(T)  true

(F)  false

-------------------------------------------------------------------

(TYPE)(EQ)(TR)  Unit is transport

(PLY)(EQ)(MAN)  Human player

(PLY)(EQ)(COMP)  Computer player

(UNIT)(EQ)(T)  The unit is transporting another unit .

(HOST)(EQ)(T)  The unit is transported by another unit .

(DIS)(EQ)(1)  The unit is 1 space away.

(DIS)(GT)(7) The unit is 8 spaces away.

-----------------------------------------------------------------

The below conditions depend on the fifo principal.

First in first out. 

So place your conditions in an order that will give you optimum performance from the AI.

Once your sets of conditions are processed it will exit out on the priority set of conditions based on your logic.

Meaning if you want a sea or land or air transport considered first target then make it one of your preliminary lines.

It's best to get (LVL) out of the way first, then get all your [NA] doesn't apply to the General unit out of the way and followed by [EV] Evade a battleship for instance. 

By doing this you will quickly process out any units that the General cannot impact, units the General cannot be impacted by and Units too powerful that can harm the General.

Now this is the point of the script you want the AI to think like a human and attack priority targets. 

----------------------------------------------------------------

[SAI_ROE][GE][(A)(LVL)(NE)(OF)(LVL)(NE)(GR)][NA]    

 The above means: Air and Ground units to be only considered.

[SAI_ROE][GE][(A)(DIS)(GT)(1)][NA]  

If the distance of the enemy unit being processed is greater than 1 space to the General unit - ignore and move to next condition.

[SAI_ROE][GE][(O)(TYPE)(EQ)(T6)](TYPE)(EQ)(TR)(TYPE)(EQ)(T8)(TYPE)(EQ)(T9)][NA]

If  any of the sea transports are processed ignore them.

[SAI_ROE][GE][(O)(TYPE)(EQ)(FI)(TYPE)(EQ)(BO)(TYPE)(EQ)(F8)(TYPE)(EQ)(F4)(TYPE)(EQ)(F1)][EV]

If any attack aircraft are processed avoid and do not engage them.

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(MAN)(TYPE)(EQ)(TK)(UNIT)(EQ)(T)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][ME]

If unit is Truck & is human player & The truck is at least transporting 1 unit & is 1 space away then Melee attack it.

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(MAN)(TYPE)(EQ)(TK)(UNIT)(EQ)(F)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][FE]

If unit is Truck & is human player & The truck is not transporting any units & is 1 space away then Fire at it.

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(COMP)(TYPE)(EQ)(TK)(UNIT)(EQ)(T)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][ME]

If unit is Truck & is computer player & The truck is at least transporting 1 unit & is 1 space away then Melee attack it.

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(COMP)(TYPE)(EQ)(TK)(UNIT)(EQ)(F)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][FE]

If unit is Truck & is computer player & The truck is not transporting any units & is 1 space away then Fire at it.

[SAI_ROE][GE][(A)(TYPE)(EQ)(IN)(PLY)(EQ)(MAN)(TYPE)(EQ)(IN)(DIS)(EQ)(1)][FE]

If unit is Infantry & is human player & is 1 space away then Fire at it.

[SAI_ROE][GE][(A)(TYPE)(EQ)(IN)(PLY)(EQ)(COMP)(TYPE)(EQ)(IN)(DIS)(EQ)(1)][FE]

If unit is Infantry & is computer player & is 1 space away then Fire at it.

[SAI_ROE_PRI][GE][IN][50]

I think this means if 50 spaces away seek it out.

[SAI_ROE_DEF][GE][EV]

If the condition finally gets to this line, the General will try to evade contact.

----------------------------------------------------------------------------------------------------

Example of logic order:

My first priority for the General unit in this particular AI script for the WW2 mod is an Armored car, carrying a unit.  This is because it moves fast and could be carrying a recon infantry unit or General.

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(MAN)(TYPE)(EQ)(A1)(UNIT)(EQ)(T)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][ME]

So then the AI will focus primary priority on this especially if a human controls it. 

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(COMP)(TYPE)(EQ)(A1)(UNIT)(EQ)(T)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][ME]

Second priority is loaded armored car if computer controls it. 

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(MAN)(TYPE)(EQ)(A1)(UNIT)(EQ)(F)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][FE]

Third priority is an unloaded armored car controlled by a human.

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(COMP)(TYPE)(EQ)(A1)(UNIT)(EQ)(F)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][FE]

and the last priority set for armored car is empty and controlled by computer.

(There is no correct order as many different strategies can apply and and Armored car may not be the first priority within another AI script. Remember this only applies to the General and not all other units within this particular AI script. (Those other units are not shown to keep simplicity to a minimum.))

-----------------------------------------------------------------

Below is a complete set of conditions pertaining to the General.:

#////////////////////////////////////////////////

#    GE = General

#////////////////////////////////////////////////

[SAI_ROE][GE][(A)(LVL)(NE)(OF)(LVL)(NE)(GR)][NA]

[SAI_ROE][GE][(A)(DIS)(GT)(1)][NA]

[SAI_ROE][GE][(O)(TYPE)(EQ)(AT)](TYPE)(EQ)(F0)(TYPE)(EQ)(SU)(TYPE)(EQ)(SS)(TYPE)(EQ)(SD)(TYPE)(EQ)(X1)(TYPE)(EQ)(X2)(TYPE)(EQ)(X3)][NA]

[SAI_ROE][GE][(O)(TYPE)(EQ)(T6)](TYPE)(EQ)(TR)(TYPE)(EQ)(T8)(TYPE)(EQ)(T9)][NA]

[SAI_ROE][GE][(O)(TYPE)(EQ)(FI)(TYPE)(EQ)(BO)(TYPE)(EQ)(F8)(TYPE)(EQ)(F4)(TYPE)(EQ)(F1)][EV]

[SAI_ROE][GE][(O)(TYPE)(EQ)(CG)(TYPE)(EQ)(BB)(TYPE)(EQ)(S8)(TYPE)(EQ)(CR)(TYPE)(EQ)(S5)(TYPE)(EQ)(DE)(TYPE)(EQ)(S2)(TYPE)(EQ)(PB)(TYPE)(EQ)(AC)][EV]

[SAI_ROE][GE][(O)(TYPE)(EQ)(A2)(TYPE)(EQ)(AR)(TYPE)(EQ)(A4)(TYPE)(EQ)(A6)(TYPE)(EQ)(M2)(TYPE)(EQ)(CG)][NA]

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(MAN)(TYPE)(EQ)(A1)(UNIT)(EQ)(T)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(COMP)(TYPE)(EQ)(A1)(UNIT)(EQ)(T)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(MAN)(TYPE)(EQ)(A1)(UNIT)(EQ)(F)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(A1)(PLY)(EQ)(COMP)(TYPE)(EQ)(A1)(UNIT)(EQ)(F)(TYPE)(EQ)(A1)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V7)(PLY)(EQ)(MAN)(TYPE)(EQ)(V7)(UNIT)(EQ)(T)(TYPE)(EQ)(V7)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V7)(PLY)(EQ)(COMP)(TYPE)(EQ)(V7)(UNIT)(EQ)(T)(TYPE)(EQ)(V7)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V7)(PLY)(EQ)(MAN)(TYPE)(EQ)(V7)(UNIT)(EQ)(F)(TYPE)(EQ)(V7)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V7)(PLY)(EQ)(COMP)(TYPE)(EQ)(V7)(UNIT)(EQ)(F)(TYPE)(EQ)(V7)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(HA)(PLY)(EQ)(MAN)(TYPE)(EQ)(HA)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(HA)(PLY)(EQ)(COMP)(TYPE)(EQ)(HA)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(LA)(PLY)(EQ)(MAN)(TYPE)(EQ)(LA)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(LA)(PLY)(EQ)(COMP)(TYPE)(EQ)(LA)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(I8)(PLY)(EQ)(MAN)(TYPE)(EQ)(I8)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(I8)(PLY)(EQ)(COMP)(TYPE)(EQ)(I8)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(I7)(PLY)(EQ)(MAN)(TYPE)(EQ)(I7)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(I7)(PLY)(EQ)(COMP)(TYPE)(EQ)(I7)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(BA)(PLY)(EQ)(MAN)(TYPE)(EQ)(BA)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(BA)(PLY)(EQ)(COMP)(TYPE)(EQ)(BA)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IG)(PLY)(EQ)(MAN)(TYPE)(EQ)(IG)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IG)(PLY)(EQ)(COMP)(TYPE)(EQ)(IG)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IS)(PLY)(EQ)(MAN)(TYPE)(EQ)(IS)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IS)(PLY)(EQ)(COMP)(TYPE)(EQ)(IS)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IR)(PLY)(EQ)(MAN)(TYPE)(EQ)(IR)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IR)(PLY)(EQ)(COMP)(TYPE)(EQ)(IR)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(EN)(PLY)(EQ)(MAN)(TYPE)(EQ)(EN)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(EN)(PLY)(EQ)(COMP)(TYPE)(EQ)(EN)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(SB)(PLY)(EQ)(MAN)(TYPE)(EQ)(SB)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(SB)(PLY)(EQ)(COMP)(TYPE)(EQ)(SB)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(N8)(PLY)(EQ)(MAN)(TYPE)(EQ)(N8)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(N8)(PLY)(EQ)(COMP)(TYPE)(EQ)(N8)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(I2)(PLY)(EQ)(MAN)(TYPE)(EQ)(I2)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(I2)(PLY)(EQ)(COMP)(TYPE)(EQ)(I2)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IN)(PLY)(EQ)(MAN)(TYPE)(EQ)(IN)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(IN)(PLY)(EQ)(COMP)(TYPE)(EQ)(IN)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(ZD)(PLY)(EQ)(MAN)(TYPE)(EQ)(ZD)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(ZD)(PLY)(EQ)(COMP)(TYPE)(EQ)(ZD)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(M7)(PLY)(EQ)(MAN)(TYPE)(EQ)(M7)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(M7)(PLY)(EQ)(COMP)(TYPE)(EQ)(M7)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(M8)(PLY)(EQ)(MAN)(TYPE)(EQ)(M8)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(M8)(PLY)(EQ)(COMP)(TYPE)(EQ)(M8)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(P2)(PLY)(EQ)(MAN)(TYPE)(EQ)(P2)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(P2)(PLY)(EQ)(COMP)(TYPE)(EQ)(P2)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(P4)(PLY)(EQ)(MAN)(TYPE)(EQ)(P4)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(P4)(PLY)(EQ)(COMP)(TYPE)(EQ)(P4)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(P6)(PLY)(EQ)(MAN)(TYPE)(EQ)(P6)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(P6)(PLY)(EQ)(COMP)(TYPE)(EQ)(P6)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(ZC)(PLY)(EQ)(MAN)(TYPE)(EQ)(ZC)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(ZC)(PLY)(EQ)(COMP)(TYPE)(EQ)(ZC)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(ZG)(PLY)(EQ)(MAN)(TYPE)(EQ)(ZG)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(ZG)(PLY)(EQ)(COMP)(TYPE)(EQ)(ZG)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(AA)(PLY)(EQ)(MAN)(TYPE)(EQ)(AA)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(AA)(PLY)(EQ)(COMP)(TYPE)(EQ)(AA)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V4)(PLY)(EQ)(MAN)(TYPE)(EQ)(V4)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V4)(PLY)(EQ)(COMP)(TYPE)(EQ)(V4)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(MAN)(TYPE)(EQ)(TK)(UNIT)(EQ)(T)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(COMP)(TYPE)(EQ)(TK)(UNIT)(EQ)(T)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(MAN)(TYPE)(EQ)(TK)(UNIT)(EQ)(F)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(TK)(PLY)(EQ)(COMP)(TYPE)(EQ)(TK)(UNIT)(EQ)(F)(TYPE)(EQ)(TK)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V1)(PLY)(EQ)(MAN)(TYPE)(EQ)(V1)(UNIT)(EQ)(T)(TYPE)(EQ)(V1)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V1)(PLY)(EQ)(COMP)(TYPE)(EQ)(V1)(UNIT)(EQ)(T)(TYPE)(EQ)(V1)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V1)(PLY)(EQ)(MAN)(TYPE)(EQ)(V1)(UNIT)(EQ)(F)(TYPE)(EQ)(V1)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V1)(PLY)(EQ)(COMP)(TYPE)(EQ)(V1)(UNIT)(EQ)(F)(TYPE)(EQ)(V1)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V2)(PLY)(EQ)(MAN)(TYPE)(EQ)(V2)(UNIT)(EQ)(T)(TYPE)(EQ)(V2)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V2)(PLY)(EQ)(COMP)(TYPE)(EQ)(V2)(UNIT)(EQ)(T)(TYPE)(EQ)(V2)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V2)(PLY)(EQ)(MAN)(TYPE)(EQ)(V2)(UNIT)(EQ)(F)(TYPE)(EQ)(V2)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(V2)(PLY)(EQ)(COMP)(TYPE)(EQ)(V2)(UNIT)(EQ)(F)(TYPE)(EQ)(V2)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(GE)(PLY)(EQ)(MAN)(TYPE)(EQ)(GE)(UNIT)(EQ)(T)(TYPE)(EQ)(GE)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(GE)(PLY)(EQ)(COMP)(TYPE)(EQ)(GE)(UNIT)(EQ)(T)(TYPE)(EQ)(GE)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(GE)(PLY)(EQ)(MAN)(TYPE)(EQ)(GE)(UNIT)(EQ)(F)(TYPE)(EQ)(GE)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(GE)(PLY)(EQ)(COMP)(TYPE)(EQ)(GE)(UNIT)(EQ)(F)(TYPE)(EQ)(GE)(DIS)(EQ)(1)][FE]

[SAI_ROE][GE][(A)(TYPE)(EQ)(AB)(PLY)(EQ)(MAN)(TYPE)(EQ)(AB)(UNIT)(EQ)(T)(TYPE)(EQ)(AB)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(AB)(PLY)(EQ)(COMP)(TYPE)(EQ)(AB)(UNIT)(EQ)(T)(TYPE)(EQ)(AB)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(AB)(PLY)(EQ)(MAN)(TYPE)(EQ)(AB)(UNIT)(EQ)(F)(TYPE)(EQ)(AB)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(AB)(PLY)(EQ)(COMP)(TYPE)(EQ)(AB)(UNIT)(EQ)(F)(TYPE)(EQ)(AB)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(OF)(PLY)(EQ)(MAN)(TYPE)(EQ)(OF)(UNIT)(EQ)(T)(TYPE)(EQ)(OF)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(OF)(PLY)(EQ)(COMP)(TYPE)(EQ)(OF)(UNIT)(EQ)(T)(TYPE)(EQ)(OF)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(OF)(PLY)(EQ)(MAN)(TYPE)(EQ)(OF)(UNIT)(EQ)(F)(TYPE)(EQ)(OF)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(OF)(PLY)(EQ)(COMP)(TYPE)(EQ)(OF)(UNIT)(EQ)(F)(TYPE)(EQ)(OF)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(PT)(PLY)(EQ)(MAN)(TYPE)(EQ)(PT)(UNIT)(EQ)(T)(TYPE)(EQ)(PT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(PT)(PLY)(EQ)(COMP)(TYPE)(EQ)(PT)(UNIT)(EQ)(T)(TYPE)(EQ)(PT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(PT)(PLY)(EQ)(MAN)(TYPE)(EQ)(PT)(UNIT)(EQ)(F)(TYPE)(EQ)(PT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(PT)(PLY)(EQ)(COMP)(TYPE)(EQ)(PT)(UNIT)(EQ)(F)(TYPE)(EQ)(PT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(FT)(PLY)(EQ)(MAN)(TYPE)(EQ)(FT)(UNIT)(EQ)(T)(TYPE)(EQ)(FT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(FT)(PLY)(EQ)(COMP)(TYPE)(EQ)(FT)(UNIT)(EQ)(T)(TYPE)(EQ)(FT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(FT)(PLY)(EQ)(MAN)(TYPE)(EQ)(FT)(UNIT)(EQ)(F)(TYPE)(EQ)(FT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(FT)(PLY)(EQ)(COMP)(TYPE)(EQ)(FT)(UNIT)(EQ)(F)(TYPE)(EQ)(FT)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(CI)(PLY)(EQ)(MAN)(TYPE)(EQ)(CI)(UNIT)(EQ)(T)(TYPE)(EQ)(CI)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(CI)(PLY)(EQ)(COMP)(TYPE)(EQ)(CI)(UNIT)(EQ)(T)(TYPE)(EQ)(CI)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(CI)(PLY)(EQ)(MAN)(TYPE)(EQ)(CI)(UNIT)(EQ)(F)(TYPE)(EQ)(CI)(DIS)(EQ)(1)][ME]

[SAI_ROE][GE][(A)(TYPE)(EQ)(CI)(PLY)(EQ)(COMP)(TYPE)(EQ)(CI)(UNIT)(EQ)(F)(TYPE)(EQ)(CI)(DIS)(EQ)(1)][ME]

[SAI_ROE_PRI][GE][A1][50]

[SAI_ROE_PRI][GE][HA][50]

[SAI_ROE_PRI][GE][LA][50]

[SAI_ROE_PRI][GE][I8][50]

[SAI_ROE_PRI][GE][I7][50]

[SAI_ROE_PRI][GE][BA][50]

[SAI_ROE_PRI][GE][IG][50]

[SAI_ROE_PRI][GE][IS][50]

[SAI_ROE_PRI][GE][IR][50]

[SAI_ROE_PRI][GE][V7][50]

[SAI_ROE_PRI][GE][EN][50]

[SAI_ROE_PRI][GE][SB][50]

[SAI_ROE_PRI][GE][N8][50]

[SAI_ROE_PRI][GE][I2][50]

[SAI_ROE_PRI][GE][IN][50]

[SAI_ROE_PRI][GE][ZD][50]

[SAI_ROE_PRI][GE][M7][50]

[SAI_ROE_PRI][GE][M8][50]

[SAI_ROE_PRI][GE][P2][50]

[SAI_ROE_PRI][GE][P4][50]

[SAI_ROE_PRI][GE][P6][50]

[SAI_ROE_PRI][GE][ZC][50]

[SAI_ROE_PRI][GE][ZG][50]

[SAI_ROE_PRI][GE][AA][50]

[SAI_ROE_PRI][GE][V4][50]

[SAI_ROE_PRI][GE][TK][50]

[SAI_ROE_PRI][GE][V1][50]

[SAI_ROE_PRI][GE][V2][50]

[SAI_ROE_PRI][GE][GE][50]

[SAI_ROE_PRI][GE][AB][50]

[SAI_ROE_PRI][GE][OF][50]

[SAI_ROE_PRI][GE][PT][50]

[SAI_ROE_PRI][GE][FT][50]

[SAI_ROE_PRI][GE][CI][50]

[SAI_ROE_DEF][GE][EV]

#////////////////////////////////////////////////

Hello WW2_Weasel

I downloaded the WW2 DB beta. Wow so far really like it. The game play is engaging and the AI dynamic, Keep up the amazing work!!!

Can't wait for the real official one.

By the way thanks a for sharing the "how to" edit the AI script. I'm currently playing with it, Hot plenty of new insights and ideas.

Well done.

Thoba

(1 edit)

A word to modders:

The creation of a new more intensive AI script is time consuming and it requires a great deal of concentration. Not to mention a well crafted logic progression will help speed the in-game process.

A recommended way to approach the Creation of scripts is to work on one unit at a time in it's own encapsulated text editor. I would strongly suggest don't make edits within a complete AI script - this can lead to unintentional headaches.  When done with your units ROE conditions, copy all of the text and paste within the AI script.

One issue that commonly arises is the duplication of ROE lines.  

This result will cause your game to hang somewhere between game 90 to 300.

This is at the point the AI goes from Neutral capture to full blown expansion against others.

This is due to additional units being created and with this new production range, it will reveal the flaw that is your duplicated line(s) within the AI script and hang your game session..

If the game crashes it may more likely be a game engine issue.

However if your sloppy with AI ROE definitions then who knows what outcome you may get. Possibly the game session will not load.

Anyways, enough of the word to the wise. Go out there and have a blast making your own custom scripts.

CHECK_AI_SCRIPT


I've included a quick search for common typos in editing an AI script.

When your done editing your AI scripts run the below common typos this will help you quickly clean up your scripts of common errors.

Take these example lines:

[SAI_ROE   &   SAI_ROE]   this may end up being a tedious search - as all [SAI_ROE] will be processed, but it will be a quick wat yo step through your search.  Scrolling through "freehand" with a mouse may allow you to miss a typo.

[SAI_ROE[  this may get you accurately to all the typos with a missing "]".

Example: You would enter into your text editor:   [SAI_ROE[   then search for any anomalies and replace any if found.

(Sometimes these can be tedious and your mind can wander. Try and focus, before you know it, everything starts blending together.)  If you run the checks below, you will be certain of a cleaner script. It's what I use to double check my work.

Here is one set to be mindful of:

(GE)   Greater than or equal to

[GE]   The General unit

(*Caution*  There are words like RANGE, AGE, PORTAGE and ENGAGEMENT  that have GE in them,)

Below are many different typo generating mistakes I've encountered...

------------------------------------

Typical ROE condition specific check search for errors.

------------------------------------

))

((

[[

]]

SAI_ROE]       [SAI_ROE             [SAI_ROE[

SAI_ROE_PRI]       [SAI_ROE_PRI       [SAI_ROE_PRI[       [SAI_ROE_PRI[

SAI_ROE_DEF]       [SAI_ROE_DEF              [SAI_ROE_DEF[    

]ME]       ME]       [ME      [ME[

]FE]       FE]       [FE       [FE[       

]EV]       EV]       [EV      [EV[        

]NA]       NA]       [NA        [NA[      

]EQ)       EQ)       (EQ       (EQ(      

)TYPE)       TYPE)       (TYPE            (TYPE(  

)HOST)       HOST)       (HOST       (HOST(       

)PEFF)       PEFF)       (PEFF       (PEFF(       

)PLY)       PLY)       (PLY       (PLY(       

)NEUT)       NEUT)       (NEUT            (NEUT( 

)MAN)       MAN)       (MAN       (MAN(  

)COMP)       COMP)       (COMP       (COMP  

)DMG)       DMG)       (DMG       (DMG(  

)RNG)       RNG)       (RNG       (RNG(  

)LVL)       LVL)       (LVL       (LVL(  

)A)       A)       (A       (A(  

)O)       O)       (O       (O(  

)T)       T)       (T       (T(   

)F)       F)       (F       (F(  

)DIS)       DIS)       (DIS       (DIS(  

)UNIT)       UNIT)       (UNIT       (UNIT(  

)NE)       NE)       (NE       (NE( 

)LE)       LE)       (LE       (LE(  

)LT)       LT)       (LT       (LT(  

)GE)       GE)       (GE       (GE(  

)GT)       GT)       (GT       (GT(  

)SB)       SB)       (SB       (SB(  

)GR)       GR)       (GR       (GR(  

)OF)       OF)       (OF       (OF(  

)OB)       OB)       (OB       (OB(  

)RE)       RE)       (RE       (RE(  

------------------------------------

Standard AI unit name search. (Not default AI script?  Provide your own mod specific unit names.)

]GE]       GE]       [GE      [GE[ 

]IN]        [IN           IN]       [IN[  

]EN]       [EN        EN]       [EN[

]AR]       [AR       AR]       [AR[  

]FI]         [FI           FI]       [FI[  

]BO]       [BO       BO]       [BO[  

]AT]       [AT       AT]       [AT[  

]LA]       [LA       LA]       [LA[  

]HA]       [HA      HA]       [HA[  

]AA]       [AA       AA]       [AA[  

]TK]       [TK       TK]       [TK[  

]SB]       [SB         SB]       [SB[  

]PB]       [PB        PB]       [PB[  

]DE]       [DE       DE]       [DE[  

]CR]       [CR       CR]       [CR[    

]BB]       [BB        BB]       [BB[  

]AC]       [AC       AC]       [AC[  

]TR]       [TR       TR]       [TR[  

]SU]       [SU        SU]       [SU[  

]SS]       [SS         SS]       [SS[  

]SD]       [SD        SD]       [SD[  

]HE]       [HE       HE]       [HE[  

]SC]       [SC        SC]       [SC[  

]ST]       [ST        ST]       [ST[  

]PT]       [PT        PT]       [PT[  

]FT]       [FT        FT]       [FT[    

]CI]       [CI          CI]       [CI[    

]AB]       [AB       AB]       [AB[  

]OF]       [OF       OF]       [OF[    

]SP]       [SP        SP]       [SP[    

]SM]       [SM      SM]       [SM[    

]LM]       [LM    LM]       [LM[  

]SN]       [SN       SN]       [SN[  

]LN]       [LN      LN]       [LN[  

------------------------------------

(4 edits)

I've included a quick search for common typos in editing an AI script.

When your done editing your AI scripts run the below common typos this will help you quickly clean up your scripts of common errors.

Take these example lines:

[SAI_ROE   &   SAI_ROE]   this may end up being a tedious search - as all [SAI_ROE] will be processed, but it will be a quick way to step through your search.  Scrolling through "freehand" with a mouse may allow you to miss a typo.

[SAI_ROE[  this may get you accurately to all the typos with a missing "]".

Example: You would enter into your text editor:   [SAI_ROE[   then search for any anomalies and replace any if found.

(Sometimes these can be tedious and your mind can wander. Try and focus, before you know it, everything starts blending together.)  If you run the checks below, you will be certain of a cleaner script. It's what I use to double check my work.

Here is one set to be mindful of:

(GE)   Greater than or equal to

[GE]   The General unit

(*Caution*  There are words like RANGE, AGE, PORTAGE and ENGAGEMENT  that have GE in them,)

Below are many different typo generating mistakes I've encountered...

------------------------------------

Typical ROE condition specific check search for errors.

------------------------------------

))

((

[[

]]

SAI_ROE]       [SAI_ROE             [SAI_ROE[

SAI_ROE_PRI]       [SAI_ROE_PRI       [SAI_ROE_PRI[   

SAI_ROE_DEF]       [SAI_ROE_DEF         [SAI_ROE_DEF[    

]ME]       ME]       [ME      [ME[

]FE]       FE]       [FE       [FE[       

]EV]       EV]       [EV      [EV[        

]NA]       NA]       [NA        [NA[      

)EQ)       EQ)       (EQ       (EQ(      

)TYPE)       TYPE)       (TYPE            (TYPE(  

)HOST)       HOST)       (HOST       (HOST(       

)PEFF)       PEFF)       (PEFF       (PEFF(       

)PLY)       PLY)       (PLY       (PLY(       

)NEUT)       NEUT)       (NEUT            (NEUT( 

)MAN)       MAN)       (MAN       (MAN(  

)COMP)       COMP)       (COMP       (COMP  

)DMG)       DMG)       (DMG       (DMG(  

)RNG)       RNG)       (RNG       (RNG(  

)LVL)       LVL)       (LVL       (LVL(  

)A)       A)       (A       (A(  

)O)       O)       (O       (O(  

)T)       T)       (T       (T(   

)F)       F)       (F       (F(  

)DIS)       DIS)       (DIS       (DIS(  

)UNIT)       UNIT)       (UNIT       (UNIT(  

)NE)       NE)       (NE       (NE( 

)LE)       LE)       (LE       (LE(  

)LT)       LT)       (LT       (LT(  

)GE)       GE)       (GE       (GE(  

)GT)       GT)       (GT       (GT(  

)SB)       SB)       (SB       (SB(  

)GR)       GR)       (GR       (GR(  

)OF)       OF)       (OF       (OF(  

)OB)       OB)       (OB       (OB(  

)RE)       RE)       (RE       (RE(  

------------------------------------

Standard AI unit name search. (Not default AI script?  Provide your own mod specific unit names.)

]GE]       GE]       [GE      [GE[          (TYPE) (EQ) (GE)(TYPE) (EQ) (GE)

]IN]        [IN           IN]       [IN[          (TYPE) (EQ) (IN)(TYPE) (EQ) (IN)                                                                      

]EN]       [EN        EN]       [EN[         (TYPE) (EQ) (EN)(TYPE) (EQ) (EN)

]AR]       [AR       AR]       [AR[          (TYPE) (EQ) (AR)(TYPE) (EQ) (AR)

]FI]         [FI           FI]       [FI[           (TYPE) (EQ) (FI)(TYPE) (EQ) (FI)

]BO]       [BO       BO]       [BO[           (TYPE) (EQ) (BO)(TYPE) (EQ) (BO)

]AT]       [AT       AT]       [AT[           (TYPE) (EQ) (AT)(TYPE) (EQ) (AT)

]LA]       [LA       LA]       [LA[           (TYPE) (EQ) (LA)(TYPE) (EQ) (LA)

]HA]       [HA      HA]       [HA[           (TYPE) (EQ) (HA)(TYPE) (EQ) (HA)

]AA]       [AA       AA]       [AA[           (TYPE) (EQ) (AA)(TYPE) (EQ) (AA)

]TK]       [TK       TK]       [TK[           (TYPE) (EQ) (TK)(TYPE) (EQ) (TK)

]SB]       [SB         SB]       [SB[           (TYPE) (EQ) (SB)(TYPE) (EQ) (SB)

]PB]       [PB        PB]       [PB[           (TYPE) (EQ) (PB)(TYPE) (EQ) (PB)

]DE]       [DE       DE]       [DE[           (TYPE) (EQ) (DE)(TYPE) (EQ) (DE)

]CR]       [CR       CR]       [CR[             (TYPE) (EQ) (CR)(TYPE) (EQ) (CR)

]BB]       [BB        BB]       [BB[           (TYPE) (EQ) (BB)(TYPE) (EQ) (BB)

]AC]       [AC       AC]       [AC[           (TYPE) (EQ) (AC)(TYPE) (EQ) (AC)

]TR]       [TR       TR]       [TR[           (TYPE) (EQ) (TR)(TYPE) (EQ) (TR)

]SU]       [SU        SU]       [SU[           (TYPE) (EQ) (SU)(TYPE) (EQ) (SU)

]SS]       [SS         SS]       [SS[           (TYPE) (EQ) (SS)(TYPE) (EQ) (SS)

]SD]       [SD        SD]       [SD[           (TYPE) (EQ) (SD)(TYPE) (EQ) (SD)

]HE]       [HE       HE]       [HE[           (TYPE) (EQ) (HE)(TYPE) (EQ) (HE)

]SC]       [SC        SC]       [SC[           (TYPE) (EQ) (SC)(TYPE) (EQ) (SC)

]ST]       [ST        ST]       [ST[           (TYPE) (EQ) (ST)(TYPE) (EQ) (ST)

]PT]       [PT        PT]       [PT[           (TYPE) (EQ) (PT)(TYPE) (EQ) (PT)

]FT]       [FT        FT]       [FT[             (TYPE) (EQ) (FT)(TYPE) (EQ) (FT)

]CI]       [CI          CI]       [CI[             (TYPE) (EQ) (CI)(TYPE) (EQ) (CI)

]AB]       [AB       AB]       [AB[           (TYPE) (EQ) (AB)(TYPE) (EQ) (AB)

]OF]       [OF       OF]       [OF[             (TYPE) (EQ) (OF)(TYPE) (EQ) (OF)

]SP]       [SP        SP]       [SM[             (TYPE) (EQ) (SM)(TYPE) (EQ) (SM)

]SM]       [SM      SM]       [SM[             (TYPE) (EQ) (SM)(TYPE) (EQ) (SM)

]LM]       [LM    LM]       [LM[           (TYPE) (EQ) (LM)(TYPE) (EQ) (LM)

]SN]       [SN       SN]       [SN[           (TYPE) (EQ) (SN)(TYPE) (EQ) (SN)

]LN]       [LN      LN]       [LN[           (TYPE) (EQ) (LN)(TYPE) (EQ) (LN)

------------------------------------