#define AI_ASPECT_KEY NAME TYPE {SIMPLE_KEY {NAME} {TYPE}} [tag] name={NAME} {SIMPLE_KEY value {TYPE}} {SIMPLE_KEY id string} {SIMPLE_KEY engine string} {AI_ASPECT_FILTERS} {AI_ASPECT_INVALIDATE} [/tag] #enddef #define AI_ASPECT_TAG NAME [tag] name={NAME} [if] [value] [/value] [then] {SIMPLE_KEY id string} {SIMPLE_KEY engine string} {AI_ASPECT_FILTERS} {AI_ASPECT_INVALIDATE} [tag] name="value" super="$ai/standard_aspect~{NAME}/value" [/tag] [/then] [else] super="$ai/standard_aspect~{NAME}/value" [/else] [/if] [/tag] #enddef # Filter keys for simple aspects {AI_ASPECT_FILTERS} {SIMPLE_KEY engine string} # Simple scalar aspects {AI_ASPECT_KEY aggression s_real} {AI_ASPECT_KEY allow_ally_villages s_bool} {AI_ASPECT_KEY caution s_real} {AI_ASPECT_KEY grouping ai_grouping} {AI_ASPECT_KEY leader_aggression s_real} {AI_ASPECT_KEY leader_ignores_keep s_bool} {AI_ASPECT_KEY leader_value s_real} {AI_ASPECT_KEY passive_leader s_bool} {AI_ASPECT_KEY passive_leader_shares_keep s_bool} {AI_ASPECT_KEY recruitment_diversity s_real} {AI_ASPECT_KEY recruitment_randomness s_int} {AI_ASPECT_KEY retreat_enemy_weight s_real} {AI_ASPECT_KEY retreat_factor s_real} {AI_ASPECT_KEY scout_village_targeting s_real} {AI_ASPECT_KEY simple_targeting s_bool} {AI_ASPECT_KEY support_villages s_bool} {AI_ASPECT_KEY village_value s_real} {AI_ASPECT_KEY villages_per_scout s_int} {AI_ASPECT_KEY advancements string_list} {AI_ASPECT_KEY recruitment_more string_list} {AI_ASPECT_KEY recruitment_pattern string_list} # Simple non-scalar aspects {AI_ASPECT_TAG leader_goal} {AI_ASPECT_TAG recruitment_instructions} {AI_ASPECT_TAG recruitment_save_gold} {AI_ASPECT_TAG avoid} # Attacks is nice in that it doesn't have the doubly-simplified form! [tag] name="attacks" super="$ai/standard_aspect~attacks" [/tag]