ずいぶんと間があいてしまいました。現在マップ関係の勉強をしているので更新にあまり手が回りません。いままであまり触れないようにしていたマップの追加という(自分にとって)ハードルの高い部分の変更なので多少時間がかかりそうです。とはいえ、避けていては話が進まないので時間がかかるのは先行投資と割り切ります。
前回追加したNPCのうち、イベントに関連しないNPCについては取り立てて説明すべき点はあまりありません。会話したらイベント戦闘処理をして、終了後にメッセージを表示して終わりです。以下一例。
- SR: $0CF76C NPC1_TalkSR_0574 追加NPC幽霊船甲板出口骸骨会話処理(新SR)
0CF76C | BRK $0FF0 ($0C0FF0) | goto $00FFE6(メッセージ表示) #$0FF0 | |
---|---|---|---|
0CF76F | JSL $CDACD2 | SR: $0DACD2 | キー入力でメッセージウィンドウを閉じる |
0CF773 | JSL $CDE4BB | SR: $0DE4BB | イベント戦闘(vsボーンプリズナー3体) |
0CF777 | BRK $0FF2 ($0C0FF2) | goto $00FFE6(メッセージ表示) #$0FF2 | |
0CF77A | JSL $CDACD2 | SR: $0DACD2 | キー入力でメッセージウィンドウを閉じる |
0CF77E | RTL | return |
次にイベントの本筋を実装することにします。正直言って今回のイベントはできがよくありません。未だに話の筋が細部まで固まっていないせいです。イベントの流れは、
- 甲板の戦闘を仕掛けてこない骸骨に話す
- B1Fの骸骨船長に話して「復活の玉」をもらう
- 1.の骸骨と再度話して戦闘
- 甲板舳先にいるボスと戦闘
という流れになります。
- SR: $0CF7A9 NPC1_TalkSR_057B(新SR)
0CF7A9 | LDA $35B0 | A=$35B0 | |
---|---|---|---|
0CF7AC | AND #$0080 | A&=#$0080 | 復活の玉を入手している |
0CF7AF | BNE #$0E | if(z==off) goto $0CF7BF | |
0CF7B1 | BRK $0FF5 ($0C0FF5) | goto $00FFE6(メッセージ表示) #$0FF5 | |
0CF7B4 | JSL $CDACD2 | SR: $0DACD2 | |
0CF7B8 | LDA #$0040 | A=#$0040 | |
0CF7BB | TSB $35B0 | A or $35B0 | |
0CF7BE | RTL | return | |
0CF7BF | BRK $0FF6 ($0C0FF6) | goto $00FFE6(メッセージ表示) #$0FF6 | |
0CF7C2 | JSL $CDACD2 | SR: $0DACD2 | |
0CF7C6 | JSL $CDE456 | SR: $0DE456 | イベント戦闘(vsボーンプリズナー) |
0CF7CA | LDA #$0001 | A=#$0001 | |
0CF7CD | TSB $35B1 | A or $35B1 | 幽霊船で復活の玉を落としたゾンビを倒した |
0CF7D0 | RTL | return |
次にB1Fの変更を行います。
- SR: $0CCF59 幽霊船B1FNPC情報設定
略 | |||
---|---|---|---|
0CCF9F-1 | NOP | ||
0CCFA2 | JSL $CCF6FD | SR: $0CF6FD | |
略 |
- SR: $0CF680 幽霊船B1FNPC設定(新SR)
0CF6FD | LDA #$008A | A=#$008A | |
---|---|---|---|
0CF700 | JSL $C758DE | SR: $0758DE | |
0CF704 | JSL $CCF15A | SR: $0CF15A | 幽霊船追加イベント発生条件か |
0CF708 | BCC #$07 | if(c==off) goto $0CF711 | |
0CF70A | LDA #$057D | A=#$057D | 幽霊船B1F幽霊船長NPC |
0CF70D | JSL $C75828 | SR: $075828 | NPC1設定 |
0CF711 | RTL | return |
- SR: $0CF840 NPC1_TalkSR_057D(骸骨船長)(新SR)
0CF840 | LDA $35B0 | A=$35B0 | |
---|---|---|---|
0CF843 | AND #$0080 | A&=#$0080 | 復活の玉を入手している |
0CF846 | BEQ #$05 | if(z==on) goto $0CF84D | |
0CF848 | JSR $F47A | SR: $0CF47A | |
0CF84B | BRA #$0B | goto $0CF858 | |
0CF84D | LDA $35B0 | A=$35B0 | |
0CF850 | AND #$0040 | A&=#$0040 | 復活の玉を落としたゾンビと話しているか |
0CF853 | BNE #$05 | if(z==off) goto $0CF85A | |
0CF855 | BRK $1026 ($0C1026) | goto $00FFE6(メッセージ表示) #$1026 | |
0CF858 | BRA #$1B | goto $0CF875 | |
0CF85A | JSL $CC7B5A | SR: $0C7B5A | パーティ人数が1人か調べる(1人c=on) |
0CF85E | BCS #$05 | if(c==on) goto $0CF865 | |
0CF860 | BRK $0FFA ($0C0FFA) | goto $00FFE6(メッセージ表示) #$0FFA | |
0CF863 | BRA #$03 | goto $0CF868 | |
0CF865 | BRK $0FFB ($0C0FFB) | goto $00FFE6(メッセージ表示) #$0FFB | |
0CF868 | JSL $CDAC66 | SR: $0DAC66 | はい/いいえ選択処理(はいc=on) |
0CF86C | BCS #$09 | if(c==on) goto $0CF877 | |
0CF86E | BRK $0FFD ($0C0FFD) | goto $00FFE6(メッセージ表示) #$0FFD | |
0CF871 | JSL $CDACD2 | SR: $0DACD2 | |
0CF875 | BRA #$18 | goto $0CF88F | |
0CF877 | BRK $0FFC ($0C0FFC) | goto $00FFE6(メッセージ表示) #$0FFC | |
0CF87A | JSL $C737BE | SR: $0737BE 引数:1#$0FF9 | |
0CF880 | JSL $CDA806 | SR: $0DA806 | アイテム入手BGM再生 |
0CF884 | JSL $CCF75B | SR: $0CF75B | 復活の玉入手 |
0CF888 | JSL $CDACEE | SR: $0DACEE | |
0CF88C | BRK $0FFE ($0C0FFE) | goto $00FFE6(メッセージ表示) #$0FFE | |
0CF88F | JSL $CDACD2 | SR: $0DACD2 | |
0CF893 | RTL | return |
- SR: $0CF75B 復活の玉入手(新SR)
0CF75B | LDA #$00E9 | A=#$00E9 | 復活の玉のアイテムID |
---|---|---|---|
0CF75E | LDX #$0104 | X=#$0104 | |
0CF761 | JSL $C781C5 | SR: $0781C5 | アイテム入手 |
0CF765 | LDA #$0080 | A=#$0080 | |
0CF768 | TSB $35B0 | A or $35B0 | |
0CF76B | RTL | return |
分岐する処理に関しては、途中でreturnしたり、gotoでSRの最後にジャンプしたりといまいち一貫していません。1バイト多くなりますが、今後はgotoでSRの最後にジャンプするように統一するつもりです。B1Fの骸骨船長はオリジナルでは甲板にいて舵を握っていた骸骨NPCのことです。モンスターがやってきてB1Fに追いやられた、という設定にしてあります。今回はこれといって大変な部分はありません。単なるお使いの実装のみなので。次回はボス戦がらみの部分を実装します。
コメント