特定のスキルを持つ武器で太陽剣が発動しなかったのを修正(原作バグ)

カリスマなどのスキルを持つ武器で太陽剣が発動しなかったのを修正しました。原作のバグです。

スキル「太陽剣」の処理は以下の通りです。

83:D86A  BD 1D 00	lda	$001D,X		; スキル2~3読み込み
83:D86D  89 00 08	bit	#$0800		; 太陽剣
83:D870  F0 2E		beq	$D8A0		; 

83:D872  BD 0D 00	lda	$000D,X		; 技読み込み
83:D875  29 FF 00	and	#$00FF		; 1バイト目だけ取り出す
83:D878  22 91 A7 83	jsl	$83:A791	; 乱数判定
83:D87C  90 22		bcc	$D8A0		; 

83:D87E  BD 4E 00	lda	$004E,X		; 武器ID読み込み
83:D881  22 0D B0 83	jsl	$83:B00D	; アイテムの情報をメモリ$0F3B~に展開する
83:D885  AD 4D 0F	lda	$0F4D		; 武器の追加効果
83:D888  F0 07		beq	$D891		; 

83:D88A  C9 06 00	cmp	#$0006		; HP吸収
83:D88D  F0 02		beq	$D891		; 
83:D88F  80 0F		bra	$D8A0		; 

83:D891  A9 64 00	lda	#$0064		; 100%
83:D894  8D 8F A6	sta	$A68F		; 命中

83:D897  AD E4 A4	lda	$A4E4		; 戦闘のステータス
83:D89A  09 40 00	ora	#$0040		; 太陽フラグ
83:D89D  8D E4 A4	sta	$A4E4		; 

83:D8A0  60		rts			;

cmp #$0006 の前に and #$00FF がないため、2バイト目(武器スキル)が格納されたまま判定を行っています。これにより、武器に連続、カリスマ、非捕縛、祈り、待ち伏せ、突撃、大盾、見切りのいずれかが付いていると不発にされていました。

また、「HP吸収効果以外の追加効果がある武器では発動しない」判定が入っているため、毒、石化、混乱、眠りの追加効果のある武器およびヘルとデビルアクスでは太陽剣が発動せず、大地の剣やリザイアでは太陽剣が発動します。

ためしにこのプログラムを改変してデビルアクスで太陽剣を発動させてみると、戦闘中のHP計算がおかしくなるようなので、追加効果が付いている場合は発動させないままにしておいたほうが無難でしょう。

確率で発動するスキルが特定の武器でのみ発動しないケースはバグ摘出が難しく、ソースを机上で確認しないとまず見つかりません。このようなバグが残ってしまったのも仕方のないことでしょう。しかし、よりによってパーンが持っている王者の剣で太陽剣が発動しないのはちょっと面白いですね。

追記

壊れた武器で太陽剣が発動しないように変更しました。

戦闘中にデビルアクスが壊れると、武器の追加効果が失われるため、上記の判定をすり抜けてしまいます。その状態で太陽剣が発動すると、戦闘アニメでは呪いが発動したように描画されて、実際の結果とアニメが食い違ってしまうバグがありました。(これも原作バグです。デビルアクスで武器の追加効果が発動すると、効果の内容にかかわらず呪いが発動したものとして描画されるようです。)