Advertisement
mzxrules

Phantom Twinrova Glitch

Aug 2nd, 2016
1,106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. All Addresses are NTSC 1.0
  2.  
  3. The Phantom Twinrova glitch is a truly bizarre glitch, especially when one considers Kotake and Koume's parting words:
  4. "I'll come back to haunt you!"
  5.  
  6. For the uninitiated, the Phantom Twinrova glitch is triggered when the magic attack connects with Twinrova after the killing blow is delivered. If you remain in the Boss room for 10k frames after the final blow, Twinrova's "ghost" will come back and continue attacking you. You can then continuously repeat the glitch in order to farm for multiple Heart Containers.
  7.  
  8. The glitch itself is due to the fact that within the main update function and some helper functions called by the main update, the developers check the value of function pointer (located at Instance + 0x13C) that stores what state-specific function should be called this update.
  9.  
  10. Instance + 0x4E4 stores a byte value used to determine if Twinrova has been hit by a fully charged Mirror Shield attack, while instance + 0x14A is a 2 byte value that stores Twinrova's Invulnerability count down timer.
  11.  
  12. The main update function calls function 809DF860 every frame. At address 809DFBC8 of the function, Twinrova performs a check on the Instance + 0x13C pointer, testing if Twinrova is in "Stunned by Mirror Shield" state. If not true, Twinrova will be vulnerable to hits from the Charged Mirror Shield attack, and will set the Instance + 0x4E4 variable to 1 if hit.
  13.  
  14. On the next frame, provided the following conditions are met in this order, the section of code at 809D97DC will zero the Instance + 0x4E4 variable, and update the Instance + 0x13C function pointer to the "Stunned by Mirror Shield" state:
  15.  
  16. * The invulnerability timer (instance + 0x14A)'s value is 0
  17. * The function pointer (instance + 0x13C)'s value is not already set to the "Stunned by Mirror Shield" function's start address
  18. * The is stunned variable (instance + 0x4E4) is 1
  19.  
  20. Lastly, when the final blow is struck, Twinrova advances to her "death" state. In doing so, her invulnerability frame count is set to 10k frames.
  21.  
  22. Thus, the sequence of events is as follows:
  23.  
  24. You start off by absorbing the 3rd elemental charge...
  25. Instance + 0x13C = Attack Animation Idle
  26. Instance + 0x14A = 0, vulnerable
  27. Instance + 0x4E4 = 0, not hit
  28.  
  29. The charge hits Twinrova...
  30. Instance + 0x13C = Attack Animation Idle
  31. Instance + 0x14A = 0, vulnerable
  32. Instance + 0x4E4 = 1, was hit
  33.  
  34. Move to next frame. Twinrova is stunned, not invulnerable, and isn't in her "Stunned by Mirror Shield" state...
  35. Instance + 0x13C = Stunned by Mirror Shield
  36. Instance + 0x14A = 0, vulnerable
  37. Instance + 0x4E4 = 0, not hit
  38.  
  39. Some frames later. Twinrova his dealt her final blow...
  40. Instance + 0x13C = Death
  41. Instance + 0x14A = 10000, invulnerable
  42. Instance + 0x4E4 = 0, not hit
  43.  
  44. More frames later. Twinrova is hit by a stray Mirror Shield attack...
  45. Instance + 0x13C = Death
  46. Instance + 0x14A < 10000, invulnerable
  47. Instance + 0x4E4 = 1, was hit
  48.  
  49. Twinrova remains stuck in this state for 10k frames. Finally, when the invulnerability wears off, the game can finally advance to the "Stunned by Mirror Shield" state again...
  50. Instance + 0x13C = Stunned by Mirror Shield
  51. Instance + 0x14A = 0, vunerable
  52. Instance + 0x4E4 = 0, not hit
  53.  
  54. And so the Phantom rises again.
  55.  
  56. Final point to note: setting Twinrova's invulnerability timer to 10k frames is most likely a programming hack to prevent the game from softlocking during the death cutscene. Changing the 10k frame write to a 0 frame write works just fine provided you don't trigger the glitch.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement