diff --git a/common/decisions/dlc_decisions/ep_1/00_ep1_court_grandeur_and_amenity_decisions.txt b/common/decisions/dlc_decisions/ep_1/00_ep1_court_grandeur_and_amenity_decisions.txt index 98ec62678b..08d6f58bb6 100644 --- a/common/decisions/dlc_decisions/ep_1/00_ep1_court_grandeur_and_amenity_decisions.txt +++ b/common/decisions/dlc_decisions/ep_1/00_ep1_court_grandeur_and_amenity_decisions.txt @@ -234,7 +234,7 @@ invite_a_linguist_liege = { NOT = { has_same_court_language = liege } # Can use other decision in this case } NOR = { - AND = { liege = { has_royal_court = yes has_court_language_of_culture = root.culture } } # No need to learn your own culture's language + liege = { has_court_language_of_culture = root.culture } # No need to learn your own culture's language AND = { knows_language_of_culture = root.liege.culture any_child = { diff --git a/common/decisions/dlc_decisions/fp3_decisions.txt b/common/decisions/dlc_decisions/fp3_decisions.txt new file mode 100644 index 0000000000..bbf5d2eb8e --- /dev/null +++ b/common/decisions/dlc_decisions/fp3_decisions.txt @@ -0,0 +1,287 @@ +#Warcraft +################################### +# Favour Skilled Outsiders +# By Ewan Cowhig Croft +################################### + +# Bring in skilled characters that like you at the cost of offending your other vassals. +favour_skilled_outsiders_decision = { + desc = favour_skilled_outsiders_decision_desc + confirm_text = favour_skilled_outsiders_decision_confirm + selection_tooltip = favour_skilled_outsiders_decision_tooltip + picture = "gfx/interface/illustrations/decisions/fp3_decision_tax_collector.dds" + sort_order = 180 + + is_shown = { + has_fp3_dlc_trigger = yes + is_landed = yes + favour_skilled_outsiders_decision_valid_character_to_take_trigger = yes + } + + is_valid = { + any_sub_realm_county = { favour_skilled_outsiders_decision_valid_county_to_generate_trigger = yes } + favour_skilled_outsiders_decision_valid_character_to_take_trigger = yes + realm_size >= medium_realm_size + } + + is_valid_showing_failures_only = { + is_available_adult = yes + is_at_war = no + } + + widget = { + gui = "decision_view_widget_option_list_generic" + controller = decision_option_list_controller + decision_to_second_step_button = "favour_skilled_outsiders_decision.second_step" + + # Diplomacy-Martial: Eloquent Captains + item = { + value = outsider_diplomacy_martial + current_description = favour_skilled_outsiders_decision.tt.diplomacy_martial + localization = favour_skilled_outsiders_decision.tt.diplomacy_martial + icon = "gfx/interface/icons/message_feed/a_catch_all_councillor_icon.dds" + is_valid = { + custom_tooltip = { + text = COUNCILLOR_MISSING_CHANCELLOR + exists = cp:councillor_chancellor + } + trigger_if = { + limit = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { diplomacy < favour_skilled_outsiders_decision_skill_threshold_value } + # And an extra tooltip for narrative clarity. + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.skilled_councillor_keeps_clean_house + cp:councillor_chancellor = { diplomacy < favour_skilled_outsiders_decision_skill_threshold_value } + } + } + } + ai_chance = { + # The AI wants to recruit characters that compensate for their skills. + ## So we set a high base. + value = 100 + ## Then we subtract root's relevant skills. + subtract = diplomacy + subtract = martial + } + } + # Martial-Prowess: Career Soldiers + item = { + value = outsider_martial_prowess + current_description = favour_skilled_outsiders_decision.tt.martial_prowess + localization = favour_skilled_outsiders_decision.tt.martial_prowess + icon = "gfx/interface/icons/message_feed/mercenary.dds" + is_valid = { + custom_tooltip = { + text = COUNCILLOR_MISSING_MARSHAL + exists = cp:councillor_marshal + } + trigger_if = { + limit = { exists = cp:councillor_marshal } + cp:councillor_marshal = { martial < favour_skilled_outsiders_decision_skill_threshold_value } + # And an extra tooltip for narrative clarity. + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.skilled_councillor_keeps_clean_house + cp:councillor_marshal = { martial < favour_skilled_outsiders_decision_skill_threshold_value } + } + } + } + ai_chance = { + # The AI wants to recruit characters that compensate for their skills. + ## So we set a high base. + value = 100 + ## Then we subtract root's relevant skills. + subtract = martial + subtract = prowess + } + } + # Prowess-Learning: Fringe Nobility + item = { + value = outsider_prowess_learning + current_description = favour_skilled_outsiders_decision.tt.prowess_learning + localization = favour_skilled_outsiders_decision.tt.prowess_learning + icon = "gfx/interface/icons/message_feed/tier_down.dds" + # Always valid. + ai_chance = { + # The AI wants to recruit characters that compensate for their skills. + ## So we set a high base. + value = 100 + ## Then we subtract root's relevant skills. + subtract = prowess + subtract = learning + } + } + # Learning-Intrigue: Dedicated Functionaries + item = { + value = outsider_learning_intrigue + current_description = favour_skilled_outsiders_decision.tt.learning_intrigue + localization = favour_skilled_outsiders_decision.tt.learning_intrigue + icon = "gfx/interface/icons/message_feed/secret.dds" + is_valid = { + custom_tooltip = { + text = COUNCILLOR_MISSING_COURT_CHAPLAIN + exists = cp:councillor_court_chaplain + } + trigger_if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { learning < favour_skilled_outsiders_decision_skill_threshold_value } + # And an extra tooltip for narrative clarity. + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.skilled_councillor_keeps_clean_house + cp:councillor_court_chaplain = { learning < favour_skilled_outsiders_decision_skill_threshold_value } + } + } + } + ai_chance = { + # The AI wants to recruit characters that compensate for their skills. + ## So we set a high base. + value = 100 + ## Then we subtract root's relevant skills. + subtract = learning + subtract = intrigue + } + } + # Intrigue-Stewardship: Cunning Officials + item = { + value = outsider_intrigue_stewardship + current_description = favour_skilled_outsiders_decision.tt.intrigue_stewardship + localization = favour_skilled_outsiders_decision.tt.intrigue_stewardship + icon = "gfx/interface/icons/message_feed/spy_master.dds" + is_valid = { + custom_tooltip = { + text = COUNCILLOR_MISSING_SPYMASTER + exists = cp:councillor_spymaster + } + trigger_if = { + limit = { exists = cp:councillor_spymaster } + cp:councillor_spymaster = { intrigue < favour_skilled_outsiders_decision_skill_threshold_value } + # And an extra tooltip for narrative clarity. + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.skilled_councillor_keeps_clean_house + cp:councillor_spymaster = { intrigue < favour_skilled_outsiders_decision_skill_threshold_value } + } + } + } + ai_chance = { + # The AI wants to recruit characters that compensate for their skills. + ## So we set a high base. + value = 100 + ## Then we subtract root's relevant skills. + subtract = intrigue + subtract = stewardship + } + } + # Stewardship-Diplomacy: Skilled Administrators + item = { + value = outsider_stewardship_diplomacy + current_description = favour_skilled_outsiders_decision.tt.stewardship_diplomacy + localization = favour_skilled_outsiders_decision.tt.stewardship_diplomacy + icon = "gfx/interface/icons/message_feed/money.dds" + is_valid = { + custom_tooltip = { + text = COUNCILLOR_MISSING_STEWARD + exists = cp:councillor_steward + } + trigger_if = { + limit = { exists = cp:councillor_steward } + cp:councillor_steward = { stewardship < favour_skilled_outsiders_decision_skill_threshold_value } + # And an extra tooltip for narrative clarity. + custom_tooltip = { + text = favour_skilled_outsiders_decision.tt.skilled_councillor_keeps_clean_house + cp:councillor_steward = { stewardship < favour_skilled_outsiders_decision_skill_threshold_value } + } + } + } + ai_chance = { + # The AI wants to recruit characters that compensate for their skills. + ## So we set a high base. + value = 100 + ## Then we subtract root's relevant skills. + subtract = stewardship + subtract = diplomacy + } + } + } + + effect = { + # So here's what'll happen. + custom_tooltip = favour_skilled_outsiders_decision.tt.promote_minorities_from_within_realm + custom_tooltip = favour_skilled_outsiders_decision.tt.two_batches_to_choose_from + # And how people will react. + show_as_tooltip = { favour_skilled_outsiders_decision_apply_opinions_effect = yes } + # Save how much prestige we paid in case we back out. + save_scope_value_as = { + name = prestige_cost + value = favour_skilled_outsiders_decision_prestige_cost_value + } + # Now fire the actual event. + trigger_event = fp3_misc_decisions.0032 + } + + cooldown = { years = 25 } + + cost = { prestige = favour_skilled_outsiders_decision_prestige_cost_value } + + ai_check_interval = 24 + + ai_potential = { + # Check this stuff early, else we'll go through a bunch of county checks unnecessarily. + favour_skilled_outsiders_decision_valid_character_to_take_trigger = yes + # Plus simple validity checks. + is_adult = yes + is_at_war = no + } + + ai_will_do = { + # We don't want to use this too much - the AI is gonna have trouble utilising such characters correctly. + base = -50 + + # Missing councillors. + ## Chancellor + modifier = { + add = 50 + NOT = { exists = cp:councillor_chancellor } + } + ## Steward + modifier = { + add = 50 + NOT = { exists = cp:councillor_steward } + } + ## Marshal + modifier = { + add = 50 + NOT = { exists = cp:councillor_marshal } + } + ## Spymaster + modifier = { + add = 50 + NOT = { exists = cp:councillor_spymaster } + } + ## Court_chaplain + modifier = { + add = 50 + NOT = { exists = cp:councillor_court_chaplain } + } + # Government. + ## Teensy upweight for clans, as the model for the decision. + modifier = { + add = 20 + government_has_flag = government_is_clan + } + # Traits. + ## Calm + modifier = { + add = 15 + has_trait = calm + } + ## Humble + modifier = { + add = 15 + has_trait = humble + } + ## Ambitious + modifier = { + add = 15 + has_trait = ambitious + } + } +} \ No newline at end of file diff --git a/common/defines/00_defines.txt b/common/defines/00_defines.txt index 4c487b118c..6d9f0e1637 100644 --- a/common/defines/00_defines.txt +++ b/common/defines/00_defines.txt @@ -676,14 +676,14 @@ NReligion = { 0 -10 -20 - -60 + -30 } HOSTILITY_COUNTY_OPINION_EFFECTS = { # The opinion effects of each hostility level on counties. Modified by fervor of the county's faith divided by 100 0 -15 -30 - -75 + -45 } HOSTILITY_COMBAT_MOD_MULT = { # Multiplier to how big of an effect tolerance_advantage_mod has. The higher it is, the greater the effect @@ -1319,13 +1319,19 @@ NCourtPositions = { } NStruggle = { - PHASE_TRANSITION_THRESHOLD = 1000 # How much points need to be accumulated in order to trigger the transition to a new phase + # How much points need to be accumulated during point-based phase in order to trigger the transition to a new phase + POINT_BASED_PHASE_DEFAULT_DURATION = 1000 # Sound effect played when change animation for struggle button PHASE_TRANSITION_SOUND_EFFECT_PATH = "event:/DLC/FP2/SFX/UI/fp2_struggle_button_state_change" YEARLY_DEFAULT_PHASE_POINTS = 0 # How many points are given to the default phase every year PHASE_TRANSITION_DURATION = 90 # How many days before the new phase starts once the threshold is reached NUM_CATALYST_HISTORIES_DISPLAYED = 5 # How many catalyst histories that should be shown in the struggle tooltip NOTIFICATION_MESSAGE_RELATIONS = { "friend", "rival", "nemesis" } + +} + +NHouseUnity = { + CHANGELOG_DURATION = 5 # After how many years do changelog entries get deleted? } NMemories = { @@ -1333,6 +1339,7 @@ NMemories = { DEATH_MEMORY_RETENTION_YEARS_PER_TIER = { -1 -1 -1 -1 0 0 } # We can keep or extend memories of dead characters by tier. (-1 forgets characters' memories on death, 0 keeps, and X positive adds X years) DEATH_MEMORY_RETENTION_YEARS_PLAYED_CHARACTER = 1000 # Any character that was played by a player retains their memories, adding X years } + # Settings for character based travel (not army travel) NTravel = { TRAVEL_SPEED_BASE = 0 # Travel speed base score value @@ -1376,7 +1383,7 @@ NTravel = { NDiarchy = { DIARCHY_SUCCESSION_SIZE = 5 # How many people are in diarchy line of succession. Active or designated diarch takes 1st spot there DIARCHY_MONTHLY_POWER_CHANGE = 0.25 # How much scales of power level changes each months towards balance value - DIARCH_APTITUDE_LEVELS = { 20 40 60 80 100 } # diarchy aptitude value cutoff points + DIARCH_APTITUDE_LEVELS = { 20 40 60 80 } # diarchy aptitude value cutoff points DESIGNATE_DIARCH_INTERVAL_DAYS = 3650 # Length of the cooldown after designating a diarch } @@ -1434,3 +1441,7 @@ NHostage = { GAIN_REDUCTION_PER_HOSTAGE = 0.2 # Income from every subsequent hostage is relatively reduced by this value. More valuable hostages are evaluated first MIN_GAIN_PER_HOSTAGE = 0.05 # Minimum possible fraction of income the hostage can give } + +NTaxSlot = { + TAX_DECREE_COOLDOWN = 5 # number of years you have to wait before changing a jurisdictions tax decree again +} diff --git a/common/defines/ai/00_ai.txt b/common/defines/ai/00_ai.txt index aef2b4b9d4..7b4850fa9d 100644 --- a/common/defines/ai/00_ai.txt +++ b/common/defines/ai/00_ai.txt @@ -62,6 +62,16 @@ 360 } + # Number of days between checking tax collector ticks per tier + TAX_COLLECTOR_TASK_TICK = { + 1800 # Unlanded has no vassals + 1800 # Barons have no vassals + 1100 + 720 + 120 + 60 + } + MINIMUM_TASKS_IN_TICK = 128 # How many tasks do we need in each tick? MAX_TASKS_IN_TICK = 192 # How high do we cap out? (If the frequency of a tick means we should do even more than this, we ignore this) MAX_TICK_STALENESS = 8 # How long can we delay a tick for better load-balancing? @@ -235,12 +245,12 @@ REGIMENT_OBSOLETION_SCORE_DIFFERENCE = 20 # The AI will disband a regiment if it is this much worse than the best available regiment, and it is unable to hire more regiments (due to cost or being at cap). Quick math: 10 damage * 100 men / 200 cost = 5 score difference - AI_BASE_WAR_CHANCE = 0.1 # Basic chance of declaring war. Further reduced by energy; x0 at -100, x1 at 100, x0.5 at 0 energy - AI_WAR_BASE_COOLDOWN = 365 # How long, in days, does the AI have to wait between wars? - AI_WAR_COOLDOWN_RATIO_FOR_FULL_CHANCE = 5 # How far beyond the cooldown do you have to go before the time since the last war stops reducing the chance? With these numbers, chance at day 3650 would be 0x, 1x at 3650*2, and 0.5x at 3650*1.5 + AI_BASE_WAR_CHANCE = 1 # Basic chance of declaring war. Further reduced by energy; x0 at -100, x1 at 100, x0.5 at 0 energy + AI_WAR_BASE_COOLDOWN = 50 # How long, in days, does the AI have to wait between wars? + AI_WAR_COOLDOWN_RATIO_FOR_FULL_CHANCE = 0 # How far beyond the cooldown do you have to go before the time since the last war stops reducing the chance? With these numbers, chance at day 3650 would be 0x, 1x at 3650*2, and 0.5x at 3650*1.5 AI_WAR_MAX_OFFENSIVE_WAR_PENALTY = 0.0 # If your offensive war penalty is higher than this, don't declare war unless you're a warmonger (faith doctrine) or irrational AI_WAR_MIN_RATIONALITY_FOR_OFFENSIVE_WAR_PENALTY = -30 # At or below this value, the AI will declare war even if their offensive war penalty is high - MIN_SCORE_RATIO_FOR_CASUS_BELLI = 0.6 # The AI will never declare a war below this ratio of the best war it has available + MIN_SCORE_RATIO_FOR_CASUS_BELLI = 0.9 # The AI will never declare a war below this ratio of the best war it has available AI_VENGEFULLNESS_FOR_WAR_WITH_HOSTAGE = 50 # AI must be at least this vengeful to attack a target warden of their hostage AI_COMPASSION_FOR_WAR_WITH_HOSTAGE = -50 # AI must be less compassionate than this to attack a target warden of their hostage @@ -249,13 +259,13 @@ AI_BOLDNESS_FOR_WAR_WITH_HOSTAGE = 50 # AI warden must be at least this bold to attack a target who gave them hostage AI_CHANCE_TO_START_WAR_WITH_HOSTAGE = 0.5 # How likely is AI to attack a target if they are bound by hostages. Random chance between [0, 1) - CB_SCORE_DE_JURE_MULTIPLIER = 20 # If the title is de jure under the AI character + CB_SCORE_DE_JURE_MULTIPLIER = 100 # If the title is de jure under the AI character CB_SCORE_DE_JURE_UNDER_LIEGE_MULTIPLIER = 1.5 # If the title is de jure under the AI character's liege - CB_SCORE_DE_JURE_UNDER_HIGHER_TITLE_MULTIPLIER = 15 # If the title is de jure under the de jure title directly above an independent AI character - CB_SCORE_HIGHER_TITLE_MULTIPLIER = 5.0 # If the title is a higher tier than the AI character's current primary title + CB_SCORE_DE_JURE_UNDER_HIGHER_TITLE_MULTIPLIER = 25 # If the title is de jure under the de jure title directly above an independent AI character + CB_SCORE_HIGHER_TITLE_MULTIPLIER = 100 # If the title is a higher tier than the AI character's current primary title EXTRA_CB_SCORE_FOR_HOLY_SITES = 10 # The AI will assign this much extra score to conquering a province that is its holy site - CB_SCORE_MULT_NEIGHBOR_TITLE = 5 # The AI will multiply the score of neighboring titles taken by a CB by this much + CB_SCORE_MULT_NEIGHBOR_TITLE = 15 # The AI will multiply the score of neighboring titles taken by a CB by this much TARGET_MAX_DEFENSIVE_WARS = 3 # AI won't declare war on someone who already has this many or more defensive wars DESIRED_WAR_SIDE_STRENGTH = 1.25 # AI won't call in more allies if its side in a war has at least this ratio of troops compared to the enemy. Uses current strength for own side, max strength for enemy side @@ -272,7 +282,7 @@ CB_OPINION_OF_TARGET_MULTIPLIER = 0.1 # Multiplier for opinion of target CB_OPINION_OF_CLAIMANT_MULTIPLIER = 0.1 # Multiplier for opinion of claimant (if claimant is the AI, we use MAX_OPINION) - CB_CLAIMANT_BECOMES_INDEPENDENT_MULTIPLIER = 0.25 # Multiplier if the claimant becomes indepent dut to this CB + CB_CLAIMANT_BECOMES_INDEPENDENT_MULTIPLIER = 0.25 # Multiplier if the claimant becomes indepent due to this CB CB_CLAIMANT_IS_CLOSE_RELATIVE_MULTIPLIER = 2 # Multiplier if the claimant is a close relative CB_CLAIMANT_IS_NOT_CLOSE_RELATIVE_MULTIPLIER = 0.75 # Multiplier if the claimant is not a close relative CB_CLAIMANT_GREED_MULTIPLIER = -0.5 # Multiplier of the AI's greed when scoring a CB for a claimant. Full greed gives this value while full generous gives the positive equivalent @@ -317,10 +327,10 @@ RAID_SCORE_MULT_SAME_CULTURE = 0.5 RAID_SCORE_MULT_SAME_HERITAGE = 0.75 - CHASE_MIN_SIZE = 100 # The AI will not bother trying to chase armies smaller than this - CHASE_PRIMARY_ENEMY_MIN_SCORE = 0.75 # Score is between 0.0 and 1.0 and represents the percentage of the enemy's total strength the target unit contains. If lead by the primary enemy, the score is capped to this minimum + CHASE_MIN_SIZE = 500 # The AI will not bother trying to chase armies smaller than this + CHASE_PRIMARY_ENEMY_MIN_SCORE = 0.75 # Score is between 0.0 and 1.0 and represents the percentage of the enemy's total strength the target unit contains. If led by the primary enemy, the score is capped to this minimum CHASE_PRIMARY_ENEMY_SOLDIER_MODIFIER = 2.0 # Modifies the number of target unit soldiers when considering if it's worth taking hostile attrition to attack it. I.e. AI won't attack a unit with 200 if it loses more by moving there - CHASE_MAX_SPEED_DIFFERENCE = 0.5 # Ignore chasing units that are this much faster unless adjacent + CHASE_MAX_SPEED_DIFFERENCE = 0.2 # Ignore chasing units that are this much faster unless adjacent COMBAT_RATIO_THRESHOLD = 0.5 # The AI will consider it valid to enter provinces where the predicted combat ratio compared to nearby enemies is above this value COMBAT_RATIO_THRESHOLD_DESPERATE = 0.4 # When in desperate mode, the AI will consider it valid to enter provinces where the predicted combat ratio compared to nearby enemies is above this value @@ -328,13 +338,13 @@ # The AI will only retreat if the following are true: # It predicts it'll lose according to RETREAT_COMBAT_PREDICTION_RATIO # AND it either has significant forces elsewhere, or there's a better defensive location nearby as defined by RETREAT_TO_BETTER_TERRAIN_DISTANCE - ASK_FOR_HELP_COMBAT_PREDICTION_RATIO = 0.66 # Below this combat prediction ratio the AI will try to call in more troops + ASK_FOR_HELP_COMBAT_PREDICTION_RATIO = 0.99 # Below this combat prediction ratio the AI will try to call in more troops ASK_FOR_HELP_OTHER_STACK_TROOPS_RATIO = 1.5 # The incoming enemies RETREAT_COMBAT_PREDICTION_RATIO = 0.45 # Below this combat prediction ratio the AI will retreat RETREAT_TO_BETTER_TERRAIN_DISTANCE = 2 # The AI will retreat to better terrain this many provinces away (might do another retreat once it gets there) RETREAT_IF_MISSING_STRENGTH = 0.25 # The AI will retreat if it has this many troops elsewhere compared to the potentially retreating army. E.G., if 2000 men are considered for retreat, it'll do so if there's at least 0.25 * 2000 = 500 men elsewhere STAND_AND_FIGHT_DAYS = 30 # If the AI decides to stand still so the other party can kill it on defensible terrain, it'll start doing regular orders again after this many days if death is not forthcoming - STAND_AND_FIGHT_COOLDOWN_DAYS = 90 # If the AI abandons "stand and fight" due to the above, it'll avoid "stand and fight" for this many days + STAND_AND_FIGHT_COOLDOWN_DAYS = 45 # If the AI abandons "stand and fight" due to the above, it'll avoid "stand and fight" for this many days MIN_GOALS_PER_STACK = 10 # Of all potential target goals found, each unit stack will only do a final evaluation, including pathfinding, on the top x ones. MIN_SUPPLY_COMPARED_TO_AVERAGE_SUPPLY_FACTOR = 0.7 # For the purpose of army sizes, the AI uses the highest of this factor times the average supply in the war area, and the lowest supply in the war area. E.G., if average supply is 2k, and lowest supply is 1k, the AI will act as if available supply is 0.7 * 2k = 1.4k. But if the lowest supply was 1.5k, it'd be using that instead ARMY_SIZE_COMPARED_TO_SUPPLY = 10 # How much larger than the supply are we willing to make a stack? "Supply" here refers to the same number as MIN_SUPPLY_COMPARED_TO_AVERAGE_SUPPLY_FACTOR does @@ -399,27 +409,27 @@ LAST_STAND_CAPITAL_SCORE = 5 # Score added to capital province when picking a final stand province while desperate (Should together with second best terrain advantage be less than best terrain advantage) LAST_STAND_OCCUPIED_SCORE = -1000 # Score added for provinces already occupied by the enemy, prefer making a stand in an unoccupied province to force the enemy into combat - DESPERATE_UNIT_MIN_SIZE = 50 # The AI will not make desperate last stands or attacks with units smaller than this + DESPERATE_UNIT_MIN_SIZE = 150 # The AI will not make desperate last stands or attacks with units smaller than this PLAYER_SUPPORT_WANTED_COMBAT_RATIO = 5.0 # Try to call in nearby allied AI units until this strength ratio is met - PLAYER_SUPPORT_ATTACK_TARGET_MAX_DISTANCE = 200 # If the first enemy unit on the player unit's path is further away than this, the AI units in support will ignore it and instead find better things to do around the player unit - PLAYER_SUPPORT_ATTACK_MAX_ARRIVAL_DELAY = 30 # Ignore to help out in the attack if estimated arrival is this many days after the combat starts - PLAYER_SUPPORT_IGNORE_BAD_SUPPLY_WITHIN_STEPS = 3 # Ignore trying to re-route to avoid bad supply situations when within this many steps from the target province + PLAYER_SUPPORT_ATTACK_TARGET_MAX_DISTANCE = 400 # If the first enemy unit on the player unit's path is further away than this, the AI units in support will ignore it and instead find better things to do around the player unit + PLAYER_SUPPORT_ATTACK_MAX_ARRIVAL_DELAY = 45 # Ignore to help out in the attack if estimated arrival is this many days after the combat starts + PLAYER_SUPPORT_IGNORE_BAD_SUPPLY_WITHIN_STEPS = 4 # Ignore trying to re-route to avoid bad supply situations when within this many steps from the target province - PLAYER_SUPPORT_ENEMY_STRENGTH_MULTIPLIER = 1.25 # The AI will overestimate enemy strength with this multiplier when calculating how many troops should support a player unit + PLAYER_SUPPORT_ENEMY_STRENGTH_MULTIPLIER = 1.5 # The AI will overestimate enemy strength with this multiplier when calculating how many troops should support a player unit PLAYER_SUPPORT_MIN_SIEGE_STRENGTH = 1.25 # The AI will try to add enought troops supporting a player unit to reach a total number that is higher than the largest enemy garrison times this number - TARGET_SCORE_SUPPORT_PLAYER_ONE_STEP = 500 # Added to score when supporting a player unit, and target province is one step away - TARGET_SCORE_SUPPORT_PLAYER_TWO_STEP = 250 # Added to score when supporting a player unit, and target province is two steps away - TARGET_SCORE_SUPPORT_PLAYER_THREE_STEP = 50 # Added to score when supporting a player unit, and target province is three steps away + TARGET_SCORE_SUPPORT_PLAYER_ONE_STEP = 1000 # Added to score when supporting a player unit, and target province is one step away + TARGET_SCORE_SUPPORT_PLAYER_TWO_STEP = 500 # Added to score when supporting a player unit, and target province is two steps away + TARGET_SCORE_SUPPORT_PLAYER_THREE_STEP = 250 # Added to score when supporting a player unit, and target province is three steps away - TARGET_SCORE_IS_SIEGING = 200 # Added to score if the specific AI unit evaluating is sieging the province + TARGET_SCORE_IS_SIEGING = 500 # Added to score if the specific AI unit evaluating is sieging the province TARGET_SCORE_WOULD_LIFT_SIEGE = 190 # Added to score if moving to this province would lift a siege TARGET_SCORE_WOULD_START_COMBAT = 80 # Added to score if moving to this province would start a combat TARGET_SCORE_WOULD_START_SIEGE = 70 # Added to score if moving to this province would start a siege MAX_DISTANCE_SCORE_CLOSE_TO_WAR_GOAL = 75 # At what point do we stop giving extra score to sieging provinces close to the war goal? In pixels added to the war goal radius - TARGET_SCORE_CLOSE_TO_WAR_GOAL = 350 # Added to score if not a war goal province but close enough to the war goal area + TARGET_SCORE_CLOSE_TO_WAR_GOAL = 100 # Added to score if not a war goal province but close enough to the war goal area TARGET_SCORE_SAME_PROVINCE = 25 # Bonus to targets in same province as unit TARGET_SCORE_SAME_COUNTY = 150 # Bonus to targets in same county as unit @@ -470,3 +480,11 @@ NInventory = { NActivity = { ACTIVITY_SCORE_THRESHOLD = 20 # Activities with scores above this threshold will be eligible for hosting. } + +NTaxSlot = { + MIN_SCORE_TO_HIRE_TAX_COLLECTOR = 0 # Threshold for tax_collector_score for ai to consider hiring a candidate as a tax collector + MAX_SCORE_TO_FIRE_TAX_COLLECTOR = -25 # Threshold for tax_collector_score for ai to fire them, anything below will be fired + + MIN_SCORE_RATIO_FOR_TAX_COLLECTOR_HIRE = 0.6 # When selecting a tax collector to hire, anything below this compared to the highest score is discarded + USE_EMPLOYED_CHARACTER_TO_HIRE_CHANCE = 0.15 # The chance to use assigned tax collector for a new tax slot. That means the character will be moved from the current tax slot to a new one +} diff --git a/common/defines/audio/00_audio.txt b/common/defines/audio/00_audio.txt index 8fc1162712..8555e39872 100644 --- a/common/defines/audio/00_audio.txt +++ b/common/defines/audio/00_audio.txt @@ -31,3 +31,10 @@ NGameAudio = { NCourtScene = { MAX_CROWD = 20 # how many characters in the royal court scene will trigger max ambient crowd sound intensity } + +NDeclareWar = { + # Custom click sound for declare war button. + # Format of the the array: { "default" "sfx_path" "key_0" "value_0" "key_1" "value_1" ... "key_N "value_N" } + # The array must have "default" value otherwise the declare button won't have any sounds + DECLARE_BUTTON = { "default" "event:/SFX/UI/War/sfx_ui_war_declare_war" "iberian_struggle" "event:/DLC/FP2/SFX/UI/fp2_ui_war_declare_war" "persian_struggle" "event:/DLC/FP3/SFX/UI/Generic/fp3_ui_war_declare_war" } +} diff --git a/common/defines/graphic/00_graphics.txt b/common/defines/graphic/00_graphics.txt index 6431552021..daa17a9023 100644 --- a/common/defines/graphic/00_graphics.txt +++ b/common/defines/graphic/00_graphics.txt @@ -408,6 +408,7 @@ NWarMapModes = { NCharacterWindow = { MAX_TRAITS_IN_PERSONALITY_BOX = 4 # How many traits per row in the trait box SKILL_LIST_ITEMS = { 0 1 2 3 4 } + MAX_VISIBLE_MODIFIERS = 8 # When to show the number of extra modifiers } NArmyWindow = { @@ -626,6 +627,8 @@ NGameIcons = { COURT_AMENITY_ICON_PATH = "gfx/interface/icons/amenities" STRUGGLE_PHASE_TYPE_ICON_PATH = "gfx/interface/icons/struggle_types" STRUGGLE_TYPE_ICON_PATH = "gfx/interface/icons/struggle_types" + STRUGGLE_PHASE_TYPE_BACKGROUND_PATH = "gfx/interface/illustrations/struggle_backgrounds" + STRUGGLE_PHASE_TYPE_DETAIL_BACKGROUND_PATH = "gfx/interface/illustrations/struggle_backgrounds/details" MAP_MODE_ICON_PATH = "gfx/interface/icons/flat_icons/map_modes" MEMORY_TYPE_ICON_PATH = "gfx/interface/icons/memory_types" DLC_ICON_PATH = "gfx/interface/icons/dlc" @@ -635,6 +638,10 @@ NGameIcons = { TRAVEL_OPTION_ICON_PATH = "gfx/interface/icons/travel_options" DIARCHY_MANDATE_TYPE_ICON_PATH = "gfx/interface/icons/diarchy_mandates" POINT_OF_INTEREST_TYPE_ICON_PATH = "gfx/interface/icons/point_of_interest_types" + HOUSE_UNITY_STAGE_ICON_PATH = "gfx/interface/icons/currencies/house_unity" + HOUSE_UNITY_STAGE_PROGRESS_BAR_PATH = "gfx/interface/progressbars/house_unity" + HOUSE_UNITY_STAGE_BACKGROUND_PATH = "gfx/interface/illustrations/decisions/fp3" + TAX_SLOT_OBLIGATION_TYPE_PATH = "gfx/interface/icons/tax_slot_obligations" } NOwnMapMode = { @@ -848,3 +855,17 @@ NCoatOfArmsDesigner = { NEW_EMBLEM_DEFAULT_TEXTURE = "ce_fleur.dds" # Default texture for when adding a new emblem and no others exist NEW_EMBLEM_DEFAULT_COLOR = "yellow" # Default color to use in the above texture } + +NStruggle = { + # Default define for showing point based content in gui + POINT_BASED_PHASE_WIDGET_CONTENT = "point_based" + # Default define for showing time based content in gui + TIME_BASED_PHASE_WIDGET_CONTENT = "time_based" + # Default define for showing ending phase content in gui + ENDING_PHASE_WIDGET_CONTENT = "ending_phase" +} + +NHouseUnity = { + NUM_HISTORY_ITEMS_DISPLAYED = 5 # How many house unity history items that should be shown in the tooltip +} + diff --git a/common/diarchies/diarchy_types/00_regencies.txt b/common/diarchies/diarchy_types/00_regencies.txt index 833d07e2aa..627f5fc5af 100644 --- a/common/diarchies/diarchy_types/00_regencies.txt +++ b/common/diarchies/diarchy_types/00_regencies.txt @@ -63,6 +63,7 @@ temporary_regency = { swing = 0 hidden_parameter = diarchy_is_regency hidden_parameter = diarchy_type_is_temporary_regency + hidden_parameter = mandate_tempo_fast } loyalty_score = { add = diarch_loyalty_score_type_regency_value } @@ -189,6 +190,7 @@ regency = { swing = 0 hidden_parameter = diarchy_is_regency hidden_parameter = diarchy_type_is_entrenched_regency + hidden_parameter = mandate_tempo_fast } loyalty_score = { add = diarch_loyalty_score_type_regency_value } diff --git a/common/effect_localization/00_character_effects.txt b/common/effect_localization/00_character_effects.txt index 5d026b863a..663c865018 100644 --- a/common/effect_localization/00_character_effects.txt +++ b/common/effect_localization/00_character_effects.txt @@ -555,6 +555,19 @@ educate_child_option_convert_faith_unlikely_effect = { global = EDUCATE_CHILD_OPTION_CONVERT_FAITH_UNLIKELY_EFFECT } +educate_child_option_zeal_effect = { + first = EDUCATE_ME_OPTION_ZEAL_EFFECT + global = EDUCATE_CHILD_OPTION_ZEAL_EFFECT +} +educate_child_option_zeal_likely_effect = { + first = EDUCATE_ME_OPTION_ZEAL_LIKELY_EFFECT + global = EDUCATE_CHILD_OPTION_ZEAL_LIKELY_EFFECT +} +educate_child_option_zeal_unlikely_effect_low = { + first = EDUCATE_ME_OPTION_ZEAL_UNLIKELY_EFFECT_LOW + global = EDUCATE_CHILD_OPTION_ZEAL_UNLIKELY_EFFECT_LOW +} + set_relation_mentor = { first = I_GAIN_MENTOR third = THEY_GET_MENTOR @@ -667,6 +680,7 @@ set_relation_wedding_very_bad_fertility = { remove_relation_potential_rival = { first = I_LOSE_POTENTIAL_RIVAL global = LOSES_POTENTIAL_RIVAL + third = THEY_LOSE_POTENTIAL_RIVAL } add_visiting_courtier = { @@ -1286,6 +1300,15 @@ set_character_faith_with_conversion = { first_past = I_CONVERTED_WITH_CONVERSION } +set_character_secret_faith = { + first = I_CONVERT_SECRETLY_TO + third = THEY_CONVERTS_SECRETLY_TO + global = COVERTS_SECRETLY_TO + first_past = I_CONVERTED_SECRETLY_TO + third_past = THEY_CONVERTED_SECRETLY_TO + global_past = COVERTED_SECRETLY_TO +} + set_house = { global = SET_HOUSE_EFFECT first = MY_SET_HOUSE_EFFECT @@ -1422,7 +1445,7 @@ change_government = { third = CHANGE_THEIR_GOVERNMENT global = CHANGE_GOVERNMENT } - + add_house_modifier = { first_past = MY_HOUSE_RECEIVED_MODIFIER_EFFECT third_past = THEIR_HOUSE_RECEIVED_MODIFIER_EFFECT @@ -1441,6 +1464,24 @@ add_house_modifier_duration = { global = HOUSE_RECEIVES_MODIFIER_UNTIL_EFFECT } +add_house_unity_modifier = { + first_past = MY_HOUSE_RECEIVED_MODIFIER_EFFECT + third_past = THEIR_HOUSE_RECEIVED_MODIFIER_EFFECT + global_past = RECEIVED_MODIFIER_EFFECT + first = MY_HOUSE_RECEIVE_MODIFIER_EFFECT + third = THEIR_HOUSE_RECEIVE_MODIFIER_EFFECT + global = HOUSE_RECEIVES_MODIFIER_EFFECT +} + +add_house_unity_modifier_duration = { + first_past = MY_HOUSE_RECEIVED_MODIFIER_UNTIL_EFFECT + third_past = THEIR_HOUSE_RECEIVED_MODIFIER_UNTIL_EFFECT + global_past = RECEIVED_MODIFIER_UNTIL_EFFECT + first = MY_HOUSE_RECEIVE_MODIFIER_UNTIL_EFFECT + third = THEIR_HOUSE_RECEIVE_MODIFIER_UNTIL_EFFECT + global = HOUSE_RECEIVES_MODIFIER_UNTIL_EFFECT +} + remove_house_modifier = { first_past = MY_HOUSE_LOST_MODIFIER_EFFECT third_past = THEIR_HOUSE_LOST_MODIFIER_EFFECT @@ -1807,3 +1848,12 @@ reminds_of_childhood_decision = { first = REMINDS_OF_CHILDHOOD_DECISION first_past = REMINDED_OF_CHILDHOOD_DECISION } + +fire_tax_collector = { + first_past = FIRE_TAX_COLLECTOR_FIRST_PAST + third_past = FIRE_TAX_COLLECTOR_THIRD_PAST + global_past = FIRE_TAX_COLLECTOR_PAST + first = FIRE_TAX_COLLECTOR_FIRST + third = FIRE_TAX_COLLECTOR_THIRD + global = FIRE_TAX_COLLECTOR +} diff --git a/common/effect_localization/00_council_effects.txt b/common/effect_localization/00_council_effects.txt index c9badf2e6d..ebb780c267 100644 --- a/common/effect_localization/00_council_effects.txt +++ b/common/effect_localization/00_council_effects.txt @@ -43,3 +43,7 @@ set_county_council_task = { change_de_jure_drift_progress = { global = CHANGE_DE_JURE_DRIFT_PROGRESS_EFFECT } + +marshal_task_0304_a_tt = { + global = marshal_task_0304_a_tt +} diff --git a/common/effect_localization/00_custom_effects.txt b/common/effect_localization/00_custom_effects.txt index 7f8c167b69..2aac9b771d 100644 --- a/common/effect_localization/00_custom_effects.txt +++ b/common/effect_localization/00_custom_effects.txt @@ -86,6 +86,10 @@ murder_outcome_murdered_rival_tt = { global = murder_outcome_murdered_rival_tt } +active_unity_level_description_tt = { + global = active_unity_level_description_tt +} + ep2_tournament_maysir_tt = { global = ep2_tournament_maysir_tt } diff --git a/common/effect_localization/00_dynasty_effects.txt b/common/effect_localization/00_dynasty_effects.txt index 45e96bb7a8..c28f4a2791 100644 --- a/common/effect_localization/00_dynasty_effects.txt +++ b/common/effect_localization/00_dynasty_effects.txt @@ -1,5 +1,4 @@ - -create_cadet_branch = { +create_cadet_branch = { first = I_CREATE_CADET_BRANCH } @@ -20,3 +19,21 @@ add_dynasty_prestige = { first = DYNASTY_GAIN_PRESTIGE_EFFECT first_neg = DYNASTY_LOSE_PRESTIGE_EFFECT } + +add_unity_value = { + first_past = ADD_UNITY_VALUE_GLOBAL + third_past = ADD_UNITY_VALUE_GLOBAL + global_past = ADD_UNITY_VALUE_GLOBAL + first = ADD_UNITY_VALUE_GLOBAL + third = ADD_UNITY_VALUE_GLOBAL + global = ADD_UNITY_VALUE_GLOBAL +} + +set_house_head = { + first_past = SET_HOUSE_HEAD_GLOBAL_PAST + third_past = SET_HOUSE_HEAD_GLOBAL_PAST + global_past = SET_HOUSE_HEAD_GLOBAL_PAST + first = SET_HOUSE_HEAD_GLOBAL + third = SET_HOUSE_HEAD_GLOBAL + global = SET_HOUSE_HEAD_GLOBAL +} diff --git a/common/effect_localization/00_title_effects.txt b/common/effect_localization/00_title_effects.txt index 0a3831aead..957cadfcac 100644 --- a/common/effect_localization/00_title_effects.txt +++ b/common/effect_localization/00_title_effects.txt @@ -12,10 +12,8 @@ change_title_holder_include_vassals = { global = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT first = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT_FIRST - third = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT_THIRD - global_past = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT first_past = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT_FIRST - third_past = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT_THIRD + third = CHANGE_TITLE_HOLDER_INCLUDE_VASSALS_EFFECT_THIRD } get_title = { @@ -162,6 +160,7 @@ set_realm_capital = { global = SET_REALM_CAPITAL_DESC first = SET_REALM_CAPITAL_FIRST_DESC third = SET_REALM_CAPITAL_THIRD_DESC + first_past = SET_REALM_CAPITAL_FIRST_DESC } clear_title_laws = { diff --git a/common/effect_localization/00_war_effects.txt b/common/effect_localization/00_war_effects.txt index ff4f1fd30e..1381229d7b 100644 --- a/common/effect_localization/00_war_effects.txt +++ b/common/effect_localization/00_war_effects.txt @@ -1,4 +1,6 @@ start_war = { + first = START_WAR_EFFECT_FIRST + third = START_WAR_EFFECT_THIRD global = START_WAR_EFFECT } @@ -125,4 +127,4 @@ attack_breaking_truce_text = { global = BREAKING_TRUCE first = BREAKING_TRUCE third = BREAKING_TRUCE -} +} \ No newline at end of file diff --git a/common/effect_localization/03_fp2_effects.txt b/common/effect_localization/03_fp2_effects.txt index 89d9d56dd4..79008a3c9a 100644 --- a/common/effect_localization/03_fp2_effects.txt +++ b/common/effect_localization/03_fp2_effects.txt @@ -63,8 +63,13 @@ start_struggle = { global = START_STRUGGLE_EFFECT } +end_struggle = { + global = END_STRUGGLE_EFFECT +} + activate_struggle_catalyst = { global = ACTIVATE_STRUGGLE_CATALYST + global_past = ACTIVATE_STRUGGLE_CATALYST_PAST } change_struggle_phase = { diff --git a/common/religion/doctrines/02_doctrines_special.txt b/common/religion/doctrines/02_doctrines_special.txt index 0e5593c461..fd62d73ab9 100644 --- a/common/religion/doctrines/02_doctrines_special.txt +++ b/common/religion/doctrines/02_doctrines_special.txt @@ -1,4 +1,99 @@ -# Warcraft +#is_christian_faith = { + #group = "special" + + #is_available_on_create = { + #has_doctrine = special_doctrine_is_christian_faith + #} + + #special_doctrine_is_christian_faith = { + #parameters = { + # Since doctrines cannot modify other faith's views of us, only our view of others, all Christian faiths are given this special doctrine which makes them friendlier to Faiths with the Christian Syncretism tenet. + #hostility_override_tenet_christian_syncretism = 2 + #christian_syncretic_recipient_opinion_active = yes + #opinion_of_christian_syncretic_actor_opinion_active = 30 + # We don't localise these because Adoptionists are supposed to be a bit of a surprise. + #hostility_override_special_doctrine_adoptionist_school_felicitous_doctrine = 3 + #hostility_override_special_doctrine_adoptionist_school_radical_doctrine = 3 + #} + #} +#} + +#is_islamic_faith = { + #group = "special" + + #is_available_on_create = { + #has_doctrine = special_doctrine_is_islamic_faith + #} + + #special_doctrine_is_islamic_faith = { + #parameters = { + # Since doctrines cannot modify other faith's views of us, only our view of others, all Islamic faiths are given this special doctrine which makes them friendlier to Faiths with the Christian Syncretism tenet. + #hostility_override_tenet_islamic_syncretism = 2 + #islamic_syncretic_recipient_opinion_active = yes + #opinion_of_islamic_syncretic_actor_opinion_active = 30 + #} + #} +#} + +#is_jewish_faith = { + #group = "special" + + #is_available_on_create = { + #has_doctrine = special_doctrine_is_jewish_faith + #} + + #special_doctrine_is_jewish_faith = { + #parameters = { + # Since doctrines cannot modify other faith's views of us, only our view of others, all Jewish faiths are given this special doctrine which makes them friendlier to Faiths with the Christian Syncretism tenet. + #hostility_override_tenet_jewish_syncretism = 2 + #jewish_syncretic_recipient_opinion_active = yes + #opinion_of_jewish_syncretic_actor_opinion_active = 30 + #} + #} +#} + +#is_eastern_faith = { + #group = "special" + + #is_available_on_create = { + #has_doctrine = special_doctrine_is_eastern_faith + #} + + #special_doctrine_is_eastern_faith = { + #parameters = { + # Since doctrines cannot modify other faith's views of us, only our view of others, all Eastern faiths are given this special doctrine which makes them friendlier to Faiths with the Eastern Syncretism tenet. + #hostility_override_tenet_eastern_syncretism = 1 + #eastern_syncretic_recipient_opinion_active = yes + #opinion_of_eastern_syncretic_actor_opinion_active = 30 + #} + #} +#} + +#is_gnostic_faith = { + #group = "special" + + #is_available_on_create = { + #has_doctrine = special_doctrine_is_gnostic_faith + #} + + #special_doctrine_is_gnostic_faith = { + #parameters = { + #hostility_override_tenet_gnosticism = 0 + #hostility_override_special_doctrine_is_gnostic_faith = 0 + #granting_titles_gives_stress = yes + #} + + #traits = { + #virtues = { temperate } + #sins = { gluttonous } + #} + + #character_modifier = { + #learning = 2 + #stewardship = -2 + #} + #} +#} special_tolerance = { group = "main_group" @@ -26,34 +121,33 @@ heresy_hostility = { } } -nudity_doctrine = { - group = "special" - is_available_on_create = { - has_doctrine = special_doctrine_naked_priests - } +#nudity_doctrine = { + #group = "special" + #is_available_on_create = { + #has_doctrine = special_doctrine_naked_priests + #} - special_doctrine_naked_priests = { - parameters = { - naked_priests_active = yes - } - } -} + #special_doctrine_naked_priests = { + #parameters = { + # naked_priests_active = yes + #} + #} +#} unreformed_faith = { group = "not_creatable" is_available_on_create = { - always = no # Goes away on reformation + # Goes away on reformation + always = no } unreformed_faith_doctrine = { visible = no parameters = { # unreformed = yes also serves as the basis for the unreformed_syncretic tenet. unreformed = yes - # Warcraft - # hostility_override_tenet_unreformed_syncretism = 2 - # unreformed_syncretic_recipient_opinion_active = yes - # opinion_of_unreformed_syncretic_actor_opinion_active = 30 - + hostility_override_tenet_unreformed_syncretism = 2 + unreformed_syncretic_recipient_opinion_active = yes + opinion_of_unreformed_syncretic_actor_opinion_active = 30 conquest_cb_enabled = yes faith_can_raid = yes } @@ -65,23 +159,106 @@ unreformed_faith = { republic_government_vassal_opinion = -20 } } -} + #west_african_unreformed_faith_doctrine = { + #visible = no + #parameters = { + # unreformed = yes also serves as the basis for the unreformed_syncretic tenet. + #unreformed = yes + #hostility_override_tenet_unreformed_syncretism = 2 + #unreformed_syncretic_recipient_opinion_active = yes + #opinion_of_unreformed_syncretic_actor_opinion_active = 30 + #conquest_cb_enabled = yes + #faith_can_raid = yes + #} -divine_destiny = { - group = "special" - is_available_on_create = { - has_doctrine = divine_destiny_doctrine - } - divine_destiny_doctrine = { - piety_cost = { - value = faith_doctrine_cost_low - } - parameters = { - divine_destiny_holy_war_cost_reduction = yes - } - } + #character_modifier = { + #monthly_prestige_gain_mult = 0.1 + #} + #} } +#divine_destiny = { + #group = "special" + #is_available_on_create = { + #has_doctrine = divine_destiny_doctrine + #} + #divine_destiny_doctrine = { + #piety_cost = { + #value = faith_doctrine_cost_low + #} + #parameters = { + #divine_destiny_holy_war_cost_reduction = yes + #} + #} +#} + +#adoptionist_school = { + #group = "special" + + #is_available_on_create = { + # Removed on reformation. + #always = no + #} + + #special_doctrine_adoptionist_school_elipandic_doctrine = { + #parameters = { + # Elipandics only think other ecumenicals are astray rather than hostile. + ## We can't localise the actual parameter due to structural shenanigans, so we make a dummy one. + #hostility_override_special_doctrine_is_christian_faith = 1 + #adoptionists_like_ecumenism = yes + # ... note that they're only thought of as hostile, unlike the other two schools, who are regarded as evil. + #adoptionists_are_unilateral_hostile = yes + # Removed on reformation. + #adoptionist_school_removed_on_reformation = yes + # Adoptionists convert other Christians faster. + #adoptionists_attractively_intuitive_theology = yes + #} + #character_modifier = { learning_per_piety_level = 1 } + #traits = { + #virtues = { stubborn } + #} + #} + + #special_doctrine_adoptionist_school_felicitous_doctrine = { + #parameters = { + # Felicians only think other ecumenicals are astray rather than hostile. + ## We can't localise the actual parameter due to structural shenanigans, so we make a dummy one. + #hostility_override_special_doctrine_is_christian_faith = 1 + #adoptionists_like_ecumenism = yes + # ... other Christians think they're evil, though. + #adoptionists_are_unilateral_evil = yes + # Removed on reformation. + #adoptionist_school_removed_on_reformation = yes + # Adoptionists convert other Christians faster. + #adoptionists_attractively_intuitive_theology = yes + #} + #character_modifier = { intrigue_per_piety_level = 1 } + #traits = { + #virtues = { deceitful } + #} + #} + + #special_doctrine_adoptionist_school_radical_doctrine = { + #parameters = { + # Radicals hate & are hated by everyone. + #hostility_override_special_doctrine_is_christian_faith = 3 + #adoptionists_are_mutual_evil = yes + # Removed on reformation. + #adoptionist_school_removed_on_reformation = yes + # Adoptionists convert other Christians faster. + #adoptionists_attractively_intuitive_theology = yes + #} + #character_modifier = { + #advantage_against_coreligionists = 5 + # And, if you're gonna build a fundamentalist movement... + #ai_war_chance = 1 + #ai_war_cooldown = -0.5 + #} + #traits = { + #virtues = { arrogant } + #} + #} +#} not_allowed_to_hof = { group = "special" @@ -91,9 +268,29 @@ not_allowed_to_hof = { } special_doctrine_not_allowed_to_hof = { - name = special_doctrine_not_allowed_to_hof_name + #name = { + #first_valid = { + #triggered_desc = { + #trigger = { + #religion_tag = judaism_religion + #} + #desc = prophecy_of_malachi_name + #} + #desc = special_doctrine_not_allowed_to_hof_name + #} + #} - desc = special_doctrine_not_allowed_to_hof_desc + #desc = { + #first_valid = { + #triggered_desc = { + #trigger = { + #religion_tag = judaism_religion + #} + #desc = prophecy_of_malachi_desc + #} + #desc = special_doctrine_not_allowed_to_hof_desc + #} + #} parameters = { block_from_create_hof_parameter = yes } @@ -103,9 +300,6 @@ not_allowed_to_hof = { #Game rule only full_tolerance = { group = "special" - is_available_on_create = { - has_doctrine = special_doctrine_full_tolerance - } special_doctrine_full_tolerance = { parameters = { @@ -113,3 +307,28 @@ full_tolerance = { } } } + + +has_jizya_doctrine = { #To be adapted for Warcraft + group = "special" + + is_available_on_create = { + OR = { + has_doctrine = special_doctrine_jizya + has_doctrine = special_doctrine_is_islamic_faith + } + } + + + special_doctrine_jizya = { + character_modifier = { + domain_tax_different_faith_mult = 0.2 + levy_reinforcement_rate_same_faith = 0.25 + levy_reinforcement_rate_different_faith = -0.25 + } + + parameters = { + unlock_jizya_contract = yes + } + } +} diff --git a/common/religion/religions/daradorism.txt b/common/religion/religions/daradorism.txt index 77f098e739..8e0e71490f 100644 --- a/common/religion/religions/daradorism.txt +++ b/common/religion/religions/daradorism.txt @@ -100,6 +100,8 @@ custom_faith_lamb custom_faith_black_sheep # Dove custom_faith_dove + # Horse? + afridunism # Temple hellenic_custom # Stones diff --git a/common/religion/religions/druidism_group.txt b/common/religion/religions/druidism_group.txt index 429b1b544a..a0c35ce065 100644 --- a/common/religion/religions/druidism_group.txt +++ b/common/religion/religions/druidism_group.txt @@ -105,6 +105,8 @@ custom_faith_lamb custom_faith_black_sheep # Dove custom_faith_dove + # Horse? + afridunism # Temple hellenic_custom # Stones