カスタムウェポンの作り方

TC:E カスタムウェポンの作り方

当コンテンツはM@TILDA氏が作成したマニュアルを元に作成しています。
こちらに最新のコンテンツがあります。

1.はじめに

本稿では、私、M@TILDAがTrueCombat:Elite内で遊ぶためのオリジナルのカスタム武器の作製方法を、「重要な所はぶっ飛ばして」、「微妙な所だけ」、「なおかつてきとーに」解説していきます。残念ながら現状では説明不足のために、まったくの初心者がこのチュートリアルを読んでも作製はできないでしょう。今のところは、ある程度作製のための知識を持った人のためのアドバイス程度の内容となります。

私自身、「Mod製作」を完璧にマスターしているわけではありません。当然、本稿の内容の中には誤記や私の勘違いが含まれている可能性はあります。あるいは、より良い方法や手段もあるでしょう。その点を承知して、ここに書かれていること全てを鵜呑みにせず、自分で考え、学び、探求していって欲しいと願っています。

また、本稿の内容は不十分なだけでなく、文章や表現についても至らない点があるかと思います。どうかご容赦下さい。

使用許諾契約書

C:\Program Files\Wolfenstein - Enemy Territory\tcetestの中には「EULA_TrueCombat_Elite.txt」というファイルがあります。これが使用許諾契約書です。私たちゲームユーザーは、TC:E開発者と契約を交わすことによって、はじめてTC:Eをプレイしていいのです。これを「説明書」か何かのように考えて読まなかったりすると大変なことになりかねません。ちゃんと読みましょう。

この使用許諾契約書内には、カスタムファイルを作るに当たって、大事なことが書かれています。そして、カスタムファイルを作るには、いくつかの制約を守らねばなりません。私がいい加減に意訳して、それを読んだあなたが勘違いして問題を起こしたら、それでも、それはあなたの責任になります。自分で読んで規約を遵守して下さい。

必要なソフト

本稿では、無料の3DモデリングソフトGmaxによる作製を行います。ちなみにMilkshape3DやBlenderなどのソフトでも作製できますがここでは解説しません。

まずGmaxを入手しましょう。

Gmax
ダウンロードの手順、インストール方法、は自分で調べて下さい。また、TC:Eでは主にmd3形式の3Dモデルが使われています。GmaxでTC:Eのモデルを扱うために、以下のプラグインをダウンロードしなければなりません。
MD3Importergmax
フォルダ内の\scripts\startup内に解凍して下さい。
MD3Exportergmax
フォルダ内の\plugins内に解凍して下さい。

基本的にはこれだけあれば作れますが、いくつか補助ツールが必要になるかもしれません。他のツールに関しては必要な際、随時説明します。

まずはGmaxでmd3形式のモデルを開く方法から説明します。

まずはGmaxを起動します。画面右側に左の画像のようなものがあるので?のボタンをクリックして下さい。次に現れた項目の一番下に?「MAXScript」があるのでクリックして下さい。

あまり記憶にありませんが、確か最初は?のRunScriptで、解凍したMD3Importarを指定してやったような記憶がありますが、多分気のせいだと信じています。?の所に「Quake3DMD3Importer」と出るので選んで下さい。多分Enterキーを押してあげればいいかと思います。

するとMD3Importerが下に現れます。

一応習慣として?Tagsの項目をLoad Allにしてから、?の「import MD3」をクリックすれば、ファイル選択画面が現れます。

MD3形式のエクスポートは上のメニューバーの「File」→「Export」でできます。ファイル選択画面で、ファイルの種類をmd3形式にしてから選択して下さい。エクスポートすると「エクスポート画面」が現れますが、その説明については別項で解説します。

ファイルの構造を理解する

インストールしたGmaxを放置して、カスタムファイルを作製するための予備知識を説明します。まずはC:\Program Files\Wolfenstein - Enemy Territory\tcetest内にあるpak2.pk3を、どこか作業のしやすい場所に解凍しましょう。

pk3形式は意味不明な拡張子ですが、その正体はZIPファイルなので普通に解凍できます。私はD:\custom\officialに置きました。このファイルはカスタムファイルを作る上では必要ありませんが、参考になるので、解凍しておいて損はないと思います。

また、興味のある方はC:\Program Files\Wolfenstein - Enemy Territory\etmain内にあるETの方のpak系列も解凍してみてもいいかもしれません。ちなみにTC:EとETのpak系列を全部解凍するとかなりの容量になるので、HDDに余裕が無い人はやめた方がいいでしょう。

これらの公式pakの中にはゲーム内で使用されるモデル、アニメーション、テクスチャ、サウンドなどなど、ありとあらゆるものが入っています。つまり、この中身をいじることによってカスタムファイルを作るわけです。これらの公式pakは、以下のような構造になっています。

  • pak系列
    • custom
    • maps
    • models
    • scripts
    • sounds
    • その他たくさん

基本的にカスタムスキン、カスタム武器などを作るだけなら上記の5つのフォルダさえ覚えておけば十分です。興味があれば他のフォルダも覗いてやって下さい。

Custom
武器の設定ファイルなどが入っています。
Maps
マップに関するものが入っています。
Models
各種モデルやキャラクターのスキンの設定ファイルなどが入っています。
Scripts
ゲーム中での画像ファイルを特殊効果を加えて表現するための設定ファイルが入っています。
Sounds
音。

より詳しい説明は、別項で解説します。

