Advertisement
cleartonic

mm7_slash_man_goop

Jan 9th, 2023 (edited)
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. MEGA MAN 7 SLASH MAN RED GOOP
  2.  
  3.  
  4. GENERAL NOTES:
  5. I decided to look into Slash Man's goop mechanics for how to get out of it:
  6.  
  7. I found the following by digging around in assembly:
  8. - In order to get out of red goop, a "counter" must be accumulated to integer 14. It starts at 0, and only mashing directions and B/Y input increases it.
  9. - The counter automatically decreases by 1 every 4 frames
  10. - Both goops have the same mechanics to mash out, but they have separate counters
  11.  
  12. - You increase the counter by mashing, but there are many caveats:
  13. DIRECTIONS
  14. - Get +2 to your counter if you pressed a direction last frame but are NOT holding a direction THIS frame
  15. - Get +1 to your counter if you pressed a direction last frame that is different than the previous frame
  16. - Weird rotate rule: if your last 3 directions have 2 cardinal in commons, no counter award. Example: Right, Up-Right, Up have 2 in common, so the 3rd frame will not give an award. When you eventually release, you'll get +2, but you'll get a lot of zeros while
  17.  
  18. BUTTONS
  19. - Get +1 counter if you press a unique button (B or Y) per frame that wasn't pressed last frame
  20.  
  21. In summary you mash out of goop best by:
  22. - Mashing B/Y alternating as much as possible
  23. - Mashing directions (preferably opposites), and leaving in at least 1 frame of no direction in between directions as much as possible
  24. - Do not rotate the d-pad without a frame in between (which causes "weird rotate rule" above)
  25.  
  26.  
  27. TECHNICAL NOTES:
  28.  
  29. $00D2 - "counter" for overhead red goop
  30. $0C66 - "counter" for floor red goop
  31.  
  32. $C41 - all controller directions this frame
  33. $C43 - all controller directions last frame
  34. $C45 - difference of controller directions this frame to last frame
  35. Example: holding right is 0x01. say you hold for 4 frames, then on frame 5 you hold up-right, which is 0x09. 0x08 is stored in this address for 1 frame
  36. - There is a clause? that disallows pressing the same shared direction 3 frames in a row. If you press right, then up right, then up, this address will go back to 0. However if you press left, right, left, right per frame, it will continue to be the difference
  37.  
  38. Function for every frame in overhead red goop - $C3C1A2
  39. - First it checks every 4 frames and decreases on 4th frame
  40. - Then it checks controller inputs via $C1075E
  41.  
  42. Function for every frame in floor red goop - $C12577
  43. - First it checks every 4 frames and decreases on 4th frame
  44. - Then it checks controller inputs via $C1075E
  45.  
  46. Function deciding controller inputs: $C1075E
  47. - First test: if the current frame and last frame's inputs are different, continue
  48. - Second test: if the current frame's inputs ($C41) are null but the last frame ($C43) had input, award 2 "counter" values and return
  49. - Third test: if the current frame's inputs ($C41) are non-null but there was a difference in this to last frame's input ($C45), award 1 "counter" values and return
  50. - Otherwise, if the last 2 frames' inputs were the same, award 0 "counter" values and return
  51.  
  52. (there's another function that does similar to above for B/Y input but I didn't bother writing it out - $C10776)
  53.  
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement