Module Skills(スキル/能力)

module_skills.py 冒頭に書かれた指定方法
スキルの各レコード(リスト)には次のような要素がある。
(1) スキル ID(string)。 他のファイルから このレコードを特定するために使われる。接頭子 skl_ が各スキル ID の前に自動的に追加される。
(2) スキル名(string)。
(3) フラグ群(int)。指定可能なフラグの一覧は header_skills.py を参照のこと。
(4) そのスキルの最大レベル(int)。
(5) 説明文(string)。各人物のスキル画面で、スキルを説明するのに使われる。

module_skills.py にはモジュール・システムで使われる全ての「スキル」が含まれています。スキルは、人物や部隊に能力やバフ(buff, 能力や属性を強化する要素)を与えます。スキルのレベルの大きさによって その効力が決まります。Native(Warband に標準装備された MOD)では、人物ごとに 24 種類のスキルがあり、各スキルはレベル 0 からレベル 10 まで増え得ます。

各スキルには基本となる「属性」があります。人物のスキルのレベルは、その基本属性のレベルの 3 分の 1 を超えることはできません(書物所持の効用を除く)。例えば、「戦術スキル」(Tactics, 和訳によっては戦略スキル)の基本属性は「知性」です。知性がレベル 9 なら、戦術スキルはレベル 3 を超えることができません。ただし、主人公(プレイヤー・キャラクタ)の各スキルの初期値については、主人公を作る時のの背景によって決まるので、この制限を初めから超えている場合があります。

スキルは次のような 3 つのタイプに分類でき、何らかの形で隊に影響します。

(訳注: 下記の説明では、ゲーム中にプレイヤーが増やせる「主人公とコンパニオン」のレベル値に着目していますが、それ以外にも隊を率いる候伯(lord)たちなども基本属性とスキルを持ち、各タイプごとの隊への影響の仕方は同じはずです。)

  • 隊(パーティー)スキル: 隊員の中の特定の一人のレベルが、隊全体に影響します。持ち主が主人公かコンパニオンかに関係無く、隊の中で このタイプのスキル値が最も高い者の値が、隊全体のレベルとして使われます。主人公がレベル 2 以上に訓練された隊スキルを持っていると、特典を得られることがあります(後述)。
  • リーダー・スキル: 隊スキルと同様で、隊全体に影響します。ただし、隊を率いる者のレベルだけが使われます。 (訳注: 「隊を率いる者」はゲーム初期には主人公と世間の候伯たちだけですが、コンパニオンに領地を与えると そのコンパニオンが候伯(Lord Companion)となって、彼らも「隊を率いる者」になり、このタイプのスキルが有意になるはずです。)
  • 個人スキル: 個々の隊を率いる者またはコンパニオン仲間の能力です。ほとんどは (訳注: 「乗馬スキル」のように)、その個人にのみ利益をもたらしますが、「訓練スキル」(Trainer)の場合、全員の値の合計が隊全体にボーナス経験値の恩恵を与えます。だから、訓練スキルを持つコンパニオンが多いほど、隊にとって有利になります。

主人公の隊スキルが充分なレベルに達していると、 特典、 いわゆる隊スキル・ボーナスが与えられます。 隊での最高スキルを持つ者がが主人公でない場合、そのスキルの最高レベルを持つ隊員によって隊スキルの基礎値が決まり、主人公のレベルによって下表のようにボーナスが付与されます。

スキル値ボーナス
0-1(+0)
2-4(+1)
5-7(+2)
8-9(+3)
10(+4)

これは、主人公のスキルがレベル 10 に達した場合、「隊スキル」は最大 14 まで得られる、という意味です。このレベルに到達すると、隊で同じスキルを持つ他メンバーはバックアップの役割を果たすだけになり、それらのメンバーのスキルは、隊を率いる者の健康(Health)がしきい値を下回った時、代わって有意になります (訳注: 負傷し、隊の一覧画面で赤色表示された者は、その隊スキルや訓練スキルが隊に貢献しない、という意味)

Native でのスキルと効果