2.カスタムスキン

オリジナルカスタムファイルを作ろうと思った時、もっとも手っ取り早いのが、カスタムスキンの作製です。テクスチャを書き換えるだけなのですが、詳細については省略します。

3.モデルの作製

Gmaxによるモデル作製方法は省略させていただきます。検索すればいくらでも見つかります。

4.テクスチャの作製と貼り付け

作製したモデルにテクスチャを貼る方法を説明します。

まずはテクスチャの作製からです。例えばインターネット上で武器の画像を探してきても、それはモデルを一方向から捉えた画像にすぎません。そのため、画像に載っていない部分の面のテクスチャを用意する必要があります。また、モデルは3Dなので、3Dの面上にテクスチャを貼るためには、3Dモデルの展開図が欲しいところです。ペーパークラフトの逆です。

3Dモデリングソフトには面の展開機能がついているものもありますが、Gmaxにはありません。md3モデルを一度他の形式でエクスポートして、展開機能のついたソフトで展開し、展開図を画像データとして取り込むのもひとつの方法だと思います。Gmaxだけで何とかするなら、銃の横視点のviewなどをスクリーンショットで撮って、それを基に画像編集するのが簡単かと思います。

また、画像のサイズに関しては、基本は1024×1024。小さめなら512,256,64,32と小さくしていって下さい。正方形でなくても、512×256というような長方形でもOKです。

さて、立派なテクスチャが準備できたところで、さっそくモデルに貼ってみましょう。テクスチャを貼りたいオブジェクトを選択して、Material Editorを開きます。

以下の窓が現れます。

「New」をクリックすると以下の窓が出るので、standardを選択して「OK」。

下のボタンを押して下さい。

「Bitmap」を選択して「OK」。

これで、テクスチャの選択画面が出ますので、用意したテクスチャを探して下さい。

選択するとMaterial Editorが下のように変わるので、以下の二つボタンを押して下さい。

すると、おそらく選択したオブジェクトに滅茶苦茶にテクスチャが貼られると思います。

単一色のテクスチャでもないかぎり、そのままでは使えないでしょうから、どこの面にどこのテクスチャを貼るか決めなければなりません。

まずは、テクスチャを貼りたい面をctrlキーを使っていくつか選択し、「modifiers」→「UV coodinates」→「UnwrapUVW」を選択します。この時、可能な限り選択する面は大きい方がいいです。理由は後で説明します。

右側の「EditableMesh」の上に「UnwrapUVW」という項目ができるので、parametersにあるEditボタンを押します。すると「EditUVW」という窓が現れてテクスチャと白い四角(頂点)と線が表示されます。選択した面が多すぎると、おそらく最初は何がなんだかわからない状態で表示されると思いますが、下のviewと上のEdit画面を見比べて、テクスチャを合わせていくりかありません。

頂点を選んで移動させる際、本来くっついているはずの頂点が外れることがあります。「EditUVWs」画面の上部分に「Target weld」というボタンがあるので、本来くっついているはずの頂点はTarget weldを使って溶接します。頂点と頂点をクリックすれば接合します。

テクスチャの貼り付けに満足したら、右側の「EditableMesh」の上に「UnwrapUVW」という項目があるので、それを右クリックして下さい。下の方の「Collapse All」を選べば、テクスチャの貼り付けが完了します。

また、UnwrapUVWする時、あまりに頂点が滅茶苦茶になっていて、どれがどの頂点なのかわからなくて困るかもしれません。そんな時は「modifiers」→「UV coodinates」→「UVW Map」を選ぶと下のようになります。

平らな面であれば、parametersの項目のBoxあたりを選択すればよいかと思います。上記同様、「UVW Map」を「Collapse All」して、もう一度「UnwrapUVW」をしてみて下さい。多少マシになっていればいいですが、それでもダメなら、ちょっとこの辺りをいじって扱いやすいようにするしかありません。

同様の要領で全ての面にテクスチャを貼り付けます。

ここで一度エクスポートに関して説明します。エクスポートする時は「File」→「Export」で、ファイルの種類を「Quake?(*.md3)」形式にします。すると以下の窓が現れます。「The Following Frames」はアニメーションなどを含む時に、何フレームエクスポートするのか、ということです。モデルだけであれば「0」(半角)を入れて下さい。ここに何も入れないとエクスポートは失敗します。

「Export Now」でエクスポート完了です。しかし、もしかしたら以下のようなエラーに出会うかもしれません。

「box01という名前のオブジェクトは、UVmap時にテクスチャで指定された頂点とモデルの頂点が一致していない」という事を言っています。

(以下の文章は私の推論であり、間違っているかもしれません)

どういう事かというと、先ほど、UnwrapUVWでテクスチャを貼り付ける際、下の図のように、モデルでは同じ頂点である頂点を、テクスチャの事情で分割しなければならない時があったかもしれません。

モデルは3Dで、テクスチャは2Dなので、基本的にはどこかに頂点の切れ目ができるはずです。円筒を展開すれば必ずどこかの円周部分を切らなければなりませんよね。(円筒に切れ目なくテクスチャを貼る方法もありますが、省略します)本来同じ頂点なのに、テクスチャ時には二つにわかれているので、エラーが出ます。上の方で、UnwrapUVWの際、テクスチャを貼る面は可能なかぎり多く選択した方がいいと言ったのは、面を細かく分けて選択してUnwrapUVWすると、その面と面の間に切れ目ができてしまうからです。

