解析結果 > 忠誠値変化ルーチン

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

忠誠値変化ルーチン 12F94h~

味方になったり捕らわれた際の忠誠値変化決定ルーチン
  • 準備:レジスタaに対象の武将ID
  • 結果:対象の武将の忠誠値が変化する
AF84 : A0 05		ldy	#$05		;忠誠のオフセットy=5
AF86 : 20 45 EE		jsr	$EE45		;武将データ抽出ルーチンへ(忠誠抽出)
AF89 : C9 50		cmp	#$50		;忠誠と80を比較
AF8B : B0 18		bcs	$AFA5		;80以上なら$AFA5へ
AF8D : C9 3C		cmp	#$3C		;忠誠と60を比較
AF8F : B0 0C		bcs	$AF9D		;60以上なら$AF9Dへ
AF91 : C9 32		cmp	#$32		;忠誠と50を比較
AF93 : 90 16		bcc	$AFAB		;50未満なら$AFABへ(忠誠の変化無し)
-------------------------------------------------
AF95 : AD D4 E9		lda	$E9D4		;32(h20)を抽出 ※本当は20 D4 E9 jsr $E9D4の間違いだと思われる
AF98 : 18		clc			;キャリーフラグクリア
AF99 : 69 23		adc	#$23		;+35
AF9B : D0 0E		bne	$AFAB		;ゼロフラグがクリアされている事は無いので$AFABへ
-------------------------------------------------
AF9D : 20 DA E9		jsr	$E9DA		;ランダム値0~7抽出ルーチンへ
AFA0 : 18		clc			;キャリーフラグクリア
AFA1 : 69 19		adc	#$19		;+25
AFA3 : D0 06		bne	$AFAB		;ゼロフラグがクリアされている事は無いので$AFABへ
-------------------------------------------------
AFA5 : 20 D4 E9		jsr	$E9D4		;ランダム値0~3抽出ルーチンへ
AFA8 : 18		clc			;キャリーフラグクリア
AFA9 : 69 14		adc	#$14		;+20
-------------------------------------------------
AFAB : 91 00		sta	($00),y		;忠誠書き換え
AFAD : 60		rts			;

ランダム値抽出ルーチン近辺
E9C7 : 20 E6 E9		jsr	$E9E6		;ランダム値抽出
E9CA : C9 64		cmp	#$64		;100か
E9CC : B0 F9		bcs	$E9C7		;100以上なら$E9C7へブランチ
E9CE : 60		rts			;
-------------------------------------------------
E9CF : 20 E6 E9		jsr	$E9E6		;ランダム値抽出
E9D2 : 4A		lsr	a		;右シフト(結果0~127の値が生成)
E9D3 : 60		rts			;
-------------------------------------------------
E9D4 : 20 E6 E9		jsr	$E9E6		;ランダム値抽出
E9D7 : 29 03		and	#$03		;ランダム値0~3生成
E9D9 : 60		rts			;
-------------------------------------------------
E9DA : 20 E6 E9		jsr	$E9E6		;ランダム値抽出
E9DD : 29 07		and	#$07		;ランダム値0~7生成
E9DF : 60		rts			;
-------------------------------------------------
E9E0 : 20 E6 E9		jsr	$E9E6		;ランダム値抽出
E9E3 : 29 0F		and	#$0F		;ランダム値0~15生成
E9E5 : 60		rts			;
-------------------------------------------------
E9E6 : 86 2F		stx	$2F		;
E9E8 : A6 2E		ldx	$2E		;
E9EA : BD F2 E9		lda	$E9F2,x		;ランダム値テーブルから抽出
E9ED : E6 2E		inc	$2E		;
E9EF : A6 2F		ldx	$2F		;
E9F1 : 60		rts			;
※AF95 : AD D4 E9 lda $E9D4 は本来20 D4 E9 jsr $E9D4だったのではと思われる
(59~50はランダム値0~3+35の35~38に変化する)

元の忠誠 変化後の忠誠
99~80 20~23
79~60 25~32
59~50 67
49~0 変化無し
最終更新:2012年06月18日 00:14