実際のとこ、"modding" って何?
たぶん お気づきの通り、modding という語は modifying (変更)が元になっています。MOD の場合は「変更」とも「モジュール」とも解釈できますが、そのどちらであるかは大した問題ではありません。
要は、 modding とは何かを変更することです。ここでは、Mount&Blade というゲーム、またはその派生ゲームの 1 つを変更することです。modding は実際にはプログラミングですが、基本的なレベルです。もちろん多少のプログラミング経験があるかたなら、理解は容易でしょう。

訳注:
以下 本文で説明される通り、MOD 開発システム(本文では MOD system、ModSys など)は最初から白紙状態ではなく、Warband に標準実装されている Native という MOD のソース・コード(source code)と処理系が含まれています。つまり、いわゆる開発キットのようなものです。予め このシステムを TaleWorlds Entertainment (TW)社のサイトから入手しておき、別途 Python 言語エンジンを用意すれば、疑似コンパイルして Native と(ほぼ)同じ .txt ファイル群を生成できます。ただし 3D モデルや音声などは MOD 開発システムで扱いません。だから最初は Warband の Modules フォルダ下にある Native フォルダを同じ Modules 下に(つまり Native のきょうだいになるように)丸々コピーして自分の独自 MOD の名(例えば mymod とか mod1)に改名しておき、そこへ .txt を上書きするとよいでしょう。これで自分が開発中の MOD を起動メニューで選択してプレイできるようになります。後は自分の MOD が意図した動きになるようソース・コードを少しずつ変更していき、.txt 群を生成する度にその独自フォルダへ上書きし、動きを確認して仕上げていきます。
一方、コード以外の部分、つまり 3D モデル、表面のテクスチャ、音声などの作成は外部のツールを使います。例えば 3D モデル周辺の情報は OpenBRF Redux(またはオリジナル版 OpenBRF)という専用ツールで調整して .brf ファイルに統合し、MOD の Resource フォルダに置きます。全体の地形(ワールド・マップ)の 3D は map.txt という名で各 MOD のフォルダに置きます。本文ではプログラミング経験のハードルを下げようとしてか簡単そうに表現していますが、決して甘く見てはいけません。たとえ職業プログラマとして様々な言語で何年も何万行もコーディングした経験があって「自分は人並み以上」と思っている人(あるいはチーム)でも、テストやバグ管理(プロジェクト管理)の手法がアマチュアだと、MOD リリース後に指摘されるバグも潜在バグも増えていき、いつまでも収束しません。そうなると開発者の気づかない所でユーザの不満が蓄積していき、ユーザは去り、その MOD は短命で終わるでしょう。MOD 開発者、バグ追跡者、テスターとして踏み出そうとする前に、ご自分(たち)が「問題に気付く能力」に長けているか自問することをお勧めします。
訳注: 「¥」について。
この web 文書を web ブラウザで見た時に、日本語版 Windows のディレクトリ(パス)の本来の区切り「¥」がバックスラッシュで表示される箇所があるかもしれません。読み替えて下さい。
で、M&B では modding で何がどうなるの?
それを理解するには、プログラミングの基本的で簡単な概念をいくつか理解する必要があります。 まず、Mount&Blade の下(Warband なら「Mount&Blade Warband」などの下)の Modules フォルダを開いてみて下さい。ゲームに初めから同梱されている Native という MOD のフォルダと、あなたが既にダウンロードしてプレイしたかもしれない MOD のフォルダがあります。
Native フォルダの中を覗いてみて下さい。大量のテキスト・ファイルといくつかのフォルダがあるでしょう。テキスト・ファイル、例えば presentations.txt を開いて、少し下にスクロールします。何だかよくわからないですよね。所々にあるテキストを除くと、数字の羅列です。これはゲーム本体(エンジン)が読み取る情報であり、完成した MOD の姿なのです。 (訳注: 以下 presentations.txt の冒頭は訳者が追加。)
presentationsfile version 1
49
prsnt_game_credits 1 53 2
-60.000000 21 2133 2 144115188075856399 -1 2133 (後略)
-61.000000 228 2071 1 1224979098644774912 2124 (後略)
prsnt_game_profile_banner_selection 0 53 2
-60.000000 44 2124 1 1000 2320 2 1 216172782113785646 (後略)
MOD を作るには、これらのテキスト・ファイルを手で直接編集することもできますが、それだと うんざりするほど退屈で、間違いが起きやすいです。私のアドバイスとして、それは やめたほうがいいです (訳注: txt 編集にも利点はあります。他ページで紹介します。)。もちろん、私も最初の頃はそうしていました(MOD 作成のためではなく、自分用にウーバー統計を得るためだったかな...、ええと)。別の方法として、「モジュール・システム」(MOD 開発システム)を使うやり方があります。それは、プログラミング言語 Python で書く (訳注: ただしリストとタプルで疑似命令を並べるだけの) 一連のスクリプト・ファイルです。上述の .txt と違い、人にもわかる言語で、出てくる数字は ずっと少ないです! モジュール・システム(私は略して ModSys と呼びます)で あなたが いじるソース・ファイルには拡張子 .py が付いています(つまり Python のソースプログラムです)が、99.99% ほとんどの場合には Python 言語を意識する必要はありません(そう、もちろん Python を理解しておいたほうが、複雑な処理に対処できます)。ModSys を使ってあなたが書くべきは、Python より簡単なもの、一連の「命令」(operations)だけです。「命令」を並べたソース・ファイルを変更したら、Python 言語エンジンでコンパイル(翻訳)し、ゲーム本体が理解可能な上述の .txt ファイル群を生成します。
(訳注: この訳では operation を「命令」と訳します。理由は、記述や処理結果がアセンブリ言語(機械語/マシン語)の書式やアセンブル結果(数字の羅列)とよく似ているからです。現に この文書の 「エラー」のページ にはゲーム・エンジンが OPCODE という語を表示する例があります。これはパソコンが出まわる以前からある用語で、アセンブリ言語の文脈で使われてきました。従って、この訳では、ソース・コード内に書く命令名に相当するものを「ニーモニック」、コンパイル後の .txt に現れる命令コードを「オペコード」、引数相当を「オペランド」と訳す場合があります。馴染みが無いかたは、x86 アーキテクチャや いわゆるマイコンなどの「命令セット」を検索して調べてみて下さい。MOD 開発システムで 命令名とオペコードを定義しているファイルが header_operations.py で、有志がコメントなどを拡張した版のほうが便利です。なお、ゲーム中にプレイヤーが戦場でファンクション・キーを使って兵に出すのも「命令」(order)なので、混同しないようにして下さい。以下、module_presentations.py の冒頭も訳者が追加。一番深い所に並ぶタプル(小括弧)内の assign や store_trigger_param_1 などが命令です。それらを疑似コンパイルしてできたのが上述の .txt ファイルで、例えば 2133 が assign 命令のオペコードです。)
from header_common import *
from header_presentations import *
(中略)
presentations = [
("game_credits",prsntf_read_only,mesh_load_window,[
(ti_on_presentation_load,
[(assign, "$g_presentation_credits_obj_1", -1),
(assign, "$g_presentation_credits_obj_2", -1),
(assign, "$g_presentation_credits_obj_3", -1),
(中略)
(assign, "$g_presentation_credits_obj_9_alpha", 0),
]),
(ti_on_presentation_run,
[
(store_trigger_param_1, ":cur_time"),
(set_fixed_point_multiplier, 1000),
(presentation_set_duration, 1000000),
(try_begin),
(this_or_next|key_clicked, key_space),
(this_or_next|key_clicked, key_enter),
M&B の この言語体系には、決まった名前がありません。私はこれを Mount and Blade 言語 - MABL(Mable のように「メイブル」と発音)と呼んでいますが、多くの人は M&B スクリプトという呼び名を好むようです。つまり、どうでもよいのです。「Ni(にいっ)!」って呼んでもいいし、それでも通じるでしょう(「植え込み」が手元にあるなら...笑)。(訳注: モンティ・パイソンによる King Arthur にちなんだパロディ映画 "Monty Python and the Holy Grail" (1975 年)。The Knights of Ni が、山道で にぃにぃ言いながら、通行料として「植え込み(shrubbery)」を要求してくる。)
オーライ、わかった。じゃ、手持ちの MOD を改造するだけなら どうすれば?
それは あなたが何をしたいかによります。内容を微調整したり、新しい物品や部隊を追加したり、既存のものを変更したりする場合、そして それが主に私的利用目的なら、テキスト・ファイルを編集する方法もあります。それを手作業(非推奨)でするか、または「非公式編集ツール」ボードにある相応の MOD 作成アプリケーションを使います。でも、もっと本格的なプロジェクトを思い描いているなら、ModSys でソース・コードを書いていく必要があります。ModSys を使ってコンパイルすると、それまで .txt ファイルに手で加えてあった変更が上書きされて失われてしまうので、気を付けて下さい。
私見では、modding は、コーディング、モデリング、テクスチャリングという 3 つの主要カテゴリに分かれます。コーディング(出来栄えを左右するスクリプト、つまりコードの記述、新しいゲーム機能の作成)は、ModSys を使った作業を意味します。モデリング(物品や家といった目に見える物体の 3D モデル、つまり形状の作成)には ModSys がほとんど 関与しません。ただし、ゲームに それらの物を追加するには、ModSys がどのように機能するかを知っておく必要があります。テクスチャリング(2D 画像を使って 3D モデルに実際の外観や質感を与える作業)は、モデル作成者が兼ねることが多いです。絵、つまり 2D アート(ゲーム・エンジンも使います) を描く作業も、大枠ではテクスチャリングに分類されます。そこでも ModSys の知識は必須ではないものの、推奨されます。
その ModSys のことについて、もっと深入りしてくれる、って期待していいのかな。
その通り。私はプログラマで、3D モデリングのスキルは...うーん、せいぜい中級の手前ぐらい。テクスチャリングのスキルは最小限です(申し訳ないことに、マウスでの描画は不得意です。紙に手で描くのは そこそこ できますが、マウスでは からっきしです)。だから、私はコード屋として、コーディング面に より焦点を当てるつもりです。もちろん、誰もが知っておくべき基本的なことから書きます。 (訳注: このページの採録先の Lumos 氏の発言であって、web 文書全体をまとめた Eärendil Ardamírë 氏の発言でないことに注意。)
プログラムとか やりたくないんだけどなぁ。どうしたらいい?
わかります。でも、いつか役に立つかもしれないことを学んでおくのもいいかも。コード以外の部分を作るのための外部ツールをお探しなら、3D モデルを .obj/.smd 形式でエクスポートできるものや、テクスチャ用に .dds ファイルを編集できるもの(または DDS コンバータ)を見つける必要があります。 (訳注: 必要なファイル形式について詳しくは、OpenBRF または OpenBRF Redux のメニューの「インポート」でメッシュやスケルトンのファイルを開こうとしてみたり、Swyter 氏のマップ調整ツール cartographer で地形ファイルを開こうとしてみると判ります。.dds はテクスチャ用で、後述される GIMP でも扱えます。)
3D モデリング用のソフトウェアには、フリーウェアなら Wings3D や Blender などがあるし、有料なら 3DSMax、Maya、ZBrush などがあります。テクスチャ作成用のソフトウェアには、フリーウェアなら GIMP や Paint.NET など、有料なら Photoshop などがあります。モデリング/テクスチャ作成に関して、ゲーム固有のことをもっと理解するには、TW 社のフォーラムにユーザが挙げたチュートリアルを見てみて下さい。スタートには うってつけです。
このページを読み切りましたね、素晴らしい。もちろん、隅々まで読みましたよね。
じゃ、ビールでもどうぞ...まだだったらね。
- Lumos