今回から実装に入ります。
- SR: $03DAEB 登録所メイン
03DAEB | PHP | Push P Flag | |
---|---|---|---|
03DAEC | REP #$30 | m=off(A/M:16b) x=off(X/Y:16b) | |
03DAEE | PHA | Push A | |
03DAEF | PHX | Push X | |
03DAF0 | PHY | Push Y | |
03DAF1 | PHB | Push DB | |
03DAF2 | PEA #$7E7E | Push #$7E7E | |
03DAF5 | PLB | Pull DB | |
03DAF6 | PLB | Pull DB | |
03DAF7 | JSL $CAFDE2 | SR: $0AFDE2 | 登録所台詞1(登録しますか) |
略 |
- SR: $0AFDE2 登録所台詞1(登録しますか)(新SR)
0AFDE2 | JSL $CAFDD6 | SR: $0AFDD6 | 盗賊登録中か(該当c=on) |
---|---|---|---|
0AFDE6 | BCS #$27 | if(c==on) goto $0AFE0F | |
0AFDE8 | JSL $C1A92E | SR: $01A92E 引数:1#$0B31 | メッセージ表示 |
0AFDEE | JSL $C909AE | SR: $0909AE 引数:1#$7E353A 引数:2#$0014 | RAM上情報取得 |
0AFDF7 | BCS #$0F | if(c==on) goto $0AFE08 | |
0AFDF9 | JSL $C1A92E | SR: $01A92E 引数:1#$0B32 | |
0AFDFF | JSL $C908F0 | SR: $0908F0 引数:1#$7E353A 引数:2#$0014 | RAM上情報変更(ON) |
0AFE08 | JSL $C1A92E | SR: $01A92E 引数:1#$0B33 | |
0AFE0E | RTL | return | |
0AFE0F | JSL $C1A92E | SR: $01A92E 引数:1#$108C | 盗賊登録所用のセリフ |
0AFE15 | RTL | return |
- SR: $0AFDD6 盗賊登録中か(該当c=on)(新SR)(省略)
基本的にフラグを見て表示するメッセージを1対1対応で切り替えて行くだけなので省略します。1番目のポイントは職業選択部分の処理です。
- SR: $03DAEB 登録所メイン
略 | |||
---|---|---|---|
03DBB2 | JSL $CAFE66 | SR: $0AFE66 | 登録所職業決定処理 |
03DBB6 | NOP | ||
03DBB7 | BCS #$EB | if(c==on) goto $03DBA4 | c=onならキャンセル |
03DBB9 | STA $4063 | $4063=A | |
略 |
- SR: $0AFE66 登録所職業決定処理(新SR)
0AFE66 | JSL $CAFDD6 | SR: $0AFDD6 | 盗賊登録中か(該当c=on) |
---|---|---|---|
0AFE6A | BCS #$06 | if(c==on) goto $0AFE72 | |
0AFE6C | JSL $C32251 | SR: $032251 引数:1#$A1 | ウィンドウ表示 |
0AFE71 | RTL | return | |
0AFE72 | LDA #$0006 | A=#$0006 | 盗賊登録中なら職業IDは6(盗賊)で固定 |
0AFE75 | CLC | c=off | キャンセルはなし |
0AFE76 | RTL | return |
ここはもともとは職業選択用のウィンドウ(ID:#$A1)を表示し、c=onなら登録処理をキャンセルする処理に飛ばす、ということをしていました。従ってアリアハンの登録所なら職業選択用のウィンドウ(盗賊は除く)を表示し、盗賊登録所ならウィンドウは表示せず盗賊(職業IDは6)を返す、とすればOKです。また、職業選択用のウィンドウの表示内容も変更する必要があります。
- SR: $03F540 ウィンドウ描画SR_00A1
03F540 | JSL $C3FF72 | SR: $03FF72 | 新規PC追加用職業リスト準備 |
---|---|---|---|
略 |
- SR: $03FF72 新規PC追加用職業リスト準備(新SR)
03FF72 | LDA #$0006 | A=#$0006 | |
---|---|---|---|
03FF75 | STA $40F7 | $40F7=A | |
03FF78 | LDA #$0000 | A=#$0000 | |
03FF7B | LDX #$0000 | X=#$0000 | |
03FF7E | STA $40F9,X | $40F9+X=A | |
03FF81 | INC | A++ | |
03FF82 | INX | X++ | |
03FF83 | INX | X++ | |
03FF84 | CMP #$0006 | A>=#$0006? | |
03FF87 | BCC #$F5 | if(c==off) goto $03FF7E | |
03FF89 | RTL | return |
あんまり良くないんですが、必要なIDが0から5までなのでハードコードでセットするSRを書いてしまいました。本当ならアリアハン登録所で選択できる職業IDの配列を作ってそのIDをリストするとかしないといけないところです。とりあえず前半はここまで。残りは盗賊を登録した時にその場で外す仲間を選択できるようにする処理です。
コメント