top / 1 / 2 / 3 / 4 / ex1 / 5 / 6 / ex2 / 7 / 8 / 9 / 10 / 11 / ex3 / 12 / 13 / 14 /..../ 関数 / 覚え書き / 倉庫
第5回 【 アイテムの追加の仕方 】

武器を追加してみましょう。
単純に武器のステータスを強くする方法は、今までと全く変わりません。
wikiを見ながら「actor.ltx」の代わりに「w_武器名.ltx」を弄れば済む事です。簡単すぎるのでここでは割愛します。

武器の性能を改造する事武器を追加する事は、似ているけど実は大きく異なります。
何故ならば、ゲーム内に元から登場する武器をそのまま強化すると言う事は、その強化された武器を敵が使ってくると言う事でもあるからです。
ゲームバランス的にはそれが自然なのでしょうけど、やはりここは一つ自分で作ったオリジナル武器が欲しいところだと思います。

もっとも、3Dグラフィックから全て改造するのは相当大変です。
オイラにもそこまでやるほどの気合も根性も無いので、3D関連に関しては勘弁してください。
アイコンレベル(2D)や、既存のテクスチャを改造して痛銃を作るくらいなら比較的簡単なんですが・・・。
例えばこんなのとか。ゴミ武器の代名詞たるPMmですが、これで一気に使う気が起きますね?あ、起きませんか。そうですね。キモイですね。ハイ。すいません。

痛銃

こんな痛銃くらいならば、フリーの描画ソフトを用意するだけで特殊な知識もなく誰にでも作れるものだと思うので、それだけでも覚えておくと夢が広がります。

ま、まあ、とりあえず今はグラフィックの事は置いといて、既存の3Dデータを利用して性能的に新しい銃を作る事を考えましょう。
と言っても、知るべき事はほんの少し、それ以外は今までと全く同じです。


知っておくべき事、その1。

武器や防具には、ノーマルアイテムユニークアイテムがあると言う事。
ノーマルアイテムとはそのまんま、単なる武器や防具のこと。
ユニークアイテムとは、いわゆるカスタマイズアイテムとしてゲーム内に登場しているものの事で、例えば「Fort12-Mk2」をカスタマイズした「Fort15」とか、あの辺のちょい強い奴のことです。

基本的にはノーマルアイテムを追加するのもユニークアイテムを追加するのも同じやり方なんですが、ノーマルを増やすとちょっと手間が増えてしまうので、ここは簡単にユニークアイテムを追加する方向で行きましょう。
結果的には全く違いはありません。どこにデータを置くかの違いだけだと思って構いません。
で、問題のユニークアイテムはどこに設定されているかと言うと、フォルダ「gamedata/config/misc」内のファイル「unique_items.ltx」です。

とりあえずその中をざっと眺めてみましょう。

;-----------Outfits-----------

とか、

;-----------Weapons-----------

とか、なんかこんな記述がありますね。

あ、ちなみにしばしば出てくる記号に「;(セミコロン)」がありますが、これはltx形式のファイルにおいてはコメントの意味があります。
開発やってない人にはコメントと言われても判らんかも知れないので説明すると、要するに「プログラムには影響しない自由な書き込み」の事だと思ってください。
プログラムは「;」と言う文字を発見したら、その行の残りの部分を無視します。
つまり、覚え書きとか目印とかを挿入したい時に使う記号と言うわけですね。
ltx形式である限り、「セミコロンを見たらコメントと思え」こう思って間違いありません。

ついでに、今までスルーしまくってきた文字化けですが、あれも実は全部コメントで、恐らく日本語Windowsの標準で無いフォントで記述されているのでしょう。そんな訳で、あの文字化けは「何かしらの説明が書いてあるんだけど、読めないから放っとけ」と言う扱いになってるわけです。

んで、

;-----------Weapons-----------

この文章ですが、行の先頭にセミコロンがあると言う事は、つまり「この行は全部コメント」と言う扱いになり、この行は「ここから武器項目ですよ」と言う目印としてプログラムではなく人間が探しやすいように記述されているわけです。
当然、これ以降、次の項目が現れるまでの部分にユニーク武器が設定されてるって事になります。

では、どれか好きな武器を弄り倒すとしましょうか。
まあ自分の好みで構いませんが、ここでは例としてオイラが愛して止まないgroza(Tunder)をサンプルにしましょう。ところでTunderって何て読むんでしょうね?ツンダー?ツンデレ?違いますね。ハイ。すいません。
170行目らへんにgrozaのカスタムバージョンが見つかります。

