diff --git a/Config/common/peace_conference.cwt b/Config/common/peace_conference.cwt index d15709ae..8424d1bd 100644 --- a/Config/common/peace_conference.cwt +++ b/Config/common/peace_conference.cwt @@ -165,4 +165,8 @@ alias[trigger:pc_total_score] = int ### Checks if the current scope has the specified amount in current score within the peace conference. ## scope = country -alias[trigger:pc_current_score] = int \ No newline at end of file +alias[trigger:pc_current_score] = int + +### Check if state is claimed with a take_states action in conference for TAG. Example: pc_is_state_claimed_and_taken_by = SOV/ROOT/ROOT.FROM" +## scope = state +alias[trigger:pc_is_state_claimed_and_taken_by] = scope[country] diff --git a/Config/common/units.cwt b/Config/common/units.cwt index 11761426..7219cf11 100644 --- a/Config/common/units.cwt +++ b/Config/common/units.cwt @@ -48,7 +48,7 @@ types = { unit = { ## cardinality = 0..1 - abbreviation = localisation_inline + abbreviation = scalar ### 3D map asset. sprite = scalar #enum[unit_sprites] diff --git a/Config/effects.cwt b/Config/effects.cwt index e0f9b5c8..a2c18d8c 100644 --- a/Config/effects.cwt +++ b/Config/effects.cwt @@ -672,10 +672,26 @@ alias[effect:set_country_leader_ideology] = enum[sub_ideology] ## scope = country alias[effect:add_country_leader_trait] = +### Add trait to active country leader. +## scope = country +alias[effect:add_country_leader_trait] = { + trait = + ## cardinality = 0..1 + ideology = +} + ### Remove trait from active country leader. ## scope = country alias[effect:remove_country_leader_trait] = +### Remove trait from active country leader. +## scope = country +alias[effect:remove_country_leader_trait] = { + trait = + ## cardinality = 0..1 + ideology = +} + ### Set properties of a political party. ## scope = country alias[effect:set_political_party] = { @@ -828,11 +844,12 @@ alias[effect:puppet] = scope[country] ## scope = country alias[effect:puppet] = enum[country_tags] -### Puppets specified country. +### Puppets specified country. By default, cancels the puppets existing war relations ## scope = country alias[effect:puppet] = { target = scope[country] target = enum[country_tags] + ## cardinality = 0..1 end_wars = bool ## cardinality = 0..1 end_civil_wars = bool @@ -1222,6 +1239,8 @@ alias[effect:declare_war_on] = { } ## cardinality = 0..1 generator = value[array] + ## cardinality = 0..1 + generator = scope[state] } # not used in vanilla or documented in wiki @@ -1352,6 +1371,10 @@ alias[effect:create_wargoal] = { ## cardinality = 0..1 generator = owned_states ## cardinality = 0..1 + generator = value[array] + ## cardinality = 0..1 + generator = scope[state] + ## cardinality = 0..1 expire = date_field ## cardinality = 0..1 expire = int @@ -1506,6 +1529,13 @@ alias[effect:set_rule] = { desc = localisation } +### Clears rule added by set_rule. In the example it will clear can_not_declare_war = yes set by set_rule: clear_rule = { can_not_declare_war = yes } +## scope = country +alias[effect:clear_rule] = { + ## cardinality = 1..inf + enum[game_rules] = bool +} + ### Adds rule to country's party. ## scope = country alias[effect:set_party_rule] = { @@ -2387,13 +2417,6 @@ alias[effect:modify_unit_leader_flag] = { ## scope = { unit_leader character } alias[effect:clr_unit_leader_flag] = value[leader_flag] -### Sets the country that owns current scope general. -## scope = { character unit_leader } -alias[effect:set_nationality] = scope[country] -### Sets the country that owns current scope general. -## scope = { character unit_leader } -alias[effect:set_nationality] = enum[country_tags] - ### Demotes field marshal to general. ## scope = { character unit_leader } alias[effect:demote_leader] = yes diff --git a/Config/effects_aat.cwt b/Config/effects_aat.cwt index 483ed8b3..d8cadae9 100644 --- a/Config/effects_aat.cwt +++ b/Config/effects_aat.cwt @@ -300,3 +300,53 @@ alias[effect:give_market_access] = enum[country_tags] ### Give market access to x ## scope = country alias[effect:give_market_access] = scope[country] + +### Creates a purchase contract between the countries +## scope = any +alias[effect:create_purchase_contract] = { + seller = scope[country] + buyer = scope[country] + civilian_factories = int + ## cardinality = 1..inf + equipment = { + type = enum[equipment_bonus_type] + amount = int + } +} + +### Cancels the scoped purchase contract +## scope = purchase_contract +alias[effect:cancel_purchase_contract] = yes + +### Executes children effects on a random purchase contract of the country in scope, that fulfills the "limit" trigger. tooltip = key need to be added to override the tooltip title +## scope = country +## push_scope = purchase_contract +alias[effect:random_purchase_contract] = { + ### Override the tooltip title + ## cardinality = 0..1 + tooltip = localisation + ## cardinality = 0..1 + limit = { + alias_name[trigger] = alias_match_left[trigger] + } + alias_name[effect] = alias_match_left[effect] +} + +### Executes children effects on every purchase contract (or "random_select_amount" of random purchase contracts if specified) of the country in scope, that fulfills the "limit" trigger. tooltip = key need to be added to override the tooltip title +## scope = country +## push_scope = purchase_contract +alias[effect:every_purchase_contract] = { + ### Override the tooltip title + ## cardinality = 0..1 + tooltip = localisation + ### Apply the effect to this number of randomly selected entities + ## cardinality = 0..1 + random_select_amount = int[1..inf] + ## cardinality = 0..1 + display_individual_scopes = bool + ## cardinality = 0..1 + limit = { + alias_name[trigger] = alias_match_left[trigger] + } + alias_name[effect] = alias_match_left[effect] +} \ No newline at end of file diff --git a/Config/effects_new.cwt b/Config/effects_new.cwt index c1842725..9453839e 100644 --- a/Config/effects_new.cwt +++ b/Config/effects_new.cwt @@ -9,37 +9,12 @@ alias[effect:gain_xp] = variable_field ###Delete units of a country. No tooltip is generated. ## scopes = { COUNTRY } alias[effect:delete_unit] = { + ## error_if_only_match = "template" is replaced with "division_template" in docs, proceed with caution + ## severity = warning ## cardinality = 0..1 template = scalar ## cardinality = 0..1 - id = variable_field - ## cardinality = 0..1 - state = - ## cardinality = 0..1 - state = scope[state] - ## cardinality = 0..1 - disband = bool -} - -###Delete units of a country. No tooltip is generated. -## scopes = { COUNTRY } -alias[effect:delete_unit] = { - ## cardinality = 0..1 - template = scalar - ## cardinality = 0..1 - id = variable_field - state = - state = scope[state] - ## cardinality = 0..1 - disband = bool -} - - -###Delete units of a country. No tooltip is generated. -## scopes = { COUNTRY } -alias[effect:delete_unit] = { - ## cardinality = 0..1 - template = scalar + division_template = scalar ## cardinality = 0..1 id = variable_field ## cardinality = 0..1 @@ -127,6 +102,10 @@ alias[effect:create_operative_leader] = { female = bool ## cardinality = 0..1 skill = int + ## cardinality = 0..1 + gender = male + ## cardinality = 0..1 + gender = female } ###Capture an operative. Can be used from a scope and a target that is either a country or a unit leader. @@ -1223,22 +1202,6 @@ alias[effect:randomize_temp_variable] = { lambda = variable_field_32 } -###Sets a temp variable to a random value. -## scopes = { any } -alias[effect:set_temp_variable_to_random] = value_set[variable] - -###Sets a temp variable to a random value. -## scopes = { any } -alias[effect:set_temp_variable_to_random] = { - var = value_set[variable] - ## cardinality = 0..1 - min = variable_field_32 - ## cardinality = 0..1 - max = variable_field_32 - ## cardinality = 0..1 - integer = bool -} - ###Add divisional commander xp to unit ## scopes = { any } alias[effect:add_divisional_commander_xp] = int \ No newline at end of file diff --git a/Config/effects_nsb.cwt b/Config/effects_nsb.cwt index 775b3918..23716e9e 100644 --- a/Config/effects_nsb.cwt +++ b/Config/effects_nsb.cwt @@ -371,24 +371,6 @@ alias[effect:add_advisor_role] = { name = localisation ## cardinality = 0..1 desc = localisation - ## replace_scope = { this = character root = country } - ## cardinality = 0..1 - allowed = { - ## cardinality = ~1..inf - alias_name[trigger] = alias_match_left[trigger] - } - ## replace_scope = { this = character root = country } - ## cardinality = 0..1 - visible = { - ## cardinality = ~1..inf - alias_name[trigger] = alias_match_left[trigger] - } - ## replace_scope = { this = character root = country } - ## cardinality = 0..1 - available = { - ## cardinality = ~1..inf - alias_name[trigger] = alias_match_left[trigger] - } ### Sets advsior effects. ## cardinality = ~1..1 traits = { @@ -414,22 +396,6 @@ alias[effect:add_advisor_role] = { enum[base_factor] = variable_field alias_name[modifier_rule] = alias_match_left[modifier_rule] } - ## replace_scope = { this = character root = country } - ## cardinality = 0..inf - on_add = { - alias_name[effect] = alias_match_left[effect] - } - ## replace_scope = { this = character root = country } - ## cardinality = 0..inf - on_remove = { - alias_name[effect] = alias_match_left[effect] - } - ### While it is used in vanilla and doesn't throw errors, I can't get it to work reliably so I suspect there is some hard-coded strangeness going on here. - ## replace_scope = { this = character root = country } - ## cardinality = 0..1 - do_effect = { - alias_name[trigger] = alias_match_left[trigger] - } ### Modifiers that are applied to tag while the advisor is active. ## replace_scope = { this = character root = country } ## cardinality = 0..1 @@ -646,8 +612,8 @@ alias[effect:remove_trait] = { slot = value[character_advisor_slot] } -### Transfers character from scope country to target_country -## scope = { country } +### Transfer from one country to another for the character in scope. Note that this is not related to operative nationalities added via add_nationality. Note that for operative, this will temporarily lock their slot on the country of origin +## scope = { country character unit_leader operative } alias[effect:set_nationality] = { target_country = scope[country] target_country = enum[country_tags] @@ -659,18 +625,18 @@ alias[effect:set_nationality] = { character = scope[character] } -### Transfers scoped character from PREV country to target +### Transfer from one country to another for the character in scope. Note that this is not related to operative nationalities added via add_nationality. Note that for operative, this will temporarily lock their slot on the country of origin ## scope = { character unit_leader operative } alias[effect:set_nationality] = scope[country] -### Transfers scoped character from PREV country to target +### Transfer from one country to another for the character in scope. Note that this is not related to operative nationalities added via add_nationality. Note that for operative, this will temporarily lock their slot on the country of origin ## scope = { character unit_leader operative } alias[effect:set_nationality] = { target_country = scope[country] target_country = enum[country_tags] } -### Transfers scoped character from PREV country to target +### Transfer from one country to another for the character in scope. Note that this is not related to operative nationalities added via add_nationality. Note that for operative, this will temporarily lock their slot on the country of origin ## scope = { character unit_leader operative } alias[effect:set_nationality] = enum[country_tags] @@ -959,10 +925,10 @@ alias[effect:create_entity] = { visible = } -### Deletes an entity +### Destroys an existing entity ### IDs are set by the create_entity effect. ## scope = any -alias[effect:set_entity_movement] = value[entity_id] +alias[effect:destroy_entity] = value[entity_id] ### Sets the position and rotation of an entity using two coordinates. ### IDs are set by the create_entity effect. Uses the the same coordinate system that the map uses. @@ -986,7 +952,7 @@ alias[effect:set_entity_movement] = { ### Sets the position of an existing entity. ### IDs are set by the create_entity effect. Uses the the same coordinate system that the map uses. ## scope = any -alias[effect:set_entity_position ] = { +alias[effect:set_entity_position] = { id = value[entity_id] x = float y = float @@ -1019,4 +985,52 @@ alias[effect:set_entity_scale] = { alias[effect:set_entity_animation] = { id = value[entity_id] animation = -} \ No newline at end of file +} + +### Sets a variable to the number of supply vehicles in stockpile or that are needed +## scope = country +alias[effect:get_supply_vehicles] = { + var = value_set[variable] + type = truck + type = train + ### default no. If yes, gets the number of needed vehicles + ## cardinality = 0..1 + need = yes + ## error_if_only_match = This is the default value and can be omitted + ## severity = info + ## cardinality = 0..1 + need = no +} + +### Sets a temp variable to the number of supply vehicles in stockpile or that are needed +## scope = country +alias[effect:get_supply_vehicles_temp] = { + var = value_set[variable] + type = truck + type = train + ### default no. If yes, gets the number of needed vehicles + ## cardinality = 0..1 + need = yes + ## error_if_only_match = This is the default value and can be omitted + ## severity = info + ## cardinality = 0..1 + need = no +} + +### Executes children effects on random characters that fulfills the "limit" trigger.Has to use has_ideology in limit to determine the party (with ideology group). tooltip=key can be added to override tooltip title +## scope = country +## push_scope = character +alias[effect:party_leader] = { + ## cardinality = 0..1 + tooltip = localisation + ### Documentation suggests to use has_ideology trigger here + ## cardinality = 0..1 + limit = { + has_ideology = enum[sub_ideology] + } + alias_name[effect] = alias_match_left[effect] +} + +### Teleport the target country's railway guns to the province to which railway guns are deployed +## scope = country +alias[effect:teleport_railway_guns_to_deploy_province] = scope[country] diff --git a/Config/effects_toa.cwt b/Config/effects_toa.cwt index adbe14a0..5c81a247 100644 --- a/Config/effects_toa.cwt +++ b/Config/effects_toa.cwt @@ -15,3 +15,21 @@ alias[effect:add_relation_rule_override] = { ## cardinality = 0..1 usage_desc = localisation } + +### Removes an override rule to the country's relation to other countries.The desc key can be used to supply a custom description for the effect when a named trigger is used as key +## scope = country +alias[effect:remove_relation_rule_override] = { + enum[game_rules] = bool + ## cardinality = 0..1 + target = scope[country] + ## cardinality = 0..1 + target = enum[country_tags] + ## cardinality = 0..1 + trigger = scalar + ## cardinality = 0..1 + usage_desc = localisation +} + +### Removes decision on cooldown to reactivate or remove +## scope = country +alias[effect:remove_decision_on_cooldown] = diff --git a/Config/history/oobs.cwt b/Config/history/oobs.cwt index a377c7a2..a7ad7b8f 100644 --- a/Config/history/oobs.cwt +++ b/Config/history/oobs.cwt @@ -12,6 +12,7 @@ oob = { ## cardinality = 0..1 focus = { current = + current = progress = float[0..inf] } diff --git a/Config/links.cwt b/Config/links.cwt index ce521657..bab8fa6a 100644 --- a/Config/links.cwt +++ b/Config/links.cwt @@ -96,11 +96,11 @@ links = { from_data = yes type = both prefix = token: - data = - data = - data = - data = - data = + data_source = + data_source = + data_source = + data_source = + data_source = } mio = { diff --git a/Config/scopes.cwt b/Config/scopes.cwt index fb485e25..e04d3177 100644 --- a/Config/scopes.cwt +++ b/Config/scopes.cwt @@ -133,6 +133,9 @@ scopes = { Politics = { aliases = { politics } } + "Purchase Contract" = { + aliases = { purchase_contract } + } "War Production" = { aliases = { war_production } } diff --git a/Config/script_documentation.json b/Config/script_documentation.json index 9b7ca0d4..fd80a442 100644 --- a/Config/script_documentation.json +++ b/Config/script_documentation.json @@ -8839,69 +8839,69 @@ "IsDynamic": true, "categories": ["army"] }, { - "groupname": "trait__xp_gain_factor", - "desc": "Xp gain factor (used if the trait has not prefix 'trait_').", + "groupname": "_xp_gain_factor", + "desc": "Xp gain factor (used if the trait has prefix 'trait_').", "type": "number", "decimal_places": 2, "IsDynamic": true, "categories": ["naval", "country", "army"], - "modifiers": ["BALTIC_anti_bolshevik", "BALTIC_ex_russian", "ETH_hero_of_ethiopia", "JAP_communist_sympathizer", "JAP_samurai_lineage", "POL_sanation_left_leader", "POL_sanation_right_leader", "SWE_disillusioned_with_the_government", "SWE_promoted_away_from_power", "SWE_wounded_in_protests", "adaptable", "aggressive_assaulter", "air_controller", "ambusher", "arctic_water_expert", "armor_officer", "ascari_officer", "aviation_enthusiast", "battleship_adherent", "bearer_of_artillery", "big_guns_expert", "blockade_runner", "blue_water_expert", "bold", "brilliant_strategist", "camouflage_expert", "career_officer", "caustic_personality", "cavalry_expert", "cavalry_leader", "cavalry_officer", "chief_engineer", "combined_arms_expert", "commando", "concealment_expert", "craven", "crisis_magician", "cruiser_captain", "cuts_corners", "defensive_doctrine", "demoted", "desert_fox", "destroyer_leader", "disgruntled", "dive_bomber", "engineer_officer", "exiled_leader", "expert_delegator", "expert_improviser", "fast_planner", "fighter_director", "fleet_protector", "flight_deck_manager", "fly_swatter", "fortress_buster", "gentlemanly", "green_water_expert", "ground_pounder", "guerilla_fighter", "gunnery_expert", "harsh_leader", "hidden_sympathies", "hill_fighter", "hunter_killer", "infantry_expert", "infantry_leader", "infantry_officer", "inflexible_strategist", "inshore_fighter", "inspirational_leader", "invader_ii", "ironside", "irregulars_officer", "jaeger", "jungle_rat", "lancer", "loading_drill_master", "logistics_wizard", "lone_wolf", "marksman", "media_personality", "militias_officer", "mine_craft", "naval_invader", "naval_liason", "naval_lineage", "navy_career_officer", "navy_media_personality", "offensive_doctrine", "old_guard", "old_guard_navy", "operative_commando", "operative_demolition_expert", "operative_double_agent", "operative_escape_artist", "operative_infiltrator", "operative_linguist", "operative_master_interrogator", "operative_natural_orator", "operative_safe_cracker", "operative_seducer", "operative_tough", "operative_well_groomed", "organisational_leader", "organizer", "panzer_expert", "panzer_leader", "paratrooper", "peasant_sympathiser", "politically_connected", "promoted_from_the_ranks", "ranger", "reassigned", "recently_promoted", "safety_first", "scavenger", "search_pattern_expert", "seawolf", "sick", "silent_hunter", "skilled_staffer", "skirmisher", "smoke_screen_expert", "spotter", "substance_abuser", "substance_addict", "superior_tactician", "swamp_fox", "thorough_planner", "torpedo_bomber", "torpedo_expert", "trickster", "unyielding_defender", "urban_assault_specialist", "war_hero", "winter_expert", "winter_specialist", "wounded"] + "modifiers": ["trait_BUL_ff_sympathizer", "trait_BUL_tsar_loyalist", "trait_BUL_zveno_member", "trait_GRE_fascist_sympathizer", "trait_GRE_marxist_acolyte", "trait_GRE_stauch_monarchist", "trait_GRE_venezelist_loyalist", "trait_SOV_bukharinist", "trait_SOV_cowed_by_stalin_army", "trait_SOV_cowed_by_stalin_navy", "trait_SOV_determined", "trait_SOV_foreign_military_advisor", "trait_SOV_monarchist_sympathizer", "trait_SOV_stalinist", "trait_SOV_trotskyist", "trait_SPA_carlist_loyalties", "trait_SPA_falangist_loyalties", "trait_SPA_nationalist_sympathies", "trait_SPR_anti_stalinist_loyalties", "trait_SPR_republican_loyalties", "trait_SPR_stalinist_loyalties", "trait_TUR_kemalist_champion", "trait_cautious", "trait_engineer", "trait_mountaineer", "trait_reckless"] }, { - "groupname": "_acceptance", - "desc": "Ideology acceptance.", + "groupname": "_cost_factor", + "desc": "Idea group cost factor.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["politics"], - "modifiers": ["communism", "democratic", "fascism", "neutrality"] + "categories": ["country"], + "modifiers": ["academy_spirit", "air_chief", "air_force_academy_spirit", "air_force_command_spirit", "air_force_spirit", "aircraft_manufacturer", "army_chief", "army_spirit", "country", "division_command_spirit", "economy", "hidden_ideas", "high_command", "industrial_concern", "materiel_manufacturer", "mobilization_laws", "naval_academy_spirit", "naval_command_spirit", "naval_manufacturer", "navy_chief", "navy_spirit", "political_advisor", "tank_manufacturer", "theorist", "trade_laws"] }, { - "groupname": "production_speed__factor", - "desc": "Country building construction speed factor.", + "groupname": "state_production_speed__factor", + "desc": "State building construction speed factor.", "type": "number", "decimal_places": 2, "IsDynamic": true, - "categories": ["country"], + "categories": ["state"], "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] }, { - "groupname": "_outcome", - "desc": "Operation outcome modifier.", + "groupname": "experience_gain__combat_factor", + "desc": "Unit experience gain factor in combat.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["intelligence_agency"], - "modifiers": ["FRA_coup_in_central_africa", "FRA_coup_in_indochina", "FRA_coup_in_madagascar", "FRA_coup_in_north_africa", "FRA_coup_in_syria", "FRA_coup_in_west_africa", "FRA_instigate_workers_revolution_britain", "FRA_instigate_workers_revolution_germany", "FRA_instigate_workers_revolution_italy", "FRA_instigate_workers_revolution_spain", "bruneval_raid", "capture_tito", "heavy_water_raid", "murder_trotsky", "nuclear_espionage", "operation_boost_resistance", "operation_capture_cipher", "operation_collaboration_government", "operation_coordinated_strike", "operation_coup_government", "operation_fake_intel", "operation_infiltrate_armed_forces_airforce", "operation_infiltrate_armed_forces_army", "operation_infiltrate_armed_forces_navy", "operation_infiltrate_civilian", "operation_make_resistance_contacts", "operation_rescue_operative", "operation_steal_tech", "operation_steal_tech_airforce", "operation_steal_tech_army", "operation_steal_tech_civilian", "operation_steal_tech_navy", "operation_targeted_sabotage_industry", "operation_targeted_sabotage_infrastructure", "operation_targeted_sabotage_resources", "operation_warsaw_uprising", "raid_trotskys_villa", "rescue_mussolini"] + "categories": ["naval", "country"], + "modifiers": ["airborne_light_armor", "amphibious_armor", "amphibious_heavy_armor", "amphibious_light_armor", "amphibious_mechanized", "amphibious_medium_armor", "anti_air", "anti_air_brigade", "anti_tank", "anti_tank_brigade", "armored_car", "armored_car_recon", "artillery", "artillery_brigade", "battle_cruiser", "battleship", "bicycle_battalion", "blackshirt_assault_battalion", "bus", "camelry", "carrier", "cas", "cavalry", "cv_cas", "cv_fighter", "cv_nav_bomber", "cv_suicide_craft", "destroyer", "engineer", "fake_intel_unit", "field_hospital", "fighter", "guided_missile", "heavy_armor", "heavy_cruiser", "heavy_fighter", "heavy_flame_tank", "heavy_sp_anti_air_brigade", "heavy_sp_artillery_brigade", "heavy_tank_destroyer_brigade", "infantry", "irregular_infantry", "jet_fighter", "jet_strat_bomber", "jet_tac_bomber", "jungle_pioneers_support", "light_armor", "light_cruiser", "light_flame_tank", "light_sp_anti_air_brigade", "light_sp_artillery_brigade", "light_tank_destroyer_brigade", "light_tank_recon", "logistics_company", "long_range_patrol_support", "maintenance_company", "marine", "marine_commando", "maritime_patrol_plane", "mechanized", "medium_armor", "medium_flame_tank", "medium_sp_anti_air_brigade", "medium_sp_artillery_brigade", "medium_tank_destroyer_brigade", "military_police", "militia", "modern_armor", "modern_sp_anti_air_brigade", "modern_sp_artillery_brigade", "modern_tank_destroyer_brigade", "mot_anti_air_brigade", "mot_anti_tank_brigade", "mot_artillery_brigade", "mot_recon", "mot_rocket_artillery_brigade", "motorized", "motorized_rocket_brigade", "mountaineers", "nav_bomber", "paratrooper", "penal_battalion", "pioneer_support", "railway_gun", "rangers_support", "recon", "rocket_artillery", "rocket_artillery_brigade", "rocket_interceptor", "scout_plane", "signal_company", "strat_bomber", "submarine", "suicide_craft", "super_heavy_armor", "super_heavy_sp_anti_air_brigade", "super_heavy_sp_artillery_brigade", "super_heavy_tank_destroyer_brigade", "tac_bomber", "transport_plane", "winter_logistics_support"] }, { - "groupname": "_preferred_weight_factor", - "desc": "Naval preferred weight factor.", + "groupname": "_acceptance", + "desc": "Ideology acceptance.", "type": "number", - "decimal_places": 2, + "decimal_places": 0, "IsDynamic": true, - "categories": ["country"], - "modifiers": ["nullCombatTactic", "tactic_ambush", "tactic_assault", "tactic_attacker_hb_attack", "tactic_attacker_hb_rush", "tactic_attacker_hb_storm", "tactic_attacker_sb_hold", "tactic_attacker_sb_skillful_defence", "tactic_backhand_blow", "tactic_banzai_charge", "tactic_barrage", "tactic_basic_attack", "tactic_basic_defend", "tactic_blitz", "tactic_breakthrough", "tactic_cc_attack", "tactic_cc_defend", "tactic_cc_local_strong_point", "tactic_cc_storm", "tactic_cc_withdraw", "tactic_counterattack", "tactic_defender_hb_hold", "tactic_defender_hb_skillful_defence", "tactic_defender_sb_assault", "tactic_defender_sb_reckless_assault", "tactic_defender_sb_retake_bridge", "tactic_delay", "tactic_elastic_defense", "tactic_encirclement", "tactic_guerrilla_tactics", "tactic_hold_bridge", "tactic_human_wave_tactics", "tactic_infantry_charge", "tactic_masterful_blitz", "tactic_overwhelming_fire", "tactic_planned_attack", "tactic_relentless_assault", "tactic_seize_bridge", "tactic_shock", "tactic_tactical_withdrawal", "tactic_tw_attack", "tactic_tw_chase", "tactic_tw_defend", "tactic_tw_evade", "tactic_tw_intercept", "tactic_unexpected_thrust"] + "categories": ["politics"], + "modifiers": ["communism", "democratic", "fascism", "neutrality"] }, { - "groupname": "module__design_cost_factor", - "desc": "Module design cost factor.", + "groupname": "trait__xp_gain_factor", + "desc": "Xp gain factor (used if the trait has not prefix 'trait_').", "type": "number", "decimal_places": 2, "IsDynamic": true, "categories": ["naval", "country", "army"], - "modifiers": ["NOR_rikstanken_turret", "NOR_tank_rikstanken_armor", "additional_machine_guns", "air_air_radar_1", "air_air_radar_2", "air_ground_radar_1", "air_ground_radar_2", "aircraft_cannon_1_1x", "aircraft_cannon_1_2x", "aircraft_cannon_2_1x", "aircraft_cannon_2_2x", "airdropped_mines", "amphibious_drive", "armor_piercing_bomb_locks", "armor_plate_large", "armor_plate_medium", "armor_plate_small", "armor_skirts", "auto_loader", "bomb_locks", "bomb_sights_1", "bomb_sights_2", "cannon_defense_turret", "cannon_defense_turret_2x", "carrier_ship_engine_1", "carrier_ship_engine_2", "carrier_ship_engine_3", "carrier_ship_engine_4", "cruiser_ship_engine_1", "cruiser_ship_engine_2", "cruiser_ship_engine_3", "cruiser_ship_engine_4", "demining_coil", "dive_brakes_small", "dozer_blade", "dp_light_battery_1", "dp_light_battery_2", "dp_light_battery_3", "dp_light_battery_4", "dp_ship_medium_1", "dp_ship_secondaries_1", "dp_ship_secondaries_2", "dp_ship_secondaries_3", "dp_ship_secondaries_4", "drop_tanks", "easy_maintenance", "engine_1_1x", "engine_1_2x", "engine_1_3x", "engine_1_4x", "engine_1_6x", "engine_2_1x", "engine_2_2x", "engine_2_3x", "engine_2_4x", "engine_2_6x", "engine_3_1x", "engine_3_2x", "engine_3_3x", "engine_3_4x", "engine_3_6x", "engine_4_1x", "engine_4_2x", "engine_4_3x", "engine_4_4x", "engine_4_6x", "expanded_fuel_tank", "extra_ammo_storage", "fixed_explosive_charge", "flamethrower", "floats", "flying_boat_large", "flying_boat_medium", "fuel_tanks_large", "fuel_tanks_medium", "fuel_tanks_small", "guided_anti_ship_missile", "heavy_bomb_locks", "heavy_mg_2x", "heavy_mg_4x", "heavy_ship_engine_1", "heavy_ship_engine_2", "heavy_ship_engine_3", "heavy_ship_engine_4", "hmg_defense_turret", "hmg_defense_turret_2x", "jet_engine_1x", "jet_engine_2x", "jet_engine_3x", "jet_engine_4x", "jet_engine_6x", "large_aircraft_cannon_1x", "large_aircraft_cannon_2x", "large_bomb_bay", "light_mg_2x", "light_mg_4x", "light_ship_engine_1", "light_ship_engine_2", "light_ship_engine_3", "light_ship_engine_4", "lmg_defense_turret", "lmg_defense_turret_2x", "medium_bomb_bay", "non_strategic_materials_large", "non_strategic_materials_medium", "non_strategic_materials_small", "radio_navigation_1", "radio_navigation_2", "recon_camera", "rocket_engine_1", "rocket_engine_2", "rocket_engine_3", "rocket_rails", "secondary_turret_hmg", "secondary_turret_small_cannon", "self_sealing_fuel_tanks_large", "self_sealing_fuel_tanks_medium", "self_sealing_fuel_tanks_small", "ship_airplane_launcher_1", "ship_airplane_launcher_2", "ship_anti_air_1", "ship_anti_air_2", "ship_anti_air_3", "ship_anti_air_4", "ship_armor_bb_1", "ship_armor_bb_2", "ship_armor_bb_3", "ship_armor_bc_1", "ship_armor_bc_2", "ship_armor_bc_3", "ship_armor_carrier_deck", "ship_armor_cruiser_1", "ship_armor_cruiser_2", "ship_armor_cruiser_3", "ship_armor_cruiser_4", "ship_armor_shbb", "ship_deck_space", "ship_depth_charge_1", "ship_depth_charge_2", "ship_depth_charge_3", "ship_depth_charge_4", "ship_extra_fuel_tank", "ship_fire_control_system_0", "ship_fire_control_system_1", "ship_fire_control_system_2", "ship_fire_control_system_3", "ship_heavy_battery_1", "ship_heavy_battery_2", "ship_heavy_battery_3", "ship_heavy_battery_4", "ship_light_battery_1", "ship_light_battery_2", "ship_light_battery_3", "ship_light_battery_4", "ship_light_medium_battery_1", "ship_light_medium_battery_2", "ship_light_medium_battery_3", "ship_light_medium_battery_4", "ship_medium_battery_1", "ship_medium_battery_2", "ship_medium_battery_3", "ship_medium_battery_4", "ship_mine_layer_1", "ship_mine_layer_sub", "ship_mine_sweeper_1", "ship_radar_1", "ship_radar_2", "ship_radar_3", "ship_radar_4", "ship_secondaries_1", "ship_secondaries_2", "ship_sonar_1", "ship_sonar_2", "ship_sub_snorkel_1", "ship_sub_snorkel_2", "ship_super_heavy_battery_1", "ship_torpedo_1", "ship_torpedo_2", "ship_torpedo_3", "ship_torpedo_4", "ship_torpedo_sub_1", "ship_torpedo_sub_2", "ship_torpedo_sub_3", "ship_torpedo_sub_4", "sloped_armor", "small_bomb_bay", "smoke_launchers", "squeezebore_adaptor", "stabilizer", "sub_ship_engine_1", "sub_ship_engine_2", "sub_ship_engine_3", "sub_ship_engine_4", "tank_anti_air_cannon", "tank_anti_air_cannon_2", "tank_anti_air_cannon_3", "tank_auto_cannon", "tank_auto_cannon_2", "tank_bogie_suspension", "tank_buster_1", "tank_buster_2", "tank_cast_armor", "tank_christie_suspension", "tank_close_support_gun", "tank_diesel_engine", "tank_gas_turbine_engine", "tank_gasoline_engine", "tank_half_track_suspension", "tank_heavy_cannon", "tank_heavy_cannon_2", "tank_heavy_cannon_3", "tank_heavy_fixed_superstructure_turret", "tank_heavy_howitzer", "tank_heavy_machine_gun", "tank_heavy_three_man_tank_turret", "tank_heavy_two_man_tank_turret", "tank_high_velocity_cannon", "tank_high_velocity_cannon_2", "tank_high_velocity_cannon_3", "tank_interleaved_suspension", "tank_light_fixed_superstructure_turret", "tank_light_one_man_tank_turret", "tank_light_three_man_tank_turret", "tank_light_two_man_tank_turret", "tank_medium_cannon", "tank_medium_cannon_2", "tank_medium_fixed_superstructure_turret", "tank_medium_howitzer", "tank_medium_howitzer_2", "tank_medium_one_man_tank_turret", "tank_medium_three_man_tank_turret", "tank_medium_two_man_tank_turret", "tank_modern_tank_turret", "tank_petrol_electric_engine", "tank_radio_1", "tank_radio_2", "tank_radio_3", "tank_riveted_armor", "tank_rocket_launcher", "tank_rocket_launcher_2", "tank_small_cannon", "tank_small_cannon_2", "tank_super_heavy_cannon", "tank_super_heavy_four_man_tank_turret", "tank_super_heavy_three_man_tank_turret", "tank_torsion_bar_suspension", "tank_welded_armor", "tank_wheeled_suspension", "torpedo_mounting", "torpedo_mounting_2", "torpedo_mounting_3", "wet_ammo_storage"] + "modifiers": ["BALTIC_anti_bolshevik", "BALTIC_ex_russian", "ETH_hero_of_ethiopia", "JAP_communist_sympathizer", "JAP_samurai_lineage", "POL_sanation_left_leader", "POL_sanation_right_leader", "SWE_disillusioned_with_the_government", "SWE_promoted_away_from_power", "SWE_wounded_in_protests", "adaptable", "aggressive_assaulter", "air_controller", "ambusher", "arctic_water_expert", "armor_officer", "ascari_officer", "aviation_enthusiast", "battleship_adherent", "bearer_of_artillery", "big_guns_expert", "blockade_runner", "blue_water_expert", "bold", "brilliant_strategist", "camouflage_expert", "career_officer", "caustic_personality", "cavalry_expert", "cavalry_leader", "cavalry_officer", "chief_engineer", "combined_arms_expert", "commando", "concealment_expert", "craven", "crisis_magician", "cruiser_captain", "cuts_corners", "defensive_doctrine", "demoted", "desert_fox", "destroyer_leader", "disgruntled", "dive_bomber", "engineer_officer", "exiled_leader", "expert_delegator", "expert_improviser", "fast_planner", "fighter_director", "fleet_protector", "flight_deck_manager", "fly_swatter", "fortress_buster", "gentlemanly", "green_water_expert", "ground_pounder", "guerilla_fighter", "gunnery_expert", "harsh_leader", "hidden_sympathies", "hill_fighter", "hunter_killer", "infantry_expert", "infantry_leader", "infantry_officer", "inflexible_strategist", "inshore_fighter", "inspirational_leader", "invader_ii", "ironside", "irregulars_officer", "jaeger", "jungle_rat", "lancer", "loading_drill_master", "logistics_wizard", "lone_wolf", "marksman", "media_personality", "militias_officer", "mine_craft", "naval_invader", "naval_liason", "naval_lineage", "navy_career_officer", "navy_media_personality", "offensive_doctrine", "old_guard", "old_guard_navy", "operative_commando", "operative_demolition_expert", "operative_double_agent", "operative_escape_artist", "operative_infiltrator", "operative_linguist", "operative_master_interrogator", "operative_natural_orator", "operative_safe_cracker", "operative_seducer", "operative_tough", "operative_well_groomed", "organisational_leader", "organizer", "panzer_expert", "panzer_leader", "paratrooper", "peasant_sympathiser", "politically_connected", "promoted_from_the_ranks", "ranger", "reassigned", "recently_promoted", "safety_first", "scavenger", "search_pattern_expert", "seawolf", "sick", "silent_hunter", "skilled_staffer", "skirmisher", "smoke_screen_expert", "spotter", "substance_abuser", "substance_addict", "superior_tactician", "swamp_fox", "thorough_planner", "torpedo_bomber", "torpedo_expert", "trickster", "unyielding_defender", "urban_assault_specialist", "war_hero", "winter_expert", "winter_specialist", "wounded"] }, { - "groupname": "country_resource_cost_", - "desc": "Country resource cost.", + "groupname": "country_resource_", + "desc": "Country resource.", "type": "number", "decimal_places": 0, "IsDynamic": true, "categories": ["state"], "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] }, { - "groupname": "_xp_gain_factor", - "desc": "Xp gain factor (used if the trait has prefix 'trait_').", + "groupname": "state_repair_speed__factor", + "desc": "State building repair speed factor.", "type": "number", "decimal_places": 2, "IsDynamic": true, - "categories": ["naval", "country", "army"], - "modifiers": ["trait_BUL_ff_sympathizer", "trait_BUL_tsar_loyalist", "trait_BUL_zveno_member", "trait_GRE_fascist_sympathizer", "trait_GRE_marxist_acolyte", "trait_GRE_stauch_monarchist", "trait_GRE_venezelist_loyalist", "trait_SOV_bukharinist", "trait_SOV_cowed_by_stalin_army", "trait_SOV_cowed_by_stalin_navy", "trait_SOV_determined", "trait_SOV_foreign_military_advisor", "trait_SOV_monarchist_sympathizer", "trait_SOV_stalinist", "trait_SOV_trotskyist", "trait_SPA_carlist_loyalties", "trait_SPA_falangist_loyalties", "trait_SPA_nationalist_sympathies", "trait_SPR_anti_stalinist_loyalties", "trait_SPR_republican_loyalties", "trait_SPR_stalinist_loyalties", "trait_TUR_kemalist_champion", "trait_cautious", "trait_engineer", "trait_mountaineer", "trait_reckless"] + "categories": ["state"], + "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] }, { "groupname": "experience_gain__training_factor", "desc": "Unit experience gain factor on training.", @@ -8911,61 +8911,69 @@ "categories": ["naval", "country"], "modifiers": ["airborne_light_armor", "amphibious_armor", "amphibious_heavy_armor", "amphibious_light_armor", "amphibious_mechanized", "amphibious_medium_armor", "anti_air", "anti_air_brigade", "anti_tank", "anti_tank_brigade", "armored_car", "armored_car_recon", "artillery", "artillery_brigade", "battle_cruiser", "battleship", "bicycle_battalion", "blackshirt_assault_battalion", "bus", "camelry", "carrier", "cas", "cavalry", "cv_cas", "cv_fighter", "cv_nav_bomber", "cv_suicide_craft", "destroyer", "engineer", "fake_intel_unit", "field_hospital", "fighter", "guided_missile", "heavy_armor", "heavy_cruiser", "heavy_fighter", "heavy_flame_tank", "heavy_sp_anti_air_brigade", "heavy_sp_artillery_brigade", "heavy_tank_destroyer_brigade", "infantry", "irregular_infantry", "jet_fighter", "jet_strat_bomber", "jet_tac_bomber", "jungle_pioneers_support", "light_armor", "light_cruiser", "light_flame_tank", "light_sp_anti_air_brigade", "light_sp_artillery_brigade", "light_tank_destroyer_brigade", "light_tank_recon", "logistics_company", "long_range_patrol_support", "maintenance_company", "marine", "marine_commando", "maritime_patrol_plane", "mechanized", "medium_armor", "medium_flame_tank", "medium_sp_anti_air_brigade", "medium_sp_artillery_brigade", "medium_tank_destroyer_brigade", "military_police", "militia", "modern_armor", "modern_sp_anti_air_brigade", "modern_sp_artillery_brigade", "modern_tank_destroyer_brigade", "mot_anti_air_brigade", "mot_anti_tank_brigade", "mot_artillery_brigade", "mot_recon", "mot_rocket_artillery_brigade", "motorized", "motorized_rocket_brigade", "mountaineers", "nav_bomber", "paratrooper", "penal_battalion", "pioneer_support", "railway_gun", "rangers_support", "recon", "rocket_artillery", "rocket_artillery_brigade", "rocket_interceptor", "scout_plane", "signal_company", "strat_bomber", "submarine", "suicide_craft", "super_heavy_armor", "super_heavy_sp_anti_air_brigade", "super_heavy_sp_artillery_brigade", "super_heavy_tank_destroyer_brigade", "tac_bomber", "transport_plane", "winter_logistics_support"] }, { - "groupname": "production_cost_max_", - "desc": "Max naval equipment production cost.", - "type": "number", - "decimal_places": 0, - "IsDynamic": true, - "categories": ["naval"], - "modifiers": ["convoy", "floating_harbor_equipment", "ship_hull_carrier", "ship_hull_cruiser", "ship_hull_heavy", "ship_hull_light", "ship_hull_submarine"] - }, { - "groupname": "_design_cost_factor", - "desc": "Equipment cost factor.", + "groupname": "_category_type_cost_factor", + "desc": "Idea category type cost factor.", "type": "number", "decimal_places": 0, "IsDynamic": true, "categories": ["country"], - "modifiers": ["amphibious_mechanized_equipment", "amphibious_tank_chassis", "anti_air_equipment", "anti_tank_equipment", "armored_car_equipment", "artillery_equipment", "convoy", "cv_small_plane_airframe", "cv_small_plane_cas_airframe", "cv_small_plane_cas_airframe_0", "cv_small_plane_cas_airframe_1", "cv_small_plane_cas_airframe_2", "cv_small_plane_cas_airframe_3", "cv_small_plane_cas_airframe_4", "cv_small_plane_naval_bomber_airframe", "cv_small_plane_naval_bomber_airframe_0", "cv_small_plane_naval_bomber_airframe_1", "cv_small_plane_naval_bomber_airframe_2", "cv_small_plane_naval_bomber_airframe_3", "cv_small_plane_naval_bomber_airframe_4", "cv_small_plane_suicide_airframe", "cv_small_plane_suicide_airframe_0", "cv_small_plane_suicide_airframe_1", "cv_small_plane_suicide_airframe_2", "cv_small_plane_suicide_airframe_3", "cv_small_plane_suicide_airframe_4", "floating_harbor_equipment", "guided_missile_equipment", "heavy_tank_aa_chassis", "heavy_tank_aa_chassis_0", "heavy_tank_aa_chassis_1", "heavy_tank_aa_chassis_2", "heavy_tank_aa_chassis_3", "heavy_tank_amphibious_chassis", "heavy_tank_amphibious_chassis_0", "heavy_tank_amphibious_chassis_1", "heavy_tank_amphibious_chassis_2", "heavy_tank_amphibious_chassis_3", "heavy_tank_artillery_chassis", "heavy_tank_artillery_chassis_0", "heavy_tank_artillery_chassis_1", "heavy_tank_artillery_chassis_2", "heavy_tank_artillery_chassis_3", "heavy_tank_chassis", "heavy_tank_destroyer_chassis", "heavy_tank_destroyer_chassis_0", "heavy_tank_destroyer_chassis_1", "heavy_tank_destroyer_chassis_2", "heavy_tank_destroyer_chassis_3", "heavy_tank_flame_chassis", "heavy_tank_flame_chassis_0", "heavy_tank_flame_chassis_1", "heavy_tank_flame_chassis_2", "heavy_tank_flame_chassis_3", "infantry_equipment", "jet_fighter_equipment", "jet_strat_bomber_equipment", "jet_tac_bomber_equipment", "large_plane_airframe", "large_plane_maritime_patrol_plane_airframe", "large_plane_maritime_patrol_plane_airframe_0", "large_plane_maritime_patrol_plane_airframe_1", "large_plane_maritime_patrol_plane_airframe_2", "large_plane_maritime_patrol_plane_airframe_3", "large_plane_maritime_patrol_plane_airframe_4", "light_tank_aa_chassis", "light_tank_aa_chassis_0", "light_tank_aa_chassis_1", "light_tank_aa_chassis_2", "light_tank_aa_chassis_3", "light_tank_amphibious_chassis", "light_tank_amphibious_chassis_0", "light_tank_amphibious_chassis_1", "light_tank_amphibious_chassis_2", "light_tank_amphibious_chassis_3", "light_tank_artillery_chassis", "light_tank_artillery_chassis_0", "light_tank_artillery_chassis_1", "light_tank_artillery_chassis_2", "light_tank_artillery_chassis_3", "light_tank_chassis", "light_tank_destroyer_chassis", "light_tank_destroyer_chassis_0", "light_tank_destroyer_chassis_1", "light_tank_destroyer_chassis_2", "light_tank_destroyer_chassis_3", "light_tank_flame_chassis", "light_tank_flame_chassis_0", "light_tank_flame_chassis_1", "light_tank_flame_chassis_2", "light_tank_flame_chassis_3", "mechanized_equipment", "medium_plane_airframe", "medium_plane_fighter_airframe", "medium_plane_fighter_airframe_0", "medium_plane_fighter_airframe_1", "medium_plane_fighter_airframe_2", "medium_plane_fighter_airframe_3", "medium_plane_fighter_airframe_4", "medium_plane_scout_plane_airframe", "medium_plane_scout_plane_airframe_0", "medium_plane_scout_plane_airframe_1", "medium_plane_scout_plane_airframe_2", "medium_plane_scout_plane_airframe_3", "medium_plane_scout_plane_airframe_4", "medium_tank_aa_chassis", "medium_tank_aa_chassis_0", "medium_tank_aa_chassis_1", "medium_tank_aa_chassis_2", "medium_tank_aa_chassis_3", "medium_tank_amphibious_chassis", "medium_tank_amphibious_chassis_0", "medium_tank_amphibious_chassis_1", "medium_tank_amphibious_chassis_2", "medium_tank_amphibious_chassis_3", "medium_tank_artillery_chassis", "medium_tank_artillery_chassis_0", "medium_tank_artillery_chassis_1", "medium_tank_artillery_chassis_2", "medium_tank_artillery_chassis_3", "medium_tank_chassis", "medium_tank_destroyer_chassis", "medium_tank_destroyer_chassis_0", "medium_tank_destroyer_chassis_1", "medium_tank_destroyer_chassis_2", "medium_tank_destroyer_chassis_3", "medium_tank_flame_chassis", "medium_tank_flame_chassis_0", "medium_tank_flame_chassis_1", "medium_tank_flame_chassis_2", "medium_tank_flame_chassis_3", "modern_tank_aa_chassis", "modern_tank_aa_chassis_1", "modern_tank_artillery_chassis", "modern_tank_artillery_chassis_1", "modern_tank_chassis", "modern_tank_destroyer_chassis", "modern_tank_destroyer_chassis_1", "motorized_equipment", "motorized_rocket_equipment", "railway_gun_equipment", "rocket_artillery_equipment", "rocket_interceptor_equipment", "ship_hull_carrier", "ship_hull_cruiser", "ship_hull_heavy", "ship_hull_light", "ship_hull_submarine", "small_plane_airframe", "small_plane_cas_airframe", "small_plane_cas_airframe_0", "small_plane_cas_airframe_1", "small_plane_cas_airframe_2", "small_plane_cas_airframe_3", "small_plane_cas_airframe_4", "small_plane_naval_bomber_airframe", "small_plane_naval_bomber_airframe_0", "small_plane_naval_bomber_airframe_1", "small_plane_naval_bomber_airframe_2", "small_plane_naval_bomber_airframe_3", "small_plane_naval_bomber_airframe_4", "small_plane_suicide_airframe", "small_plane_suicide_airframe_0", "small_plane_suicide_airframe_1", "small_plane_suicide_airframe_2", "small_plane_suicide_airframe_3", "small_plane_suicide_airframe_4", "super_heavy_tank_aa_chassis", "super_heavy_tank_aa_chassis_1", "super_heavy_tank_artillery_chassis", "super_heavy_tank_artillery_chassis_1", "super_heavy_tank_chassis", "super_heavy_tank_destroyer_chassis", "super_heavy_tank_destroyer_chassis_1", "support_equipment", "train_equipment", "transport_plane_equipment"] + "modifiers": ["air_spirit", "army_spirit", "navy_spirit"] }, { - "groupname": "_cost_factor", - "desc": "Idea group cost factor.", + "groupname": "_outcome", + "desc": "Operation outcome modifier.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["country"], - "modifiers": ["academy_spirit", "air_chief", "air_force_academy_spirit", "air_force_command_spirit", "air_force_spirit", "aircraft_manufacturer", "army_chief", "army_spirit", "country", "division_command_spirit", "economy", "hidden_ideas", "high_command", "industrial_concern", "materiel_manufacturer", "mobilization_laws", "naval_academy_spirit", "naval_command_spirit", "naval_manufacturer", "navy_chief", "navy_spirit", "political_advisor", "tank_manufacturer", "theorist", "trade_laws"] + "categories": ["intelligence_agency"], + "modifiers": ["FRA_coup_in_central_africa", "FRA_coup_in_indochina", "FRA_coup_in_madagascar", "FRA_coup_in_north_africa", "FRA_coup_in_syria", "FRA_coup_in_west_africa", "FRA_instigate_workers_revolution_britain", "FRA_instigate_workers_revolution_germany", "FRA_instigate_workers_revolution_italy", "FRA_instigate_workers_revolution_spain", "bruneval_raid", "capture_tito", "heavy_water_raid", "murder_trotsky", "nuclear_espionage", "operation_boost_resistance", "operation_capture_cipher", "operation_collaboration_government", "operation_coordinated_strike", "operation_coup_government", "operation_fake_intel", "operation_infiltrate_armed_forces_airforce", "operation_infiltrate_armed_forces_army", "operation_infiltrate_armed_forces_navy", "operation_infiltrate_civilian", "operation_make_resistance_contacts", "operation_rescue_operative", "operation_steal_tech", "operation_steal_tech_airforce", "operation_steal_tech_army", "operation_steal_tech_civilian", "operation_steal_tech_navy", "operation_targeted_sabotage_industry", "operation_targeted_sabotage_infrastructure", "operation_targeted_sabotage_resources", "operation_warsaw_uprising", "raid_trotskys_villa", "rescue_mussolini"] }, { - "groupname": "_category_type_cost_factor", - "desc": "Idea category type cost factor.", + "groupname": "_risk", + "desc": "Operation risk modifier.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["country"], - "modifiers": ["air_spirit", "army_spirit", "navy_spirit"] + "categories": ["intelligence_agency"], + "modifiers": ["FRA_coup_in_central_africa", "FRA_coup_in_indochina", "FRA_coup_in_madagascar", "FRA_coup_in_north_africa", "FRA_coup_in_syria", "FRA_coup_in_west_africa", "FRA_instigate_workers_revolution_britain", "FRA_instigate_workers_revolution_germany", "FRA_instigate_workers_revolution_italy", "FRA_instigate_workers_revolution_spain", "bruneval_raid", "capture_tito", "heavy_water_raid", "murder_trotsky", "nuclear_espionage", "operation", "operation_boost_resistance", "operation_capture_cipher", "operation_collaboration_government", "operation_coordinated_strike", "operation_coup_government", "operation_fake_intel", "operation_infiltrate", "operation_infiltrate_armed_forces_airforce", "operation_infiltrate_armed_forces_army", "operation_infiltrate_armed_forces_navy", "operation_infiltrate_civilian", "operation_make_resistance_contacts", "operation_rescue_operative", "operation_steal_tech", "operation_steal_tech_airforce", "operation_steal_tech_army", "operation_steal_tech_civilian", "operation_steal_tech_navy", "operation_targeted_sabotage_industry", "operation_targeted_sabotage_infrastructure", "operation_targeted_sabotage_resources", "operation_warsaw_uprising", "raid_trotskys_villa", "rescue_mussolini", "target_sabotage"] }, { - "groupname": "_cost_factor", - "desc": "Technology cost factor.", + "groupname": "production_speed__factor", + "desc": "Country building construction speed factor.", "type": "number", - "decimal_places": 0, + "decimal_places": 2, "IsDynamic": true, "categories": ["country"], - "modifiers": ["cat_air_bombs", "cat_air_engine", "cat_air_guns", "cat_anti_air", "cat_anti_tank", "cat_armored_cars", "cat_base_strike", "cat_battlefield_support", "cat_fleet_in_being", "cat_grand_battle_plan", "cat_heavy_armor", "cat_heavy_fighter", "cat_light_armor", "cat_marines_doctrine", "cat_maritime_patrol", "cat_mass_assault", "cat_mechanized_equipment", "cat_medium_armor", "cat_mobile_warfare", "cat_mountaineers_doctrine", "cat_operational_integrity", "cat_paratroopers_doctrine", "cat_production", "cat_scout_plane", "cat_ship_heavy_battery", "cat_ship_light_battery", "cat_ship_medium_battery", "cat_special_forces_generic", "cat_strategic_bomber", "cat_strategic_destruction", "cat_superior_firepower", "cat_synth_oil", "cat_synth_rubber", "cat_torpedoes", "cat_trade_interdiction"] + "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] }, { - "groupname": "state_resource_cost_", - "desc": "State resource cost.", + "groupname": "state_resource_", + "desc": "State resource.", "type": "number", "decimal_places": 0, "IsDynamic": true, "categories": ["state"], "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] }, { - "groupname": "_risk", - "desc": "Operation risk modifier.", + "groupname": "module__design_cost_factor", + "desc": "Module design cost factor.", + "type": "number", + "decimal_places": 2, + "IsDynamic": true, + "categories": ["naval", "country", "army"], + "modifiers": ["NOR_rikstanken_turret", "NOR_tank_rikstanken_armor", "additional_machine_guns", "air_air_radar_1", "air_air_radar_2", "air_ground_radar_1", "air_ground_radar_2", "aircraft_cannon_1_1x", "aircraft_cannon_1_2x", "aircraft_cannon_2_1x", "aircraft_cannon_2_2x", "airdropped_mines", "amphibious_drive", "armor_piercing_bomb_locks", "armor_plate_large", "armor_plate_medium", "armor_plate_small", "armor_skirts", "auto_loader", "bomb_locks", "bomb_sights_1", "bomb_sights_2", "cannon_defense_turret", "cannon_defense_turret_2x", "carrier_ship_engine_1", "carrier_ship_engine_2", "carrier_ship_engine_3", "carrier_ship_engine_4", "cruiser_ship_engine_1", "cruiser_ship_engine_2", "cruiser_ship_engine_3", "cruiser_ship_engine_4", "demining_coil", "dive_brakes_small", "dozer_blade", "dp_light_battery_1", "dp_light_battery_2", "dp_light_battery_3", "dp_light_battery_4", "dp_ship_medium_1", "dp_ship_secondaries_1", "dp_ship_secondaries_2", "dp_ship_secondaries_3", "dp_ship_secondaries_4", "drop_tanks", "easy_maintenance", "engine_1_1x", "engine_1_2x", "engine_1_3x", "engine_1_4x", "engine_1_6x", "engine_2_1x", "engine_2_2x", "engine_2_3x", "engine_2_4x", "engine_2_6x", "engine_3_1x", "engine_3_2x", "engine_3_3x", "engine_3_4x", "engine_3_6x", "engine_4_1x", "engine_4_2x", "engine_4_3x", "engine_4_4x", "engine_4_6x", "expanded_fuel_tank", "extra_ammo_storage", "fixed_explosive_charge", "flamethrower", "floats", "flying_boat_large", "flying_boat_medium", "fuel_tanks_large", "fuel_tanks_medium", "fuel_tanks_small", "guided_anti_ship_missile", "heavy_bomb_locks", "heavy_mg_2x", "heavy_mg_4x", "heavy_ship_engine_1", "heavy_ship_engine_2", "heavy_ship_engine_3", "heavy_ship_engine_4", "hmg_defense_turret", "hmg_defense_turret_2x", "jet_engine_1x", "jet_engine_2x", "jet_engine_3x", "jet_engine_4x", "jet_engine_6x", "large_aircraft_cannon_1x", "large_aircraft_cannon_2x", "large_bomb_bay", "light_mg_2x", "light_mg_4x", "light_ship_engine_1", "light_ship_engine_2", "light_ship_engine_3", "light_ship_engine_4", "lmg_defense_turret", "lmg_defense_turret_2x", "medium_bomb_bay", "non_strategic_materials_large", "non_strategic_materials_medium", "non_strategic_materials_small", "radio_navigation_1", "radio_navigation_2", "recon_camera", "rocket_engine_1", "rocket_engine_2", "rocket_engine_3", "rocket_rails", "secondary_turret_hmg", "secondary_turret_small_cannon", "self_sealing_fuel_tanks_large", "self_sealing_fuel_tanks_medium", "self_sealing_fuel_tanks_small", "ship_airplane_launcher_1", "ship_airplane_launcher_2", "ship_anti_air_1", "ship_anti_air_2", "ship_anti_air_3", "ship_anti_air_4", "ship_armor_bb_1", "ship_armor_bb_2", "ship_armor_bb_3", "ship_armor_bc_1", "ship_armor_bc_2", "ship_armor_bc_3", "ship_armor_carrier_deck", "ship_armor_cruiser_1", "ship_armor_cruiser_2", "ship_armor_cruiser_3", "ship_armor_cruiser_4", "ship_armor_shbb", "ship_deck_space", "ship_depth_charge_1", "ship_depth_charge_2", "ship_depth_charge_3", "ship_depth_charge_4", "ship_extra_fuel_tank", "ship_fire_control_system_0", "ship_fire_control_system_1", "ship_fire_control_system_2", "ship_fire_control_system_3", "ship_heavy_battery_1", "ship_heavy_battery_2", "ship_heavy_battery_3", "ship_heavy_battery_4", "ship_light_battery_1", "ship_light_battery_2", "ship_light_battery_3", "ship_light_battery_4", "ship_light_medium_battery_1", "ship_light_medium_battery_2", "ship_light_medium_battery_3", "ship_light_medium_battery_4", "ship_medium_battery_1", "ship_medium_battery_2", "ship_medium_battery_3", "ship_medium_battery_4", "ship_mine_layer_1", "ship_mine_layer_sub", "ship_mine_sweeper_1", "ship_radar_1", "ship_radar_2", "ship_radar_3", "ship_radar_4", "ship_secondaries_1", "ship_secondaries_2", "ship_sonar_1", "ship_sonar_2", "ship_sub_snorkel_1", "ship_sub_snorkel_2", "ship_super_heavy_battery_1", "ship_torpedo_1", "ship_torpedo_2", "ship_torpedo_3", "ship_torpedo_4", "ship_torpedo_sub_1", "ship_torpedo_sub_2", "ship_torpedo_sub_3", "ship_torpedo_sub_4", "sloped_armor", "small_bomb_bay", "smoke_launchers", "squeezebore_adaptor", "stabilizer", "sub_ship_engine_1", "sub_ship_engine_2", "sub_ship_engine_3", "sub_ship_engine_4", "tank_anti_air_cannon", "tank_anti_air_cannon_2", "tank_anti_air_cannon_3", "tank_auto_cannon", "tank_auto_cannon_2", "tank_bogie_suspension", "tank_buster_1", "tank_buster_2", "tank_cast_armor", "tank_christie_suspension", "tank_close_support_gun", "tank_diesel_engine", "tank_gas_turbine_engine", "tank_gasoline_engine", "tank_half_track_suspension", "tank_heavy_cannon", "tank_heavy_cannon_2", "tank_heavy_cannon_3", "tank_heavy_fixed_superstructure_turret", "tank_heavy_howitzer", "tank_heavy_machine_gun", "tank_heavy_three_man_tank_turret", "tank_heavy_two_man_tank_turret", "tank_high_velocity_cannon", "tank_high_velocity_cannon_2", "tank_high_velocity_cannon_3", "tank_interleaved_suspension", "tank_light_fixed_superstructure_turret", "tank_light_one_man_tank_turret", "tank_light_three_man_tank_turret", "tank_light_two_man_tank_turret", "tank_medium_cannon", "tank_medium_cannon_2", "tank_medium_fixed_superstructure_turret", "tank_medium_howitzer", "tank_medium_howitzer_2", "tank_medium_one_man_tank_turret", "tank_medium_three_man_tank_turret", "tank_medium_two_man_tank_turret", "tank_modern_tank_turret", "tank_petrol_electric_engine", "tank_radio_1", "tank_radio_2", "tank_radio_3", "tank_riveted_armor", "tank_rocket_launcher", "tank_rocket_launcher_2", "tank_small_cannon", "tank_small_cannon_2", "tank_super_heavy_cannon", "tank_super_heavy_four_man_tank_turret", "tank_super_heavy_three_man_tank_turret", "tank_torsion_bar_suspension", "tank_welded_armor", "tank_wheeled_suspension", "torpedo_mounting", "torpedo_mounting_2", "torpedo_mounting_3", "wet_ammo_storage"] + }, { + "groupname": "repair_speed__factor", + "desc": "Country building repair speed factor.", + "type": "number", + "decimal_places": 2, + "IsDynamic": true, + "categories": ["country"], + "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] + }, { + "groupname": "country_resource_cost_", + "desc": "Country resource cost.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["intelligence_agency"], - "modifiers": ["FRA_coup_in_central_africa", "FRA_coup_in_indochina", "FRA_coup_in_madagascar", "FRA_coup_in_north_africa", "FRA_coup_in_syria", "FRA_coup_in_west_africa", "FRA_instigate_workers_revolution_britain", "FRA_instigate_workers_revolution_germany", "FRA_instigate_workers_revolution_italy", "FRA_instigate_workers_revolution_spain", "bruneval_raid", "capture_tito", "heavy_water_raid", "murder_trotsky", "nuclear_espionage", "operation", "operation_boost_resistance", "operation_capture_cipher", "operation_collaboration_government", "operation_coordinated_strike", "operation_coup_government", "operation_fake_intel", "operation_infiltrate", "operation_infiltrate_armed_forces_airforce", "operation_infiltrate_armed_forces_army", "operation_infiltrate_armed_forces_navy", "operation_infiltrate_civilian", "operation_make_resistance_contacts", "operation_rescue_operative", "operation_steal_tech", "operation_steal_tech_airforce", "operation_steal_tech_army", "operation_steal_tech_civilian", "operation_steal_tech_navy", "operation_targeted_sabotage_industry", "operation_targeted_sabotage_infrastructure", "operation_targeted_sabotage_resources", "operation_warsaw_uprising", "raid_trotskys_villa", "rescue_mussolini", "target_sabotage"] + "categories": ["state"], + "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] }, { "groupname": "temporary_state_resource_", "desc": "Temporary state resource.", @@ -8975,29 +8983,29 @@ "categories": ["state"], "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] }, { - "groupname": "_cost", - "desc": "Operation cost modifier.", + "groupname": "_design_cost_factor", + "desc": "Equipment cost factor.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["intelligence_agency"], - "modifiers": ["FRA_coup_in_central_africa", "FRA_coup_in_indochina", "FRA_coup_in_madagascar", "FRA_coup_in_north_africa", "FRA_coup_in_syria", "FRA_coup_in_west_africa", "FRA_instigate_workers_revolution_britain", "FRA_instigate_workers_revolution_germany", "FRA_instigate_workers_revolution_italy", "FRA_instigate_workers_revolution_spain", "bruneval_raid", "capture_tito", "heavy_water_raid", "murder_trotsky", "nuclear_espionage", "operation_boost_resistance", "operation_capture_cipher", "operation_collaboration_government", "operation_coordinated_strike", "operation_coup", "operation_coup_government", "operation_fake_intel", "operation_infiltrate", "operation_infiltrate_armed_forces_airforce", "operation_infiltrate_armed_forces_army", "operation_infiltrate_armed_forces_navy", "operation_infiltrate_civilian", "operation_make_resistance_contacts", "operation_rescue_operative", "operation_steal_tech_airforce", "operation_steal_tech_army", "operation_steal_tech_civilian", "operation_steal_tech_navy", "operation_targeted_sabotage_industry", "operation_targeted_sabotage_infrastructure", "operation_targeted_sabotage_resources", "operation_warsaw_uprising", "raid_trotskys_villa", "rescue_mussolini", "target_sabotage"] + "categories": ["country"], + "modifiers": ["amphibious_mechanized_equipment", "amphibious_tank_chassis", "anti_air_equipment", "anti_tank_equipment", "armored_car_equipment", "artillery_equipment", "convoy", "cv_small_plane_airframe", "cv_small_plane_cas_airframe", "cv_small_plane_cas_airframe_0", "cv_small_plane_cas_airframe_1", "cv_small_plane_cas_airframe_2", "cv_small_plane_cas_airframe_3", "cv_small_plane_cas_airframe_4", "cv_small_plane_naval_bomber_airframe", "cv_small_plane_naval_bomber_airframe_0", "cv_small_plane_naval_bomber_airframe_1", "cv_small_plane_naval_bomber_airframe_2", "cv_small_plane_naval_bomber_airframe_3", "cv_small_plane_naval_bomber_airframe_4", "cv_small_plane_suicide_airframe", "cv_small_plane_suicide_airframe_0", "cv_small_plane_suicide_airframe_1", "cv_small_plane_suicide_airframe_2", "cv_small_plane_suicide_airframe_3", "cv_small_plane_suicide_airframe_4", "floating_harbor_equipment", "guided_missile_equipment", "heavy_tank_aa_chassis", "heavy_tank_aa_chassis_0", "heavy_tank_aa_chassis_1", "heavy_tank_aa_chassis_2", "heavy_tank_aa_chassis_3", "heavy_tank_amphibious_chassis", "heavy_tank_amphibious_chassis_0", "heavy_tank_amphibious_chassis_1", "heavy_tank_amphibious_chassis_2", "heavy_tank_amphibious_chassis_3", "heavy_tank_artillery_chassis", "heavy_tank_artillery_chassis_0", "heavy_tank_artillery_chassis_1", "heavy_tank_artillery_chassis_2", "heavy_tank_artillery_chassis_3", "heavy_tank_chassis", "heavy_tank_destroyer_chassis", "heavy_tank_destroyer_chassis_0", "heavy_tank_destroyer_chassis_1", "heavy_tank_destroyer_chassis_2", "heavy_tank_destroyer_chassis_3", "heavy_tank_flame_chassis", "heavy_tank_flame_chassis_0", "heavy_tank_flame_chassis_1", "heavy_tank_flame_chassis_2", "heavy_tank_flame_chassis_3", "infantry_equipment", "jet_fighter_equipment", "jet_strat_bomber_equipment", "jet_tac_bomber_equipment", "large_plane_airframe", "large_plane_maritime_patrol_plane_airframe", "large_plane_maritime_patrol_plane_airframe_0", "large_plane_maritime_patrol_plane_airframe_1", "large_plane_maritime_patrol_plane_airframe_2", "large_plane_maritime_patrol_plane_airframe_3", "large_plane_maritime_patrol_plane_airframe_4", "light_tank_aa_chassis", "light_tank_aa_chassis_0", "light_tank_aa_chassis_1", "light_tank_aa_chassis_2", "light_tank_aa_chassis_3", "light_tank_amphibious_chassis", "light_tank_amphibious_chassis_0", "light_tank_amphibious_chassis_1", "light_tank_amphibious_chassis_2", "light_tank_amphibious_chassis_3", "light_tank_artillery_chassis", "light_tank_artillery_chassis_0", "light_tank_artillery_chassis_1", "light_tank_artillery_chassis_2", "light_tank_artillery_chassis_3", "light_tank_chassis", "light_tank_destroyer_chassis", "light_tank_destroyer_chassis_0", "light_tank_destroyer_chassis_1", "light_tank_destroyer_chassis_2", "light_tank_destroyer_chassis_3", "light_tank_flame_chassis", "light_tank_flame_chassis_0", "light_tank_flame_chassis_1", "light_tank_flame_chassis_2", "light_tank_flame_chassis_3", "mechanized_equipment", "medium_plane_airframe", "medium_plane_fighter_airframe", "medium_plane_fighter_airframe_0", "medium_plane_fighter_airframe_1", "medium_plane_fighter_airframe_2", "medium_plane_fighter_airframe_3", "medium_plane_fighter_airframe_4", "medium_plane_scout_plane_airframe", "medium_plane_scout_plane_airframe_0", "medium_plane_scout_plane_airframe_1", "medium_plane_scout_plane_airframe_2", "medium_plane_scout_plane_airframe_3", "medium_plane_scout_plane_airframe_4", "medium_tank_aa_chassis", "medium_tank_aa_chassis_0", "medium_tank_aa_chassis_1", "medium_tank_aa_chassis_2", "medium_tank_aa_chassis_3", "medium_tank_amphibious_chassis", "medium_tank_amphibious_chassis_0", "medium_tank_amphibious_chassis_1", "medium_tank_amphibious_chassis_2", "medium_tank_amphibious_chassis_3", "medium_tank_artillery_chassis", "medium_tank_artillery_chassis_0", "medium_tank_artillery_chassis_1", "medium_tank_artillery_chassis_2", "medium_tank_artillery_chassis_3", "medium_tank_chassis", "medium_tank_destroyer_chassis", "medium_tank_destroyer_chassis_0", "medium_tank_destroyer_chassis_1", "medium_tank_destroyer_chassis_2", "medium_tank_destroyer_chassis_3", "medium_tank_flame_chassis", "medium_tank_flame_chassis_0", "medium_tank_flame_chassis_1", "medium_tank_flame_chassis_2", "medium_tank_flame_chassis_3", "modern_tank_aa_chassis", "modern_tank_aa_chassis_1", "modern_tank_artillery_chassis", "modern_tank_artillery_chassis_1", "modern_tank_chassis", "modern_tank_destroyer_chassis", "modern_tank_destroyer_chassis_1", "motorized_equipment", "motorized_rocket_equipment", "railway_gun_equipment", "rocket_artillery_equipment", "rocket_interceptor_equipment", "ship_hull_carrier", "ship_hull_cruiser", "ship_hull_heavy", "ship_hull_light", "ship_hull_submarine", "small_plane_airframe", "small_plane_cas_airframe", "small_plane_cas_airframe_0", "small_plane_cas_airframe_1", "small_plane_cas_airframe_2", "small_plane_cas_airframe_3", "small_plane_cas_airframe_4", "small_plane_naval_bomber_airframe", "small_plane_naval_bomber_airframe_0", "small_plane_naval_bomber_airframe_1", "small_plane_naval_bomber_airframe_2", "small_plane_naval_bomber_airframe_3", "small_plane_naval_bomber_airframe_4", "small_plane_suicide_airframe", "small_plane_suicide_airframe_0", "small_plane_suicide_airframe_1", "small_plane_suicide_airframe_2", "small_plane_suicide_airframe_3", "small_plane_suicide_airframe_4", "super_heavy_tank_aa_chassis", "super_heavy_tank_aa_chassis_1", "super_heavy_tank_artillery_chassis", "super_heavy_tank_artillery_chassis_1", "super_heavy_tank_chassis", "super_heavy_tank_destroyer_chassis", "super_heavy_tank_destroyer_chassis_1", "support_equipment", "train_equipment", "transport_plane_equipment"] }, { - "groupname": "state_repair_speed__factor", - "desc": "State building repair speed factor.", + "groupname": "production_cost_max_", + "desc": "Max naval equipment production cost.", "type": "number", - "decimal_places": 2, + "decimal_places": 0, "IsDynamic": true, - "categories": ["state"], - "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] + "categories": ["naval"], + "modifiers": ["convoy", "floating_harbor_equipment", "ship_hull_carrier", "ship_hull_cruiser", "ship_hull_heavy", "ship_hull_light", "ship_hull_submarine"] }, { - "groupname": "experience_gain__combat_factor", - "desc": "Unit experience gain factor in combat.", + "groupname": "state_resource_cost_", + "desc": "State resource cost.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["naval", "country"], - "modifiers": ["airborne_light_armor", "amphibious_armor", "amphibious_heavy_armor", "amphibious_light_armor", "amphibious_mechanized", "amphibious_medium_armor", "anti_air", "anti_air_brigade", "anti_tank", "anti_tank_brigade", "armored_car", "armored_car_recon", "artillery", "artillery_brigade", "battle_cruiser", "battleship", "bicycle_battalion", "blackshirt_assault_battalion", "bus", "camelry", "carrier", "cas", "cavalry", "cv_cas", "cv_fighter", "cv_nav_bomber", "cv_suicide_craft", "destroyer", "engineer", "fake_intel_unit", "field_hospital", "fighter", "guided_missile", "heavy_armor", "heavy_cruiser", "heavy_fighter", "heavy_flame_tank", "heavy_sp_anti_air_brigade", "heavy_sp_artillery_brigade", "heavy_tank_destroyer_brigade", "infantry", "irregular_infantry", "jet_fighter", "jet_strat_bomber", "jet_tac_bomber", "jungle_pioneers_support", "light_armor", "light_cruiser", "light_flame_tank", "light_sp_anti_air_brigade", "light_sp_artillery_brigade", "light_tank_destroyer_brigade", "light_tank_recon", "logistics_company", "long_range_patrol_support", "maintenance_company", "marine", "marine_commando", "maritime_patrol_plane", "mechanized", "medium_armor", "medium_flame_tank", "medium_sp_anti_air_brigade", "medium_sp_artillery_brigade", "medium_tank_destroyer_brigade", "military_police", "militia", "modern_armor", "modern_sp_anti_air_brigade", "modern_sp_artillery_brigade", "modern_tank_destroyer_brigade", "mot_anti_air_brigade", "mot_anti_tank_brigade", "mot_artillery_brigade", "mot_recon", "mot_rocket_artillery_brigade", "motorized", "motorized_rocket_brigade", "mountaineers", "nav_bomber", "paratrooper", "penal_battalion", "pioneer_support", "railway_gun", "rangers_support", "recon", "rocket_artillery", "rocket_artillery_brigade", "rocket_interceptor", "scout_plane", "signal_company", "strat_bomber", "submarine", "suicide_craft", "super_heavy_armor", "super_heavy_sp_anti_air_brigade", "super_heavy_sp_artillery_brigade", "super_heavy_tank_destroyer_brigade", "tac_bomber", "transport_plane", "winter_logistics_support"] + "categories": ["state"], + "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] }, { "groupname": "production_cost__factor", "desc": "Building construction cost factor.", @@ -9015,45 +9023,37 @@ "categories": ["naval", "country", "army"], "modifiers": ["airborne_light_armor", "amphibious_armor", "amphibious_heavy_armor", "amphibious_light_armor", "amphibious_mechanized", "amphibious_medium_armor", "anti_air", "anti_air_brigade", "anti_tank", "anti_tank_brigade", "armored_car", "armored_car_recon", "artillery", "artillery_brigade", "battle_cruiser", "battleship", "bicycle_battalion", "blackshirt_assault_battalion", "bus", "camelry", "carrier", "cas", "cavalry", "cv_cas", "cv_fighter", "cv_nav_bomber", "cv_suicide_craft", "destroyer", "engineer", "fake_intel_unit", "field_hospital", "fighter", "guided_missile", "heavy_armor", "heavy_cruiser", "heavy_fighter", "heavy_flame_tank", "heavy_sp_anti_air_brigade", "heavy_sp_artillery_brigade", "heavy_tank_destroyer_brigade", "infantry", "irregular_infantry", "jet_fighter", "jet_strat_bomber", "jet_tac_bomber", "jungle_pioneers_support", "light_armor", "light_cruiser", "light_flame_tank", "light_sp_anti_air_brigade", "light_sp_artillery_brigade", "light_tank_destroyer_brigade", "light_tank_recon", "logistics_company", "long_range_patrol_support", "maintenance_company", "marine", "marine_commando", "maritime_patrol_plane", "mechanized", "medium_armor", "medium_flame_tank", "medium_sp_anti_air_brigade", "medium_sp_artillery_brigade", "medium_tank_destroyer_brigade", "military_police", "militia", "modern_armor", "modern_sp_anti_air_brigade", "modern_sp_artillery_brigade", "modern_tank_destroyer_brigade", "mot_anti_air_brigade", "mot_anti_tank_brigade", "mot_artillery_brigade", "mot_recon", "mot_rocket_artillery_brigade", "motorized", "motorized_rocket_brigade", "mountaineers", "nav_bomber", "paratrooper", "penal_battalion", "pioneer_support", "railway_gun", "rangers_support", "recon", "rocket_artillery", "rocket_artillery_brigade", "rocket_interceptor", "scout_plane", "signal_company", "strat_bomber", "submarine", "suicide_craft", "super_heavy_armor", "super_heavy_sp_anti_air_brigade", "super_heavy_sp_artillery_brigade", "super_heavy_tank_destroyer_brigade", "tac_bomber", "transport_plane", "winter_logistics_support"] }, { - "groupname": "_drift", - "desc": "Ideology drift.", - "type": "number", - "decimal_places": 2, - "IsDynamic": true, - "categories": ["politics"], - "modifiers": ["communism", "democratic", "fascism", "neutrality"] - }, { - "groupname": "country_resource_", - "desc": "Country resource.", + "groupname": "_cost", + "desc": "Operation cost modifier.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["state"], - "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] + "categories": ["intelligence_agency"], + "modifiers": ["FRA_coup_in_central_africa", "FRA_coup_in_indochina", "FRA_coup_in_madagascar", "FRA_coup_in_north_africa", "FRA_coup_in_syria", "FRA_coup_in_west_africa", "FRA_instigate_workers_revolution_britain", "FRA_instigate_workers_revolution_germany", "FRA_instigate_workers_revolution_italy", "FRA_instigate_workers_revolution_spain", "bruneval_raid", "capture_tito", "heavy_water_raid", "murder_trotsky", "nuclear_espionage", "operation_boost_resistance", "operation_capture_cipher", "operation_collaboration_government", "operation_coordinated_strike", "operation_coup", "operation_coup_government", "operation_fake_intel", "operation_infiltrate", "operation_infiltrate_armed_forces_airforce", "operation_infiltrate_armed_forces_army", "operation_infiltrate_armed_forces_navy", "operation_infiltrate_civilian", "operation_make_resistance_contacts", "operation_rescue_operative", "operation_steal_tech_airforce", "operation_steal_tech_army", "operation_steal_tech_civilian", "operation_steal_tech_navy", "operation_targeted_sabotage_industry", "operation_targeted_sabotage_infrastructure", "operation_targeted_sabotage_resources", "operation_warsaw_uprising", "raid_trotskys_villa", "rescue_mussolini", "target_sabotage"] }, { - "groupname": "state_production_speed__factor", - "desc": "State building construction speed factor.", + "groupname": "_drift", + "desc": "Ideology drift.", "type": "number", "decimal_places": 2, "IsDynamic": true, - "categories": ["state"], - "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] + "categories": ["politics"], + "modifiers": ["communism", "democratic", "fascism", "neutrality"] }, { - "groupname": "repair_speed__factor", - "desc": "Country building repair speed factor.", + "groupname": "_preferred_weight_factor", + "desc": "Naval preferred weight factor.", "type": "number", "decimal_places": 2, "IsDynamic": true, "categories": ["country"], - "modifiers": ["air_base", "anti_air_building", "arms_factory", "bunker", "coastal_bunker", "dockyard", "fuel_silo", "industrial_complex", "infrastructure", "naval_base", "nuclear_reactor", "radar_station", "rail_way", "rocket_site", "supply_node", "synthetic_refinery"] + "modifiers": ["nullCombatTactic", "tactic_ambush", "tactic_assault", "tactic_attacker_hb_attack", "tactic_attacker_hb_rush", "tactic_attacker_hb_storm", "tactic_attacker_sb_hold", "tactic_attacker_sb_skillful_defence", "tactic_backhand_blow", "tactic_banzai_charge", "tactic_barrage", "tactic_basic_attack", "tactic_basic_defend", "tactic_blitz", "tactic_breakthrough", "tactic_cc_attack", "tactic_cc_defend", "tactic_cc_local_strong_point", "tactic_cc_storm", "tactic_cc_withdraw", "tactic_counterattack", "tactic_defender_hb_hold", "tactic_defender_hb_skillful_defence", "tactic_defender_sb_assault", "tactic_defender_sb_reckless_assault", "tactic_defender_sb_retake_bridge", "tactic_delay", "tactic_elastic_defense", "tactic_encirclement", "tactic_guerrilla_tactics", "tactic_hold_bridge", "tactic_human_wave_tactics", "tactic_infantry_charge", "tactic_masterful_blitz", "tactic_overwhelming_fire", "tactic_planned_attack", "tactic_relentless_assault", "tactic_seize_bridge", "tactic_shock", "tactic_tactical_withdrawal", "tactic_tw_attack", "tactic_tw_chase", "tactic_tw_defend", "tactic_tw_evade", "tactic_tw_intercept", "tactic_unexpected_thrust"] }, { - "groupname": "state_resource_", - "desc": "State resource.", + "groupname": "_cost_factor", + "desc": "Technology cost factor.", "type": "number", "decimal_places": 0, "IsDynamic": true, - "categories": ["state"], - "modifiers": ["aluminium", "chromium", "oil", "rubber", "steel", "tungsten"] + "categories": ["country"], + "modifiers": ["cat_air_bombs", "cat_air_engine", "cat_air_guns", "cat_anti_air", "cat_anti_tank", "cat_armored_cars", "cat_base_strike", "cat_battlefield_support", "cat_fleet_in_being", "cat_grand_battle_plan", "cat_heavy_armor", "cat_heavy_fighter", "cat_light_armor", "cat_marines_doctrine", "cat_maritime_patrol", "cat_mass_assault", "cat_mechanized_equipment", "cat_medium_armor", "cat_mobile_warfare", "cat_mountaineers_doctrine", "cat_operational_integrity", "cat_paratroopers_doctrine", "cat_production", "cat_scout_plane", "cat_ship_heavy_battery", "cat_ship_light_battery", "cat_ship_medium_battery", "cat_special_forces_generic", "cat_strategic_bomber", "cat_strategic_destruction", "cat_superior_firepower", "cat_synth_oil", "cat_synth_rubber", "cat_torpedoes", "cat_trade_interdiction"] }], "dynamic_variables": { "global": { @@ -11550,18 +11550,7 @@ "add_subsidies": { }, "add_subsidies_second": { - }, - "tweakergui": { - "description": "Spawns a tweaker GUI" - }, - "reload": { - "arguments": ["file name"], - "description": "Reloads assets", - "argument_completion_support": true - }, - "particle_editor": { - "description": "Spawns a particle editor" - } + } }, "tweakables": { "Operation.Instant": { diff --git a/Config/triggers.cwt b/Config/triggers.cwt index 6cf02803..706daf06 100644 --- a/Config/triggers.cwt +++ b/Config/triggers.cwt @@ -1021,6 +1021,10 @@ alias[trigger:is_in_home_area] = bool ## scope = state alias[trigger:state_population] = float +### Check the population in the state. +## scope = state +alias[trigger:state_population] = value[variable] + ### Check the ai irrationality value. ## scope = country alias[trigger:ai_irrationality] = int @@ -1934,18 +1938,6 @@ alias[trigger:stockpile_ratio] = { ratio = float } -### Checks the deal completion with the target value -alias[trigger:contract_contains_equipment] = - -### Checks if the buyer is -alias[trigger:buyer] = scope[country] - -### Checks if the seller is -alias[trigger:seller] = scope[country] - -### Checks the deal completion with the target value -alias[trigger:deal_completion] = float[0..1] - ### Checks for state strategic value. ## scope = state alias[trigger:state_strategic_value] = int @@ -2166,6 +2158,10 @@ alias[trigger:has_rule] = enum[game_rules] ## scope = { state } alias[trigger:state_population_k] = int +### Check the population in the state in thousands (use to avoid variable overflows). +## scope = { state } +alias[trigger:state_population_k] = value[variable] + ### Check the amount of casualties in thousands a country has suffered in all of it's wars. ## scope = country alias[trigger:casualties_k] = int diff --git a/Config/triggers_aat.cwt b/Config/triggers_aat.cwt index 2f38fd8e..48ea9487 100644 --- a/Config/triggers_aat.cwt +++ b/Config/triggers_aat.cwt @@ -154,3 +154,37 @@ alias[trigger:any_military_industrial_organization] = { include_invisible = yes alias_name[trigger] = alias_match_left[trigger] } + +### Checks if at least one Purchase contract of the Country in scope matches the triggers. tooltip=key can be defined to override title +## scope = country +## push_scope = purchase_contract +alias[trigger:any_purchase_contract] = { + ## cardinality = 0..1 + tooltip = localisation + alias_name[trigger] = alias_match_left[trigger] +} + +### Checks if all purchase contracts of the Country in scope matches the triggers.\ntooltip=key can be defined to override title +## scope = country +## push_scope = purchase_contract +alias[trigger:all_purchase_contracts] = { + ## cardinality = 0..1 + tooltip = localisation + alias_name[trigger] = alias_match_left[trigger] +} + +### Check if contract contains equipment category, equipment archetype or equipment +## scope = purchase_contract +alias[trigger:contract_contains_equipment] = enum[equipment_bonus_type] + +### Check value of purchase contract completion. Example: deal_completition < 0.6" +## scope = purchase_contract +alias[trigger:deal_completion] = float[0..1] + +### Check the buyer country. Example: buyer = GER +## scope = purchase_contract +alias[trigger:buyer] = scope[country] + +### Check the seller country. Example: seller = GER +## scope = purchase_contract +alias[trigger:seller] = scope[country] diff --git a/Config/triggers_bba.cwt b/Config/triggers_bba.cwt index 79837181..44631e42 100644 --- a/Config/triggers_bba.cwt +++ b/Config/triggers_bba.cwt @@ -198,3 +198,7 @@ alias[trigger:unit_strength] = variable_field[0..1] ### Check scope unit organization status 0-1: Example unit_organization < 1 ## scope = unit alias[trigger:unit_organization] = variable_field[0..1] + +### Returns true if this unit's template has the reserves priority +## scope = unit +alias[trigger:is_unit_template_reserves] = bool diff --git a/Config/triggers_new.cwt b/Config/triggers_new.cwt index 68516084..5c060cc7 100644 --- a/Config/triggers_new.cwt +++ b/Config/triggers_new.cwt @@ -499,3 +499,19 @@ alias[trigger:is_leading_volunteer_group_with_original_country] = scope[country] ###Is leading volunteers in a country with the original tag. ## scopes = { UNIT_LEADER character } alias[trigger:is_leading_volunteer_group_with_original_country] = enum[country_tags] + +###Sets a temp variable to a random value. +## scopes = { any } +alias[trigger:set_temp_variable_to_random] = value_set[variable] + +###Sets a temp variable to a random value. +## scopes = { any } +alias[trigger:set_temp_variable_to_random] = { + var = value_set[variable] + ## cardinality = 0..1 + min = variable_field_32 + ## cardinality = 0..1 + max = variable_field_32 + ## cardinality = 0..1 + integer = bool +} diff --git a/Config/triggers_nsb.cwt b/Config/triggers_nsb.cwt index 5c603c36..a78156e5 100644 --- a/Config/triggers_nsb.cwt +++ b/Config/triggers_nsb.cwt @@ -390,6 +390,31 @@ alias[trigger:any_country_with_core] = { ## scope = { character unit_leader } alias[trigger:has_advisor_role] = enum[allowed_advisor_role] +### Return true if the character has an advisor role and they can be fired. Warning: will return false if the character has no advisor role or it does not match the input slot. You should use has_advisor_role trigger first to really test the can_be_fired flag +## scope = { character unit_leader } +alias[trigger:advisor_can_be_fired] = bool + +### Return true if the character has an advisor role and they can be fired. Warning: will return false if the character has no advisor role or it does not match the input slot. You should use has_advisor_role trigger first to really test the can_be_fired flag +## scope = { character unit_leader } +alias[trigger:advisor_can_be_fired] = { + slot = value[character_advisor_slot] +} + ### Check amount of supply nodes ## scope = country alias[trigger:num_of_supply_nodes] = int_variable_field + +### Sets a temp variable to the number of supply vehicles in stockpile or that are needed +## scope = country +alias[trigger:get_supply_vehicles_temp] = { + var = value_set[variable] + type = truck + type = train + ### default no. If yes, gets the number of needed vehicles + ## cardinality = 0..1 + need = yes + ## error_if_only_match = This is the default value and can be omitted + ## severity = info + ## cardinality = 0..1 + need = no +} diff --git a/tests/test_check_missing_effects.py b/tests/test_check_missing_effects.py index e2ccf8be..ebc1857a 100644 --- a/tests/test_check_missing_effects.py +++ b/tests/test_check_missing_effects.py @@ -5,11 +5,15 @@ path_to_config = "Config\\" path_to_documentation = "Config\\script_documentation.json" +FALSE_POSITIVES = [ + 'career_profile_step_missiolini', + 'reseed_division_commander', +] + # 1 Extract effects from documentation documentation_dict = json.load(open(path_to_documentation)) list_with_effects_documentation = [i for i in documentation_dict['effects'].keys()] - # 2 Extract effects from config files list_with_effects_config = [] effect_pattern = r'alias\[effect:(.*?)\]' @@ -27,7 +31,14 @@ list_with_effects_config = set(list_with_effects_config) results_missing_effects = [i for i in list_with_effects_documentation if i not in list_with_effects_config] +raise_error = False if len(results_missing_effects) > 0: for i in results_missing_effects: - print(f'- [] - {i}') - raise Exception("There are effects in documentation file that are not present in .cwt files") + if [_ for _ in FALSE_POSITIVES if _ in i] == []: + print(f'- [] - {i}') + raise_error = True + if raise_error: + raise Exception("There are effects in documentation file that are not present in .cwt files") + +if not raise_error: + print("No missing effects found. Good job!") diff --git a/tests/test_check_missing_triggers.py b/tests/test_check_missing_triggers.py index 18930bd2..198c0c1a 100644 --- a/tests/test_check_missing_triggers.py +++ b/tests/test_check_missing_triggers.py @@ -5,11 +5,17 @@ path_to_config = "Config\\" path_to_documentation = "Config\\script_documentation.json" +FALSE_POSITIVES = [ + 'career_profile', + 'building_count_trigger', + 'resource_count_trigger', + 'ideology_support_trigger', +] + # 1 Extract triggers from documentation documentation_dict = json.load(open(path_to_documentation)) list_with_triggers_documentation = [i for i in documentation_dict['triggers'].keys()] - # 2 Extract triggers from config files list_with_triggers_config = [] effect_pattern = r'alias\[trigger:(.*?)\]' @@ -27,7 +33,14 @@ list_with_triggers_config = set(list_with_triggers_config) results_missing_triggers = [i for i in list_with_triggers_documentation if i not in list_with_triggers_config] +raise_error = False if len(results_missing_triggers) > 0: for i in results_missing_triggers: - print(f'- [] - {i}') - raise Exception("There are triggers in documentation file that are not present in .cwt files") + if [_ for _ in FALSE_POSITIVES if _ in i] == []: + print(f'- [] - {i}') + raise_error = True + if raise_error: + raise Exception("There are triggers in documentation file that are not present in .cwt files") + +if not raise_error: + print("No missing triggers found. Good job!")