Barbarian Camp Rescue
Version 1
日本語説明: 蛮族キャンプ救出MOD

【MODの概要】
Steam版『Sid Meier's Civilization V: Brave New World』用のシングルプレイヤーMODです。
人間プレイヤーが蛮族キャンプを制圧すると、キャンプに捕らわれていた民を救出したという設定で、
ゲーム既存の労働者または開拓者を1体追加します。

通常文明:
・労働者（UNIT_WORKER）: 80％
・開拓者（UNIT_SETTLER）: 20％

ヴェネツィア（CIVILIZATION_VENICE）:
・労働者: 100％
・開拓者: 0％

ヴェネツィアでも「ヴェニスの商人」には置き換えず、通常の労働者を追加します。
AIプレイヤーが制圧したキャンプには適用しません。

【正式仕様】
・キャンプ1か所の制圧イベントにつき救出ユニットは1体だけです。
・別のキャンプを制圧するたびに新しい抽選を行います。
・プレイヤーごとの救出数に上限はありません。
・同じ座標へ後日新しいキャンプが出現した場合は、新しい制圧として再び対象になります。
・Civ5本来のキャンプ制圧ゴールドは変更せず、そのまま獲得できます。
・蛮族、キャンプ、社会制度、文明特性、クエスト、通知の定義は変更しません。
・蛮族が本来の捕虜を保持していた場合、その捕虜とは別にMODの救出ユニットを1体追加します。
・追加ユニットが失われても再支給しません。

【対象ゲーム】
・Sid Meier's Civilization V Steam版
・拡張パック Brave New Worldが必要
・シングルプレイヤー用
・マルチプレイヤーの動作は保証しません

【対応OS】
Windows / macOS / Linux

同一のMODフォルダを各OSで使用できます。OS別の差し替えファイルはありません。
Linuxでの大文字・小文字の違いに備え、実行に関係するフォルダ名、.modinfo名、
Lua名、.modinfo内部のLua参照名を小文字で完全一致させています。
README.txtだけは指定された配布名を使用しており、Luaから参照されない説明書です。

【フォルダ構成】
barbarian-camp-rescue
├─ barbarian-camp-rescue.modinfo
├─ barbariancamprescue.lua
└─ README.txt

【導入方法】
1. Civilization Vを終了します。
2. barbarian-camp-rescueフォルダを、フォルダごとCiv VのMODSフォルダへコピーします。
3. 上記3ファイルがbarbarian-camp-rescue直下にあることを確認します。
4. フォルダ名やファイル名を変更せず、そのまま使用してください。

Windowsの標準的な格納先:
C:\Users\ユーザー名\Documents\My Games\Sid Meier's Civilization 5\MODS

OneDriveでDocumentsを同期している環境では、次の場合があります:
C:\Users\ユーザー名\OneDrive\Documents\My Games\Sid Meier's Civilization 5\MODS

macOSの代表的な格納先:
~/Documents/Aspyr/Sid Meier's Civilization 5/MODS

Linuxの代表的な格納先:
~/.local/share/Aspyr/Sid Meier's Civilization 5/MODS

Steam Play / Protonでは、Steamライブラリ内のcompatdata/8930配下にある
Windows互換環境のMODSフォルダを使用する場合があります。
実際に存在するCiv Vユーザーデータ内のMODSフォルダを確認してください。

【有効化方法】
1. Civ Vを起動し、メインメニューの「MOD」へ進みます。
2. 「Barbarian Camp Rescue」にチェックを入れます。
3. 「次へ」からMOD用シングルプレイヤー設定画面へ進みます。
4. 新規ゲームを開始します。

MODを有効にした後、通常の「シングルプレイヤー」メニューへ戻って開始しないでください。
必ずMODSメニューを経由してゲームを開始してください。

【キャンプ制圧の判定方法】
標準BNWには、制圧プレイヤーとキャンプ座標を直接まとめて返す専用Luaイベントがありません。
Community Patchなどの追加DLLが提供するBarbariansCampClearedは使用していません。

本MODは標準BNWに存在する次のイベントを組み合わせます。
・GameEvents.UnitSetXY: キャンプ座標へ進入した人間プレイヤーとユニットを記録
・Events.SerialEventImprovementCreated: 後から出現・発見されたキャンプを登録
・Events.SerialEventImprovementDestroyed: 記録した座標からキャンプが消えたことを確認
・GameEvents.PlayerDoTurn: 改善破壊イベントを受け取れなかった場合の軽量な予備確認

ゲーム初期化時にマップ上のキャンプを一度だけ登録します。
その後は既知キャンプと処理待ち座標だけを確認し、毎ターン全マップを走査しません。
AIやゲーム処理が先に消したキャンプは登録から除去し、後の人間ユニット移動を誤認しないようにします。

【重複防止】
ゲームターン、キャンプ座標、プレイヤーID、制圧ユニットIDを組み合わせたイベントキーを作り、
Modding.OpenSaveData()へ処理済み状態を保存します。
同じイベントの重複通知、Lua再読み込み、セーブロードで2体目を追加しません。

