Actions

SCHG How-to

Fix Rexon crash

From Sonic Retro

Revision as of 09:36, 17 June 2012 by KingofHarts (talk | contribs) (Another RHS fix. Adding to the wiki)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

(Optimization by redhotsonic)

On Hill Top Zone, it is possible to crash the game when hitting Rexon (the plesiosaur-like badnik that sits in the lava). Conflicts in the code cause it to jump to a section of code earlier than it was meant to jump to. This results in invalid opcodes being processed and an eventual crash.

Go to "loc_37454:" and you should see this:

<asm> loc_37454:

       bsr.w   loc_3750C
       subq.b  #1,objoff_2A(a0)
       bmi.s   loc_37462
       bra.w   JmpTo39_MarkObjGone

</asm>

That "branch to subroutine - loc_3750C" is what is causing the problem. It's happening too early. We need to move that command down a little bit. So change it to this:

<asm> loc_37454:

       subq.b  #1,objoff_2A(a0)
       bmi.s   loc_37462
       bsr.w   loc_3750C               ; Now moved here to fix Rexon crash
       bra.w   JmpTo39_MarkObjGone

</asm>

One more, go to "loc_37488:" and you should see this:

<asm> loc_37488:

       bsr.w   loc_3750C
       moveq   #$10,d0
       add.w   d0,x_vel(a0)
       subq.b  #1,objoff_2A(a0)
       bmi.s   loc_374A0
       bsr.w   JmpTo26_ObjectMove
       bra.w   JmpTo39_MarkObjGone

</asm>

Again, "branch to subroutine - loc_3750C" is too early. So change it to this:

<asm> loc_37488:

       moveq   #$10,d0
       add.w   d0,x_vel(a0)
       subq.b  #1,objoff_2A(a0)
       bmi.s   loc_374A0
       bsr.w   loc_3750C               ; Now moved here to fix Rexon crash
       bsr.w   JmpTo26_ObjectMove
       bra.w   JmpTo39_MarkObjGone

</asm>

Done! The rexon crash will no longer happen.