Documentation module.ini(MOD 初期化ファイル)

拡張子 .ini は initialization を短縮したもので、そのファイル内には Microsoft 社が定めた書式でプログラムの初期化と構成に関することを記述します。メモ帳のような簡単なテキスト・エディで編集できます。このファイルは MOD の一部で、ローカル環境に常に置く必要があります。MOD を構成する様々な設定が含まれていて、どの brf ファイルをロードするかをゲーム・エンジンに指示します。module.ini では次のような設定を指示できます(ここではカテゴリ毎に分類し、Viking Conquest を VC、Napoleonic Wars を NW と表記しています。

訳注:

この module.ini は、MOD システムの出力対象ではありません。最初は Native からコピーして使うことになります。

いくつかの既成 MOD は、上記 VC や NW など他の MOD を基にしたり部分的に取り込んだりしていて、いくつかのパラメータを module.ini に継承あるいは独自追加しています。現に、Native の module.ini では(load_resource = xxxxx などのような複数個指定できるものを 1 つと数えると)定義されている識別子は 100 個弱ですが、このページには 140 個余りが紹介されています。差分を比較した限りでは、Native のもの全てが このページに含まれているように見えます。ただし、「=」の右辺の初期値らしき値やコメント化状況は若干異なります(has_tutorial や scan_module_textures など)。

MOD 全般のパラメータ

バージョン照合

module_name = Calradia

string

MOD に名前を付けるのに使う。名前は rgl_log.txt に表示されるので、バグ報告をしたプレイヤーが どのタイトルをプレイしているかを簡単に知ることができる。[1]

module_version = 0

int

MOD の(セーブ・データの)バージョン照合に使える。マルチ・プレイヤーとシングル・プレイヤーで有効。 (訳注: MOD によっては使われない。)

compatible_module_version = 0

int

マルチ・プレイヤーでの MOD のバージョン照合に使える。

compatible_multiplayer_version_no = 1170

int

現在のマルチ・プレイヤー・バージョン。プレイヤーがサーバに接続できるかどうかを判断するために compatible_module_version とともに使われる。

compatible_savegame_module_version = 0

int

シングル・プレイヤー用 MOD の(セーブ・データの)バージョン照合に使える。

compatible_with_warband = 1

boolean

M&B 用 MOD のうち、M&B Warband でもプレイできることを示すために使われつつあるらしい。

operation_set_version = 1.168

float

1.160 以上の値に設定すると、VC のゲーム・キー・チェックのトリガーが発火する。この値は、ゲーム実行中に get_operation_set_version 命令で読み出せる。

works_with_version_max = 1011

int

廃止。代わりに compatible_savegame_module_versionmodule_version を使用のこと。

works_with_version_min = 1000

int

廃止。代わりに compatible_savegame_module_versionmodule_version を使用のこと。

リーソス読み込み

module.ini は、バイナリ・リソース・ファイル「*.brf」をロードするための参照先をエンジンに指示するのにも使います。load_resource は Native を含む全 MOD に共通のリソースをゲームの CommonRes フォルダからロードさせ、load_mod_resourceload_module_resource は各 MOD 固有毎の Resource フォルダからロードさせます。(訳注: 既存の module.ini を眺めるとわかるように、各 .brf 毎に 1 行ずつ指定します。)

load_resource = xxxxx

このリソース(xxxxx.brf)が ゲームのフォルダ下の CommonRes/ フォルダか MOD名/Resource/ フォルダのいずれかに存在することをエンジンに伝える。後者の場合に load_mod_resource と比べてロード時間増は膨大ではないようだが、エンジンにとって非効率なはず。

load_resource_nofast = xxxxx

load_resource と同じ。違いは無し。

load_mod_resource = xxxxx

このリソース(xxxxx.brf)がゲームのフォルダの、MOD名/Resource/ フォルダ内に存在することを、エンジンに明示的に伝える。load_resource よりもロード時間が短縮されることが期待される。

load_module_resource = xxxxx

load_mod_resource の代替書式(つまり同じ)。

scan_module_sounds = 0

boolean

エンジンが MOD の Sounds フォルダから探すかどうかを指定。

scan_module_textures = 0

boolean

エンジンが MOD の Textures フォルダから探すかどうかを指定。

use_case_insensitive_mesh_searches = 0

boolean

MOD がメッシュ名の大文字と小文字を区別しないようにする。1 なら、例えば sword_a と Sword_a が同じものとして扱われる。

機能の有無

has_custom_battle = 0

boolean

メイン・メニューに選択肢「カスタム・バトル」が現れるようにする。

has_multiplayer = 0

boolean

メイン・メニューに選択肢「マルチ・プレイヤー」が現れるようにする。

has_single_player = 1

boolean

メイン・メニューに選択肢「新規ゲーム」と「ロード」が現れるようにする。

has_tutorial = 0

boolean

メイン・メニューに選択肢「チュートリアル」が現れるようにする。

enable_quick_battles = 1

boolean

メイン・メニューに選択肢「クイック・バトル」が現れるようにする。「クイック・バトル」は古いゲーム・エンジンのバージョン 1.011 での呼び名。だから、このフラグはバニラ(つまり Warband でない)M&B 用。

ワールド・マップのパラメータ

ワールド・マップの定数

map_max_distance = 175.0

float

マップでのズームアウトの最大量。指定できるのは 251 までらしい。

map_min_x = -180

int

マップの東端。マップ表示はこれを越えて可能だが、各隊はこれを越えて移動できない。

map_max_x = 180

int

同 西端。

map_min_y = -145

int

同 北端。

map_max_y = 145

int

同 南端。

map_min_elevation = 0.2

float

カメラがマップ中の地形に近づくことができる最小高度。角度も制限。

map_max_elevation = 1.0

float

カメラがマップ中の地形から離れることができる最大高度。

map_river_direction = 140

int

マップの河川シェーダに下流方向を指示するための角度。

map_river_speed_x = 0.01

float

マップの河川シェーダに x 軸方向の流速を指示する。

map_river_speed_y = -0.01

float

マップの河川シェーダに y 軸方向の流速を指示する。

map_sea_direction = -40

int

海上の波の「泡」の向き。

map_sea_wave_rotation = 300

angle

module.ini のコメントによると、海上に「tear artefact」が見えるようになる、とのこと。 (訳注: 「涙の遺物」? 海に関する専門用語? rotation という名との関連は?)

map_sea_speed_x = 0.02

float

マップの海洋シェーダに、x 軸方向の流速を指示する。

map_sea_speed_y = -0.02

float

マップの海洋シェーダに、y 軸方向の流速を指示する。

木々(植生)のモデルがワールド・マップ上に描かれます。用意するメッシュの形は自由ですがその名前はハード・コーディングされ決まっているので、各 brf ファイルで任意の名にすることはできません。メッシュ名は map と tree という語と steppe(ステップ気候、草原地帯)など気候に関連した 4 つの「地帯タイプ」との組み合わせで決まります。ゲーム・エンジンは、module.ini 内の指定から各地帯タイプ毎の「数」だけを読み取り、リソース・ファイル内から その数のメッシュを取り出します。だから当該メッシュには、「標準、砂漠、積雪、草原」という 4 つの地帯タイプに応じた名前を付けておく必要があります。例えば、標準気候の地帯では map_tree_amap_tree_b など、積雪地帯では snow_tree_asnow_tree_b などです。ゲーム・エンジンが期待する充分なメッシュが .brf 内に無ければ、「Unable to find map [snow, desert, steppe] tree mesh %s」(訳注: 「マップ用の [積雪、砂漠、草原] の木のメッシュ %s が見つかりません)という警告が rgl_log.txt に出力されます。

(訳注: 以下は そのエンジンの処理のようです。)

rglMesh *treeMeshes[64];
rglMesh *snowTreeMeshes[64];
rglMesh *steppeTreeMeshes[64];
rglMesh *desertTreeMeshes[64];

ZeroMemory(treeMeshes, sizeof(treeMeshes));
ZeroMemory(snowTreeMeshes, sizeof(snowTreeMeshes));
ZeroMemory(steppeTreeMeshes, sizeof(steppeTreeMeshes));
ZeroMemory(desertTreeMeshes, sizeof(desertTreeMeshes));
g_moduleSettings.iMapTreeTypes = rglMin(g_moduleSettings.iMapTreeTypes, 64);
g_moduleSettings.iMapSnowTreeTypes = rglMin(g_moduleSettings.iMapSnowTreeTypes, 64);
g_moduleSettings.iMapSteppeTreeTypes = rglMin(g_moduleSettings.iMapSteppeTreeTypes, 64);
g_moduleSettings.iMapDesertTreeTypes = rglMin(g_moduleSettings.iMapDesertTreeTypes, 64);

rglString treeMeshName;

for (int i = 0; i < g_moduleSettings.iMapTreeTypes; ++i)
{
    treeMeshName = "map_tree_";
    treeMeshName.append('a' + i);
    treeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!treeMeshes)
        rglWarning("Unable to find map tree mesh %s", treeMeshName.c_str());
}

