5.31. すごろく

5.31.1. 構造に関する構成要素
5.31.1.1. 構造体 $C8D532: すごろくマス
5.31.1.2. 構造体 $C8EECA: すごろくマス分類
5.31.1.3. 配列 $C8F188: すごろくランダムイベントハンドラー
5.31.1.4. 構造体 $C8F1F4: すごろくランダムイベント列
5.31.1.5. 構造体 $C8F2E4: すごろく戦闘イベント
5.31.1.6. 配列 $C8F311: すごろくしらべるイベントハンドラー
5.31.1.7. 構造体 $C8F323: すごろく盤面
5.31.1.8. 構造体 $C8F53F: すごろく店屋画像
5.31.1.9. 構造体 $C8F551: すごろくアイテム確率
5.31.2. 振る舞いに関する構成要素

本節ではすごろくについて述べる。

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

すごろくに関係するデータ構造について述べる。

図 5.3 すごろくに関するクラス図

すごろくに関するクラス図

5.31.1.1. 構造体 $C8D532: すごろくマス

アドレス $C8D532 にはすごろく盤面を構成するマスを表現するオブジェクトが配列されている。 後述するように、ここにあるすごろくマスオブジェクトは構成する盤面ごとにグループ分けされている。

このオブジェクト型の詳細を次の表に示す。

表 5.81 構造体 $C8D532

オフセット 属性
#$0000 #$00FFFF MX
#$0002 #$00FFFF MY
#$0004 #$00FFFF 分類
#$0006 #$00FFFF イベント引数
#$0008 #$000003 通行上
#$0008 #$00000C 通行下
#$0008 #$000030 通行右
#$0008 #$0000C0 通行左

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

MX, MY

このマスの配置位置を M 座標系で表した X および Y 座標成分の値を属性とする。 プレイキャラクターの立つ位置と一致する。

分類

このマスの分類値を取る属性だ。 5.31.1.2 で述べるオブジェクトの ID に他ならない。

イベント引数

このマスで引き起こされる何らかのイベントが必要とする値を取る属性だ。 解釈は分類属性値によって決まる。

通行上, 通行下, 通行右, 通行左

各方向に対する移動制約を示す値を取る属性だ。 値が 0 ならばその属性方向に進める。値が 1 ならばその属性方向に戻る。 値が 2 以上ならば、その属性方向には一切通行できないことを意味する。

5.31.1.2. 構造体 $C8EECA: すごろくマス分類

すごろくマス分類とは、草原、森、山など、そのマスの種類を表すためのオブジェクト型であり、その詳細が次に示す表のようなものだ。 アドレス $C8EECA にはこの型のオブジェクトが 80 近く配列されている。

表 5.82 構造体 $C8EECA

オフセット 属性
#$0000 #$000001 サイコロ残り目を無視
#$0000 #$000002 階層変化時でもイベントを処理
#$0000 #$001FFC スプライト 0
#$0001 #$00FFE0 スプライト 1
#$0003 #$FFFFFF 初期化処理
#$0006 #$FFFFFF 実行処理

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

サイコロ残り目を無視

ブーリアン型属性で、値が 1 のものはこのマスを通過する際、サイコロの残り目に関わらずここで停止することを示す。

例えば階段のマスについて、そこで丁度止まらないと盤面移動イベントが発生しない種類のものがある。

階層変化時でもイベントを処理

ブーリアン型属性で、値が 1 のものはすごろく盤面をまたがってマスの間を移動する場合に、 このマスが移動先であれば、関連するイベントを引き起こすことを示す。

例えば、旅の扉や階段のマスは値が 0 でなければならない。

スプライト k (k = 0..1)

このマスに描画するスプライトを指定する値を取る属性だ。 上モノと地の部分とに分けられている。

初期化処理

このマスに関連するイベントを処理する際の準備を行うコードのアドレスを属性値とする。 前項で言うところのイベント引数を動的に決定する。

実行処理

このマスに関連するイベントを処理するコードのアドレスを属性値とする。

マス分類と内容の対応を次の表に示す。

表 5.83 マス分類

