DQ3 ストーリー変更(ロマリア~ノアニール7)

さて、一連の変更の中でマップの追加と並んで一番時間をかけたイベントの実装を行います。ネタはだいたい揃っているので後はそれを組み合わせればいいわけですが、実はもう一山ありました。その説明はおいおいするとして、何をやりたいかというと「ロマリア王に話し掛けると橋の修復状態を兵士が修理失敗の旨を報告に来る」というだけなのですが、見かけによらず奥が深かったです。まずはカウンタと対応するアクションを決めます。カウンタに1000をセットするのはロマリア王に話し掛けたときです。

カウンタ 処理
1000 PCをダミー化? ロマリア王の前に整列させる
ロマリア王を下に向かせる
2000 「おお○○よ! いいところに きた…」(ロマリア王のセリフ)
3000 兵士出現 座標X=#$31 Y=#$2Aに移動
4000 「して どうであった?」(ロマリア王のセリフ)
5000 「は、残念ながら 今回も やはり…」(兵士のセリフ)
6000 「やはり そうか…。下がってよい」(ロマリア王のセリフ)
7000 兵士移動 座標X=#$31 Y=#$36に移動し消滅
8000 PC表示
9000 ダミーを消滅
10000 「やはり ドン・ガアデに頼まんと…」(ロマリア王のセリフ)

PCはロマリア王の正面および右側から話し掛けることが出来ますが、兵士が報告に来るのに王がそっぽを向いたまま応対というのはあんまりなのと、PCの位置によっては兵士が座標X=#$31 Y=#$36から座標X=#$31 Y=#$2Aに移動する途中にかかってしまうこともあるため、イベント開始直後にPCは整列させ、王は下を向かせることにします。「PCを移動させる」処理はすごろく開始時に2人目以降のキャラクターが整列するのでその部分をパクリます。PC関連ではまだいろいろやらなくてはいけないことが多いのですが、後でまとめて説明します。

  • データ: $1A08DA NPC1(全部16進表示)
ID 不明 CGID 向き X Y 階層 レイヤー MoveSR TALKSR
56D 28 040 0 0FF 0FF 0 0 CCF1D7 CDAC5E 兵士のNPC
56E 28 000 0 0FF 0FF 0 0 CCF300 CDAC5E PC1人目
56F 28 000 0 0FF 0FF 0 0 CCF390 CDAC5E PC2人目
570 28 000 0 0FF 0FF 0 0 CCF400 CDAC5E PC3人目
571 28 000 0 0FF 0FF 0 0 CCF480 CDAC5E PC4人目
572 28 037 2 035 025 0 0 CCF280 CB856B ロマリア王
  • SR: $0CC5C6 ロマリア城内2FNPC情報設定
0CC5EB-F4 NOP
0CC5F5 JSL $CBF0AD SR: $0BF0AD
0CC5F9 JSL $CBF0D2 SR: $0BF0D2
  • SR: $0BF190 主人公が即位していない場合のロマリア王配置(新SR)
0BF0AD LDA $354F A=$354F フラグチェック
0BF0B0 AND #$0002 A&=#$0002
0BF0B3 BNE #$1C if(z==off) goto $0BF0D1
0BF0B5 LDA $35B0 A=$35B0 フラグチェック
0BF0B8 AND #$0004 A&=#$0004
0BF0BB BEQ #$0D if(z==on) goto $0BF0CA
0BF0BD LDA $35B0 A=$35B0 フラグチェック
0BF0C0 AND #$0008 A&=#$0008
0BF0C3 BNE #$05 if(z==off) goto $0BF0CA
0BF0C5 LDA #$0572 A=#$0572 追加イベント用ロマリア王NPC
0BF0C8 BRA #$03 goto $0BF0CD
0BF0CA LDA #$0346 A=#$0346 オリジナルロマリア王NPC
0BF0CD JSL $C75828 SR: $075828 NPC1配置
0BF0D1 RTL return
  • SR: $0BF0D2 ロマリア城内2FNPC情報設定(サブ)(新SR)
0BF0D2 LDA $35B0 A=$35B0 フラグチェック
0BF0D5 AND #$0004 A&=#$0004
0BF0D8 BEQ #$32 if(z==on) goto $0BF10C
0BF0DA LDA $35B0 A=$35B0 フラグチェック
0BF0DD AND #$0008 A&=#$0008
0BF0E0 BNE #$2A if(z==off) goto $0BF10C
0BF0E2 LDA #$056D A=#$056D 橋の修理状況を報告しに来る兵士NPC
0BF0E5 JSL $C75828 SR: $075828 NPC1配置
0BF0E9 LDA #$056E A=#$056E
0BF0EC JSL $C75828 SR: $075828
0BF0F0 LDA #$056F A=#$056F
0BF0F3 JSL $C75828 SR: $075828
0BF0F7 LDA #$0570 A=#$0570
0BF0FA JSL $C75828 SR: $075828
0BF0FE LDA #$0571 A=#$0571
0BF101 JSL $C75828 SR: $075828
0BF105 JSL $C7785F SR: $07785F 引数:1#$CBF10D イベント設定
0BF10C RTL return

まずはイベント用のNPCを追加します。拡張パッチなので空き容量はたっぷりあります。ロマリア王は今回のイベント専用です。それ以外の時はオリジナルのままのNPCデータを使用します。

次にお約束の追加処理のSRをコールするためのスペース確保のためにSRを分割します。長くなったので一旦切ります。