以前書いた記事 でも少し触れたやつ。
どういうわけか?
ランダムっぽくするために
先日公開した 貴方が狼カードデス! というゲームがあります。このゲームは人狼モチーフのゲームになっており、プレイするたびに登場人物たちの配役が変わるようになっています。
……と言っても グノーシア みたいに本当にランダムに配役が決まって様々な分岐をしているわけではありません。単にいろんなパターンの組み合わせで物語が書いてあって、その中からランダムに1つ選ばれてスタートするみたいな仕組みです。
(※ちなみにこの記事を書いたv.1.0.3時点では20パターンあります)
クリアしたお話は再度選ばれなくなる仕組みが入っていたりするので、感覚としてはプレイするたびに毎回別のお話が始まるように十分感じられるはずです。全パターンやりきる前にエンディング見れるはずだし(たぶん)
とは言うものの、いっぱい作るのは大変!
もちろん、いろいろな配役パターンのお話を書くこと自体も大変ですが、そこに加えて「書いたお話をゲームに組み込む」部分も大変だったりします。
本作は RPGツクールMZ で作成しているので、ゲームに組み込むためにはイベントコマンドとして入力していくことになります。
こういう感じ。
単純にセリフや地の文を打ち込むだけではなく、キャラの立ち絵を出したり、BGMや効果音を再生したり、演出を入れたりなど、様々なイベントコマンドをいろいろ入力してあげる必要があります。
この作業がかなり時間がかかるため、お話をたくさん作ろうとするとかなりここがネックになることが制作開始の時点で予想されました。
なのでパターン化
今回つくるゲームは人狼モチーフのゲームのため、ゲームの流れをある程度固定化できます。
- キャラクター同士の話し合い
- 誰を処刑するかの投票
- 結果発表
- 感想タイム
基本的にこの流れになります。
このうち (2) と (3) 自体はお話の流れに関わらず共通です。お話ごとに変わるのは (1) と (4) だけです。
つまり、この (1) と (4) だけを抜き出して、もっと簡単に作成できるフォーマットで組み込むことができれば、お話をゲームに組み込む労力を減らすことができそうです。
……というお話。
Markdown を使ったお話スクリプト
『貴方が狼カードデス』では、 Markdown を使ったイベントコマンド変換システムを構築しました。
なんで Markdown ?
以下の3つの要件を満たすものが良いと考えました。
- 誰でも使えるテキストエディタなどで人間が簡単に編集できるもの
- テキストエディタ上で、シンタックスハイライト(色分け表示)が有効になるもの
- 既存のライブラリなどで読み込みができるもの
(2) と (3) については JSON や XML とかでも良いのですが、人間が手で編集するのはちょっと面倒くさいです。あくまでお話を考えながら書くときに邪魔にならない程度に人間に優しい(=特殊な記法が少ない)ほうが良いと思いました。
Markdown は(方言はいろいろありますが)基本的にルールがあまり多くないため、今回は Markdown をベースに作ってみることにしました。
ただし使い方は邪道
僕は Markdown の『記法』を使うだけで、 Markdown 上での意味を厳守する気は1mmもありません。そもそも書くの文章じゃないですからね!
あくまで Markdown と同じ記法を持つ別の何か、です。
こんな感じのルールにしました
<!-- HTMLコメントはコメントとして扱われます。つまり何も起きません --> > Ruたん,normal > キャラクターのセリフは Markdown の引用で表現します。 > 1行目がキャラクター名,表情名で、2~3行目がセリフです。 <!-- ツクールの各種コマンドは画像埋め込みの記法で表現します。 alt の部分にコマンド名、pathの部分にコマンドにわたすパラメータを挿入します。 bgm : 音楽変更 se : 効果音 wait : ウェイト(待ち時間) addState : キャラクターの頭の上に「自称占い師」みたいな状態を表示する --> ![se](se_damage) ![wait](60) ![addState](rutan,self_villager) <!-- リスト+リンクの形で選択肢を表現します。 なお、この仕組みは作ったけど結局使いませんでした(◞‸◟) --> > Ruたん,angry > 僕は狼じゃないです! - [信じる](flag1) - [信るわけねーじゃん](flag2) ## flag1 > Ruたん,smile > 騙されたな馬鹿め! ![goto](end) ## flag2 > Ruたん,sad > ひどい~~ ## end <!-- おわり -->
画像でコマンドを表現するあたりが本当に""""邪道"""""って感じですが許してもらおう(?)
この形式で書かれた Markdown を読み込んで、ツクールのイベントコマンド形式のJSONファイルに変換するスクリプトを用意しました。
ゲーム内からは動的にJSONファイルを読み込んで、ツクールにイベントとして認識させて再生する形です。
実際にやってみて
よかったところ
- かなりスピーディに作業ができた
- イベント組み込みの時間が大幅に削減できたため、シナリオ量産が比較的容易
- 動かしてみて確認→修正もツクール上でやるより早い(カンタンに検索できるし)
- 記法にあまり悩まない
- テキストエディタのシンタックスハイライトが効くし、記法も少ないので間違えにくい
微妙だった部分
- ツクールの書式コマンドはキレイに色ついたりしないので見づらい
僕のルビプラグイン、 Markdown のリンクとフォーマット被ってるので変換スクリプト書くときに面倒くさいことになった(自業自得)
以前 YAML を使って同じようなことをしていたのですが、それよりはだいぶましかな……?
とはいえ、もうちょっと課題はありそうですね。
おわり
というわけで、『貴方が狼カードデス!』におけるイベント増殖術でした。
なお、 Markdown を使ったのはメインのランダムゲーム部分だけで、オープニングやTIPSなどのイベントシーンは普通にツクール上で作っています。
というのもピクチャの表示や様々なプラグインの操作などを Markdown の記法で表現するには難しいため、無理なことはせずに決まったパターンで量産が必要な部分だけに絞って使っています。
個人制作において物量は敵なので、いろいろな悪知恵を絞ってショートカットをしていくぞ!!!!!!