DQ3 盗賊の登録機能分離2

今回から実装に入ります。

  • SR: $03DAEB 登録所メイン
03DAEBPHPPush P Flag
03DAECREP #$30m=off(A/M:16b) x=off(X/Y:16b)
03DAEEPHAPush A
03DAEFPHXPush X
03DAF0PHYPush Y
03DAF1PHBPush DB
03DAF2PEA #$7E7EPush #$7E7E
03DAF5PLBPull DB
03DAF6PLBPull DB
03DAF7JSL $CAFDE2SR: $0AFDE2登録所台詞1(登録しますか)

  • SR: $0AFDE2 登録所台詞1(登録しますか)(新SR)
0AFDE2JSL $CAFDD6SR: $0AFDD6盗賊登録中か(該当c=on)
0AFDE6BCS #$27if(c==on) goto $0AFE0F
0AFDE8JSL $C1A92ESR: $01A92E 引数:1#$0B31メッセージ表示
0AFDEEJSL $C909AESR: $0909AE 引数:1#$7E353A 引数:2#$0014RAM上情報取得
0AFDF7BCS #$0Fif(c==on) goto $0AFE08
0AFDF9JSL $C1A92ESR: $01A92E 引数:1#$0B32
0AFDFFJSL $C908F0SR: $0908F0 引数:1#$7E353A 引数:2#$0014RAM上情報変更(ON)
0AFE08JSL $C1A92ESR: $01A92E 引数:1#$0B33
0AFE0ERTLreturn
0AFE0FJSL $C1A92ESR: $01A92E 引数:1#$108C盗賊登録所用のセリフ
0AFE15RTLreturn

  • SR: $0AFDD6 盗賊登録中か(該当c=on)(新SR)(省略)

基本的にフラグを見て表示するメッセージを1対1対応で切り替えて行くだけなので省略します。1番目のポイントは職業選択部分の処理です。

  • SR: $03DAEB 登録所メイン
03DBB2JSL $CAFE66SR: $0AFE66登録所職業決定処理
03DBB6NOP
03DBB7BCS #$EBif(c==on) goto $03DBA4c=onならキャンセル
03DBB9STA $4063$4063=A

  • SR: $0AFE66 登録所職業決定処理(新SR)
0AFE66JSL $CAFDD6SR: $0AFDD6盗賊登録中か(該当c=on)
0AFE6ABCS #$06if(c==on) goto $0AFE72
0AFE6CJSL $C32251SR: $032251 引数:1#$A1ウィンドウ表示
0AFE71RTLreturn
0AFE72LDA #$0006A=#$0006盗賊登録中なら職業IDは6(盗賊)で固定
0AFE75CLCc=offキャンセルはなし
0AFE76RTLreturn

ここはもともとは職業選択用のウィンドウ(ID:#$A1)を表示し、c=onなら登録処理をキャンセルする処理に飛ばす、ということをしていました。従ってアリアハンの登録所なら職業選択用のウィンドウ(盗賊は除く)を表示し、盗賊登録所ならウィンドウは表示せず盗賊(職業IDは6)を返す、とすればOKです。また、職業選択用のウィンドウの表示内容も変更する必要があります。

  • SR: $03F540 ウィンドウ描画SR_00A1
03F540JSL $C3FF72SR: $03FF72新規PC追加用職業リスト準備

  • SR: $03FF72 新規PC追加用職業リスト準備(新SR)
03FF72LDA #$0006A=#$0006
03FF75STA $40F7$40F7=A
03FF78LDA #$0000A=#$0000
03FF7BLDX #$0000X=#$0000
03FF7ESTA $40F9,X$40F9+X=A
03FF81INCA++
03FF82INXX++
03FF83INXX++
03FF84CMP #$0006A>=#$0006?
03FF87BCC #$F5if(c==off) goto $03FF7E
03FF89RTLreturn

あんまり良くないんですが、必要なIDが0から5までなのでハードコードでセットするSRを書いてしまいました。本当ならアリアハン登録所で選択できる職業IDの配列を作ってそのIDをリストするとかしないといけないところです。とりあえず前半はここまで。残りは盗賊を登録した時にその場で外す仲間を選択できるようにする処理です。

コメント

タイトルとURLをコピーしました