5.9. ウィンドウ

5.9.1. 構造に関する構成要素
5.9.1.1. 構造体 $C30000: ウィンドウ
5.9.2. 振る舞いに関する構成要素

本節ではウィンドウについて述べる。

5.9.1. 構造に関する構成要素

ウィンドウを表現するのに関わる構造的な構成要素について述べる。

5.9.1.1. 構造体 $C30000: ウィンドウ

アドレス $C30000 に次の表が示す型のオブジェクトが 190 個程度配列されている。 これらのオブジェクトが画面上に描画されるウィンドウの仕様を表現している。

表 5.28 構造体 $C30000

オフセット 属性
#$00 #$001F CX
#$00 #$03E0 CY
#$01 #$007C SX
#$01 #$0F80 SY
#$02 #$0030 数値表示処理
#$02 #$00C0 入力解釈処理
#$03 #$000F 前回入力保存処理
#$03 #$0030 カーソル
#$03 #$0040 グレーアウト禁止
#$03 #$0080 位置固定
#$04 #$0001 サイズ拡張方向
#$04 #$001E ページ当たり行数
#$04 #$0020 サイズ固定
#$04 #$0040 生成時効果音再生
#$04 #$0080 カーソル効果音禁止
#$05 #$0007 マージン
#$05 #$00F8 処理分類
#$06 #$00FF 兄弟ウィンドウ 0
#$07 #$00FF 兄弟ウィンドウ 1
#$08 #$00FF 兄弟ウィンドウ 2
#$09 #$FFFF 描画アドレス
#$0B #$00FF 実質未使用

各属性の意味を以下に記す。

CX, CY

画面の最も左上のドットからウィンドウの左上隅のドットまでの X および Y 方向についての変位を文字サイズ単位で表した値を取る属性だ。 ウィンドウが画面最も左上から描画されるときに値が (1, 1) であるものとする。

SX, SY

文字サイズ単位でのウィンドウ横幅および縦幅の寸法をそれぞれ値とする属性だ。 ただし、ウィンドウがその内容に依存して動的に大きさを決定する必要がある寸法については、 でたらめな値が属性値として定義されていることがあるので注意を要する。

数値表示処理

具体的にはジャンプテーブル $C31ACC の行番号を属性値とする。

入力解釈処理

具体的にはジャンプテーブル $C33BB7 の行番号を属性値とする。

前回入力保存処理

この属性値はプレイヤーによるウィンドウでの何らかの入力を何らかの形式で保存する処理の分類とみなせる。 例えば仲間キャラクターの移動中じゅもんウィンドウで何かの項目を選択すると、 次に同一キャラクターのじゅもんウィンドウを開いたときにこの項目にカーソルがセットされているが、 この振る舞いはこの属性値の作用によるものだ。

具体的にはジャンプテーブル $C33BBF の行番号を属性値とする。

カーソル

ウィンドウにカーソルを描画するときには、そのカーソルの形状を表す値を取る属性だ。 値とカーソル形状の対応は次のようになっている。

表 5.29 カーソル

ID カーソル
0 なし
1 三角形
2 米印
3 透明

グレーアウト禁止

ブーリアン型属性で、値が 1 ならばこのウィンドウが入力フォーカスを失っても、 ウィンドウ全体をグレーアウトする処理を省略することを示す属性だ。

位置固定

ブーリアン型属性で、値が 1 ならばこのウィンドウを常に同じ位置に描画することを示す。 唯一値が 0 となっているオブジェクトは、移動時のメッセージ出力ウィンドウだ。 「はなす」および「しらべる」の際には、パーティーの画面に対する相対的な位置によっては画面上側に描画する。

サイズ拡張方向

ウィンドウが内容物によってサイズを拡張する場合に用いられる属性だ。 値が 0 ならば垂直方向(下方向)に、値が 1 ならば水平方向

ページ当たり行数

ウィンドウが複数ページからなるときに、一つのページあたりの可変項目部分の最大行数を値とする属性だ。 例を挙げると、ルーラウィンドウならばこの属性値は 5 となる。

サイズ固定

ブーリアン型属性で、値が 1 ならばこのウィンドウはサイズが固定されていることを意味する。

生成時効果音再生

ブーリアン型属性で、値が 1 ならばこのウィンドウが画面に表示される瞬間に効果音 #$0050 を再生する。 「はい・いいえ」系のウィンドウオブジェクトの属性値が 1 となる。

カーソル効果音禁止

ブーリアン型属性で、値が 1 ならばカーソル音 #$003D を鳴らさないことを意味する。

マージン

このウィンドウがサイズ固定でないときに、ウィンドウ構成単位の可変長方向に対する寸法を文字サイズ単位で表した値を属性とする。 例えば「つよさ/ぜんいん」のマージン属性値は 5 となっている。 これは各キャラクターのスペースが 5 文字長(このオブジェクトは水平方向)であることを意味する。

処理分類

ウィンドウ処理に関する各種ジャンプテーブルの行番号を属性値とする。

兄弟ウィンドウ k (k = 0..2)

このウィンドウを描画するときに、同時に画面内に描画する別ウィンドウの ID をそれぞれ値に取る属性だ。 例えば「つよさ」ウィンドウはキャラクターリストが本体で、 同時にステータスウィンドウ、装備リストウィンドウ、属性値リストウィンドウを兄弟ウィンドウとして描画する。

描画アドレス

ウィンドウの内容を定義するための処理コードのアドレスを値とする属性だ。 プログラムバンクは #$C3 固定とする。

実質未使用

全てのオブジェクトで値 0 が設定されており、プログラムからの参照もあるのだが、 用途が不明の属性だ。

5.9.2. 振る舞いに関する構成要素

ウィンドウの振る舞いについて述べる。 特に、ウィンドウオブジェクトの操作を実現しているサブルーチンについて述べたい。