【HoI4】MOD製作講座|第2回『ユニット』

こんにちは。

第2回は陸軍・海軍・空軍のユニットの追加について解説します。

動作環境

この記事は以下の条件で執筆しています。

  • Windows/Steam
  • バージョン:1.12.14
  • DLC
    • Together for Victory
    • Death or Dishonor
    • Waking the Tiger
    • Man The Guns
    • La Résistance
    • Battle for the Bosporus
    • No Step Back
    • By Blood Alone

ユニットの追加

通常、陸空海のユニットを定義しているオリジナルファイルは「GER_1936.txt」など「国家タグ_シナリオ年.txt」といった名前で管理されています。DLCのMan The Gunsが登場してから海軍ユニットが、By Blood Aloneが登場してから空軍ユニットが別のファイルに分けられています。初期で登場しないユニット、例えばスペイン内戦が発生した時に出現する義勇兵ユニットは別のファイルに分けられていてイベント発生時に呼び出されます。

陸軍ユニットの追加

陸軍ユニットを追加しましょう。まずは第1回の国家ファイル作成で定義した名前でファイルを作成して下さい。以下の例ですと「SAR_1936」という名前です。

  1. historyフォルダの中にunitsフォルダを作成する。
    …/history/units
  2. unitsフォルダの中にユニットファイルを作成する。
    …/history/units/SAR_1936.txt
  3. ファイルを編集する。

師団テンプレートの設定

ではユニットファイルを編集して師団テンプレートを追加してみましょう。

以下のサンプルコードだと、「Infantry Division」と「Sarawak Rangers」という2つの師団テンプレートが追加されます。
※師団テンプレートの作成に当たって、「支援装備」と「偵察中隊」の研究を完了状態にしています。

division_template = {
	name = "Infantry Division"
	
	division_names_group = SAR_INF_01
	
	regiments = {
		infantry = { x = 0 y = 0 }
		infantry = { x = 0 y = 1 }
		infantry = { x = 1 y = 0 }
		infantry = { x = 1 y = 1 }
	}
}

division_template = {
	name = "Sarawak Rangers"
	
	division_names_group = SAR_INF_02
	
	regiments = {
		infantry = { x = 0 y = 0 }
		infantry = { x = 0 y = 1 }
		infantry = { x = 0 y = 2 }
	}
	
	support = {
		recon = { x = 0 y = 0 }
	}
	
	priority = 2
}
項目 設定値 コメント
name XXXX テンプレートの名前です。
division_names_group
(※1)省略可
XXXX 師団を徴兵した際に付けられる名前グループです。
※後ほど解説します。
regiments
  • infantry:歩兵
  • cavalry:騎兵
  • artillery_brigade:砲兵
  • motorized:自動車化歩兵
  • mechanized:機械化歩兵
  • light_armor:軽戦車
  • medium_armor:中戦車
  • heavy_armor:重戦車
  • modern_armor:現代戦車
  • mountaineers:山岳兵
  • marine:海兵隊
  • paratrooper:空挺兵
師団を構成する戦闘大隊です。
※左のリストは使用頻度が高そうなものを抜粋しています。
※研究が完了している必要があります。
※大隊は以下のファイルなどに定義されています。
…/Hearts of Iron IV\common\technologies\infantry.txt
support
(※1)省略可
  • recon:偵察中隊
  • mot_recon:自動車化偵察中隊
  • engineer:工兵中隊
  • field_hospital:野戦病院
  • logistics_company:補給中隊
  • military_police:憲兵隊
  • signal_company:通信中隊
  • maintenance_company:整備中隊
支援中隊です。
※左のリストは使用頻度が高そうなものを抜粋しています。
※研究が完了している必要があります。
※支援中隊は以下のファイルなどに定義されています。
…/Hearts of Iron IV\common\technologies\support.txt
priority
(※1)省略可
  • 0~2
  • 0:予備
  • 1:標準
  • 2:精鋭
装備の補充優先度です。
(※1)
省略した場合、標準になります。

regimentsを記述する際は以下を参考にして下さい。


それでは師団テンプレートが作成されていることを確認しましょう。

以下のように追加されていれば大丈夫です。

師団名グループの設定