[wpn_groza_m1] $spawn = "weapons/uniq/wpn_groza_m1" description = enc_weapons1_wpn-groza_m1 inv_name = wpn-groza_m1 inv_name_short = wpn-groza_m1 ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap condition_shot_dec = 0.00005 inv_grid_x = 5 inv_grid_y = 29

こんな内容ですね。
とりあえず、unique_items.ltxのこの部分を丸ごとコピーしましょうか。
で、追加する部分ですが、本来なら、;---Weapons---の項目の一番下に追加と言うところなんでしょうが、それだと修正の度に探すのが面倒くさいですね。
なので、ここは一つunique_items.ltxの一番下にこんな項目を追加しちまいましょう。

;---- Additional Unique Items (Added by 名前)----

ここにさっきコピーしたものを貼り付ければ探すのも楽チンですね。
結果的に、こんな状態になっていると思います。

;---- Additional Unique Items (Added by 名前)---- [wpn_groza_m1]:wpn_groza $spawn = "weapons/uniq/wpn_groza_m1" description = enc_weapons1_wpn-groza_m1 inv_name = wpn-groza_m1 inv_name_short = wpn-groza_m1 ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap condition_shot_dec = 0.00005 inv_grid_x = 5 inv_grid_y = 29

とりあえず殆どの項目はwiki見れば一発で判ると思うんですが、その前に知っておかなければならない事があります。


知っておくべき事、その2。

継承と言う概念について。
深く説明すると、構造化プログラミングの基礎から説明しなければならないので、基本的な考え方をサラっと説明します。
この武器の例だと一番上の行にこんなのがありますね。

[wpn_groza_m1]:wpn_groza

これは、「この武器のIDは wpn_groza_m1 です。この武器は wpn_groza の性能を継承しています」と言う内容を意味しています。
つまり、基本的にwpn_groza_m1と言う武器は、wpn_grozaと言う武器の性能と同じだと言う事です。
そして、「wpn_grozaから変更したい部分のみをここで設定するので、ここで設定していない部分に関しては、全てwpn_grozaと同じ扱いにしてください」こう言う指示をしていると言うわけです。
では、その継承元であるwpn_grozaが何処にあるかと言うと、それはフォルダ「gamedata/config/weapons」内のファイル「w_groza.ltx」に記述されています。

その中を見ると・・・。
ここに書くとキリがないので省略しますが、大量のステータスが設定されていますね。
それがgroza(Tunder)と言う武器の本来のステータス情報なのです。
その中で元々設定されている数値のうち、自分の弄りたい部分のみを抜き出して改造し、それ以外の部分は今まで通りで。
そんな都合の良い設計の仕方が「継承」と言う概念なのです。

極端な事を言うと、武器IDと継承元だけ追加してステータスを全く設定しなければ、「プログラム的には違うアイテムだけど、中身は全く同じアイテム」が追加されると言う事になるわけです。
もちろんゲーム内にそれが登場しても、プレイヤーにはそれを判別する方法が存在しないので全く意味は無いですが。


継承の概念を説明したところで、いよいよ改造の開始です。
まず、武器IDを変えましょう。半角英数小文字なら一通りの文字は使えるようですが、あまりヘンな記号とかは避けときましょう。

[wpn_groza_special]:wpn_groza

こんな感じでしょうか?継承元はそのままで。
で、各項目の意味はwikiに載ってるので、そちらを参考にしてもらうとして、ちょっと判り難い部分を説明します。

まず、

$spawn = "weapons/uniq/wpn_groza_m1"

初っ端から申し訳ないのですが、この項目に関してはどのようにゲームに影響しているのかオイラにも判らないので、他のユニークアイテムに習い、武器IDをそのままコピーする事にしてます。
どうやらゲーム内での出現時に関係しているようですが・・・。
とりあえずこんな感じに。

$spawn = "weapons/uniq/wpn_groza_special"

あと少し判り難いのは、これ辺りでしょうか。

inv_grid_x = 5 inv_grid_y = 29

これは今回は修正する必要はありませんが、ゲーム内におけるアイコンデータの座標を意味しています。
座標とは別に縦横のサイズもセットで指定するものなんだけど、それは継承元のまま、サイズは変えずにアイコンだけ変えると言う事ね。
新しいアイコンを追加しないのであれば変更する必要は無いと思うのですが、一応基礎知識として。

まず、アイコンデータがどこに格納されているのか。
フォルダ「gamedata/textures/ui」内、ファイル「ui_icon_equipment.dds」です。
dds形式とはあまり聞きなれない拡張子ですが、これはGeforceで有名なnVidia社がゲーム用に作った画像形式で、普通の画像ビューアで閲覧する事はできません。
軽く説明しましょう。