for (int i = 0; i < g_moduleSettings.iMapSnowTreeTypes; ++i)
{
    treeMeshName = "snow_tree_";
    treeMeshName.append('a' + i);
    snowTreeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!snowTreeMeshes)
        rglWarning("Unable to find map snow tree mesh %s", treeMeshName.c_str());
}

for (int i = 0; i < g_moduleSettings.iMapSteppeTreeTypes; ++i)
{
    treeMeshName = "steppe_tree_";
    treeMeshName.append('a' + i);
    steppeTreeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!steppeTreeMeshes)
        rglWarning("Unable to find map steppe tree mesh %s", treeMeshName.c_str());
}

for (int i = 0; i < g_moduleSettings.iMapDesertTreeTypes; ++i)
{
    treeMeshName = "desert_tree_";
    treeMeshName.append('a' + i);
    desertTreeMeshes = g_resourceManager.getMesh(treeMeshName);

    if (!desertTreeMeshes)
        rglWarning("Unable to find map desert tree mesh %s", treeMeshName.c_str());
}
switch (face->m_regionType)
    {
    case rt_forest:
        treeSubMesh = treeMeshes[rglRandMod(g_moduleSettings.iMapTreeTypes)];
        break;
    case rt_snow_forest:
        treeSubMesh = snowTreeMeshes[rglRandMod(g_moduleSettings.iMapSnowTreeTypes)];
        break;
    case rt_steppe_forest:
        treeSubMesh = steppeTreeMeshes[rglRandMod(g_moduleSettings.iMapSteppeTreeTypes)];
        break;
    case rt_desert_forest:
        treeSubMesh = desertTreeMeshes[rglRandMod(g_moduleSettings.iMapDesertTreeTypes)];
        break;
    }

map_tree_types = 17

int

