今回から実装を行います。
事前準備として、職業データ($120D0B)*1の#$09に追加職業「オルテガのこども」を設定しておきます。設定のポイントとしては以下の通りです。
- 略称は「オ」
- グラフィックは勇者と同じ
- 習得呪文数は4にして、習得できる呪文を「おもいだす」「もっとおもいだす」「ふかくおもいだす」「わすれる」のみにする。(これらの呪文も省くとMPが上がらなくなるため)
- レベルアップの速度は勇者と同じ
- 各ステータス値の2段階目以降のステータス成長度を低くする
準備が整った所でまずは主人公の初期職業を変更します。
- SR: $0464EA 冒険の書初期化+主人公仮ステータス設定
略 | |||
---|---|---|---|
04650D | LDA #$0009 | A=#$0009 | |
略 |
- SR: $04425D 性格を加味して職業・男女別の初期ステータス値決定?
略 | |||
---|---|---|---|
04432C | CPY #$0009 | Y==#$0009? | |
略 |
SR: $0464EAでは主人公のステータスの設定を行っています。この中で職業を勇者(#$08)にセットしている部分を#$09に変更します。この時点では、オープニングの性格診断を経ていないので、ステータス値は仮のものがセットされているだけです。性格診断の後、決定した性格に応じてステータス値をSR: $04425Dで調整しているようです。その中で勇者だけ特別処理を行っているようなのでそこも新職業ID(#$09)に変更します。続けて、オルテガのこどもの呪文画面が勇者と同じになるようにします。
- SR: $035366 戦闘呪文情報取得
035374 | JSR $FF00 | SR: $03FF00 |
---|
- SR: $045621 移動呪文情報取得?
045626 | JSR $FE9C | SR: $04FE9C |
---|
- SR: $04570B 戦闘呪文情報取得
045710 | JSR $FE9C | SR: $04FE9C |
---|
- SR: $03B598 強さ画面上の呪文情報表示?
03B5ED | JSR $FF00 | SR: $03FF00 |
---|
- SR: $03FF00 Aが勇者かオルテガの子供か?(該当z=on)(新SR)
03FF00 | CMP #$0008 | A==#$0008? | |
---|---|---|---|
03FF03 | BEQ #$03 | if(z==on) goto $03FF08 | |
03FF05 | CMP #$0009 | A==or>=#$0009? | |
03FF08 | RTS | return |
- SR: $04FE9C Aが勇者かオルテガの子供か?(該当z=on)(新SR)
内容は$03FF00と同じなので省略。
基本は”A==#$0008″で職業IDを勇者かどうかを調べている部分を変えて”A==#$0008″ or “A==#$0009″にしているだけです。場所の特定の方が手間がかかりました。SR: $03FF00、SR: $04FE9Cという実装の同じSRを2箇所に書くのはあまりよくないのですが、とりあえずこのままにしておきます。
*1:拡張パッチでアドレスが移動しています。これは移動後のアドレスです
コメント
質問なのですが
拡張パッチ(DQ3 Extended ver1.444)のみ適用済みのROMで
追加した職業の呪文を勇者の呪文画面にするには
アドレスが違えど同じ処理を施せば可能でしょうか?
多分そうだと思います。やってみてください。