必須ではないけど知っておくと便利な事。

DDS形式画像ファイルの閲覧の仕方を説明します。
DDS形式のファイルは一般の画像ソフトに「DDSプラグイン」と言う機能拡張を行い(まあ画像ソフトに機能拡張MODを入れてるようなもんです)、閲覧可能な状態にするのが一般的です。
オイラはJasc Software社Paintshop Proを長く使ってるのですが、相性的にはAdobe社Photo Shopの方がずっと安定してるようですね。Photo Shopはバカみたいに高いので手が出ませんが・・・。
実際、Paintshop Pro + DDSプラグインではバグが多くて途中で強制終了とか連発します。苦肉の策として、DDS形式と互換性のあるTGA形式に変換する事で何とか改造してます。

閲覧するだけならば、手軽なフリーソフトでは Irfan View あたりが有名です。
動作が軽く、プラグイン無しで最初からDDS形式を閲覧でき、ある程度のデータ変換も可能な事も魅力の一つです。残念ながら他形式→DDSへの変換は出来ないようですが・・・。
ごめん。オイラ適当こいてました。
今PC再インスコしてて気づいたけど、デフォではDDS見れませんね。irfanview_plugins_410_setup.exeってのが必要でした。
ファイル名でググれば山ほど引っかかるので探してみてくだされ。


もう少し本格的なツールが欲しければ、同じフリーソフトでもマイクロソフト社から提供されている Microsoft DirectX SDK と言うツールに含まれている「DirectX Texture Tool(通称DxTex)」と言うものがあります。
これは動作がやや重いのが難点ではありますが、DDS形式の閲覧だけでなくTGA→DDS変換も可能なので、高価なPhoto Shopに手を出せないオイラのような貧乏人にはありがたい限りです。

MOD作成の定番としては GIMP と言うフリー描画ソフト+DDSプラグインと言う組み合わせが無料で全ての環境が整うと言う事で非常に有名です。最新版のv2.4以降だと何故かSTALKERのDDSファイルを読み込ませるとエラーが発生してしまうので、一つ前のバージョンであるv2.2(事前にGTK-2.10.13のインストールが必要)を使う必要があります。


さて、DDS形式画像ファイルが見れるようになりましたか?
なったと言う前提で進めますね。まだ良く判らないと言う人は「DDS」「TGA」「閲覧」「編集」「プラグイン」あたりのキーワードを捏ね回してググって見てください。

武器のアイコンデータの話に戻ります。
ファイル「ui_icon_equipment.dds」を閲覧してみると・・・。武器、と言うか全アイテムがずらりと並んでいるのが見えますね。
あ、閲覧してるツールにもよりますが、「MipMapが何たらかんたら」と表示された場合、とりあえず「表示しない」と言う方を選択しといてください。MipMapに関しては、そのうち説明します。

で、ファイル「ui_icon_equipment.dds」の武器の画像ですが、これは実は50ピクセル単位でブロック化されているのです。
イメージ的にはこんなん。

DDSグリッド

ええと、なんだっけ。
「inv_grid_x」「inv_grid_y」の意味でしたね。
これは上のように50ピクセルでグリッド線を引いた場合の、この問題の武器グラフィックの左上のマスの座標を示しているのです。
ちなみに座標は0からカウントするのが常識です。実際には5ってのは6個目、29ってのは30個目と脳内変換してください。




取りあえず出てきてる項目で判りにくいのはこれくらいでしょうか?
それでは実際に武器を改造してみましょう。

;---- Additional Unique Items (Added by 名前)---- [wpn_groza_special]:wpn_groza $spawn = "weapons/uniq/wpn_groza_special" description = enc_weapons1_wpn-groza_sp inv_name = wpn-groza_sp inv_name_short = wpn-groza_sp ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap condition_shot_dec = 0.00005 inv_grid_x = 5 inv_grid_y = 29

これだけでは何も変わらないので、性能も弄ります。
まずは最後まで使い続けられるように、使用弾薬の種類でも増やしてみましょうか。

ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap, ammo_5.56x45_ss190, ammo_5.56x45_ap

かなり反則臭い改造ですが、ゲーム前半で手に入りやすい5.45x39弾に加えて、ゲーム後半でも頻繁に手に入る5.56x45弾も撃ち出せるようになりました。
更に改造します。
消耗して行くと悲しいので、消耗しなくします。

condition_shot_dec = 0

うわぁ。もう厨臭い事この上ありませんね。何だか、「僕の考えた最強の銃」見たいな感じで、改造してて恥ずかしくなってきましたよ?
でもまだ続けます。ここに無い項目を弄りましょう。
継承先、先ほどのフォルダ「gamedata/config/weapons」内のファイル「w_groza.ltx」から好き勝手に項目を引っ張ってきます。

