Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MEGA MAN 7 SLASH MAN RED GOOP
- GENERAL NOTES:
- I decided to look into Slash Man's goop mechanics for how to get out of it:
- I found the following by digging around in assembly:
- - 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.
- - The counter automatically decreases by 1 every 4 frames
- - Both goops have the same mechanics to mash out, but they have separate counters
- - You increase the counter by mashing, but there are many caveats:
- DIRECTIONS
- - Get +2 to your counter if you pressed a direction last frame but are NOT holding a direction THIS frame
- - Get +1 to your counter if you pressed a direction last frame that is different than the previous frame
- - 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
- BUTTONS
- - Get +1 counter if you press a unique button (B or Y) per frame that wasn't pressed last frame
- In summary you mash out of goop best by:
- - Mashing B/Y alternating as much as possible
- - Mashing directions (preferably opposites), and leaving in at least 1 frame of no direction in between directions as much as possible
- - Do not rotate the d-pad without a frame in between (which causes "weird rotate rule" above)
- TECHNICAL NOTES:
- $00D2 - "counter" for overhead red goop
- $0C66 - "counter" for floor red goop
- $C41 - all controller directions this frame
- $C43 - all controller directions last frame
- $C45 - difference of controller directions this frame to last frame
- 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
- - 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
- Function for every frame in overhead red goop - $C3C1A2
- - First it checks every 4 frames and decreases on 4th frame
- - Then it checks controller inputs via $C1075E
- Function for every frame in floor red goop - $C12577
- - First it checks every 4 frames and decreases on 4th frame
- - Then it checks controller inputs via $C1075E
- Function deciding controller inputs: $C1075E
- - First test: if the current frame and last frame's inputs are different, continue
- - Second test: if the current frame's inputs ($C41) are null but the last frame ($C43) had input, award 2 "counter" values and return
- - 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
- - Otherwise, if the last 2 frames' inputs were the same, award 0 "counter" values and return
- (there's another function that does similar to above for B/Y input but I didn't bother writing it out - $C10776)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement