I recently started messing around with TASing Super Monkey Ball (my first attempt at TASing mind you). So far I've found that this is a lot harder than I expected. I'm sure that's partially due to my lack of TASing skill, but I think it's also due to the fact that this game is very segmented and been extensively played over the years to perfect each stage. This results in RTAs that are nearly perfect stage wise.
I'm sure there is room for improvement (especially in some of the more complex stages), but the improvements will be very small unless new pixel perfect routes or glitches can be found.
I've realized that I can't do this myself. If anyone would like to try to tackle this with me I'd love it. (that goes for you too magicboy10xx if you're still around. I've seen your videos on youtube, and if you have any ideas for crazy difficult routes I'd love to try them)
Using the dolphin code manager and memory watch Here's what I've found so far:
(all positions in meters)
Current1 Y position: 00205f34
Current1 Z position: 00205f38
Current1 X position: 00205f3c
Next1 Y position: 00205e9c
Next1 Z position: 00205eac
Next1 X position: 00205ebc
For the following values will be the same as the above values unless they are changed in some other way
Next2 Y position: 00205e64
Next2 Z position: 00205e68
Next2 X position: 00205e6c
(changes next frame based upon the above next positions)
Current2 Y position: 00205e70
Current2 Z position: 00205e74
Current2 X position: 00205e78
The current speed will change based upon the difference between the current2 location and the next1 location.
As far as I can tell the only really useful positions are the current1 and next1. Maybe with moving platforms the current2 and next2 might change things up, but I haven't tested it.
Regardless, I think current1 will always be the current position. Also, changing next2 in the memory watch can move your monkey to a specific location and help determine specific coordinates you might be aiming for.
1 game unit = 1 meter = one 2x2 checkered square
Next, and probably most importantly is velocity (in meter's per frame):
Y velocity = 00205e7c
Z velocity = 00205e80
X velocity = 00205e84
Friction takes its toll of 1% of current velocity each frame while on the ground.
(I didn't find the memory address for that yet)
The monkey ball is 1 meter diameter
Gravity is 9.8 m/s^2 or .0098 game units/s^2
This appears to be a counter of the number of frames since the player was given control of the monkey during a stage:
001eec20
The one really useful address I haven't found yet is the current direction the camera is looking relative to the ball's location. This is useful since the ball moves relative to the direction the camera is looking.
These values may be near the values needed to be used to determine that angle, however:
From the camera's position, looking through the monkey:
Y location the camera should try to look toward: 021EEF0c
Z location the camera should try to look toward: 021EEF10
X location the camera should try to look toward: 021EEF14
FOV (default 1.333333) = 021EEF14
Camera location around the monkey (16 bit int): 021EEF1C - 00 to FF going counter clockwise around the monkey from the front
00 is right in front of the monkey looking at its face
79 is right behind the monkey looking at its butt
FF is back around to the front again
Lastly, according to this guy:
http://www.youtube.com/watch?v=Cj0V_scDLNo
the formula for velocity after bouncing in Super Monkey Ball 2 is (0.5+sin(ImpactAngle))/2
I'm not quite sure how he found that, but it's probably similar for SMB1.
Some other not so useful addresses I found while fooling around:
The address to change gravity is 00205ecc. Putting it in Dolphin's AR codes makes it crash. But if you change it every frame in the memory watch in debug mode it works.
The address to change your monkey ball diameter is 00205ec8. Once again this crashes AR but works in memory watch.