標準気候の地帯に表示する木タイプの「数」。.brf ファイル内のメッシュ map_tree_a、map_tree_b、... map_tree_r のうち、どこまでを使うかを指定する。その中からランダムに循環して表示される。 (訳注: Warband のフォルダの CommonRes フォルダに map_tree_meshes.brf があり、OpenBRF で開くと中に map_tree_a~q という計 17 個の標準気候用メッシュが含まれている。また、Modules 下の Native フォルダの module.ini には それに対応して「map_tree_types = 17」と指定されている。)

map_desert_tree_types = 4

int

砂漠地帯に表示される木モデルの種類数。この地帯の名が付いた木のモデル(メッシュ)の内、指定した数でランダムに循環して表示される。

map_snow_tree_types = 3

int

積雪地帯に表示される木モデルの種類数。この地帯の名が付いた木のモデル(メッシュ)の内、指定した数でランダムに循環して表示される。

map_steppe_tree_types = 5

int

草原地帯に表示される木モデルの種類数。この地帯の名が付いた木のモデル(メッシュ)の内、指定した数でランダムに循環して表示される。

日時のパラメータ

starting_day

int

廃止。代わりに game_get_date_text スクリプトを使うこと。

starting_month

int

廃止。代わりに game_get_date_text スクリプトを使うこと。

starting_year

int

廃止。代わりに game_get_date_text instead スクリプトを使うこと。

time_multiplier = 0.25

float

ワールド・マップ画面でのスピード。移動中やスペース・キーで時間経過させている時に、「プレイヤーの現実世界での 1 秒」あたり「ゲーム内の世界で経過する時間(単位: 1 時間)」。デフォルト値 0.25 なら、プレイヤーの実時間 4 秒でゲーム内が 1 時間進む。値が 2.4 なら、実時間 10 秒にゲーム内で 24 時間が経つ。Ctrl スペース・キー を押し続ければ 10 倍速く進む。 (訳注: 実際には様々な処理のオーバヘッドがあって、各実時間は少し余計にかかる。)

attribute_points_per_level = 0.195

float

VC では「レベル」ごとに得られる「属性ポイント」の量。Native では 1。

attribute_required_per_skill_level = 2

int

VC では各「スキル値」を 1 つ上げるのに必要な「属性ポイント」の量。Native では 3。Vjeffae 氏によれば、ゲーム中の各スキル・レベルの上限は それらのベースとなる「属性」のレベルをこの値で割り、端数を切り捨てた値までに抑えられる。

can_run_faster_with_skills = 0

boolean

「敏捷性」属性と「アスレチック/運動能力」スキルが、走る速度に与える影響を決める。ゲーム・エンジンは次のような式を使う。

if (rglConfig::Battle::bCanRunFasterWithSkills)
  troopFactor = ((agility + athletics * 6.0f + 25.0f) * 30.0f / (weightFactor + 30.0f) + 90.0f) / 100.0f;
else
  troopFactor = ((agility * 0.7f + athletics * 3.0f + 25.0f) * 70.0f / (weightFactor + 70.0f) + 90.0f) / 100.0f;

読み易さだけのために簡単に書くと、

if can_run_faster_with_skills == 1
  troopFactor = ((agility + athletics * 6 + 25) * 30 / (weightFactor + 30) + 90) / 100;
else
  troopFactor = ((agility * 0.7 + athletics * 3 + 25) * 70 / (weightFactor + 70) + 90) / 100;

hero_wounded_treshold = 15

int

ヒーローが戦闘に参加して隊スキルに貢献できるために必要な(充分な)ヒット・ポイントを決める。(訳注: これを下回ると、隊員一覧に赤字で表示され、他の者の隊スキルが使われる。「ヒーロー」の定義は troops(兵種)のページに。ただし、ここでは主人公を含まない。)

hero_xp_multiplier = 2.0

float

ヒーローが敵を一人倒すことで得られる経験値の係数を指定(恐らく最大は 10。あるいは 15 かも)。(訳注: ここでの「ヒーロー」は、主人公を含まない。主人公のものは別)

level_boundary_multiplier = 2.0

float

VC では各兵種の昇格に必要な経験値の係数を指定。Native では 1。

player_wounded_treshold = 5

int

主人公が戦闘に参加して隊スキルに貢献できるために必要な(充分な)ヒット・ポイントを決める。(訳注: これを下回ると、隊員一覧に赤字で表示され、他の者の隊スキルが使われる。)

player_xp_multiplier = 2.0

float

主人公が敵を一人倒すことで得られる経験値の係数を指定(恐らく最大は 10。あるいは 15 かも)。

regulars_xp_multiplier = 3.0

float

一般兵が敵を一人倒すことで得られる経験値の係数を指定(恐らく最大は 10。あるいは 15 かも)。

skill_leadership_bonus = 3

int

リーダー・スキル・ポイントごとに主人公が隊に加えることのできる兵数を指定。

skill_points_per_level = 2

int

VC では、レベル毎に得られるスキル・ポイントを指定。Native では 1。

skill_prisoner_management_bonus = 5

int

捕虜管理スキル・ポイント毎にプレイヤーが引き連れることのできる捕虜数を指定。

track_spotting_multiplier = 0.8

float

追跡術スキルの係数。0 を指定すると、スキルに関係なく、ワールド・マップに追跡情報を示すマークが表示されなくなる。

weapon_points_per_level = 5

int

VC ではレベルごとに得る武器熟練度スキル・ポイントの数を指定。Native では 10。

