2021年9月30日木曜日

【ウディタ】テキスト読込みでメッセージを表示する

何番煎じかわからないが、このシステムを作ってから3作完成、1作作成中なので、その経験もふまえて記録を残せたらなということで、書いてみる。

作った背景

作った人のブログを見て、自分もやってみたくなった。
いざ作ってみて使ってみたら便利だったので、もっと便利にしたくなって機能拡張を続けている。
継ぎ足して作られた秘伝のソースなので、コモンの中身は魔境

作ってよかった点

イベント編集ウィンドウがすっきりする。(これが一番大きい)
イベントの編集・修正が簡単になる。
同じテキストを複数箇所で簡単に呼び出せる(あとから読み返せるチュートリアルとか)。
    

しんどい点

コマンドを覚えて打ち込む必要がある(超キツイ)。
ファイル数がとにかくスゲー増えるので、楽な管理方法を考える必要がある
(うちのシステムではファイルパスを一つ一つDBに登録しなければならないので、この作業がとてつもなくだるい。ちなみに、ファイル数は『MoebirinAdventure』で155、『レイユウサイ』で155、『ケルリート』で214)。
呼び出すテキストを間違えると大変なことになる場合がある(フラグ周りとかね)。

システムの構成

1.テキストドキュメント
コマンド行+パラメータ指定(数値、文字列)行という形で記述されている。
コマンド行頭には、コマンド行を示す記号を入れてパラメータ指定行と区別している。
以前はWindows標準の「メモ帳」を使って書いていたが、今はVSCodeで書いている。
2.UDB「テキスト登録」
1.で作成したテキストドキュメントのパスを入れておくDB。
3.コモンEv「テキスト表示」他、補助コモン
2.で登録したテキストを呼出し、表示するコモンEv。
1コモンではさすがにしんどいので、いくつか補助コモンがある。
4.CDB「コマンド一時保存」
テキスト表示前に、このDBへテキストドキュメントのデータを保存する。
正直言って、実装した当初の目的はわすれた。
ただ、バックログ機能で役に立っている(処理の共通化)ので、目的はこれかもしれない。しらんけど。 
 

コマンド記述でできること

コマンド記述で以下の機能が使用できる。大半は補助コモンと他システムとの連携で実現している。
1.テキスト表示
中核の機能。
次回作向けのバージョンでは、名前表示無しの場合は3行、名前表示有りの場合は2行まで同時表示可能。
2.顔グラフィック表示
あらかじめDBに登録した顔グラフィックを呼び出す機能。
高解像度向けの歩行グラフィックをコモンで切り抜いて表示している。
3.音響関係の操作
システムDBに登録されている効果音やBGMを再生できる。
4.ウェイトをかける
微妙な会話の間なんかに使う機能。
5.画面エフェクトをかける
白・黒・赤の画面フラッシュ、トランジション、縦・横揺れエフェクト、暗転処理ができる。
6.コモン呼び出し
指定した名称のコモンを呼び出す。引数も指定可能。
7.イベント操作
指定した(疑似)マップEvを操作(歩行、向き変更)できる。
8.ウィンドウ透過
文字通りの機能。実装したけど正直なところ使ってない。一枚絵背景にテキスト表示とかするのに使えると思う。
9.ピクチャ表示
専用DBに登録したピクチャをプリセット座標(左寄り・中央・右寄り)、指定拡大率で表示する機能。
文字列ピクチャも出せて、文字列は自由に座標を指定できる。
微妙に不便なので改善の余地ありな機能。
10.変数操作
変数呼び出し値で指定した変数に、指定数値を加算または代入できる。
フラグ操作用ですね。
11.背景画像表示
9.ピクチャ表示と似ているけど、こっちは直接フォルダ内のピクチャを指定する。
表示座標は左上X0、Y0で固定。
正直9と統合したい。次回作完成後にそういう整理をする作業をやりたい……。
12.選択肢表示
自作選択肢コモンを呼び出す機能。選択肢は10個まで指定できる。選んだ選択肢に応じて、指定されたテキストを呼び出す。
選択肢の選択後に、選択肢を再表示するオプション付き。チュートリアルとか重要な選択肢とかで使う。
13.変数分岐
変数Aと変数B or 数値が指定条件を満たしているか否かで、次に呼び出すテキストを変化させる機能。
条件は、同じ/以上/以下/超/未満の5種類。
特定のフラグが立っていたらテキストを変化させるのに使う。
14.場所移動
ウディタ標準のマップ移動コマンドと同じ動作をする機能。
移動時のトランジションや効果音も一緒に指定できる。
15.条件起動
指定した変数の指定条件を満たしていたら次コマンド以降を処理し、満たさない場合は終了する機能。
普通のテキスト表示ではあまり使わない。難易度に応じて操作する変数を増やすといった処理をしたいときに使う。13.変数分岐でも同様の処理は可能ではあるけど、これはtxtファイルを増やさず実装可能。
16.別テキスト呼出
指定したテキストを呼び出す機能。
選択肢でテキストを一時的に分岐させるが、差分程度で残りはテキストが共通……というときに使う。
身もふたもないけどコピペでええんちゃう?という感じもしなくはない。
        

コモンEvの機能

コマンドとは別に、コモンEv側の機能として実行可能なものが以下の通り。
1.テキスト直打ちで表示する
1つのコマンドしか使えない(テキスト表示でもBGM再生でもなんでもいい)が、コモンEvの引数指定欄に直打ちして実行できる。
2.バックログ機能
文字通りの機能。画面いっぱいに出るのではなく、メッセージを1つ1つ遡っていくタイプ。
テキスト読ませるゲームだったら怒られそう。ここも今後改善したい。
ちなみに選択肢表示中にも使える。
3.オートモード機能
ADVによくある、オートでテキスト送りしてくれる機能。
テキスト送り待ち時間はコンフィグで調整可能。
4.テキスト送りボタン連打で瞬間表示
テキスト表示途中にテキスト送りボタンを押すと、残りを瞬間表示する機能。
5.スキップ機能
現在読み込んでいるテキストドキュメントの残りを全てすっ飛ばして終了することができる。
本当はテキストドキュメント単位ではなく、イベント単位で飛ばしたいが、実現できていない。
6.未読/既読判定
スキップ実行時、未読だったらスキップするか確認画面を出せる(出さないようにもできる)。
ただ、現状は一度読んだ後ロードし直すと未読のままになる仕様。正直言ってこれはアホ仕様だと思うので、次回作公開までに既読フラグはシステムセーブに収めるようにしたい。
    
あらためて書き出すとすごく多い。ただ、作り直したい箇所はそれなりにあるし、まだまだ機能が足りないので、次回作を出した後、機能がさらに増える気がする。
VSCodeを使ったコマンド記述は、気が向いた時に紹介します。