弊パッチでは、上級クラスは常に入手経験値が半減します。これについて、どうやって実装しているのか質問を受けたので記載しておきます。
Contents
概要
クラス設定を参照し、上級クラスの場合は入手経験値の計算結果を半減します。上級クラスかどうかは、そのクラスに「下級クラスID」が設定されているかどうかで判断します。
下級クラスIDとは何か
「下級クラスID」は、バニラFE5では経験値を計算する際のクラスランクの算出に使用しています。上級クラスの場合は下級クラスの情報も参照し、上級と下級のランクの合算値が経験値の計算に使用されます。
よくソードマスターのクラスランクが5だから経験値が得にくいなどと言われますが、実際には下級のソードファイターのランク3と足し合わされ、ランク8として扱われています。
下級クラスIDは各クラス設定の構造体の末尾に存在します。この項目は、上級クラスの場合はそのクラスの下級に位置するクラスのIDが設定されています。下級クラスの場合は、$00 が設定されています。
既存処理の変更
各コードは Asar の構文に従っています。
経験値加算処理をフック
jsr $83EF86 が経験値加算処理です。この処理のうち、ユニットおよび武器のスキルを読み出す部分を、JSL呼び出しに改変します。
org $83EFCA jsl l_exp_calc_upper_class warnpc $83EFD0 padbyte $ea : pad $83EFD0
追加処理
以下の追加処理は適当な空き領域に入れます。
l_exp_calc_upper_class: lda $5109 ; Class setting: Temporary storage, Lower class ID and #$00ff ; beq + ; lsr $0b ; Experience gain is halved + ; 元の処理 lda $001D,X ; Personal Skills loading ora $0F4E ; Stacking Weapon Skills rtl ;