物品のパラメータ

display_wp_archery = 0

boolean

スキル画面内のの熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。[2]

display_wp_crossbows = 0

boolean

スキル画面内のクロスボウの熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。

display_wp_firearms = 0

boolean

スキル画面内の火器の熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。

display_wp_one_handed = 0

boolean

スキル画面内の片手武器の熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。

display_wp_polearms = 0

boolean

スキル画面内の長柄武器の熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。

display_wp_throwing = 0

boolean

スキル画面内の投擲の熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。

display_wp_two_handed = 0

boolean

スキル画面内の両手武器の熟練度の「表示」有無を指定する。ただし、ゲーム内では、当該武器と扱う能力の有無には影響しない。つまり、これが 0 でも、実際にレベルアップ可能。

meek_modifier_speed_bonus = 0

float

従順(meek)修飾子を持つ馬の速度係数を指定。

timid_modifier_speed_bonus = 0

float

臆病(timid)修飾子を持つ馬の速度係数を指定。

use_crossbow_as_firearm = 0

boolean

ほぼ廃止。With Fire & Sword や古い MOD(itp_musketitp_pistol の代わりに itp_crossbow が使われた)での回避策として使われていた [3]。クロスボウの装填アニメーションをマスケット銃の装填アニメーションに置き換える。粒子(パーティクル)効果と効果音は、物品トリガー ti_on_weapon_attack にて手動で追加する必要がある。

隊のパラメータ

auto_compute_party_radius = 1

boolean

VC では、「集落や施設」(Party)のアイコン・モデルを使って「集落や施設」の半径を指定する。アイコンの中心ではなく、期待した場所(外周付近)で「集落や施設」と やりとり できるので、大きな街アイコンを持つ MOD にとって特に重要。これを指定しない場合、アイコンの中心が画面から外れた時に、表示されてほしくても消えてしまう。あまりにも特大のアイコンだと、カメラ(視点)の向きが変わった時に、視覚的な問題を 100 % 回避不能になる。アイコンが大きすぎないか、ゲーム内で充分にテストする必要がある。

base_companion_limit = 20

int

統率力(リーダーシップ)スキルが無い場合に、主人公の隊に含められるコンパニオンの最大人数。

disable_disband_on_terrain_type = 0

int

ある特定の種類の地形タイル(通行可能な水路など)で隊を分散(disband)できなくする。指定可能な領域タイプ(rt, region type)を、下記から 1 つだけ選べる。

(訳注: 以下、コメントは訳者が追加。)

rt_ocean           = 0,  # 海洋
rt_mountain        = 1,  # 山
rt_steppe          = 2,  # 草原/ステップ
rt_plain           = 3,  # 平原
rt_snow            = 4,  # 積雪
rt_desert          = 5,  # 砂漠
rt_bridge          = 7,  # 橋
rt_river           = 8,  # 河川
rt_mountain_forest = 9,  # 山岳の森林
rt_steppe_forest   = 10, # 草原の森林
rt_forest          = 11, # 森林
rt_snow_forest     = 12, # 積雪地帯の森林
rt_desert_forest   = 13, # 山岳の森林
rt_shore           = 21, # 岸
rt_foam            = 22, # 泡
rt_waves           = 23, # 波

seeing_range = 6.5

float

ある隊がワールド・マップ上で見通せる範囲、つまり可視半径の、デフォルト値を指定。

show_party_ids_instead_of_names = 0

boolean

隊や「集落や施設」の名前の代わりに ID を上に表示するかどうかを指定。MOD 開発容易にする目的で 1 にする。 (訳注: 影響するのは(調べた限り 少なくとも)、ワールド・マップ上に常に表示されている「集落や施設」(Party)と、それらや各隊(候伯や農民は「隊テンプレート」、自隊は Party)へマウスホバー時のポップアップの題名と、[Q]-[Game Log] に表示される「できごと」。注意点として、Game Log や近隣の隊などはゲームセーブ時の対象なので、(言語切り替えと同様で)このパラメータを切り替えながらセーブとロードを繰り返すと、切り替えが効かなくなったように見える可能性がある。)

use_strict_pathfinding_for_ships = 1

boolean

VC では、船の経路探索を制限。船を海上に留め、海-海 間の航路を成すようにする。

ゲーム内メニューのパラメータ

auto_create_note_indices = 0

boolean

メモのテキストの有無について、隊(troop)/勢力/街 の全てを自動的に検索するかどうかを指定。 (訳注: 名前から察するに、インデクスを作成する。そうだとすれば恐らく(仮想)メモリを食うが速度が上がる。)

disable_force_leaving_conversations = 1

boolean

Tab キーで会話を終わらせないようにする。

show_troop_upgrades_button = 0

boolean

VC では兵種(Troop)の昇格ボタンの表示有無を指定。

show_quest_notes = 1

boolean

クエスト画面でのメモ表示の有無を指定。

その他のマップ関連パラメータ

can_adjust_camera_distance = 1

boolean

プレイヤーがテンキーの + と - でカメラのデフォルト位置を調整できるか否か、を指定。 (訳注: シーン内で 3 人称視点モード時に主人公の近くから見下ろすカメラ。ちなみに、Native の設定画面で Nampad +/- キーが Map Controls に分類されているのは誤り。)

has_accessories_for_female = 0

boolean

