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