DQ3 「みのまもり」を導入する7

前回で登録所での性格決定方法の仕組みがわかったので、今回はそれを踏まえて変更を行います。メモリビューワーを見る限り、$7E2BBE-C7周辺(というか後ろ)は意味のない数値が並んでいるだけのようなので、2Byte*5セットだった差分、絶対値、ステータスインデックスを2Byte*6に変更します。それぞれ開始位置が、$7E2BCA、$7E2BD6、$7E2BBEになるので、プログラム中の開始アドレスも同様に変更します。(できたての上テストが不十分なためバグを含んでいる可能性大)

変更前と変更後のそれぞれの値のアドレスは以下のようになります。

  • 変更前
インデックス $7E2BBE $7E2BC0 $7E2BC2 $7E2BC4 $7E2BC6
差分 $7E2BC8 $7E2BCA $7E2BCC $7E2BCE $7E2BD0
絶対値 $7E2BD2 $7E2BD4 $7E2BD6 $7E2BD8 $7E2BDA
  • 変更後
インデックス $7E2BBE $7E2BC0 $7E2BC2 $7E2BC4 $7E2BC6 $7E2BC8
差分 $7E2BCA $7E2BCC $7E2BCE $7E2BD0 $7E2BD2 $7E2BD4
絶対値 $7E2BD6 $7E2BD8 $7E2BDA $7E2BDC $7E2BDE $7E2BE0

固定長データ「登録所性格決定2」($030EFD-)のパラメーター種別の値にも大きく影響してしまうため、身の守りのインデックスは例外的に最後に追加で5として、途中に割り込むことはしません。

  • SR: $03DE95 登録時仲間性格決定?
03DED7 STA $2BD6 $7E2BD6=A
03DEDD STA $2BCA $7E2BCA=A
03DEF9 STA $2BD8 $7E2BD8=A
03DEFF STA $2BCC $7E2BCC=A
03DF08 JSR $F7B6 SR: $03F7B6 登録時身の守り用パラメータセット
03DF0B JSR $E00E SR: $03E00E 登録所体力用情報セット
03DF1B STA $2BDA $7E2BDA=A
03DF21 STA $2BCE $7E2BCE=A
03DF3D STA $2BDC $7E2BDC=A
03DF43 STA $2BD0 $7E2BD0=A
03DF5F STA $2BDE $7E2BDE=A
03DF65 STA $2BD2 $7E2BD2=A
  • SR: $03F7B6 登録時身の守り用パラメータセット
03F7B6 LDA $2BB8 A=$7E2BB8
03F7B9 LDX #$0174 X=#$0174
03F7BC JSL $046B9E SR: $046B9E 指定パラメーターの新レベルでの理論値を取得
03F7C0 STA $78 $000078=A
03F7C2 JSL $041EF3 SR: $041EF3 引数:1#$06 引数:2#$7A 引数:3#$FF 身の守り取得
03F7C9 STA $2BE0 $7E2BE0=A
03F7CC SEC c=on
03F7CD SBC $78 A-=$000078
03F7CF STA $2BD4 $7E2BD4=A
03F7D2 LDA #$0005 A=#$0005
03F7D5 STA $2BC8 $7E2BC8=A
03F7D8 RTS return
  • SR: $03E00E 登録所体力用情報セット
03E00E LDA $2BB8 A=$7E2BB8
03E011 LDX #$014D X=#$014D
03E014 RTS return
  • SR: $03DF8E デフォルトから差分の大きいステータスの順に並べ替え
03DF91 LDX #$000C X=#$000C
03DF98 LDA $2BCA,X A=$7E2BCA+X
03DF9B CMP $2BC8,X A==$7E2BC8+X?
03DFA9 LDA $2BD6,X A=$7E2BD6+X
03DFAC CMP $2BD4,X A==$7E2BD4+X?
  • SR: $03DFCF 性格決定用変数並び替え
03DFDD LDA $2BCA,X A=$7E2BCA+X
03DFE0 LDY $2BC8,X Y=$7E2BC8+X
03DFE3 STA $2BC8,X $7E2BC8+X=A
03DFE7 STA $2BCA,X $7E2BCA+X=A
03DFEA LDA $2BD6,X A=$7E2BD6+X
03DFED LDY $2BD4,X Y=$7E2BD4+X
03DFF0 STA $2BD4,X $7E2BD4+X=A
03DFF4 STA $2BD6,X $7E2BD6+X=A

とりあえずこれでプログラムの変更は終わりですが、これでようやく固定長データの変更をする下地ができたに過ぎません(プログラム変えただけで終わった気になるのが困るところ)。考慮すべき点として

  1. 身の守りの各職業における成長度の設定
  2. 身の守り補正値の性格における存在感をどうするか

という問題があります。もともと体力の伸びに守備力が釣られて上がってしまう、というのが出発点だったわけですが、だからといって、オリジナルのすばやさのように戦士の値を低くするのはおかしな話です。かといってあまり高くすると体力と分けた意味がありません。他の職業との兼ね合いや、ストーリー進行具合とも相談しつつ設定する必要がありそうです。また、性格の調整ですが、まず「身の守りの成長率が一番高い性格を用意するか」を検討する必要があります。性格の設定には「1ステータス一点突破」「2(or3)ステータス比較的優位」「バランス型」に大別できると思いますが、みのまもりの成長率が一番高い性格を用意するかどうか、という点が主な考慮点です。現在公開しているバージョンである程度調整はしてありますが、もう一度改めて全体のバランスについて考慮しなおす必要がありそうです(職業と性格の相性も導入してあるので)。オリジナルの性格は無駄にパターンが多い割には差別化がいまいちはっきりしない上に、アイテム装備で簡単に性格が変わってしまうため、システムとしては面白いと思うのですがいまいち生かしきれなかったのでは、と思います。職業との相性の導入である程度深みは持たせられたと思うのですが、全体のバランスや全般的に成長率の高い「レア性格」の用意など、根本的に考え直すともう一段よくなるのでは、と考えています。職業によって相性による補正値ボーナスもあるので、話を単純化するために、レア性格以外は補正値の合計が768(128*6)になるようにしたほうがシンプルで分かりやすいのでは、と考え中。