ID 内容
#$00 n/a
#$01 草原
#$02
#$03
#$04 立て札上
#$05 立て札右
#$06 立て札下
#$07 立て札左
#$08 ゴールド +50
#$09 ゴールド +100
#$0A ゴールド +150
#$0B ゴールド +200
#$0C ゴールド +250
#$0D ゴールド +300
#$0E ゴールド +500
#$0F ゴールド +1000
#$10 ゴールド +2000
#$11 ゴールド +5000
#$12 ゴールド -50
#$13 ゴールド -100
#$14 ゴールド -150
#$15 ゴールド -200
#$16 ゴールド -250
#$17 ゴールド -300
#$18 ゴールド -500
#$19 ゴールド -1000
#$1A ゴールド -2000
#$1B ゴールド -3000
#$1C 戦闘
#$1D HP ダメージ
#$1E 旅の扉
#$1F マス移動 +1
#$20 マス移動 +2
#$21 マス移動 +3
#$22 マス移動 +4
#$23 マス移動 +5
#$24 マス移動 +6
#$25 マス移動 -1
#$26 マス移動 -2
#$27 マス移動 -3
#$28 マス移動 -4
#$29 マス移動 -5
#$2A マス移動 -6
#$2B 振り出しに戻る
#$2C ランダム
#$2D 宿屋
#$2E よろず屋
#$2F 階段上り
#$30 階段下り
#$31 階段上り
#$32 階段下り
#$33 洞くつ
#$34 ふりだし
#$35 あがり
#$36 宝箱アイテム
#$37 宝箱ゴールド
#$38 宝箱罠
#$39 つぼアイテム
#$3A つぼゴールド
#$3B つぼ罠
#$3C タンスアイテム
#$3D タンスゴールド
#$3E タンス罠
#$3F 落とし穴場外
#$40 落とし穴場内
#$41 回復
#$42 MP ダメージ
#$43 MP 0
#$44 サイコロ +1
#$45 サイコロ +2
#$46 サイコロ +3
#$47 サイコロ +5
#$48 サイコロ -1
#$49 サイコロ -2
#$4A サイコロ -3
#$4B 数値変化
#$4C カギ
#$4D 宝箱

5.31.1.3. 配列 $C8F188: すごろくランダムイベントハンドラー

すごろくランダムイベントハンドラーとは、すごろくマス「?」で引き起こされるイベントの処理を実行するコードだと定義する。 アドレス $C8F188 にはそのようなコードの完全アドレスが 36 個配列されている。

以下にイベントハンドラーの ID とイベントの概要を記す。 各ハンドラーの具体的なアドレスについては、「SFC 版ドラクエ 3」の CSV に収録した。

表 5.84 すごろくランダムイベント一覧

ID メッセージ冒頭 イベント
#$00 夜空をやきつくす火の山 ちから +2
#$01 大地の神々よりつどいて ちから +4
#$02 時は風 すばやさ +2
#$03 夜空のきらめき すばやさ +4
#$04 つかれ知らぬその身体 たいりょく +2
#$05 こぶし100万回 たいりょく +4
#$06 これを知るをこれ知るとなせ かしこさ +2
#$07 おろかなる者は教えたがり かしこさ -3
#$08 しあわせの時は来たれり うんのよさ +2
#$09 森深き青き泉 うんのよさ +4
#$0A ちからなくうなだれる者 ちから -2
#$0B あまねく星たちのきらめきは見 すばやさ -2
#$0C しゃくねつのさばく たいりょく -2
#$0D 無知を恐るるなかれ かしこさ -2
#$0E 運わるしといたずらになげく者 うんのよさ -2
#$0F 時はいつわり ふりだしに移動
#$10 それは嵐か 何もない
#$11 闇に光る巨大な眼 盤面固定戦 0 が発生する
#$12 降りすさむ雨はやがて大河に 盤面固定戦 1 が発生する
#$13 おぞましきはばたきの音 盤面固定戦 2 が発生する
#$14 不注意なる者 所持金の半額 + 1 を失う
#$15 それは天の恵みか 所持金の半額 + 1 を得る
#$16 うごめくものどもにひとときの ランダム戦闘が発生しなくなる
#$17 過ぎし日の思い出を今いちど 何もない
#$18 それはならくの底か 落とし穴
#$19 試練の時は来たれり すごろくイベント #$4B と同じ
#$1A 深き土の底でねむる物 アイテム入手
#$1B なにごとも経験なりき 経験値 +1,000
#$1C なにごとも経験なりき 経験値 +10,000
#$1D おだやかなる時の流れ サイコロ残り +10
#$1E 人は人我は我 キャラクターが入れ替わる
#$1F 小鳥たちつどいて春を歌う 宿屋のマスに移動
#$20 我なんじの願いかなえる者なり 次のサイコロ出目を指定できる
#$21 風向きは追い風 マス移動 +6
#$22 風向きはむかい風 マス移動 -5
#$23 はげしい炎はすべてを無に帰し 性格が変化する