そこで、モデルの頂点はどこかに切れ目を用意しておかなければなりません。切れ目は頂点と頂点がまったく同じ位置にあって、しかし別々の頂点である状態です。この状態は、面と面が結合しているわけではないので、例えば円筒の場合、切れ目部分だけ丸みがなくなったりします。できるだけ”角張っていても良い場所”を境にしましょう。画面右側の「selection」項目を「vertex」にして、「Edit Geometry」項目の「break」で指定した頂点を分割できます。

ただし、サイコロのような箱なら切れ目はひとつでいけますが、複雑な形状になればなるほど、切れ目は沢山必要になります。もちろんそれは「完全な平面に展開しようと思ったら」そうなりますが、「面を歪ませて展開すれば」少ない切れ目でできます。もちろん面を歪ませて展開した部分は、そのことを考慮して歪んだテクスチャにしておかなければ、貼った時に歪みます。

ちなみに私は、このエラーを無視します。上記のようにいちいち切れ目とかを考えたりしません。面倒なのです。上記のエラーが出ても、一応エクスポートはできます。ただし、そのmd3モデルはインポートすることができません。上記のエラーによって半分壊れている状態だからです。

そこで、無理矢理直します。

以下のNpherno's>
右一番上の項目がパーツの名称、その下がテクスチャのパスです。もしもこのテクスチャのパスに何も表示されなければ、そのパーツには何もテクスチャが指定されていないことになります。必要であればそこにパスを打ち込みましょう。パスは「models」から始まり、私のコルトパイソンの場合、「models/weapons2/colt_python/pythonview_main.jpg」と言うようになります。

画面左にはモデルのviewがありますが見にくいです。

インポートしたら、「all」を押し、それから「None」を押します。バグ回避だか何だかのための作業だそうです。その後、「Export Objects」します。

すると、こんな窓が現れます。Internal Name欄にはmd3モデルのパスを入力します。ここも「models」から始まり、私のコルトパイソンの場合「models/weapons2/colt_python/python_view_main.md3」などというようになります。

以上の作業によって、md3モデルをGmaxでインポートすることができるようになります。

理屈としては、Gmaxで吐いたエラー部分の頂点を、MD3Compilerが自動で分割してくれるからです。Gmaxでインポートすると、おそらく、いくつかのモデルの頂点が分割され、面が分かれているでしょう。

なめらかな面にしたい頂点が分割されて角張っている時は、「weld」を使ってモデル、UnwrapUVWでのテクスチャ両方の頂点を接合する必要があります。

何はともあれ、テクスチャの貼り付けは完了です。

5.アニメーションの作製

アニメーションとは、一人称視点時における武器のアニメーションです。三人称視点におけるアニメーションはmdm形式で設定されているので、Gmaxでは変更したり作製したりすることはできません。この設定方法に関しては付録1でちょこっと解説します。

TC:Eにおけるアニメーションは、頂点ひとつひとつにアニメーションをつけることができます。ただ、頂点そのものを直接ひとつひとついじるような作業をすることほとんどはないでしょう。基本的には、モデルそのものの移動、回転で作製することができます。

公式pak内にある武器のアニメーションファイルは武器の名前の後に「_view」だけがついているmd3ファイルです。Berettaならberetta_view.md3です。アニメーションファイルが無い武器も存在しますが、それは別の武器のアニメーションファイルを使用しているからです。

試しにM3S90のアニメーションであるm3s90_view.md3をGmaxでインポートしましょう。インポートする時に「Tags」を「Load All」にチェックを入れるのを忘れないで下さい。「Tag」というものが表示されません。

画面上には、両腕、両手のモデルと三角形のTagが6個あります。これらのtag部分には、後で「weapファイル」というものの中でmd3ファイルを指定してあげます。tag_mainにはm3s90_view_main.md3、tag_slideにはm3s90_vew_slide.md3が置き換えられます。

tagを使うことで、異なる武器でも同じアニメーションを使い回すことができるので経済的なのです。

あるいは、tagを使うことによって、サイトスコープや、サイレンサーなどオプションパーツを使い回すこともできます。tagはモデルを使い回すためのマークです。

tagが三角形の形をしているのは、tagにも向きがあるからです。三角形の鋭角側が正面です。また、tagはMD3をImportする時画面の下に「CreateNewTag」というボタンがあり、それを押すと原点に新しいtagを作製することができます。

tagの理屈がわかったところで、インポートしたm3s90_view.md3の腕モデルやらtagを選択してみましょう。そうすると、Gmax画面の下に青色のマークが現れます。

これはそのフレームにアニメーションが設定されていることを現します。

上のアニメ再生ボタンを押すとアニメーションが再生します。左右のボタンを押せば前後のフレームに移動します。

また、その下の時計のようなマークのついたボタン「Time Configuration」を押すと、FPS(フレーム/秒)やアニメーションの数を指定できます。上記の図のような初期状態では、アニメーションが早すぎたり、アニメーションのない部分が多すぎて、一周するまでに時間がかかります。適度な数字に変更しましょう。

ところで、もしもあなたが作製した武器がこれらの既に存在するアニメーションファイルで表現できるなら、素直に使いましょう。作製した(weaponname)_view_main.md3のモデルの位置を、そのアニメーションで使われている武器モデルの位置になんとなくあわせればいいだけです。

