各勢力のレコードには次のような項目がある。
1) 勢力 ID: 他のファイルから このレコードを特定するために使われる。
各 ID には接頭子 fac_ が自動的に付加される。
2) 勢力名。
3) フラグ群。指定可能なフラグの一覧は header_factions.py を参照のこと。
4) 結束度。この勢力内の構成員間の関係。
5) 関係性。いくつかのレコードを含むリスト。
各レコードはタプルで、下記の要素からなる。
5.1) 対象の勢力名。他のどの勢力との関係性か、を示す。
5.2) 値: その勢力との関係性。
値の範囲は -1 ~ 1 の間。
6) 階級。(訳注: 後述される通り、非推奨。)
7) 色 (デフォルトはグレー)
module_factions.py はモジュール・システムと M&B の AI によって使われる「勢力」が全て含まれています。小さなファイルですが、ここで説明するいくつかの重要な設定を司っています。
このファイルでは、冒頭付近にあるように「factions = [」のように Python のリストを定義します。
ほとんどのモジュール・ファイルと同様、最初のいくつかのレコードはゲームに密接に組み込まれていて、編集する必要はありません。少し下を見ると、勢力の例として下記のような「脱走兵」のレコード(実体はタプル)が見つかります。
("deserters","Deserters", 0, 0.5,[("manhunters",-0.6),("merchants",-0.5),("player_faction",-0.1)], [], 0x888888),
短い単純なレコードです。deserters (脱走兵)という ID の勢力について記述していて、その主な敵勢力は 「manhunters」(賞金稼ぎ)、「merchants」(商人)、および 「player_faction」 (主人公)です (訳注: 原文が major enemies なので「主な」と訳していますが、実際は「初期状態の」のはず)。特定の勢力と "deserters" との関係が module_constants のどこにも定義されていない場合、自動的に 0 に設定され、2 つの勢力は互いに完全に中立になります。
上記レコードを詳しく見ていくと、次のようになっています。
(1) 勢力 id = "deserters"
(2) 勢力名 = "deserters"
(3) フラグ群 = 0
(4) 結束度 = 0.5
(5) 関係性:
(5.1) 他勢力 = "manhunters", "merchants", "player_faction"
(5.2) 関係性 = -0.6, -0.5, -0.1
(6) 階級 指定なし
(7) この勢力の色は 16 進数の 0x888888 (文字列と同様で、最後の 6 桁だけが RGB 値)
この勢力にはフラグ(訳注: 旗印の旗ではなく、プログラムのコード上で状態を示すビット群)が無く、結束度は中程度、敵はレコードが示す 3 つです。しかし、他の勢力、例えば各王国のレコード("kingdom_1"、"Kingdom of Swadia" など)を見ると、どの "kingdom_#" でも "deserters" との関係が -0.02 となっています。これは関係性が両方向に働くからです。設定は 1 回だけで充分で、値は両方の勢力で考慮されます。一般に、値 0 は両勢力が平和であることを意味し、負なら戦争状態であることを意味します。Native(訳注: Warband に標準装備されたモジュール。MOD システムをデフォルト状態で疑似コンパイルすると、リソースなどを除く Native のコード部分を出力。)での外交に関しては、正の値は あまり重要ではありません。 [1]
勢力のリスト factions の定義が始まる前に default_kingdom_relations のような定数を宣言することもできます。そこでは よく使われる関係性が定義され、レコードの一部が共通的に置き換わります (訳注: 標準のモジュール・システム v1.171 では、default_kingdom_relations は定義してあるだけで使われないはずで、Modmerger というマージ用の MOD を組み入れることで処理されるはず。それにより追加される呼び出し箇所のコードが ここの Spoiler の中のコード や ここ。本体処理は別。)。
6 番目の項目「階級」について。これは、M&B バージョン 0.7xx 以前の名残です。クエストで勢力が評判を得たり、家臣になることで俸給を得たりすることができていました。領地などを持つ家臣になる代わりに、以前は階級を上げていくことで報酬を得ることができていました [2]。現在は非推奨となり、使われなくなりました。
フラグ群
(訳注: 各フラグは header_factions.py で定義されています。モジュール・システム v1.171 ではフラグは下記の 1 つだけのようです。)
- ff_always_hide_label: このフラグは「無害」勢力と「商人」勢力に使われます。このフラグが立っている勢力は、ワールド・マップ上で隊アイコンにマウス・ポインタをホバー時に出るポップアップ内に勢力名が表示されなくなります。
勢力と文化の違い
Native を見ていると、勢力と文化が存在することに どこかで気づくでしょう。文化の設定は基本的に、一種のメタ勢力の存在を可能にします。たとえば、スワディア(Swadia)王国が滅んだとしても、元の村や町には彼らの文化(Swadian)がまだ残っています。「文化」とは王国ではなく、基本階層 1 ~ 5 の兵種(troops)とか街を歩く人々などの代用語にすぎません [3]。文化の主な用途は、主として募兵時に、村の文化に依存した新兵の種類を定義するために使われるので、基本的には単に特定の兵種ツリーへの参照です。
ただし、ファイルから culture_1 を検索すると、スクリプト "get_culture_with_faction_for_music" も見つかります。このスクリプトは音楽トラックを各勢力に割り当てます。この例なら、header_music.py で定義され module_music.pyで設定されたフラグ mtf_culture_1 を王国 1 に割り当てます。ワールド・マップとシーンでは、プレイヤーはそれぞれの場所でこの文化の音楽を聴くことになります。これらのフラグは、6 つを超える文化を定義できないので、異なる文化の数が制限されます。ただし、音楽トラックに関しては この限りではなく [4]、必要な数だけ文化を設定できます。
勢力との関係性の変更 [5]
一番 直接的な方法は、set_relation という命令を使用することですが、これだと 様々な政治的影響が考慮されません。だから、その使用方法については module_scripts.py を確認することをお勧めします。勢力 A から勢力 B への関係を X に変更すると、B から A への関係も X に自動的に変更されることに注意して下さい。この関係性の値は 1 (友好的) から -1 (憎悪的) までの間にある必要があり、0 なら中立です。0 未満の場合は攻撃が起き、-1 なら最大限の攻撃が起きます。
主人公の勢力と主人公の支持者の勢力の違い
似たような定数 fac_player_faction と fac_player_supporters_faction と、さらに変数 $players_kingdom があって、スッキリした印象を受けないかもしれません。変数のほうは、主人公(プレイヤー・キャラクタ)がゲーム内でしていることに応じた値を保持するものです。プレイヤーが王国の家臣なら、この変数 "$players_kingdom" にはその勢力の勢力 ID "fac_kingdom_X" の値が保持されます。定数 "fac_player_supporters_faction" は、現在の勢力として "$players_kingdom" に代入されたり、主人公が反逆者であるか独自勢力を立ち上げた場合なら その家臣に代入されたりします。残る "fac_player_faction" は、主人公の他勢力との固有の関係などに使います。
(訳注: 例えば module_dialogs.py の中で "village_farmer_talk" を探すと、ワールド・マップ上で村人と出会った時の処理が見つかります。そこでは、相手が自分の領民かどうか調べる時は、相手の勢力 ID が "$players_kingdom" または "fac_player_supporters_faction" であるかを調べています。その周辺のコードでは "fac_player_faction" は使われていません。一方、同ファイル内で "fac_player_faction" を探すと、store_relation 命令で関係性を調べる時や、set_relation 命令で 2 勢力間の関係性の値を設定する時に使われています。)
勢力の最大数
これはハード・コーディングされていて、符号付き small int で 0~127 しか表わせないので、最大 128 個の派閥に制限されます。Python 側で工夫しても、このエンジンによる処理を迂回することはできません。
- 脚注と出典:
- [1] Caba`drin, Modding Q&A.
- [2] Somebody, Modding Q&A と Modding Q&A.
- [3] Somebody, Modding Q&A.
- [4] この音楽トラックについては、The Last Days of the Third Age という MOD に回避例があります。
- [5] Somebody と Ikaguia の投稿のまとめ, Modding Q&A.
- [6] kalarhan, Modding Q&A.