DQ3 ストーリー変更(幽霊船4)

ずいぶんと間があいてしまいました。現在マップ関係の勉強をしているので更新にあまり手が回りません。いままであまり触れないようにしていたマップの追加という(自分にとって)ハードルの高い部分の変更なので多少時間がかかりそうです。とはいえ、避けていては話が進まないので時間がかかるのは先行投資と割り切ります。

前回追加したNPCのうち、イベントに関連しないNPCについては取り立てて説明すべき点はあまりありません。会話したらイベント戦闘処理をして、終了後にメッセージを表示して終わりです。以下一例。

  • SR: $0CF76C NPC1_TalkSR_0574 追加NPC幽霊船甲板出口骸骨会話処理(新SR)
0CF76CBRK $0FF0 ($0C0FF0)goto $00FFE6(メッセージ表示) #$0FF0
0CF76FJSL $CDACD2SR: $0DACD2キー入力でメッセージウィンドウを閉じる
0CF773JSL $CDE4BBSR: $0DE4BBイベント戦闘(vsボーンプリズナー3体)
0CF777BRK $0FF2 ($0C0FF2)goto $00FFE6(メッセージ表示) #$0FF2
0CF77AJSL $CDACD2SR: $0DACD2キー入力でメッセージウィンドウを閉じる
0CF77ERTLreturn

次にイベントの本筋を実装することにします。正直言って今回のイベントはできがよくありません。未だに話の筋が細部まで固まっていないせいです。イベントの流れは、

  1. 甲板の戦闘を仕掛けてこない骸骨に話す
  2. B1Fの骸骨船長に話して「復活の玉」をもらう
  3. 1.の骸骨と再度話して戦闘
  4. 甲板舳先にいるボスと戦闘

という流れになります。

  • SR: $0CF7A9 NPC1_TalkSR_057B(新SR)
0CF7A9LDA $35B0A=$35B0
0CF7ACAND #$0080A&=#$0080復活の玉を入手している
0CF7AFBNE #$0Eif(z==off) goto $0CF7BF
0CF7B1BRK $0FF5 ($0C0FF5)goto $00FFE6(メッセージ表示) #$0FF5
0CF7B4JSL $CDACD2SR: $0DACD2
0CF7B8LDA #$0040A=#$0040
0CF7BBTSB $35B0A or $35B0
0CF7BERTLreturn
0CF7BFBRK $0FF6 ($0C0FF6)goto $00FFE6(メッセージ表示) #$0FF6
0CF7C2JSL $CDACD2SR: $0DACD2
0CF7C6JSL $CDE456SR: $0DE456イベント戦闘(vsボーンプリズナー)
0CF7CALDA #$0001A=#$0001
0CF7CDTSB $35B1A or $35B1幽霊船で復活の玉を落としたゾンビを倒した
0CF7D0RTLreturn

次にB1Fの変更を行います。

  • SR: $0CCF59 幽霊船B1FNPC情報設定
0CCF9F-1NOP
0CCFA2JSL $CCF6FDSR: $0CF6FD
  • SR: $0CF680 幽霊船B1FNPC設定(新SR)
0CF6FDLDA #$008AA=#$008A
0CF700JSL $C758DESR: $0758DE
0CF704JSL $CCF15ASR: $0CF15A幽霊船追加イベント発生条件か
0CF708BCC #$07if(c==off) goto $0CF711
0CF70ALDA #$057DA=#$057D幽霊船B1F幽霊船長NPC
0CF70DJSL $C75828SR: $075828NPC1設定
0CF711RTLreturn

  • SR: $0CF840 NPC1_TalkSR_057D(骸骨船長)(新SR)
0CF840LDA $35B0A=$35B0
0CF843AND #$0080A&=#$0080復活の玉を入手している
0CF846BEQ #$05if(z==on) goto $0CF84D
0CF848JSR $F47ASR: $0CF47A
0CF84BBRA #$0Bgoto $0CF858
0CF84DLDA $35B0A=$35B0
0CF850AND #$0040A&=#$0040復活の玉を落としたゾンビと話しているか
0CF853BNE #$05if(z==off) goto $0CF85A
0CF855BRK $1026 ($0C1026)goto $00FFE6(メッセージ表示) #$1026
0CF858BRA #$1Bgoto $0CF875
0CF85AJSL $CC7B5ASR: $0C7B5Aパーティ人数が1人か調べる(1人c=on)
0CF85EBCS #$05if(c==on) goto $0CF865
0CF860BRK $0FFA ($0C0FFA)goto $00FFE6(メッセージ表示) #$0FFA
0CF863BRA #$03goto $0CF868
0CF865BRK $0FFB ($0C0FFB)goto $00FFE6(メッセージ表示) #$0FFB
0CF868JSL $CDAC66SR: $0DAC66はい/いいえ選択処理(はいc=on)
0CF86CBCS #$09if(c==on) goto $0CF877
0CF86EBRK $0FFD ($0C0FFD)goto $00FFE6(メッセージ表示) #$0FFD
0CF871JSL $CDACD2SR: $0DACD2
0CF875BRA #$18goto $0CF88F
0CF877BRK $0FFC ($0C0FFC)goto $00FFE6(メッセージ表示) #$0FFC
0CF87AJSL $C737BESR: $0737BE 引数:1#$0FF9
0CF880JSL $CDA806SR: $0DA806アイテム入手BGM再生
0CF884JSL $CCF75BSR: $0CF75B復活の玉入手
0CF888JSL $CDACEESR: $0DACEE
0CF88CBRK $0FFE ($0C0FFE)goto $00FFE6(メッセージ表示) #$0FFE
0CF88FJSL $CDACD2SR: $0DACD2
0CF893RTLreturn

  • SR: $0CF75B 復活の玉入手(新SR)
0CF75BLDA #$00E9A=#$00E9復活の玉のアイテムID
0CF75ELDX #$0104X=#$0104
0CF761JSL $C781C5SR: $0781C5アイテム入手
0CF765LDA #$0080A=#$0080
0CF768TSB $35B0A or $35B0
0CF76BRTLreturn

分岐する処理に関しては、途中でreturnしたり、gotoでSRの最後にジャンプしたりといまいち一貫していません。1バイト多くなりますが、今後はgotoでSRの最後にジャンプするように統一するつもりです。B1Fの骸骨船長はオリジナルでは甲板にいて舵を握っていた骸骨NPCのことです。モンスターがやってきてB1Fに追いやられた、という設定にしてあります。今回はこれといって大変な部分はありません。単なるお使いの実装のみなので。次回はボス戦がらみの部分を実装します。

スポンサーリンク

コメントを書く

メールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。