次に師団を徴兵した時に各ユニットに付けられる名前を設定しましょう。

師団テンプレートに記述したdivision_names_groupで定義した所です。

  1. commonフォルダの中にunitsフォルダを作成する。
    …/common/units
  2. unitsフォルダの中にnames_divisionsフォルダを作成する。
    …/common/units/names_divisions
  3. names_divisionsフォルダの中に師団名ファイルを作成する。
    …/common/units/names_divisions/SAR_names_divisions.txt
    ※他のファイルをコピーして名前を変更して編集した方が楽です。
  4. ファイルを編集する。

ではファイルを編集してみましょう。

以下のサンプルコードは2つ目の師団テンプレート「Sarawak Rangers」に定義される名前グループです。

SAR_INF_02 = {
	name = "Sarawak Rangers"
	
	for_countries = { SAR }
	
	can_use = { always = yes }
	
	division_types = { "infantry" }
	
	#link_numbering_with = { SAR_INF_01 }
	
	fallback_name = "%d Sarawak Rangers"
	
	ordered = {
		1 = { "%dst Sarawak Rangers" }
		2 = { "%dnd Sarawak Rangers" }
		3 = { "%drd Sarawak Rangers" }
		4 = { "%dth Sarawak Rangers" }
		5 = { "%dth Sarawak Rangers" }
		6 = { "%dth Sarawak Rangers" }
		7 = { "%dth Sarawak Rangers" }
		8 = { "%dth Sarawak Rangers" }
		9 = { "%dth Sarawak Rangers" }
		10 = { "%dth Sarawak Rangers" }
		100 = { "(SR) Kuching Defense Force" }
	}
}
項目 コメント
name 師団名グループの名前です。
for_countries この師団名グループを使用できる国家を国家タグで定義します。
※for_countries = { ENG AST NZL }というふうに複数の国家を定義することもできます。
can_use この師団名グループがいつ使用できるか定義します。
※always=yesでいつでも。
division_types どの兵種で使用するかどうか?
※解説にAIの自動判別用との記載有
link_numbering_with 他の師団名グループと師団番号(%dの部分)を共有するかどうか定義します。
※使用しないならコメントアウトで大丈夫です。
fallback_name orderedで定義した師団名を使い切った後で使用されます。
ordered 師団を徴兵した際に、ここで定義した師団名が先頭の番号順に割り当てられます。

ユニットの配置

師団テンプレートと師団名グループの設定が完了したので、次はユニットを配置してみましょう。

通常の場合、師団テンプレートがあるファイルに記述します。

  1. unitsフォルダの中の、ユニットファイルを開く。
    …/history/units/SAR_1936.txt
  2. ファイルを編集する。
units = {
	
	division = {
		name = "(SR) Border Garrison"
		location = 1335
		division_template = "Sarawak Rangers"
		start_experience_factor = 0.2
		start_equipment_factor = 0.3
	}
	
	division = {
		division_name = {
			is_name_ordered = yes
			name_order = 100
		}
		location = 1208
		division_template = "Sarawak Rangers"
		start_experience_factor = 0.2
		start_equipment_factor = 0.3
	}
	
}
項目 コメント
name 師団名を直接入力する場合はこちらを記述します。
division_name 師団名グループを使用する場合はこちらを記述します。
※上記の場合、name_orderが100番の「(SR) Kuching Defense Force」が呼び出されます。
※通常はorderedで定義された順番通りに名前が適用されますが、今回のように100とすることで番号を飛ばして適用させることもできます。
location ユニットを配置するプロヴィンスIDです。
…/history/statesフォルダ内にある各ファイルにプロヴィンスIDが記載されています。
※自国領か通行権があるプロヴィンスを指定しましょう。
division_template どの師団テンプレートを指定してユニットを作成するか指定します。
start_experience_factor
(※1)省略可
初期練度です。0~1.0で指定します。
(※1)省略した場合は練度1の新兵です。
※0.1で練度2の訓練済み
※0.2で練度2の訓練済み+経験50%
start_equipment_factor
(※1)省略可
初期充足率です。0~1.0で指定します。
(※1)省略した場合は100%の充足率です。
※0.3で30%の充足率

以下のようにエラーもなく出現していれば成功です。

