2023年4月9日日曜日

【ウディタ】自作選択肢コモンの紹介

選択肢コモンを自作できるようになれば、メニュー画面を全自作できるようになるというのをTwitterで何度か話していたのですが、そういえば自分の違法増築したコモンを紹介してないことに気がついたので、紹介しておきます。

自作を思い立った背景

ウディタ標準機能の選択肢の仕様の制約にぶつかったり(選択選んだら表示消えちゃう)、自作システムで選択肢処理が必要になったりしたので、作ることにした。
あと自作ってカッコイイしな。処女作で作ったときはこれがメインだった気がする。
作品を経るたびソースを継ぎ足し違法増築した結果が以下の機能たち。

システム構成

  1. コモン「汎用選択肢」:選択肢の表示とキー受付を実行。引数は数値変数4つ、ウインドウの振る舞いと選択肢設定データの選択をする。
  2. コモン「カーソル操作・更新」:キー入力に応じてカーソル画像や選択肢文字列を動かすコモン。選択肢をスクロールさせるには必要だった……。
  3. その他座標計算や可変DB書き込み用コモン
  4. CDB「汎用選択肢」:選択肢設定を入れておくコモン。10個までの選択肢ならこのDBで指定できる。繰り返し使うメニュー選択肢なんかはこっちに入ってる。
  5. CDB「お店用選択肢」:名前に深い意味はない。11個以上の選択肢が必要なときはこっちに選択肢を書き込む。

機能

CDB:汎用選択肢

・選択肢1~10
  選択肢を設定する。
  歯抜けがあった場合、詰めて表示される。ウディタ標準機能と同じ感じ。
  11個以上設定したい場合は、CDB:「お店用選択肢」に書き込む。
・<選択肢>キャンセル可=0
  キャンセルキー受付可能かを設定する。
  不可にしたい場合は、1を入れる。
・<選択肢>窓透明率
  選択肢ウィンドウベースの透明率を設定する。
  透明にすれば他コモンでウィンドウ表示した上に表示できて便利。
  メニュー画面ではほとんど透明で表示してる。
  255(透明度無し)/128(半透明)/0(透明)
・<選択肢>窓X座標/窓Y座標
  コモンでプリセット座標を使用しない場合に使用する。
  【プリセット座標】
No.0:X12,Y25 「左上」
No.1:X1,Y172 「セリフ表示中向け」
No.2:X200,Y130 「タイトルメニュー用」
No.3:X12,Y66 「左上2」
・<選択肢>表示する選択肢数
  表示スペースに限りがある場合は指定する。
  地味に便利。
  0 :自動判定(画面端まで表示)
  1~ :指定数値ぶん表示
・<カーソル>記憶有効=1
  カーソル位置を記憶させたい場合は有効にする。メニュー画面等向け。
・<カーソル>選択肢位置
  コモン内で使用する項目なので、基本的に使用しない。
  カーソル記憶を有効にした状態で任意の数値を設定すると、
  初期状態で任意の場所を選択した状態にできる。
・<テキスト用>バックログ許可=1
  テキスト表示時、バックログ表示キーを受け付けるかを設定する。
・操作説明文
  画面下部の操作説明文を、任意の文字列に設定可能。
  設定しない場合はキー受付許可設定に応じて自動生成される。
・説明文1~10
  ヘッダに表示する説明文を設定する。
  ここでいうヘッダは画面右上に用意されてる説明文表示枠を指してます。
・<会話>イベントID(項目番号30~39)
  別システムで使用する領域のため設定不可。使ってたかどうか忘れた。
・選択肢1~10コード
  選択肢コードを設定する。基本的に設定は不要。
・ベースピクチャ番号指定
  選択肢ウィンドウベースのピクチャ番号を選択する。
  UDB「ピクチャ番号設定」で設定しているピクチャ番号から選択する。
  メニュー画面で使う場合等デフォルトだと表示できない時にいじる。
  【デフォルト設定】
