見出し画像

【ツクールMV・MZ】JSONを追加してみよう

RPGツクールMVならびにMZにおける中・上級者向けのノウハウ記事です。

RPGツクールMV・MZは、エディタとしてはいわばJSON出力装置のGUIといって過言ではありません。
あとは基幹となるコアスクリプト画像や音の素材がついてくるので気軽につくり始められる、そんな感じです。

いきなりなんのこっちゃ、と思われるかもしれません。
たとえばアクターのデータベース。敵キャラでもアイテムでもそうです。
さらにいえばマップ。イベントリスト。そのへんはMV以降ではぜんぶJSONの形で保存されます。

試しに、MZで新規作成したプロジェクトのActors.jsonを覗いてみましょう。

[
null,
{"id":1,"battlerName":"Actor1_1","characterIndex":0,"characterName":"Actor1","classId":1,"equips":[2,0,0,3,0],"faceIndex":0,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"リード","nickname":"","note":"","profile":""},
{"id":2,"battlerName":"Actor1_2","characterIndex":1,"characterName":"Actor1","classId":1,"equips":[1,0,0,9,0],"faceIndex":1,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"プリシア","nickname":"","note":"","profile":""},
{"id":3,"battlerName":"Actor1_3","characterIndex":2,"characterName":"Actor1","classId":5,"equips":[31,0,65,5,0],"faceIndex":2,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"ゲイル","nickname":"","note":"","profile":""},
{"id":4,"battlerName":"Actor1_4","characterIndex":3,"characterName":"Actor1","classId":5,"equips":[31,0,0,5,0],"faceIndex":3,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"ミシェル","nickname":"","note":"","profile":""},
{"id":5,"battlerName":"Actor1_5","characterIndex":4,"characterName":"Actor1","classId":2,"equips":[7,0,0,20,0],"faceIndex":4,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"アルベール","nickname":"","note":"","profile":""},
{"id":6,"battlerName":"Actor1_6","characterIndex":5,"characterName":"Actor1","classId":2,"equips":[7,0,65,21,0],"faceIndex":5,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"ケイシー","nickname":"","note":"","profile":""},
{"id":7,"battlerName":"Actor1_7","characterIndex":6,"characterName":"Actor1","classId":3,"equips":[7,0,0,20,0],"faceIndex":6,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"エリオット","nickname":"","note":"","profile":""},
{"id":8,"battlerName":"Actor1_8","characterIndex":7,"characterName":"Actor1","classId":3,"equips":[7,0,0,20,0],"faceIndex":7,"faceName":"Actor1","traits":[],"initialLevel":1,"maxLevel":99,"name":"ローザ","nickname":"","note":"","profile":""}
]

こんな感じです。
要するに配列ないしオブジェクトを特定の記法でまとめてあるテキストデータです。
id:0はツクールでは使われていないためnullになっています。
id:1がリード、つまりこいつのデータです。

画像1

battlerNameは戦闘キャラのファイル名、characterNameやcharacterIndexは歩行キャラの指定、あとは職業だの初期装備の配列などが並んでいるのがわかると思います。

今回の趣旨は、こういったJSONをオリジナルで用意すると便利なこともあるよ、というものです。

なにが便利なのか?
たとえばこういうものに便利です。

画像2

これは私の作品『異放生態ダンジョン』における文書画面です。
さて、この画面を実装するにはどうすればよいでしょう?
Scene_TextListという新しいシーンをつくってどうのこうの……といろいろあるのですが、そのへんはひとまず置いて、「テキストの情報をどこで持つか」というのが問題になります。

ツクールのデフォ機能でなんやかんやしようと思うとコモンイベントを利用するのが妥当でしょうか。
ただ、あっという間にわけのわからないことになると思います。
なにせ、本作ではこの文書が5万字ほどあります。
文書の数自体も200超くらいだったでしょうか。
めちゃくちゃ計画的につくるならともかく、思いついたら追加、という形でつくる場合は間違いなくややこしくなります。

ので、本作ではText.jsonを新規に用意しました。

イラスト

中身はこんな感じです。
オブジェクト(連想配列)形式で、「禍禁術」というプロパティで呼び出せば「禍禁術」の文書に関する情報が取得できます。
テキストの内容はtext、また発見場所や分類などの情報もまとめてあります。
このJSONデータをdataフォルダに入れておけば以下のように使うことができます。

var $dataText        = null;
DataManager._databaseFiles.push(
	{ name: '$dataText', src: 'Text.json'}
);

こうです。
こう書くことで、$dataTextを呼び出せばText.jsonで書いた内容を呼び出すことができます。
さっきの「禍禁術」でしたら$dataText["禍禁術"]です。
テキストデータを出したい場合は$dataText["禍禁術"].textです。
これをいい感じに表示させる処理を書けば上の画面がつくれます。

え? 日本語でいいの?
あまりよくないかもしれませんが、わかりやすさ重視でこうしました。
ちょっと管理はしづらいかもしれません。
(このへんは開発環境や好みの問題ということで……)(ほぼ個人制作だから許されるやつかも)

以上、ツクールデフォにはない独自のデータベースを必要とする場合のノウハウでした。

この記事が気に入ったらサポートをしてみませんか?