指定した師団名も正常に反映されていますね。

海軍ユニットの追加

海軍ユニットは陸軍に比べて複雑です。

DLC「Man the Guns」の登場によって、これまでは船の種類毎に研究して建造する流れから、船体や装甲などのモジュールを組み合わせて艦艇を設計し、それを建造するという方法に変更されました。これによってユニットファイルの記述方法も変更されたので要注意です。

まずは国家ファイルに追記し、海軍ユニットファイルを作成しましょう。

  1. history/unitsフォルダの中にユニットファイルを作成する。
    …/history/units/SAR_1936_naval_mtg.txt(DLC有り用)
    …/history/units/SAR_1936_naval_legacy.txt(DLC無し用)
    ※「_naval」や「_mtg」など海軍ユニットやDLCに対応しているかなど分かりやすいようにファイル名を付けましょう。
  2. 国家ファイルにユニットファイルの呼び出しを記述する。
  3. ファイルを編集する。
以下の例はDLCを所有している場合としていない場合で、読み込むファイルを分別して前提の研究を完了済みにしています。
※DLCを考慮しない場合はIF文で分けずに「set_naval_oob = “SAR_1936_naval”」だけでも大丈夫です。
もしエラーが発生して正常に追加出来ない場合は、オリジナルファイル(イギリスやフランスが特におススメです)を参考にして下さい。
capital = 333

oob = "SAR_1936"

# 海軍ユニット
if = {
	limit = { has_dlc = "Man the Guns" }
		set_naval_oob = "SAR_1936_naval_mtg"
		set_technology = {
			early_ship_hull_submarine = 1			# 初期型潜水艦船体
			early_ship_hull_light = 1				# 初期型駆逐艦船体
			early_ship_hull_cruiser = 1				# 初期型巡洋艦船体
			basic_battery = 1						# 海軍砲術
		}
	else = {
		set_naval_oob = "SAR_1936_naval_legacy"
		set_technology = {
			early_submarine = 1						# 潜水艦 I
			early_destroyer = 1						# 駆逐艦 I
		}
	}
}

DLC「Man the Guns」有りの場合

以下がDLC有りの場合のサンプルで、「Royal Sarawak Navy」という一つの艦隊(fleet)に「1st Destroyer Flotilla」と「1st Submarine Flotilla」という二つの任務部隊(task_force)を作成しています。

#DLC有り
units= {

	fleet = {
		name = "Royal Sarawak Navy"
		naval_base = 1208
		task_force = {
			name = "1st Destroyer Flotilla"
			location = 1208
			ship = { name = "RSN CL TestShip" pride_of_the_fleet = yes definition = light_cruiser equipment = { ship_hull_cruiser_1 = { amount = 1 owner = SAR version_name = "Sarawak Test Class" } } }
			ship = { name = "RSN DD TestShip 1" definition = destroyer equipment = { ship_hull_light_1 = { amount = 1 owner = SAR } } }
			ship = { name = "RSN DD TestShip 2" definition = destroyer equipment = { ship_hull_light_1 = { amount = 1 owner = SAR } } }
		}
		task_force = {
			name = "1st Submarine Flotilla"
			location = 1208
			ship = { name = "RSN SS TestShip 1" definition = submarine equipment = { ship_hull_submarine_1 = { amount = 1 owner = SAR } } }
			ship = { name = "RSN SS TestShip 2" definition = submarine equipment = { ship_hull_submarine_1 = { amount = 1 owner = SAR } } }
		}
	}
}

DLC「Man the Guns」無しの場合

以下がDLC無しの場合のサンプルで、こちらも同様に一つの艦隊に二つの任務部隊を作成しています。