5.31.1.4. 構造体 $C8F1F4: すごろくランダムイベント列

アドレス $C8F1F4 はすごろく盤面にある「?」のマスで発生するランダムイベント ID 48 個の配列 5 個の配列となっている。 「?」のマスでは、この ID の配列に含まれているイベントしか発生しない。

5.31.1.5. 構造体 $C8F2E4: すごろく戦闘イベント

アドレス $C8F2E4 には次の型のオブジェクトが 5 個配列されている。 このオブジェクトがすごろく中に発生する戦闘の敵陣構成を指定する。

表 5.85 構造体 $C8F2E4

オフセット 属性
#$0000 #$000001 キャラレベル無視
#$0000 #$0000FE (未使用)
#$0001 #$00FFFF 乱数レベル下限
#$0003 #$00FFFF 乱数レベル上限
#$0005 #$00FFFF 戦闘レベル下限
#$0007 #$00FFFF 戦闘レベル上限

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

キャラレベル無視

ブーリアン型属性で、値が 1 のものは敵陣構成を決定するのにプレイキャラクターのレベルを無視することを示す。 例えば草原のマスでの戦闘は、常に弱いモンスターしか出現しないようになっている。

乱数レベル下限, 乱数レベル上限

敵陣構成を決定する際に乱数を発生させるのだが、その下限と上限をそれぞれ値とする属性だ。

戦闘レベル下限, 戦闘レベル上限

キャラレベルを無視する場合には上述の乱数を、考慮する場合はキャラレベルから上述の乱数を引いた差をまず考える。 この差をこれらの属性値でクリップする。

戦闘決定処理では、クリップされた値と通常戦オブジェクトのレベル属性値とを比較して、 最終的に通常戦オブジェクトを決定する。 通常戦オブジェクトについては 5.30.1.2 構造体 $C8ADD1: 通常戦 で述べる。

5.31.1.6. 配列 $C8F311: すごろくしらべるイベントハンドラー

すごろくしらべるイベントハンドラーとは、すごろくマスで足もとをしらべることで引き起こされるイベントの処理を実行するコードであると定義する。 アドレス $C8F311 にはそのようなコードの完全アドレスが 5 個配列されている。

表 5.86 配列 $C8F311

ID アドレス イベント
0 $C1C4F0 何も見つからない
1 $C1C976 モンスターが出現して戦闘となる
2 $C1C9B3 落とし穴が出現して現在の盤面から退場する
3 $C1C4F4 アイテム発見抽選処理を実行する
4 $C1C914 多額のゴールドを発見する
5 $C1C945 少額のゴールドを発見する

5.31.1.7. 構造体 $C8F323: すごろく盤面

すごろく盤面とは、次の表で示すようなすごろくゲームの詳細を表現するオブジェクト型のことだ。 アドレス $C8F323 にこの型のオブジェクトが 10 個配列されている。

表 5.87 構造体 $C8F323

