上級クラスの入手経験値を半減させる処理について

弊パッチでは、上級クラスは常に入手経験値が半減します。これについて、どうやって実装しているのか質問を受けたので記載しておきます。

概要

クラス設定を参照し、上級クラスの場合は入手経験値の計算結果を半減します。上級クラスかどうかは、そのクラスに「下級クラス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		;