#DLC無し
units= {

	fleet = {
		name = "Royal Sarawak Navy"
		naval_base = 1208
		task_force = {
			name = "1st Destroyer Flotilla"
			location = 1208
			ship = { name = "RSN CL TestShip" pride_of_the_fleet = yes definition = light_cruiser equipment = { light_cruiser_1 = { amount = 1 owner = SAR version_name = "Sarawak Test Class" } } }
			ship = { name = "RSN DD TestShip 1" definition = destroyer equipment = { destroyer_1 = { amount = 1 owner = SAR } } }
			ship = { name = "RSN DD TestShip 2" definition = destroyer equipment = { destroyer_1 = { amount = 1 owner = SAR } } }
		}
		task_force = {
			name = "1st Submarine Flotilla"
			location = 1208
			ship = { name = "RSN SS TestShip 1" definition = submarine equipment = { submarine_1 = { amount = 1 owner = SAR } } }
			ship = { name = "RSN SS TestShip 2" definition = submarine equipment = { submarine_1 = { amount = 1 owner = SAR } } }
		}
	}
}

艦種設計の追加

国家ファイルに定義することで、事前に艦艇の設計を追加することが出来ます。

上記のサンプルだと「RSN CL TestShip」という艦艇は「Sarawak Test Class」という設計を適用しています。

  1. 国家ファイルを開く。
    …/history/countries/SAR – sawarak.txt
  2. ファイルを編集する。
こちらもDLCの有無で分けて記述しましょう。
# 艦種設計
if = {
	limit = { has_dlc = "Man the Guns" }
		create_equipment_variant = {
			name = "Sarawak Test Class"
			type = ship_hull_cruiser_1
			name_group = SAR_CL_HISTORICAL
			parent_version = 0
			modules = {
				fixed_ship_battery_slot = ship_light_medium_battery_1		# 主砲
				fixed_ship_anti_air_slot = empty							# 対空砲
				fixed_ship_fire_control_system_slot = empty				# 火器管制システム
				fixed_ship_radar_slot = empty								# レーダー/ソナー
				fixed_ship_engine_slot = empty								# 機関
				fixed_ship_armor_slot = empty								# 装甲
				mid_1_custom_slot = empty									# 前部 1 カスタム
				mid_2_custom_slot = empty									# 前部 2 カスタム
				rear_1_custom_slot = empty									# 後部 1 カスタム
			}
			obsolete = yes													# 旧式判定
		}
	else = {
		create_equipment_variant = {
			name = "Sarawak Test Class"
			type = light_cruiser_1
			parent_version = 0
			upgrades = {
				ship_reliability_upgrade = 0
				ship_engine_upgrade = 0
				ship_gun_upgrade = 0
				ship_anti_air_upgrade = 0
			}
			obsolete = yes
		}
	}
}

それではゲームを起動して艦隊が追加されていることを確認しましょう。

艦艇名グループの設定

作成した設計で建造すると自動的に名前を付けることが出来ます。
※日本で戦艦を建造すると「Yamato」「Musashi」などと名前が付けられる仕組みです。

艦種設計で記述したname_groupで定義した所です。

  1. common/unitsフォルダの中にnames_shipsフォルダを作成する。
    …/common/units/names_ships
  2. unitsフォルダの中にnames_divisionsフォルダを作成する。
    …/common/units/names_divisions
  3. names_divisionsフォルダの中に師団名ファイルを作成する。
    …/common/units/names_divisions/SAR_names_divisions.txt
    ※他のファイルをコピーして名前を変更して編集した方が楽です。
  4. ファイルを編集する。
SAR_CL_HISTORICAL = {
	name = NAME_THEME_HISTORICAL_CL

	for_countries = { SAR }

	type = ship
	ship_types = { ship_hull_light }

	prefix = "RSN "
	fallback_name = "Light Cruiser %s"

	unique = {
		"Sarawak" "Kuching" "Brunei"
	}
}

以下のように艦艇名が生産ライン上で反映されていれば大丈夫です。

空軍ユニットの追加

最後は空軍ユニットについてです。

こちらも海軍と同様にDLC「By Blood Alone」で航空機の設計が追加され、ユニットファイルの記述方法が変更されました。

それでは国家ファイルに追記し、空軍ユニットファイルを作成しましょう。

  1. history/unitsフォルダの中にユニットファイルを作成する。
    …/history/units/SAR_1936_air_bba.txt(DLC有り用)
    …/history/units/SAR_1936_air_legacy.txt(DLC無し用)
    ※「_air」や「_bba」など分かりやすい名前を付けましょう。
  2. 国家ファイルにユニットファイルの呼び出しを記述する。
  3. ファイルを編集する。
