前回で基本的なSRを一通り実装したので今回はレベルアップ時のステータス変更部分を実装します。レベルアップ時に固定長データ「職業」を参照するため、みのまもり分のレコードサイズを13バイト拡張します。(登録所キャラメイク用性格レコードID(1Byte)、男初期値(1Byte)、女初期値(1Byte)、成長段階1~5のレベル、成長値(それぞれ5Byte)がその内訳です)これにより職業の1レコードのサイズは$180になるため、プログラム中でレコードサイズを指定している部分及び開始アドレスを変更する必要があります(詳細は省略)。
- SR: $043C83 レベルアップ時のステータスアップ,呪文習得処理?
略 | |||
---|---|---|---|
043D60 | JSR $2307 | SR: $042307 | 身の守りレベルアップ時処理 |
略 | |||
043D64 | JSR $2300 | SR: $042300 | 体力取得+メモリセット(レベルアップ時用) |
略 |
- SR: $042307 身の守りレベルアップ時処理(新SR)
042307 | PHX | Push X | |
---|---|---|---|
042308 | JSL $041F21 | SR: $041F21 | 身の守り取得 |
04230C | STA $40CB | $7E40CB=A | |
04230F | LDX #$0174 | X=#$0174 | |
042312 | JSR $3E84 | SR: $043E84 | ステータス上昇分計算 |
042315 | BCS #$0C | if(c==on) goto $042323 | |
042317 | LDX #$0176 | X=#$0176 | |
04231A | JSR $3EE8 | SR: $043EE8 | ステータス小数点部分計算? |
04231D | LDX #$0010 | X=#$0010 | |
042320 | JSR $3F20 | SR: $043F20 | 性格に応じた補正値を取得 |
042323 | PLX | Pull X | |
042324 | JSL $041FAE | SR: $041FAE | レベルアップ時の身の守りステータスアップ処理 |
042328 | JSL $041F21 | SR: $041F21 | 身の守り取得 |
04232C | CMP $40CD | A>=$7E40CD? | |
04232F | BCS #$10 | if(c==on) goto $042341 | |
042331 | LDA $40CD | A=$7E40CD | |
042334 | JSL $041F3B | SR: $041F3B | 身の守り変更 |
042338 | LDA #$0000 | A=#$0000 | |
04233B | JSL $041F58 | SR: $041F58 | 身の守り小数点部分変更 |
04233F | BRA #$E7 | goto $042328 | |
042341 | SEC | c=on | |
042342 | SBC $40CB | A-=$7E40CB | |
042345 | STA $4082 | $7E4082=A | みのまもり上昇分保持用バッファ |
042348 | RTS | return |
- SR: $042300 体力取得+メモリセット(レベルアップ時用)(新SR)
042300 | JSR $354C | SR: $04354C | 体力取得 |
---|---|---|---|
042303 | STA $40CB | $7E40CB=A | |
042306 | RTS | return |
レベルアップ時のステータスアップ表示も変更する必要があります。ちなみにSFC版ではFC版と異なり、幸せの靴を装備していてもフィールド上でレベルアップ処理が行われることはないので、戦闘終了後のレベルアップ部分を変更するだけで事足ります。ステータスアップのメッセージ($2F-31)も力・素早さ、身の守り・体力、賢さ・運のよさの順になるように変えます。
- SR: $02A7EC レベルアップ表示処理
略 | |||
---|---|---|---|
02A86D | JSR $EC5D | SR: $02EC5D | レベルアップ時ステータスに変化がないか調べる(変化なしc=off) |
略 | |||
02A890 | LDA $4082 | A=$7E4082 | 身の守りアップ値セット |
略 | |||
02A899 | LDA $4071 | A=$7E4071 | 体力アップ値セット |
略 | |||
02A8A5-7 | NOP | ||
02A8A8 | JSR $EC4D | SR: $02EC4D | レベルアップ時賢さ・運の良さセット |
略 |
- SR: $02EC5D レベルアップ時ステータスに変化がないか調べる(変化なしc=off)(新SR)
02EC5D | LDA $406D | A=$7E406D | |
---|---|---|---|
02EC60 | ORA $406F | Aor=$7E406F | |
02EC63 | ORA $4071 | Aor=$7E4071 | |
02EC66 | ORA $4073 | Aor=$7E4073 | |
02EC69 | ORA $4075 | Aor=$7E4075 | |
02EC6C | ORA $4082 | Aor=$7E4082 | |
02EC6F | BEQ #$02 | if(z==on) goto $02EC73 | |
02EC71 | SEC | c=on | |
02EC72 | RTS | return | |
02EC73 | CLC | c=off | |
02EC74 | SEC | c=on |
- SR: $02EC4D レベルアップ時賢さ・運の良さセット(新SR)
02EC4D | LDA $4073 | A=$7E4073 | |
---|---|---|---|
02EC50 | STA $BE81 | $7EBE81=A | |
02EC53 | JSR $A8E3 | SR: $02A8E3 | レベルアップ時のステータスの桁揃え処理 |
02EC56 | LDA $4075 | A=$7E4075 | |
02EC59 | STA $BE85 | $7EBE85=A | |
02EC5C | RTS | return |
とりあえず今回はこの辺まで。次回は転職時、すごろく時の変更を行います。
コメント