Starbound moddingメモ

starboundのマルチプレイ対応moddingのあれこれについての備忘録

カスタム武器を作る-ピストル編②

前回に引き続き、TF2の再現武器を作っていきます。

 

 前回の記事はこちら

yunyustarbound.hatenablog.com

 

 

今回から本格的にjsonの中身をいじっていく事になる為、編集をはじめていく前に一点留意するべき事を書いておきます。

 

前回も軽く触れましたが、jsonフォーマットは と がセットになっていないといけなかったり、{ }[ ]の使い分けや : (セミコロン)"" (ダブルクォーテーション)の記述、項目ごとに , (コンマ)を使用し、最終項は , (コンマ)を付けないなどなど独自の記述ルールが結構あります。

 

これらを少し間違えたり、記述を忘れるだけでjsonファイルとして認識されなくなり、エラーが発生するため、ここから先の編集をしていく際はこまめにDescriptor to Commandをつかってゲーム内にアイテムをスポーンし確認を行ったり、エラーが出ている場合はJsonlintで何が間違ってるか診断してもらったり、npp+のショートカット「Ctrl+Z (戻る)」と「Ctrl+Y (やり直す)」を繰り返して、どの時点まで動いていたかを確認する事がとても大切になってきます。

 

なので何か書いて動かなくなったら書いた部分を確認し、「あっコンマつけ忘れてた」って感じで気づけるとスムーズにエラーを回避できるんじゃないでしょうか。

 

 

それでは本題の製作に入っていこうと思います。

今回目指す実装内容はここまで

 

  • 武器の見た目とインベントリアイコンの変更
  • 撃った時にスモークのエフェクトが表示される
  • 名前・カテゴリ・アイテム説明文・レアリティの変更

 

アビリティの設定は次回に書きますが、今回はそれ以外の所はほぼほぼ完成を目標に作っていきます。

 

 

まずは見た目の実装から

 

武器のスプライトはイメージ編集ソフトで描いていきます。

筆者はPhotoshop CS5を使用していますが、PAINT.netGIMPでも同じように作れます。

 

描き方のコツとしては、キャラクターの等身が小さく、ゲーム内で表示されるキャラクターも小さいので、武器はややデフォルメっぽく大きめに描くといい感じになります。

 

カスタム帽子を作るときに使ったキャラクターテンプレートを並べるとサイズの比較が簡単です。

 

できたら透過png画像として書き出しましょう。今回使用するpngはこちら。

f:id:yunyu_sb:20180224131855p:plain

 

次に、「Drawable Generator」を使用して画像をjsonで使用可能なDirectivesコードに変換します。

まずはDrawablesGeneratorTool.exeを開きます

(今回使っているのはDrawablesGenerator-v1.2.1.1-win32です。使うverによって出力結果が異なる場合があります)

 

次に右上の「Select Image」から、先程のpngファイルを開きます。

すると左に画像のプレビューが表示されますが、とくに何もいじる必要はないので、そのまま「Single Texture Directives」をクリックしましょう。

 

 

これが今回使用するDirectivesコードになります。「Copy」をクリックしてコードをコピーします。

 

続いて前回作ったピストルのjsonファイルをnpp+で開き、以下の項目を見つけます。

"parameters">"animationCustom">"animatedParts">"parts"

(私が作ったテンプレートを使用している場合は、40行~84行までの内容です)

 

 

この中の各値が武器の各パーツ(butt,middle,barrel)とmuzzleFlash(撃った時の閃光)の画像指定に関係しています。

 

一枚の武器画像に差し替える場合はパーツに分けたりする必要はないので、このうち好きなところに画像を指定して、あとはダミーの透明な画像を指定することで画像を差し替えます。

 

私がよく使っているのは"middle"なので、今回はそこにDirectivesコードを入れて行きます。

 

 

先程の"parts"のうち、"middle">"properties">"image"を見つけます

はじめは<partImage><paletteSwaps>と書かれていますが、ここを

 

 

/assetMissing.pngに書き換えます。これはasset直下にある透明なpng画像です。

更に.pngの後にカーソルを合わせ、先程Drawable Generatorで出力した Directivesコードを挿入します。

 

 

一気に右に長いコードになりましたが、Directivesコードで任意画像を挿入する場合はこうなります。

 

続いて、他のパーツ(buttとbarrel)の"image"は用済みになったので、/assetMissingを使用して透明な画像に変更します。

 

では一旦Starbound内にアイテムをスポーンさせ、確認してみましょう。

 

武器の画像が入れ替わっている事が分かります。

次に、武器を持つ位置を変更していきます。

 

先程書き換えていた"image"の下に、"offset"というパラメータがあります。

それが画像表示位置のx座標とy座標になります。

+の値であればxは右でyは上、-の値はその逆に作用します。

 

middleの画像のoffsetを[0.95, 0.35]に変更してみます。

 

 

 

こうなりました。いい感じですね。

しかし、クリックして弾を発射してみると…

 

 

銃弾と閃光は手から出るって感じになってます。

次はこれを修正します。

 

