aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/misc
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2024-09-19 00:07:28 +0200
committer hop311 <hop3114@gmail.com>2024-09-19 00:07:28 +0200
commit5550b237fa9b6f8c6a86eea0de9d32e28a626dc7 (patch)
treeed4e867e2c099b027da2e2205b99575edae7b561 /src/openvic-simulation/misc
parentf0814926f675d6ecf889d8add410b1c37f625b29 (diff)
ModifierEffect and Rule localisation keysrule-modifier-locale-keys
Diffstat (limited to 'src/openvic-simulation/misc')
-rw-r--r--src/openvic-simulation/misc/Modifier.cpp249
-rw-r--r--src/openvic-simulation/misc/Modifier.hpp8
2 files changed, 177 insertions, 80 deletions
diff --git a/src/openvic-simulation/misc/Modifier.cpp b/src/openvic-simulation/misc/Modifier.cpp
index 9163af5..e201fdd 100644
--- a/src/openvic-simulation/misc/Modifier.cpp
+++ b/src/openvic-simulation/misc/Modifier.cpp
@@ -12,8 +12,16 @@
using namespace OpenVic;
using namespace OpenVic::NodeTools;
-ModifierEffect::ModifierEffect(std::string_view new_identifier, bool new_positive_good, format_t new_format)
- : HasIdentifier { new_identifier }, positive_good { new_positive_good }, format { new_format } {}
+static std::string make_default_modifier_effect_localisation_key(std::string_view identifier) {
+ return "MODIFIER_" + StringUtils::string_toupper(identifier);
+}
+
+ModifierEffect::ModifierEffect(
+ std::string_view new_identifier, bool new_positive_good, format_t new_format, std::string_view new_localisation_key
+) : HasIdentifier { new_identifier }, positive_good { new_positive_good }, format { new_format },
+ localisation_key {
+ new_localisation_key.empty() ? make_default_modifier_effect_localisation_key(new_identifier) : new_localisation_key
+ } {}
ModifierValue::ModifierValue() = default;
ModifierValue::ModifierValue(effect_map_t&& new_values) : values { std::move(new_values) } {}
@@ -105,12 +113,14 @@ bool TriggeredModifier::parse_scripts(DefinitionManager const& definition_manage
ModifierInstance::ModifierInstance(Modifier const& modifier, Date expiry_date)
: modifier { modifier }, expiry_date { expiry_date } {}
-bool ModifierManager::add_modifier_effect(std::string_view identifier, bool positive_good, ModifierEffect::format_t format) {
+bool ModifierManager::add_modifier_effect(
+ std::string_view identifier, bool positive_good, ModifierEffect::format_t format, std::string_view localisation_key
+) {
if (identifier.empty()) {
Logger::error("Invalid modifier effect identifier - empty!");
return false;
}
- return modifier_effects.add_item({ std::move(identifier), positive_good, format });
+ return modifier_effects.add_item({ std::move(identifier), positive_good, format, localisation_key });
}
bool ModifierManager::setup_modifier_effects() {
@@ -118,88 +128,127 @@ bool ModifierManager::setup_modifier_effects() {
using enum ModifierEffect::format_t;
/* Tech/inventions only */
- ret &= add_modifier_effect("cb_creation_speed", true);
+ ret &= add_modifier_effect("cb_creation_speed", true, PROPORTION_DECIMAL, "CB_MANUFACTURE_TECH");
ret &= add_modifier_effect("combat_width", false);
- ret &= add_modifier_effect("plurality", true, PERCENTAGE_DECIMAL);
- ret &= add_modifier_effect("pop_growth", true);
- ret &= add_modifier_effect("regular_experience_level", true, RAW_DECIMAL);
- ret &= add_modifier_effect("reinforce_rate", true);
- ret &= add_modifier_effect("seperatism", false); // paradox typo
- ret &= add_modifier_effect("shared_prestige", true, RAW_DECIMAL);
- ret &= add_modifier_effect("tax_eff", true);
+ ret &= add_modifier_effect("plurality", true, PERCENTAGE_DECIMAL, "TECH_PLURALITY");
+ ret &= add_modifier_effect("pop_growth", true, PROPORTION_DECIMAL, "TECH_POP_GROWTH");
+ ret &= add_modifier_effect("regular_experience_level", true, RAW_DECIMAL, "REGULAR_EXP_TECH");
+ ret &= add_modifier_effect("reinforce_rate", true, PROPORTION_DECIMAL, "REINFORCE_TECH");
+ ret &= add_modifier_effect("seperatism", false, PROPORTION_DECIMAL, "SEPARATISM_TECH"); // paradox typo
+ ret &= add_modifier_effect("shared_prestige", true, RAW_DECIMAL, "SHARED_PRESTIGE_TECH");
+ ret &= add_modifier_effect("tax_eff", true, PROPORTION_DECIMAL, "TECH_TAX_EFF");
/* Country Modifier Effects */
ret &= add_modifier_effect("administrative_efficiency", true);
- ret &= add_modifier_effect("administrative_efficiency_modifier", true);
+ ret &= add_modifier_effect(
+ "administrative_efficiency_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("administrative_efficiency")
+ );
ret &= add_modifier_effect("artisan_input", false);
ret &= add_modifier_effect("artisan_output", true);
ret &= add_modifier_effect("artisan_throughput", true);
ret &= add_modifier_effect("badboy", false, RAW_DECIMAL);
ret &= add_modifier_effect("cb_generation_speed_modifier", true);
- ret &= add_modifier_effect("civilization_progress_modifier", true);
- ret &= add_modifier_effect("colonial_life_rating", false, INT);
- ret &= add_modifier_effect("colonial_migration", true);
- ret &= add_modifier_effect("colonial_points", true, INT);
- ret &= add_modifier_effect("colonial_prestige", true);
+ ret &= add_modifier_effect(
+ "civilization_progress_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("civilization_progress")
+ );
+ ret &= add_modifier_effect("colonial_life_rating", false, INT, "COLONIAL_LIFE_TECH");
+ ret &= add_modifier_effect("colonial_migration", true, PROPORTION_DECIMAL, "COLONIAL_MIGRATION_TECH");
+ ret &= add_modifier_effect("colonial_points", true, INT, "COLONIAL_POINTS_TECH");
+ ret &= add_modifier_effect("colonial_prestige", true, PROPORTION_DECIMAL, "COLONIAL_PRESTIGE_MODIFIER_TECH");
ret &= add_modifier_effect("core_pop_consciousness_modifier", false, RAW_DECIMAL);
ret &= add_modifier_effect("core_pop_militancy_modifier", false, RAW_DECIMAL);
- ret &= add_modifier_effect("dig_in_cap", true, INT);
- ret &= add_modifier_effect("diplomatic_points", true);
- ret &= add_modifier_effect("diplomatic_points_modifier", true);
+ ret &= add_modifier_effect("dig_in_cap", true, INT, "DIGIN_FROM_TECH");
+ ret &= add_modifier_effect("diplomatic_points", true, PROPORTION_DECIMAL, "DIPLOMATIC_POINTS_TECH");
+ ret &= add_modifier_effect(
+ "diplomatic_points_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("diplopoints_gain")
+ );
ret &= add_modifier_effect("education_efficiency", true);
- ret &= add_modifier_effect("education_efficiency_modifier", true);
+ ret &= add_modifier_effect(
+ "education_efficiency_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("education_efficiency")
+ );
ret &= add_modifier_effect("factory_cost", false);
ret &= add_modifier_effect("factory_input", false);
ret &= add_modifier_effect("factory_maintenance", false);
ret &= add_modifier_effect("factory_output", true);
ret &= add_modifier_effect("factory_owner_cost", false);
ret &= add_modifier_effect("factory_throughput", true);
- ret &= add_modifier_effect("global_assimilation_rate", true);
- ret &= add_modifier_effect("global_immigrant_attract", true);
+ ret &= add_modifier_effect(
+ "global_assimilation_rate", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("assimilation_rate")
+ );
+ ret &= add_modifier_effect(
+ "global_immigrant_attract", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("immigant_attract")
+ );
ret &= add_modifier_effect("global_pop_consciousness_modifier", false, RAW_DECIMAL);
ret &= add_modifier_effect("global_pop_militancy_modifier", false, RAW_DECIMAL);
- ret &= add_modifier_effect("global_population_growth", true);
+ ret &= add_modifier_effect(
+ "global_population_growth", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("population_growth")
+ );
ret &= add_modifier_effect("goods_demand", false);
ret &= add_modifier_effect("import_cost", false);
- ret &= add_modifier_effect("increase_research", true);
- ret &= add_modifier_effect("influence", true);
- ret &= add_modifier_effect("influence_modifier", true);
+ ret &= add_modifier_effect("increase_research", true, PROPORTION_DECIMAL, "INC_RES_TECH");
+ ret &= add_modifier_effect("influence", true, PROPORTION_DECIMAL, "TECH_GP_INFLUENCE");
+ ret &= add_modifier_effect(
+ "influence_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("greatpower_influence_gain")
+ );
ret &= add_modifier_effect("issue_change_speed", true);
- ret &= add_modifier_effect("land_attack_modifier", true);
- ret &= add_modifier_effect("land_attrition", false);
- ret &= add_modifier_effect("land_defense_modifier", true);
+ ret &= add_modifier_effect(
+ "land_attack_modifier", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("land_attack")
+ );
+ ret &= add_modifier_effect("land_attrition", false, PROPORTION_DECIMAL, "LAND_ATTRITION_TECH");
+ ret &= add_modifier_effect(
+ "land_defense_modifier", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("land_defense")
+ );
ret &= add_modifier_effect("land_organisation", true);
ret &= add_modifier_effect("land_unit_start_experience", true, RAW_DECIMAL);
- ret &= add_modifier_effect("leadership", true, RAW_DECIMAL);
- ret &= add_modifier_effect("leadership_modifier", true);
+ ret &= add_modifier_effect("leadership", true, RAW_DECIMAL, "LEADERSHIP");
+ ret &= add_modifier_effect(
+ "leadership_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("global_leadership_modifier")
+ );
ret &= add_modifier_effect("literacy_con_impact", false);
ret &= add_modifier_effect("loan_interest", false);
- ret &= add_modifier_effect("max_loan_modifier", true);
+ ret &= add_modifier_effect(
+ "max_loan_modifier", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("max_loan_amount")
+ );
ret &= add_modifier_effect("max_military_spending", true);
- ret &= add_modifier_effect("max_national_focus", true, INT);
+ ret &= add_modifier_effect("max_national_focus", true, INT, "TECH_MAX_FOCUS");
ret &= add_modifier_effect("max_social_spending", true);
ret &= add_modifier_effect("max_tariff", true);
ret &= add_modifier_effect("max_tax", true);
- ret &= add_modifier_effect("max_war_exhaustion", true, PERCENTAGE_DECIMAL);
- ret &= add_modifier_effect("military_tactics", true);
+ ret &= add_modifier_effect("max_war_exhaustion", true, PERCENTAGE_DECIMAL, "MAX_WAR_EXHAUSTION");
+ ret &= add_modifier_effect("military_tactics", true, PROPORTION_DECIMAL, "MIL_TACTICS_TECH");
ret &= add_modifier_effect("min_military_spending", true);
ret &= add_modifier_effect("min_social_spending", true);
ret &= add_modifier_effect("min_tariff", true);
ret &= add_modifier_effect("min_tax", true);
- ret &= add_modifier_effect("minimum_wage", true);
+ ret &= add_modifier_effect(
+ "minimum_wage", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("minimun_wage")
+ );
ret &= add_modifier_effect("mobilisation_economy_impact", false);
ret &= add_modifier_effect("mobilisation_size", true);
ret &= add_modifier_effect("mobilization_impact", false);
- ret &= add_modifier_effect("naval_attack_modifier", true);
- ret &= add_modifier_effect("naval_attrition", false);
- ret &= add_modifier_effect("naval_defense_modifier", true);
+ ret &= add_modifier_effect(
+ "naval_attack_modifier", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("naval_attack")
+ );
+ ret &= add_modifier_effect("naval_attrition", false, PROPORTION_DECIMAL, "NAVAL_ATTRITION_TECH");
+ ret &= add_modifier_effect(
+ "naval_defense_modifier", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("naval_defense")
+ );
ret &= add_modifier_effect("naval_organisation", true);
ret &= add_modifier_effect("naval_unit_start_experience", true, RAW_DECIMAL);
ret &= add_modifier_effect("non_accepted_pop_consciousness_modifier", false, RAW_DECIMAL);
ret &= add_modifier_effect("non_accepted_pop_militancy_modifier", false, RAW_DECIMAL);
ret &= add_modifier_effect("org_regain", true);
ret &= add_modifier_effect("pension_level", true);
- ret &= add_modifier_effect("permanent_prestige", true, RAW_DECIMAL);
+ ret &= add_modifier_effect("permanent_prestige", true, RAW_DECIMAL, "PERMANENT_PRESTIGE_TECH");
ret &= add_modifier_effect("political_reform_desire", false);
ret &= add_modifier_effect("poor_savings_modifier", true);
ret &= add_modifier_effect("prestige", true, RAW_DECIMAL);
@@ -210,47 +259,92 @@ bool ModifierManager::setup_modifier_effects() {
ret &= add_modifier_effect("rgo_output", true);
ret &= add_modifier_effect("rgo_throughput", true);
ret &= add_modifier_effect("ruling_party_support", true);
- ret &= add_modifier_effect("self_unciv_economic_modifier", false);
- ret &= add_modifier_effect("self_unciv_military_modifier", false);
+ ret &= add_modifier_effect(
+ "self_unciv_economic_modifier", false, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("self_unciv_economic")
+ );
+ ret &= add_modifier_effect(
+ "self_unciv_military_modifier", false, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("self_unciv_military")
+ );
ret &= add_modifier_effect("social_reform_desire", false);
- ret &= add_modifier_effect("soldier_to_pop_loss", true);
+ ret &= add_modifier_effect("soldier_to_pop_loss", true, PROPORTION_DECIMAL, "SOLDIER_TO_POP_LOSS_TECH");
ret &= add_modifier_effect("supply_consumption", false);
- ret &= add_modifier_effect("supply_range", true);
- ret &= add_modifier_effect("suppression_points_modifier", true);
- ret &= add_modifier_effect("tariff_efficiency_modifier", true);
+ ret &= add_modifier_effect("supply_range", true, PROPORTION_DECIMAL, "SUPPLY_RANGE_TECH");
+ ret &= add_modifier_effect("suppression_points_modifier", true, PROPORTION_DECIMAL, "SUPPRESSION_TECH");
+ ret &= add_modifier_effect(
+ "tariff_efficiency_modifier", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("tariff_efficiency")
+ );
ret &= add_modifier_effect("tax_efficiency", true);
ret &= add_modifier_effect("unemployment_benefit", true);
- ret &= add_modifier_effect("unciv_economic_modifier", false);
- ret &= add_modifier_effect("unciv_military_modifier", false);
+ ret &= add_modifier_effect(
+ "unciv_economic_modifier", false, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("unciv_economic")
+ );
+ ret &= add_modifier_effect(
+ "unciv_military_modifier", false, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("unciv_military")
+ );
ret &= add_modifier_effect("unit_recruitment_time", false);
- ret &= add_modifier_effect("war_exhaustion", false);
+ ret &= add_modifier_effect("war_exhaustion", false, PROPORTION_DECIMAL, "WAR_EXHAUST_BATTLES");
/* State only */
- ret &= add_modifier_effect("flashpoint_tension", true);
- ret &= add_modifier_effect("railroads", true); // capitalist likelihood for railroads vs factories
+ // replace $VAL$ with effect value * 30 (as proportion decimal, only used in national foci)
+ ret &= add_modifier_effect("flashpoint_tension", true, PROPORTION_DECIMAL, "increase_tension_focus_desc");
+ // capitalist likelihood for railroads vs factories
+ // replace $VAL$ with effect value (as proportion decimal, only used in national foci)
+ ret &= add_modifier_effect("railroads", true, PROPORTION_DECIMAL, "railroad_build_desc");
/* Province Modifier Effects */
ret &= add_modifier_effect("assimilation_rate", true);
ret &= add_modifier_effect("boost_strongest_party", false);
- ret &= add_modifier_effect("farm_rgo_eff", true);
- ret &= add_modifier_effect("farm_rgo_size", true);
- ret &= add_modifier_effect("immigrant_attract", true);
- ret &= add_modifier_effect("immigrant_push", false);
+ ret &= add_modifier_effect("farm_rgo_eff", true, PROPORTION_DECIMAL, "TECH_FARM_OUTPUT");
+ ret &= add_modifier_effect(
+ "farm_rgo_size", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("farm_size")
+ );
+ ret &= add_modifier_effect(
+ "immigrant_attract", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("immigant_attract")
+ );
+ ret &= add_modifier_effect(
+ "immigrant_push", false, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("immigant_push")
+ );
ret &= add_modifier_effect("life_rating", true);
- ret &= add_modifier_effect("local_artisan_input", false);
- ret &= add_modifier_effect("local_artisan_output", true);
- ret &= add_modifier_effect("local_artisan_throughput", true);
- ret &= add_modifier_effect("local_factory_input", false);
- ret &= add_modifier_effect("local_factory_output", true);
- ret &= add_modifier_effect("local_factory_throughput", true);
+ ret &= add_modifier_effect(
+ "local_artisan_input", false, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("artisan_input")
+ );
+ ret &= add_modifier_effect(
+ "local_artisan_output", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("artisan_output")
+ );
+ ret &= add_modifier_effect(
+ "local_artisan_throughput", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("artisan_throughput")
+ );
+ ret &= add_modifier_effect(
+ "local_factory_input", false, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("factory_input")
+ );
+ ret &= add_modifier_effect(
+ "local_factory_output", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("factory_output")
+ );
+ ret &= add_modifier_effect(
+ "local_factory_throughput", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("factory_throughput")
+ );
ret &= add_modifier_effect("local_repair", true);
- ret &= add_modifier_effect("local_rgo_output", true);
- ret &= add_modifier_effect("local_rgo_throughput", true);
- ret &= add_modifier_effect("local_ruling_party_support", true);
+ ret &= add_modifier_effect(
+ "local_rgo_output", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("rgo_output")
+ );
+ ret &= add_modifier_effect(
+ "local_rgo_throughput", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("rgo_throughput")
+ );
+ ret &= add_modifier_effect(
+ "local_ruling_party_support", true, PROPORTION_DECIMAL,
+ make_default_modifier_effect_localisation_key("ruling_party_support")
+ );
ret &= add_modifier_effect("local_ship_build", false);
ret &= add_modifier_effect("max_attrition", false, RAW_DECIMAL);
- ret &= add_modifier_effect("mine_rgo_eff", true);
- ret &= add_modifier_effect("mine_rgo_size", true);
+ ret &= add_modifier_effect("mine_rgo_eff", true, PROPORTION_DECIMAL, "TECH_MINE_OUTPUT");
+ ret &= add_modifier_effect(
+ "mine_rgo_size", true, PROPORTION_DECIMAL, make_default_modifier_effect_localisation_key("mine_size")
+ );
ret &= add_modifier_effect("movement_cost", false);
ret &= add_modifier_effect("number_of_voters", false);
ret &= add_modifier_effect("pop_consciousness_modifier", false, RAW_DECIMAL);
@@ -259,16 +353,15 @@ bool ModifierManager::setup_modifier_effects() {
ret &= add_modifier_effect("supply_limit", true, RAW_DECIMAL);
/* Military Modifier Effects */
- ret &= add_modifier_effect("attack", true, INT);
- ret &= add_modifier_effect("attrition", false, RAW_DECIMAL);
- ret &= add_modifier_effect("defence", true, INT);
- ret &= add_modifier_effect("experience", true);
- ret &= add_modifier_effect("morale", true);
- ret &= add_modifier_effect("movement", true);
- ret &= add_modifier_effect("organisation", true);
- ret &= add_modifier_effect("reconnaissance", true);
- ret &= add_modifier_effect("reliability", true, RAW_DECIMAL);
- ret &= add_modifier_effect("speed", true);
+ ret &= add_modifier_effect("attack", true, INT, "TRAIT_ATTACK");
+ ret &= add_modifier_effect("attrition", false, RAW_DECIMAL, "ATTRITION");
+ ret &= add_modifier_effect("defence", true, INT, "TRAIT_DEFEND");
+ ret &= add_modifier_effect("experience", true, PROPORTION_DECIMAL, "TRAIT_EXPERIENCE");
+ ret &= add_modifier_effect("morale", true, PROPORTION_DECIMAL, "TRAIT_MORALE");
+ ret &= add_modifier_effect("organisation", true, PROPORTION_DECIMAL, "TRAIT_ORGANISATION");
+ ret &= add_modifier_effect("reconnaissance", true, PROPORTION_DECIMAL, "TRAIT_RECONAISSANCE");
+ ret &= add_modifier_effect("reliability", true, RAW_DECIMAL, "TRAIT_RELIABILITY");
+ ret &= add_modifier_effect("speed", true, PROPORTION_DECIMAL, "TRAIT_SPEED");
return ret;
}
diff --git a/src/openvic-simulation/misc/Modifier.hpp b/src/openvic-simulation/misc/Modifier.hpp
index bd72a1e..f3cc0f6 100644
--- a/src/openvic-simulation/misc/Modifier.hpp
+++ b/src/openvic-simulation/misc/Modifier.hpp
@@ -22,10 +22,13 @@ namespace OpenVic {
*/
const bool PROPERTY_CUSTOM_PREFIX(positive_good, is);
const format_t PROPERTY(format);
+ std::string PROPERTY(localisation_key);
// TODO - format/precision, e.g. 80% vs 0.8 vs 0.800, 2 vs 2.0 vs 200%
- ModifierEffect(std::string_view new_identifier, bool new_positive_good, format_t new_format);
+ ModifierEffect(
+ std::string_view new_identifier, bool new_positive_good, format_t new_format, std::string_view new_localisation_key
+ );
public:
ModifierEffect(ModifierEffect&&) = default;
@@ -133,7 +136,8 @@ namespace OpenVic {
public:
bool add_modifier_effect(
std::string_view identifier, bool positive_good,
- ModifierEffect::format_t format = ModifierEffect::format_t::PROPORTION_DECIMAL
+ ModifierEffect::format_t format = ModifierEffect::format_t::PROPORTION_DECIMAL,
+ std::string_view localisation_key = {}
);
bool register_complex_modifier(std::string_view identifier);