さて、実際にモデルにアニメーション動作を付けてみましょう。m3s90_view.md3には既にアニメーションが付けられているので、消します。上記の青マークをマウスで全部囲んでデリートボタンで消去できます。少々処理が重くなります。

多分ボーンを作ってアニメーションを付けたりできるのでしょうが、その辺りの使い方はさっぱり知らないので、私が知っている方法で解説します。

すべてのパーツは当然独立しているので、ひとつひとつにアニメーションをつけていくのはナンセンスです。なぜならモデルとモデルの位置がずれるからです。やらなくてもわかります。

そこで、まずはモデルとモデルをリンクする作業からはじめます。

上にある「select and link」を押します。次に「何かの動きに連動させたいモデル」を選択し、その「何か」にドラッグ&ドロップします。それだけでリンク完了です。

とりあえずここではtag_mainとr_sleeveをr_handにリンクさせます。

普段使う移動・回転ツールで、r_handを移動させたり回してみたりすると、互いの位置関係を保ったまま、移動・回転ができます。逆に、tag_mainやr_sleeveを動かしてもr_handは動きません。リンクは一方向の関係になります。

次にやっとアニメーションです。

画像で説明するまでもなく、Gmax画面の下に「animate」というボタンが存在するので押します。これを押すと「アニメーションモード」に突入します。

アニメーションモードになると画面の縁などが赤くなります。

右のツールの、左から4番目の「motion」ボタンを選択すると、上記の画像のような項目が現れます。「PRS Parameters」の中のPosition、Rotationをクリックすると、右側に移動します。

または、アニメーションモードで、モデルを移動させたり、回転させると、それぞれの項目が右に移動します。

この項目はPosition、Rotationは両方ともクリックして右に移動させておくことを推奨します。理由は後で説明します。また、もしもアニメーション中に拡大・縮小を使うのならば、scaleも右に移動させなければなりません。

同時に、下のアニメフレームに青マークが出来ます。

これでアニメーションの動作がひとつできました。続いて第2フレームを作ります。

or

第2フレームに移行するには、上記のように、青マークの上にあるバーを動かしても良いですし、再生ボタンの右の「Next Frame」でもいいです。

第2フレームでも、第1フレーム同様に、Position、Rotationをクリックして青マークを作っておきます。そして、第2フレームのr_handを移動・回転させます。同様の要領で必要なアニメーションを、がしがし作っていって下さい。

さて、r_handのアニメーションがひととおり完成したら、次は他のモデルのアニメーションにとりかかります。例えばr_handに追従していたr_sleeveです。r_handとくっついてまったく同じ動きをするなら、別々のパーツに分かれている理由はありません。手首の回転がまったくないと不自然なのでちょこちょこいじりましょう。

r_sleeveはr_handにくっついて動きますが、それ自体にはアニメーションは設定されていないので、まだアニメーションの青マークはできていません。特に動かす必要がなくても、Position、Rotationをクリックして青マークを作っておきます。作らないと、厄介なことになります。

例えば青マークを作らずに第7フレームを移動・回転させてみて下さい。

第1~6フレームには青マークが出来ませんが、第1~6フレーム見てみると、動いていると思います。どこかの設定で変えることができますが、ひとつずつアニメを作っていかないと、勝手にアニメーションを補間してしまいます。

なので、特に理由がなければ何も動きがないフレームでも必ずPosition、Rotation、(拡大縮小するならscaleも)にチェックを入れておきましょう。

とりあえず、このような要領でアニメーションはできます。

また、最初に言ったように、TC:Eでは頂点ひとつずつをアニメさせることができます。

例えば、銃を撃つ時、引き金にかけた人差し指は動くはずです。こういったアニメーションは上記のモデル単位でアニメさせる方法では表現できません。

頂点単位で動かす方法は、アニメーションモードでモデル作製時のようにvertexを動かすだけです。

試しにどこかの頂点をひとつ選んで、移動させてみてください。アニメーションで見てみると、ちゃんと動いているはずです。

とりあえず以上の方法で、だいたいのアニメーションは作れるはずです。ただしキレイに作れるかどうかは、別です。Gmaxについて学びましょう。

また、エクスポート時には、The Following Framesの欄にアニメーションのフレーム数を入力するのを忘れてはいけません。フレーム数は「0-40」のように、ハイフンで繋いで下さい。「40」とだけ入力すると、40フレーム目だけがエクスポートされ、当然、アニメーションは動作しません。間違っても全角にしないように。

アニメーションの作製方法が分かったところで、肝心の武器として必要なアニメーションの説明をします。

アニメーションを作製する際、必要なアニメーションは基本的に「何もしていない」「射撃」「リロード」になります。

「何もしていない」とは、キャラクターが銃を持っている時のアニメーションになります。1フレームあればいいです。何フレームも作って敢えて動かす必要はないでしょう。また、何もしていない状態とは2種類存在します。弾を撃ち尽くしてスライドが下がっている場合とそうでない場合です。2種類用意しましょう。

「射撃」は一発分のアニメーションだけ作るだけですので、簡単です。公式武器であるAK47などはアニメーションが2コマしかありません。いろいろな武器のアニメーションをインポートして参考にしてみるといいでしょう。

これも2種類必要です。まだ残弾があり、スライドが元の位置に戻る場合と、撃ち尽くしてスライドが下がったままになるものです。

「リロード」では、基本的には?「マガジンを外す」?「マガジンを装着する」?「コッキングして初弾を装填する」という流れです。