「■[共通]選択肢・詳細表示」:「選択肢ウィンドウ」
「■左寄せフロート選択肢」 :「メニュー描画」
・ヘッダ説明欄表示
  ヘッダ説明欄表示の要不要設定をする。
  「外部出力」を選択した場合、指定したコモンを呼び出す。
・説明欄出力対象(コモン名)
  ヘッダ説明欄表示で「外部出力」を選んだ場合のみ有効。
  コモンイベント名を文字列で記述する。コモンの名前呼び出しはゴッド
  【外部出力説明欄仕様】
Cself0:選択肢コード(歯抜けを含めた選択肢位置)が入力される
Cself1:「外部出力2番へ1加算」機能で使用する。
ページ切替処理の実装に使う。
・<コモン一時保存>仮選択肢数
  一時保存領域なので設定不可。
・サブ/特殊機能/キャラ切替キー挙動
  各キーを押したときの挙動を設定する。
  0:説明欄外部出力2番(cself1)に1を加算する。ページ切替用。
  1:指定コモン呼出
  2:112/113/114を返す
・サブ/特殊機能/キャラ切替キーコモン呼出対象
  サブ/特殊機能/キャラ切替キー挙動で「指定コモン呼出」を選択した場合のみ有効。
  【外部出力説明欄仕様】
Cself0:選択肢コード(歯抜けを含めた選択肢位置)が入力される
Cself1~は使用しない。
・カーソル横サイズ(-1=自動)
  カーソルの横サイズを設定する。
  これあるとメニュー画面作るときに効いてくる。便利
・カーソル左始点シフト
  カーソルの左端座標をずらす設定ができる。
  +で右へ寄り、-で左へ寄る。
  メニュー画面は1pix単位の微調整が必須なのでやっぱり必須。
・選択肢返り値選択
  返り値の参照先を変えたいときにいじる。デフォルトは「選択肢コード」
  CDB「お店用選択肢」に選択肢入れてる場合のみ有効。
  欠番があるのは処理の都合。
  -1:選択肢コード
  1:データ取得用数値
  2:値段等表示用数値

CDB:お店用選択肢

・選択肢文字列
  表示する選択肢文字列を設定する。
・データ取得用数値、値段等表示用数値
  数値を格納できる欄。名前に深い意味は無い。
・タブ番号
  通常は使用しない。数値入れておきたいときに使う
・全体表示時優先表示ON=1
  使用しない。数値入れておきたいときに使う。使ってないけど
・選択肢コード
  自動設定されるので設定不要。
・説明文
  ヘッダ説明欄表示が有効のときに表示する説明文を設定する。
  ただこっちのDB使う場合は他コモンで説明欄用意しちゃうので使わない……。

今後ほしい機能

お前これ全部使ってんのか? って思うでしょう。使ってないって書いてないやつは全部使ってる。
次回作のシステム制作目標が「汎用選択肢処理でメニュー画面を構築する」(過去2作はコマンドごとに処理組んでてアホほど時間かかってた)だったこともあって、次回作向けにこれでもかと機能を爆盛りした結果、今のところ機能面では不満がないところまできているけど、ウディタ基本システムの「万能ウィンドウ」みたいにウィンドウのアニメーションはいじれないので、これを追加するのが今後の課題かなと思ってます。
次回作まではマッハでスライドして消える動作で固定です。
320×240だと正直マッハスライド消去でいいと思ってるけど、高解像度化したらアニメーション要るようになるのかな……。
あとは、ちょっと違うけどコモンの処理を整理したい。汎用選択肢コモンは760行もある。

選択肢コモンのつくり方をいつか書きたいけど、それは次回作の完成に目途がついたらかなと思ってます。
処理の整理ついでに書きたいな~と思ってます。320×240以外の解像度にも対応させたいし。

0 件のコメント:

コメントを投稿