今まで仮組みしていた RPG・ADV・SLG の機能を nao1215/gozen として公開した。ebitengine の薄いラッパーである。ebitengine がエビ天から命名されているので、エビ天を拡張するものとして御膳とした。エビ天で御膳というと、蕎麦がついてくる印象がある。エビ天を最後に食べたのはいつだろうか。

RPG「Go Zen」ノベルゲーム「After the Pass」
Go Zenの町・ダンジョン・戦闘・会話のデモAfter the Passの会話・選択肢・巻き戻し・スキップのデモ
SLG「Five Banners」
Five Bannersの戦争マップ、出撃画面、軍勢の衝突、王冠の色で示された地域のデモ

gozen は、ゲームエンジンというより、YAML で定義する RPG ツクールに近い。最近は、YAML で定義するのがマイブームだ(N 度目の主張)。LLM フレンドリーであり、デバッグ機能が豊富だ。例えば、自動プレイや戦闘シミュレーションの機能があり、勝率やフロア突破率をデータとしてチェックできる。プレイ中に「ここ、微妙だな」と感じた場面にメモを残せる。LLM にメモを監視させて、LLM が修正した YAML をホットリロードしてプレイを続けられる。現代的だ。

自分用のツールであるため、静止画でやりきれる範囲の機能だけ提供する。3D モデルだなんてとんでもない。ゲームエディタのような GUI を提供しておらず、エンジニアが LLM を介してゲーム開発しやすいように設計している。ユーザーが増えたら、GUI 提供を考え始めるだろう。避けたいのは、gozen の開発に夢中になることだ。完全に偏見だが、エンジニアはゲーム開発よりも、ゲームエンジン開発に熱心になってしまうケースが多いのではなかろうか。

基本的には、gozen はウィザードリィスタイルのダンジョン、戦闘(ドラクエ式、SLG 式)、会話イベントが作れるだけだ。上手に設計すれば、RPG・ADV・SLG の要素をブレンドしたゲームも作れる。サンプルのRPG、ADV、SLG は、ブラウザプレイできるように公開されている。WASM 万歳。モバイル対応もやれば出来る筈だが、そこまで試していない。

会話広場
表情が変わり、まばたきするキャラクターの会話画面広場を歩き、吹き出しで会話する場面
マップ一人称視点のダンジョン
井戸へ向かうパーティーのマップ画面一人称視点のダンジョン画面
戦闘カットイン
ダメージ表示のあるボス戦オックスのシールドラッシュのカットイン
ショップスキルツリー
ゲーム内ショップの商品一覧インクバーストを選択したスキルツリー
タイトル画面
Go Zenのタイトル画面
巻き戻し(Q、マウスホイール)未読箇所までスキップ(N)
会話と選択肢を巻き戻すノベルゲーム画面選択肢を選び直し、未読箇所の手前で止まるスキップ機能
多言語対応立ち絵の演出(stand、effect)
設定を日本語に切り替えると台詞も日本語になる場面キャラクターの登場演出と揺れる立ち絵
台詞付きイベント画像
バーで歓声を上げるブレンナと、その下に表示された台詞
戦争マップ軍勢の衝突
地域の支配色や週、地域情報、将軍を表示したマップ地形上に並ぶ二つの軍勢と将軍のカード
地域の配置と支配状況を一枚の地図に表示部隊の兵士数に応じて、戦闘中に兵士の群れが縮小
F5:YAMLの変更を同じ場所に反映F9:画面と状態をメモに保存
YAMLで台詞を編集し、F5で同じ場所の表示を更新F9でメモを開き、コメントを入力して保存
F7:戦闘の勝率F8:状態(フラグ・数値)
敵の編成ごとの勝率を示す画面開発パネルに表示されたフラグと選択状態
F8:各イベントのフラグF8:シーン移動
イベントごとに設定・参照するフラグシーン一覧から夜のイベントへ移動
F8:YAMLコマンド実行F8:フレーム計測
Commandタブでsetを実行し、Stateタブでフラグを確認酒場の画面に重ねて表示されたフレーム計測
F6:キャラクター図鑑(プロフィール、表情、関係)
プロフィールや表情、他キャラクターとの関係を表示した図鑑

サンプルゲームに登場するキャラの一部は、公開を考えていた RPG のために作った画像から借用している。この RPG は、2〜3週間作り込んだが、面白くならなかった。私が普段作る OSS よりも開発期間をかけたので、元を取るためにゲームエンジンとして切り出した。v0.1.0 が出来上がる直前まで RPG のキャラをサンプルに使うか迷ったが、有効活用することにした(半分ぐらいは、非公開になっている)。ポシャった RPG は ADV としての機能が半分ぐらい実装されていたので、あと付けで ADV も作れる形に gozen を改変した。SLG は、適当に追加したので完成度がまだ低い。

お試しで作ったゲームの機能が部分的に生き残っている。例えば、「VTuber にチャットして読み上げてもらうゲーム」を思いつき、その名残でチャット機能、単語の検閲機能、キャラが Live2D のように表情を変えながら動く機能がある。他にも、町を擬似 3D 空間で歩くために、マインクラフトじみた空間を作ったりした。安っぽかったので、今は奥行きのある一枚絵上をローポリで歩くに留まっている。開発者的には「ブロックの空間だけど、町を歩けてる〜」と感動するのだが、ユーザー視点ではショボいと判断した。

今後は gozen を育てていくというよりは、ゲーム開発で得た知識・経験を gozen に反映していく形になる。gozen を本格的に宣伝するのは、gozen を利用したゲーム1本が完成したタイミングとなる予定。完全に余談だが、LLM に絵の評価を任せると、高解像度の絵を読み込む時にやたらトークンを消費する。

Claude Max 20x を一日中動かしていたら、3日で Weekly Limit に達した。また、v0.1.0公開前にパブリック API が1200個以上あり、なんて酷い設計をするんだと少々驚いた。ゲーム系の場合は、Claude の生成がやや劣る可能性がある。なお、パブリック API は、150個程度まで減らした。正直、50個ぐらいでも成立するのではないかと疑っている。