これも2種類必要です。残弾がありスライドが元の位置の状態からリロードを始めるものと、撃ち尽くしてスライドが下がった状態からリロードを始めるものです。

ショットガンは特殊で?「弾を込める準備」?「弾をこめる」?「コッキングして初弾を装填する」になります。

基本的に公式武器のアニメーションを参考にして作ればいいでしょう。より詳しくは、6章の頭で解説するweapon.cfgの設定を見れば、必要なアニメーションが分かるかと思います。

アニメーションのフレーム数については、AK47が「射撃」に2フレームしか使っていないから、自分も2フレームにしなければならないということはなく、何フレームにしても構いません。ただし、あまりフレーム数を多くすると、多分、処理が重くなったりするかと思います。

また、「射撃」にかかる時間や、「リロード」の時間はアニメーションのフレーム数にかかわらず、一定の時間がプログラム上で決定されていますので、アニメーションが何フレームあっても関係ないのです。

そのため、「射撃」のフレーム数を多くしても、それは0.1秒とか、そのくらいで処理されるので、凝った作りにしてもほとんど見分けることができないかと思います。

リロードの場合も、プログラム上で規定されている時間内に納めなければならないので、多すぎると、せかせかとせわしなくリロードするようになりますし、逆にフレーム数が短すぎると、とろとろとリロードする、または、アニメ上ではリロード完了しても、プログラム上ではリロードの最中であるので、その間は銃を構えたり撃ったりすることはできません。

フレーム数のことはあまり深く考えず適当に作っても良いと思います。6章で後述するweapon.cfgというファイル内で、ある程度調整できます。

そんなこんなでアニメーションの作製については終了です。

6.設定ファイルの設定

ここでは今まで作製したモデル、テクスチャ、アニメーションなどを実際にゲーム内で使用するために設定を行います。

Weapon.cfg

まずは5章で作製したアニメーションをゲームで使うために設定します。

公式pak内の、武器モデルなどのmd3が置かれているフォルダ内にはweapon.cfgというファイルがあります。無い武器もあります。名前は同じですが、それぞれファイルが置かれている武器の設定になります。このcfg形式のファイルは、実はも何もテキストファイルなので、メモ帳などで開くことができます。試しにどれでもいいのでweapon.cfgを開いて見てみましょう。

数字が大量に並んでいると思います。親切にも説明が書かれているので、今更説明する必要もないかと思いますが、一応解説します。(注:私は説明が理解できていません)

数字の羅列の上と右側に説明が書かれています。

まず右側の説明から、

IDLE1、2
何もしていない状態、銃を持っているだけの状態です。1は残弾があり、スライドが元の位置にあるもの。2は撃ち尽くしてスライドが下がっている状態のものです。
ATTACK1、2、3
射撃部分です。1はまだ残弾が残っている場合で、アニメーションの最後でスライドが元の位置に戻るものです。3はラストショットなので、スライドが最後まで下がったままのものです。2はショットガンのパンプのアニメになります(ショットガンの場合、1がセミのアニメです)。
DROP
よくわかりません。銃を持ち替える際に武器を下げるアニメかもしれませんが、基本的にここで指定しなくても、勝手に処理してくれますので、敢えてそう言ったアニメーションを作製する必要はないと思ってます。
RAISE
同じく不明。多分、銃を持ち替える際に武器を前に出すアニメかと思いますが、やはりこれも勝手に処理してくれるので、作る必要はないでしょう。
RELOAD1、2、3
リロードのアニメーションです。1が銃を撃ち尽くした状態でのリロード(スライド部分が後ろに下がっている状態)です。3は、残弾が残っている状態でのリロード(スライドが元の位置にある状態)です。ATTACK同様ショットガン以外では2のアニメは使われなかった気がします。ショットガンの場合は特殊で、1で弾を込めるアニメに移行するまでのアニメとなり、2で弾を込め(このアニメはゲームでもお馴染みのように、何度か繰り返し表示されることになります)3番でコッキングします。
ALTSWITCH系列
よくわかりません。銃のシングル、セミ、オートなどの切り換えの際のアニメーションでしょうか。基本的に1フレームしかなく、特に動きはないようですが。これもDROPなどと同じで、シングル、セミ、オートを切り換える時、わずかに銃が持ち上がりますが、この処理は勝手にやってくれます。

次に上の項目(各数字の説明)です。左から、

first
そのアニメーションの最初のフレームです。
length
firstで指定したフレームから、“いくつ”アニメーションさせるか、という項目です。アニメーションが終わるフレームの番号ではありませんので注意。
Fps
フレームパーセカンド。一秒間に何フレーム表示するか、です。当然数字が大きくなるほど、アニメーションの再生速度が速くなります。
looping
先の3つで設定したアニメーションが終了した後、ここに指定した数字分後ろのフレームから再スタートされます。例えば、firstに"10" lengthに"20" loopingに"5"と記入すると、10フレーム?29フレームが表示された後、25フレーム?29フレームが繰り返し表示されつづけます。m3s90の弾を込める動作の設定に使われてますので、そちらも参考に。

その他右の3つ:何のこっちゃさっぱりです。私は基本的に触りません。

5章のアニメーションの解説で触れましたが、「射撃」「リロード」自体の時間はプログラム上で決められています。そのため、その既に決められた時間とできるだけぴったりになるように、設定しなければなりません。