プレイヤーの兵種(troop)が第 2 スキン・エントリ(通常は女性用)に割り当てられている場合、人物(キャラクタ)作成画面で ui_change_beard (ひげを変更)が示す文字列を ui_change_accessories (装飾品を変更)が示すものに置き換える。この文字列は、第 2 スキン・エントリの ひげメッシュのリストが空でない場合にのみ表示されることに注意。 (訳注: MOD システムは 全 MOD に共通な部分を生成しないはずで、かつ Warband の languages/en/ui.csv 内には ui_change_beard があって ui_change_accessories が無いので、このパラメータを 1 にする場合は、開発中の MOD の languages/en/ui.csv に ui_change_accessories の行を書き加える必要がありそう。)

limit_hair_colors = 1

boolean

追加の髪テクスチャが無いのなら 1 を指定する。Native の人物(人間)の各スキン定義では、頂点色の設定とともに hair_blonde (金髪)が使われる。値を 0 にすると、ゲーム・エンジンは例えば、hair_red (赤毛)、beard_black (黒髪)などの名前のマテリアルとテクスチャを見つけようとする。

show_faction_color = 1

boolean

ワールド・マップ上での「集落や施設」(Party)の名前の色を、勢力を反映した色にする。0 ならベージュ(茶色がかった白)で表示される。

戦闘シーンのパラメータ

装備の能力のパラメータ

crush_through_treshold = 2.4

float

武器のうち、物品(Item)のレコードに itp_crush_through フラグの付いたものについて、頭上ブロックを打破するのに必要なダメージ量を指定。

module.ini のコメントによれば、「与ダメージが shield_penetration_offset + shield_penetration_factor * shield より大きい全ての飛翔体は盾を貫通」し、相手にダメージを与える。 (訳注: 式の最後の「shield」が各盾の耐久性(ヘルス・ポイント)か抵抗力かは不明瞭。)

shield_penetration_factor = 3.0

float

~offset とともに、飛翔体が盾を貫通する威力を決める(上記の式)。

shield_penetration_offset = 30.0

float

~factor とともに、飛翔体が盾を貫通する威力を決める(上記の式)。

module.ini のコメントによれば、次の値を編集することでダメージ・システムを変更できる。最初の 3 つの値(吸収因子 soak~)は、防具によりダメージから直接差し引かれる量を決める。次の 3 つの値(減衰因子 reduction~)は、ダメージの減少率を決める。物品のレコードに itp_extra_penetration フラグが含まれる武器のみにカウントされる extra_penetration 要素にも同じことが当てはまる。また、吸収因子を負値にすると、ダメージが増加する。減衰因子については はっきりせず、理論的には同様に機能するはずだが、さほど顕著に働かない。

armor_soak_factor_against_cut = 0.8

float

「切る」ダメージに対し、防具の恩恵で直接差し引かれる量を指定。

armor_soak_factor_against_pierce = 0.65

float

「突く」ダメージに対し、防具の恩恵で直接差し引かれる量を指定。

armor_soak_factor_against_blunt = 0.5

float

「鈍器」によるダメージに対し、防具の恩恵で直接差し引かれる量を指定。

armor_reduction_factor_against_cut = 1.0

float

「切る」ダメージに対する減衰率を指定。

armor_reduction_factor_against_pierce = 0.5

float

「突く」ダメージに対する減衰率を指定。

armor_reduction_factor_against_blunt = 0.75

float

「鈍器」のよるダメージに対する減衰率を指定。

extra_penetration_factor_reduction = 1.0

float

itp_extra_penetration フラグを持つ武器に対する追加の軽減因子を指定。最小値 0 なら防具が無視されることを意味する。Native では追加の貫通フラグは想定されないので、余計な影響を無くすために「1.0」に指定。

extra_penetration_factor_soak = 1.0

float

itp_extra_penetration フラグを持つ武器に対する追加の吸収因子を指定。最小値 0 なら防具が無視されることを意味する。Native では追加の貫通フラグは想定されないので、余計な影響を無くすために「1.0」に指定。

module.ini のコメントによれば、この しきい値を下回るダメージでは近接攻撃を割り込ませない。

damage_interrupt_attack_threshold = 3.0

float

この値より低いダメージでは近接攻撃を割り込ませない。

damage_interrupt_attack_threshold_mp = 1.0

float

この値より低いダメージでは近接攻撃を割り込ませない。マルチ・プレイヤー用。

ai_decide_direction_according_to_damage = 1

boolean

これを 1 にすると、AI は どの攻撃を選ぶかを決める際に、各方向への攻撃のダメージを考慮する。

apply_all_ammo_damage_modifiers = 1

boolean

VC では、全ての弾薬に「鈍器/突く/切る」の修正ダメージを適用できるようになる。

brace_rotation_limit = 0.012

float

itp_is_pike フラグを持つ物品に影響し、槍を構える際の回転速度の制限に使われる(NW が その例)。回転量の絶対値が「0.01 か指定値の どちらか大きいほう」より小さい場合、ゲーム・エンジンは しゃがんでパイクを構えるアニメーション(anim_crouch_pike)を再生し、それ以外の場合は しゃがんで 杖/棒 を構えるアニメーション(anim_crouch_staff)を再生する。つまりデフォルトの 0.01 より小さい値は無効。大きな値(0.5 で充分なように見える)を指定すると、そのキャンセリング効果を完全に無効にすることができる。

(訳注: itp_is_pike フラグは、槍を地面に斜めに立てて接地箇所を片ほうの足で押さえて低く構えて待ち、敵騎兵に突っ込ませる、パイク・ブレイス(pike brace)という構え(のアニメーション)を有効にする。この web 文書の「物品/アイテム」のページにも説明あり。この項の crouch を couch と混同しないよう注意。)

