From 0958b99803c0a863d6e3b934b438bca19292a197 Mon Sep 17 00:00:00 2001 From: ineveraskedforthis Date: Wed, 20 May 2026 19:24:16 +0300 Subject: [PATCH 1/5] education and consumption changes, minor labels fix --- assets/localisation/en-US/alice.csv | 6 ++ src/economy/advanced_province_buildings.cpp | 34 +++++--- src/economy/economy.cpp | 31 +++++-- src/economy/economy_constants.hpp | 2 +- src/economy/economy_pops.cpp | 92 +++++++++++++-------- src/economy/economy_production.cpp | 33 ++++++++ src/economy/economy_production.hpp | 19 +++++ src/economy/economy_stats.cpp | 56 ++++++++++++- src/economy/national_budget.cpp | 9 +- src/gamestate/dcon_generated.txt | 5 ++ src/gui/budgetwindow.cpp | 17 ++-- src/map/map_state.cpp | 6 +- 12 files changed, 235 insertions(+), 75 deletions(-) diff --git a/assets/localisation/en-US/alice.csv b/assets/localisation/en-US/alice.csv index 4e832f412..030d6a164 100644 --- a/assets/localisation/en-US/alice.csv +++ b/assets/localisation/en-US/alice.csv @@ -1895,6 +1895,12 @@ private_education_owners;Private educators ?Y$val$?! port_owners;Local port ?Y$val$?! housing_owners;Landlords ?Y$val$?! private_education_price;Education price ?Y$val$?! +private_education_supply_1;Education private supply ?Y$val$?! +private_education_supply_2;Education public supply ?Y$val$?! +private_education_demand_1;Education public demand ?Y$val$?! +private_education_demand_2;Education private demand ?Y$val$?! +private_education_size_public;Education public size ?Y$val$?! +private_education_size_private;Education private size ?Y$val$?! port_price;Local port price ?Y$val$?! housing_price;Housing price ?Y$val$?! housing_supply;Housing supply ?Y$val$?! diff --git a/src/economy/advanced_province_buildings.cpp b/src/economy/advanced_province_buildings.cpp index 367c3519f..78a426b51 100644 --- a/src/economy/advanced_province_buildings.cpp +++ b/src/economy/advanced_province_buildings.cpp @@ -5,6 +5,7 @@ #include "constants_dcon.hpp" #include "province_templates.hpp" #include "money.hpp" +#include "economy_production.hpp" namespace services { @@ -96,7 +97,7 @@ namespace advanced_province_buildings { // could be expanded by 1000 per 1 years constexpr float max_port_expansion_speed = 1000.f / 365.f; -constexpr float max_city_expansion_rate= 0.1f / 365.f; +constexpr float max_city_expansion_rate= 1.f / 365.f; constexpr float max_city_expansion_speed = 1000.f / 365.f; constexpr float ports_decay_speed = 0.99999f; @@ -508,14 +509,13 @@ void update_private_size(sys::state& state) { / (state.world.province_get_demographics(pids, demographics::total) + 1.f) ); - auto cost_of_input = state.world.province_get_labor_price(pids, def.throughput_labour_type); + auto wage = state.world.province_get_labor_price(pids, def.throughput_labour_type); auto cost_of_output = state.world.province_get_service_price(pids, def.output) * local_education_efficiency * tmod * nmod * def.output_amount; - auto current_private_size = state.world.province_get_advanced_province_building_private_size(pids, bid); - auto margin = (cost_of_output - cost_of_input) / cost_of_input; - auto new_private_size = current_private_size + ve::min(margin, 100.f) + ve::min(ve::max(margin, -0.01f), 0.01f) * current_private_size; - auto max_size = state.world.province_get_demographics(pids, demographics::total) * state.world.province_get_labor_price(pids, economy::labor::no_education) / cost_of_input; - new_private_size = ve::min(max_size, new_private_size); + auto sat = state.world.province_get_labor_demand_satisfaction(pids, def.throughput_labour_type); + auto gradient = economy::gradient_employment_i(cost_of_output, ve::fp_vector{0.f}, ve::fp_vector{1.f}, wage); + auto employment_change = economy::gradient_to_employment_change(gradient, wage, current_private_size, sat); + auto new_private_size = current_private_size + employment_change; state.world.province_set_advanced_province_building_private_size(pids, bid, ve::max(0.f, new_private_size)); }); } @@ -527,15 +527,15 @@ void update_private_size(sys::state& state) { province::for_each_market_province_parallel_over_market(state, [&](dcon::market_id mid, dcon::state_instance_id sid, dcon::province_id pid) { auto owner = state.world.province_get_nation_from_province_ownership(pid); - auto cost_of_input = state.world.province_get_labor_price(pid, def.throughput_labour_type); + auto wage = state.world.province_get_labor_price(pid, def.throughput_labour_type); auto max_size = state.world.province_get_advanced_province_building_max_private_size(pid, bid); auto efficiency = ports_efficiency(state, owner, max_size); auto cost_of_output = state.world.province_get_service_price(pid, def.output) * efficiency * def.output_amount; auto current_private_size = state.world.province_get_advanced_province_building_private_size(pid, bid); - auto margin = (cost_of_output - cost_of_input) / cost_of_input; - auto probability_to_hire = state.world.province_get_labor_demand_satisfaction(pid, def.throughput_labour_type); - margin = margin > 0.f ? std::max(0.f, (probability_to_hire - 0.4f)) * margin : margin; - auto new_private_size = current_private_size + ve::min(margin, 100.f) + ve::min(ve::max(margin, -0.01f), 0.01f) * current_private_size; + auto sat = state.world.province_get_labor_demand_satisfaction(pid, def.throughput_labour_type); + auto gradient = economy::gradient_employment_i(cost_of_output, ve::fp_vector{ 0.f }, ve::fp_vector{ 1.f }, wage); + auto employment_change = economy::gradient_to_employment_change(gradient, wage, current_private_size, sat); + auto new_private_size = current_private_size + employment_change; new_private_size = ve::min(max_size, new_private_size); state.world.province_set_advanced_province_building_private_size(pid, bid, ve::max(0.f, new_private_size)); }); @@ -613,7 +613,15 @@ void update_national_size(sys::state& state) { auto weight = ve::select(total_population == 0.f, 0.f, local_population / total_population); auto local_education_budget = weight * education_budget; - state.world.province_set_advanced_province_building_national_size(pids, bid, ve::select(invalid, 0.f, ve::max(0.f, local_education_budget / cost_of_input))); + auto limitation = ve::max(0.f, local_education_budget / cost_of_input); + + auto current_size = state.world.province_get_advanced_province_building_national_size(pids, bid); + auto sat = state.world.province_get_labor_demand_satisfaction(pids, def.throughput_labour_type); + auto demand_education_satisfaction = state.world.province_get_service_satisfaction_for_free(pids, def.output); + auto expansion_rate = (sat - 0.5f) * (current_size * 0.01f + 1.f) * (1.f - demand_education_satisfaction); + auto next_size = ve::min(ve::max(current_size + expansion_rate, 0.f), limitation); + + state.world.province_set_advanced_province_building_national_size(pids, bid, ve::select(invalid, 0.f, next_size)); }); } } diff --git a/src/economy/economy.cpp b/src/economy/economy.cpp index 56e5f05e8..2f3d37a99 100644 --- a/src/economy/economy.cpp +++ b/src/economy/economy.cpp @@ -3763,13 +3763,30 @@ void daily_update(sys::state& state, bool presimulation, float presimulation_sta } { - auto ln = pop_demographics::get_life_needs(state, ids); - auto en = pop_demographics::get_everyday_needs(state, ids); - auto lx = pop_demographics::get_luxury_needs(state, ids); - - ln = ve::min(1.f, ve::max(0.f, ln + (potential_ratio_life.get(ids) * (ln_satisfaction + satisfaction_from_subsistence.get(ids)) - 2.f) * pop_demographics::pop_u8_scaling)); - en = ve::min(1.f, ve::max(0.f, en + (potential_ratio_everyday.get(ids) * en_satisfaction - 2.f) * pop_demographics::pop_u8_scaling)); - lx = ve::min(1.f, ve::max(0.f, lx + (potential_ratio_luxury.get(ids) * lx_satisfaction - 2.f) * pop_demographics::pop_u8_scaling)); + auto satisfaction = state.world.pop_get_satisfaction(ids); + + auto satisfaction_gain = + ve::min(1.f, potential_ratio_life.get(ids) * ln_satisfaction) + + ve::min(1.f, potential_ratio_everyday.get(ids) * en_satisfaction) + + ve::min(1.f, potential_ratio_luxury.get(ids) * lx_satisfaction); + satisfaction = satisfaction * 0.999f + satisfaction_gain * 0.001f / 3.f; + + state.world.pop_set_satisfaction(ids, satisfaction); + + //auto ln = pop_demographics::get_life_needs(state, ids); + //auto en = pop_demographics::get_everyday_needs(state, ids); + //auto lx = pop_demographics::get_luxury_needs(state, ids); + + //ln = ve::min(1.f, ve::max(0.f, ln + 2.f * (potential_ratio_life.get(ids) * (ln_satisfaction + satisfaction_from_subsistence.get(ids)) - 1.f) * pop_demographics::pop_u8_scaling)); + //en = ve::min(1.f, ve::max(0.f, en + 2.f * (potential_ratio_everyday.get(ids) * en_satisfaction - 1.f) * pop_demographics::pop_u8_scaling)); + //lx = ve::min(1.f, ve::max(0.f, lx + 2.f * (potential_ratio_luxury.get(ids) * lx_satisfaction - 1.f) * pop_demographics::pop_u8_scaling)); + + satisfaction = satisfaction * 3.f; + auto ln = ve::min(1.f, satisfaction); + satisfaction = satisfaction - 1.f; + auto en = ve::max(0.f, ve::min(1.f, satisfaction)); + satisfaction = satisfaction - 1.f; + auto lx = ve::max(0.f, ve::min(1.f, satisfaction)); pop_demographics::set_life_needs(state, ids, ln); pop_demographics::set_everyday_needs(state, ids, en); diff --git a/src/economy/economy_constants.hpp b/src/economy/economy_constants.hpp index a1b22ec94..35af44944 100644 --- a/src/economy/economy_constants.hpp +++ b/src/economy/economy_constants.hpp @@ -2,7 +2,7 @@ namespace economy { -constexpr inline float factories_per_state_required_city_size = 100'000.f; +constexpr inline float factories_per_state_required_city_size = 60'000.f; namespace numerical { namespace commodity_unit { diff --git a/src/economy/economy_pops.cpp b/src/economy/economy_pops.cpp index 83bbad04c..1d541b198 100644 --- a/src/economy/economy_pops.cpp +++ b/src/economy/economy_pops.cpp @@ -162,10 +162,16 @@ auto prepare_pop_budget_templated( // we want to focus on life needs first if we are poor AND our satisfaction is low + VALUE total_cost_needs = 0.00001f + (life_costs + everyday_costs + luxury_costs) * pop_size / state.defines.alice_needs_scaling_factor; + VALUE is_rich = adaptive_ve::min( + 3.f, + adaptive_ve::max(0.f, savings - total_cost_needs) / total_cost_needs + ); + VALUE base_life_costs = (0.00001f + life_costs * pop_size / state.defines.alice_needs_scaling_factor); VALUE is_poor = adaptive_ve::max(0.01f, 1.f - 4.f * savings / base_life_costs); - VALUE current_life = pop_demographics::get_life_needs(state, ids); - is_poor = adaptive_ve::min(1.f, adaptive_ve::max(0.f, is_poor + (1.f - current_life) * 2.f)); + //VALUE current_life = pop_demographics::get_life_needs(state, ids); + is_poor = adaptive_ve::min(1.f, adaptive_ve::max(0.f, is_poor)); // prepare desired spending rate for every category @@ -215,6 +221,8 @@ auto prepare_pop_budget_templated( // upload data to structure // here we do logic which can't be made uniform + VALUE satisfaction = state.world.pop_get_satisfaction(ids); + // ########## // life needs @@ -227,24 +235,26 @@ auto prepare_pop_budget_templated( VALUE available_subsistence = adaptive_ve::min(subsistence_score_life, subsistence); subsistence = subsistence - available_subsistence; VALUE qol_from_subsistence = available_subsistence / subsistence_score_life; - VALUE demand_scale_life = old_life / base_qol; - result.life_needs.demand_scale = demand_scale_life * demand_scale_life + 0.01f; + VALUE demand_scale_life = satisfaction;//old_life / base_qol; + result.life_needs.demand_scale = demand_scale_life;// * demand_scale_life + 0.01f; result.life_needs.required = result.life_needs.demand_scale * life_costs * pop_size / state.defines.alice_needs_scaling_factor; auto zero_life_costs = result.life_needs.required == 0; + /* auto rich_but_life_needs_are_not_satisfied = adaptive_ve::select( zero_life_costs, 1.f, adaptive_ve::min ( 2.f, - (1.05f - old_life) * adaptive_ve::max(0.f, spend_on_life_needs - result.life_needs.required * 5.f) / result.life_needs.required + adaptive_ve::max(0.f, spend_on_life_needs - result.life_needs.required * 5.f) / result.life_needs.required ) ); - result.life_needs.spent = adaptive_ve::min(spend_on_life_needs, result.life_needs.required * (1.f + rich_but_life_needs_are_not_satisfied)); + */ + result.life_needs.spent = adaptive_ve::min(spend_on_life_needs, result.life_needs.required * (1.f + is_rich)); result.life_needs.satisfied_with_money_ratio = adaptive_ve::select( zero_life_costs, 10.f, @@ -281,24 +291,27 @@ auto prepare_pop_budget_templated( // ############## auto old_everyday = pop_demographics::get_everyday_needs(state, ids); - auto demand_scale_everyday = old_everyday / base_qol; - result.everyday_needs.demand_scale = demand_scale_everyday * demand_scale_everyday + 0.01f; + auto demand_scale_everyday = 1.f;//old_everyday / base_qol; + result.everyday_needs.demand_scale = demand_scale_everyday;// * demand_scale_everyday + 0.01f; result.everyday_needs.required = result.everyday_needs.demand_scale * everyday_costs * pop_size / state.defines.alice_needs_scaling_factor; auto zero_everyday_costs = result.everyday_needs.required == 0; - auto rich_but_everyday_needs_are_not_satisfied = adaptive_ve::select( + auto rich_but_everyday_needs_are_not_satisfied = 0.f; + /* + adaptive_ve::select( zero_everyday_costs, 1.f, adaptive_ve::min ( 5.f, - (1.05f - old_everyday) * adaptive_ve::max(0.f, spend_on_everyday_needs - result.everyday_needs.required * 5.f) / result.everyday_needs.required + adaptive_ve::max(0.f, spend_on_everyday_needs - result.everyday_needs.required * 5.f) / result.everyday_needs.required ) ); - result.everyday_needs.spent = adaptive_ve::min(savings, adaptive_ve::min(spend_on_everyday_needs, result.everyday_needs.required * (1.f + rich_but_everyday_needs_are_not_satisfied))); + */ + result.everyday_needs.spent = adaptive_ve::min(savings, adaptive_ve::min(spend_on_everyday_needs, result.everyday_needs.required * (1.f + is_rich))); result.everyday_needs.satisfied_with_money_ratio = adaptive_ve::select( zero_everyday_costs, 10.f, @@ -316,24 +329,27 @@ auto prepare_pop_budget_templated( // ############ auto old_luxury = pop_demographics::get_luxury_needs(state, ids); - auto demand_scale_luxury = old_luxury / base_qol; - result.luxury_needs.demand_scale = demand_scale_luxury * demand_scale_luxury + 0.01f; + auto demand_scale_luxury = 1.f;//old_luxury / base_qol; + result.luxury_needs.demand_scale = demand_scale_luxury;// * demand_scale_luxury + 0.01f; result.luxury_needs.required = result.luxury_needs.demand_scale * luxury_costs * pop_size / state.defines.alice_needs_scaling_factor; auto zero_luxury_costs = result.luxury_needs.required == 0; - auto rich_but_luxury_needs_are_not_satisfied = adaptive_ve::select( + auto rich_but_luxury_needs_are_not_satisfied = 0.f; + /* + adaptive_ve::select( zero_luxury_costs, 1.f, adaptive_ve::min ( 5.f, - (1.05f - old_luxury) * adaptive_ve::max(0.f, spend_on_luxury_needs - result.luxury_needs.required * 5.f) / result.luxury_needs.required + adaptive_ve::max(0.f, spend_on_luxury_needs - result.luxury_needs.required * 5.f) / result.luxury_needs.required ) ); - result.luxury_needs.spent = adaptive_ve::min(savings, adaptive_ve::min(spend_on_luxury_needs, result.luxury_needs.required * (1.f + rich_but_luxury_needs_are_not_satisfied))); + */ + result.luxury_needs.spent = adaptive_ve::min(savings, adaptive_ve::min(spend_on_luxury_needs, result.luxury_needs.required * (1.f + is_rich))); result.luxury_needs.satisfied_for_free_ratio = 0.f; result.luxury_needs.satisfied_with_money_ratio = adaptive_ve::select( zero_luxury_costs, @@ -359,8 +375,7 @@ auto prepare_pop_budget_templated( // if education is crazy expensive and impossible to access, we want to spend 0 because it's hopeless - - auto rich_but_uneducated = adaptive_ve::select( + auto scale_from_being_rich = adaptive_ve::select( required_education == 0.f, 1.f, adaptive_ve::max @@ -369,24 +384,33 @@ auto prepare_pop_budget_templated( adaptive_ve::min ( 10.f, - (1.05f - literacy) - * adaptive_ve::max(0.f, spend_on_education - result.education.required * 5.f) + adaptive_ve::max(0.f, spend_on_education - result.education.required * 5.f) / result.education.required ) - 0.1f ) ); - auto supposed_to_spend = adaptive_ve::min(savings, adaptive_ve::min(spend_on_education, result.education.required * rich_but_uneducated)); - auto potentially_free_ratio = state.world.province_get_service_satisfaction_for_free(provs, services::list::education) / adaptive_ve::max(1.f, rich_but_uneducated); - auto ratio_of_free_education = decltype(potentially_free_ratio)(0.f); - ratio_of_free_education = adaptive_ve::select(result.can_use_free_services > 0.f, potentially_free_ratio, ratio_of_free_education); - result.education.satisfied_for_free_ratio = ratio_of_free_education; - result.education.spent = supposed_to_spend * (1.f - ratio_of_free_education); - result.education.satisfied_with_money_ratio = adaptive_ve::select( - required_education == 0.f, - 1.f, - result.education.spent - / result.education.required - ); + + auto education_scale_nation = adaptive_ve::select(result.can_use_free_services > 0.f, 1.f, 0.f); + + auto personal_desired_spending = result.education.required * scale_from_being_rich; + auto can_actually_spend = adaptive_ve::min(savings, spend_on_education); + auto total_personal_spending = adaptive_ve::min(can_actually_spend, personal_desired_spending); + auto education_scale_private = scale_from_being_rich * adaptive_ve::select(personal_desired_spending > 0.f, total_personal_spending / personal_desired_spending, 0.f); + + //auto probability_to_get_education_for_free = state.world.province_get_service_satisfaction_for_free(provs, services::list::education); + auto expected_help_from_nation = adaptive_ve::select(result.can_use_free_services > 0.f, result.education.required, 0.f); + auto total_expected_spending = expected_help_from_nation + total_personal_spending; + + auto potentially_free_ratio = adaptive_ve::select(total_expected_spending > 0.f, expected_help_from_nation / total_expected_spending, 0.f); + + //auto supposed_to_spend = adaptive_ve::min(savings, adaptive_ve::min(spend_on_education, result.education.required * rich_but_uneducated)); + //auto potentially_free_ratio = expected_help_from_nation / adaptive_ve::max(1.f, rich_but_uneducated); + //auto ratio_of_free_education = decltype(potentially_free_ratio)(0.f); + //ratio_of_free_education = adaptive_ve::select(result.can_use_free_services > 0.f, potentially_free_ratio, ratio_of_free_education); + + result.education.satisfied_for_free_ratio = education_scale_nation; + result.education.spent = total_personal_spending; + result.education.satisfied_with_money_ratio = education_scale_private; result.spent_total = result.spent_total + result.education.spent; savings = savings - result.education.spent; @@ -486,9 +510,9 @@ void update_consumption( demand_luxury.set(ids, multiplier * data.luxury_needs.demand_scale * data.luxury_needs.satisfied_with_money_ratio); demand_education_public_allowed.set( ids, - pop_size + pop_size * data.education.demand_scale + * data.education.satisfied_for_free_ratio * data.can_use_free_services - * data.education.demand_scale * data.education.satisfied_for_free_ratio ); demand_paid_education.set(ids, pop_size * data.education.demand_scale * data.education.satisfied_with_money_ratio); diff --git a/src/economy/economy_production.cpp b/src/economy/economy_production.cpp index 5d49a4eed..378ec0324 100644 --- a/src/economy/economy_production.cpp +++ b/src/economy/economy_production.cpp @@ -1926,6 +1926,24 @@ VALUE gradient_employment_i( return clamped; } +template float gradient_employment_i( + float expected_profit_per_perfect_worker, + float expected_input_cost_per_perfect_worker, + float power, + float wage, + float secondary_employment, + float secondary_power +); + +template ve::fp_vector gradient_employment_i( + ve::fp_vector expected_profit_per_perfect_worker, + ve::fp_vector expected_input_cost_per_perfect_worker, + ve::fp_vector power, + ve::fp_vector wage, + ve::fp_vector secondary_employment, + ve::fp_vector secondary_power +); + template VALUE gradient_employment_i( VALUE expected_profit_per_perfect_worker, @@ -1939,6 +1957,19 @@ VALUE gradient_employment_i( auto clamped = adaptive_ve::min(100.f, adaptive_ve::max(-100.f, diff)); return clamped; } +template float gradient_employment_i( + float expected_profit_per_perfect_worker, + float expected_input_cost_per_perfect_worker, + float power, + float wage +); + +template ve::fp_vector gradient_employment_i( + ve::fp_vector expected_profit_per_perfect_worker, + ve::fp_vector expected_input_cost_per_perfect_worker, + ve::fp_vector power, + ve::fp_vector wage +); template VALUE gradient_employment_secondary( @@ -2018,6 +2049,8 @@ VALUE gradient_to_employment_change(VALUE gradient, VALUE wage, VALUE current_em return (current_employment * 0.001f + 1.f) * gradient * mult; } } +template float gradient_to_employment_change(float gradient, float wage, float current_employment, float sat); +template ve::fp_vector gradient_to_employment_change(ve::fp_vector gradient, ve::fp_vector wage, ve::fp_vector current_employment, ve::fp_vector sat); void update_employment(sys::state& state, bool ignore_reality, float presim_employment_mult) { // note: markets are independent, so nations are independent: diff --git a/src/economy/economy_production.hpp b/src/economy/economy_production.hpp index 265cf2c23..eaf25b658 100644 --- a/src/economy/economy_production.hpp +++ b/src/economy/economy_production.hpp @@ -29,6 +29,25 @@ uint32_t size(sys::state const& state); namespace economy { +template +VALUE gradient_employment_i( + VALUE expected_profit_per_perfect_worker, + VALUE expected_input_cost_per_perfect_worker, + VALUE power, + VALUE wage, + VALUE secondary_employment, + VALUE secondary_power +); +template +VALUE gradient_employment_i( + VALUE expected_profit_per_perfect_worker, + VALUE expected_input_cost_per_perfect_worker, + VALUE power, + VALUE wage +); +template +VALUE gradient_to_employment_change(VALUE gradient, VALUE wage, VALUE current_employment, VALUE sat); + // 100'000 hired clerks increase output by 1% inline constexpr float secondary_employment_output_bonus = 1.f / 100000.f; inline constexpr float unqualified_throughput_multiplier = 0.2f; diff --git a/src/economy/economy_stats.cpp b/src/economy/economy_stats.cpp index c901bb792..8640d279d 100644 --- a/src/economy/economy_stats.cpp +++ b/src/economy/economy_stats.cpp @@ -1483,9 +1483,59 @@ void make_trade_center_tooltip(sys::state& state, text::columnar_layout& content contents, "private_education_price", text::variable_type::val, - text::fp_currency{ - state.world.province_get_service_price(province, services::list::education) - }, + text::fp_currency{ state.world.province_get_service_price(province, services::list::education)}, + 15 + ); + text::add_line( + state, + contents, + "private_education_size_private", + text::variable_type::val, + text::prettify((int64_t)state.world.province_get_advanced_province_building_private_size(province, advanced_province_buildings::list::schools_and_universities)), + 15 + ); + text::add_line( + state, + contents, + "private_education_size_public", + text::variable_type::val, + text::prettify((int64_t)state.world.province_get_advanced_province_building_national_size(province, advanced_province_buildings::list::schools_and_universities)), + 15 + ); + text::add_line( + state, + contents, + "private_education_supply_1", + text::variable_type::val, + text::prettify((int64_t)state.world.province_get_service_supply_private(province, services::list::education)), + 15 + ); + text::add_line( + state, + contents, + "private_education_supply_2", + text::variable_type::val, + text::prettify((int64_t)state.world.province_get_service_supply_public(province, services::list::education)), + 15 + ); + text::add_line( + state, + contents, + "private_education_demand_1", + text::variable_type::val, + text::prettify((int64_t) + state.world.province_get_service_demand_allowed_public_supply(province, services::list::education) + ), + 15 + ); + text::add_line( + state, + contents, + "private_education_demand_2", + text::variable_type::val, + text::prettify((int64_t) + state.world.province_get_service_demand_forbidden_public_supply(province, services::list::education) + ), 15 ); diff --git a/src/economy/national_budget.cpp b/src/economy/national_budget.cpp index 20f160a67..ff01b247e 100644 --- a/src/economy/national_budget.cpp +++ b/src/economy/national_budget.cpp @@ -20,11 +20,10 @@ float estimate_education_spending(sys::state& state, dcon::nation_id n, float bu auto total = 0.f; state.world.nation_for_each_province_ownership(n, [&](auto ownership) { auto p = state.world.province_ownership_get_province(ownership); - auto total_population = state.world.nation_get_demographics(n, demographics::primary_or_accepted); - auto local_population = state.world.province_get_demographics(p, demographics::primary_or_accepted); - auto weight = total_population == 0.f ? 0.f : local_population / total_population; - auto local_education_budget = weight * budget; - total = total + std::max(0.f, local_education_budget * state.world.province_get_labor_demand_satisfaction(p, def.throughput_labour_type)); + auto local_hire = state.world.province_get_advanced_province_building_national_size(p, advanced_province_buildings::list::schools_and_universities); + auto local_wage = state.world.province_get_labor_price(p, def.throughput_labour_type); + auto sat = state.world.province_get_labor_demand_satisfaction(p, def.throughput_labour_type); + total = total + std::max(0.f, local_hire * sat * local_wage); }); return total; } diff --git a/src/gamestate/dcon_generated.txt b/src/gamestate/dcon_generated.txt index fec347ea3..157da3db9 100644 --- a/src/gamestate/dcon_generated.txt +++ b/src/gamestate/dcon_generated.txt @@ -5428,6 +5428,11 @@ object { type{ uint8_t } tag{ save } } + property{ + name{ satisfaction } + type{ float } + tag{ save } + } property{ name{ ulife_needs_satisfaction } type{ uint8_t } diff --git a/src/gui/budgetwindow.cpp b/src/gui/budgetwindow.cpp index d9476c6e3..4909c4af1 100644 --- a/src/gui/budgetwindow.cpp +++ b/src/gui/budgetwindow.cpp @@ -1010,16 +1010,17 @@ void budgetwindow_main_espenses_table_t::update(sys::state& state, layout_windo auto in = culture::income_type::education; auto owner = state.local_player_nation; + auto bid = advanced_province_buildings::list::schools_and_universities; + auto& def = advanced_province_buildings::definitions[bid]; + state.world.nation_for_each_province_ownership_as_nation(state.local_player_nation, [&](auto poid) { auto pid = state.world.province_ownership_get_province(poid); - auto national_budget = state.world.nation_get_stockpiles(owner, economy::money); - auto education_budget = national_budget * fraction; - auto total_population = state.world.nation_get_demographics(owner, demographics::primary_or_accepted); - auto local_population = state.world.province_get_demographics(pid, demographics::primary_or_accepted); - auto weight = total_population == 0.f ? 0.f : local_population / total_population; - auto local_education_budget = weight * education_budget; - if(local_education_budget > 0.0f) { - add_budget_row(text::produce_simple_string(state, state.world.province_get_name(pid)), local_education_budget); + auto wage = state.world.province_get_labor_price(pid, def.throughput_labour_type); + auto current_size = state.world.province_get_advanced_province_building_national_size(pid, bid); + auto sat = state.world.province_get_labor_demand_satisfaction(pid, def.throughput_labour_type); + + if(current_size > 0.0f) { + add_budget_row(text::produce_simple_string(state, state.world.province_get_name(pid)), wage * current_size * sat); } }); } diff --git a/src/map/map_state.cpp b/src/map/map_state.cpp index d336caea9..9a605406a 100644 --- a/src/map/map_state.cpp +++ b/src/map/map_state.cpp @@ -1614,12 +1614,10 @@ void update_text_lines(sys::state& state, display_data& map_data) { float best_y_left_x = 0.f; auto sample_province = [&](float x, float y) { - while (x < 0.f) { + x = fmod(x, (float)map_data.size_x); + if (x < 0.f) { x += (float)map_data.size_x; } - while (x >= map_data.size_x) { - x -= (float)map_data.size_x; - } if(y < 0.f) return dcon::province_id{}; if((uint32_t)y >= map_data.size_y) return dcon::province_id{}; glm::vec2 candidate = { x, y }; From 2dd2a967978110614fa6fb8db528aa6937049908 Mon Sep 17 00:00:00 2001 From: ineveraskedforthis Date: Sat, 23 May 2026 12:07:16 +0300 Subject: [PATCH 2/5] fix a few trade issues --- src/economy/economy_constants.hpp | 2 +- src/economy/economy_trade_routes.cpp | 10 +++++----- src/gamestate/dcon_generated.txt | 2 +- src/map/map_state.cpp | 4 ++++ src/nations/nations.cpp | 2 +- src/provinces/province.cpp | 24 +++++++++++++++++++++++- 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/economy/economy_constants.hpp b/src/economy/economy_constants.hpp index 35af44944..5bc7ca987 100644 --- a/src/economy/economy_constants.hpp +++ b/src/economy/economy_constants.hpp @@ -27,7 +27,7 @@ inline constexpr float effect_of_transportation_scale = 0.0005f; inline constexpr float trade_distance_covered_by_pair_of_workers_per_unit_of_good = 10.f; // Huge values could cause massive spikes of demand for transportation labor inline constexpr float invalid_trade_route_distance = 0.01f; -inline constexpr float trade_loss_per_distance_unit = 0.0001f; +inline constexpr float trade_loss_per_distance_unit = 0.001f; inline constexpr float trade_effect_of_scale_lower_bound = 0.1f; inline constexpr float trade_base_multiplicative_decay = 0.0002f; inline constexpr float trade_base_additive_decay = 0.1f; diff --git a/src/economy/economy_trade_routes.cpp b/src/economy/economy_trade_routes.cpp index 96c479137..b34b11a1b 100644 --- a/src/economy/economy_trade_routes.cpp +++ b/src/economy/economy_trade_routes.cpp @@ -338,8 +338,8 @@ trade_route_volume_change_reasons predict_trade_route_volume_change( auto land_distance = state.world.trade_route_get_land_distance(route); auto sea_distance = state.world.trade_route_get_sea_distance(route); - distance = is_land_route ? std::min(distance, land_distance) : distance; - distance = is_sea_route ? std::min(distance, sea_distance) : distance; + distance = is_land_route ? land_distance : distance; + distance = is_sea_route ? sea_distance : distance; auto trade_good_loss_mult = std::max(0.f, 1.f - trade_loss_per_distance_unit * distance); @@ -463,7 +463,7 @@ trade_route_volume_change_reasons predict_trade_route_volume_change( auto buy_rate_perception_B = (optimism_confidence * std::max(expected_to_buy_B, buy_optimism) + pessimism_confidence_B * expected_to_buy_B); auto buy_transport_perception = std::min(1.f, (economy::numerical::employment_unit::epsilon / (1.f + absolute_volume) + transport_availability * 2.f)); - auto perception_divisor = (1.f + optimism_confidence + pessimism_confidence_B) * (1.f + optimism_confidence + pessimism_confidence_A); + auto perception_divisor = (optimism_confidence + pessimism_confidence_B) * (optimism_confidence + pessimism_confidence_A); auto earn_A_to_B = price_B_import * sold_boundary * sell_rate_perception_B * buy_rate_perception_A / perception_divisor * buy_transport_perception; auto earn_B_to_A = price_A_import * sold_boundary * sell_rate_perception_A * buy_rate_perception_B / perception_divisor * buy_transport_perception; @@ -765,8 +765,8 @@ void update_trade_routes_volume( auto buy_rate_perception_B = (optimism_confidence.get(c) * ve::max(expected_to_buy_B, buy_optimism) + pessimism_confidence_B * expected_to_buy_B); auto buy_transport_perception = ve::min(1.f, (economy::numerical::employment_unit::epsilon / (1.f + absolute_volume) + transport_availability * 2.f)); - auto perception_divisor_A = (ve::fp_vector{ 1.f } + optimism_confidence.get(c) + pessimism_confidence_A); - auto perception_divisor_B = (ve::fp_vector{ 1.f } + optimism_confidence.get(c) + pessimism_confidence_B); + auto perception_divisor_A = (optimism_confidence.get(c) + pessimism_confidence_A); + auto perception_divisor_B = (optimism_confidence.get(c) + pessimism_confidence_B); auto perception_divisor = perception_divisor_A * perception_divisor_B; auto earn_A_to_B = price_B_import * sold_boundary * sell_rate_perception_B * buy_rate_perception_A / perception_divisor * buy_transport_perception; diff --git a/src/gamestate/dcon_generated.txt b/src/gamestate/dcon_generated.txt index 157da3db9..f70080151 100644 --- a/src/gamestate/dcon_generated.txt +++ b/src/gamestate/dcon_generated.txt @@ -2949,7 +2949,7 @@ relationship{ object { name{ war } storage_type{ erasable } - size{ 100 } + size{ 255 } tag{ save } property{ diff --git a/src/map/map_state.cpp b/src/map/map_state.cpp index 9a605406a..834407e25 100644 --- a/src/map/map_state.cpp +++ b/src/map/map_state.cpp @@ -119,6 +119,8 @@ glm::vec2 get_army_location(sys::state& state, dcon::province_id prov_id) { } void register_trade_flow(display_data& map_data, int node1, int node2, float volume) { + assert(node1 >= 0); + assert(node2 >= 0); if(map_data.particle_next_node_probability.contains(node1)) { if(map_data.particle_next_node_probability[node1].contains(node2)) { map_data.particle_next_node_probability[node1][node2] += volume; @@ -527,6 +529,8 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { if(state.world.province_get_port_to(origin)) { map_data.trade_node_position[base_index] = get_port_location(state, origin) ; + } else { + map_data.trade_node_position[base_index] = get_army_location(state, origin); } }); diff --git a/src/nations/nations.cpp b/src/nations/nations.cpp index 8cd04dd01..dec8c4178 100644 --- a/src/nations/nations.cpp +++ b/src/nations/nations.cpp @@ -227,7 +227,7 @@ void recalculate_markets_distance(sys::state& state) { auto stats_0 = state.world.nation_get_unit_stats(owner_0, transport_0); auto stats_1 = state.world.nation_get_unit_stats(owner_1, transport_1); - auto speed = std::max(1.f, std::max(stats_0.maximum_speed, stats_1.maximum_speed)); + auto speed = std::max(0.01f, std::max(stats_0.maximum_speed, stats_1.maximum_speed)); path = province::make_sea_trade_route_path(state, coast_0, coast_1); p_prev = coast_0; diff --git a/src/provinces/province.cpp b/src/provinces/province.cpp index b7e9db8c3..6a810b836 100644 --- a/src/provinces/province.cpp +++ b/src/provinces/province.cpp @@ -2548,6 +2548,15 @@ std::vector make_sea_trade_route_path(sys::state& state, dcon auto bits = state.world.province_adjacency_get_type(adj); bool to_prov_is_land = to.index() < state.province_definitions.first_sea_province.index(); bool from_prov_is_land = from.index() < state.province_definitions.first_sea_province.index(); + // move freely in target state. + if (state.world.province_get_state_membership(end) == state.world.province_get_state_membership(to)) { + return true; + } + // move freely in origin state + if (state.world.province_get_state_membership(start) == state.world.province_get_state_membership(to)) { + return true; + } + if(to_prov_is_land) { // is land if(from_prov_is_land) { return false; // cant move directly between land provs @@ -2568,6 +2577,14 @@ std::vector make_sea_trade_route_path(sys::state& state, dcon }; auto province_func = [&](dcon::province_id to) { if(to.index() < state.province_definitions.first_sea_province.index()) { // is land + // move freely in target state. + if (state.world.province_get_state_membership(end) == state.world.province_get_state_membership(to)) { + return true; + } + // move freely in origin state + if (state.world.province_get_state_membership(start) == state.world.province_get_state_membership(to)) { + return true; + } // Land prov must be coastal to be considered return state.world.province_get_is_coast(to); @@ -2577,7 +2594,12 @@ std::vector make_sea_trade_route_path(sys::state& state, dcon }; auto modifier_func = [&](dcon::province_id to, dcon::province_id from, dcon::province_adjacency_id adj, float distance) { - return distance; + // prefer sea: + float mod = 0.2f; + if(to.index() < state.province_definitions.first_sea_province.index()) { + mod = 1.f; + } + return distance * mod; }; return make_path_to_prov<1.0f>(state, start, end, adjacency_func, province_func, modifier_func); // use default heuristic mod 1.0f to prio faster paths over accurate ones From b5deee3ee8c81f245a46659f115849c52e79228c Mon Sep 17 00:00:00 2001 From: ineveraskedforthis Date: Sat, 23 May 2026 16:18:15 +0300 Subject: [PATCH 3/5] minor adjustments --- src/economy/economy.cpp | 6 +++--- src/economy/economy_constants.hpp | 6 +++--- src/economy/price.hpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/economy/economy.cpp b/src/economy/economy.cpp index 2f3d37a99..f4bc93dbe 100644 --- a/src/economy/economy.cpp +++ b/src/economy/economy.cpp @@ -218,7 +218,7 @@ void rebalance_needs_weights(sys::state& state, dcon::market_id n) { auto wage = state.world.province_get_labor_price(capital, labor::no_education) + state.world.province_get_labor_price(capital, labor::basic_education) - + state.world.province_get_labor_price(capital, labor::high_education); + + state.world.province_get_labor_price(capital, labor::high_education) * 0.5f; { auto expected_cost = 0.f; @@ -4038,7 +4038,7 @@ void daily_update(sys::state& state, bool presimulation, float presimulation_sta + economy::price_properties::labor::min; auto no_education = state.world.province_get_labor_price(ids, labor::no_education); - target_wage = ve::min(target_wage, no_education * 0.5f); + target_wage = ve::min(target_wage, no_education * 0.05f); auto basic_education = state.world.province_get_labor_price(ids, labor::basic_education); auto high_education = state.world.province_get_labor_price(ids, labor::high_education); auto high_education_and_accepted = state.world.province_get_labor_price(ids, labor::high_education_and_accepted); @@ -4431,7 +4431,7 @@ void daily_update(sys::state& state, bool presimulation, float presimulation_sta price_control = price_control - * state.world.province_get_labor_supply_sold(ids, i) + * ve::max(0.f, state.world.province_get_labor_supply_sold(ids, i) - 0.8f) * 5.f * state.world.province_get_control_ratio(ids) / state.defines.alice_needs_scaling_factor * min_wage_factor; diff --git a/src/economy/economy_constants.hpp b/src/economy/economy_constants.hpp index 5bc7ca987..bb5c9b428 100644 --- a/src/economy/economy_constants.hpp +++ b/src/economy/economy_constants.hpp @@ -59,8 +59,8 @@ inline constexpr float investment_pool_investment_per_day = 0.25f; // greed drives incomes of corresponding pops up // while making life worse on average // profit cuts change distribution of incomes -inline constexpr float aristocrats_greed = 0.2f; -inline constexpr float artisans_greed = 0.3f; +inline constexpr float aristocrats_greed = 0.1f; +inline constexpr float artisans_greed = 0.1f; inline constexpr float labor_greed_life = 0.1f; -inline constexpr float capitalists_greed = 0.4f; +inline constexpr float capitalists_greed = 0.1f; } diff --git a/src/economy/price.hpp b/src/economy/price.hpp index 2a85ed652..6bcfe591c 100644 --- a/src/economy/price.hpp +++ b/src/economy/price.hpp @@ -4,7 +4,7 @@ namespace economy { namespace price_properties { -inline constexpr float additive_smoothing = 0.001f; +inline constexpr float additive_smoothing = 0.005f; namespace common { template VALUE change(VALUE current_price, VALUE supply, VALUE demand) { From 339cb4b6caac5cfc500b4ec29089e06bca723564 Mon Sep 17 00:00:00 2001 From: ineveraskedforthis Date: Sun, 24 May 2026 19:13:19 +0300 Subject: [PATCH 4/5] add lake trade --- src/economy/economy_production.hpp | 2 +- src/economy/price.hpp | 12 ++-- src/map/map_state.cpp | 41 ++++++++++- src/nations/nations.cpp | 45 ++++++++++++ src/provinces/province.cpp | 106 +++++++++++++++++++++++++++-- 5 files changed, 195 insertions(+), 11 deletions(-) diff --git a/src/economy/economy_production.hpp b/src/economy/economy_production.hpp index eaf25b658..5bd96bb60 100644 --- a/src/economy/economy_production.hpp +++ b/src/economy/economy_production.hpp @@ -50,7 +50,7 @@ VALUE gradient_to_employment_change(VALUE gradient, VALUE wage, VALUE current_em // 100'000 hired clerks increase output by 1% inline constexpr float secondary_employment_output_bonus = 1.f / 100000.f; -inline constexpr float unqualified_throughput_multiplier = 0.2f; +inline constexpr float unqualified_throughput_multiplier = 0.075f; inline constexpr float artisans_per_employment_unit = 10'000.f; inline constexpr float construction_units_to_maintenance_units = 0.0001f; inline constexpr float expansion_trigger = 0.8f; diff --git a/src/economy/price.hpp b/src/economy/price.hpp index 6bcfe591c..7af684675 100644 --- a/src/economy/price.hpp +++ b/src/economy/price.hpp @@ -4,9 +4,8 @@ namespace economy { namespace price_properties { -inline constexpr float additive_smoothing = 0.005f; namespace common { -template +template VALUE change(VALUE current_price, VALUE supply, VALUE demand) { // avoid singularity supply = supply + additive_smoothing * 3.f; @@ -49,9 +48,10 @@ inline constexpr float min = 0.0001f; inline constexpr float max = 1'000'000'000'000.f; inline constexpr float epsilon = min * 0.1f; inline constexpr float speed_multiplier = 0.01f; +inline constexpr float additive_smoothing = 0.0075f; template VALUE change(VALUE current_price, VALUE supply, VALUE demand) { - return common::change(current_price, supply, demand); + return common::change(current_price, supply, demand); } } namespace labor { @@ -59,9 +59,10 @@ inline constexpr float min = 0.0000001f; inline constexpr float max = 1'000'000'000'000.f; inline constexpr float epsilon = min * 0.1f; inline constexpr float speed_multiplier = 0.0015f; +inline constexpr float additive_smoothing = 1.f; template VALUE change(VALUE current_price, VALUE supply, VALUE demand) { - return common::change(current_price, supply, demand); + return common::change(current_price, supply, demand); } } namespace service { @@ -69,9 +70,10 @@ inline constexpr float min = 0.0000001f; inline constexpr float max = 1'000'000'000'000.f; inline constexpr float epsilon = min * 0.1f; inline constexpr float speed_multiplier = 0.0015f; +inline constexpr float additive_smoothing = 1.f; template VALUE change(VALUE current_price, VALUE supply, VALUE demand) { - return common::change(current_price, supply, demand); + return common::change(current_price, supply, demand); } } diff --git a/src/map/map_state.cpp b/src/map/map_state.cpp index 834407e25..435c462f2 100644 --- a/src/map/map_state.cpp +++ b/src/map/map_state.cpp @@ -833,6 +833,18 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { continue; } + auto adj = state.world.get_province_adjacency_by_province_pair(source, origin); + auto adj2 = state.world.get_province_adjacency_by_province_pair(origin, target); + bool not_lake = + ( + ( + state.world.province_adjacency_get_type(adj2) + | state.world.province_adjacency_get_type(adj) + ) + & province::border::impassible_bit + ) == 0; + + // by default: connect centers of the segments between midpoints of provinces and use their tangents as start and end tangents glm::vec2 tangent_start = glm::normalize(current_pos - prev_pos); @@ -842,6 +854,8 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { // sea -> [port->land->port] -> sea if( + not_lake + && is_sea(target) && !is_sea(origin) @@ -856,7 +870,7 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { tangent_end = glm::normalize(next_pos - current_pos); start = (current_pos + prev_pos) / 2.f; end = (current_pos + next_pos) / 2.f; - } else { + } else if (not_lake) { // ??? -> sea -> [port->land] if( is_sea(origin) @@ -943,9 +957,19 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { //source -> origin + auto adj = state.world.get_province_adjacency_by_province_pair(source, origin); + bool not_lake = (state.world.province_adjacency_get_type(adj) & province::border::impassible_bit) == 0; + + /* + if(!not_lake) { + continue; + } + */ //[land->port] -> sea if( + not_lake + && !is_sea(source) && is_sea(origin) @@ -957,6 +981,8 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { //sea -> [port->land] if( + not_lake + && is_sea(source) && !is_sea(origin) @@ -991,8 +1017,19 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { //origin -> target + auto adj = state.world.get_province_adjacency_by_province_pair(origin, target); + bool not_lake = (state.world.province_adjacency_get_type(adj) & province::border::impassible_bit) == 0; + + /* + if(!not_lake) { + continue; + } + */ + //sea -> [port->land] if( + not_lake + && !is_sea(target) && is_sea(origin) @@ -1003,6 +1040,8 @@ void update_trade_flow_arrows(sys::state& state, display_data& map_data) { //[land->port] -> sea if( + not_lake + && is_sea(target) && !is_sea(origin) diff --git a/src/nations/nations.cpp b/src/nations/nations.cpp index dec8c4178..8d62bf104 100644 --- a/src/nations/nations.cpp +++ b/src/nations/nations.cpp @@ -306,6 +306,10 @@ void recalculate_markets_distance(sys::state& state) { local_effective_distance = local_effective_distance / 2.f; } + if(bits & province::border::coastal_bit) { + local_effective_distance = local_effective_distance / 2.f; + } + effective_distance += std::max(0.01f, local_effective_distance); if(sum_mods > worst_movement_cost) worst_movement_cost = std::max(0.01f, sum_mods); @@ -660,6 +664,47 @@ void generate_initial_trade_routes(sys::state& state) { trade_route_candidates.insert(other.get_state_membership().id.value); } } + + /* + Create trade routes through lakes. + Lake coasts have both impassible bit and coastal bit + */ + for(auto adj : state.world.province_get_province_adjacency(prov)) { + auto bits = adj.get_type(); + if((bits & province::border::impassible_bit) == 0) { + continue; + } + if((bits & province::border::coastal_bit) == 0) { + continue; + } + + auto through = + adj.get_connected_provinces(0) != prov + ? adj.get_connected_provinces(0) + : adj.get_connected_provinces(1); + + for(auto adj2 : state.world.province_get_province_adjacency(through)) { + auto bits2 = adj2.get_type(); + if((bits2 & province::border::impassible_bit) == 0) { + continue; + } + if((bits2 & province::border::coastal_bit) == 0) { + continue; + } + auto other = + adj2.get_connected_provinces(0) != through + ? adj2.get_connected_provinces(0) + : adj2.get_connected_provinces(1); + if(!other.get_state_membership()) + continue; + if(other.get_state_membership() == sid) + continue; + if(trade_route_candidates.contains(other.get_state_membership().id.value)) + continue; + + trade_route_candidates.insert(other.get_state_membership().id.value); + } + } }); for(auto candidate_trade_partner_val : trade_route_candidates) { diff --git a/src/provinces/province.cpp b/src/provinces/province.cpp index 6a810b836..e7af08be3 100644 --- a/src/provinces/province.cpp +++ b/src/provinces/province.cpp @@ -1168,6 +1168,47 @@ void change_province_owner(sys::state& state, dcon::province_id id, dcon::nation } } + /* + Create trade routes through lakes. + Lake coasts have both impassible bit and coastal bit + */ + for(auto adj : state.world.province_get_province_adjacency(id)) { + auto bits = adj.get_type(); + if((bits & province::border::impassible_bit) == 0) { + continue; + } + if((bits & province::border::coastal_bit) == 0) { + continue; + } + + auto through = + adj.get_connected_provinces(0) != id + ? adj.get_connected_provinces(0) + : adj.get_connected_provinces(1); + + for(auto adj2 : state.world.province_get_province_adjacency(through)) { + auto bits2 = adj2.get_type(); + if((bits2 & province::border::impassible_bit) == 0) { + continue; + } + if((bits2 & province::border::coastal_bit) == 0) { + continue; + } + auto other = + adj2.get_connected_provinces(0) != through + ? adj2.get_connected_provinces(0) + : adj2.get_connected_provinces(1); + if(!other.get_state_membership()) + continue; + if(other.get_state_membership() == new_si) + continue; + if(trade_route_candidates.contains(other.get_state_membership().id.value)) + continue; + + trade_route_candidates.insert(other.get_state_membership().id.value); + } + } + for(auto candidate_trade_partner_val : trade_route_candidates) { auto si = dcon::state_instance_id{ uint16_t(candidate_trade_partner_val - 1) }; auto target_market = state.world.state_instance_get_market_from_local_market(si); @@ -1231,6 +1272,49 @@ void change_province_owner(sys::state& state, dcon::province_id id, dcon::nation } } + /* + Create trade routes through lakes. + Lake coasts have both impassible bit and coastal bit + */ + for(auto adj : state.world.province_get_province_adjacency(id)) { + auto bits = adj.get_type(); + if((bits & province::border::impassible_bit) == 0) { + continue; + } + if((bits & province::border::coastal_bit) == 0) { + continue; + } + + auto through = + adj.get_connected_provinces(0) != id + ? adj.get_connected_provinces(0) + : adj.get_connected_provinces(1); + + for(auto adj2 : state.world.province_get_province_adjacency(through)) { + auto bits2 = adj2.get_type(); + if((bits2 & province::border::impassible_bit) == 0) { + continue; + } + if((bits2 & province::border::coastal_bit) == 0) { + continue; + } + auto other = + adj2.get_connected_provinces(0) != through + ? adj2.get_connected_provinces(0) + : adj2.get_connected_provinces(1); + if(!other.get_state_membership()) + continue; + if(other.get_state_membership() == new_si) + continue; + if(old_trade_routes.contains(other.get_state_membership().id.value)) + continue; + if(trade_route_candidates.contains(other.get_state_membership().id.value)) + continue; + + trade_route_candidates.insert(other.get_state_membership().id.value); + } + } + for(auto candidate_trade_partner_val : trade_route_candidates) { auto si = dcon::state_instance_id{ uint16_t(candidate_trade_partner_val - 1) }; auto target_market = state.world.state_instance_get_market_from_local_market(si); @@ -2441,17 +2525,28 @@ std::vector make_safe_land_path(sys::state& state, dcon::prov } -// used for land trade (is allowed to path though sea provinces though) +/* +Generates the path for land trade +Allowed to path through sea provinces. +Becase there states which can have land connection with other states while being split by sea +*/ std::vector make_land_trade_path(sys::state& state, dcon::province_id start, dcon::province_id end) { auto adjacency_func = [&](dcon::province_id to, dcon::province_id from, dcon::province_adjacency_id adj) { auto bits = state.world.province_adjacency_get_type(adj); - return (bits & province::border::impassible_bit) == 0; + // allow going into lakes + return + (bits & province::border::impassible_bit) == 0 + || ( + (bits & province::border::impassible_bit) != 0 + && (bits & province::border::coastal_bit) != 0 + ); }; + auto province_func = [&](dcon::province_id to) { return true; - }; + auto modifier_func = [&](dcon::province_id to, dcon::province_id from, dcon::province_adjacency_id adj, float distance) { auto bits = state.world.province_adjacency_get_type(adj); auto railroad_origin = state.world.province_get_building_level(from, uint8_t(economy::province_building_type::railroad)); @@ -2463,8 +2558,11 @@ std::vector make_land_trade_path(sys::state& state, dcon::pro if(bits & province::border::river_connection_bit) { distance = distance / 2.f; } + // lakes reduce distance even further: + if(bits & province::border::coastal_bit) { + distance = distance / 2.f; + } return distance; - }; return make_path_to_prov<0.25f>(state, start, end, adjacency_func, province_func, modifier_func); // multiply heuristic by 0.25 for more optimal paths (and the paths generally being small) From 334ae917eb79646aaefa3803e4a38b1ad0d525b1 Mon Sep 17 00:00:00 2001 From: ineveraskedforthis Date: Mon, 25 May 2026 12:30:10 +0300 Subject: [PATCH 5/5] replace to_string in ffi triggers to avoid precision errors --- src/economy/demographics.cpp | 12 +- src/economy/demographics_templates.hpp | 26 +- src/economy/economy.cpp | 23 +- src/gamestate/dcon_generated.txt | 15 - src/gui/budgetwindow.cpp | 7 +- src/scripting/fif.hpp | 46 +- src/scripting/fif_triggers.cpp | 1037 ++++++++++++------------ 7 files changed, 547 insertions(+), 619 deletions(-) diff --git a/src/economy/demographics.cpp b/src/economy/demographics.cpp index 07645994f..ddc80fefa 100644 --- a/src/economy/demographics.cpp +++ b/src/economy/demographics.cpp @@ -76,16 +76,16 @@ void set_consciousness(sys::state& state, T p, ve::fp_vector v) { state.world.pop_set_uconsciousness(p, to_pmc(v)); } float get_life_needs(sys::state const& state, dcon::pop_id p) { - auto ival = state.world.pop_get_ulife_needs_satisfaction(p); - return from_pu8(ival); + auto value = state.world.pop_get_satisfaction(p); + return std::min(value * 3.f, 1.f); } float get_everyday_needs(sys::state const& state, dcon::pop_id p) { - auto ival = state.world.pop_get_ueveryday_needs_satisfaction(p); - return from_pu8(ival); + auto value = state.world.pop_get_satisfaction(p); + return std::clamp(value* 3.f - 1.f, 0.f, 1.f); } float get_luxury_needs(sys::state const& state, dcon::pop_id p) { - auto ival = state.world.pop_get_uluxury_needs_satisfaction(p); - return from_pu8(ival); + auto value = state.world.pop_get_satisfaction(p); + return std::clamp(value* 3.f - 2.f, 0.f, 1.f); } float get_literacy(sys::state const& state, dcon::pop_id p) { auto ival = state.world.pop_get_uliteracy(p); diff --git a/src/economy/demographics_templates.hpp b/src/economy/demographics_templates.hpp index 8750029dd..79504e816 100644 --- a/src/economy/demographics_templates.hpp +++ b/src/economy/demographics_templates.hpp @@ -2,21 +2,9 @@ #include "system_state.hpp" #include "demographics.hpp" +#include "adaptive_ve.hpp" namespace pop_demographics { -template -void set_life_needs(sys::state& state, P p, V v) { - state.world.pop_set_ulife_needs_satisfaction(p, to_pu8(v)); -} -template -void set_everyday_needs(sys::state& state, P p, V v) { - state.world.pop_set_ueveryday_needs_satisfaction(p, to_pu8(v)); -} -template -void set_luxury_needs(sys::state& state, P p, V v) { - state.world.pop_set_uluxury_needs_satisfaction(p, to_pu8(v)); -} - template auto get_employment(sys::state const& state, T p) { auto ival = state.world.pop_get_uemployment(p); @@ -58,18 +46,18 @@ void set_literacy(sys::state& state, P p, V v) { } template auto get_life_needs(sys::state const& state, T p) { - auto ival = state.world.pop_get_ulife_needs_satisfaction(p); - return from_pu8(ival); + auto val = state.world.pop_get_satisfaction(p); + return adaptive_ve::min(val * 3.f, 1.f); } template auto get_everyday_needs(sys::state const& state, T p) { - auto ival = state.world.pop_get_ueveryday_needs_satisfaction(p); - return from_pu8(ival); + auto val = state.world.pop_get_satisfaction(p); + return adaptive_ve::max(adaptive_ve::min(val * 3.f - 1.f, 1.f), 0.f); } template auto get_luxury_needs(sys::state const& state, T p) { - auto ival = state.world.pop_get_uluxury_needs_satisfaction(p); - return from_pu8(ival); + auto val = state.world.pop_get_satisfaction(p); + return adaptive_ve::max(adaptive_ve::min(val * 3.f - 2.f, 1.f), 0.f); } template auto get_demo(sys::state const& state, T p, dcon::pop_demographics_key k) { diff --git a/src/economy/economy.cpp b/src/economy/economy.cpp index f4bc93dbe..7c7633091 100644 --- a/src/economy/economy.cpp +++ b/src/economy/economy.cpp @@ -557,9 +557,7 @@ void initialize(sys::state& state) { state.world.for_each_pop([&](dcon::pop_id p) { auto fp = fatten(state.world, p); - pop_demographics::set_life_needs(state, p, 1.0f); - pop_demographics::set_everyday_needs(state, p, 0.1f); - pop_demographics::set_luxury_needs(state, p, 0.0f); + state.world.pop_set_satisfaction(p, 0.4f); fp.set_savings(fp.get_size() * expected_savings); }); @@ -3772,25 +3770,6 @@ void daily_update(sys::state& state, bool presimulation, float presimulation_sta satisfaction = satisfaction * 0.999f + satisfaction_gain * 0.001f / 3.f; state.world.pop_set_satisfaction(ids, satisfaction); - - //auto ln = pop_demographics::get_life_needs(state, ids); - //auto en = pop_demographics::get_everyday_needs(state, ids); - //auto lx = pop_demographics::get_luxury_needs(state, ids); - - //ln = ve::min(1.f, ve::max(0.f, ln + 2.f * (potential_ratio_life.get(ids) * (ln_satisfaction + satisfaction_from_subsistence.get(ids)) - 1.f) * pop_demographics::pop_u8_scaling)); - //en = ve::min(1.f, ve::max(0.f, en + 2.f * (potential_ratio_everyday.get(ids) * en_satisfaction - 1.f) * pop_demographics::pop_u8_scaling)); - //lx = ve::min(1.f, ve::max(0.f, lx + 2.f * (potential_ratio_luxury.get(ids) * lx_satisfaction - 1.f) * pop_demographics::pop_u8_scaling)); - - satisfaction = satisfaction * 3.f; - auto ln = ve::min(1.f, satisfaction); - satisfaction = satisfaction - 1.f; - auto en = ve::max(0.f, ve::min(1.f, satisfaction)); - satisfaction = satisfaction - 1.f; - auto lx = ve::max(0.f, ve::min(1.f, satisfaction)); - - pop_demographics::set_life_needs(state, ids, ln); - pop_demographics::set_everyday_needs(state, ids, en); - pop_demographics::set_luxury_needs(state, ids, lx); } { diff --git a/src/gamestate/dcon_generated.txt b/src/gamestate/dcon_generated.txt index f70080151..362c4ab3f 100644 --- a/src/gamestate/dcon_generated.txt +++ b/src/gamestate/dcon_generated.txt @@ -5433,21 +5433,6 @@ object { type{ float } tag{ save } } - property{ - name{ ulife_needs_satisfaction } - type{ uint8_t } - tag{ save } - } - property{ - name{ ueveryday_needs_satisfaction } - type{ uint8_t } - tag{ save } - } - property{ - name{ uluxury_needs_satisfaction } - type{ uint8_t } - tag{ save } - } property { name{ upolitical_reform_desire } type{ uint8_t } diff --git a/src/gui/budgetwindow.cpp b/src/gui/budgetwindow.cpp index 4909c4af1..e95b1d1c0 100644 --- a/src/gui/budgetwindow.cpp +++ b/src/gui/budgetwindow.cpp @@ -1472,12 +1472,9 @@ void budgetwindow_main_welfare_chart_poor_t::on_update(sys::state& state) noexce auto pop_strata = state.world.pop_type_get_strata(state.world.pop_get_poptype(pop_id)); auto pop_size = pop_strata == uint8_t(culture::pop_strata::poor) ? state.world.pop_get_size(pop_id) : 0.f; - float total = - pop_demographics::get_luxury_needs(state, pop_id) - + pop_demographics::get_everyday_needs(state, pop_id) - + pop_demographics::get_life_needs(state, pop_id); + float total = state.world.pop_get_satisfaction(pop_id); - if(total / 3.f >= cutoff) + if(total >= cutoff) value += pop_size; integral += total / 3.f * pop_size; diff --git a/src/scripting/fif.hpp b/src/scripting/fif.hpp index c937f321c..cd8dc174a 100644 --- a/src/scripting/fif.hpp +++ b/src/scripting/fif.hpp @@ -1110,48 +1110,10 @@ inline double pow_10(int n) { } inline bool float_from_chars(char const* start, char const* end, float& float_out) { // returns true on success - // first read the chars into an int, keeping track of the magnitude - // multiply by a pow of 10 - - int32_t magnitude = 0; - int64_t accumulated = 0; - bool after_decimal = false; - - if(start == end) { - float_out = 0.0f; - return true; - } - - bool is_negative = false; - if(*start == '-') { - is_negative = true; - ++start; - } else if(*start == '+') { - ++start; - } - - for(; start < end; ++start) { - if(*start >= '0' && *start <= '9') { - accumulated = accumulated * 10 + (*start - '0'); - magnitude += int32_t(after_decimal); - } else if(*start == '.') { - after_decimal = true; - } else { - // maybe check for non space and throw an error? - } - } - if(!is_negative) { - if(magnitude > 0) - float_out = float(double(accumulated) / pow_10(magnitude)); - else - float_out = float(accumulated); - } else { - if(magnitude > 0) - float_out = -float(double(accumulated) / pow_10(magnitude)); - else - float_out = -float(accumulated); - } - return true; + float decoded; + auto [ptr, ec] = std::from_chars(start, end, decoded, std::chars_format::fixed); + float_out = decoded; + return ec == std::errc(); } inline int32_t parse_int(std::string_view content) { diff --git a/src/scripting/fif_triggers.cpp b/src/scripting/fif_triggers.cpp index 56ef7e8f0..4131347fd 100644 --- a/src/scripting/fif_triggers.cpp +++ b/src/scripting/fif_triggers.cpp @@ -75,6 +75,23 @@ using namespace fif; } } +std::string float_to_string(float f) { + const size_t buf_size = 256; + char buf[buf_size]{}; + auto result = std::to_chars(buf, buf + buf_size, f, std::chars_format::fixed, 20); + std::string str(buf, result.ptr - buf); + return str; +} + +template +std::string value_to_string(T f) { + if constexpr(std::is_same_v) { + return float_to_string(f); + } else { + return std::to_string(f); + } +} + float read_float_from_payload(uint16_t const* data) { union { struct { @@ -814,7 +831,7 @@ TRIGGER_FUNCTION(tf_x_pop_scope_nation) { } TRIGGER_FUNCTION(tf_x_provinces_in_variable_region) { if(*tval & trigger::is_existence_scope) { - return ">r false >r " + std::to_string(trigger::payload(*(tval + 2)).state_id.index()) + " >state_definition_id make-asp-it " + return ">r false >r " + value_to_string(trigger::payload(*(tval + 2)).state_id.index()) + " >state_definition_id make-asp-it " "while more? r@ not and " "loop " "next " // n on top @@ -826,7 +843,7 @@ TRIGGER_FUNCTION(tf_x_provinces_in_variable_region) { "drop r> r> swap " // drop it, move stored to stack, move bool to stack ; } else { - return ">r true >r " + std::to_string(trigger::payload(*(tval + 2)).state_id.index()) + " >state_definition_id make-asp-it " + return ">r true >r " + value_to_string(trigger::payload(*(tval + 2)).state_id.index()) + " >state_definition_id make-asp-it " "while more? r@ and " "loop " "next " // n on top @@ -841,7 +858,7 @@ TRIGGER_FUNCTION(tf_x_provinces_in_variable_region) { } TRIGGER_FUNCTION(tf_x_provinces_in_variable_region_proper) { if(*tval & trigger::is_existence_scope) { - return ">r false >r " + std::to_string(trigger::payload(*(tval + 2)).reg_id.index()) + " >region_id make-arp-it " + return ">r false >r " + value_to_string(trigger::payload(*(tval + 2)).reg_id.index()) + " >region_id make-arp-it " "while more? r@ not and " "loop " "next " // n on top @@ -853,7 +870,7 @@ TRIGGER_FUNCTION(tf_x_provinces_in_variable_region_proper) { "drop r> r> swap " // drop it, move stored to stack, move bool to stack ; } else { - return ">r true >r " + std::to_string(trigger::payload(*(tval + 2)).reg_id.index()) + " >region_id make-arp-it " + return ">r true >r " + value_to_string(trigger::payload(*(tval + 2)).reg_id.index()) + " >region_id make-arp-it " "while more? r@ and " "loop " "next " // n on top @@ -1027,7 +1044,7 @@ TRIGGER_FUNCTION(tf_tag_scope) { auto tag = trigger::payload(tval[2]).tag_id; std::string result; - result += ">r " + std::to_string(tag.index()) + " >national_identity_id identity_holder-identity nation @ "; + result += ">r " + value_to_string(tag.index()) + " >national_identity_id identity_holder-identity nation @ "; result += apply_subtriggers(tval, ws); result += "swap drop r> swap "; // put original under result value return result; @@ -1036,7 +1053,7 @@ TRIGGER_FUNCTION(tf_integer_scope) { auto wprov = trigger::payload(tval[2]).prov_id; std::string result; - result += ">r " + std::to_string(wprov.index()) + " >province_id "; + result += ">r " + value_to_string(wprov.index()) + " >province_id "; result += apply_subtriggers(tval, ws); result += "swap drop r> swap "; // put original under result value return result; @@ -1064,41 +1081,41 @@ TRIGGER_FUNCTION(tf_cultural_union_scope_pop) { // TRIGGER_FUNCTION(tf_year) { - return "start-date @ current-date @ >i64 -1 >i64 + + current-year " + std::to_string(int32_t(tval[1])) + compare_values(tval[0]); + return "start-date @ current-date @ >i64 -1 >i64 + + current-year " + value_to_string(int32_t(tval[1])) + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_month) { - return "start-date @ current-date @ >i64 -1 >i64 + + current-month " + std::to_string(int32_t(tval[1])) + compare_values(tval[0]); + return "start-date @ current-date @ >i64 -1 >i64 + + current-month " + value_to_string(int32_t(tval[1])) + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_port) { return "dup is_coast @ "; } TRIGGER_FUNCTION(tf_rank) { // note: comparison reversed since rank 1 is "greater" than rank 1 + N - return "dup get_rank @ >i32 " + std::to_string(int32_t(tval[1])) + " swap " + compare_values(tval[0]); + return "dup get_rank @ >i32 " + value_to_string(int32_t(tval[1])) + " swap " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_technology) { - return "dup " + std::to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_technology_province) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_technology_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).tech_id.index()) + " >technology_id active_technologies @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_strata_rich) { - return "dup poptype @ strata @ " + std::to_string(int32_t(culture::pop_strata::rich)) + " >u8 " + compare_values_eq(tval[0]); + return "dup poptype @ strata @ " + value_to_string(int32_t(culture::pop_strata::rich)) + " >u8 " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_strata_middle) { - return "dup poptype @ strata @ " + std::to_string(int32_t(culture::pop_strata::middle)) + " >u8 " + compare_values_eq(tval[0]); + return "dup poptype @ strata @ " + value_to_string(int32_t(culture::pop_strata::middle)) + " >u8 " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_strata_poor) { - return "dup poptype @ strata @ " + std::to_string(int32_t(culture::pop_strata::poor)) + " >u8 " + compare_values_eq(tval[0]); + return "dup poptype @ strata @ " + value_to_string(int32_t(culture::pop_strata::poor)) + " >u8 " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_life_rating_province) { - return "dup life_rating @ " + std::to_string(trigger::payload(tval[1]).signed_value) + " >u8 " + compare_values(tval[0]); + return "dup life_rating @ " + value_to_string(trigger::payload(tval[1]).signed_value) + " >u8 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_life_rating_state) { - return "dup capital @ life_rating @ " + std::to_string(trigger::payload(tval[1]).signed_value) + " >u8 " + compare_values(tval[0]); + return "dup capital @ life_rating @ " + value_to_string(trigger::payload(tval[1]).signed_value) + " >u8 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_has_empty_adjacent_state_province) { @@ -1142,11 +1159,11 @@ TRIGGER_FUNCTION(tf_has_empty_adjacent_state_state) { } TRIGGER_FUNCTION(tf_state_id_province) { return "dup abstract_state_membership-province state @ " - + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id abstract_state_membership-province state @ = " + truth_inversion(tval[0]); + + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id abstract_state_membership-province state @ = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_state_id_state) { return "dup definition @ " - + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id abstract_state_membership-province state @ = " + truth_inversion(tval[0]); + + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id abstract_state_membership-province state @ = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_cash_reserves) { return "true " + truth_inversion(tval[0]); @@ -1159,28 +1176,28 @@ TRIGGER_FUNCTION(tf_cash_reserves) { TRIGGER_FUNCTION(tf_unemployment_nation) { - return "dup " + std::to_string(demographics::employable.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); + return "dup " + value_to_string(demographics::employable.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); //auto total_employable = ws.world.nation_get_demographics(to_nation(primary_slot), demographics::employable); //auto total_employed = ws.world.nation_get_demographics(to_nation(primary_slot), demographics::employed); //return compare_values(tval[0], ve::select(total_employable > 0.0f, 1.0f - (total_employed / total_employable), 0.0f), // read_float_from_payload(tval + 1)); } TRIGGER_FUNCTION(tf_unemployment_state) { - return "dup " + std::to_string(demographics::employable.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); + return "dup " + value_to_string(demographics::employable.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_unemployment_province) { - return "dup " + std::to_string(demographics::employable.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); + return "dup " + value_to_string(demographics::employable.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::employed.index()) + " >demographics_key demographics @ 1.0 swap r@ / - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_unemployment_pop) { return "dup poptype @ has_unemployment @ not >r " - "dup uemployment @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * 1.0 swap - 0.0 r> select " - + std::to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); + "dup uemployment @ >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * 1.0 swap - 0.0 r> select " + + value_to_string(read_float_from_payload(tval + 1)) + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_slave_nation) { - return "dup combined_issue_rules @ >i32 " + std::to_string(issue_rule::slavery_allowed) + " and 0 <> " + truth_inversion(tval[0]); + return "dup combined_issue_rules @ >i32 " + value_to_string(issue_rule::slavery_allowed) + " and 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_slave_state) { return "dup capital @ is_slave @ " + truth_inversion(tval[0]); @@ -1189,60 +1206,60 @@ TRIGGER_FUNCTION(tf_is_slave_province) { return "dup is_slave @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_slave_pop) { - return "dup poptype @ >index " + std::to_string(ws.culture_definitions.slaves.index()) + " " + compare_values_eq(tval[0]); + return "dup poptype @ >index " + value_to_string(ws.culture_definitions.slaves.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_independant) { return "dup overlord-subject ruler @ valid? not " + truth_inversion(tval[0]); } std::string demo_culture_key(sys::state& ws) { - return ">index " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key "; + return ">index " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key "; } TRIGGER_FUNCTION(tf_has_national_minority_province) { return "dup dup " + province_to_owner() + " primary_culture @ " + demo_culture_key(ws) + "demographics @ >r " - "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]); + "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_national_minority_state) { return "dup dup " + state_to_owner() + " primary_culture @ " + demo_culture_key(ws) + "demographics @ >r " - "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]); + "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_national_minority_nation) { return "dup dup primary_culture @ " + demo_culture_key(ws) + "demographics @ >r " - "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]); + "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ r> <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_government_nation) { - return "dup government_type @ >index " + std::to_string(trigger::payload(tval[1]).gov_id.index()) + " " + compare_values_eq(tval[0]); + return "dup government_type @ >index " + value_to_string(trigger::payload(tval[1]).gov_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_government_pop) { - return "dup " + pop_to_owner() + "government_type @ >index " + std::to_string(trigger::payload(tval[1]).gov_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + "government_type @ >index " + value_to_string(trigger::payload(tval[1]).gov_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_capital) { - return "dup capital @ >index " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " " + compare_values_eq(tval[0]); + return "dup capital @ >index " + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_tech_school) { - return "dup tech_school @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup tech_school @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_primary_culture) { - return "dup primary_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); + return "dup primary_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_primary_culture_pop) { - return "dup " + pop_to_owner() + "primary_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + "primary_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_accepted_culture) { - return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " >culture_id accepted_cultures @ " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " >culture_id accepted_cultures @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_culture_pop) { - return "dup culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); + return "dup culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_state) { - return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); + return "dup dominant_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_province) { - return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); + return "dup dominant_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_nation) { - return "dup primary_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = >r " - "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " >culture_id accepted_cultures @ r> or " + truth_inversion(tval[0]); + return "dup primary_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " = >r " + "dup " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " >culture_id accepted_cultures @ r> or " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_culture_pop_reb) { return ">r >r dup primary_culture @ >index r> swap r> swap >r dup culture @ >index r> " + compare_values_eq(tval[0]); @@ -1278,16 +1295,16 @@ TRIGGER_FUNCTION(tf_culture_this_province) { "r> r> swap >r accepted_cultures @ r> or " + truth_inversion(tval[0]) + "r> swap "; } TRIGGER_FUNCTION(tf_culture_group_nation) { - return "dup primary_culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); + return "dup primary_culture @ culture_group_membership-member group @ >index " + value_to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_group_pop) { - return "dup culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); + return "dup culture @ culture_group_membership-member group @ >index " + value_to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_group_province) { - return "dup dominant_culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); + return "dup dominant_culture @ culture_group_membership-member group @ >index " + value_to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_group_state) { - return "dup dominant_culture @ culture_group_membership-member group @ >index " + std::to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); + return "dup dominant_culture @ culture_group_membership-member group @ >index " + value_to_string(trigger::payload(tval[1]).culgrp_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_culture_group_reb_nation) { return "dup primary_culture @ culture_group_membership-member group @ >r >r >r dup primary_culture @ culture_group_membership-member group @ r> swap r> swap r> = " + truth_inversion(tval[0]); @@ -1326,7 +1343,7 @@ TRIGGER_FUNCTION(tf_culture_group_pop_this_pop) { return "dup culture @ culture_group_membership-member group @ >r >r dup " + pop_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_religion) { - return "dup religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]); + return "dup religion @ >index " + value_to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_religion_reb) { return ">r >r dup religion @ >index r> swap r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]); @@ -1347,39 +1364,39 @@ TRIGGER_FUNCTION(tf_religion_this_pop) { return ">r dup " + pop_to_owner() + "religion @ >index r> swap >r dup religion @ >index r> " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_terrain_province) { - return "dup terrain @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup terrain @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_terrain_pop) { - return "dup " + pop_to_location() + "terrain @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_location() + "terrain @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_trade_goods) { - return "dup rgo @ >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " " + compare_values_eq(tval[0]); + return "dup rgo @ >index " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_secondary_power_nation) { - return "dup rank @ >i32 " + std::to_string(int32_t(ws.defines.colonial_rank)) + " <= " + truth_inversion(tval[0]); + return "dup rank @ >i32 " + value_to_string(int32_t(ws.defines.colonial_rank)) + " <= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_secondary_power_pop) { - return "dup " + pop_to_owner() + "rank @ >i32 " + std::to_string(int32_t(ws.defines.colonial_rank)) + " <= " + truth_inversion(tval[0]); + return "dup " + pop_to_owner() + "rank @ >i32 " + value_to_string(int32_t(ws.defines.colonial_rank)) + " <= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_faction_nation) { return "false >r dup rebellion_within-ruler dup size " "while 1 - dup 0 >= loop " - "2dup index @ rebels type @ >index " + std::to_string(trigger::payload(tval[1]).reb_id.index()) + " = r> or >r " + "2dup index @ rebels type @ >index " + value_to_string(trigger::payload(tval[1]).reb_id.index()) + " = r> or >r " "end-while " "drop drop " "r> " + truth_inversion(tval[0]); ; } TRIGGER_FUNCTION(tf_has_faction_pop) { - return "dup pop_rebellion_membership-pop type @ >index " + std::to_string(trigger::payload(tval[1]).reb_id.index()) + " " + compare_values_eq(tval[0]); + return "dup pop_rebellion_membership-pop type @ >index " + value_to_string(trigger::payload(tval[1]).reb_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_has_unclaimed_cores) { return "dup >index state-ptr @ unowned-core " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_have_core_in_nation_tag) { - return "dup identity_holder-nation @ identity >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id identity_holder-identity nation @ >index state-ptr @ core-in-nation " + truth_inversion(tval[0]); + return "dup identity_holder-nation @ identity >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id identity_holder-identity nation @ >index state-ptr @ core-in-nation " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_have_core_in_nation_this) { return "dup identity_holder-nation @ identity >index >r >r dup >index r> swap r> swap state-ptr @ core-in-nation " + truth_inversion(tval[0]); @@ -1421,44 +1438,44 @@ TRIGGER_FUNCTION(tf_is_cultural_union_this_rebel) { } TRIGGER_FUNCTION(tf_is_cultural_union_tag_nation) { return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " "r> or " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_pop) { return ">r dup culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = r> swap " + truth_inversion(tval[0]); + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " = r> swap " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_state) { return ">r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " "dup " + state_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " "r> or r> swap" + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_province) { return ">r dup " + state_to_owner() + "primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " "dup " + state_to_owner() + "identity_holder-nation @ identity cultural_union_of-identity @ culture_group " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " "r> or r> swap" + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_cultural_union_tag_this_nation) { return ">r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " = >r " "dup identity_holder-nation @ identity cultural_union_of-identity @ culture_group " - + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " + + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id cultural_union_of-identity @ culture_group = " "r> or r> swap" + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_factory_nation) { - return "dup combined_issue_rules @ >i32 " + std::to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]); + return "dup combined_issue_rules @ >i32 " + value_to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_factory_province) { - return "dup " + province_to_owner() + "combined_issue_rules @ >i32 " + std::to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + "combined_issue_rules @ >i32 " + value_to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_factory_pop) { - return "dup " + pop_to_owner() + "combined_issue_rules @ >i32 " + std::to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]); + return "dup " + pop_to_owner() + "combined_issue_rules @ >i32 " + value_to_string(issue_rule::pop_build_factory) + " and 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_war_nation) { return "dup is_at_war @ " + truth_inversion(tval[0]); @@ -1467,31 +1484,31 @@ TRIGGER_FUNCTION(tf_war_pop) { return "dup " + pop_to_owner() + "is_at_war @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_war_exhaustion_nation) { - return "dup war_exhaustion @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup war_exhaustion @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_war_exhaustion_province) { - return "dup " + province_to_owner() + "war_exhaustion @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + province_to_owner() + "war_exhaustion @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_war_exhaustion_pop) { - return "dup " + pop_to_owner() + "war_exhaustion @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "war_exhaustion @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_blockade) { - return "dup central_ports @ >f32 >r dup central_blockaded @ >f32 r@ / 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup central_ports @ >f32 >r dup central_blockaded @ >f32 r@ / 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_diplo_points) { - return "dup diplomatic_points @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup diplomatic_points @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_owns) { - return "dup " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_owner() + " = " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_owner() + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_owns_province) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_owner() + " = " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_owner() + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_controls) { - return "dup " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_controller() + " = " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + province_to_controller() + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_core_integer) { - return "dup " + nation_to_tag() + ">index " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " state-ptr @ core-in-province " + truth_inversion(tval[0]); + return "dup " + nation_to_tag() + ">index " + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " state-ptr @ core-in-province " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_core_this_nation) { return "dup >index >r >r dup " + nation_to_tag() + ">index r> swap r> state-ptr @ core-in-province " + truth_inversion(tval[0]); @@ -1527,23 +1544,23 @@ TRIGGER_FUNCTION(tf_is_core_boolean) { return "dup is_owner_core @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_core_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-in-province " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-in-province " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_core_pop_tag) { - return "dup " + pop_to_location() + ">index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-in-province " + truth_inversion(tval[0]); + return "dup " + pop_to_location() + ">index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-in-province " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_core_state_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-fully-state " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " swap state-ptr @ core-fully-state " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_num_of_revolts) { - return "dup rebel_controlled_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup rebel_controlled_count @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_revolt_percentage) { return "dup central_province_count @ >f32 >r dup central_rebel_controlled @ >f32 r@ / 0.0 r> 0.0 <= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_num_of_cities_int) { - return "dup owned_province_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup owned_province_count @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_num_of_cities_from_nation) { return ">r >r dup owned_province_count @ r> swap r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]); @@ -1561,16 +1578,16 @@ TRIGGER_FUNCTION(tf_num_of_cities_this_pop) { return ">r dup " + pop_to_owner() + "owned_province_count @ r> swap >r dup owned_province_count @ r> " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_num_of_ports) { - return "dup central_ports @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup central_ports @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_num_of_allies) { - return "dup allies_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup allies_count @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_num_of_vassals) { - return "dup vassals_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup vassals_count @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_owned_by_tag) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_owned_by_this_nation) { return ">r dup r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]); @@ -1588,7 +1605,7 @@ TRIGGER_FUNCTION(tf_owned_by_this_pop) { return ">r dup " + pop_to_owner() + "r> swap >r dup " + province_to_owner() + " r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_owned_by_state_tag) { - return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); + return "dup " + state_to_owner() + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_owned_by_state_this_nation) { return ">r dup r> swap >r dup " + state_to_owner() + " r> = " + truth_inversion(tval[0]); @@ -1609,31 +1626,31 @@ TRIGGER_FUNCTION(tf_exists_bool) { return "dup owned_province_count @ >i32 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_exists_tag) { - return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "owned_province_count @ >i32 0 <> " + truth_inversion(tval[0]); + return value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "owned_province_count @ >i32 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_country_flag) { - return "dup " + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_country_flag_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_country_flag_province) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_country_flag_state) { - return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); + return "dup " + state_to_owner() + value_to_string(trigger::payload(tval[1]).natf_id.index()) + " >national_flag_id flag_variables @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_continent_province) { - return "dup continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup continent @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_continent_state) { - return "dup capital @ continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup capital @ continent @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_continent_nation) { - return "dup capital @ continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup capital @ continent @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_continent_pop) { - return "dup " + pop_to_location() + "continent @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_location() + "continent @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_continent_nation_this) { return ">r dup capital @ continent @ r> swap >r dup capital @ continent @ r> = " + truth_inversion(tval[0]); @@ -1660,7 +1677,7 @@ TRIGGER_FUNCTION(tf_continent_pop_from) { return ">r >r dup capital @ continent @ r> swap r> swap >r dup " + pop_to_location() + "continent @ r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_casus_belli_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ has-cb-against " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ has-cb-against " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_casus_belli_from) { return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]); @@ -1678,7 +1695,7 @@ TRIGGER_FUNCTION(tf_casus_belli_this_pop) { return ">r >dup " + pop_to_owner() + "r> swap >r dup >index r> >index state-ptr @ has-cb-against " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_military_access_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ has-access-with " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ has-access-with " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_military_access_from) { return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]); @@ -1696,7 +1713,7 @@ TRIGGER_FUNCTION(tf_military_access_this_pop) { return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ has-access-with " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_prestige_value) { - return "dup prestige @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup prestige @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_prestige_from) { return ">r >r dup prestige @ r> swap r> swap >r dup prestige @ r> " + compare_values(tval[0]); @@ -1714,25 +1731,25 @@ TRIGGER_FUNCTION(tf_prestige_this_pop) { return ">r dup " + pop_to_owner() + "prestige @ r> swap >r dup prestige @ r> " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_badboy) { - return "dup infamy @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup infamy @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_has_building_fort) { - return "dup " + std::to_string(int32_t(economy::province_building_type::fort)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); + return "dup " + value_to_string(int32_t(economy::province_building_type::fort)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_railroad) { - return "dup " + std::to_string(int32_t(economy::province_building_type::railroad)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); + return "dup " + value_to_string(int32_t(economy::province_building_type::railroad)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_naval_base) { - return "dup " + std::to_string(int32_t(economy::province_building_type::naval_base)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); + return "dup " + value_to_string(int32_t(economy::province_building_type::naval_base)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_factory) { return "dup >index state-ptr @ has-any-factory " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_state) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).fac_id.index()) + " state-ptr @ has-factory " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).fac_id.index()) + " state-ptr @ has-factory " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_state_from_province) { - return "dup state_membership @ >index " + std::to_string(trigger::payload(tval[1]).fac_id.index()) + " state-ptr @ has-factory " + truth_inversion(tval[0]); + return "dup state_membership @ >index " + value_to_string(trigger::payload(tval[1]).fac_id.index()) + " state-ptr @ has-factory " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_factory_from_province) { return "dup state_membership @ >index state-ptr @ has-any-factory " + truth_inversion(tval[0]); @@ -1747,41 +1764,41 @@ TRIGGER_FUNCTION(tf_is_blockaded) { return "dup is_blockaded @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_country_modifier) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-nmod " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-nmod " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_country_modifier_province) { - return "dup " + province_to_owner() + ">index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-nmod " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + ">index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-nmod " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_province_modifier) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-pmod " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " state-ptr @ has-pmod " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_region) { - return "dup abstract_state_membership-province state @ >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]); + return "dup abstract_state_membership-province state @ >index " + value_to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_region_state) { - return "dup definition @ >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]); + return "dup definition @ >index " + value_to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_region_pop) { - return "dup " + pop_to_location() + "abstract_state_membership-province state @ >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_location() + "abstract_state_membership-province state @ >index " + value_to_string(trigger::payload(tval[1]).state_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_region_proper) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_region_proper_state) { - return "dup capital @ >index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]); + return "dup capital @ >index " + value_to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_region_proper_pop) { - return "dup " + pop_to_location() + ">index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]); + return "dup " + pop_to_location() + ">index " + value_to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ in-region " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_owns_region_proper) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ owns-region " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).reg_id.index()) + " state-ptr @ owns-region " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_owns_region) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).state_id.index()) + " state-ptr @ owns-state " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).state_id.index()) + " state-ptr @ owns-state " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_tag_tag) { - return "dup " + nation_to_tag() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id = " + truth_inversion(tval[0]); + return "dup " + nation_to_tag() + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_tag_this_nation) { return "2dup = " + truth_inversion(tval[0]); @@ -1796,10 +1813,10 @@ TRIGGER_FUNCTION(tf_tag_from_province) { return ">r >r dup " + province_to_owner() + " r> swap r> swap >r dup r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_tag_pop) { - return "dup " + pop_to_owner() + nation_to_tag() + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id = " + truth_inversion(tval[0]); + return "dup " + pop_to_owner() + nation_to_tag() + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_stronger_army_than_tag) { - return "dup active_regiments @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "active_regiments @ " + compare_values(tval[0]); + return "dup active_regiments @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "active_regiments @ " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_stronger_army_than_this_nation) { return ">r dup active_regiments @ r> swap >r dup active_regiments @ r> " + compare_values(tval[0]); @@ -1820,7 +1837,7 @@ TRIGGER_FUNCTION(tf_stronger_army_than_from_province) { return ">r >r dup " + province_to_owner() + "active_regiments @ r> swap r> swap >r dup active_regiments @ r> " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_neighbour_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + " >index state-ptr @ nation-a " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + " >index state-ptr @ nation-a " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_neighbour_this) { return ">r dup >index r> swap >r dup >index r> state-ptr @ nation-a " + truth_inversion(tval[0]); @@ -1850,13 +1867,13 @@ TRIGGER_FUNCTION(tf_country_units_in_state_this_pop) { return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_country_units_in_state_tag) { - return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]); + return value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index >r dup >index r> swap state-ptr @ units-in-state " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_units_in_province_value) { - return "dup >index state-ptr @ count-p-units " + std::to_string(int32_t(tval[1])) + " " + compare_values(tval[0]); + return "dup >index state-ptr @ count-p-units " + value_to_string(int32_t(tval[1])) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_units_in_province_tag) { - return "dup >index >r " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index r> state-ptr @ units-in-province " + truth_inversion(tval[0]); + return "dup >index >r " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index r> state-ptr @ units-in-province " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_units_in_province_from) { @@ -1875,7 +1892,7 @@ TRIGGER_FUNCTION(tf_units_in_province_this_pop) { return "dup >index >r >r dup " + pop_to_owner() + ">index r> swap r> state-ptr @ units-in-province " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_war_with_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ at-war? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ at-war? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_war_with_from) { return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ at-war? " + truth_inversion(tval[0]); @@ -1899,67 +1916,67 @@ TRIGGER_FUNCTION(tf_unit_has_leader) { return "dup >index state-ptr @ general-in-province? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_national_focus_state) { - return "dup owner_focus @ >index " + std::to_string(trigger::payload(tval[1]).nf_id.index()) + " " + compare_values_eq(tval[0]); + return "dup owner_focus @ >index " + value_to_string(trigger::payload(tval[1]).nf_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_has_national_focus_province) { - return "dup state_membership @ owner_focus @ >index " + std::to_string(trigger::payload(tval[1]).nf_id.index()) + " " + compare_values_eq(tval[0]); + return "dup state_membership @ owner_focus @ >index " + value_to_string(trigger::payload(tval[1]).nf_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_total_amount_of_divisions) { - return "dup active_regiments @ >i32 " + std::to_string(int32_t(tval[1])) + " " + compare_values(tval[0]); + return "dup active_regiments @ >i32 " + value_to_string(int32_t(tval[1])) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_money) { - return "dup 0 >commodity_id @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup 0 >commodity_id @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_money_province) { - return "dup " + province_to_owner() + "0 >commodity_id @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + province_to_owner() + "0 >commodity_id @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_suppression_points) { - return "dup suppression @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup suppression @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_lost_national) { - return "dup revanchism @ 1.0 swap - " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup revanchism @ 1.0 swap - " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_vassal) { return "dup overlord-subject ruler @ valid? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_ruling_party_ideology_nation) { - return "dup ruling_party @ ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]); + return "dup ruling_party @ ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_ruling_party_ideology_pop) { - return "dup " + pop_to_owner() + "ruling_party @ ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + "ruling_party @ ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_ruling_party_ideology_province) { - return "dup " + province_to_owner() + "ruling_party @ ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + province_to_owner() + "ruling_party @ ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_ruling_party) { - return "dup ruling_party @ name @ >index " + std::to_string(read_int32_t_from_payload(tval + 1)) + " " + compare_values_eq(tval[0]); + return "dup ruling_party @ name @ >index " + value_to_string(read_int32_t_from_payload(tval + 1)) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_ideology_enabled) { - return std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " >ideology_id enabled @ " + truth_inversion(tval[0]); + return value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " >ideology_id enabled @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_political_reform_want_nation) { - return "dup dup >r " + std::to_string(demographics::political_reform_desire.index()) + " >demographics_key demographics @ " + std::to_string(ws.defines.movement_support_uh_factor) + " * r> non_colonial_population @ / " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::political_reform_desire.index()) + " >demographics_key demographics @ " + value_to_string(ws.defines.movement_support_uh_factor) + " * r> non_colonial_population @ / " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_political_reform_want_pop) { - return "dup upolitical_reform_desire @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup upolitical_reform_desire @ >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_social_reform_want_nation) { - return "dup dup >r " + std::to_string(demographics::social_reform_desire.index()) + " >demographics_key demographics @ " + std::to_string(ws.defines.movement_support_uh_factor) + " * r> non_colonial_population @ / " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::social_reform_desire.index()) + " >demographics_key demographics @ " + value_to_string(ws.defines.movement_support_uh_factor) + " * r> non_colonial_population @ / " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_social_reform_want_pop) { - return "dup usocial_reform_desire @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup usocial_reform_desire @ >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_total_amount_of_ships) { - return "dup >index state-ptr @ count-ships " + std::to_string(int32_t(tval[1])) + " " + compare_values(tval[0]); + return "dup >index state-ptr @ count-ships " + value_to_string(int32_t(tval[1])) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_plurality) { - return "dup plurality @ " + std::to_string(read_float_from_payload(tval + 1)) + " 100.0 / " + compare_values(tval[0]); + return "dup plurality @ " + value_to_string(read_float_from_payload(tval + 1)) + " 100.0 / " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_plurality_pop) { - return "dup " + pop_to_owner() + "plurality @ " + std::to_string(read_float_from_payload(tval + 1)) + " 100.0 / " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "plurality @ " + value_to_string(read_float_from_payload(tval + 1)) + " 100.0 / " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_corruption) { - return "dup central_province_count @ >f32 >r dup central_crime_count @ >f32 r@ / 0.0 r> 0.0 <= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup central_province_count @ >f32 >r dup central_crime_count @ >f32 r@ / 0.0 r> 0.0 <= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_state_religion_pop) { return " dup >r r@ " + pop_to_owner() + "religion @ r> religion @ = " + truth_inversion(tval[0]); @@ -2099,7 +2116,7 @@ TRIGGER_FUNCTION(tf_is_coastal_state) { return "dup >index state-ptr @ coastal-s? @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_in_sphere_tag) { - return "dup in_sphere_of @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); + return "dup in_sphere_of @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_in_sphere_from) { return ">r >r dup r> swap r> swap >r dup in_sphere_of @ r> = " + truth_inversion(tval[0]); @@ -2118,56 +2135,56 @@ TRIGGER_FUNCTION(tf_in_sphere_this_pop) { } TRIGGER_FUNCTION(tf_produces_nation) { // TODO: adjust to local economy - return "dup " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " >commodity_id domestic_market_pool 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " >commodity_id domestic_market_pool 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_produces_province) { - return "dup rgo @ >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " " + compare_values_eq(tval[0]); + return "dup rgo @ >index " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_produces_state) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-produces? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-produces? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_produces_pop) { return "false " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_average_militancy_nation) { - return "dup dup >r " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_average_militancy_state) { - return "dup dup >r " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_average_militancy_province) { - return "dup dup >r " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::militancy.index()) + " >demographics_key demographics @ r> " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_average_consciousness_nation) { - return "dup dup >r " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_average_consciousness_state) { - return "dup dup >r " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_average_consciousness_province) { - return "dup dup >r " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + value_to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r> " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ dup >r / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_next_reform_nation) { - return "dup " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " >issue_option_id parent_issue @ issues @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index() - 1) + " " + compare_values_eq(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).opt_id.index()) + " >issue_option_id parent_issue @ issues @ >index " + value_to_string(trigger::payload(tval[1]).opt_id.index() - 1) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_next_reform_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " >issue_option_id parent_issue @ issues @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index() - 1) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).opt_id.index()) + " >issue_option_id parent_issue @ issues @ >index " + value_to_string(trigger::payload(tval[1]).opt_id.index() - 1) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_next_rreform_nation) { - return "dup " + std::to_string(trigger::payload(tval[1]).ropt_id.index()) + " >reform_option_id parent_reform @ reforms @ >index " + std::to_string(trigger::payload(tval[1]).ropt_id.index() - 1) + " " + compare_values_eq(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).ropt_id.index()) + " >reform_option_id parent_reform @ reforms @ >index " + value_to_string(trigger::payload(tval[1]).ropt_id.index() - 1) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_next_rreform_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).ropt_id.index()) + " >reform_option_id parent_reform @ reforms @ >index " + std::to_string(trigger::payload(tval[1]).ropt_id.index() - 1) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).ropt_id.index()) + " >reform_option_id parent_reform @ reforms @ >index " + value_to_string(trigger::payload(tval[1]).ropt_id.index() - 1) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_rebel_power_fraction) { return "false " + truth_inversion(tval[0]); // note: virtually unused } TRIGGER_FUNCTION(tf_recruited_percentage_nation) { - return "dup dup >r active_regiments @ >f32 r> recruitable_regiments @ >f32 dup >r / 1.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r active_regiments @ >f32 r> recruitable_regiments @ >f32 dup >r / 1.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_recruited_percentage_pop) { - return "dup " + pop_to_owner() + "dup >r active_regiments @ >f32 r> recruitable_regiments @ >f32 dup >r / 1.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "dup >r active_regiments @ >f32 r> recruitable_regiments @ >f32 dup >r / 1.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_has_culture_core) { return "dup dup >r " + pop_to_location() + ">index r> culture >index state-ptr @ has-culture-core? " + truth_inversion(tval[0]); @@ -2176,7 +2193,7 @@ TRIGGER_FUNCTION(tf_has_culture_core_province_this_pop) { return ">r dup culture @ >index r> swap >r dup >index r> state-ptr @ has-culture-core? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_nationalism) { - return "dup nationalism @ " + std::to_string(float(tval[1])) + " " + compare_values(tval[0]); + return "dup nationalism @ " + value_to_string(float(tval[1])) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_overseas) { return "dup dup >r " + province_to_owner() + "capital @ dup continent @ r@ continent @ = not r> swap >r >r " @@ -2194,7 +2211,7 @@ TRIGGER_FUNCTION(tf_controlled_by_rebels) { return "dup province_rebel_control-province rebel_faction @ valid? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_controlled_by_tag) { - return "dup " + province_to_controller() + nation_to_tag() + ">index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + province_to_controller() + nation_to_tag() + ">index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_controlled_by_from) { return ">r >r dup r> swap r> swap >r dup " + province_to_controller() + "r> = " + truth_inversion(tval[0]); @@ -2218,7 +2235,7 @@ TRIGGER_FUNCTION(tf_controlled_by_reb) { return ">r >r dup r> swap r> swap >r dup province_rebel_control-province rebel_faction @ r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_canal_enabled) { - return std::to_string(tval[1] - 1) + " state-ptr @ canal-enabled? " + truth_inversion(tval[0]); + return value_to_string(tval[1] - 1) + " state-ptr @ canal-enabled? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_state_capital) { return "dup dup >r state_membership @ capital @ r> = " + truth_inversion(tval[0]); @@ -2227,7 +2244,7 @@ TRIGGER_FUNCTION(tf_is_state_capital_pop) { return "dup " + pop_to_location() + "dup >r state_membership @ capital @ r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_truce_with_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ truce-with? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ truce-with? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_truce_with_from) { return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]); @@ -2245,34 +2262,34 @@ TRIGGER_FUNCTION(tf_truce_with_this_pop) { return ">r dup " + pop_to_owner() + "r> swap >r dup >index r> >index state-ptr @ truce-with? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_total_pops_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_total_pops_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_total_pops_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_total_pops_pop) { - return "dup " + pop_to_location() + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_type_nation) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_type_state) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_type_province) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[1]).popt_id.index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_type_pop) { - return "dup poptype @ >index " + std::to_string(trigger::payload(tval[1]).popt_id.index()) + " = " + truth_inversion(tval[0]); + return "dup poptype @ >index " + value_to_string(trigger::payload(tval[1]).popt_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_empty_adjacent_province) { return "dup >index state-ptr @ empty-a-province " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_leader) { - return "dup >index " + std::to_string(read_int32_t_from_payload(tval + 1)) + " state-ptr @ has-named-leader? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(read_int32_t_from_payload(tval + 1)) + " state-ptr @ has-named-leader? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_ai) { return "dup is_player_controlled @ not " + truth_inversion(tval[0]); @@ -2293,13 +2310,13 @@ TRIGGER_FUNCTION(tf_can_create_vassals) { + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_possible_vassal) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " state-ptr @ can-release? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " state-ptr @ can-release? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_province_id) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).prov_id.index()) + " " + compare_values_eq(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).prov_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_vassal_of_tag) { - return "dup overlord-subject ruler @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); + return "dup overlord-subject ruler @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_vassal_of_from) { return ">r >r dup r> swap r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]); @@ -2317,7 +2334,7 @@ TRIGGER_FUNCTION(tf_vassal_of_this_pop) { return ">r dup " + pop_to_owner() + "r> swap >r dup overlord-subject ruler @ = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_vassal_of_province_tag) { - return "dup " + province_to_owner() + "overlord-subject ruler @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + "overlord-subject ruler @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_vassal_of_province_from) { return ">r >r dup r> swap r> swap >r dup " + province_to_owner() + "overlord-subject ruler @ = " + truth_inversion(tval[0]); @@ -2336,7 +2353,7 @@ TRIGGER_FUNCTION(tf_vassal_of_province_this_pop) { } TRIGGER_FUNCTION(tf_substate_of_tag) { - return "dup overlord-subject ruler @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " + return "dup overlord-subject ruler @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "= " ">r dup is_substate @ r> and " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_substate_of_from) { @@ -2355,7 +2372,7 @@ TRIGGER_FUNCTION(tf_substate_of_this_pop) { return ">r dup " + pop_to_owner() + "r> swap >r dup overlord-subject ruler @ = >r dup is_substate @ r> and " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_alliance_with_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity " + tag_to_nation() + "state-ptr @ are-allied? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity " + tag_to_nation() + "state-ptr @ are-allied? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_alliance_with_from) { return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ are-allied? " + truth_inversion(tval[0]); @@ -2382,7 +2399,7 @@ TRIGGER_FUNCTION(tf_is_mobilised) { return "dup is_mobilized @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_mobilisation_size) { - return "dup " + std::to_string(sys::national_mod_offsets::mobilization_size.index()) + " >national_modifier_value modifier_values @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(sys::national_mod_offsets::mobilization_size.index()) + " >national_modifier_value modifier_values @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_crime_higher_than_education_nation) { return "dup dup >r administrative_spending @ r> education_spending @ >= " + truth_inversion(tval[0]); @@ -2397,8 +2414,8 @@ TRIGGER_FUNCTION(tf_crime_higher_than_education_pop) { return "dup " + pop_to_owner() + "dup >r administrative_spending @ r> education_spending @ >= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_agree_with_ruling_party) { - return "dup dup >r " + pop_to_owner() + "ruling_party @ ideology @ dup valid? if >index " + std::to_string(pop_demographics::count_special_keys) + " + >pop_demographics_key " - "r> dup size @ >r swap udemographics @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * r@ / 0.0 0.0 r> >= select else drop r> drop 0.0 end-if " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup dup >r " + pop_to_owner() + "ruling_party @ ideology @ dup valid? if >index " + value_to_string(pop_demographics::count_special_keys) + " + >pop_demographics_key " + "r> dup size @ >r swap udemographics @ >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * r@ / 0.0 0.0 r> >= select else drop r> drop 0.0 end-if " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_colonial_state) { return "dup capital @ is_colonial @ " + truth_inversion(tval[0]); @@ -2420,7 +2437,7 @@ TRIGGER_FUNCTION(tf_in_default_bool) { } //bankrupt-debtor-to? TRIGGER_FUNCTION(tf_in_default_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_in_default_from) { return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]); @@ -2438,7 +2455,7 @@ TRIGGER_FUNCTION(tf_in_default_this_pop) { return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ bankrupt-debtor-to? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_total_num_of_ports) { - return "dup total_ports @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup total_ports @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_always) { return "true " + truth_inversion(tval[0]); @@ -2447,25 +2464,25 @@ TRIGGER_FUNCTION(tf_election) { return "dup election_ends ptr-cast ptr(u16) @ >i32 dup 0 <> swap current-date @ >i32 > and " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_global_flag) { - return std::to_string(trigger::payload(tval[1]).glob_id.index()) + " state-ptr @ global-flag-set? " + truth_inversion(tval[0]); + return value_to_string(trigger::payload(tval[1]).glob_id.index()) + " state-ptr @ global-flag-set? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_capital) { return "dup dup " + province_to_owner() + "capital @ = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_nationalvalue_nation) { - return "dup national_value @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]) ; + return "dup national_value @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]) ; } TRIGGER_FUNCTION(tf_nationalvalue_pop) { - return "dup " + pop_to_owner() + "national_value @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + "national_value @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_nationalvalue_province) { - return "dup " + province_to_owner() + "national_value @ >index " + std::to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + province_to_owner() + "national_value @ >index " + value_to_string(trigger::payload(tval[1]).mod_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_industrial_score_value) { - return "dup industrial_score @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup industrial_score @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_industrial_score_tag) { - return "dup industrial_score @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "industrial_score @ " + compare_values(tval[0]); + return "dup industrial_score @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "industrial_score @ " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_industrial_score_from_nation) { return ">r >r dup industrial_score @ r> swap r> swap >r dup industrial_score @ r> " + compare_values(tval[0]); @@ -2483,10 +2500,10 @@ TRIGGER_FUNCTION(tf_industrial_score_this_province) { return ">r dup " +province_to_owner() + "industrial_score @ r> swap >r dup industrial_score @ r> " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_score_value) { - return "dup military_score @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup military_score @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_score_tag) { - return "dup military_score @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "military_score @ " + compare_values(tval[0]); + return "dup military_score @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "military_score @ " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_score_from_nation) { return ">r >r dup military_score @ r> swap r> swap >r dup military_score @ r> " + compare_values(tval[0]); @@ -2513,7 +2530,7 @@ TRIGGER_FUNCTION(tf_civilized_province) { return "dup " + province_to_owner() + "is_civilized @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_national_provinces_occupied) { - return "dup owned_province_count @ >f32 >r dup occupied_count @ >f32 r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup owned_province_count @ >f32 >r dup occupied_count @ >f32 r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_greater_power_nation) { return "dup is_great_power @ " + truth_inversion(tval[0]); @@ -2525,172 +2542,172 @@ TRIGGER_FUNCTION(tf_is_greater_power_province) { return "dup " + province_to_owner() + "is_great_power @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_rich_tax) { - return "dup rich_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); + return "dup rich_tax @ >i32 " + value_to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_tax) { - return "dup middle_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); + return "dup middle_tax @ >i32 " + value_to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_tax) { - return "dup poor_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); + return "dup poor_tax @ >i32 " + value_to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_tax_pop) { - return "dup " + pop_to_owner() + "rich_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "rich_tax @ >i32 " + value_to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_tax_pop) { - return "dup " + pop_to_owner() + "middle_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "middle_tax @ >i32 " + value_to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_tax_pop) { - return "dup " + pop_to_owner() + "poor_tax @ >i32 " + std::to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "poor_tax @ >i32 " + value_to_string(trigger::payload(tval[1]).signed_value) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_social_spending_nation) { - return "dup dup >r social_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup dup >r social_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_social_spending_pop) { - return "dup " + pop_to_owner() + "dup >r social_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "dup >r social_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_social_spending_province) { - return "dup " + province_to_owner() + "dup >r social_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + province_to_owner() + "dup >r social_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_spending_nation) { - return "dup dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup dup >r military_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_spending_pop) { - return "dup " + pop_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_spending_province) { - return "dup " + province_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + province_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_military_spending_state) { - return "dup " + state_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + state_to_owner() + "dup >r military_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_administration_spending_nation) { - return "dup dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup dup >r administrative_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_administration_spending_pop) { - return "dup " + pop_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_administration_spending_province) { - return "dup " + province_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + province_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_administration_spending_state) { - return "dup " + state_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + state_to_owner() + "dup >r administrative_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_education_spending_nation) { - return "dup dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup dup >r education_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_education_spending_pop) { - return "dup " + pop_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_education_spending_province) { - return "dup " + province_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + province_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_education_spending_state) { - return "dup " + state_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + state_to_owner() + "dup >r education_spending @ >f32 r> spending_level @ * " + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_colonial_nation) { return "dup is_colonial_nation @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_religion_nation) { - return "dup dominant_religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_religion @ >index " + value_to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_religion_nation_this_nation) { return ">r dup religion @ r> swap >r dup dominant_religion @ r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_religion_state) { - return "dup dominant_religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_religion @ >index " + value_to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_religion_province) { - return "dup dominant_religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_religion @ >index " + value_to_string(trigger::payload(tval[1]).rel_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_culture_nation) { - return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_culture_state) { - return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_culture_province) { - return "dup dominant_culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_issue_nation) { - return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_issue_option @ >index " + value_to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_issue_state) { - return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_issue_option @ >index " + value_to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_issue_province) { - return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_issue_option @ >index " + value_to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_issue_pop) { - return "dup dominant_issue_option @ >index " + std::to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_issue_option @ >index " + value_to_string(trigger::payload(tval[1]).opt_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_ideology_nation) { - return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_ideology_state) { - return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_ideology_province) { - return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_pop_majority_ideology_pop) { - return "dup dominant_ideology @ >index " + std::to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); + return "dup dominant_ideology @ >index " + value_to_string(trigger::payload(tval[1]).ideo_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_militancy_nation) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_militancy_state) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_militancy_province) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::poor_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_militancy_pop) { - return "dup poptype @ strata @ >i32 " + std::to_string(uint8_t(culture::pop_strata::poor)) + " <> >r " - "dup umilitancy @ >f32 " + std::to_string(10.0f / float(std::numeric_limits::max())) + " * 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup poptype @ strata @ >i32 " + value_to_string(uint8_t(culture::pop_strata::poor)) + " <> >r " + "dup umilitancy @ >f32 " + value_to_string(10.0f / float(std::numeric_limits::max())) + " * 0.0 r> select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_militancy_nation) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_militancy_state) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_militancy_province) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::middle_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_militancy_pop) { - return "dup poptype @ strata @ >i32 " + std::to_string(uint8_t(culture::pop_strata::middle)) + " <> >r " - "dup umilitancy @ >f32 " + std::to_string(10.0f / float(std::numeric_limits::max())) + " * 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup poptype @ strata @ >i32 " + value_to_string(uint8_t(culture::pop_strata::middle)) + " <> >r " + "dup umilitancy @ >f32 " + value_to_string(10.0f / float(std::numeric_limits::max())) + " * 0.0 r> select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_militancy_nation) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_militancy_state) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_militancy_province) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " - + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::rich_militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_militancy_pop) { - return "dup poptype @ strata @ >i32 " + std::to_string(uint8_t(culture::pop_strata::rich)) + " <> >r " - "dup umilitancy @ >f32 " + std::to_string(10.0f / float(std::numeric_limits::max())) + " * 0.0 r> select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup poptype @ strata @ >i32 " + value_to_string(uint8_t(culture::pop_strata::rich)) + " <> >r " + "dup umilitancy @ >f32 " + value_to_string(10.0f / float(std::numeric_limits::max())) + " * 0.0 r> select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_tax_above_poor) { return "dup dup >r rich_tax @ r> poor_tax @ > " + truth_inversion(tval[0]); @@ -2702,7 +2719,7 @@ TRIGGER_FUNCTION(tf_culture_has_union_tag_nation) { return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ valid? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_this_culture_union_tag) { - return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " = " + truth_inversion(tval[0]); + return "dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ >index " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_this_culture_union_from) { return ">r >r dup " + nation_to_tag() + "r> swap r> swap >r dup primary_culture @ culture_group_membership-member group @ cultural_union_of-culture_group identity @ r> = " + truth_inversion(tval[0]); @@ -2732,8 +2749,8 @@ TRIGGER_FUNCTION(tf_this_culture_union_this_union_pop) { return ">r dup " + pop_to_owner() + "primary_culture @ culture_group_membership-member group @ r> swap >r dup primary_culture @ culture_group_membership-member group @ r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_minorities_nation) { - return "dup dup >r " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " - "r@ " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ primary_culture @ >index + >demographics_key demographics @ - " + return "dup dup >r " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + "r@ " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ primary_culture @ >index + >demographics_key demographics @ - " "0 " "while " "dup culture-size < " @@ -2741,7 +2758,7 @@ TRIGGER_FUNCTION(tf_minorities_nation) { "dup >culture_id r@ swap accepted_cultures @ " "if " "dup r@ swap >r " - + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ " + + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ " ">r swap r> - swap " "then " "1 + " @@ -2750,8 +2767,8 @@ TRIGGER_FUNCTION(tf_minorities_nation) { + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_minorities_state) { - return "dup dup >r " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " - "r@ " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ " + state_to_owner() + "primary_culture @ >index + >demographics_key demographics @ - " + return "dup dup >r " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + "r@ " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ " + state_to_owner() + "primary_culture @ >index + >demographics_key demographics @ - " "0 " "while " "dup culture-size < " @@ -2759,7 +2776,7 @@ TRIGGER_FUNCTION(tf_minorities_state) { "dup >culture_id r@ " + state_to_owner() + "swap accepted_cultures @ " "if " "dup r@ swap >r " - + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ " + + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ " ">r swap r> - swap " "then " "1 + " @@ -2768,8 +2785,8 @@ TRIGGER_FUNCTION(tf_minorities_state) { + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_minorities_province) { - return "dup dup >r " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ " - "r@ " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ " + province_to_owner() + "primary_culture @ >index + >demographics_key demographics @ - " + return "dup dup >r " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ " + "r@ " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r@ " + province_to_owner() + "primary_culture @ >index + >demographics_key demographics @ - " "0 " "while " "dup culture-size < " @@ -2777,7 +2794,7 @@ TRIGGER_FUNCTION(tf_minorities_province) { "dup >culture_id r@ " + province_to_owner() + "swap accepted_cultures @ " "if " "dup r@ swap >r " - + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ " + + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " r> + >demographics_key demographics @ " ">r swap r> - swap " "then " "1 + " @@ -2786,34 +2803,34 @@ TRIGGER_FUNCTION(tf_minorities_province) { + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_revanchism_nation) { - return "dup revanchism @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup revanchism @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_revanchism_pop) { - return "dup " + pop_to_owner() + "revanchism @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_owner() + "revanchism @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_has_crime) { return "dup crime @ valid? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_num_of_substates) { - return "dup substates_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup substates_count @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_num_of_vassals_no_substates) { - return "dup dup >r vassals_count @ >i32 r> substates_count @ >i32 - " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup dup >r vassals_count @ >i32 r> substates_count @ >i32 - " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_brigades_compare_this) { - return ">r dup active_regiments >f32 r> swap >r dup active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r dup active_regiments >f32 r> swap >r dup active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_brigades_compare_from) { - return ">r >r dup active_regiments >f32 r> swap r> swap >r dup active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r >r dup active_regiments >f32 r> swap r> swap >r dup active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_brigades_compare_province_this) { - return ">r dup active_regiments >f32 r> swap >r dup " + province_to_owner() + "active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r dup active_regiments >f32 r> swap >r dup " + province_to_owner() + "active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_brigades_compare_province_from) { - return ">r >r dup active_regiments >f32 r> swap r> swap >r dup " + province_to_owner() + "active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r >r dup active_regiments >f32 r> swap r> swap >r dup " + province_to_owner() + "active_regiments >f32 r@ / 1000000.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_constructing_cb_tag) { - return "dup constructing_cb_target @ " + std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + " = " + truth_inversion(tval[0]); + return "dup constructing_cb_target @ " + value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_constructing_cb_from) { return ">r >r dup r> swap r> swap >r dup constructing_cb_target @ r> = " + truth_inversion(tval[0]); @@ -2834,16 +2851,16 @@ TRIGGER_FUNCTION(tf_constructing_cb_discovered) { return "dup constructing_cb_is_discovered @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_constructing_cb_progress) { - return "dup constructing_cb_progress @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup constructing_cb_progress @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_civilization_progress) { - return "dup " + std::to_string(sys::national_mod_offsets::civilization_progress_modifier.index()) + " >national_modifier_value modifier_values @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(sys::national_mod_offsets::civilization_progress_modifier.index()) + " >national_modifier_value modifier_values @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_constructing_cb_type) { - return "dup constructing_cb_type @ >index " + std::to_string(trigger::payload(tval[1]).cb_id.index()) + " " + compare_values_eq(tval[0]); + return "dup constructing_cb_type @ >index " + value_to_string(trigger::payload(tval[1]).cb_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_is_our_vassal_tag) { - return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "overlord-subject ruler @ >r dup r> = " + truth_inversion(tval[0]); + return value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "overlord-subject ruler @ >r dup r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_our_vassal_from) { return ">r >r dup overlord-subject ruler @ r> swap r> swap >r dup r> = " + truth_inversion(tval[0]); @@ -2882,7 +2899,7 @@ TRIGGER_FUNCTION(tf_is_substate) { return "dup is_substate @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_great_wars_enabled) { - return std::to_string(offsetof(sys::state, military_definitions) + offsetof(military::global_military_state, great_wars_enabled)) + " state-ptr @ buf-add ptr-cast ptr(i8) @ 0 >i8 <> " + truth_inversion(tval[0]); + return value_to_string(offsetof(sys::state, military_definitions) + offsetof(military::global_military_state, great_wars_enabled)) + " state-ptr @ buf-add ptr-cast ptr(i8) @ 0 >i8 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_nationalize) { return "dup >index state-ptr @ can-nationalize? " + truth_inversion(tval[0]); @@ -2891,7 +2908,7 @@ TRIGGER_FUNCTION(tf_part_of_sphere) { return "dup in_sphere_of @ valid? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_sphere_leader_of_tag) { - return std::to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "in_sphere_of @ >r dup r> = " + truth_inversion(tval[0]); + return value_to_string(trigger::payload(tval[1]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + "in_sphere_of @ >r dup r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_sphere_leader_of_from) { return ">r >r dup in_sphere_of @ r> swap r> swap >r dup r> = " + truth_inversion(tval[0]); @@ -2909,10 +2926,10 @@ TRIGGER_FUNCTION(tf_is_sphere_leader_of_this_pop) { return ">r " + pop_to_owner() + "dup in_sphere_of @ r> swap >r dup r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_number_of_states) { - return "dup owned_state_count @ >i32 " + std::to_string(tval[1]) + " " + compare_values(tval[0]); + return "dup owned_state_count @ >i32 " + value_to_string(tval[1]) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_war_score) { - return "dup >index state-ptr @ avg-warscore " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup >index state-ptr @ avg-warscore " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_releasable_vassal_from) { return ">r >r dup " + nation_to_tag() + "is_not_releasable @ not r> swap r> swap" + truth_inversion(tval[0]); @@ -2921,10 +2938,10 @@ TRIGGER_FUNCTION(tf_is_releasable_vassal_other) { return ">r >r dup " + nation_to_tag() + "is_not_releasable @ not r> swap r> swap" + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_recent_imigration) { - return "dup last_immigration ptr-cast ptr(u16) @ >i32 " + std::to_string(tval[1]) + " + current-date @ >i32 " + compare_values(tval[0]); + return "dup last_immigration ptr-cast ptr(u16) @ >i32 " + value_to_string(tval[1]) + " + current-date @ >i32 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_province_control_days) { - return "dup last_control_change ptr-cast ptr(u16) @ >i32 " + std::to_string(tval[1]) + " + current-date @ >i32 " + compare_values(tval[0]); + return "dup last_control_change ptr-cast ptr(u16) @ >i32 " + value_to_string(tval[1]) + " + current-date @ >i32 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_is_disarmed) { return "dup disarmed_until ptr-cast ptr(u16) @ >i32 dup 0 <> swap current-date @ >i32 > and " + truth_inversion(tval[0]); @@ -2942,19 +2959,19 @@ TRIGGER_FUNCTION(tf_someone_can_form_union_tag_other) { return "false " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_social_movement_strength) { - return "dup >index true state-ptr @ movement-str " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup >index true state-ptr @ movement-str " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_political_movement_strength) { - return "dup >index false state-ptr @ movement-str " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup >index false state-ptr @ movement-str " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_can_build_factory_in_capital_state) { return "true " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_social_movement) { - return "dup pop_movement_membership-pop movement @ get_associated_issue_option @ dup >r valid? r> parent_issue @ issue_type @ >i32 " + std::to_string(int32_t(culture::issue_type::social)) + " = and " + truth_inversion(tval[0]); + return "dup pop_movement_membership-pop movement @ get_associated_issue_option @ dup >r valid? r> parent_issue @ issue_type @ >i32 " + value_to_string(int32_t(culture::issue_type::social)) + " = and " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_political_movement) { - return "dup pop_movement_membership-pop movement @ get_associated_issue_option @ dup >r valid? r> parent_issue @ issue_type @ >i32 " + std::to_string(int32_t(culture::issue_type::political)) + " = and " + truth_inversion(tval[0]); + return "dup pop_movement_membership-pop movement @ get_associated_issue_option @ dup >r valid? r> parent_issue @ issue_type @ >i32 " + value_to_string(int32_t(culture::issue_type::political)) + " = and " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_political_movement_from_reb) { // returns false because I'm not sure exactly what it is supposed to do (applies to the below as well) @@ -2970,118 +2987,118 @@ TRIGGER_FUNCTION(tf_has_cultural_sphere) { return "dup >index state-ptr @ has-union-sphere? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_world_wars_enabled) { - return std::to_string(offsetof(sys::state, military_definitions) + offsetof(military::global_military_state, world_wars_enabled)) + " state-ptr @ buf-add ptr-cast ptr(i8) @ 0 >i8 <> " + truth_inversion(tval[0]); + return value_to_string(offsetof(sys::state, military_definitions) + offsetof(military::global_military_state, world_wars_enabled)) + " state-ptr @ buf-add ptr-cast ptr(i8) @ 0 >i8 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_pop_this_pop) { return ">r dup culture @ r> swap >r dup culture r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_state_this_pop) { - return ">r dup culture @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return ">r dup culture @ >index r> swap >r dup r> " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_province_this_pop) { - return ">r dup culture @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return ">r dup culture @ >index r> swap >r dup r> " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_nation_this_pop) { - return ">r dup culture @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return ">r dup culture @ >index r> swap >r dup r> " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_pop) { - return "dup culture @ >index " + std::to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); + return "dup culture @ >index " + value_to_string(trigger::payload(tval[1]).cul_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_state) { - return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_province) { - return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_culture_nation) { - return "dup " + std::to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).cul_id.index() + demographics::count_special_keys + ws.world.pop_type_size() * 2) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_pop_this_pop) { return ">r dup religion @ r> swap >r dup religion r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_state_this_pop) { - return ">r dup religion @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return ">r dup religion @ >index r> swap >r dup r> " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_province_this_pop) { - return ">r dup religion @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return ">r dup religion @ >index r> swap >r dup r> " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_nation_this_pop) { - return ">r dup religion @ >index r> swap >r dup r> " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return ">r dup religion @ >index r> swap >r dup r> " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() * 2 + ws.world.culture_size() + ws.world.ideology_size() + ws.world.issue_option_size()) + " + >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_pop) { - return "dup religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]); + return "dup religion @ >index " + value_to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_state) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_province) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_pop_religion_nation) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).rel_id).index()) + " >demographics_key demographics @ 0.0 > " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_life_needs) { - return "dup ulife_needs_satisfaction @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup satisfaction @ 3.0 * " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_everyday_needs) { - return "dup ueveryday_needs_satisfaction @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup satisfaction @ 3.0 * 1.0 - " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_luxury_needs) { - return "dup uluxury_needs_satisfaction @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup satisfaction @ 3.0 * 2.0 - " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_consciousness_pop) { - return "dup uconsciousness @ >f32 " + std::to_string(10.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup uconsciousness @ >f32 " + value_to_string(10.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_consciousness_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_consciousness_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_consciousness_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::consciousness.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_literacy_pop) { - return "dup uliteracy @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup uliteracy @ >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_literacy_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_literacy_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_literacy_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::literacy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_militancy_pop) { - return "dup umilitancy @ >f32 " + std::to_string(10.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup umilitancy @ >f32 " + value_to_string(10.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_militancy_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_militancy_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_militancy_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::militancy.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_trade_goods_in_state_state) { - return "dup >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-has-rgo? " + truth_inversion(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-has-rgo? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_trade_goods_in_state_province) { - return "dup state_membership @ >index " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-has-rgo? " + truth_inversion(tval[0]); + return "dup state_membership @ >index " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " state-ptr @ state-has-rgo? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_flashpoint) { return "dup flashpoint_tag @ valid? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_flashpoint_tension) { - return "dup flashpoint_tension @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup flashpoint_tension @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_flashpoint_tension_province) { - return "dup state_membership @ flashpoint_tension @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup state_membership @ flashpoint_tension @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_crisis_exist) { - return std::to_string(offsetof(sys::state, current_crisis_state)) + " state-ptr @ buf-add ptr-cast ptr(i32) @ " + std::to_string(int32_t(sys::crisis_state::inactive)) + " = " + truth_inversion(tval[0]); + return value_to_string(offsetof(sys::state, current_crisis_state)) + " state-ptr @ buf-add ptr-cast ptr(i32) @ " + value_to_string(int32_t(sys::crisis_state::inactive)) + " = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_is_liberation_crisis) { return "state-ptr @ liberation-crisis? " + truth_inversion(tval[0]); @@ -3093,7 +3110,7 @@ TRIGGER_FUNCTION(tf_is_claim_crisis) { return " false " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_crisis_temperature) { - return std::to_string(offsetof(sys::state, crisis_temperature)) + " state-ptr @ buf-add ptr-cast ptr(f32) @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return value_to_string(offsetof(sys::state, crisis_temperature)) + " state-ptr @ buf-add ptr-cast ptr(f32) @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_involved_in_crisis_nation) { return "dup >index state-ptr @ in-crisis? " + truth_inversion(tval[0]); @@ -3102,281 +3119,281 @@ TRIGGER_FUNCTION(tf_involved_in_crisis_pop) { return "dup " + pop_to_owner() + ">index state-ptr @ in-crisis? " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_life_needs_nation) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_life_needs_state) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_life_needs_province) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_life_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::rich_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_nation) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_state) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_province) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_everyday_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::rich_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_nation) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_state) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_province) { - return "dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_rich_strata_luxury_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::rich_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::rich_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_life_needs_nation) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_life_needs_state) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_life_needs_province) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_life_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::middle_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_nation) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_state) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_province) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_everyday_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::middle_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_nation) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_state) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_province) { - return "dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_middle_strata_luxury_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::middle_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::middle_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_life_needs_nation) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_life_needs_state) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_life_needs_province) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_life_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::poor_life_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_nation) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_state) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_province) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_everyday_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::poor_everyday_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_nation) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_state) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_province) { - return "dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r dup " + value_to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_poor_strata_luxury_needs_pop) { - return "dup " + pop_to_location() + "state_membership @ dup " + std::to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + std::to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "state_membership @ dup " + value_to_string(demographics::poor_total.index()) + " >demographics_key demographics @ >r " + value_to_string(demographics::poor_luxury_needs.index()) + " >demographics_key demographics @ r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_diplomatic_influence_tag) { - return "dup >index " + std::to_string(trigger::payload(tval[2]).tag_id.index()) +" >national_identity_id " + tag_to_nation() + ">index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]); + return "dup >index " + value_to_string(trigger::payload(tval[2]).tag_id.index()) +" >national_identity_id " + tag_to_nation() + ">index state-ptr @ influence-on " + value_to_string(tval[1]) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_diplomatic_influence_this_nation) { - return ">r dup r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]); + return ">r dup r> swap >r dup >index r> >index state-ptr @ influence-on " + value_to_string(tval[1]) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_diplomatic_influence_this_province) { - return ">r dup " + province_to_owner() + "r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]); + return ">r dup " + province_to_owner() + "r> swap >r dup >index r> >index state-ptr @ influence-on " + value_to_string(tval[1]) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_diplomatic_influence_from_nation) { - return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]); + return ">r >r dup r> swap r> swap >r dup >index r> >index state-ptr @ influence-on " + value_to_string(tval[1]) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_diplomatic_influence_from_province) { - return ">r >r dup " + province_to_owner() + "r> swap r> swap >r dup >index r> >index state-ptr @ influence-on " + std::to_string(tval[1]) + ".0 " + compare_values(tval[0]); + return ">r >r dup " + province_to_owner() + "r> swap r> swap >r dup >index r> >index state-ptr @ influence-on " + value_to_string(tval[1]) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_nation) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_state) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_province) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_pop) { - return "dup uemployment @ >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * 1.0 swap - " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup uemployment @ >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * 1.0 swap - " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_nation_this_pop) { return ">r dup poptype @ >index r> swap >r " - "dup " + std::to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + "dup " + value_to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_state_this_pop) { return ">r dup poptype @ >index r> swap >r " - "dup " + std::to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + "dup " + value_to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_pop_unemployment_province_this_pop) { return ">r dup poptype @ >index r> swap >r " - "dup " + std::to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + "dup " + value_to_string(demographics::count_special_keys) + " r@ + >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size()) + " r> r> swap >r + >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_relation_tag) { - return "dup >index " +std::to_string(trigger::payload(tval[2]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup >index " +value_to_string(trigger::payload(tval[2]).tag_id.index()) + " >national_identity_id " + tag_to_nation() + ">index state-ptr @ relations " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_relation_this_nation) { - return ">r dup >index r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r dup >index r> swap >r dup >index r> state-ptr @ relations " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_relation_this_province) { - return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r dup " + province_to_owner() + ">index r> swap >r dup >index r> state-ptr @ relations " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_relation_this_pop) { - return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r dup " + pop_to_owner() + ">index r> swap >r dup >index r> state-ptr @ relations " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_relation_from_nation) { - return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ relations " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_relation_from_province) { - return ">r >r dup " + province_to_owner() + ">index r> swap r> swap >r dup >index r> state-ptr @ relations " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return ">r >r dup " + province_to_owner() + ">index r> swap r> swap >r dup >index r> state-ptr @ relations " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_check_variable) { - return "dup " + std::to_string(trigger::payload(tval[3]).natv_id.index()) + " >national_variable_id variables @ " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[3]).natv_id.index()) + " >national_variable_id variables @ " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_check_gamerule) { - return std::to_string(trigger::payload(tval[1]).gr_id.index()) + " >gamerule_id current_setting @ " + std::to_string(tval[2]) + " " + compare_values_eq(tval[0]); + return value_to_string(trigger::payload(tval[1]).gr_id.index()) + " >gamerule_id current_setting @ " + value_to_string(tval[2]) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_upper_house) { - return "dup " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id upper_house @ " + std::to_string(100.0f * read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id upper_house @ " + value_to_string(100.0f * read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_unemployment_by_type_nation) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_unemployment_by_type_state) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_unemployment_by_type_province) { - return "dup " + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_unemployment_by_type_pop) { return "dup " + pop_to_location() + "state_membership @ dup " - + std::to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " - + std::to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " - "r@ / 1.0 swap - 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); + + value_to_string(demographics::count_special_keys + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ >r " + + value_to_string(demographics::count_special_keys + ws.world.pop_type_size() + trigger::payload(tval[3]).popt_id.index()) + " >demographics_key demographics @ " + "r@ / 1.0 swap - 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 1)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_nation_province_id) { - return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); + return value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + value_to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_from_nation_province_id) { - return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); + return value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + value_to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_province_province_id) { - return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); + return value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + value_to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_from_province_province_id) { - return std::to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + std::to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); + return value_to_string(trigger::payload(tval[1]).prov_id.index()) + " >province_id " + value_to_string(trigger::payload(tval[3]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[2]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_nation_from_province) { - return ">r >r dup r> swap r> swap " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return ">r >r dup r> swap r> swap " + value_to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_generic) { - return "dup " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_from_nation_scope_province) { - return "dup " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_party_loyalty_from_province_scope_province) { - return "dup " + std::to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + std::to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[2]).ideo_id.index()) + " >ideology_id party_loyalty @" + value_to_string(trigger::payload(tval[1]).signed_value) + ".0 " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_railroad_no_limit_from_nation) { - return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r >r dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_railroad_yes_limit_from_nation) { - return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r >r dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_railroad_no_limit_this_nation) { - return ">r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_railroad_yes_limit_this_nation) { - return ">r dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 max_building_level @ >f32 r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::railroad)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_railroad.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_fort_no_limit_from_nation) { - return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r >r dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_fort_yes_limit_from_nation) { - return ">r >r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r >r dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_fort_no_limit_this_nation) { - return ">r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_fort_yes_limit_this_nation) { - return ">r dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap >r " - "dup " + std::to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " - "dup " + std::to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); + return ">r dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 max_building_level @ >f32 r> swap >r " + "dup " + value_to_string(uint8_t(economy::province_building_type::fort)) + " >u8 building_level @ >f32 >r " + "dup " + value_to_string(sys::provincial_mod_offsets::min_build_fort.index()) + " >provincial_modifier_value modifier_values @ r> + r> < " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_can_build_in_province_naval_base_no_limit_from_nation) { return ">r >r dup >index r> swap r> swap >r dup >index r> state-ptr @ can-build-naval-base? " + truth_inversion(tval[0]); @@ -3415,107 +3432,107 @@ TRIGGER_FUNCTION(tf_can_build_fort_in_capital_no_whole_state_no_limit) { return "true " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_work_available_nation) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " " r> 0.4 * >= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_work_available_state) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " " r> 0.4 * >= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_work_available_province) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_employment_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " " r> 0.4 * >= " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_variable_ideology_name_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_ideology_name_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_ideology_name_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_ideology_name_pop) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >pop_demographics_key udemographics @ " - " >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).ideo_id).index()) + " >pop_demographics_key udemographics @ " + " >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_name_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_name_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_name_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_name_pop) { - return "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >pop_demographics_key udemographics @ " - " >f32 " + std::to_string(1.0f / float(std::numeric_limits::max())) + " * " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).opt_id).index()) + " >pop_demographics_key udemographics @ " + " >f32 " + value_to_string(1.0f / float(std::numeric_limits::max())) + " * " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_group_name_nation) { - return "dup " + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + value_to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_group_name_state) { - return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + state_to_owner() + value_to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + value_to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_group_name_province) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + value_to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_issue_group_name_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + std::to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).iss_id.index()) + " >issue_id issues @ >index " + value_to_string(trigger::payload(tval[2]).opt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_reform_group_name_nation) { - return "dup " + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + value_to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_reform_group_name_state) { - return "dup " + state_to_owner() + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + state_to_owner() + value_to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + value_to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_reform_group_name_province) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + value_to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_reform_group_name_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + std::to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).ref_id.index()) + " >reform_id issues @ >index " + value_to_string(trigger::payload(tval[2]).ropt_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_variable_pop_type_name_nation) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_pop_type_name_state) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_pop_type_name_province) { - return "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - "dup " + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + "dup " + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_pop_type_name_pop) { - return "dup " + pop_to_location() + "dup " + std::to_string(demographics::total.index()) + " >demographics_key demographics @ >r " - + std::to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " - " r@ / 0.0 0.0 r> >= select " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + pop_to_location() + "dup " + value_to_string(demographics::total.index()) + " >demographics_key demographics @ >r " + + value_to_string(demographics::to_key(ws, trigger::payload(tval[1]).popt_id).index()) + " >demographics_key demographics @ " + " r@ / 0.0 0.0 r> >= select " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_variable_good_name) { - return "dup " + std::to_string(trigger::payload(tval[1]).com_id.index()) + " >commodity_id stockpiles @ " + std::to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).com_id.index()) + " >commodity_id stockpiles @ " + value_to_string(read_float_from_payload(tval + 2)) + " " + compare_values(tval[0]); } TRIGGER_FUNCTION(tf_religion_nation) { - return "dup religion @ >index " + std::to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]); + return "dup religion @ >index " + value_to_string(trigger::payload(tval[1]).rel_id.index()) + " " + compare_values_eq(tval[0]); } TRIGGER_FUNCTION(tf_religion_nation_reb) { return ">r >r dup religion @ r> swap r> swap >r dup religion @ r> = " + truth_inversion(tval[0]); @@ -3536,13 +3553,13 @@ TRIGGER_FUNCTION(tf_religion_nation_this_pop) { return ">r dup " + pop_to_owner() + "religion @ r> swap >r dup religion @ r> = " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_invention) { - return "dup " + std::to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]); + return "dup " + value_to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_invention_province) { - return "dup " + province_to_owner() + std::to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]); + return "dup " + province_to_owner() + value_to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_invention_pop) { - return "dup " + pop_to_owner() + std::to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]); + return "dup " + pop_to_owner() + value_to_string(trigger::payload(tval[1]).invt_id.index()) + " >invention_id active_inventions @ " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_test) { auto sid = trigger::payload(tval[1]).str_id; @@ -3551,10 +3568,10 @@ TRIGGER_FUNCTION(tf_test) { } TRIGGER_FUNCTION(tf_has_building_bank) { - return "dup " + std::to_string(int32_t(economy::province_building_type::bank)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); + return "dup " + value_to_string(int32_t(economy::province_building_type::bank)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_has_building_university) { - return "dup " + std::to_string(int32_t(economy::province_building_type::university)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); + return "dup " + value_to_string(int32_t(economy::province_building_type::university)) + " >ui8 building_level 0 <> " + truth_inversion(tval[0]); } TRIGGER_FUNCTION(tf_party_name) { @@ -3562,9 +3579,9 @@ TRIGGER_FUNCTION(tf_party_name) { dcon::text_key new_name{ dcon::text_key::value_base_t(trigger::read_int32_t_from_payload(tval + 2)) }; if(ideo) { - return "dup >index >r " + std::to_string(new_name.index()) + " " + std::to_string(ideo.index()) + " r> state-ptr @ has-named-party? " + truth_inversion(tval[0]); + return "dup >index >r " + value_to_string(new_name.index()) + " " + value_to_string(ideo.index()) + " r> state-ptr @ has-named-party? " + truth_inversion(tval[0]); } else { - return "dup ruling_party @ name @ " + std::to_string(new_name.index()) + " >text_key = " + truth_inversion(tval[0]); + return "dup ruling_party @ name @ " + value_to_string(new_name.index()) + " >text_key = " + truth_inversion(tval[0]); } } @@ -3573,10 +3590,10 @@ TRIGGER_FUNCTION(tf_party_position) { dcon::issue_option_id new_opt = trigger::payload(tval[2]).opt_id; if(ideo) { - return "dup >index >r " + std::to_string(new_opt.index()) + " " + std::to_string(ideo.index()) + " r> state-ptr @ has-positioned-party? " + truth_inversion(tval[0]); + return "dup >index >r " + value_to_string(new_opt.index()) + " " + value_to_string(ideo.index()) + " r> state-ptr @ has-positioned-party? " + truth_inversion(tval[0]); } else { auto popt = ws.world.issue_option_get_parent_issue(new_opt); - return "dup ruling_party @ " + std::to_string(popt.id.index()) + " >issue_id party_issues @ " + std::to_string(new_opt.index()) + " >issue_option_id = " + truth_inversion(tval[0]); + return "dup ruling_party @ " + value_to_string(popt.id.index()) + " >issue_id party_issues @ " + value_to_string(new_opt.index()) + " >issue_option_id = " + truth_inversion(tval[0]); } } @@ -3653,13 +3670,13 @@ std::string CALLTYPE test_trigger_generic(uint16_t const* tval, sys::state& ws) std::string multiplicative_modifier(sys::state& state, dcon::value_modifier_key modifier) { auto base = state.value_modifiers[modifier]; std::string result; - result += std::to_string(base.factor) + " >r "; + result += value_to_string(base.factor) + " >r "; for(uint32_t i = 0; i < base.segments_count; ++i) { auto seg = state.value_modifier_segments[base.first_segment_offset + i]; if(seg.condition) { result += test_trigger_generic(state.trigger_data.data() + state.trigger_data_indices[seg.condition.index() + 1], state); - result += "1.0 swap " + std::to_string(seg.factor) + " swap select r> * >r "; // multiply by either 1.0 or the segement factor depending on bool result + result += "1.0 swap " + value_to_string(seg.factor) + " swap select r> * >r "; // multiply by either 1.0 or the segement factor depending on bool result } } return result; @@ -3667,16 +3684,16 @@ std::string multiplicative_modifier(sys::state& state, dcon::value_modifier_key std::string additive_modifier(sys::state& state, dcon::value_modifier_key modifier) { auto base = state.value_modifiers[modifier]; std::string result; - result += std::to_string(base.base) + " >r "; + result += value_to_string(base.base) + " >r "; for(uint32_t i = 0; i < base.segments_count; ++i) { auto seg = state.value_modifier_segments[base.first_segment_offset + i]; if(seg.condition) { result += test_trigger_generic(state.trigger_data.data() + state.trigger_data_indices[seg.condition.index() + 1], state); - result += "0.0 swap " + std::to_string(seg.factor) + " swap select r> + >r "; // multiply by either 1.0 or the segement factor depending on bool result + result += "0.0 swap " + value_to_string(seg.factor) + " swap select r> + >r "; // multiply by either 1.0 or the segement factor depending on bool result } } - result += "r> " + std::to_string(base.factor) + " * >r "; + result += "r> " + value_to_string(base.factor) + " * >r "; return result; }