Native で用意されているスキル
(訳注: 下記の順序は定数定義された順で、実際のスキル画面での表示順は逆。番号が跳んでいるのは、予約など、Native では使われていないから。)
(1) 統率力=Leadership (リーダー・スキル): スキル値ごとに、指揮できる隊員の最大数が +5 増加し、隊の士気が増加し、隊員への給金が 5 % 減る。
(2) 捕虜管理=Prisoner Management(リーダー・スキル): スキル値ごとに、引き連れることのできる捕虜の最大数が +5 ずつ増す。
(7) 説得=Persuasion(個人スキル): 主人公の考えを他の人に受け入れてもらい易くなる。また、NPC(訳注: コンパニオンなど)に対して希望を通すための必要最低限の関係レベルが下がる(希望が通りやすくなる)。
(8) 技術者=Engineer(隊スキル): 攻城兵器の建造や領地の改良を より効率的にできるようになる。
(9) 応急手当て=First Aid(隊スキル): 主人公とコンパニオンが、戦いなどで失ったヒット・ポイント(ヘルス)を、このスキル値あたり 5 % 回復できる (訳注: 野戦や攻城などで戦場にいるあいだ、何度か戦闘メニューに戻る時に、回復する度合いが増す)
(10) 手術=Surgery(隊スキル): 戦闘中に致命傷を負った隊員が、死亡でなく負傷で済む確率が、スキル値ごとに 4 % 増す。
(11) 治療=Wound Treatment(隊スキル): スキル値ごとに、隊員の回復速度が 20 % ずつ増す。
(12) 荷物管理=Inventory Management(リーダー・スキル): スキル値ごとに、持ち物置き場(インベントリ)の容量が +6 区画 増す。
(13) 観測術=Spotting(隊スキル): スキル値ごとに、ワールド・マップでの視界が 10 % ずつ増す。
(14) 経路探索=Path-finding(隊スキル): スキル値ごとに、ワールド・マップでの隊の移動速度が 3 % ずつ増す。
(15) 戦術=Tactics(隊スキル): このスキル値が 2 上がるごとに、戦闘開始時の優位性が 1 上がる (訳注: この優位性は、戦闘時の相手との兵数や兵のレベルなどで決まるものの、ここでの優位性が加算されます。戦闘メニューから戦闘シーンに入いった時に左下メッセージに最終的な優位性が表示されます。)
(16) 追跡術=Tracking(隊スキル): ワールド・マップでの情報量が増す (訳注: 足跡など)
(17) 訓練=Trainer(個人スキル): 毎日、このスキルを持つ主人公とコンパニオンは、自分よりレベルの低い他の隊員に経験値を追加する。その値はスキル値 0 から順に {0,4,10,16,23,30,38,46,55,65,80} 。(訳注: ここで比較されるレベルは各人の訓練スキルではなく、各人の総合的な「レベル」。)
(22) 略奪=Looting(隊スキル): スキル値ごとに、略奪量が 10 % 増す。
(23) 馬上術=Horse Archery(個人スキル): 弓と投擲について、馬上からの場合のペナルティ(与ダメージ減と精度減)を軽減する (訳注: クロスボウ(弩)も対象かどうかは不明瞭)
(24) 乗馬=Riding(個人スキル): より難易度の高い馬に乗れるようになり、乗馬に要する時間と操作性が向上する (訳注: 馬を降りる時間については不明瞭。)
(25) アスレチック=Athletics(個人スキル): 走る速度を向上する。
(26) 盾防御=Shield(個人スキル): スキル値ごとに、盾が受けるダメージを 8 % 軽減し、盾を操る速さと防御範囲を向上する。
(27) 武器熟練=Weapon Master(個人スキル): 武器の熟練度を習得しやすくなり、熟練度の上限を引き上げる。上限はスキル値 1 から順に 60, 100, 140, 180, 220, 260, 300, 340, 380, 420 。
(33) 弓術=Power Draw(個人スキル): より強力な弓を使えるようになる。レベル値ごとに与ダメージが 14 % 増す(最大値は、使う各弓の「必要弓術」 の値 + 4 まで)。
(34) 豪投=Power Throw(個人スキル): スキル値ごとに、投擲武器の与ダメージが 10 % 増す。
(35) 強打=Power Strike(個人スキル): スキル値ごとに、近接武器の与ダメージが 8 % 増す。
(36) 強靭な体=Ironflesh(個人スキル): スキル値ごとに、当人の被ヒット・ポイント(ヘルス)が +2 増す。

ハード・コーディングされたスキル

ハード・コーディングされた(MOD 開発者が変更できない)次のようなスキル一覧が存在します(0 から始まるインデクスでアクセスします): Trade (0), Leadership (1), Prisoner Management (2), Engineer (8), First Aid (9), Surgery (10), Wound Treatment (11), Inventory Management (12), Spotting (13), Pathfinding (14), Tactics (15), Tracking (16), Trainer (17), Horse Archery (23), Riding (24), Athletics (25), Shield (26), Weapon Master (27), Power Draw (33), Power Throw (34), Power Strike (35), Ironflesh (36) 。

