Skip to content

Commit 7b5a960

Browse files
authored
Merge pull request #126 from OpenVicProject/improve_modifiers
Case insensitive modifiers & added more
2 parents e79d3e0 + 177a005 commit 7b5a960

File tree

6 files changed

+92
-68
lines changed

6 files changed

+92
-68
lines changed

src/openvic-simulation/economy/Good.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ bool GoodManager::load_goods_file(ast::NodeCPtr root) {
9393
bool GoodManager::generate_modifiers(ModifierManager& modifier_manager) const {
9494
bool ret = true;
9595

96-
const auto good_modifier = [this, &modifier_manager, &ret](std::string_view name, bool positive_good) -> void {
96+
const auto good_modifier = [this, &modifier_manager, &ret](std::string_view name, bool is_positive_good) -> void {
9797
ret &= modifier_manager.register_complex_modifier(name);
9898
for (Good const& good : get_goods()) {
9999
ret &= modifier_manager.add_modifier_effect(
100-
StringUtils::append_string_views(name, "_", good.get_identifier()), positive_good
100+
ModifierManager::get_flat_identifier(name, good.get_identifier()), is_positive_good
101101
);
102102
}
103103
};

src/openvic-simulation/military/Unit.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -203,41 +203,41 @@ bool UnitManager::generate_modifiers(ModifierManager& modifier_manager) const {
203203
bool ret = true;
204204

205205
const auto generate_stat_modifiers = [&modifier_manager, &ret](std::string_view identifier, Unit::type_t type) -> void {
206-
207-
const auto stat_modifier = [&modifier_manager, &ret, &identifier](std::string_view suffix, bool positive_good,
208-
ModifierEffect::format_t format) -> void {
206+
const auto stat_modifier = [&modifier_manager, &ret, &identifier](
207+
std::string_view suffix, bool is_positive_good, ModifierEffect::format_t format
208+
) -> void {
209209
ret &= modifier_manager.add_modifier_effect(
210-
StringUtils::append_string_views(identifier, suffix), positive_good, format
210+
ModifierManager::get_flat_identifier(identifier, suffix), is_positive_good, format
211211
);
212212
};
213213

214214
using enum ModifierEffect::format_t;
215215

216216
ret &= modifier_manager.register_complex_modifier(identifier);
217217

218-
stat_modifier("_attack", true, RAW_DECIMAL);
219-
stat_modifier("_defence", true, RAW_DECIMAL);
220-
stat_modifier("_default_organisation", true, RAW_DECIMAL);
221-
stat_modifier("_maximum_speed", true, RAW_DECIMAL);
222-
stat_modifier("_build_time", false, INT);
223-
stat_modifier("_supply_consumption", false, PROPORTION_DECIMAL);
218+
stat_modifier("attack", true, RAW_DECIMAL);
219+
stat_modifier("defence", true, RAW_DECIMAL);
220+
stat_modifier("default_organisation", true, RAW_DECIMAL);
221+
stat_modifier("maximum_speed", true, RAW_DECIMAL);
222+
stat_modifier("build_time", false, INT);
223+
stat_modifier("supply_consumption", false, PROPORTION_DECIMAL);
224224

225225
switch (type) {
226226
case Unit::type_t::LAND:
227-
stat_modifier("_reconnaissance", true, RAW_DECIMAL);
228-
stat_modifier("_discipline", true, PROPORTION_DECIMAL);
229-
stat_modifier("_support", true, PROPORTION_DECIMAL);
230-
stat_modifier("_maneuver", true, INT);
231-
stat_modifier("_siege", true, RAW_DECIMAL);
227+
stat_modifier("reconnaissance", true, RAW_DECIMAL);
228+
stat_modifier("discipline", true, PROPORTION_DECIMAL);
229+
stat_modifier("support", true, PROPORTION_DECIMAL);
230+
stat_modifier("maneuver", true, INT);
231+
stat_modifier("siege", true, RAW_DECIMAL);
232232
break;
233233
case Unit::type_t::NAVAL:
234-
stat_modifier("_colonial_points", true, INT);
235-
stat_modifier("_supply_consumption_score", false, INT);
236-
stat_modifier("_hull", true, RAW_DECIMAL);
237-
stat_modifier("_gun_power", true, RAW_DECIMAL);
238-
stat_modifier("_fire_range", true, RAW_DECIMAL);
239-
stat_modifier("_evasion", true, PROPORTION_DECIMAL);
240-
stat_modifier("_torpedo_attack", true, RAW_DECIMAL);
234+
stat_modifier("colonial_points", true, INT);
235+
stat_modifier("supply_consumption_score", false, INT);
236+
stat_modifier("hull", true, RAW_DECIMAL);
237+
stat_modifier("gun_power", true, RAW_DECIMAL);
238+
stat_modifier("fire_range", true, RAW_DECIMAL);
239+
stat_modifier("evasion", true, PROPORTION_DECIMAL);
240+
stat_modifier("torpedo_attack", true, RAW_DECIMAL);
241241
break;
242242
}
243243
};

src/openvic-simulation/misc/Modifier.cpp

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,27 @@ bool ModifierManager::setup_modifier_effects() {
107107
bool ret = true;
108108

109109
using enum ModifierEffect::format_t;
110+
/* Tech/inventions only*/
111+
ret &= add_modifier_effect("cb_creation_speed", true);
112+
ret &= add_modifier_effect("combat_width", false);
113+
ret &= add_modifier_effect("plurality", true, PERCENTAGE_DECIMAL);
114+
ret &= add_modifier_effect("pop_growth", true);
115+
ret &= add_modifier_effect("regular_experience_level", true, RAW_DECIMAL);
116+
ret &= add_modifier_effect("reinforce_rate", true);
117+
ret &= add_modifier_effect("seperatism", false); // paradox typo
118+
ret &= add_modifier_effect("shared_prestige", true, RAW_DECIMAL);
119+
ret &= add_modifier_effect("tax_eff", true);
110120

111121
/* Country Modifier Effects */
112122
ret &= add_modifier_effect("administrative_efficiency", true);
113123
ret &= add_modifier_effect("administrative_efficiency_modifier", true);
124+
ret &= add_modifier_effect("administrative_multiplier", true);
114125
ret &= add_modifier_effect("artisan_input", false);
115126
ret &= add_modifier_effect("artisan_output", true);
116127
ret &= add_modifier_effect("artisan_throughput", true);
117128
ret &= add_modifier_effect("badboy", false, RAW_DECIMAL);
118-
ret &= add_modifier_effect("cb_creation_speed", true); //seemingly works the same way as cb_generation_speed_modifier
119129
ret &= add_modifier_effect("cb_generation_speed_modifier", true);
130+
ret &= add_modifier_effect("civilization_progress_modifier", true);
120131
ret &= add_modifier_effect("colonial_life_rating", false, INT);
121132
ret &= add_modifier_effect("colonial_migration", true);
122133
ret &= add_modifier_effect("colonial_points", true, INT);
@@ -137,7 +148,6 @@ bool ModifierManager::setup_modifier_effects() {
137148
ret &= add_modifier_effect("global_assimilation_rate", true);
138149
ret &= add_modifier_effect("global_immigrant_attract", true);
139150
ret &= add_modifier_effect("global_pop_consciousness_modifier", false, RAW_DECIMAL);
140-
ret &= add_modifier_effect("global_pop_growth", true);
141151
ret &= add_modifier_effect("global_pop_militancy_modifier", false, RAW_DECIMAL);
142152
ret &= add_modifier_effect("global_population_growth", true);
143153
ret &= add_modifier_effect("goods_demand", false);
@@ -167,12 +177,10 @@ bool ModifierManager::setup_modifier_effects() {
167177
ret &= add_modifier_effect("min_social_spending", true);
168178
ret &= add_modifier_effect("min_tariff", true);
169179
ret &= add_modifier_effect("min_tax", true);
180+
ret &= add_modifier_effect("minimum_wage", true);
170181
ret &= add_modifier_effect("mobilisation_economy_impact", false);
171-
ret &= add_modifier_effect("mobilisation_impact", false);
172182
ret &= add_modifier_effect("mobilisation_size", true);
173-
ret &= add_modifier_effect("mobilization_economy_impact", false);
174183
ret &= add_modifier_effect("mobilization_impact", false);
175-
ret &= add_modifier_effect("mobilization_size", true);
176184
ret &= add_modifier_effect("naval_attack_modifier", true);
177185
ret &= add_modifier_effect("naval_attrition", false);
178186
ret &= add_modifier_effect("naval_defense_modifier", true);
@@ -183,50 +191,36 @@ bool ModifierManager::setup_modifier_effects() {
183191
ret &= add_modifier_effect("org_regain", true);
184192
ret &= add_modifier_effect("pension_level", true);
185193
ret &= add_modifier_effect("permanent_prestige", true, RAW_DECIMAL);
186-
ret &= add_modifier_effect("plurality", true, PERCENTAGE_DECIMAL);
187194
ret &= add_modifier_effect("political_reform_desire", false);
188-
ret &= add_modifier_effect("pop_growth", true);
195+
ret &= add_modifier_effect("poor_savings_modifier", true);
189196
ret &= add_modifier_effect("prestige", true, RAW_DECIMAL);
190-
ret &= add_modifier_effect("regular_experience_level", true, RAW_DECIMAL);
191-
ret &= add_modifier_effect("reinforce_rate", true);
197+
ret &= add_modifier_effect("reinforce_speed", true);
192198
ret &= add_modifier_effect("research_points", true, RAW_DECIMAL);
193199
ret &= add_modifier_effect("research_points_modifier", true);
194200
ret &= add_modifier_effect("research_points_on_conquer", true);
195201
ret &= add_modifier_effect("rgo_output", true);
196-
ret &= add_modifier_effect("RGO_output", true);
197-
ret &= add_modifier_effect("rgo_size", true);
198-
ret &= add_modifier_effect("RGO_size", true);
199202
ret &= add_modifier_effect("rgo_throughput", true);
200-
ret &= add_modifier_effect("RGO_throughput", true);
201203
ret &= add_modifier_effect("ruling_party_support", true);
202-
ret &= add_modifier_effect("shared_prestige", true, RAW_DECIMAL);
203204
ret &= add_modifier_effect("social_reform_desire", false);
204205
ret &= add_modifier_effect("soldier_to_pop_loss", true);
205-
ret &= add_modifier_effect("seperatism", false); // paradox typo
206206
ret &= add_modifier_effect("supply_consumption", false);
207207
ret &= add_modifier_effect("supply_range", true);
208208
ret &= add_modifier_effect("suppression_points_modifier", true);
209209
ret &= add_modifier_effect("tariff_efficiency_modifier", true);
210-
ret &= add_modifier_effect("tax_eff", true);
211210
ret &= add_modifier_effect("tax_efficiency", true);
211+
ret &= add_modifier_effect("unemployment_benefit", true);
212212
ret &= add_modifier_effect("unit_recruitment_time", false);
213-
ret &= add_modifier_effect("unit_start_experience", true, RAW_DECIMAL);
214213
ret &= add_modifier_effect("war_exhaustion", false);
215-
ret &= add_modifier_effect("civilization_progress_modifier", true);
216-
ret &= add_modifier_effect("administrative_multiplier", true);
217-
ret &= add_modifier_effect("unemployment_benefit", true);
218-
ret &= add_modifier_effect("minimum_wage", true);
219-
ret &= add_modifier_effect("war_exhaustion_effect", false);
220-
ret &= add_modifier_effect("reinforce_speed", true);
214+
215+
/* State only*/
216+
ret &= add_modifier_effect("flashpoint_tension", true);
217+
ret &= add_modifier_effect("railroads", true); // capitalist likelihood for railroads vs factories
221218

222219
/* Province Modifier Effects */
223220
ret &= add_modifier_effect("assimilation_rate", true);
224221
ret &= add_modifier_effect("boost_strongest_party", false);
225222
ret &= add_modifier_effect("farm_rgo_eff", true);
226-
ret &= add_modifier_effect("farm_RGO_eff", true);
227223
ret &= add_modifier_effect("farm_rgo_size", true);
228-
ret &= add_modifier_effect("farm_RGO_size", true);
229-
ret &= add_modifier_effect("flashpoint_tension", false);
230224
ret &= add_modifier_effect("immigrant_attract", true);
231225
ret &= add_modifier_effect("immigrant_push", false);
232226
ret &= add_modifier_effect("life_rating", true);
@@ -238,28 +232,22 @@ bool ModifierManager::setup_modifier_effects() {
238232
ret &= add_modifier_effect("local_factory_throughput", true);
239233
ret &= add_modifier_effect("local_repair", true);
240234
ret &= add_modifier_effect("local_rgo_output", true);
241-
ret &= add_modifier_effect("local_RGO_output", true);
242235
ret &= add_modifier_effect("local_rgo_throughput", true);
243-
ret &= add_modifier_effect("local_RGO_throughput", true);
244236
ret &= add_modifier_effect("local_ruling_party_support", true);
245237
ret &= add_modifier_effect("local_ship_build", false);
246238
ret &= add_modifier_effect("max_attrition", false, RAW_DECIMAL);
247239
ret &= add_modifier_effect("mine_rgo_eff", true);
248-
ret &= add_modifier_effect("mine_RGO_eff", true);
249240
ret &= add_modifier_effect("mine_rgo_size", true);
250-
ret &= add_modifier_effect("mine_RGO_size", true);
251241
ret &= add_modifier_effect("movement_cost", false);
252242
ret &= add_modifier_effect("number_of_voters", false);
253243
ret &= add_modifier_effect("pop_consciousness_modifier", false, RAW_DECIMAL);
254244
ret &= add_modifier_effect("pop_militancy_modifier", false, RAW_DECIMAL);
255245
ret &= add_modifier_effect("population_growth", true);
256-
ret &= add_modifier_effect("railroads", true); // capitalist likelihood for railroads vs factories
257246
ret &= add_modifier_effect("supply_limit", true, RAW_DECIMAL);
258247

259248
/* Military Modifier Effects */
260249
ret &= add_modifier_effect("attack", true, INT);
261250
ret &= add_modifier_effect("attrition", false, RAW_DECIMAL);
262-
ret &= add_modifier_effect("combat_width", false);
263251
ret &= add_modifier_effect("defence", true, INT);
264252
ret &= add_modifier_effect("experience", true);
265253
ret &= add_modifier_effect("morale", true);
@@ -280,6 +268,12 @@ bool ModifierManager::register_complex_modifier(std::string_view identifier) {
280268
}
281269
}
282270

271+
std::string ModifierManager::get_flat_identifier(
272+
const std::string_view complex_modifier_identifier, const std::string_view variant_identifier
273+
) {
274+
return StringUtils::append_string_views(complex_modifier_identifier, " ", variant_identifier);
275+
}
276+
283277
bool ModifierManager::add_event_modifier(std::string_view identifier, ModifierValue&& values, Modifier::icon_t icon) {
284278
if (identifier.empty()) {
285279
Logger::error("Invalid event modifier effect identifier - empty!");
@@ -370,17 +364,31 @@ bool ModifierManager::parse_scripts(GameManager const& game_manager) {
370364
key_value_callback_t ModifierManager::_modifier_effect_callback(
371365
ModifierValue& modifier, key_value_callback_t default_callback, ModifierEffectValidator auto effect_validator
372366
) const {
373-
const auto add_modifier_cb = [this, &modifier, effect_validator](ModifierEffect const* effect, ast::NodeCPtr value) -> bool {
367+
const auto add_modifier_cb = [this, &modifier,
368+
effect_validator](ModifierEffect const* effect, ast::NodeCPtr value) -> bool {
374369
if (effect_validator(*effect)) {
370+
371+
static const case_insensitive_string_set_t no_effect_modifiers {
372+
"boost_strongest_party", "poor_savings_modifier", "poor_life_needs",
373+
"poor_everyday_needs", "poor_luxury_needs", "middle_life_needs",
374+
"middle_everyday_needs", "middle_luxury_needs", "rich_life_needs",
375+
"rich_everyday_needs", "rich_luxury_needs", "local_artisan_input",
376+
"local_artisan_throughput", "local_artisan_output", "artisan_input",
377+
"artisan_throughput", "artisan_output", "import_cost"
378+
};
379+
if (no_effect_modifiers.contains(effect->get_identifier())) {
380+
Logger::warning("This modifier does nothing: ", effect->get_identifier());
381+
}
375382
return expect_fixed_point(map_callback(modifier.values, effect))(value);
376383
} else {
377384
Logger::error("Failed to validate modifier effect: ", effect->get_identifier());
378385
return false;
379386
}
380387
};
381388

382-
const auto add_flattened_modifier_cb = [this, add_modifier_cb](std::string_view prefix, std::string_view key, ast::NodeCPtr value) -> bool {
383-
const std::string flat_identifier = StringUtils::append_string_views(prefix, "_", key);
389+
const auto add_flattened_modifier_cb =
390+
[this, add_modifier_cb](std::string_view prefix, std::string_view key, ast::NodeCPtr value) -> bool {
391+
const std::string flat_identifier = get_flat_identifier(prefix, key);
384392
ModifierEffect const* effect = get_modifier_effect_by_identifier(flat_identifier);
385393
if (effect != nullptr) {
386394
return add_modifier_cb(effect, value);
@@ -407,6 +415,9 @@ key_value_callback_t ModifierManager::_modifier_effect_callback(
407415
} else {
408416
return expect_dictionary(std::bind_front(add_flattened_modifier_cb, key))(value);
409417
}
418+
} else if (key == "war_exhaustion_effect") {
419+
Logger::warning("war_exhaustion_effect does nothing (vanilla issues have it).");
420+
return true;
410421
} else {
411422
return default_callback(key, value);
412423
}

src/openvic-simulation/misc/Modifier.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
#include "openvic-simulation/scripts/ConditionScript.hpp"
44
#include "openvic-simulation/types/IdentifierRegistry.hpp"
55

6+
#include "dataloader/NodeTools.hpp"
7+
8+
69
namespace OpenVic {
710
struct ModifierManager;
811

@@ -115,8 +118,8 @@ namespace OpenVic {
115118
* so instead we use an IdentifierInstanceRegistry (using std::unique_ptr's under the hood).
116119
*/
117120
private:
118-
IdentifierInstanceRegistry<ModifierEffect> IDENTIFIER_REGISTRY(modifier_effect);
119-
string_set_t complex_modifiers;
121+
CaseInsensitiveIdentifierInstanceRegistry<ModifierEffect> IDENTIFIER_REGISTRY(modifier_effect);
122+
case_insensitive_string_set_t complex_modifiers;
120123

121124
IdentifierRegistry<Modifier> IDENTIFIER_REGISTRY(event_modifier);
122125
IdentifierRegistry<Modifier> IDENTIFIER_REGISTRY(static_modifier);
@@ -135,6 +138,8 @@ namespace OpenVic {
135138
);
136139

137140
bool register_complex_modifier(std::string_view identifier);
141+
static std::string
142+
get_flat_identifier(const std::string_view complex_modifier_identifier, const std::string_view variant_identifier);
138143

139144
bool setup_modifier_effects();
140145

src/openvic-simulation/politics/Rebel.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#include "Rebel.hpp"
22

3+
#include <string_view>
4+
5+
#include "openvic-simulation/misc/Modifier.hpp"
6+
7+
38
using namespace OpenVic;
49
using namespace OpenVic::NodeTools;
510

@@ -172,14 +177,15 @@ bool RebelManager::load_rebels_file(
172177

173178
bool RebelManager::generate_modifiers(ModifierManager& modifier_manager) const {
174179
bool ret = true;
180+
static constexpr std::string_view identifier = "rebel_org_gain";
181+
static constexpr bool is_positive_good = false;
182+
ret &= modifier_manager.register_complex_modifier(identifier);
175183

176-
ret &= modifier_manager.register_complex_modifier("rebel_org_gain");
177-
178-
ret &= modifier_manager.add_modifier_effect("rebel_org_gain_all", false);
184+
ret &= modifier_manager.add_modifier_effect(ModifierManager::get_flat_identifier(identifier, "all"), is_positive_good);
179185

180186
for (RebelType const& rebel_type : get_rebel_types()) {
181187
ret &= modifier_manager.add_modifier_effect(
182-
StringUtils::append_string_views("rebel_org_gain_", rebel_type.get_identifier()), false
188+
ModifierManager::get_flat_identifier(identifier, rebel_type.get_identifier()), is_positive_good
183189
);
184190
}
185191
return ret;

src/openvic-simulation/pop/Pop.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,15 +319,17 @@ bool PopManager::load_pop_into_vector(
319319

320320
bool PopManager::generate_modifiers(ModifierManager& modifier_manager) const {
321321
bool ret = true;
322+
322323
for (Strata const& strata : get_stratas()) {
323-
const auto strata_modifier = [&modifier_manager, &ret, &strata](std::string_view suffix, bool positive_good) -> void {
324+
const auto strata_modifier = [&modifier_manager, &ret, &strata](
325+
std::string_view suffix, bool is_positive_good
326+
) -> void {
324327
ret &= modifier_manager.add_modifier_effect(
325-
StringUtils::append_string_views(strata.get_identifier(), suffix), positive_good
328+
StringUtils::append_string_views(strata.get_identifier(), suffix), is_positive_good
326329
);
327330
};
328331

329332
strata_modifier("_income_modifier", true);
330-
strata_modifier("_savings_modifier", true);
331333
strata_modifier("_vote", true);
332334

333335
strata_modifier("_life_needs", false);

0 commit comments

Comments
 (0)