占領修改

按照抵抗和核心,遊戲中的省份可以分為三類:一般核心省份占領省份殖民地省份。其中,一般核心省份指的是玩家擁有核心,但是沒有發生抵抗的省份。占領省份指所有發生了抵抗的省份,無論其是否擁有核心,其中可以分為核心被占領省份和非核心被占領省份。殖民地省份指的是沒有核心但是沒有抵抗的省份。 對於所有的占領省份,都將會觸發抵抗。

發起抵抗

主條目:條件#Resistance_initiation_triggers

遊戲中,抵抗在默認情況下是自動發起的。具體來講,遊戲將會在轉移省份時判斷該省份是否是一個可以發起抵抗的省份,如果可以,那麼將會發起抵抗。如果最初省份沒有發起抵抗,那麼除非該省份控制權發生了轉移,否則即使該省份是可以發起抵抗的省份,也始終不會發生抵抗。在這種情況下,可以使用 start_resistance = yes/<country> 這一效果來在省份發起抵抗,不過仍然需要在該省份是一個可以發起抵抗的省份的情況下才能使用,否則不會產生任意效果。

在默認情況下,遊戲將通過scripted_trigger中定義的 should_initiate_resistance 觸發器判斷該省份是否可以發起抵抗。其中 ROOT 作用域是省份,FROM 作用域是進行占領的國家,FROM.FROM 是被占領的國家。默認情況下定義在 /Hearts of Iron IV/common/scripted_triggers/00_resistance_initiate_triggers.txt中,但是可以定義在任意 /Hearts of Iron IV/common/scripted_triggers/*.txt 文件中。

可以通過在 should_initiate_resistance 之後附加省份的編號以單獨為這個省份添加判定,可以附加多個省份,以表示讓這些省份同都使用這一判定。添加的判定將會覆蓋原本的 should_initiate_resistance 針對這些省份的判定。例如,下面的 scripted_trigger 可以讓英國占領了法國的核心領土 123 或 321 時,123 或 321 將無視其他因素會發動抵抗。

should_initiate_resistance_123_321 = {
	if = {
		limit = {
			FROM = {
				tag = ENG
			}
		}
		is_core_of = FRA
	}
	else = {
		should_initiate_resistance = yes # 否则,在不是英法,应该正常发起抵抗
	}
}

如果一個省份不滿足該條件,那麼通過 force_enable_resistance 效果可以讓該省份無視 should_initiate_resistance 觸發器,強制成為一個可以發起抵抗的省份。然而,該效果並不會直接為該省份啟動抵抗,而是仍然在轉移省份或者使用 start_resistance 效果時才能發生抵抗。

非核心領土

當玩家控制了非核心領土時,這些省份將會受到一些懲罰,使得其收益遠低於核心領土。

具體來說,核心領土的人力將會被乘以一個比例數值,才是該省份中實際可以招募的人力比例。LOCAL_MANPOWER_ACCESSIBLE_NON_CORE_FACTOR定義值與 local_non_core_manpower 修正將會決定這一比例。LOCAL_MANPOWER_ACCESSIBLE_NON_CORE_FACTOR 值的默認數值為 0.02 。而local_non_core_manpower 值的上限為MAX_NON_CORE_MANPOWER_FACTOR定義值,該定義值的默認數值為 1

除此之外,在 /Hearts of Iron IV/common/modifier 中定義的 non_corenon_core_controller 這兩個靜態修正將會分別決定一個非核心省份被擁有或者控制時的修正。默認情況下,這兩個修正定義在/Hearts of Iron IV/common/modifiers/00_static_modifiers.txt文件中,但是可以定義在任意/Hearts of Iron IV/common/modifiers/*.txt文件中。原版遊戲的定義為,當一個非核心省份被控制,將會獲得當地工廠

  1. 重定向 Template:紅字,當地資源
  2. 重定向 Template:紅字 的修正,而對其擁有者不產生效果。

抵抗度和順從度

抵抗度順從度是兩個介於 0100 之間的一位小數值。

抵抗度與順從度帶來的主要影響將會體現在其修正上。其修正分為靜態修正抵抗順從修正

靜態占領修正

抵抗度的靜態修正總共有四條,順從度和抵抗度的基礎修正附加修正

其中,抵抗度和順從度的基礎修正resistance_effect_basecompliance_effect_base ,將會在抵抗開始時立刻賦予省份。

而抵抗度和順從度的附加修正則是 resistance_effectcompliance_effect ,在其中定義的是在抵抗度和順從度滿時的修正。這將會根據當前的抵抗或者順從值按比例縮放。默認情況下,這兩個修正定義在/Hearts of Iron IV/common\modifiers\00_static_modifiers.txt文件中,但是可以定義在該文件夾下的任意{}/Hearts of Iron IV/

  • .txt文件中。原版遊戲的定義為,當順從度滿時,將會提供
  1. 重定向 Template:綠字非核心人力,
  2. 重定向 Template:綠字的工廠和資源。

抵抗順從修正

抵抗順從修正/Hearts of Iron IV/common/resistance_compliance_modifiers 文件夾中定義,將會顯示在政治界面中的「占領地區」子界面中的抵抗和順從條上,默認情況下定義在其中的 /Hearts of Iron IV/resistance_modifiers.txt/Hearts of Iron IV/compliance_modifiers.txt 文件中。每一個條抵抗順從修正都應該是一個以其獨特的標識符開頭的塊,代表抵抗或者順從達到某個級別時產生的修正。在抵抗順從修正塊中可以使用的參數包括:

  • tooltip:為一個本地化鍵,表示該抵抗順從修正的描述,作為工具提示出現。可選。
  • icon:為一個GFX鍵,表示該抵抗順從修正的圖標,可選。默認情況下為 GFX_occupation_modifier_strip
  • icon_small:為一個GFX鍵,表示該抵抗順從修正的小圖標,可選。默認情況下為 GFX_occupation_modifier_strip
  • type:該抵抗順從修正的類型,必要。抵抗順從修正的類型有四類,為state_resistance_modifiercore_resistance_modifierstate_compliance_modifiercore_compliancemodifier,分別代表省份抵抗修正、國家抵抗修正、省份順從修正、國家順從修正。國家順從修正和抵抗修正計算的是該國被占領的核心領土的平均順從或者抵抗度。這也會決定其下方的條件塊效果塊作用域,對於省份抵抗順從修正,默認作用域即THIS是省份,FROMROOT均為占領省份的國家,FROM.FROM是被占領的國家。對於國家抵抗順從修正,ROOT和默認作用域即THIS均為占領省份的國家,FROM是被占領的國家。
  • threshold:為一個整數,必要。啟用該修正時,抵抗或者順從所需要達到的值。
  • margin:為一個整數,可選。在抵抗或者順從降低到threshold以下後,還需要降低以解除該修正的值。具體來講,當修正啟用時,抵抗或者順從降低到[math]\displaystyle{ threshold-margin }[/math]以下時才會解除該抵抗順從修正。
  • visible:為一個條件塊,可選,決定該修正何時可見。
  • enable:為一個條件塊,可選,與threshold一同決定該修正何時可以啟用。
  • on_enable:為一個效果塊,可選,決定該修正啟用時產生的效果。
  • on_disable:為一個效果塊,可選,決定該修正解除時產生的效果。
  • state_modifier:為一個修正塊,可選,決定該抵抗順從修正對被占領省份的修正,無論抵抗效果如何,該修正都是施加在被占領省份上的。
  • alert_level:可選,決定該抵抗順從修正的緊急程度。可以使用的值包括 high (待測試)
  • alert_margin:為一個整數,可選,決定抵抗或者順從在低於threshold多少時就會觸發警報。

如下是一個國家抵抗修正的示例:

resistance_90 = {
	type = core_resistance_modifier
	icon = "GFX_occupation_resistance_modifier_strip:4"
	small_icon = "GFX_occupation_resistance_modifier_small_strip:4"
	threshold = 90
	margin = 2
	
	alert_level = high
	alert_margin = 20
	
	state_modifier = {
		local_factories = -0.03
	}
	
	on_enable = {
		if = {
			limit = {
				original_tag = RAJ
				has_completed_focus = RAJ_forward_bloc 
				NOT = { 
					has_dynamic_modifier = { modifier = idea_RAJ_famine_country }  
				}
				NOT = { FROM = { original_tag = DIP } }
			}
			#dont do anything
		}
		else = {
			custom_effect_tooltip = resistance_90_effect_tooltip
			hidden_effect = {
				# avoid effects that can effect state controllers here
				country_event = { id = occupied_countries.2 hours = 1 }
			}
		}
	}
}

抵抗活動和駐軍滲透

發生抵抗

遊戲每天將會嘗試發生一次抵抗。具體來講,每天成功發生一次抵抗的幾率受到抵抗度影響,在抵抗度滿時的基礎抵抗幾率為RESISTANCE_ACTIVITY_CHANCE_AT_MAX_RESISTANCE定義值,默認為 0.312,抵抗度不滿時,則將乘以抵抗度再除100,並且保留三位小數(百分比後一位小數)。抵抗幾率還會受到resistance_activity這一修正的影響,該修正將在基礎抵抗幾率的基礎上乘算(若修正resistance_activity

  1. 重定向 Template:紅字,那麼相當於在基礎抵抗幾率的基礎上翻倍。)。需要注意的是,基礎抵抗幾率的計算,包括保留三位小數都在乘算上抵抗幾率修正之前,這意味着,如果抵抗度是 1,那麼默認情況下基礎抵抗幾率將會是 0.003,則如果此時抵抗幾率修正為
  2. 重定向 Template:紅字,那麼實際上的抵抗幾率應該是 [math]\displaystyle{ 0.003*100=30\% }[/math] 而不是 [math]\displaystyle{ 0.00312*100=31.2\% }[/math]

每次發生抵抗之後,將會對駐軍造成傷害。具體來講,抵抗會首先對駐軍發動攻擊,發動的攻擊數值為1,且會增加上resistance_damage_to_garrison和被占領國的resistance_damage_to_garrison_on_our_occupied_states這兩個修正的值。隨後,駐軍在受到攻擊之後,其裝甲率將會降低駐軍被造成的傷害,具體來講,造成的傷害為

[math]\displaystyle{ \text {伤害} = \text {攻击}\cdot(1-\min\{\text {装甲率},\text {MAXIMUM_GARRISON_HARDNESS_WHEN_ATTACKED\} }) }[/math]

這意味着裝甲率將會按比例削減受到的傷害,但是削減的傷害上限取決於MAXIMUM_GARRISON_HARDNESS_WHEN_ATTACKED定義值,默認情況下該值為0.9 。駐軍受到的每一點傷害值造成以GARRISON_MANPOWER_LOST_BY_ATTACKGARRISON_EQUIPMENT_LOST_BY_ATTACK定義值為比例的裝備與人力損失。

抵抗活動

同時,如果抵抗成功發生了,那麼還會嘗試滲透駐軍。每次駐軍被滲透的基礎幾率為 [math]\displaystyle{ 1-\text{驻军效率} }[/math] ,其中,駐軍效率的數值為 [math]\displaystyle{ 1-\max\{(\text{缺失装备})^3,(\text{缺失人力})^2\} }[/math] ,駐軍滲透幾率還會受resistance_garrison_penetration_chance修正值的影響,且該修正將在基礎滲透幾率上額外乘算附加。如果最終計算得到的滲透幾率低於RESISTANCE_ACTIVITY_MIN_GARRISON_PENETRATE_CHANCE定義值(默認情況下為0.02),那麼將會被強行拉到這個定義值。這意味着默認情況下,即使駐軍人力和裝備都滿,也有 2% 的概率發生駐軍滲透。即,駐軍滲透一次的幾率應該為

[math]\displaystyle{ \min\{\text{RESISTANCE_ACTIVITY_MIN_GARRISON_PENETRATE_CHANCE},(1-\text{驻军效率})\times(1+\text{渗透几率修正}) \} }[/math]

當駐軍被滲透後,將會發生一次抵抗活動。抵抗活動定義在任意 /Hearts of Iron IV/common/resistance_activity/*.txt 文件中,默認情況下,原版遊戲的抵抗活動定義在 /Hearts of Iron IV/common/resistance_activity/resistance_activity.txt 文件中。每一個抵抗活動都應該是一個以其獨特的標識符開頭的塊。在塊中可以使用的參數包括:

  • available:為一個條件塊,可選,決定是否可以發生該抵抗活動。默認情況下,ROOTTHIS 均為發生抵抗活動的省份, 可以使用 controller 獲取省份的控制者。
  • weight:為一個MTTH塊,必要,表示該抵抗活動所占的權重。
  • duration:為一個整數,可選,表示該抵抗持續的時間。
  • max_amount:為一個整數,可選,表示在同一時間內,可以同時進行的該抵抗活動的最大數量。即,若一個抵抗持續時間是duration天,那麼在接下來的 duration 天內將會占用一次該抵抗活動的數量,如果同時在進行的該抵抗活動的數量達到了 max_amount,那麼在有一次之前的該抵抗活動結束之前,該抵抗活動將不會再發生 。
  • effect:為一個效果塊,可選,表示該抵抗活動發生時產生的效果。默認情況下, ROOTTHIS 均為發生抵抗活動的省份, 可以使用 controller 獲取省份的控制者。
  • state_modifier:為一個修正塊,可選,表示該抵抗活動對省份產生的修正。
  • alert_text:為一個本地化鍵,可選,表示該抵抗活動發生時,省份上浮現的警報文字。

如下是一個抵抗活動的示例:

sabotage_arms_factory = {
	available = {
		NOT = {
			state_is_on_ireland_north = yes
		}
		non_damaged_building_level = {
			building = arms_factory
			level > 0
		}
	}

	weight = {
		base = 1
		modifier = {
			has_variable = targeted_sabotage_industry
			check_variable = { targeted_sabotage_industry > 0 }

			add = 4
		}
		modifier = {
			occupation_law = harsh_quotas_occupation
			add = -0.25
		}
	}

	effect = {
		if = {
			limit = {
				has_variable = targeted_sabotage_industry
				check_variable = { targeted_sabotage_industry > 0 }
			}
			damage_building = {
				type = arms_factory
				damage = 0.5
			}
			subtract_from_variable = { var = targeted_sabotage_industry value = 1 }
		}
		else = {
			damage_building = {
				type = arms_factory
				damage = 0.25
			}
		}		
	}

	alert_text = building_is_sabotaged
}

占領法案

對於被占領省份,玩家可以選擇切換占領法案。除了玩家手動選擇外,還可以通過set_occupation_lawset_occupation_law_where_available這兩個效果設置。在國家作用域內,這兩個效果默認相同,需要保證PREV是一個國家,如果THISPREV不同,那麼表示設置PREVTHIS的占領法,否則如果THISPREV相同,那麼表示改變PREV默認法案。二者唯一的區別是,如果無法為THIS設置該法案,將會嘗試為每一個被占領的國家設置該法案。如果無法為THIS設置該法案,將會轉而嘗試為THIS的每一個省份設置默認法案,如果均不行,那麼將會變為當前占領法案的fallback_law(見下方參數)。而如果在省份作用域內,則只有前者可以使用,表示設置PREVTHIS的占領法案。 特別的,對於這兩個效果,可以使用default_law作為參數來表示默認法案。對於THISPREV不同的情況下,那麼表示設置PREVTHIS的占領法為PREV的默認法案,否則表示將PREV的默認法案調整為原始法案(見下方參數)。

占領法案的修正將會根據駐軍效率按比例縮放,駐軍效率不滿時,不滿的部分的修正將會是 missing_garrison_law 的修正(見下方參數)。具體來講,占領法案實際產生的修正為:

[math]\displaystyle{ 当前占领法案修正\times驻军效率+缺失驻军修正\times(1-驻军效率) }[/math]

占領法案定義在 /Hearts of Iron IV/common/occupation_laws/*.txt 文件中,默認情況下,原版遊戲的占領法案定義在 /Hearts of Iron IV/common/occupation_laws/occupation_laws.txt 文件中。每一個占領法案都應該是一個以其獨特的標識符開頭的塊。在塊中可以使用的參數包括:

  • tooltip:一個本地化鍵,可選,該占領法案的描述
  • icon:一個GFX鍵,可選,該占領法案的圖標
  • visible:一個條件塊,可選,決定該占領法案是否可見,THISROOT是占領的國家,FROM是被占領的國家。而省份無法在占領法案中被調用。
  • available:一個條件塊,可選,決定該占領法案是否可用,THISROOT是占領的國家,FROM是被占領的國家。而省份無法在占領法案中被調用。
  • fallback_law:一個占領法案,可選,如果當前占領法案為該法案,且當前的占領法案不再可用時,那麼將會主動改變為的占領法案。
  • main_fallback_law:值為yesno,可選。為yes時,如果當前法案沒有定義fallback_law且不再可用,那麼將會使當前法案改變為該法案。
  • state_modifier:一個修正塊,可選,表示當前法案施加在省份上的修正。該修正將會乘以當前省份的駐軍效率才是實際修正值。
  • suppressed_state_modifier:一個修正塊,可選,當抵抗降低到 0 時,當前法案施加在省份上的修正。
  • gui_order:一個整數,可選,當前法案的展示順序。默認情況下為 0 。如果兩個法案的順序相同,那麼展示順序取決於加載順序。
  • ai_will_do:一個MTTH塊,表示當前法案的 AI傾向。THISROOT是省份,FROM是占領者,FROM.FROM是被占領的國家。除此之外還可以調用幾個遊戲內置的臨時變量:
    • ai_desire_resource:該值介於01之間,表示 AI 對資源的渴望程度。
    • uncapped_resistance_target:表示實際的抵抗目標數值(其他方式中可以獲取的抵抗目標數值均為上限100,下限0的數值,而該臨時變量不受該上下限限制)。
    • resistance_target_without_law:該值介於01之間,表示如果沒有該法案修正時,實際的抵抗目標數值。
    • garrison_min_support_ratiogarrison_equipment_support_ratio以及garrison_manpower_support_ratio:表示按照裝備或者人力或其最小值可以組建的當前駐軍編制的數量。(存疑,需要進一步測試)
  • default_law:值為yesno,可選。為yes時,該法案被視為默認法案。即,在遊戲開始時的默認法案。
  • starting_law:值為yesno,可選。為yes時,該法案被視為原始法案。即最初的默認法案(見上set_occupation_law的介紹)。
  • missing_garrison_law:值為yesno,可選。為yes時,該法案將會被視為缺失駐軍時的那一部分。即,當省份的駐軍效率不滿時,該法案的修正將會按照不滿部分的比例縮放施加在省份上。

References and notes