590 lines
16 KiB
INI
590 lines
16 KiB
INI
#textdomain wesnoth
|
|
|
|
############################################################
|
|
# MODIFY_AI - ADD
|
|
############################################################
|
|
|
|
#define MODIFY_AI_ADD_ASPECT SIDE ASPECT_ID FACET_WML
|
|
# modify ai, add facet to an aspect
|
|
#
|
|
# example: {MODIFY_AI_ADD_ASPECT 1 aggression ([facet] id=always value=0.5 [/facet])}
|
|
# example: {MODIFY_AI_ADD_ASPECT 1 leader_goal ([facet] id=always [value]x=1 y=2[/value] [/facet])}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=add
|
|
path=aspect[{ASPECT_ID}].facet[]
|
|
{FACET_WML}
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_STAGE SIDE STAGE_WML
|
|
# modify ai, add stage
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=add
|
|
path=stage[]
|
|
{STAGE_WML}
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_GOAL SIDE GOAL_WML
|
|
# modify ai, add goal
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=add
|
|
path=goal[]
|
|
{GOAL_WML}
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_CANDIDATE_ACTION SIDE STAGE_ID CANDIDATE_ACTION_WML
|
|
# modify ai, add candidate action to a stage
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=add
|
|
path=stage[{STAGE_ID}].candidate_action[]
|
|
{CANDIDATE_ACTION_WML}
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
############################################################
|
|
# MODIFY_AI - DELETE
|
|
############################################################
|
|
|
|
#define MODIFY_AI_DELETE_ASPECT SIDE ASPECT_ID FACET_ID
|
|
# modify ai, delete facet from aspect
|
|
#
|
|
# example: {MODIFY_AI_DELETE_ASPECT 1 aggression night}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=delete
|
|
path=aspect[{ASPECT_ID}].facet[{FACET_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_DELETE_STAGE SIDE STAGE_ID
|
|
# modify ai, delete a stage
|
|
#
|
|
# example: {MODIFY_AI_DELETE_STAGE 1 fallback}
|
|
# example: {MODIFY_AI_DELETE_STAGE 1 3}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=delete
|
|
path=stage[{STAGE_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_DELETE_GOAL SIDE GOAL_ID
|
|
# modify ai, delete a goal
|
|
#
|
|
# example: {MODIFY_AI_DELETE_GOAL 1 kill_undead}
|
|
# example: {MODIFY_AI_DELETE_GOAL 1 0}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=delete
|
|
path=goal[{GOAL_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_DELETE_CANDIDATE_ACTION SIDE STAGE_ID CANDIDATE_ACTION_ID
|
|
# modify ai, delete candidate action from a stage
|
|
#
|
|
# example: {MODIFY_AI_DELETE_CANDIDATE_ACTION 1 main_loop special_poisoning_formula}
|
|
# example: {MODIFY_AI_DELETE_CANDIDATE_ACTION 1 main_loop 0}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=delete
|
|
path=stage[{STAGE_ID}].candidate_action[{CANDIDATE_ACTION_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
############################################################
|
|
# MODIFY_AI - TRY_DELETE
|
|
############################################################
|
|
|
|
#define MODIFY_AI_TRY_DELETE_ASPECT SIDE ASPECT_ID FACET_ID
|
|
# modify ai, delete facet from aspect
|
|
#
|
|
# example: {MODIFY_AI_TRY_DELETE_ASPECT 1 aggression night}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=try_delete
|
|
path=aspect[{ASPECT_ID}].facet[{FACET_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_TRY_DELETE_STAGE SIDE STAGE_ID
|
|
# modify ai, delete a stage
|
|
#
|
|
# example: {MODIFY_AI_TRY_DELETE_STAGE 1 fallback}
|
|
# example: {MODIFY_AI_TRY_DELETE_STAGE 1 3}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=try_delete
|
|
path=stage[{STAGE_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_TRY_DELETE_GOAL SIDE GOAL_ID
|
|
# modify ai, delete a goal
|
|
#
|
|
# example: {MODIFY_AI_TRY_DELETE_GOAL 1 kill_undead}
|
|
# example: {MODIFY_AI_TRY_DELETE_GOAL 2 *}
|
|
# example: {MODIFY_AI_TRY_DELETE_GOAL 3 0}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=try_delete
|
|
path=goal[{GOAL_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
#define MODIFY_AI_TRY_DELETE_CANDIDATE_ACTION SIDE STAGE_ID CANDIDATE_ACTION_ID
|
|
# modify ai, delete candidate action from a stage
|
|
#
|
|
# example: {MODIFY_AI_TRY_DELETE_CANDIDATE_ACTION 1 main_loop special_poisoning_formula}
|
|
# example: {MODIFY_AI_TRY_DELETE_CANDIDATE_ACTION 1 main_loop 0}
|
|
|
|
[modify_ai]
|
|
side={SIDE}
|
|
action=try_delete
|
|
path=stage[{STAGE_ID}].candidate_action[{CANDIDATE_ACTION_ID}]
|
|
[/modify_ai]
|
|
#enddef
|
|
|
|
############################################################
|
|
# ASPECTS - DECLARATION
|
|
############################################################
|
|
|
|
#define AI_ASPECT ASPECT_ID FACET_WML
|
|
#macro to define a named facet of ai aspect
|
|
[aspect]
|
|
id={ASPECT_ID}
|
|
{FACET_WML}
|
|
[/aspect]
|
|
#enddef
|
|
|
|
############################################################
|
|
# ASPECTS - SIMPLE - DECLARATION (NO PREAMBLE NEEDED)
|
|
############################################################
|
|
# note: simple aspects are supposed to be used without a preamble
|
|
|
|
#define AI_SIMPLE_ASPECT ASPECT_ID FACET_ID VALUE
|
|
# simple aspect with value=VALUE
|
|
|
|
{AI_ASPECT {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
value={VALUE}
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_ALWAYS_ASPECT ASPECT_ID VALUE
|
|
# simple aspect which is always active
|
|
|
|
{AI_SIMPLE_ASPECT {ASPECT_ID} "always" {VALUE}}
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY ASPECT_ID FACET_ID TIMEOFDAY_VALUE VALUE
|
|
# simple aspect which is active during a specified time of day
|
|
|
|
{AI_ASPECT {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
value={VALUE}
|
|
time_of_day={TIMEOFDAY_VALUE}
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_NIGHT_ASPECT ASPECT_ID VALUE
|
|
# simple aspect which is active during the night
|
|
|
|
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_DAY_ASPECT ASPECT_ID VALUE
|
|
# simple aspect which is active during the day
|
|
|
|
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_ASPECT_VALUE ASPECT_ID FACET_ID VALUE
|
|
# simple aspect
|
|
|
|
{AI_ASPECT {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
[value]
|
|
{VALUE}
|
|
[/value]
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_ALWAYS_ASPECT_VALUE ASPECT_ID VALUE
|
|
# simple aspect which is always active
|
|
|
|
{AI_SIMPLE_ASPECT_VALUE {ASPECT_ID} "always" {VALUE}}
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE ASPECT_ID FACET_ID TIMEOFDAY_VALUE VALUE
|
|
# simple aspect which is active during a specified time of day
|
|
|
|
{AI_ASPECT {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
[value]
|
|
{VALUE}
|
|
[/value]
|
|
time_of_day={TIMEOFDAY_VALUE}
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_NIGHT_ASPECT_VALUE ASPECT_ID VALUE
|
|
# simple aspect which is active during the night
|
|
|
|
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
|
#enddef
|
|
|
|
#define AI_SIMPLE_DAY_ASPECT_VALUE ASPECT_ID VALUE
|
|
# simple aspect which is active during the day
|
|
|
|
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
|
#enddef
|
|
|
|
############################################################
|
|
# ASPECTS - SIMPLE - ADD (NO PREAMBLE NEEDED)
|
|
############################################################
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_ASPECT SIDE ASPECT_ID FACET_ID VALUE
|
|
# modify ai, add simple facet to an aspect
|
|
|
|
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
value={VALUE}
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_ALWAYS_ASPECT SIDE ASPECT_ID VALUE
|
|
# modify ai, add simple aspect which is always active
|
|
|
|
{MODIFY_AI_ADD_SIMPLE_ASPECT {SIDE} {ASPECT_ID} "always" {VALUE}}
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY SIDE ASPECT_ID FACET_ID TIMEOFDAY_VALUE VALUE
|
|
# modify ai, add simple aspect which is active during a specified time of day
|
|
|
|
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
value={VALUE}
|
|
time_of_day={TIMEOFDAY_VALUE}
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_NIGHT_ASPECT SIDE ASPECT_ID VALUE
|
|
# modify ai, add simple aspect which is active during the night
|
|
|
|
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY {SIDE} {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_DAY_ASPECT SIDE ASPECT_ID VALUE
|
|
# modify ai, add simple aspect which is active during the day
|
|
|
|
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY {SIDE} {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_ASPECT_VALUE SIDE ASPECT_ID FACET_ID VALUE
|
|
# modify ai, add simple facet to an aspect
|
|
|
|
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
[value]
|
|
{VALUE}
|
|
[/value]
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_ALWAYS_ASPECT_VALUE SIDE ASPECT_ID VALUE
|
|
# modify ai, add simple aspect which is always active
|
|
|
|
{MODIFY_AI_ADD_SIMPLE_ASPECT_VALUE {SIDE} {ASPECT_ID} "always" {VALUE}}
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE SIDE ASPECT_ID FACET_ID TIMEOFDAY_VALUE VALUE
|
|
# modify ai, add simple aspect which is active during a specified time of day
|
|
|
|
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
|
(
|
|
[facet]
|
|
id={FACET_ID}
|
|
[value]
|
|
{VALUE}
|
|
[/value]
|
|
time_of_day={TIMEOFDAY_VALUE}
|
|
[/facet]
|
|
)}
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_NIGHT_ASPECT_VALUE SIDE ASPECT_ID VALUE
|
|
# modify ai, add simple aspect which is active during the night
|
|
|
|
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {SIDE} {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
|
#enddef
|
|
|
|
#define MODIFY_AI_ADD_SIMPLE_DAY_ASPECT_VALUE SIDE ASPECT_ID VALUE
|
|
# modify ai, add simple aspect which is active during the day
|
|
|
|
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {SIDE} {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
|
#enddef
|
|
|
|
#define AI_NO_SCOUTS
|
|
# make the AI team not recruit scouts.
|
|
|
|
{AI_SIMPLE_ALWAYS_ASPECT villages_per_scout 0}
|
|
#enddef
|
|
|
|
#define AI_NEW_SYNTAX
|
|
# use stable 1.8 ai syntax
|
|
# Deprecated; no longer does anything
|
|
#enddef
|
|
|
|
#define AI_SCALE_ATTACK_DEPTH_BY_DIFFICULTY
|
|
#deprecated 3 1.17 The attack_depth aspect has no effect on the AI any more.
|
|
#enddef
|
|
|
|
############################################################
|
|
# RECRUITMENT ASPECTS
|
|
############################################################
|
|
|
|
#define AI_DEACTIVATE_SAVE_GOLD
|
|
# disable aspect recruitment_save_gold
|
|
[facet]
|
|
id="always"
|
|
[value]
|
|
active=0
|
|
[/value]
|
|
[/facet]
|
|
#enddef
|
|
|
|
#define AI_NO_RECRUITMENT
|
|
# disable recruitment
|
|
[facet]
|
|
id="always"
|
|
[value]
|
|
[recruit]
|
|
importance=1
|
|
number=0
|
|
[/recruit]
|
|
[/value]
|
|
[/facet]
|
|
#enddef
|
|
|
|
#define AI_SAVE_GOLD ACTIVE BEGIN END
|
|
# Enable AI recruitment gold saving.
|
|
# ACTIVE: turn from which on gold saving will be active
|
|
# BEGIN: begin gold saving when unit cost ratio rises above this value
|
|
# END: end gold saving when unit cost ratio drops below this value
|
|
# This goes directly into the [ai] tag.
|
|
|
|
[aspect]
|
|
id=recruitment_save_gold
|
|
[facet]
|
|
[value]
|
|
active={ACTIVE}
|
|
begin={BEGIN}
|
|
end={END}
|
|
[/value]
|
|
[/facet]
|
|
[/aspect]
|
|
#enddef
|
|
|
|
#define AI_SAVE_GOLD_DEFAULT
|
|
# Enable AI recruitment gold saving with values set
|
|
# to what was the default in Wesnoth 1.11.7 and 1.11.8.
|
|
# This goes directly into the [ai] tag.
|
|
|
|
{AI_SAVE_GOLD 2 1.5 1.1}
|
|
#enddef
|
|
|
|
############################################################
|
|
# NEW FORMULA_AI RECRUITMENT BY Dragonking (experimental!)
|
|
############################################################
|
|
|
|
#define AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT
|
|
[stage]
|
|
engine=fai
|
|
name=side_formulas
|
|
move="{ai/formula/new_recruitment.fai}"
|
|
[/stage]
|
|
#enddef
|
|
|
|
############################################################
|
|
# CANDIDATE_ACTIONS
|
|
############################################################
|
|
|
|
############################################################
|
|
# LEADER GOALS ( aspect[leader_goal] )
|
|
############################################################
|
|
|
|
####
|
|
# internal macro
|
|
#
|
|
#define _AI_ASPECT_LEADER_GOAL_MOVE_TO X Y AUTOREMOVE_VALUE
|
|
|
|
[facet]
|
|
id="always"
|
|
[value]
|
|
id="always"
|
|
x={X}
|
|
y={Y}
|
|
auto_remove={AUTOREMOVE_VALUE}
|
|
[/value]
|
|
[/facet]
|
|
#enddef
|
|
|
|
####
|
|
# internal macro
|
|
#
|
|
#define _AI_ASPECT_LEADER_GOAL_RISKY_MOVE_TO X Y AUTOREMOVE_VALUE
|
|
|
|
[facet]
|
|
id="always"
|
|
[value]
|
|
id="always"
|
|
x={X}
|
|
y={Y}
|
|
max_risk=10000
|
|
auto_remove={AUTOREMOVE_VALUE}
|
|
[/value]
|
|
[/facet]
|
|
#enddef
|
|
|
|
#define AI_ASPECT_LEADER_GOAL_MOVE_TO X Y
|
|
# leader goal: move to X Y and be free
|
|
|
|
{_AI_ASPECT_LEADER_GOAL_MOVE_TO {X} {Y} "yes"}
|
|
#enddef
|
|
|
|
#define AI_ASPECT_LEADER_GOAL_MOVE_TO_AND_STAY_THERE X Y
|
|
# leader goal: move to X Y and stay there
|
|
|
|
{_AI_ASPECT_LEADER_GOAL_MOVE_TO {X} {Y} "no"}
|
|
#enddef
|
|
|
|
#define CLEAR_AI_ALWAYS_ASPECT_LEADER_GOAL SIDE
|
|
# clear AI leader goal "always"
|
|
|
|
{MODIFY_AI_DELETE_ASPECT {SIDE} leader_goal always}
|
|
#enddef
|
|
|
|
#define AI_ASPECT_LEADER_GOAL_RISKY_MOVE_TO X Y
|
|
# leader goal: move to X Y and be free
|
|
|
|
{_AI_ASPECT_LEADER_GOAL_RISKY_MOVE_TO {X} {Y} "yes"}
|
|
#enddef
|
|
|
|
#define AI_ASPECT_LEADER_GOAL_RISKY_MOVE_TO_AND_STAY_THERE X Y
|
|
# leader goal: move to X Y and stay there
|
|
|
|
{_AI_ASPECT_LEADER_GOAL_RISKY_MOVE_TO {X} {Y} "no"}
|
|
#enddef
|
|
|
|
############################################################
|
|
# EXPERIMENTAL AI
|
|
############################################################
|
|
|
|
#define EXPERIMENTAL_AI
|
|
#deprecated 2 1.15 Use ai_algorithm=experimental_ai in the [ai] tag instead
|
|
|
|
# Note: The Experimental AI and the default AI are currently almost identical.
|
|
# This is a placeholder for future development.
|
|
|
|
# Put this into the [side][ai] tag.
|
|
# Does not work in [modify_side][ai] or [modify_ai] at the moment.
|
|
[stage]
|
|
id=main_loop
|
|
name=ai_default_rca::candidate_action_evaluation_loop
|
|
{AI_CA_GOTO}
|
|
{AI_CA_RECRUIT_RUSHERS}
|
|
{AI_CA_CASTLE_SWITCH}
|
|
{AI_CA_RETREAT_INJURED}
|
|
{AI_CA_GRAB_VILLAGES}
|
|
{AI_CA_SPREAD_POISON}
|
|
#{AI_CA_RECRUITMENT}
|
|
{AI_CA_MOVE_LEADER_TO_GOALS}
|
|
{AI_CA_MOVE_LEADER_TO_KEEP}
|
|
{AI_CA_HIGH_XP_ATTACK}
|
|
{AI_CA_COMBAT}
|
|
{AI_CA_PLACE_HEALERS}
|
|
{AI_CA_HEALING}
|
|
#{AI_CA_VILLAGES}
|
|
{AI_CA_MOVE_TO_TARGETS}
|
|
{AI_CA_LEADER_SHARES_KEEP}
|
|
{AI_CA_MOVE_TO_ANY_ENEMY}
|
|
[/stage]
|
|
#enddef
|
|
|
|
#define CUSTOMIZABLE_EXPERIMENTAL_AI ARGS
|
|
# Note: The Experimental AI and the default AI are currently almost identical.
|
|
# However, this macro allows the use of custom parameters.
|
|
|
|
# Use the Experimental AI with custom parameter setting
|
|
# Put this into the [side][ai] tag.
|
|
# Does not work in [modify_side][ai] or [modify_ai] at the moment.
|
|
[stage]
|
|
id=main_loop
|
|
name=ai_default_rca::candidate_action_evaluation_loop
|
|
{AI_CA_GOTO}
|
|
[candidate_action]
|
|
engine=lua
|
|
id=recruit_rushers
|
|
name=recruit_rushers
|
|
max_score=196000
|
|
location="ai/lua/ca_recruit_rushers.lua"
|
|
[args]
|
|
{ARGS}
|
|
[/args]
|
|
[/candidate_action]
|
|
{AI_CA_CASTLE_SWITCH}
|
|
{AI_CA_RETREAT_INJURED}
|
|
{AI_CA_GRAB_VILLAGES}
|
|
{AI_CA_SPREAD_POISON}
|
|
#{AI_CA_RECRUITMENT}
|
|
{AI_CA_MOVE_LEADER_TO_GOALS}
|
|
{AI_CA_MOVE_LEADER_TO_KEEP}
|
|
{AI_CA_HIGH_XP_ATTACK}
|
|
{AI_CA_COMBAT}
|
|
{AI_CA_PLACE_HEALERS}
|
|
{AI_CA_HEALING}
|
|
#{AI_CA_VILLAGES}
|
|
{AI_CA_MOVE_TO_TARGETS}
|
|
{AI_CA_LEADER_SHARES_KEEP}
|
|
{AI_CA_MOVE_TO_ANY_ENEMY}
|
|
[/stage]
|
|
#enddef
|