couched_lance_damage_multiplier = 0.65

float

ランス突撃(couched lance, 長柄武器を脇で水平に保って突進)が与える追加ダメージの量を指定。Native では 0.65 に設定。 (訳注: この項の couch を crouch と混同しないよう注意。)

disable_attack_while_jumping = 0

boolean

「エージェントがジャンプ中に攻撃すること」と「エージェントがジャンプを開始した時に攻撃が割り込まれるようにすること」を禁止する。

disable_zoom = 0

boolean

プレイヤーが gk_zoom(通常は Shift キー)を使ってカメラの視野を狭めること(ズームで拡大)を禁止する。実行中に is_zoom_disabled 命令でこのパラメータの状態を確認できる。

fall_damage_multiplier = 1.0

float

落下によるダメージの程度を指定する。これ以外にも、恐らく滞空時間が落下ダメージを決める要因となる。[4]

horse_charge_damage_multiplier = 1.0

float

馬が人間のエージェントに体当たりする時に与える突進ダメージを調整する係数。

lance_pike_effect_speed = 3.0

float

パイクがアニメーション anim_horse_rear をトリガーするのに必要な、馬の速度を指定。

melee_damage_speed_power = 2.0

float

近接武器の「速度」による与ダメージへの影響を、「べき数」で指定。値が 2.0 なら武器の速度の 2 乗に比例し、1.0 なら線形(つまり単なる比例)になる。 (訳注: パラメータ名に含まれる power は「べき数」)

missile_damage_speed_power = 1.9

float

遠隔武器の「速度」による与ダメージへの影響を、「べき数」で指定。値が 2.0 なら飛翔体の速度の 2 乗に比例し、1.0 なら線形(つまり単なる比例)になる。 (訳注: パラメータ名に含まれる power は「べき数」)

no_friendly_fire_for_bots = 0

boolean

マルチ・プレイヤーでの AI エージェントによる誤射(彼らの味方への射撃)を、引き起こせなくする。

戦闘規模やシーンのパラメータ

battle_size_min = 150

int

VC では、MOD の最小戦闘人数。

battle_size_max = 750

int

VC では、MOD の最大戦闘人数。

far_plane_distance = 5000

float

シーン内の視界でレンダリング対象の平面が拡がる量(単位 m)、つまりプレイヤーに対してオブジェクトがレンダリングされる最大距離。デフォルト値は 1250。もっと 広い/綺麗な/長い 境界の地形をプレイヤーに見せたければ、この値を大きくする。

物理則のパラメータ

air_friction_arrow = 0.002

float

空気の抗力係数。Native では 0.002 を指定。

air_friction_bullet = 0.002

float

空気の抗力係数、ただし火器で撃ち出された飛翔体にのみ影響する。Native では 0.002 を指定。

その他の戦闘シーン・パラメータ

consider_weapon_length_for_weapon_quality = 1

boolean

VC では、エージェントが装備から武器を選ぶ時に武器の「長さ」を考慮させ、より長い武器を選ぶ可能性が高くなるようにする。

disable_moveable_flag_optimization = 0

boolean

全シーン小道具について、sokf_moveable フラグの効果を無くし、物理動作を抑止(同フラグを全てに指定する必要が無くなる) [5]

(訳注: sokf_moveable は header_scene_props.py で定義され、シーン小道具の各レコードに必要に応じて指定する。それを module.ini で一括して無効にする。)

mission_object_prune_time = 180

int

発射された矢や地面に落ちた物品といったシーン小道具が、シーンから削除されるまでの秒数。これを 0 にすると、ミッション中に物品が消滅しなくなるが、パフォーマンス上の理由から推奨されない。このパラメータは、コード経由で生成された物品には影響しない [6]

その他のパラメータと詳細

許可・禁止

can_crouch = 0

boolean

人間のエージェントが しゃがむ ことができるかを指定。ゲーム・キー設定メニューに正しく表示されるようにするには、ui.csv に「ui_crouch|Crouch:」のような行を追加する必要がある [7]

can_objects_make_sound = 0

boolean

シーン小道具がシーン内で音声を発することを可能にする。

can_reload_while_moving = 0

boolean

エージェントが走行中や歩行中にクロスボウを再装填可能かどうかを指定。馬には影響しない。use_crossbows_as_firearms も有効にする必要がある [8](訳注: その use_crossbows_as_firearms は TW 社のフォーラムで検索しても ほとんど情報無し。脚注の discord での投稿も古くて残っていないように見える。)

can_use_scene_props_in_single_player = 0

boolean

シングル・プレイヤーでもマルチ・プレイヤーの MOD の場合と同じように、エージェントがシーン小道具(ドアや跳ね橋など)を操作できるようにする。

disable_food_slot = 1

boolean

ほぼ非推奨。持ち物画面に食料スロットを残したい場合は 0 を指定。非常に古いバージョンの M&B(ただし Warband では まだ機能する!)で、隊で食べる食品を分別するために使われる。そこに馬を置くと食料として屠殺される。

has_forced_particles = 0

boolean

MOD に粒子システムの使用を強制する。恐らく、マスケット銃の濃い煙など、粒子効果を無くすとプレイヤーに不利益がある場合に使用される。

horses_rear_with_attack = 1

boolean

充分なダメージを受けた馬が、立ち上がるかどうかを指定。

horses_try_running_away = 0