例えばAK47のリロードは30フレームを13fpsで再生しているので、リロード時間はだいたい2.3秒くらいということでしょうか。あなたが作製したリロードアニメーションが21フレームであれば、9fpsにすればだいたいぴったり再生してくれるかと思います。ゲーム内での正確なリロード時間は計ったこともないですし、よくわかりません。他の武器を見てみると2.2秒が多いような気がします。

今更ですが、アニメーションを作る時、このことを考慮して作製した方がいいですね。Gmax画面左下にある「Time Configuration」で、fpsを調整して再生し、早く動きすぎていないか、動きが緩慢すぎないか、などチェックしましょう。

そんな感じでWeapon.cfgをいじりましょう。

「.weap」ファイル

公式pak2.pk3内のcustom\default\weaponsフォルダ内に(武器名).specsと(武器名).weapという名前のファイルがあります。Cfgファイル同様、両方ともテキストファイルなのでメモ帳などで開くことができます。

これらのファイルの内容に関しては[T.O.I.S]blogで詳しく解説されていますが、一応ここでも軽く解説させていただきます。

まずweapファイルから。weapファイルは名前からも分かるように武器に関するサウンドやモデルを指定するファイルです。

なにやら大量に書かれていると思いますが、いじる項目は16個ほどです。

weaponConfig
武器のweapon.cfgのパス。ここで指定できるので、もちろん「weapon」.cfgという名前である必要はありませんが。
flashDlightColor
マスルフラッシュの色の設定のようですが触ったことないです。
flashSound
銃声のパス。
flashEchoSound
銃声の反響音のパス。遠くで聞こえる音です。消音器を付けた武器の場合、flashEchoSoundの前に「//」を記して読み込まないようにします。
reloadSound
リロード音。
gunViewOffset
腰だめ時の武器の位置を調整するためのものです。数字はそれぞれ「前・左・上」方向に対応しています。
gunViewAimOffset
aim時の武器の位置の調整です。対応関係は上記と同じ。Weapファイルの中で幾度となく果てしなく書き直さなければならない最凶の敵です。
gunViewAngles
公式ファイル内ではこの項目が無い武器も存在しますが、この項目をいじることで、回転します。対応関係は上記と同じ。
foreshorten
根本的にはわかりませんが、数字を大きくすると武器が伸びます。
tagsInMain
多分md3モデルのどこかしらで設置したtag_weapon、tag_brass、tag_flashを適用するかどうかということだと思います。基本的には「0」で良いと思います。
deployMenuShortName
武器名。
deployMenuDescription
武器の使用弾薬。
deployMenuType
武器の解説。
firstPerson
上から一人称視点時における「武器のアニメーションモデル」、「マズルフラッシュのモデル」、「テロ/スペコの腕のスキンを設定したskinファイルのパス」
weaponLink
上記で指定したmd3アニメーション内に配置したtagに、どのモデルを配置するのかを指定します。
thirdPerson
三人称視点時における武器モデルとフラッシュモデルのパス。消音器を付けた武器の場合、flashmodelの前に「//」と記して、読み込まないようにします。

「.specs」ファイル

相方です。Specsファイルはその名の通り、武器の性能を設定します。ただ、不明な点が多すぎます。

weapClass
武器の種類。これによって連射速度が決まる(?)三人称視点時の銃の持ち方はここで選んだ種類のものになったような気がします。
caliberClass
弾薬の種類。これによって威力が決まる(?)
semiauto
射撃モード「シングル」。0は無し、1は有りです。以下同様。
fullauto
射撃モード「オート」。
burst
射撃モード「バースト」。ここに代入した数値の数だけ発砲します。
pump
ショットガンの射撃モード「パンプ」。
bolt
スナイパーライフルがボルトアクションタイプの動作になります。
singleReload
ショットガンのように一発ずつ弾を込めます。
scoped
代入した数字がスコープの倍率になります。
scopeRetcleType
スコープのレティクルの種類です。0,1,2で3種類あります。
useScopeReticleShader
Nightvision
赤外線ゴーグル的視界なのでしょうが未実装。
longWaveIR
Suppressed
caliberClassで指定した弾薬の設定より若干威力が弱くなります。消音器を付けた武器の威力を下げる時に「1」にします。多分。
Subsonic
jamPercentage
ジャム率ですが未実装。
noTacMode
grenadeTimer
グレネードの爆破時間(単位ms)。
Maxclip
1マガジンの中に何発弾を入れるか、です。最高33発です(ただし、4本目のマガジンの弾の数が減ります。確か。)この項目がない場合は30発。
usesWolfAnim
アキンボ(両手持ち)の時、「1」にします。このアキンボ用アニメーションはmd3形式として存在しないようで、いじることもできません。
usesPistolAnimMod
発砲時に反動が付き、銃がわずかに後方に下がります。また、リロード時、モデルが一瞬下方に下がります。
usesRecoilAnimMod
発砲時に反動が付き、銃が大きく後方に下がります。

ごく普通の武器を作ろうと思えば、すんなりと設定できるはずです。

「.gear」ファイル

公式パック内のmapsフォルダ内には、「default_gt2.gear」、「default_gt5.gear」、「default_gt7.gear」という3つのgearファイルがあります。こいつらも相変わらずメモ帳で開けるの開きましょう。Gearファイルでは、ゲーム内で使用される武器に関する設定をします。

