裏CHUNSOFT > ゲーム解析入門 > 4.道具を落とす確率のバグ修正
4.道具を落とす確率のバグ修正
道具を落とす確率のバグを修正してみましょう。 このバグは、次の命令で道具の落としやすさを読み込む際に、レベル毎に分岐していないのが原因です。
02017C 22 5F F6 C3 JSL $03F65F ; $00 = (乱数) 020180 A5 00 LDA $00 ; "A" = $00 020182 29 3F AND #$3F ; "A" = "A" and 3F (00〜3Fの乱数を作る) 020184 DF E2 96 C2 CMP $0296E2+"X" ; "A" - (種族"X"レベル1の道具の落としやすさ) 020188 B0 17 BCS #$17 ; 上の結果が非負のとき道具を決める処理を飛ばす
レベル毎に分岐する処理は長くなるので、02E000以降の空き領域に入れることにして、バグの核心である020184を、02E000へのジャンプ命令で上書きすることにします。
020184 20 00 E0 JSR $E000 ; 02E000にジャンプ 020187 EA NOP ; 何もしない
対象となるモンスターのキャラ番号はこの時点で"Y"に入っていて、レベルも既にメモリに書き込まれているので、それを読み込んで、その値毎に分岐することにします。
02E000 48 PHA ; "A"をスタックに待避 02E001 B9 19 86 LDA $8619+"Y" ; "A" = キャラ番号"Y"のレベル 02E004 C9 01 CMP #$01 ; "A" - 01 02E006 D0 06 BNE #$06 ; 上の結果が00でなければ02E00Dへ 02E008 68 PLA ; 乱数をスタックから"A"に戻す 02E009 DF E2 96 C2 CMP $0296E2+"X" ; "A" - (種族"X"レベル1の道具の落としやすさ) 02E00D 60 RTS ; 020188へ戻る 02E00E C9 01 CMP #$02 ; "A" - 02 02E010 D0 06 BNE #$06 ; 上の結果が00でなければ02E017へ 02E012 68 PLA ; 乱数をスタックから"A"に戻す 02E013 DF 22 9C C2 CMP $029C22+"X" ; "A" - (種族"X"レベル2の道具の落としやすさ) 02E017 60 RTS ; 020188へ戻る 02E018 68 PLA ; 乱数をスタックから"A"に戻す 02E019 DF 62 A1 C2 CMP $02A162+"X" ; "A" - (種族"X"レベル3の道具の落としやすさ) 02E01D 60 RTS ; 020188へ戻る
従って次のように変更すれば良いです。
変更前 020180 A5 00 29 3F DF E2 96 C2 B0 17 AF EE D5 7E C9 08 …… 02E000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02E010 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
変更後 020180 A5 00 29 3F 20 00 E0 EA B0 17 AF EE D5 7E C9 08 …… 02E000 48 B9 19 86 C9 01 D0 06 68 DF E2 96 C2 60 C9 01 02E010 D0 06 68 DF 22 9C C2 60 68 DF 62 A1 C2 60 FF FF
2010年8月8日更新