boolean

乗り手のいない馬エージェントが攻撃的なエージェントから逃げようとするかどうかを指定。

num_hints = 12

int

ヒント(二番目のロード中画面に表示される)の総数。

shorter_pistol_aiming = 1

boolean

VC では、クロスボウやマスケット銃と同様に、拳銃(ピストル)を例外に追加する。 (訳注: 右の 2020 年の投稿によると「itp_pistol の物品に対して、完全に照準が合うまでの時間を短縮かもね(推測)」。 SupaNinjaMan, Comprehensive List Of Module.ini commands

use_advanced_formation = 0

boolean

MOD が、NW / With Fire & Sword からの高度な「陣形」(フォーメーション)を使うかどうかを指定。Native では 0。有効にすると、陣形と武器使用に関する命令メニューが拡張され、プレイヤーは部隊を 1 列から 5 列まで整列させ、射手に射撃可否を命令できるようになる [9]。そのためには、ui.csv に下記のような「メニューの選択肢」のための行を追加する必要がある [10]

ui_order_form_1_row|Form one row
ui_order_form_2_row|Form two rows
ui_order_form_3_row|Form three rows
ui_order_form_4_row|Form four rows
ui_order_form_5_row|Form five rows
ui_order_button_fire_at_my_command|Fire at my command
ui_order_button_all_fire_now|All, Fire now
ui_order_button_left_fire_now|Left, Fire now
ui_order_button_middle_fire_now|Middle, Fire now
ui_order_button_right_fire_now|Right, Fire now
ui_order_button_weapon_usage_orders|Equipment orders
ui_order_button_use_melee_weapons|Use melee weapons
ui_order_button_use_ranged_weapons|Use ranged weapons

(訳注: 上記 兵への命令のためのメニュー選択肢の内訳は、最初の 5 行が横並びで布陣させる際の前後の段数。続く 5 行は、発射する時期と横並び内を 3 つの塊に分けた位置、その後ろの "Equipment orders" (装備命令」は 恐らくサブメニューへ行く選択肢で、その中に最後の 2 行「近接武器」か「遠隔武器」の選択肢がある。だから、下記「表示メッセージ」にはサブメニューに対応するものが無い。


さらに、各班への射撃命令を発した時の「メッセージ表示」のテキストとして下記を追加する。

ui_form_1_row_e_|%s, Form one row
ui_form_2_row_e_|%s, Form two rows
ui_form_3_row_e_|%s, Form three rows
ui_form_4_row_e_|%s, Form four rows
ui_form_5_row_e_|%s, Form five rows
ui_fire_at_my_command_e_|%s, Fire at my command
ui_all_fire_now_e_|%s, fire now
ui_left_fire_now_e_|%s, left side fire
ui_middle_fire_now_e_|%s, middle fire
ui_right_fire_now_e_|%s, right side fire
ui_use_melee_weapons_e_|%s, use melee weapons
ui_use_ranged_weapons_e_|%s, use ranged weapons

(訳注: 上記で「%s」の箇所に表示されるのは、予め 0~9 キーで選択した対象で、MOD によっては「兵科」(歩兵、騎兵など)と同義のこともあるし、「副班」機能のある MOD なら表示が「歩兵」でもプレイヤーが「出向」させた「○○弓兵」「△△騎兵」のような複数の兵種(troop)を含む場合がある。)

use_phased_reload = 0

boolean

マスケット銃と拳銃(ピストル)の再装填を、複数の「段階」(フェーズ)に分けて実行可能にする。つまり、プレイヤーが再装填を中断した場合、次に再装填動作をすると、全くの最初からやり直すのではなく、その段階の最初から開始することになる。遠隔武器に itcf_reload_musket または itcf_reload_pistol を指定すると、段階的な再装填が機能する。

グラフィックのパラメータ

add_set_neighbors_to_tangent_flag_to_shader = 1

boolean

シェーダ用パラメータ。隣接する面の接線に関する情報を渡すらしい。Native では例無し。

blood_multiplier = 6.0

float

VC では血液粒子の影響量(とサイズ?)を指定。

disable_high_hdr = 0

boolean

MOD 内の高画質 HDR 効果を無効にするかどうかを指定。

fix_gamma_on_dx7_operation_colors = 1

boolean

シェーダ用パラメータ。set_startup_ambient_light および set_startup_ground_ambient_light 命令に使われる。下記は想定されるゲーム・エンジンの処理。

if ( !rgl_HLSL_mode && dword_AA35C4C )
{
*(float *)v2430 = a2;
v1304 = sqrtf(*(float *)v2430);
v1305 = cur_game;
*(float *)(v2460 + 408) = v1304;
*((float *)v1305 + 103) = sqrtf(*((float *)v1305 + 103));
v1306 = cur_game;
a2 = sqrtf(*((float *)cur_game + 104));
v1298 = cur_mission;
LODWORD(v2460) = cur_game;
*((float *)v1306 + 104) = a2;
}

use_bordered_shadow_sampler = 1

boolean

シェーダ用パラメータ。ゲーム・エンジンは不使用。

screenshot_format = 1

boolean

Ctrl Insert キー押下時に、「~/Mount&Blade Warband/Screenshots/MOD名」に保存されるスクリーン・ショットの「ファイル形式」を指定する。0 なら jpg(デフォルト)、1 なら png、2 なら bmp [11]

マルチ・プレイヤーのパラメータ

multiplayer_walk_enabled = 0

boolean

マルチ・プレイヤーで、gk_walk を使って、サーバ上のプレイヤーが(走るのではなく)歩行を可能にする。NW のようなスタイルの線上の戦闘では重要。disable_zoom を 1 に設定する必要がある。さもないと Shift キーでズームが優先される。(通常でもズームすれば主人公は常に歩くので、プレイヤーにはズーム無効に見えるだけなのでは? 要調査))

(訳注: このガイドの原著者が疑問を呈しているように、disable_zoom が必須なのだとしたら、このパラメータは冗長に見えるし、自動的に disable_zoom が有効になるのだとしたら設計が悪い。また、原著者は右の投稿で「少し壊れているのでは」との疑いも示している。 module.ini settings

restrict_attacks_more_in_multiplayer = 0

boolean

エージェントが「突き」や「頭上攻撃」を行なっている場合、回転速度は、このパラメータが 1 なら 11 に、デフォルトの 0 なら 16 に制限される。これにより、マルチ・プレイヤーでの攻撃方法がより制限されることになり、スパム(プレイヤーによるキー選択や組み合わせが「ワンパターン」または「無意識」)やフェイントを最小限に抑えることができるはず。

show_multiplayer_gold = 0

boolean

マルチ・プレイヤーで、主人公(プレイヤー・キャラクタ)の所持金を表示する。非表示指定の場合、表示されないのは金額部分だけで、アイコン自体は引き続き表示される。

sync_block_directions = 0

boolean

防御(ブロック)の方向を、クライアントとサーバー間で同期させるかどうかを指定。

sync_ragdoll_effects = 0

boolean

ラグドール(エージェントが倒されて骨抜きのようになった状態)を、クライアントとサーバー間で同期させるかどうかを指定。

実行負荷とログ

dont_supress_initial_warnings = 1

boolean

デバグ目的で 1 を指定し、公開リリース時は 0 にする必要がある。rgl_log.txt へ出力される、下記のような読み込み警告を、(デバグ中に)表示するために使う。

rgl_post_warning_line: WARNING: Unable to find material for mesh prt_mod_weapon_aim

give_performance_warnings = 1

boolean

動的物理オブジェクト上の過度に複雑な衝突メッシュに対して警告メッセージを表示させる。状況に応じて次のような警告を発する。
"Default game_variables.txt cannot be loaded, make sure you have Native module installed or set all game variables!" (訳注: 「デフォルトの game_variables.txt をロードできません。Native モジュールがインストールされていることを確認するか、または全てのゲーム変数を設定して下さい。」)
"Performance Warning: Using dynamic physics with triangular meshes can decrease performance!". (訳注: 「パフォーマンスに関する警告: 三角形メッシュで動的物理を使用すると、パフォーマンスが低下する恐れがあります。」)

maximum_number_of_notification_messages = 4

int

VC では、戦闘中のメッセージ数の最大。通常は 10。

reduce_texture_loader_memory_usage = 0

boolean

マルチ・スレッドにし、ロード時間の向上を図る。

supports_directx_7 = 1

boolean

MOD が DirectX 7 モードをサポートする。非常に古い PC で必要。

use_scene_unloading = 1

boolean

VC では、シーンを離れると、コンピュータの RAM から消される(アンロードされる)。そのシーンにすぐに戻りたくても、再度 RAM に読み込む必要がある。頻繁にアクセスするシーンの読み込みは遅くなるが、RAM の容量の少なさを補い得る。

use_texture_degration_cache = 0

boolean

キャッシュ・ファイルを生成し、ロード時間を改善する。その場から離れている時間が長くなると、ゲーム・エンジンは ほとんどのテクスチャのロードを解除し、粗く小さなテクスチャに置き換える。これは(2015 年当時に)過去のバージョンにも当てはまったが、ゲームはそれらをディスクに保存しなかった [12]

(訳注: 脚注のリンク先の他に右の投稿(2016 年)も参考になるかも。「持ち物や売り物のグラフィックにノイズが乗る。」回答者 Kentucky 『 HEIGUI 』 James, Is there a trick to prevent 'fuzzy' inventory images when changing textures?。いずれにしても、 LOD 導入以前の話?(不確か))

セーブとロード

dont_load_regular_troop_inventories = 1

boolean

ゲーム・セーブ時に、(ヒーローでない)一般兵の持ち物も保存する。セーブ・データが大きくなり、クラッシュする可能性がある。

  • 脚注と出典:
  • [1] kalarhan, Tweaks to modules.ini.
  • [2] 全 display_wp_* の設定をテストした dsrn への謝辞。
  • [3] あるいは、必要に応じてクロスボウ関連の効果音、アニメーション、熟練度を全て置き換えることで、新しい銃器カテゴリを追加することも可能。いくつかの注意事項が右の投稿で示されている。 HokieBT, Modding Q&A.
  • [4] Somebody, Modding Q&A.
  • [5] このフラグを 1 に設定することで、通常のゲーム・バージョン 1.143 のクラッシュを防げた。詳細は右の投稿。 Siege Camp Icon.
  • [6] _Sebastian_, Modding Q&A.
  • [7] dunde, Modding Q&A.
  • [8] DarthMongol, Mount & Blade Modding Discord.
  • [9] dunde, Modding Q&A.
  • [10] 右記から採録。 reddit.
  • [11] Linux でプレイするとスクリーン・ショット機能が壊れているように見える。 Noxbru, Mount & Blade Modding Discord.
  • [12] jacobhinds, Modding Q&A.