Heaven Burns RedのADVパートを構成する物について
技術的な面でのメモになります。
Heaven Burns Red(以下、ヘブバン)はUnity、C#、Lua、SPARK GEARで構成されています。ヘブバンのゲーム構成は「ADV」「フィールド」「戦闘」の3構成となっています。
ADVパートの作成
ADV実装はUnityとLuaの構成で行なっているそうです。シナリオの納品は.txtで送られるのでLua向けに変換するツール「Tulip」を作ったとの事。
ADVを作るまでのフローは
Key(ビジュアルアーツ)からシナリオの納品(.txtで納品される)
↓
.txtをTulipで変換
↓
スクリプト作業(レイアウト命令)
↓
テストと修正(UnityとLuaのホットリロード)
テキストファイルにはキャラ指定、コメント、吹き出しの種類が含まれます。通常の場合は1行ずつLua構文に修正する必要があり相当な労力を要します。手作業になると正確性が低い事やミスもあり得ます。
なので変換ツールである「Tulip」を作成し、自動化を可能にしました。
シナリオ変換ツール「Tulip」について
納品されたシナリオを(.txt)をLuaに変換するパーサー
使用言語はPythonとC#
Unityのツールとして実行
シナリオの量産を向上
一例では
【茅森】「サンプル」
【和泉】「サンプル2」
を自動的に
Adv.talk(`茅森”, [[サンプル]])
Adv.talk(`和泉”, [[サンプル2]])
という風に自動でやってくれるのだそう。
実装
テキストファイルを上から順にロード
特定の文字列を探し、変換
キャラ一覧は事前にロード済み
シナリオのテキスト以外に選択肢にも対応しています。シナリオ中の「3×3(サザン)選択肢」(ADV中に時々出る3つで構成する選択肢)のテキストファイルはビジュアルアーツで使用されているSiglusEngine(シグラスエンジン)の構文で来るそうです。それもTulipを使用する事でLua向けに変換された状態で出力されるそうです。LuaではdoubleQuestionの命令に変換されます。SiglusEngineではswitch文がありますが、Luaにはswitch文がないのでif文を代わりに使う事で対応しているとの事。
スクリプト作業
基本構造はADV内で共通=同じ命令をたくさん書く必要がある
なのでテンプレート化で自動作成できるように
ADVでの表示をパターン分けし、「1人のレイアウト」「2人のレイアウト」(フェードインとキャラを左+背景を左にスライド)「1名がフェードアウトし1人のレイアウトに戻す」(背景は右にスライド)
レイアウト命令(内製)を作りテンプレート化
演出を直感的に作る事が可能に
立ち位置の変化から途中経過を補完
背景を元にステージを作成
ADV立ち絵を表示
命令を書く事で複雑な演出が実現
テストと修正
開発サイクルは基本的に
エディタ再生
確認
エディタ停止
修正
ファイルを再インポート
1からに戻るの繰り返し
効率を上げるためにUnityとLuaのホットリロードを可能にしたそうです。特徴は以下。
エディタは再生したまま
Luaスクリプトのリロード
ホットリロードでシームレスなコードの修正が実現!
まとめ
ヘブバンのADVの演出が細かいのは色々な工夫のおかげ
UnityとLuaの相性が結構いい(ホットリロードとインポート不要でやれる)
ADVの量産がしやすい