ちなみに上記のように3種類ありますが、gt2はゲームタイプ2=CTF、gt5=OBJ、gt7=BCという関係になっています。また、名前を「default_gt5」ではなく、「obj_snow_gt5」というように、マップ名にしておくと、そのマップでのみ、そのgearファイルの設定が適用されます。Snowのように特に指定されなければ、defaultの設定が適用されます。

では、gearファイルの中身を見てみましょう。

gm_weapon
    {
        weaponID            "SH1"
        weaponFile          "beretta"
        team                "specops"
        slot                "secondary"
        requiredSkill       1 1 1
        startClips          3
        equivalentWeaponID  "SH2"
    }

基本的には上記のようなものが延々と書かれているだけです。

weaponID
武器のIDです。SHはシングルハンドでサイドアームです。私が確認した限りでは、他にSH3、SH4とアキンボ用のIDがいくつか空きがあり、もしも既存の武器を消さずに“追加”したいのなら、ここに入れて下さい。ただし、あくまでもサイドアームになるのでそこだけ注意して下さい。また、空きスロットに武器を追加すると、「武器を拾うと残りのマガジンが0になる」とういバグが発生します。
weaponFile
specs、weapファイルを読み込む際のファイル名です。つまりspecsファイルとweapファイルはここで指定した名前でなければなりません。
team
specops、terroristsどちらのチームの武器になるか、です。
slot
メインウェポン(primary)、サイドアーム(secondary)のどちらに置くのかということですが、変えても反映されなかったような。
requiredSkill
3つの数字は左から「アサルト・リコン・スナイパー」がAA1で装備できることを示しています。数字を0にすれば、使用できません。3にすればAA3でやっと使えるようになります。
startClips
マガジンの数です。増やしても反映されなかった気がします。
equivalentWeaponID
逆チームの武器のIDを指定しておくと、チームが入れ替わった時に指定した武器に自動で持ち替える。逆チームで同等の能力であろう武器IDを入れておきましょう。

「.shader」ファイル

公式パック内のscriptsフォルダの中には大量のshaderファイルが格納されています。もはや何も言わないので黙ってメモ帳で開いて下さい。

ここでは、モデルに貼り付けたテクスチャに、さらに特殊な処理を施してキレイに表示するための設定を行います。基本的な使い方は、金属にテカリをつけるような感じでしょう。また、ガラスのように半透明のものを作ることもできます。これはヘルメットやスコープのガラス部分などで活用できるでしょう。

例えばweapons.shaderの中のM76について見てみると、

// M76models/weapons2/m76/m76_main{
    {
            map textures/effects/envmap_slate.tga
            rgbGen lightingdiffuse
            tcGen environment
    }
    {
            map models/weapons2/m76/m76_maintrans.tga
            blendFunc GL_DST_COLOR GL_ZERO
            rgbGen identity
    }
    {
            map models/weapons2/m76/m76_main.tga
            blendFunc GL_ONE GL_ONE
            rgbGen lightingdiffuse
    }
}

上記の記述に関する詳しい原理はご自身でお調べ下さい。

簡単に解説しますと,まず基礎として一番最初の「models/weapons2/m76/m76_main」と記述された同名の画像ファイルに関してshaderが適用されることになります。

次に,括弧内に記述された1番目の項目「envmap_slate.tga」という画像ファイルがテカリそのものとなります。

2番目の項目「m76_maintrans.tga」では,基礎画像ファイルにおいてテカリを加える部分が描かれています。

3番目の項目は最初に記述した画像ファイルと同じファイルです。

大まかな様子はそれぞれ実際にオフィシャルフォルダの中身を見ればわかると思います。これらのファイルはオフィシャルフォルダではtga形式となっていますが、jpg形式でもできます。maintransは元画像と同じようにUVmapされますので,元画像を加工すればいいです。また、オフィシャルフォルダでは,画像サイズの縮尺がひとまわり小さくなっています。これはさほど精巧に作る必要は無いですし,ファイルサイズの節約のためでしょう。無論,縮尺が違っていてもUVmapに影響はありません。縦横の比率が違えば話は別ですが。

blendFuncや他の項目は,ちょっとややこしいため,割愛します。

このshaderを駆使することによって、ただ単にテカリを加えられるだけではなく、キラキラと光を点滅させたり、電光掲示板のようにテクスチャをアニメーションさせたりもできたりします。ただ、武器ではあまりそういった機能を活用する場面もないでしょう。これはマップなどのオブジェクトで使ったら面白いでしょう。

記述したshaderが実際にどのような効果になるのかわかりにくいので、Q3A Shader Editorを使うと便利です。(Q3ASEのダウンロード)
このソフトは容易にshaderの編集ができ,viewerでmd3モデルとテクスチャを確認することができます。使い方は上記サイトを参照して下さい。(ただし英語ですが)

このshaderファイルは、敢えてweapons.shaderファイルに追記する必要はなく、あなたの好きな名前にして保存すればいいです。ただし、既に公式パック内にあるファイルと同じ名前にしてしまえば、当然それに上書きされて、本来あるはずのエフェクトがなくなってしまうので、そこだけは注意して下さい。

7.テストプレイと修正

題名そのままですが、ここまで来て、やっと八合目というところでしょう。

あなたが作製したファイル内には以下のような構成になっているはずです。

  • \
    • custom - default - weapons「specs、weapファイル」
    • maps 「gearファイル」
    • models - weapons2 - (武器名)-「md3、cfg、テクスチャファイル」
    • scripts 「shaderファイル」
    • sound - weapons - (武器名)「wavファイル」

