前回で登録所での性格決定方法の仕組みがわかったので、今回はそれを踏まえて変更を行います。メモリビューワーを見る限り、$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(or3)ステータス比較的優位」「バランス型」に大別できると思いますが、みのまもりの成長率が一番高い性格を用意するかどうか、という点が主な考慮点です。現在公開しているバージョンである程度調整はしてありますが、もう一度改めて全体のバランスについて考慮しなおす必要がありそうです(職業と性格の相性も導入してあるので)。オリジナルの性格は無駄にパターンが多い割には差別化がいまいちはっきりしない上に、アイテム装備で簡単に性格が変わってしまうため、システムとしては面白いと思うのですがいまいち生かしきれなかったのでは、と思います。職業との相性の導入である程度深みは持たせられたと思うのですが、全体のバランスや全般的に成長率の高い「レア性格」の用意など、根本的に考え直すともう一段よくなるのでは、と考えています。職業によって相性による補正値ボーナスもあるので、話を単純化するために、レア性格以外は補正値の合計が768(128*6)になるようにしたほうがシンプルで分かりやすいのでは、と考え中。
コメント