diff --git a/data/ai/lua/ca_recruit_rushers.lua b/data/ai/lua/ca_recruit_rushers.lua index dab29ef6c3e8..0de320af1360 100644 --- a/data/ai/lua/ca_recruit_rushers.lua +++ b/data/ai/lua/ca_recruit_rushers.lua @@ -35,6 +35,7 @@ wesnoth.require("ai/lua/generic_recruit_engine.lua").init(dummy_engine, params) local ca_recruit_rushers = {} function ca_recruit_rushers:evaluation(cfg, data) + params.high_level_fraction = cfg.high_level_fraction return dummy_engine:recruit_rushers_eval() end diff --git a/data/ai/lua/generic_recruit_engine.lua b/data/ai/lua/generic_recruit_engine.lua index e7e7f201d735..cfa9df49eab3 100644 --- a/data/ai/lua/generic_recruit_engine.lua +++ b/data/ai/lua/generic_recruit_engine.lua @@ -785,7 +785,7 @@ return { local randomness = params.randomness or 0.1 -- Bonus for higher-level units, as unit cost is penalized otherwise - local high_level_fraction = 0.33 + local high_level_fraction = params.high_level_fraction or 0 local all_units = AH.get_live_units { side = wesnoth.current.side, { "not", { canrecruit = "yes" }} diff --git a/data/ai/micro_ais/cas/ca_recruit_rushers.lua b/data/ai/micro_ais/cas/ca_recruit_rushers.lua index 480027290aa8..6425fed97083 100644 --- a/data/ai/micro_ais/cas/ca_recruit_rushers.lua +++ b/data/ai/micro_ais/cas/ca_recruit_rushers.lua @@ -9,6 +9,7 @@ wesnoth.require("ai/lua/generic_recruit_engine.lua").init(internal_recruit_cas, local ca_recruit_rushers = {} function ca_recruit_rushers:evaluation(cfg) + internal_params.high_level_fraction = cfg.high_level_fraction internal_params.randomness = cfg.randomness internal_params.score_function = function() return cfg.ca_score end return internal_recruit_cas:recruit_rushers_eval() diff --git a/data/ai/micro_ais/mai-defs/recruiting.lua b/data/ai/micro_ais/mai-defs/recruiting.lua index e9e63c570bdf..450dec2b714c 100644 --- a/data/ai/micro_ais/mai-defs/recruiting.lua +++ b/data/ai/micro_ais/mai-defs/recruiting.lua @@ -18,7 +18,7 @@ local function handle_default_recruitment(cfg) end function wesnoth.micro_ais.recruit_rushers(cfg) - local optional_keys = { "randomness" } + local optional_keys = { "high_level_fraction", "randomness" } local CA_parms = { ai_id = 'mai_rusher_recruit', { ca_id = "move", location = 'ca_recruit_rushers.lua', score = cfg.ca_score or 180000 } diff --git a/data/core/macros/ai.cfg b/data/core/macros/ai.cfg index 4aed54c43b51..ed2c4520e538 100644 --- a/data/core/macros/ai.cfg +++ b/data/core/macros/ai.cfg @@ -590,3 +590,75 @@ [/candidate_action] [/stage] #enddef + +#define CUSTOMIZABLE_EXPERIMENTAL_AI ARGS + # 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} + #{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_HEALING} + {AI_CA_VILLAGES} + {AI_CA_RETREAT} + {AI_CA_MOVE_TO_TARGETS} + {AI_CA_LEADER_SHARES_KEEP} + [candidate_action] + engine=lua + name=recruit_rushers + max_score=300000 + location="ai/lua/ca_recruit_rushers.lua" + [args] + {ARGS} + [/args] + [/candidate_action] + [candidate_action] + engine=lua + name=switch_castle + max_score=290000 + location="ai/lua/ca_castle_switch.lua" + [/candidate_action] + [candidate_action] + engine=lua + name=retreat_injured + max_score=205000 + location="ai/lua/ca_retreat_injured.lua" + [/candidate_action] + [candidate_action] + engine=lua + name=grab_villages + max_score=200000 + location="ai/lua/ca_grab_villages.lua" + [/candidate_action] + [candidate_action] + engine=lua + name=spread_poison + max_score=190000 + location="ai/lua/ca_spread_poison.lua" + [/candidate_action] + [candidate_action] + engine=lua + name=place_healers + max_score=95000 + location="ai/lua/ca_place_healers.lua" + [/candidate_action] + [candidate_action] + engine=lua + name=village_hunt + max_score=30000 + location="ai/lua/ca_village_hunt.lua" + [/candidate_action] + [candidate_action] + engine=lua + name=move_to_any_enemy + max_score=1 + location="ai/lua/ca_move_to_any_enemy.lua" + [/candidate_action] + [/stage] +#enddef