(サウンドファイルに関しては特に説明しませんでしたが、私自身あまり詳しくないので割愛させていただきました。とりあえず、公式pak内のサウンドと音質などを同じにしておかないとゲーム中で再生されないので注意して下さい)

テストプレイのためにpk3ファイルに圧縮します。Zipファイルで圧縮してから、zip形式をpk3形式になおして下さい。何度かそれっぽい投稿をTC:Jで見かけましたが、間違ってもz_test.pk3.zipというオチだけはないように。名前の頭には「z_」や「zz_」などと付けます。これはTC:E起動の際にアルファベット順にファイルを読み込むために、名前が後のファイルの設定が上書きされる→カスタムファイルの設定が有効になる、からです。言うまでもないと思いますが間違っても「pak0~4.pk3」などにしないように。

完成したpk3ファイルをC:\Program Files\Wolfenstein - Enemy Territory\tcetest内にコピーすればOKなのですが、もしもあなたのtcetestフォルダ内に他のカスタムファイルがあるならば、それらを一時別のフォルダに移動しておくことをオススメします。理由は上でも書いたように、名前が後のpk3ファイルの設定が優先されるからです。

早速TC:Eを起動してホストゲームします。「Official Server」にチェックが入っていなくても以下のようなエラーが出る場合があります。

もう一度ホストゲームに入ると「Official Server」の項目にチェックが入っているでしょう。多分バグだと思います。やる度にこのエラーが出てくると鬱陶しいので、以下の手順で回避します。

そう言えば一応ホストゲームの設定ですが、bodycountで試しておけばいいでしょう。設定は適当に下のように設定します。

「Official Server」という項目は、チェックボックスに最初からチェックが入っていなくても一度チェックを入れ、またチェックを外し、それからゲームをプレイすればエラーは出ません。

または「official server」のチェックを外してからコンソールからdevmapモードにしてもいいです。Devmapの方が何かと便利ですし。

早速テストプレイですが、テストプレイでは、とりあえずデモを撮っておきましょう。そのままでは三人称視点の様子がわかりませんから。

まず導入したはずの武器を装備します。武器メニューの中に現れなければgearファイルのどこかにミスがあります。

導入した場所の武器が空欄になっていたら、それはgearファイルで指定したweaponfileの名前が違うか、あるいはその名前のspecs、weapファイルが存在しないということです。どちらかが間違っています。

それから、コンソールを開いてマウスホイールで上の方を見ていくと、エラーが出ている場合もあります。一応チェックしましょう。

武器を装備したら、武器がまったく見えない場合があります。武器の位置がおかしくて視界から見えなくなってしまっているか、モデルファイルの名前がおかしいか、いろいろ原因があります。

黄黒テクスチャ化けなら、テクスチャがうまく貼れていないということです。武器が消えていたら、テクスチャが存在しない可能性もあります。

と、こんな感じでまずは根本的な「ミス」を探します。

特にミスがなければ次は修正です。

まず面倒なのが、武器の照星と着弾点を合わせる作業です。0.49b以降のバージョンではベクトルエイムが採用されているので、以前のように画面の中心に印を付けて照星の位置を合わせる作業ができません。目測でなんとか合わせて下さい。この時、照星と照門がずれていたりすると、view_mainモデルをずらしたり、アニメーション内のtag_mainモデルをずらす作業も必要になるかもしれません。

上記のweapファイルでの武器位置の設定と同じで、とにかく何度もホストゲームをしては、disconnectし、ホストゲームしてはdisconnectの繰り返しです。

次に面倒なのが、アニメーションです。Gmax上ではきれいに動いているように見えても、実際にプレイすると愕然とする場面があります。すなわち、アニメーションが下の方でちまちま動いていて、苦労したブルバップアニメーションがまったく見えなかっただとか、逆に上に上がりすぎて手がちぎれている部分が見えたり、視界が銃にめりこんでいたりとかetc。

三人称視点で見ると、手に持っている銃が体にめり込んでいたり、いたるところにめり込んでいます。そもそもだいたいの銃は、ちゃんと両手で持ってくれません。

サウンドがずれていることもよくありますし、会心の出来だと思っていたサウンドがゲーム中に聞いてみるとやけにしょぼく、うんざりしたりします。

あと、Gmax上ではそれなりにきれいに見えていたモデルのテクスチャが、ゲーム中では変に見えることもあります。特に「黒色」は注意です。異常なまでに汚く見えます。

頑張って修正しましょう。

8.完成

以上の作業が終われば完成です。

pk3ファイルには出来るだけわかりやすい名前を付けましょう。

pk3ファイルの中にはREADMEファイルを付けておくといいでしょう。説明や作者名や作者のメールアドレスなどを簡潔に。なんだったら使用許諾書も書いておいてもいいかもしれません。This is freewareとか。

もっとも私自身は、ネット上に公開した時点でどうなっても仕方がない(というか、どうなるかわかったもんじゃない)と思っていますが。

また、TC:E公式ホームページにはフォーラム内に「Third Party Development」という「さらし場」があります。是非投稿してみて下さい。

謝辞

このようなリソースが不足していて作成が困難だったカスタムウェポンの作り方を、多大な時間を割いてマニュアル化してくださったM@TILDAさんにここでお礼申し上げます。