オフセット 属性
#$0000 #$00001F しらべるイベント頻度 0
#$0000 #$0003E0 しらべるイベント頻度 1
#$0001 #$00007C しらべるイベント頻度 2
#$0001 #$000F80 しらべるイベント頻度 3
#$0002 #$0001F0 しらべるイベント頻度 4
#$0003 #$000FC0 しらべるイベント頻度の和
#$0004 #$0FFFF0 ゴールド大下限
#$0006 #$0FFFF0 ゴールド大上限
#$0008 #$0FFFF0 ゴールド小下限
#$000A #$0FFFF0 ゴールド小上限
#$000C #$000FF0 アイテム #$00
#$000D #$000070 アイテム確率 #$00
#$000D #$007F80 アイテム #$01
#$000E #$000380 アイテム確率 #$01
#$000F #$0003FC アイテム #$02
#$0010 #$00001C アイテム確率 #$02
#$0010 #$001FE0 アイテム #$03
#$0011 #$0000E0 アイテム確率 #$03
#$0012 #$0000FF アイテム #$04
#$0013 #$000007 アイテム確率 #$04
#$0013 #$0007F8 アイテム #$05
#$0014 #$000038 アイテム確率 #$05
#$0014 #$003FC0 アイテム #$06
#$0015 #$0001C0 アイテム確率 #$06
#$0016 #$0001FE アイテム #$07
#$0017 #$00000E アイテム確率 #$07
#$0017 #$000FF0 アイテム #$08
#$0018 #$000070 アイテム確率 #$08
#$0018 #$007F80 アイテム #$09
#$0019 #$000380 アイテム確率 #$09
#$001A #$0003FC アイテム #$0A
#$001B #$00001C アイテム確率 #$0A
#$001B #$001FE0 アイテム #$0B
#$001C #$0000E0 アイテム確率 #$0B
#$001D #$0000FF 敵陣グループ固定戦 0
#$001E #$0000FF 敵陣グループ固定戦 1
#$001F #$0000FF 敵陣グループ固定戦 2
#$0020 #$00000F すごろくランダムイベント
#$0021 #$00FFFF すごろくマス範囲下限
#$0023 #$00FFFF すごろくマス範囲上限
#$0025 #$00FFFF サイコロ残り
#$0027 #$0007FF 終了時復帰座標
#$0028 #$003FF8 落とし穴出口座標
#$0029 #$000040 ランダム落とし穴で続行
#$0029 #$03FF80 宿屋座標
#$002B #$001FFC ふりだし座標
#$002D #$00FFFF マップ視点左
#$002F #$00FFFF マップ視点上
#$0031 #$00FFFF マップ視点右
#$0033 #$00FFFF マップ視点下
#$0035 #$000001 入れ替わり時待機者再描画

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

しらべるイベント頻度 k (k = 0..4)

しらべるイベント頻度とは、草原、森、山のマスで足もとをしらべるときに引き起こされるイベントの発生頻度を表す属性だ。 各確率変数 k とイベントとの対応は次のとおりだ。

表 5.88 しらべる頻度

k イベント
0 落とし穴が出現して現在の盤面から退場する
1 モンスターが出現して戦闘となる
2 多額のゴールドを発見する
3 少額のゴールドを発見する
4 アイテム発見抽選処理を実行する

しらべるイベント頻度の和

しらべるイベント頻度 k それぞれと何も見つからないイベントの頻度との和を表す属性だ。

ゴールド大下限, ゴールド大上限

足もとをしらべることで多額のゴールドを発見するイベントが引き起こされた際に獲得するゴールドの範囲を表す属性だ。

ゴールド小下限, ゴールド小上限

足もとをしらべることで少額のゴールドを発見するイベントが引き起こされた際に獲得するゴールドの範囲を表す属性だ。

