2/16:更新はしばらくお待ち下さい

【HoI4】Mod開発講座:第2回「ユニットの設定」

【HoI4】Mod開発講座:第2回「ユニットの設定」

こんにちは。

第1回では国家を追加しましたね。

今回はユニットの設定について解説します。

動作環境

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

  • Windows/Steam
  • バージョン:1.7.1
  • DLC
    • Together for Victory
    • Death or Dishonor
    • Waking the Tiger
    • Man The Guns
  • MOD
    • Coloured Buttons
    • Japanese Language mod

ユニットの追加

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

陸軍ユニットの追加

第1回の国家ファイル作成で定義したファイル名で作成して下さい。

  1. historyフォルダの中にunitsフォルダを作成する。※…/kingdomofsarawak_jp/history/units
  2. unitsフォルダの中に、ユニットファイルを作成する。※…/kingdomofsarawak_jp/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 = 0 y = 2 }
		infantry = { x = 1 y = 0 }
		infantry = { x = 1 y = 1 }
		infantry = { x = 1 y = 2 }
	}
}

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※省略可 XXXX 師団を徴兵した際に付けられる名前グループです。※後ほど解説します。
regiments
  • infantry:歩兵
  • cavalry:騎兵
  • artillery_brigade:砲兵
  • motorized:自動車化歩兵
  • mechanized:機械化歩兵
  • light_armor:軽戦車
  • medium_armor:中戦車
  • heavy_armor:重戦車
  • modern_armor:現代戦車
  • mountaineers:山岳兵
  • marine:海兵隊
  • paratrooper:空挺兵
師団を構成する戦闘大隊です。

左のリストは、使用頻度が高そうなものを抜粋しています。※研究が完了している必要があります。

support※省略可
  • recon:偵察中隊
  • engineer:工兵中隊
  • field_hospital:野戦病院
  • logistics_company:補給中隊
  • military_police:憲兵隊
  • signal_company:通信中隊
  • maintenance_company:整備中隊
支援中隊です。※研究が完了している必要があります。
priority※省略可
  • 0~2
  • 0:予備
  • 1:標準
  • 2:精鋭
装備の補充優先度です。

省略した場合、標準になります。

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


このように追加出来ていれば大丈夫です。

師団名グループの設定

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

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

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

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

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

師団名ファイルの編集は少し分かりにくいです。ドイツやイギリスなどのオリジナルファイルを開いたら先頭に(英語ですが)解説が書いてあるので参考にしつつ編集することをおススメします。

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フォルダの中の、ユニットファイルを開く。※…/kingdomofsarawak_jp/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 師団名グループを使用する場合はこちらを記述します。
location ユニットを配置するプロヴィンスIDです。※自国領か通行権があるプロヴィンスを指定しましょう。
division_template どの師団テンプレートを指定してユニットを作成するか指定します。
start_experience_factor※省略可 初期練度です。0~1.0で指定します。※省略した場合は練度1の新兵です。※0.1で練度2の訓練済み※0.2で練度2の訓練済み+経験50%
start_equipment_factor※省略可 初期充足率です。0~1.0で指定します。※省略した場合は100%の充足率です。※0.3で30%の充足率

このようにエラーも無く出現していれは大丈夫です。

空軍ユニットの追加

空軍ユニットを追加してみましょう。こちらも陸軍ユニットを追加したファイルに記述します。※空軍ユニットの追加に当たって、「戦間期型戦闘機」の研究を完了状態にしています。

  1. unitsフォルダの中の、ユニットファイルを開く。※…/kingdomofsarawak_jp/history/units/SAR_1936.txt
  2. ユニットファイルを編集する。
air_wings = {
	
	333 = { 
		fighter_equipment_0 = {
			owner = "SAR" 
			creator = "ENG"
			amount = 10
		}
	}
	
}
項目 コメント
XXX(ステートID)※333の部分 ユニットを配置するステートIDです。※自国領か通行権があるステートを指定しましょう。
航空機定義名※fighter_equipment_0の部分 どの航空機を指定してユニットを作成するか指定します。※研究が完了している必要があります。

定義名はこちらを参考にして下さい。

owner ユニットの所有国です。
creator※省略可 航空機がどこの国のものか指定できます。※省略した場合は自国のです。
amount 航空機の数を指定します。

ややこしいのは定義名ぐらいです。

海軍ユニットの追加

最後に海軍ユニットの追加ですが、海軍ユニットファイルは別に作成しましょう。DLCに配慮する場合は、呼び出すファイルを2つ(DLC有りとDLC無し)指定する必要があります。※海軍ユニットの追加に当たって、「初期型駆逐艦」「初期型巡洋艦」「初期型潜水艦」の研究を完了状態にしています。

  1. history/unitsフォルダの中に、ユニットファイルを作成する。※…/kingdomofsarawak_jp/history/units/SAR_1936_naval_legacy.txt(DLC無し用)※…/kingdomofsarawak_jp/history/units/SAR_1936_naval_mtg.txt(DLC有り用)
  2. 国家ファイルにユニットファイルの呼び出しを記述する。
  3. ユニットファイルを編集する。

まずは国家ファイルに海軍ユニットファイルの呼び出しを記述しましょう。

下はDLCのMan the Gunsが有れば「SAR_1936_naval_mtg」を無ければ「SAR_1936_naval_legacy」を呼び出すコードです。

if = {
	limit = { has_dlc = "Man the Guns" }
		set_naval_oob = "SAR_1936_naval_mtg"
	else = {
		set_naval_oob = "SAR_1936_naval_legacy"
	}
}

では海軍ユニットファイルを編集しましょう。

サンプルコードとして、一つの艦隊に二つの任務部隊(タスクフォース)を作成しています。

#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 } } }
		}
	}
}
#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有りと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 = empty
				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
				mid_2_custom_slot = empty
				rear_1_custom_slot = empty
			}
			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
		}
	}
}

1つの艦隊には1つ以上の任務部隊が割り当てられます。艦隊名、所属基地(プロヴィンスID)、任務部隊名、任務部隊の現在地(プロヴィンスID)、艦名、艦種、艦隊の誇り(pride_of_the_fleet)などの設定を行います。DLC有りの場合は各モジュールに注意して下さい。項目が多いので細かな解説は省略させて頂きますが、このサンプルコードとオリジナルファイル(イギリスやフランスが特に参考になります)を参考にして記述すれば難しくはないはずです。


海軍についてはMan the Gunsで大幅な変更がありました。それはMod開発も同じで特にモジュールがややこしくなったと思います。エラーが出ても落ち着いてエラーログファイルを確認して下さい。

装備品の生産

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

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

  1. unitsフォルダの中の、ユニットファイルを開く。※…/kingdomofsarawak_jp/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を指定してもゲーム開始時の生産効率の上限(100/50)に達するからです。生産効率で10を指定した支援装備では上限(10/50)に達していないことが分かります。

Hearts of Iron IVカテゴリの最新記事