これらのスキルの効果は、各スキルが sf_inactive フラグで無効になっている場合にのみ削除できます [1]。新しいスキルを追加したい場合は、予約されたスキルを使うか、ソフト・コード化されたスキルを使う必要があります。

スキルのフラグ群

  • sf_base_att_str そのスキルの基本属性として「体力」(Strength)を設定する。
  • sf_base_att_agi そのスキルの基本属性として「敏捷性(びんしょうせい)」(Agility)を設定する。
  • sf_base_att_int そのスキルの基本属性として「知性」(Intelligence)を設定する。
  • sf_base_att_cha そのスキルの基本属性として「魅力(カリスマ性)」(Charisma)を設定する。
  • sf_effects_party そのスキルにより隊全体に能力を付与する。
  • sf_inactive そのスキルを無効にする。

スキルの最大レベル

4 ビットで保存されるので、スキル値は 15 までに制限されます(「属性」の場合はもっと大きくなり得ます)。header_skills.py をよく見ると、どのスキルの増分も最初の倍数(16 の累乗)であることがわかります。これは、考えられる全てのスキルの組み合わせを 1 つの項目に収めることができるようにするためです [2]。ただし、Native では上のほうの定義が無いので、最大スキル値は 10 です。それらを自分で定義するか、より拡張されたバージョンのモジュール・システムを使う必要があります。

追加、結合、削除、編集

新しいスキルを 1 つ追加したければ、18 個ある予約済みスキルの 1 つを使って、スキル ID と名前を自由に編集すれば、できます。それ以上スキルを追加することはできないので注意して下さい [3]。つまり、スキルは計 42 個までに制限されます。

新しいスキルを単に 1 つ追加すると、下図のようにスキル画面で一覧全体が上に移動して、背景画像や見出しと重なってしまい、楽しくないことになるでしょう。

これを直す一番簡単な方法は、他のスキルを削除することですが、たいてい そうしたくないでしょう。この画面はハード・コーディングされたメニューですが、表示区画自体を変更する方法は いくつかあります。

まず、背景画像は、CommonRes/core_*.brf ファイルの 1 つとして置かれたメッシュ character_window です。異なるテクスチャを持つ同じメッシュを宣言する独自のリソース・ファイルを作成すれば、デフォルトのリソース・ファイルをオーバーライドするはずです。あるいは、テクスチャ character_window.dds をモジュールの Textures フォルダにコピーし、それを自由に編集する、という方法もあります。

背景の模様をずらすなりして充分なスペースができたら、今度は 見出しや表示要素の位置を編集する必要があります。それらの座標はファイル game_variables.txt にあります。注釈が付けられているので、容易に見つかります。基本の XY 座標とコンテナのサイズは通常は絶対的(実際のアスペクト比に関係なく、画面の寸法が 1.0 * 0.75 の場合)なのに対し、見出しや表示要素のサイズ値は通常は相対的であることに注意して下さい(つまり、幅 2.0 が画面の横幅の 2 倍を意味するのではなく、実際は OpenBRF の目盛りで測った表示要素のメッシュの幅の 2 倍) [4](訳注: OpenBRF について詳細は「BRF バイナリ・リソースの扱い」のページを。)

Native のスキルの一部を結合、編集、削除して、大丈夫かどうか気になるかもしれません。状況によりますが、ほとんどのスキルにはハード・コーディングされた効果がありますが、他の一部の効果はモジュール・システム側で定義されています。だから後者は簡単に編集できます。ハード・コーディングされたものについては、可能なら効果をリバース・エンジニアリングしてから、独自のエフェクトを組み込む必要があります。例えば、観測術(Spotting)と経路探索(Path-finding)のスキルは、ゲームのスクリプト game_check_party_sees_partygame_get_party_speed_multiplier を介してシミュレートできますが、追跡術(Tracking)はシミュレートできないスキルです [5]。スキルの効果を確認する際、次のような 3 つの場合があります。

  1. ハード・コーディングされている(機能を上書きするには、余計に手間がかかる)。
  2. ハード・コーディングされているが、module.ini の設定はオープン・コードで書かれている(だからフラグや変数を微調整するだけ)。
  3. モジュール・システムによる効果(コードがオープンなので自由に書き換えられる)。

まずは参照箇所(手掛かりになるカギ)を見つけることから始めます。スキルに関することなので、module_skills.py を読みます。スキルには接頭子 skl_ が付くので、例えば統率力スキル(Leadership)なら skl_leadership です。モジュール・システム全体でこれを検索して、どこで使われているか確認して下さい。そうしているうちに、隊員数の制限に関するロジックを実装するスクリプト game_get_party_companion_limit が見つかります。スクリプト名から その用途が分かるようにしておくことも大事です [5]