以下の例はDLCを所有している場合としていない場合で、読み込むファイルを分別して前提の研究を完了済みにしています。
※DLCを考慮しない場合はIF文で分けずに「set_naval_oob = “SAR_1936_air”」だけでも大丈夫です。
# 空軍ユニット
if = {
	limit = { has_dlc = "By Blood Alone" }
		set_air_oob = "SAR_1936_air_bba"
		set_technology = {
			iw_small_airframe = 1					# 戦間期の小型機体
			aa_lmg = 1								# 軽機関銃
			engines_1 = 1							# エンジンI
		}
	else = {
		set_air_oob = "SAR_1936_air_legacy"
		set_technology = {
			early_fighter = 1						# 戦間期型戦闘機
		}
	}
}

DLC「By Blood Alone」有りの場合

以下がDLC有りの場合のサンプルで、「Sarawak Test Plane」という戦闘機を10機だけ北ボルネオに作成しています。

#DLC有り
air_wings = {
	
	333 = {
		small_plane_airframe_0 = {
			owner = "SAR"
			amount = 10
			version_name = "Sarawak Test Plane"
		}
	}
	
}

DLC「By Blood Alone」無しの場合

以下がDLC無しの場合のサンプルです。

#DLC無し
air_wings = {
	
	333 = {
		fighter_equipment_0 = {
			owner = "SAR"
			amount = 10
		}
	}
	
}

航空機設計の追加

国家ファイルに定義することで、事前に航空機の設計を追加することが出来ます。

上記のサンプルだとDLC有りのサンプルは「Sarawak Test Plane」という設計を適用しています。

  1. 国家ファイルを開く。
    …/history/countries/SAR – sawarak.txt
  2. ファイルを編集する。
# 航空機設計
if = {
	limit = { has_dlc = "By Blood Alone" }
	create_equipment_variant = {
		name = "Sarawak Test Plane"
		type = small_plane_airframe_0
		modules = {
			fixed_main_weapon_slot = light_mg_2x		# 主兵装
			engine_type_slot = engine_1_1x				# エンジンの種類
			special_type_slot_1 = empty					# 特殊機能
		}
		obsolete = yes									# 旧式判定
	}
}

ではゲームを起動して空軍が追加されていることを確認しましょう。

装備品やユニットの生産

何れかの国家でゲームを開始して生産画面を開くと、歩兵装備や航空機などの装備品が生産されています。

これもMODで設定が可能で、通常はユニットファイルに記述します。
※下の画像は1936年のドイツでゲームを開始した直後の生産画面です。

  1. unitsフォルダの中の、ユニットファイルを開く。
    …/history/units/SAR_1936.txt
  2. ファイルを編集する。

下記は「基本的歩兵装備」と「支援装備」を生産に追加したサンプルコードです。

# 装備品
instant_effect = {
	
	add_equipment_production = {
		equipment = {
			type = infantry_equipment_0
			creator = "ENG"
		}
		requested_factories = 1							# 使用する軍需工場数
		progress = 0.28									# 初期生産進捗
		efficiency = 100								# 初期生産効率
	}
	
	add_equipment_production = {
		equipment = {
			type = support_equipment_1
			creator = "SAR"
		}
		requested_factories = 1
		progress = 0.50
		efficiency = 10
	}
	
}
項目 コメント
type 生産する装備品の定義名です。
※研究が完了している必要があります。
creator※省略可 どこの国の装備品か指定できます。
※省略した場合は自国のです。
※サンプルコードの「基本的歩兵装備」はイギリス製をサラワクで生産するということです。
requested_factories 軍需工場の割り当て数を指定します。
progress 装備品の初期進捗度です。
efficiency 装備品の初期生産効率です。

上記のサンプルコードでゲームを開始すると以下のようになります。

イギリス製の歩兵装備が生産効率50%で生産されていますが、これは生産効率(efficiency)で100を指定してもゲーム開始時の生産効率の上限である50%に達するからです。生産効率で10を指定した支援装備では上限(10/50)に達していないことが分かります。

最後に

陸軍・海軍・空軍でそれぞれ記述方法が異なりますが、共通している部分も多くあります。

まずは1ユニット追加してみて、正常に追加出来れば2つ3つと増やしていくことをおススメします。