"parameters"の直下にある"muzzleOffset"を見つけます(項目が多すぎるのでnpp+のショートカット「Ctrl + F」で検索したほうが早いです)

 

 

ここを[2.75, 0.88]に書き換えます。

 

 

 

武器を撃つと弾と閃光の出る位置が適切な位置に移動していることが分かります。

 

 

ここにきて、この閃光があまり気に入らないので別の画像に置き換えたいと思います。

好みの問題ですが、一応知識として紹介しておきます。

 

先程銃の見た目を変えるために、"parameters">"animationCustom">"animatedParts">"parts"にて、

"parts" : { }の中に内包されている項目の内、"butt","middle","barrel"を弄ってきましたが、今度は"muzzleFlash"を弄っていきます。

 

 

"muzzleFlash">"partStates">"firing">"fire">"properties"内にある"image"の画像パスを変更します。

 

今回はこれを

"/animations/tankmuzzleflash/tankmuzzleflash.png:<frame>"

に書き換えてください。

 

このファイルはペンギン戦車が砲弾を撃つ際に再生されるアニメーションのpng画像です。

 

 

画像はこれで置き換えられましたが、これだけでは読み込むフレーム数の情報は相変わらず変更前の閃光のフレーム数(2フレ)のみのアニメーションとなっています。

 

差し替えた後の画像は9フレームまで読み込める画像のため、フレーム数の設定を変更します。

 

指定されている場所は少し変わっており、

"parameters">"animationCustom">"animatedParts">"stateTypes">"firing" 内の項目がそれにあたります。

 

この中の"states">"fire">"frames"を2から9に変更し、ついでに"cycle" (1回アニメするまでにかかる時間)を0.1にします。

 

 

ゲーム内にスポーンすると弾を撃った時の閃光が煙を発生させるものに変っている事が分かります。

 

 武器本体の見た目はこれで完了です。

次に武器のインターフェースにおける情報を変更していきます。

 

現在はこんな感じ

 

まずはインベントリアイコンからやっていきましょう。

 

インベントリアイコンの設定には"inventoryIcon"というパラメータを使用するのですが、このパラメータは無名武器(ランダム生成のcommon,uncommon,rare武器)には使われていません。

 

そのためまずは"inventoryIcon"をコードに追記しましょう。

"inventoryIcon" : "",

 

追記する場所は"parameters": { } の直下です。適当に初めの方に書いてみました。

 

では、この空のパラメータに武器の画像を反映させます。

 

方法はいたってシンプルです。はじめに武器の画像を変更した時と同じく、まずは/assetMissing.pngを指定して

 

Drawable Generatorで出力した武器画像のDirectivesを末尾に挿入します。

 

 

これで画像を切り替える事が出来ました。

次に文字情報やレアリティを変更していきます。

 

これらの情報は同じく"parameters": { } の直下に存在する各値を変更することで書き換え可能です。

 

  • "shortdescription"
    アイテム名

  • "description"
    説明文

  • "category"
    武器のカテゴリ(アイテム名の下に表示される)

  • "rarity"
    "Common","uncommon","rare","legendary","essential"のうち好きなものをどうぞ

 

 今回はこういう感じにしてみました。

"shortdescription": "^#e47b2e;HALE'S OWN BLUTSAUGE^reset;",

 "description": "^#84c1e4;On Hit: Gain up to +3 health^reset;\n^red;-2 health drained per second on wearer^reset;", 

 "category": "^#757575;Level 5 Syringe Gun^reset;", 

 "rarity": "essential",

 

ここでひとつ注意点なのですが、先程の画像の通り、アイテムの説明欄は現在武器のDPSなどの情報が表示されている状態です。

 

これは同じく"parameters": { } の直下にある"tooltipKind"というパラメータによってこうなっています。変更前は

"tooltipKind" : "gun",

 

となっている為、銃の表示するべき情報(DPSやファイアレート)などが表示されている状態です。なのでこれを

"tooltipKind" : "back", 

 

と直すことで、この項目を背中装備と同じ状態(アイテムの説明文が表示されている状態) にでき、 "description"の情報が表示されるようになります。

 

ここまでの変更をコードに反映してみましょう。

偶然にも(というかactiveitemファイルの頃の記述順の名残で)変更したい内容が上のほうにまとまってたので見つけやすかったです。

 

 

あとは細かいところですが、TF2の再現武器なので、レア度もEssentialではなく、Strangeに書き換えたいところです…が、"rarity"内に直接そう書いてしまうと当然ながらアイテム枠の色などに関する情報が無い(というかSBで定義されたレアリティ情報ではない)事からエラーを起こしてしまいます。

 

そこで、実際のレアリティはEssentialの状態を保ちつつも表示上のレアリティはStrangeとしてしまいます。

 

やり方はとっても簡単。適当に"parameters": { } 直下の適当なところに以下の記述を追加します。

"tooltipFields" : { "rarityLabel" : "Strange" },

こんな感じ

 

おわり。

 

 

こちらが今回の内容を全て反映したjsonファイルです。 

custompistoltest_chapter2.json - Google ドライブ

 

 

それでは今回の内容はこれにて全て完了となります。お疲れ様でした。