【ティラノスクリプト備忘録】アイテム・敵のデータなどをCSVファイルで一括で管理したい【22/05/21】
初めに.パラメータを一括で管理したい
「ティラノスクリプトでこんな感じのゲーム作りたいな~」とぼやぼや考えてたら、アイテムとか敵のステータスみたいな共通のパラメータ(HPとか攻撃力とか)を持つ要素を丸ごと一括で管理出来たら楽そうだなと思ったので、昨日やったことを記録しておきます。
具体的には、Excelとかでこんな感じのアイテムデータの表を作って……
シナリオ側で必要な時に必要な分だけパラメータを参照する。
みたいなことがやりたいなあ、と。
ゲーム制作に関しててんで素人なので色々ググったんですけど、多分「マスターデータ」ってやつに近いと思います。
アイテムとか複数の種類を扱う時に、一つ一つの効果とか全部記述するのめんどくさそうと思ったので、上記みたいなことがティラノスクリプトでも出来たら楽そうだな~と。
https://twitter.com/kamivukuro_boku/status/1527605189787926530?s=20&t=OcGKfYFwsD4Yyu7lqn35Kg
「アイテム一覧から選択したアイテムの説明文を見る」とか、「戦闘で指定された番号の敵を呼び出す」みたいなことしたい時に、シナリオ上で「何番の敵は画像がこれ、攻撃力がいくつで、防御力が~」って記述をすることになると思うんですけど、2、3種類ぐらいなら大丈夫ですけど、たくさん種類があると同じことの繰り返しって煩雑ですし。
あと、これ出来たら何が良いかって言うと、後になってパラメータ調整やテキスト変更したい時に、シナリオファイルのどこに記述したか探す手間が省けますし、説明文とか複数の箇所に記述した時に、それを全部探して直さなきゃいけないのを一括で変えられるんじゃないかな、と思います。
ツクールとかにはこういうアイテムデータを管理する機能ありそうですけど、ティラノスクリプトはあくまでもノベルゲーム開発向けのツールなのでこういう機能作れないか~ってちょっと試してみました。(要はキャラクターの表情差分の管理機能みたいなやつを、アイテム名と画像、アイテムのパラメータとかでも出来たら嬉しいという話)
(「そもそも同一のパラメータ(HPとか攻撃力、回復力)を持つ要素(アイテムとか敵)が何個もあるゲーム作りたかったら、ティラノじゃなくてツクールとかUnity使えばよくね?」みたいなのは置いておいて。)
1.CSV読み込みプラグインが良さそう
色々調べていくうちに「これ使えそうだな~」ってのが見つかりました。「TIP表示プラグイン」が、どうやらCSVファイルに入力したデータをゲームに反映させる仕組みらしいので、これを利用できないかと同作者さんのプラグインを探したところ、「CSV読み込みプラグイン」を発見。
(CSV読み込みプラグインはこちらからお借りしました!)
このプラグインを使えば、アイテムのデータをまとめたCSVファイルを作り、ティラノスクリプトで読み込むことが出来そうだったのでチャレンジしてみました。
実はプラグイン入れるの初めてで、プラグインの導入のタイミングでしょうもないスペルミスで小一時間ほど悩んでました。
2.試しに使ってみる
というわけで、実際にCSV読み込みプラグインを使って、CSVファイルを読み込んで変数に代入、そしてその変数を表示する、という一連の流れを試してみました。
やったことの流れはこんな感じです。
(a) Excelでアイテムデータを作る
まずはExcelで表の作成。今回はまず想定した通りの機能が使えるか確認したかったので最低限のことしか書いてません。本当にこれだけ。
表を作成したら「名前を付けて保存」から、形式を「CSV UTF-8(コンマ区切り) (*.csv)」を選択して保存。
ファイルの名前は今回は「sample.csv」にしておきました。
CSV読み込みプラグインの使い方に従って、作成した「samle.csv」をプロジェクトフォルダー内の「data/other/pluin/mc_loadcsv/」に入れておきます。
(b) アイテムの画像の準備
今回は、テストということで使用する画像は何でもよかったので、以前作成した画像を適当に用意しました。というか、これに合わせて表データを作りました。
(c) ティラノスクリプトで読み込む
これもCSV読み込みプラグインの使い方に従ってやっていくので、細かいことは割愛します。
今回は、CSVファイルを読み込みたいシナリオ内で、CSV読み込みプラグインのCSVファイルを読み込むタグである[mc_loadcsv]を下記のように記述し、「変数f.data」にCSVファイルの値を代入しました。
[mc_loadcsv file=sample.csv var="f.data"]
今回はデータが2次元配列という形式の変数で読み込まれているので、先ほどの表と照らし合わせるとこんな感じで値が入っています。
変数ウォッチ機能の方でも、f.dataにCSVファイルに書き込んだ値が入ってることを確認したので、さっそく表示してみることにします。
あれ……?なんかうまくいかないぞ
実際に変数f.dataを使ってテキストや画像を出そうとしたら「undefinedです」って言われて、「いやいや…そんなことないだろ」とか言いながら苦戦してました。
試しに他の二次元配列の変数を作ってメッセージウィンドウで表示とかしてたら、いつのまにかCSVファイルの方から読み込んだものも表示してくれるようになったんですが、結局何が問題だったかよく分からなかったので詳しい人教えてくれると助かります。
それで、実際に出力できたものがこれ。
左上画像は、[image]タグを以下のように、「storage」に「f.data[1][2]」を指定して使用することで、「CSVファイルから読み込んだ2行目のデータ(yoの行)の3列目(画像の名前)」と一致する名前の画像をfgimageフォルダから探して表示するようにしました。
[image storage="&f.data[1][2]" visible="true" layer="0" width="100" height="100" folder="fgimage"]
※配列は0番目から番号が割り当てられるので、CSVファイルの2行目、2列目を出したい時には変数は「f.変数名[1][1]」のように記述します。
同様に左上のちっちゃい「yo」の文字も[ptext]タグで表示しました。
[ptext layer="0" text="&f.data[1][0]" x="200" y="50"]
メッセージ内の「yo」の文字も[emb]タグを使って表示しました。
[emb exp="f.data[1][0]"]
今回はテストなので、これしかやっていませんが、表示位置などを工夫して、データ自体をもっと増やせば、アイテムとその説明文をいっぱい並べたり、選択したキャラクターのステータスを表示したりとかできると思います。
終わりに.実用に向けた注意点・課題
とりあえず、CSVファイルでデータをまとめて作っておいて、それをティラノスクリプト側で読み込んで表示、って仕組み自体は出来そうなので、今回はここまで。
プラグインの導入に苦戦した時間含めだいたい3時間ぐらいだったと思います。
この時点でいくつか注意点や課題が見えてきたのでメモとして残しておきたいと思います。
(a) CSVファイルを読み込んだ変数の型は文字列なことに注意
CSVファイルのデータをティラノスクリプトの変数(今回であれば「f.data」)に代入した時点では、変数の型(変数の種類、文字・整数・少数とか)は文字列になっています。
なので、キャラクターのパラメータ(HPとか攻撃力)など計算に使いたい場合は、文字列から整数などに直して使用する必要があります。
具体的には、変数の型を文字列から整数に変換するJavascriptの関数、parseInt()などを使った下記のような記述が必要になると思うので、今度はそれを試してみたいと思います。
(参考:ティラノスクリプト 製作テクニックwiki)
例:敵の攻撃力を取得する
[iscript]
f.enemy_attack = parseInt(f.enemydata[取得したい敵のデータがある行][攻撃力の列],10)
[endscript]
(b) [ptext]タグでの改行
今回の機能を試してみた時に、「これ、CSVファイル内にアイテムの説明文を入力すればあとは[ptext]タグで対応する変数を読み込むだけでテキストを表示できちゃうじゃん!」って思ったんですけど、どうやら現行のバージョンのティラノスクリプトだと、[ptext]タグで「text="ああああ<br>ああああ"」のような、<br>での改行ができない可能性があるらしいので、その確認もしておきたいと思います。
上記の問題は、多分CSV読み込みプラグインの改行コードの使い方自体をまだ把握してないのも問題な気がするので、そこらへんもちょっとお勉強したいと思います。
(c) 連想配列で使ってみる
これもプログラミング初心者丸出しで恥ずかしいんですが、連想配列の存在自体CSVファイル読み込みプラグイン使って初めて知ったので、連想配列として代入することで、CSVファイルで「アイテム名」や「攻撃力」などの項目をキーとして指定して運用する方法も勉強したいと思います。
(参考:ティラノスクリプト 製作テクニックwiki)
(d) CSVファイルだからプレイヤーが値を変更できちゃうのでは?
これもまだゲーム制作ひよっこなのではっきりと分かってはいませんが、配布するってなると、プレイヤー側がCSVファイルを書き換えると数値とか簡単に変えられちゃうのでは……?という疑問があります。
(この点に関してはブラウザゲームだと問題ないとは思いますが)
これに関しては、配布用パッケージング時に「ファイルを隠蔽する」にチェック入れればなんとかなりそうな気がしますし、サンプル戦闘を用意して、「指定したフォルダーにプレイヤーが自分で作ったイラストをいれて、CSVファイルの指定のセルを書き換えると、自分で作った敵や味方を出せるよ!」って遊び方ができそうで面白そうではありますが。
あとは、どのくらいの膨大なデータをどのタイミングで読み込めばいいのかな、ってのはちょっとあります。「ゲーム全体で不変の変数(敵とかアイテムのパラメータ)は、多分「first.ks」で初回起動時に全部読み込めばいい気がするんだけどローディングってどのくらい長いのかな?」って感じです。
以上、昨日のまとめでした!
これからは一週間ごとぐらいにゲーム制作の雑記を話せたらいいなあと思います。noteの使い方がこれであってるか分からないけど。
この記事が気に入ったらサポートをしてみませんか?