アイテムの自作

イチからアイテムを自作して自分のMODへ組み込むまでの説明です。

記載されている内容は、手順がおかしかったり、作業効率が悪かったりするかもしれません。
変な箇所がありましたら、是非とも加筆修正してください。



はじめに


このページで解説する方法では、馬や服といった、可動する部分があるアイテムは作れません。
主に武器や兜といったアイテムの自作方法となっています。

2chの過去ログと、公式フォーラムの該当トピックを読めば、このページを読む必要はありません。
事実、これを書いている人は、なんの知識も無い所から、下記を参照しつつ自作したアイテムを反映することが出来たからです。

2chの過去ログ - [【海外シェアRPG】Mount&Blade 6馬力【戦闘はFPS?
公式フォーラムの該当トピック - [HOW TO ADD AN ITEM TO MY MOD FROM SCRATH. FULL PROCESS!!!

用意するもの


Mount&Blade本体・ModuleSystem・アイテムを組み込みたいMOD・Python

[MODの開発-環境の準備]を読んで、MOD開発の環境を準備してください。

できれば、その環境下でアイテムの移植を試して成功していると、
以降の説明がスムースに理解できるかと思います。

Wings 3D

3Dモデリングツールでアイテムを造形します。
このページではWing 3Dというソフトを使います。
http://www.wings3d.com/

BRFEdit

自作したアイテムを、Mount&Bladeのデータ形式であるBRFファイルに変換する為に必要です。
http://forums.taleworlds.net/index.php/topic,8771.0.html

ペイントツールとDDSファイルを扱うツール

自作したアイテムのテクスチャを描いたり、それをDDSファイルに変換するツールが必要です。
このページではGraphicConverter3というソフトを使います。
http://homepage1.nifty.com/open-prog/

ペイントツールはBMPを加工できればなんでもいいです。

また、テクスチャ加工に関する説明は下記ページも併せて参照下さい
テクスチャを加工する - http://www5.atwiki.jp/mountandblade/pages/102.html

テキストエディタ

UTF-8形式で保存できるテキストエディタが必要です。windows付属のnotepadではダメです。
有名どころだと、秀丸エディタやTeraPadなどがあります。

Wing 3Dでアイテムを作る


まず、Wing 3Dを使って、自分の作りたいアイテムをモデリングします。


アイテムの造形


例として、簡単な刀のようなものを作ってみました。


###後ほど、この刀の作り方もupしたいと思ってます

画像の、赤と青と緑の線がそれぞれ、X(赤=幅)、Z(青=奥行き)、Y(緑=高さ)と覚えます。
Mount&Bladeのキャラクターは、赤線の方向へ向かって武器を振るので、
上記のような片方に刃がついている武器を作る場合は、向きに注意してください。
反対に刃を付けると、常に峰打ち状態になるので、それはそれで面白いですが。

グリッド線で書かれた床のすこし上の辺りから刃の部分が始まると、
キャラがいい感じに剣を持ってくれます、が、この辺は後々微調整を繰り返すことになります。

そして、この刀は刃・鍔・柄の3つのオブジェクトで構成されています。
バラバラにするとこんな感じです。


右側に表示されているものは

メニュー「Window」→「Outliner」で表示できます。
各パーツにそれぞれ「ha」「tsuba」「tsuka」と名前をつけてあります。


テクスチャのマッピング


先ほど作ったモデルの各面に貼り付けるテクスチャのマッピングを考えます。

例の刀だと刃、鍔、柄という、3つの部位を繋いで造形してあるため、
これをひとつひとつマッピングしていく作業を行います。

  • 刃の部分を選択し右クリック→「UV Mapping」→「Direct」を選ぶ

画面の左半分に”AutoUV Segmenting:xxx”というウインドウが表示されます。
このウインドウには、先ほど選択した刃のパーツだけが表示されています。

  • 刃の片面だけを選択し右クリック→「AuvChart1」を選ぶ
  • 選択を解除する(スペース)


刃の片面だけが、AuvChart1の色に染まったのを確認します。
後は同じやりかたで、裏側の面にAuvChart2、峰の部分にAuvChart3と割り当てていきます。
割り当てた後、一旦選択を解除しないと上書きされてしまうので注意してください。
スペースキーで選択解除できるので便利です。

全ての面のマッピングが終了したら

  • すべての選択を解除して右クリック→「Continue」→「Unfolding」

すると、画面右半分に”AutoUV:xxx”というウインドウが表示されます。


右半分のウインドウに表示されているものがテクスチャです。
今はまだテクスチャが空ですので、ブランク用の背景画像が表示されています。
一旦選択を解除して、右半分のウインドウにある各パーツをクリックすると、
選択したテクスチャがどの部分に貼られるのかが確認できます。
また、このテクスチャはそれぞれ、移動したり拡大縮小することができます。

このようにして、鍔・柄の部分も同じようにマッピングしていきますが、
鍔の部分をUnfoldingした時に、以下のような感じにドデカくマッピングされたかと思います。


マッピングの仕方によってテクスチャにマップされた形状は異なりますが、
そのままだとこんな感じに目一杯マッピングされているかと思います。

この場合、右クリック→「Scale」→「Uniform」を使って縮小し、
それぞれのパーツを選択してドラッグして整理してください。
先ほど、テクスチャの左端は刃の部分をマッピングしたので、競合しないよう右下の辺りに移動しました。


そして柄の部分も、マッピングして縮尺を変え、他と競合しない右上に移動しました。


以上、すべてのパーツのマッピングが終了しました。
一旦テクスチャのウインドウを閉じ、

メニュー「Window」→「Outliner」をクリックし、
Outlinerウインドウを表示させますと、以下のようになっていると思います。


次に、3つのパーツ全てを選択して
右クリック「Combine」をクリックし、一旦全てのパーツを一つにします。

その後、右クリック「UV Mapping」→「Direct」をクリックします。
すると、下記のように、先ほどの3つのパーツのマッピングが一つになったものが表示されます。


この状態のまま、テクスチャのほうを右クリックし「Create Texture」をクリックします。
”Draw Option”というウインドウが表示されますが、どこも変更せずにOKをクリックします。

これで、UVウインドウを一旦閉じ、Outlinerウインドウを見てみると、auvBGの画像が変わっています。


auvBGを右クリックし「Rename」で”my_katana"と名前を変え、
名前を変えたmy_katanaを右クリックし「Make External...」をクリックします。

すると、テクスチャデータをBMP形式で出力することが出来ます。
適当な所へ保存します、保存先には”my_katana.bmp”という画像が出力されているはずです。

これでマッピングは終了です。


BMPを加工する


先ほど保存したBMPを加工します。

BMPを扱えるペイントツールならなんでも構いませんが、
レイヤーが使えて、前面になっている画像を透過させて下のものが透けて見える機能があると便利です。
以下のように加工してmy_katana.bmpを保存しました。


変更したBMPをテクスチャに反映する


Wings 3Dへ戻ります。

メニュー「Window」→「Outliner」をクリックし、Outlinerウインドウを表示させます。
そして「my_katana」を右クリックし「Refresh」をクリックします。

これで、先ほど加工したbmpでテクスチャがリフレッシュされ反映されました。


メニュー「view」→「Show Edges」をクリックすると、パーツの線画が消えますので、
この段階でテクスチャに違和感のある箇所が無いかを確認しておきます。
修正したい場所が見つかった場合、再度ペイントツールでmy_katana.bmpを修正して
Wings 3Dへ戻って「Refresh」し確認・・・と何度も繰り返し、微調整していきます。

問題が無くなれば、これで”my_katana”の完成ということになります。

OBJファイルとして出力する


Wings 3Dは、そのまま「Save」を選んで保存すると.wingsという拡張子のデータになります。
これはこれでセーブしておきますが、
BRFEditで読み込めるデータ形式はOBJ形式なので、OBJ形式で出力する必要があります。


メニュー「File」→「Export」→「Wavefront(.OBJ)の右端の四角」をクリックします。
すると、以下のようなウインドウが表示されます。


このウインドウ内で注目するのは、赤い四角で囲んだ部分です。
  • 「Swap Y and X Axes(Y軸とX軸の交換)」にチェック
  • 「Import scale(読み込み時の大きさ)」の数値が10.0
  • 「Export scale(出力時の大きさ)」の数値が0.1

Swap Y and X Axesにチェックを入れていないと、
ゲームに登場させた時に表示がおかしくなります。

# ImportとExportの大きさについてですが、
# Wings 3Dで作ったオブジェクトを、最初から小さく作れば、
# Exportする時に縮めなくても良いような気がするのですが
# 自分は大きい状態で作業して、最後に縮めるという方法で慣れてしまったので
# このように説明しています。実際、このmy_katanaもかなり大きく作ってあります。

残りの項目はデフォルトのままで大丈夫かと思います。
「ok」をクリックし、保存先を指定します。
これで、my_katana.objというファイルが出力されます。

DDSファイルを作る


Wings 3Dで出力したmy_katana.bmpをDDSに変換して出力します。
DDSファイルへの変換方法はテクスチャを加工するなどを参照して下さい。
DDSファイルは名前を「my_katana.dds」として、
自作武器を導入したいMODのTextureフォルダの中へ入れておきます。

BRFファイルを作る


いよいよBRFファイルを作ります。
BRFEdit.exeを実行して下さい

Textureデータを作る


手順は以下の通りです

1.「Tex」タブを選ぶ
2.「Add」ボタンを押す、"default_texture.dds"が追加される
3."default_texture.dds"を選択し、nameを「my_katana.dds」に変更する
4.「Set」ボタンを押す

以上でTextureデータが完成します。簡単!

この作業は、次に解説するOBJファイルのインポートの後に行っても良いですが、
MeshやMaterialを読み込む前にテクスチャを作っておかないと
BRFEdit上の表示がおかしなこと(テクスチャが真っ黒)になり、
その後テクスチャを指定しても表示が直らなかったりするので
先にテクスチャを設定しておいたほうが精神衛生上良いかと思います

OBJファイルをインポートする


Wings 3Dで作ったmy_katana.objをBRFへインポートします。
この操作で残りの"Mesh"と"Material"が完成します。

手順は以下の通りです

1.「mesh」タブを開きます
2.「Import」ボタンを押し、my_katana.objを選びます
3.オプションダイアログが出ますが、どこも変更せず「ok」ボタンを押します
4."Multi-Mesh?"というダイアログが出ます。「いいえ」を選びます

4.で出るダイアログは、今回のmy_katanaのように、
複数のオブジェクトで形成されたOBJファイルをインポートする際に出るものです。
ここで「はい」を選ぶと、刃、鍔、柄の3つのオブジェクトが
それぞれ別々のメッシュとしてインポートされます。

これで、Meshに"my_katana"が追加されました。
右側に作ったmy_katanaが表示されていれば成功です。

Matタブを選んで、3つのMaterialがあることを確認します

実はこれで終わりです、簡単!

保存とmodule.iniへの追記


「save」を選び、名前を「my_katana.brf」として、
自作アイテムを導入したいMODの「Resource」フォルダへ保存します


このようなダイアログがでます。

「はい」を選ぶと、module.iniへこのBRFファイルを自動的に定義してくれます。

なにかの理由により、手動で追記したい場合は「いいえ」を選び、
module.iniの末尾へ、以下の行を追記します。
load_mod_resource = my_katana

武器データを追記する

module_systemのアイテムデータが記されているmodule_items.pyを編集して
自作した武器を自分のMODに登場させます。

module_items.pyの編集

作った武器をmodule_items.pyへ記述して、自作武器が自分のMODに登場するようにします。

module_items.py をテキストエディタで開くと、大部分が[ ]で囲まれた行で構成されているのが分かると思います。
この[ ]の1行1行が、それぞれのアイテムのデータとなっています。

ここで、アイテムデータの書式などを考えると頭が痛くなってきますので、
とりあえずは、自分の武器と近しい既存の武器のデータをコピーして流用するといいです。

my_katanaはカタナなので、なんとなくファルシオンなんかが近いかな~
ということで、module_items.py内を「falchion」で検索しますと、この1行を見つけることができます。

["falchion", "Falchion", [("falchion",0)], itp_type_one_handed_wpn|itp_merchandise|itp_primary, itc_scimitar|itcf_carry_sword_left_hip, 105 , weight(2.5)|difficulty(8)|spd_rtng(96) | weapon_length(73)|swing_damage(30 , cut) | thrust_damage(0 , pierce),imodbits_sword ],

これをコピーしてmodule_items.pyの最後の行の”]”の上の行に追加し、以下のように変更します

["newitem1", "My katana", [("my_katana",0)], itp_type_one_handed_wpn|itp_merchandise|itp_primary, itc_scimitar|itcf_carry_sword_left_hip, 105 , weight(2.5)|difficulty(8)|spd_rtng(96) | weapon_length(73)|swing_damage(30 , cut) | thrust_damage(0 , pierce),imodbits_sword ],

変更したのは、3つの項目だけです。
変更した箇所をそれぞれ説明します。
  • "falchion" → "newitem1"
    • これはアイテムIDです、newitem1としなくても、ユニークなIDであればなんでも構いません。
  • "Flchion" → "My_katana"
    • これはゲーム上で表示されるアイテム名です、カッコイイ名前をつけるべきです。
  • ("falchion",0) → ("my_katana",0)
    • これはメッシュ名を指定していますので、作ったBRFファイル名を指定してください。

これだけで、一応はmy_katanaをゲームに登場させる準備は整います。
しかしこのままでは形が違うだけでファルシオンと同じものですので、
後々、この項目をいじる必要がありますが、まあ一旦はこのままやってみましょう。

変更後、module_items.pyを保存する時はUTF-8形式で保存するのを忘れずに。

コンパイル

いよいよmodule_systemをコンパイルして、自分のMODを生成します。

コンパイルする

コンパイルはとても簡単です。build_module.bat を実行するだけです。
DOSプロンプトのウインドウが開いてなにかが行われた後に、自分のMODが出来上がります。

ゲーム上で確認する

コンパイルが上手く行けば、後はゲームを立ち上げて確認してみましょう。

私の作ったmy_katanaはこんな感じでした。

これを見ただけでも、様々な改善案が浮上します。
  • 普通、刀だったら両手持ちじゃない?見た目だけでファルシオンとなんら変わらない性能とか・・・
    • module_items.pyのmy_katanaの行を改変する必要があります。
  • 刃の幅が広すぎるし、反りが無くてストレート過ぎてカッコ悪くない?
    • Wings3Dでもう一度刃の形状を調整していく必要があります。
  • なんかテクスチャずれてない?
    • テクスチャに直しを入れましょう

こんな風に、トライ&エラーを繰り返して、自分の理想の武器を作ってみましょう。

自作の武器を振るって戦場に赴く快感を是非味わってください。