アイテム k (k=#$00..#$0B)

足もとをしらべることでアイテムを発見するイベントが引き起こされるときに獲得するアイテムの ID を値とする属性だ。 アイテムについては 5.23 アイテム で述べる。

アイテム確率 k (k=#$00..#$0B)

足もとをしらべることでアイテムを発見するイベントで、実際に発見するかどうかを抽選するためのオブジェクト、 すなわち 5.31.1.9 で述べるオブジェクトの ID を値とする属性だ。

固定戦闘 k (k = 0..2)

「?」マスのランダムイベント #$11..#$13 で戦闘になる際の戦闘、 すなわち 5.30.1.4 構造体 $C8B736: 敵陣グループ固定戦 で述べるオブジェクトの ID を値とする属性だ。

各 k と戦闘の意味の対応は次のとおりだ。

表 5.89 すごろく固定戦闘表

k 戦闘
0 闇に光る 巨大な眼
1 降りすさむ雨は やがて大河に
2 おぞましき はばたきの音

すごろくランダムイベント

この盤面で発生してもよいランダムイベントを列挙した配列を指定する値、 すなわち 5.31.1.4 で述べた配列(外側)の添字を取る属性だ。

すごろくマス範囲下限, すごろくマス範囲上限

この盤面を構成するすごろくマス (5.31.1.1) オブジェクトの ID の最小値および最大値をそれぞれ取る属性だ。

サイコロ残り

ゲーム開始時点におけるサイコロを振れる残り回数を表す属性だ。

終了時復帰座標

ゲームオーバー時の仲間キャラクターの復帰位置を表すオブジェクトの ID を取る属性だ。 データによると、どの盤面でも対応するすごろく屋の右隣の位置が設定されている。

このような座標オブジェクトについては 5.28.1.4 構造体 $C89BB7: 座標 で述べる。

落とし穴出口座標

しらべるイベントやランダムイベントで落とし穴にひっかかったときに、 パーティーがどこに移動するのかを表すオブジェクトの ID を取る属性だ。 すごろく盤面のある階層のすぐ下の階層のどこかが設定されている。

ランダム落とし穴で続行

ブーリアン型属性で、値が 1 のものは、 しらべるイベントやランダムイベントで落とし穴にひっかかったときでもゲームを続行することを示す。

宿屋座標

この盤面内にある宿屋のマスの位置を指定するオブジェクトの ID を取る属性だ。 宿屋飛ばしイベントがこの属性値を参照する。

ふりだし座標

この盤面の所属するすごろく場のふりだしのマスの位置を指定するオブジェクトの ID を取る属性だ。 ふりだしに戻るイベントがこの属性値を参照する。

マップ視点左, マップ視点上, マップ視点右, マップ視点下

座標系がよくわからないが、すごろくコマンドの「マップをみる」が参照する属性だ。

入れ替わり時待機者再描画

ブーリアン型属性で、値が 1 のものはキャラクター入れ替わりイベントが発生した際に、ふりだしで待機しているパーティーが再描画される。 どうやら盤面がふりだしを含むものでないときに入れ替わりイベントが発生するときには、 プログラムはパーティーの再描画の手間を省きたいようだ。

5.31.1.8. 構造体 $C8F53F: すごろく店屋画像

すごろく店屋画像とは画像の一種であり、宿屋またはよろず屋のマスに止まった際に画面中央に描画されるものだ。 アドレス $C8F53F に次の表で示される型のオブジェクトが 3 個配列されていて、 それぞれ対応する分類のマスに止まったときの店屋画像を指定するものだ。

表 5.90 構造体 $C8F53F

オフセット 属性
#$0000 #$0007FF 店先のスプライト
#$0001 #$001FF8 店先のパレット
#$0002 #$00FFE0 (調査中)
#$0004 #$0003FF 店員のパレット

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

店先のスプライト

店先の画像を表現するスプライト (BG2) の ID を値に取る属性だ。

店先のパレット

店先のスプライトの色を指定するオブジェクトの ID を値に取る属性だ。

(調査中)

配列 $C542A6 の ID を値に取る属性だ。

店員のパレット

店員のスプライトの色を指定するオブジェクトの ID を値に取る属性だ。

5.31.1.9. 構造体 $C8F551: すごろくアイテム確率

アドレス $C8F551 にある配列は、すごろくの足もとをしらべるイベントで何らかのアイテム発見抽選が発生したときに、 実際にそのアイテムを見つけるかどうかを確定するための値を表現するデータを要素とする。 各要素の型は次のようになっている。

表 5.91 構造体 $C8F551

オフセット 属性
#$00 #$FFFF (未使用)
#$02 #$FFFF 確率の分母

実際には各オブジェクトの末端 2 バイトしか使われていない。それらの表す確率を以下の表に示す。

表 5.92 すごろくアイテム確率

ID 確率
0 1
1 1/2
2 1/4
3 1/8
4 1/16
5 1/64
6 1/256
7 1/1024

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

TBW