座標だけを永久除外しないため、後のターンに同じ座標へ新しいキャンプが出現して制圧された場合は、
新しいイベントキーで再び救出処理を行えます。

配置不能やInitUnit失敗の場合も、その制圧イベントは処理済みとして保存します。
同じキャンプから後になって重複支給されることはありません。

【抽選方法】
通常文明ではCiv5標準のゲーム内乱数を使用します。
  Game.Rand(100, "Barbarian Camp Rescue")

判定:
・0～79: 労働者
・80～99: 開拓者

Lua標準のmath.randomは使用しません。
セーブ直前からやり直した場合に同じ結果になるか、別結果になり得るかは実機確認事項です。

【救出ユニットの配置】
次の順で安全な配置場所を探します。
1. 制圧されたキャンプの跡地
2. キャンプ跡地の隣接マス
3. 制圧ユニットの現在位置と隣接マス
4. 対象プレイヤーの首都または都市と、その半径2以内

海洋、湖、山岳、通行不能地形、外国ユニットがいるマス、別の民間ユニットがいるマスは除外します。
制圧した自軍戦闘ユニットとは、Civ5標準の軍事・民間スタックを利用できます。
配置候補が見つからない場合はゲームを停止せず、Lua.logへ理由を記録します。

【既存捕虜について】
蛮族が本来の仕組みで捕らえていた労働者や開拓者がいる場合でも、MODの抽選を別に行います。
本来の捕虜とMODの救出ユニットを同時に獲得できるのは正式な仕様です。
同じタイルへ民間ユニットを重ねず、MOD側のユニットは別の安全な候補へ配置します。

【Lua.logの確認】
Windowsでは通常、Civ Vユーザーデータ内のconfig.iniで次を設定し、ゲームを再起動します。
  LoggingEnabled = 1
  EnableLuaDebugLibrary = 1

ログの代表的な場所:
Documents\My Games\Sid Meier's Civilization 5\Logs\Lua.log

Lua.log内で次の文字列を検索してください。
  [Barbarian Camp Rescue]

主なログ:
  Barbarian Camp Rescue loaded
  Barbarian camp cleared at X, Y by player ID
  Worker rescued for human player ID
  Settler rescued for human player ID
  Venice detected: worker rescue guaranteed
  Rescue already processed for this camp event

抽選値、配置座標、対象外、配置不能、生成失敗も記録します。

【通知について】
初版では画面通知を実装していません。
標準BNWだけでのキャンプ制圧判定と救出ユニット生成の安定性を優先し、結果はユニットと
Lua.logで確認する構成です。

【セーブデータへの影響】
このMODはModding.OpenSaveData()へキャンプ制圧イベントの処理済み情報を保存します。
このMODを有効にして開始したセーブは、原則として同じMODを有効にしてロードしてください。
MODを無効化しても、すでに追加された労働者や開拓者はセーブデータから自動削除されません。

【アンインストール方法】
1. ゲーム内のMOD一覧で本MODのチェックを外します。
2. Civ Vを終了します。
3. MODS内のbarbarian-camp-rescueフォルダを削除します。

Civ V本体、蛮族キャンプ、労働者、開拓者、文明特性のデータは変更していません。

【既知の制限】
・標準BNWには専用のキャンプ制圧GameEventがないため、複数の標準イベントを組み合わせています。
・改善作成・破壊イベントはUI側の通知です。人間プレイヤーの制圧地点は通常表示範囲内ですが、
  OS、表示状態、特殊シナリオでの発火順は実機確認が必要です。
・改善破壊イベントを受け取れない場合、次のPlayerDoTurnで救出が行われることがあります。
・キャンプを発見した移動と制圧が特殊処理で完全に同時になる場合は、登録が間に合わない可能性があります。
・セーブ直前からの再試行でGame.Randの結果が変化するかどうかはゲーム側の乱数状態に依存します。
・別MODがUnitSetXY、改善表示イベント、キャンプ消去、UNIT_WORKER、UNIT_SETTLERを
  大幅に変更する場合は競合する可能性があります。
・すべてのゲーム構成、シナリオ、他MODとの組み合わせ、OS環境での動作を保証するものではありません。

【ほかのMODとの同時利用】
Civ V本体データを上書きせず、独立したInGameUIAddinとして動作します。
次のMODとはMOD ID、Luaファイル、保存キー、ログ接頭辞を分離しています。
・Five Settlers at Dawn
・Bonus Worker on City Founding
・Sengoku Lost Infantry

【クレジット】
企画・制作者: 非月刊エーアイマガジン　ソフト開発部
配布元: エーマガパブリッシング
MOD情報上の作者表記: A-Maga Publishing / 楢葉なおよしn
contact@amaga-pub.com

【免責】
利用は自己責任です。重要なセーブデータは事前にバックアップしてください。
本MODはすべての環境での動作を保証するものではありません。