初期の貧乏状態でも購入できるように価値を安くします。

cost = 10

マガジンに弾丸が50発入るようにします。

ammo_mag_size = 50

バースト射撃を1→3→フルオートにします。

fire_modes = 1, 3, -1

せっかくなのでグレネードも全部撃てるようにします。RPGロケットを撃ち出すのは流石に無理でした。(装填したらクラッシュした)

grenade_class = ammo_vog-25, ammo_vog-25p, ammo_m209

サイレンサー装着可能に、ついでにサイレンサー装着しても威力が下がらないようにします。

silencer_status = 2 silencer_hit_power = 1

とりあえず、こんな所でしょうか?
改めて見ると、こりゃ酷いですね。何だか敵が可哀想になってきました。
何はともあれ、これで武器は出来ました。
しかし、実はもう一つだけやらねばならない事があるのです。
武器のステータスの中にこんな設定がありましたね?

description = enc_weapons1_wpn-groza_sp inv_name = wpn-groza_sp inv_name_short = wpn-groza_sp

これは何かと言うと、この武器の説明文のIDを示しているのです。
弾薬以外に関しては「inv_name」と「inv_name_short」のIDは共通なので、今回は2箇所の文章を追加する必要があります。
弾薬の場合は名前がゲーム画面右下の弾薬情報に表示されるので、そこに表示したい名前のIDを「inv_name_short」に設定することになります。
追加する場所はフォルダ「gamedata\config\text\eng」内の、ファイル「string_table_enc_weapons.xml」です。
ここにはIDとそれに対応する文章が設定されているので、見よう見まねで記述しましょう。
<string id="descriptionで指定したID"> <text>アイテムの説明文</text> </string> <string id="inv_nameで指定したID"> <text>アイテム名</text> </string>
こんな感じになっています。
弾薬だった場合には更に、
<string id="inv_name_shortで指定したID"> <text>省略アイテム名</text> </string>
これが追加されますが、今回は弾薬ではないので2つだけ設定します。
最後から二番目の行、つまり </string_table> と書かれている最終行の前に以下の文を挿入する形になります。まあ好きな文章をぶち込んでください。
もちろん日本語化してあるファイルであれば日本語で好き勝手に書いてOKです。
<string id="enc_weapons1_wpn-groza_sp"> <text>This gun is the one of most powerfull weapon in the zone. </text> </string> <string id="wpn-groza_sp"> <text>Tunder SP</text> </string>
XMLについて詳しく知りたい方は この辺 でも見てください。中々勉強になります。
さて、これでようやく武器に関するデータが全て出来上がりました。


また長くなったのでまとめますね。

構成:
□groza_sp ┣□gamedata ┃┗□config ┃ ┣□misc ┃ ┃┗■unique_item.ltx ┃ ┗□text ┃  ┗□eng ┃   ┗■string_table_enc_weapons.xml ┗■readme.txt


追加武器:
ファイル:unique_item.ltx 最終行に以下を追加。 ;---- Additional Unique Items (Added by Nyagicha)---- [wpn_groza_special]:wpn_groza $spawn = "weapons/uniq/wpn_groza_special" description = enc_weapons1_wpn-groza_sp inv_name = wpn-groza_sp inv_name_short = wpn-groza_sp condition_shot_dec = 0.00005 cost = 10 inv_grid_x = 5 inv_grid_y = 29 ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap, ammo_5.56x45_ss190, ammo_5.56x45_ap condition_shot_dec = 0 ammo_mag_size = 50 fire_modes = 1, 3, -1 grenade_class = ammo_vog-25, ammo_vog-25p, ammo_m209 silencer_status = 2 silencer_hit_power = 1


武器名、説明文:
ファイル:string_table_enc_weapons.xml 最終行直前に以下を追加。 <string id="enc_weapons1_wpn-groza_sp"> <text>This gun is the one of most powerfull weapon in the zone. </text> </string> <string id="wpn-groza_sp"> <text>Tunder SP</text> </string>

取りあえず武器だけはこれで追加完了です。
ただし、この状態ではまだ武器を新しく追加しただけで、それをゲーム内に登場させる事ができません。
次回ではそのやり方を順を追って説明するとしましょう。


今回作ったもの:groza_sp.zip



top / 1 / 2 / 3 / 4 / ex1 / 5 / 6 / ex2 / 7 / 8 / 9 / 10 / 11 / ex3 / 12 / 13 / 14 /..../ 関数 / 覚え書き / 倉庫
ニャギ茶★SPOT --工作部屋--