From a2c30ea665695d6710a5641ac374d93d94423ad8 Mon Sep 17 00:00:00 2001 From: mattsc Date: Sat, 17 Nov 2018 18:46:06 -0800 Subject: [PATCH] AI configuration: new optional parameter mp_rank= This parameter determines in which order the available AIs are shown in the MP computer player selection menu. This can be used for eras, modifications or cores to change which AI is first in the list. --- data/ai/ais/ai_default_rca.cfg | 1 + data/ai/ais/ai_generic_rush.cfg | 1 + data/ai/dev/ai_default_rca_alternate_recruiting.cfg | 1 + data/ai/dev/formula_ai.cfg | 1 + data/ai/dev/formula_ai_poisoning.cfg | 1 + src/ai/configuration.cpp | 9 +++++++++ src/ai/configuration.hpp | 2 ++ 7 files changed, 16 insertions(+) diff --git a/data/ai/ais/ai_default_rca.cfg b/data/ai/ais/ai_default_rca.cfg index 8b6c883328e1..6e7d4afea862 100644 --- a/data/ai/ais/ai_default_rca.cfg +++ b/data/ai/ais/ai_default_rca.cfg @@ -8,6 +8,7 @@ id=ai_default_rca description=_"Multiplayer_AI^Default AI (RCA)" # wmllint: no spellcheck # RCA := Register Candidate Action; more info at https://forums.wesnoth.org/viewtopic.php?p=419625#p419625 + mp_rank=1010 [stage] id=main_loop name=ai_default_rca::candidate_action_evaluation_loop diff --git a/data/ai/ais/ai_generic_rush.cfg b/data/ai/ais/ai_generic_rush.cfg index ab8ce9da4215..56a7703aee29 100644 --- a/data/ai/ais/ai_generic_rush.cfg +++ b/data/ai/ais/ai_generic_rush.cfg @@ -8,5 +8,6 @@ [ai] id=experimental_ai description=_"Multiplayer_AI^Experimental AI" # wmllint: no spellcheck + mp_rank=1000 {EXPERIMENTAL_AI} [/ai] diff --git a/data/ai/dev/ai_default_rca_alternate_recruiting.cfg b/data/ai/dev/ai_default_rca_alternate_recruiting.cfg index 88a094475b2b..c7563cb99c30 100644 --- a/data/ai/dev/ai_default_rca_alternate_recruiting.cfg +++ b/data/ai/dev/ai_default_rca_alternate_recruiting.cfg @@ -9,6 +9,7 @@ id=ai_default_rca_alternate_recruiting description=_"Multiplayer_AI^Dev AI: Default AI (RCA) with Alternate Recruiting" # wmllint: no spellcheck # RCA := Register Candidate Action; more info at https://forums.wesnoth.org/viewtopic.php?p=419625#p419625 + mp_rank=100 [stage] id=main_loop name=ai_default_rca::candidate_action_evaluation_loop diff --git a/data/ai/dev/formula_ai.cfg b/data/ai/dev/formula_ai.cfg index 1ffe68eafb57..09b2e3d5e1cc 100644 --- a/data/ai/dev/formula_ai.cfg +++ b/data/ai/dev/formula_ai.cfg @@ -8,6 +8,7 @@ [ai] id=formula_ai # id is needed to uniquely identify a MP AI, it is not needed in the scenario AI description=_"Multiplayer_AI^Dev AI: Default + Experimental Recruitment (Formula AI)" # wmllint: no spellcheck + mp_rank=100 # this description is, again, needed for MP AI (it shows in AI list under this description [stage] diff --git a/data/ai/dev/formula_ai_poisoning.cfg b/data/ai/dev/formula_ai_poisoning.cfg index 0a6599d5f290..de9fe810e36e 100644 --- a/data/ai/dev/formula_ai_poisoning.cfg +++ b/data/ai/dev/formula_ai_poisoning.cfg @@ -7,6 +7,7 @@ [ai] id=formula_ai_poisoning description=_"Multiplayer_AI^Dev AI: Default + Poisoning (Formula AI)" # wmllint: no spellcheck + mp_rank=100 [stage] id=main_loop name=ai_default_rca::candidate_action_evaluation_loop diff --git a/src/ai/configuration.cpp b/src/ai/configuration.cpp index 9fc75ad41606..819d85410374 100644 --- a/src/ai/configuration.cpp +++ b/src/ai/configuration.cpp @@ -69,6 +69,7 @@ void configuration::init(const config &game_config) description desc; desc.id=id; + desc.mp_rank=ai_configuration["mp_rank"].to_int(0); desc.text = ai_configuration["description"].t_str(); desc.cfg=ai_configuration; @@ -95,6 +96,7 @@ void extract_ai_configurations(std::map &storage, cons description desc; desc.id=id; desc.text = ai_configuration["description"].t_str(); + desc.mp_rank = ai_configuration["mp_rank"].to_int(0); desc.cfg=ai_configuration; storage.emplace(id, desc); @@ -143,6 +145,13 @@ std::vector configuration::get_available_ais() add_if_not_hidden(&m_config.second); } + // Sort by mp_rank. For same mp_rank, keep alphabetical order. + std::stable_sort(ais_list.begin(), ais_list.end(), + [](const description* a, const description* b) { + return a->mp_rank > b->mp_rank; + } + ); + return ais_list; } diff --git a/src/ai/configuration.hpp b/src/ai/configuration.hpp index b69b13dd0770..4c8e8f45a42b 100644 --- a/src/ai/configuration.hpp +++ b/src/ai/configuration.hpp @@ -46,12 +46,14 @@ struct description { description() : text() , id() + , mp_rank() , cfg() { } t_string text; std::string id; + int mp_rank; config cfg; };