View Page Source

Revision (current)
Last Updated by adelikat on 8/31/2023 4:16 PM
Back to Page

__The purpose of this page is to document aspects of Mario Kart 64 that are important to Tool Assisted Speedrunning.__

*For Lua scripts that partially automate optimal maneuvers and provide helpful information while TASing Mario Kart 64 see [https://github.com/weatherton/BizHawkMarioKart64| this GitHub repository]
*For progress related to developing patches for Mario Kart 64 go to [GameResources/N64/MarioKart64/Patches]
*For basic driving strategies, see [http://www.mariokart64.com/mk64/mt.shtml| this tips page].
*For high quality course maps, see [http://www.mariouniverse.com/maps/n64/mk| Mario Universe]
*For technical details related to Mario Kart 64 hacking, see [http://wiki.origami64.net/mk64|Origami64], [http://origami64.net/showthread.php?tid=47|Origami64 Forums] and [https://github.com/RenaKunisaki/mariokart64|Github]

%%TOC%%

''Please note that the following Game Resources page uses terms consistent with the game's original [http://www.stoneagegamer.com/manuals/Nintendo%2064/Mario%20Kart%2064%20(A).pdf| instruction booklet] and [http://www.stoneagegamer.com/manuals/Nintendo%2064/Mario%20Kart%2064%20(Operation%20Card)%20(A).pdf| operation card], where possible.''%%%

!!! Increasing Speed

!! Rocket Start
As Lakitu counts down at the start of the race, pressing "A" revs your engine. The largest boost is obtained by pressing "A" for the entire pre-race sequence except for a single frame. Releasing "A" for additional frames (inclusive of this frame) may still receive a boost but it will be smaller. On some levels a smaller boost may be faster (e.g. to receive an optimal jump off another driver).

The frame where A must be released to receive the boost:
[To Do: Enter picture of correct frame]

!! Shrooming
The start boost is actually the same effect as using a mushroom. When "shrooming", you gain additional speed by sliding (~+10%). While "shroom sliding" it is also slightly faster (~+3%) to oscillate the horizontal joystick position every frame. This oscillating slide or "Xenos slide" (named after the [=Subs-1132up.html | discoverer]) typically requires you to take a slightly less direct route, so it is not always worth doing. Also of note is the fact that a Mini Turbo (MT) can be charged while shroom sliding, this is typically worth doing and thus further reduces the time frame for Xenos sliding.

!! Respawn Rev
When being placed back on the course after having gone out of bounds, the fastest way to accelerate is to hold "A" at the first possible frame that will not spin you out (i.e. any earlier and your driver spins out). This frame depends on whether you fell into ice water or not, because the ice shattering animation takes additional time.

!! Triple-Tap "A"
In many cases you may lose speed as consequence of a maneuver. The fastest way to regain speed (without the use of an item) is to triple-tap "A", which is optimally performed by alternating pressing and releasing "A" each frame (i.e. A_A_AAAA...). This technique is effective from a complete stop as well as from a partial loss of speed. It can be combined with Spin-Turning to turn quickly. Triple-Tapping is most effective with the light-weight characters and Bowser (the other characters benefit but to a much smaller degree).

!! Mini Turbo (MT)
A MT is a small boost awarded after a player performs a complicated drift process used to build the boost. The MT is a core advanced driving technique and is a primary differentiator between beginner and advanced players. It can be done around corners as well as on straightaways (a "Straight Stretch Mini Turbos" or SSMT). A MT has seven unique phases which can be performed "frame perfect". The longer a player spends on each step beyond what is necessary, the more speed they lose while building the MT boost and the greater overall distance they travel. Thus, for a TAS it is important to understand the absolute limits of this technique. The following table summarizes the MT phase requirements:

||MT Phase||Frames||ΣFrames||Phase Description||
|1. Inward jump|6|6|Jump and turn (on the same frame) in the direction you wish to MT. 6 frames assumes flat ground.|
|2. First outward slide|9|15|Once you land, immediately turn the opposite direction and hold the slide to charge.|
|3. First inward toggle|1|16|Toggle inward to change smoke from white to yellow|
|4. Second outward slide|4|20|Immediately toggle back outward and hold the slide to charge.|
|5. Second inward toggle|1|21|Toggle inward to change smoke from yellow to orange. Release "R" immediately and, if done frame-perfect, the red smoke will not be visible|
|6. Glide turn|8-12|29-33|Once you release the slide a MT boost is active for 14 frames (speed is still elevated for some time after the boost ends). During this boost you can turn without losing speed. This MT glide allows you to angle yourself correctly coming out of the MT|
|7. Untilt|1-2|30-35|Once angled correctly, you must toggle the opposite direction for at least one frame to align your kart to the track. If you do not do this the kart drives at an angle or is "tilted" to its direction of travel and loses speed.|

Note that optimal MT spacing is situation dependent. However, assuming an infinitely long, flat surface, optimal spacing would be XX (To do: test exact value) frames after the MT boost starts.

Depending on the terrain and situation several different options... The following table details these limits as they are currently understood. Note that the internal game requirements are not fully understood and the inputs in these tables were developed through experimentation:

%%TAB Outward MT (fastest)%%
||MT Phase||X||Y||R||A||Comment||
||1. Inward jump||{{+65||000||R||A}}|| ||
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{-35|000|R|A}}|For unknown reasons, values as low as -35 are permitted on this frame.|
|1. Inward jump|{{+65|000|R|A}}| |
||2. First outward slide||{{-65||000||R||A}}|| ||
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
||3. First inward toggle||{{+39||000||R||A}}||A toggle with a magnitude of at least 39 is almost always required to charge a MT.||
||4. Second outward slide||{{-50||000||R||A}}|| ||
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
||5. Second inward toggle||{{+39||000||R||A}}|| ||
||6. Glide turn||{{-65||000|| ||A}}||Beginning a glide turn with max turning allows the fastest possible adjustment back to straight||
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
||7. Untilt||{{+63||000|| ||A}}||+63 for one frame is all that is required to completely untilt with this MT||
||8. MT Spacing||{{000||000|| ||A}}|| ||
|⋮|⋮|⋮|⋮|⋮| |

%%TAB Straight MT (faster)%%
||MT Phase||X||Y||R||A||Comment||
||1. Inward jump||{{+62||000||R||A}}|| ||
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{-35|000|R|A}}| |
|1. Inward jump|{{+64|000|R|A}}| |
||2. First outward slide||{{-60||000||R||A}}|| ||
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
||3. First inward toggle||{{+39||000||R||A}}|| ||
||4. Second outward slide||{{-50||000||R||A}}|| ||
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
||5. Second inward toggle||{{+50||000||R||A}}|| ||
||6. Glide turn||{{-56||000|| ||A}}|| ||
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
||7. Untilt||{{+61||000|| ||A}}|| ||
||8. MT Spacing||{{000||000|| ||A}}|| ||
|⋮|⋮|⋮|⋮|⋮| |

%%TAB Inward MT (fast)%%
||MT Phase||X||Y||R||A||Comment||
||1. Inward jump||{{+65||000||R||A}}|| ||
|1. Inward jump|{{+65|000|R|A}}| |
|1. Inward jump|{{+65|000|R|A}}| |
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{+20|000|R|A}}| |
|1. Inward jump|{{+65|000|R|A}}| |
||2. First outward slide||{{-65||000||R||A}}|| ||
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
|2. First outward slide|{{-60|000|R|A}}| |
||3. First inward toggle||{{+39||000||R||A}}|| ||
||4. Second outward slide||{{-50||000||R||A}}|| ||
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
||5. Second inward toggle||{{+40||000||R||A}}|| ||
||6. Glide turn||{{-55||000|| ||A}}|| ||
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
||7. Untilt||{{+65||000|| ||A}}|| ||
||8. MT Spacing||{{000||000|| ||A}}|| ||
|⋮|⋮|⋮|⋮|⋮||

%%TAB Classic MT (reliable)%%
||MT Phase||X||Y||R||A||Comment||
||1. Inward jump||{{+65||000||R||A}}|| ||
|1. Inward jump|{{+65|000|R|A}}| |
|1. Inward jump|{{+65|000|R|A}}| |
|1. Inward jump|{{+65|000|R|A}}| |
|1. Inward jump|{{+65|000|R|A}}| |
|1. Inward jump|{{+65|000|R|A}}| |
||2. First outward slide||{{-65||000||R||A}}|| ||
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
|2. First outward slide|{{-65|000|R|A}}| |
||3. First inward toggle||{{+39||000||R||A}}|| ||
||4. Second outward slide||{{-50||000||R||A}}|| ||
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
|4. Second outward slide|{{-50|000|R|A}}| |
||5. Second inward toggle||{{+39||000||R||A}}|| ||
||6. Glide turn||{{-65||000|| ||A}}|| ||
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-65|000| |A}}| |
|6. Glide turn|{{-40|000| |A}}| |
||7. Untilt||{{+65||000|| ||A}}|| ||
||8. MT Spacing||{{000||000|| ||A}}|| ||
|⋮|⋮|⋮|⋮|⋮| |

%%TAB Minimize tab%%
%%TAB_END%%


MT in mneumonic formats:

%%TAB Minimize tab%%

%%TAB Outward MT (fastest)%%
 |..|   65,    0,.................r|
 |..|   20,    0,.................r|
 |..|   20,    0,.................r|
 |..|   20,    0,.................r|
 |..|  -35,    0,.................r|
 |..|   65,    0,.................r|
 |..|  -65,    0,.................r|
 |..|  -65,    0,.................r|
 |..|  -60,    0,.................r|
 |..|  -60,    0,.................r|
 |..|  -60,    0,.................r|
 |..|  -60,    0,.................r|
 |..|  -60,    0,.................r|
 |..|  -60,    0,.................r|
 |..|  -60,    0,.................r|
 |..|   39,    0,.................r|
 |..|  -50,    0,.................r|
 |..|  -50,    0,.................r|
 |..|  -50,    0,.................r|
 |..|  -50,    0,.................r|
 |..|   39,    0,.................r|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|  -65,    0,..................|
 |..|   63,    0,..................|
 |..|    0,    0,..................|

%%TAB_END%%

!! Drafting
If you follow closely behind another character for several seconds, you receive a draft boost. This boost is not very significant, however, and a MT would be more effective in all known cases.

!! Back Up
Pressing "B" and down while stopped allows you to back up. One unique aspect of backing up is that acceleration is nearly instantaneous. A velocity of -12 (from 0) is achieved within [To Do: Calculate number] frames.

!!! Methods of Turning

||Degree of Turn||Method||
|Slight|Slight adjustments in direction can be made without losing much speed by nudging the control stick in the desired direction for a few frames and then nudging back in the opposite direction for one or two frames to untilt the kart and realign to the new path. This should only be done in a TAS if necessary but is common in realtime speedrunning to make small adjustments.|
|Small|    |
|Normal|    |
|Tight|    |
|Spin|    |

!!! Driver Attributes

!! Classes

!! Capabilities
Acceleration curves
[To do: Add tables for each of the following, with a column for each character and a row for each frame (including a graph would also be helpful)]:%%%
*Rocket Start (Use LR or BC)
*Hold "A" from stop
*Triple-Tap "A" from stop
*Triple-Tap "AB" from stop
*Respawn Rev
*Reverse

Details at: [http://pastebin.com/Nxv4MfKH]

|| ||Yoshi||Toad||Peach||Mario||Luigi||D.K.||Wario||Bowser||
||Top Speed (50cc)|294|294|294|290|290|290|290|290|
||Top Speed (100cc/Extra)|314|314|314|310|310|310|310|310|
||Top Speed (150cc)|324|324|324|320|320|320|320|320|
||Top Speed (Battle)|245|245|245|245|245|245|245|245|
||Turn Speed|1.28|1.28|1.28|1.25|1.25|1.15|1.15|1.15|
||Turn Speed Reduction|0.002|0.002|0.002|0|0|-0.002|-0.002|-0.002|
||Triple Tap A|3|3|3|2|2|1.5|1.5|3|
||Size|5.5|5.5|5.5|5.5|5.5|5.5|6|6|
||Weight|0.9|0.7|0.9|1.2|1|2|1.8|2.3|

This table is a summary of the entries that start at memory addresses 0x800E257C and 0x802B8790.

[http://i.imgur.com/OYIN29Y.png]

[http://i.imgur.com/7sSnqqq.png]

!!! Driver States



!! Shrooming

!! MT Boost

!! AB Spinning

!! Off ground
It is important to know when you are off the ground as this generally means that you are losing speed. Being on the ground allows you to maintain your speed while driving on flat ground, charge a MT more quickly and accelerate while going down hill. The acceleration possible while going downhill is significant but can be tricky to initiate as your kart will tend to want to go airborne on steeper slopes. The right combination of pre-jumping and/or tapping "A" can help stick your kart to the down-slope.

!! States Table
Note: States are not (necessarily) mutually exclusive. Many can be active concurrently.

||    Bit      ||0x0F6AD4||0x0F6A4C||0x0F6A4D||0x0F6A4E||0x0F6A4F||0x0F6A5A||0x0F6A5B
|1000 0000 (128)|''unknown''|Boo active|Large feather jump active|Dazed (e.g. penguin hit)|Spin-out (hit object)|''unknown''|Frozen|
|0100 0000 (64)|Spin-out swerve|Struck by lightning|"REVERSE"|''unknown''|Spin-out "WHIRRR!"|''unknown''|''unknown''|
|0010 0000 (32)|No kart roll|Outward sliding|Draft boost|Shrooming|AB Spinning|Dripping water|Defrosting|
|0001 0000 (16)|Bonk|''unknown''|Dash Zone boost|CPU controlled (After losing GP race)|"BOING!" speed (can slide)|Smoking|Frosty (blue tint after ice breaks)|
|0000 1000 (8)|Freeze kart in air (activates 32)|Un-flattening|Small feather jump active|Spin-out (banana)|Off Ground|''unknown''|Stuck (out of bounds)|
|0000 0100 (4)|Spin-out bonk (activates 8)|Flattened|''unknown''|Tumble rotation (momentum)|Zipper boost|''unknown''|Low opacity (Lakitu fade-out)|
|0000 0010 (2)|Ghost activation smoke|Directional tumble (i.e. green shell)|Slightly off ground|Star power|Jumped (pressed "R")|''unknown''|Lakitu holding|
|0000 0001 (1)|Big jump landing smoke|Vertical tumble (i.e. fake item box)|Wall tumble|MT boost active|Braking|Over water/lava/space|Water (out of bounds)|


!! State activators
Many of these might be used for CPUs

||    Bit      ||0x0F699C||0x0F699D||0x0F699E||0x0F699F||
|1000 0000 (128)|''unknown''|Dash Zone activator|Weak shroom ''(unknown use)''|Spinout start (save)|
|0100 0000 (64)|''unknown''|Chomp/train/car/bomb hit tumble activator|Lightning hit|''unknown''|
|0010 0000 (32)|''unknown''|Spiny/crab hit|Star|''unknown''|
|0001 0000 (16)|Spinout|''unknown''|Small feather jump activator|''unknown''|
|0000 1000 (8)|''unknown''|Boat hit|Boo activator (translucent)|''unknown''|
|0000 0100 (4)|Boo activator (invisible)|Holding item(s) zoom out|''unknown''|Green shell hit|
|0000 0010 (2)|Start boost activator|Large feather jump activator|Shroom|Mole hit|
|0000 0001 (1)|Shell hit|''unknown''|Squished|Spinout|

0x0E9F74 = 1; Driving while underwater is indicated by

0x0F6A9D; Piranha plant hit sequence

0x0F6A43; Feather use sequence / some spinouts

0x0F69D4 gets set to 24 during the trophy sequence to simulate a spin jump. It's unclear why the developers didn't just use one of the spin jump states they left in the game.

!! 2D animation states

||    Bit      ||0x0F6A46||0x0F6A47||
|1000 0000 (128)| | |
|0100 0000 (64)| |"CRASH"|
|0010 0000 (32)| |Music note (spinout save)|
|0001 0000 (16)|Shell hit| |
|0000 1000 (8)|"BOING!"| |
|0000 0100 (4)| | |
|0000 0010 (2)| | |
|0000 0001 (1)|"POOMP!"| |

!!! Kart Location / Speed

!!! Shortcuts

!! Wall Jumps

! Luigi Raceway (brick wall jump) - [https://youtu.be/hqW09QLStJ4?t=1m7s| Example Video]
*You can bank off of the brick wall and over the to the other side of the track by shrooming into the brick wall and jumping the frame before hitting the wall.

! Angled Wall Jumps
*Angled walls that are short enough can be jumped over by jumping on the frame before the wall is hit.
**This works to jump over and back on the walls in [https://www.youtube.com/watch?v=hYtMnRrdi0s| Wario Stadium].
**This works in Choco Mountain to [https://youtu.be/zZc2-KPGUsM?t=11m11s| jump up the stone wall] and also to make an [https://youtu.be/Vo5hpKkGC6s?t=10m16s| earlier jump] before the stone wall.


!! Seam Jumps / Breaks

! Luigi Raceway (Mylestyle)

! Kalimari Desert


!! Tenko Jumps

! Gregstyle

! Weathertenko


!! Collision Jumps

!! Lakitu Warps

! Lakitu Effect


!! Finish line glitches

This refers to an incorrectly mapped polygon overlapping the finish line plane. When a player is on a polygon like this but behind the finish line, the game will read that player as being at the start of the lap instead of the end. The benefit of the glitch is that is allows the player to get items (usually 8th place) that they normally would not get while in first because the game sees them as being a lap behind. The zones where this can be used are shown below.

! Koopa Troopa Beach

[http://beckabney.com/mk64/images/ktbFinishLineGlitch.png]

! Royal Raceway

[http://beckabney.com/mk64/images/rryFinishLineGlitch.png]

! Yoshi Valley

[http://beckabney.com/mk64/images/yvFinishLineGlitch.png]

!!! Items

!! Probabilities

%%TAB GP Mode%%
||Item||Code||1st||2nd||3rd||4th||5th||6th||7th||8th||
|Banana|1|30%| | | | | | | |
|Banana Bunch|2|5%|5%| | | | | | |
|Green Shell|3|30%|5%| | | | | | |
|Triple Green Shell|4|5%|10%|10%| | | | | |
|Red Shell|5|5%|15%|20%|15%|10%| | | |
|Triple Red Shell|6| |20%|20%|20%|20%|20%|20%|20%|
|Spiny Shell|7| | | |5%|5%|10%|10%|15%|
|Thunder Bolt|8| |5%|5%|10%|10%|15%|20%|20%|
|Fake Item Box|9|10%|5%| | | | | | |
|Super Star|A| |5%|10%|15%|15%|20%|30%|30%|
|Boo|B|5%|5%| | | | | | |
|Mushroom|C|10%|5%|5%|5%|5%| | | |
|Triple Mushrooms|E| |15%|20%|20%|25%|25%|10%|5%|
|Super Mushroom|F| |5%|10%|10%|10%|10%|10%|10%|
|Total| |100%|100%|100%|100%|100%|100%|100%|100%|

This table is a summary of the entries that start at memory address 0x1A7A90.

%%TAB GP Mode, CPUs%%
||Item||Code||1st||2nd||3rd||4th||5th||6th||7th||8th||
|Banana|1|60%|50%|40%|35%|30%|30%|30%|25%|
|Banana Bunch|2| | | | | | | | |
|Green Shell|3|25%|25%|25%|25%|20%|20%|20%|20%|
|Triple Green Shell|4| |5%|10%|15%|20%|20%|20%|20%|
|Red Shell|5| | | | | | | | |
|Triple Red Shell|6| | | | | | | | |
|Spiny Shell|7| | | | | | | | |
|Thunder Bolt|8| | | | | | | |1%|
|Fake Item Box|9|10%|10%|10%|10%|5%|5%| | |
|Super Star|A| | | | |5%|5%|10%|10%|
|Boo|B|5%|5%|5%|5%| | | | |
|Mushroom|C| |5%|10%|10%|20%|20%|20%|24%|
|Triple Mushrooms|E| | | | | | | | |
|Super Mushroom|F| | | | | | | | |
|Total| |100%|100%|100%|100%|100%|100%|100%|100%|

This table is a summary of the entries that start at memory address 0x1A7DBO.

%%TAB 2-Player Versus%%
||Item||Code||1st||2nd||
|Banana|1|25%| |
|Banana Bunch|2|10%|5%|
|Green Shell|3|30%| |
|Triple Green Shell|4|5%|5%|
|Red Shell|5|5%|5%|
|Triple Red Shell|6| |15%|
|Spiny Shell|7| |5%|
|Thunder Bolt|8| |15%|
|Fake Item Box|9|10%| |
|Super Star|A| |15%|
|Boo|B|5%| |
|Mushroom|C|10%| |
|Triple Mushrooms|E| |15%|
|Super Mushroom|F| |20%|
|Total| |100%|100%|

This table is a summary of the entries that start at memory address 0x1A80D0.

%%TAB 3-Player Versus%%
||Item||Code||1st||2nd||3rd||
|Banana|1|35%|5%| |
|Banana Bunch|2|5%|5%| |
|Green Shell|3|30%| | |
|Triple Green Shell|4| |10%| |
|Red Shell|5|5%|15%|10%|
|Triple Red Shell|6| |15%|20%|
|Spiny Shell|7| | |10%|
|Thunder Bolt|8| |5%|15%|
|Fake Item Box|9|10%|5%| |
|Super Star|A| |5%|15%|
|Boo|B|5%|5%| |
|Mushroom|C|10%|5%| |
|Triple Mushrooms|E| |20%|20%|
|Super Mushroom|F| |5%|10%|
|Total| |100%|100%|100%|

This table is a summary of the entries that start at memory address 0x1A8198.

%%TAB 4-Player Versus%%
||Item||Code||1st||2nd||3rd||4th||
|Banana|1|35%|5%| | |
|Banana Bunch|2|5%|5%|5%| |
|Green Shell|3|30%|5%| | |
|Triple Green Shell|4| |10%|5%| |
|Red Shell|5|5%|15%|10%| |
|Triple Red Shell|6| |15%|15%|20%|
|Spiny Shell|7| | |5%|10%|
|Thunder Bolt|8| | |10%|15%|
|Fake Item Box|9|10%|5%|5%| |
|Super Star|A| |5%|10%|20%|
|Boo|B|5%|5%| | |
|Mushroom|C|10%|5%|5%| |
|Triple Mushrooms|E| |25%|25%|25%|
|Super Mushroom|F| | |5%|10%|
|Total| |100%|100%|100%|100%|

This table is a summary of the entries that start at memory address 0x1A82C4.

%%TAB Battle%%
||Item||Code||Active Players||
|Banana|1|10%|
|Banana Bunch|2|5%|
|Green Shell|3|5%|
|Triple Green Shell|4|20%|
|Red Shell|5|20%|
|Triple Red Shell|6| |
|Spiny Shell|7| |
|Thunder Bolt|8| |
|Fake Item Box|9|15%|
|Super Star|A|20%|
|Boo|B|5%|
|Mushroom|C| |
|Triple Mushrooms|E| |
|Super Mushroom|F| |
|Total| |100%|

This table is a summary of the entries that start at memory address 0x1A8454.

%%TAB Minimize tab%%
%%TAB_END%%

!! Manipulation
Items are based the tables above but can be manipulated in some ways.

The randomness for the item selection works as follows:%%%
__Formula:__ (RNGValue + ABRFrames + RaceFrames + LastItem) % 100

 __RNG Value:__ Returned value of random number call giving a random number from 0 to 99
 __A/B/R Buttons:__ Counter goes up each frame (29.97fps) that on of these buttons is pressed. Can go up by 1, 2, or 3 depending on how many of them are pressed at once (or more if using more than 1 controller).
 __Race Frames:__ Counter that goes up each frame (59.94fps) during a race (including startup with Lakitu and points screens)
 __Last Selected Item:__ Last item table number that was produced from the formula above


Because of the way the RNG works, it is possible to cycle the RNG rotation by using the A, B, and R buttons when they otherwise don't affect the driving (before the race starts for example).

The full lookup table is helpful when manipulating ABR frames, so I'm including those here as well:
%%TAB Minimize tab%%
%%TAB GP Mode, Players - Full Lookup Table%%
||RNG Value||1||2||3||4||5||6||7||8||
|0|01|02|04|05|05|06|06|06|
|1|01|02|04|05|05|06|06|06|
|2|01|02|04|05|05|06|06|06|
|3|01|02|04|05|05|06|06|06|
|4|01|02|04|05|05|06|06|06|
|5|01|03|04|05|05|06|06|06|
|6|01|03|04|05|05|06|06|06|
|7|01|03|04|05|05|06|06|06|
|8|01|03|04|05|05|06|06|06|
|9|01|03|04|05|05|06|06|06|
|10|01|04|05|05|06|06|06|06|
|11|01|04|05|05|06|06|06|06|
|12|01|04|05|05|06|06|06|06|
|13|01|04|05|05|06|06|06|06|
|14|01|04|05|05|06|06|06|06|
|15|01|04|05|06|06|06|06|06|
|16|01|04|05|06|06|06|06|06|
|17|01|04|05|06|06|06|06|06|
|18|01|04|05|06|06|06|06|06|
|19|01|04|05|06|06|06|06|06|
|20|01|05|05|06|06|07|07|07|
|21|01|05|05|06|06|07|07|07|
|22|01|05|05|06|06|07|07|07|
|23|01|05|05|06|06|07|07|07|
|24|01|05|05|06|06|07|07|07|
|25|01|05|05|06|06|07|07|07|
|26|01|05|05|06|06|07|07|07|
|27|01|05|05|06|06|07|07|07|
|28|01|05|05|06|06|07|07|07|
|29|01|05|05|06|06|07|07|07|
|30|02|05|06|06|07|08|08|07|
|31|02|05|06|06|07|08|08|07|
|32|02|05|06|06|07|08|08|07|
|33|02|05|06|06|07|08|08|07|
|34|02|05|06|06|07|08|08|07|
|35|03|06|06|07|08|08|08|08|
|36|03|06|06|07|08|08|08|08|
|37|03|06|06|07|08|08|08|08|
|38|03|06|06|07|08|08|08|08|
|39|03|06|06|07|08|08|08|08|
|40|03|06|06|08|08|08|08|08|
|41|03|06|06|08|08|08|08|08|
|42|03|06|06|08|08|08|08|08|
|43|03|06|06|08|08|08|08|08|
|44|03|06|06|08|08|08|08|08|
|45|03|06|06|08|0A|0A|08|08|
|46|03|06|06|08|0A|0A|08|08|
|47|03|06|06|08|0A|0A|08|08|
|48|03|06|06|08|0A|0A|08|08|
|49|03|06|06|08|0A|0A|08|08|
|50|03|06|08|0A|0A|0A|0A|08|
|51|03|06|08|0A|0A|0A|0A|08|
|52|03|06|08|0A|0A|0A|0A|08|
|53|03|06|08|0A|0A|0A|0A|08|
|54|03|06|08|0A|0A|0A|0A|08|
|55|03|08|0A|0A|0A|0A|0A|0A|
|56|03|08|0A|0A|0A|0A|0A|0A|
|57|03|08|0A|0A|0A|0A|0A|0A|
|58|03|08|0A|0A|0A|0A|0A|0A|
|59|03|08|0A|0A|0A|0A|0A|0A|
|60|03|09|0A|0A|0C|0A|0A|0A|
|61|03|09|0A|0A|0C|0A|0A|0A|
|62|03|09|0A|0A|0C|0A|0A|0A|
|63|03|09|0A|0A|0C|0A|0A|0A|
|64|03|09|0A|0A|0C|0A|0A|0A|
|65|04|0A|0C|0C|0E|0E|0A|0A|
|66|04|0A|0C|0C|0E|0E|0A|0A|
|67|04|0A|0C|0C|0E|0E|0A|0A|
|68|04|0A|0C|0C|0E|0E|0A|0A|
|69|04|0A|0C|0C|0E|0E|0A|0A|
|70|05|0B|0E|0E|0E|0E|0A|0A|
|71|05|0B|0E|0E|0E|0E|0A|0A|
|72|05|0B|0E|0E|0E|0E|0A|0A|
|73|05|0B|0E|0E|0E|0E|0A|0A|
|74|05|0B|0E|0E|0E|0E|0A|0A|
|75|09|0C|0E|0E|0E|0E|0A|0A|
|76|09|0C|0E|0E|0E|0E|0A|0A|
|77|09|0C|0E|0E|0E|0E|0A|0A|
|78|09|0C|0E|0E|0E|0E|0A|0A|
|79|09|0C|0E|0E|0E|0E|0A|0A|
|80|09|0E|0E|0E|0E|0E|0E|0A|
|81|09|0E|0E|0E|0E|0E|0E|0A|
|82|09|0E|0E|0E|0E|0E|0E|0A|
|83|09|0E|0E|0E|0E|0E|0E|0A|
|84|09|0E|0E|0E|0E|0E|0E|0A|
|85|0B|0E|0E|0E|0E|0E|0E|0E|
|86|0B|0E|0E|0E|0E|0E|0E|0E|
|87|0B|0E|0E|0E|0E|0E|0E|0E|
|88|0B|0E|0E|0E|0E|0E|0E|0E|
|89|0B|0E|0E|0E|0E|0E|0E|0E|
|90|0C|0E|0F|0F|0F|0F|0F|0F|
|91|0C|0E|0F|0F|0F|0F|0F|0F|
|92|0C|0E|0F|0F|0F|0F|0F|0F|
|93|0C|0E|0F|0F|0F|0F|0F|0F|
|94|0C|0E|0F|0F|0F|0F|0F|0F|
|95|0C|0F|0F|0F|0F|0F|0F|0F|
|96|0C|0F|0F|0F|0F|0F|0F|0F|
|97|0C|0F|0F|0F|0F|0F|0F|0F|
|98|0C|0F|0F|0F|0F|0F|0F|0F|
|99|0C|0F|0F|0F|0F|0F|0F|0F|

%%TAB GP Mode, CPUs - Full Lookup Table%%
||RNG Value||1||2||3||4||5||6||7||8||
|0|01|01|01|01|01|01|01|01|
|1|01|01|01|01|01|01|01|01|
|2|01|01|01|01|01|01|01|01|
|3|01|01|01|01|01|01|01|01|
|4|01|01|01|01|01|01|01|01|
|5|01|01|01|01|01|01|01|01|
|6|01|01|01|01|01|01|01|01|
|7|01|01|01|01|01|01|01|01|
|8|01|01|01|01|01|01|01|01|
|9|01|01|01|01|01|01|01|01|
|10|01|01|01|01|01|01|01|01|
|11|01|01|01|01|01|01|01|01|
|12|01|01|01|01|01|01|01|01|
|13|01|01|01|01|01|01|01|01|
|14|01|01|01|01|01|01|01|01|
|15|01|01|01|01|01|01|01|01|
|16|01|01|01|01|01|01|01|01|
|17|01|01|01|01|01|01|01|01|
|18|01|01|01|01|01|01|01|01|
|19|01|01|01|01|01|01|01|01|
|20|01|01|01|01|01|01|01|01|
|21|01|01|01|01|01|01|01|01|
|22|01|01|01|01|01|01|01|01|
|23|01|01|01|01|01|01|01|01|
|24|01|01|01|01|01|01|01|01|
|25|01|01|01|01|01|01|01|03|
|26|01|01|01|01|01|01|01|03|
|27|01|01|01|01|01|01|01|03|
|28|01|01|01|01|01|01|01|03|
|29|01|01|01|01|01|01|01|03|
|30|01|01|01|01|03|03|03|03|
|31|01|01|01|01|03|03|03|03|
|32|01|01|01|01|03|03|03|03|
|33|01|01|01|01|03|03|03|03|
|34|01|01|01|01|03|03|03|03|
|35|01|01|01|03|03|03|03|03|
|36|01|01|01|03|03|03|03|03|
|37|01|01|01|03|03|03|03|03|
|38|01|01|01|03|03|03|03|03|
|39|01|01|01|03|03|03|03|03|
|40|01|01|03|03|03|03|03|03|
|41|01|01|03|03|03|03|03|03|
|42|01|01|03|03|03|03|03|03|
|43|01|01|03|03|03|03|03|03|
|44|01|01|03|03|03|03|03|03|
|45|01|01|03|03|03|03|03|04|
|46|01|01|03|03|03|03|03|04|
|47|01|01|03|03|03|03|03|04|
|48|01|01|03|03|03|03|03|04|
|49|01|01|03|03|03|03|03|04|
|50|01|03|03|03|04|04|04|04|
|51|01|03|03|03|04|04|04|04|
|52|01|03|03|03|04|04|04|04|
|53|01|03|03|03|04|04|04|04|
|54|01|03|03|03|04|04|04|04|
|55|01|03|03|03|04|04|04|04|
|56|01|03|03|03|04|04|04|04|
|57|01|03|03|03|04|04|04|04|
|58|01|03|03|03|04|04|04|04|
|59|01|03|03|03|04|04|04|04|
|60|03|03|03|04|04|04|04|04|
|61|03|03|03|04|04|04|04|04|
|62|03|03|03|04|04|04|04|04|
|63|03|03|03|04|04|04|04|04|
|64|03|03|03|04|04|04|04|04|
|65|03|03|04|04|04|04|04|08|
|66|03|03|04|04|04|04|04|0A|
|67|03|03|04|04|04|04|04|0A|
|68|03|03|04|04|04|04|04|0A|
|69|03|03|04|04|04|04|04|0A|
|70|03|03|04|04|09|09|0A|0A|
|71|03|03|04|04|09|09|0A|0A|
|72|03|03|04|04|09|09|0A|0A|
|73|03|03|04|04|09|09|0A|0A|
|74|03|03|04|04|09|09|0A|0A|
|75|03|04|09|09|0A|0A|0A|0A|
|76|03|04|09|09|0A|0A|0A|0C|
|77|03|04|09|09|0A|0A|0A|0C|
|78|03|04|09|09|0A|0A|0A|0C|
|79|03|04|09|09|0A|0A|0A|0C|
|80|03|09|09|09|0C|0C|0C|0C|
|81|03|09|09|09|0C|0C|0C|0C|
|82|03|09|09|09|0C|0C|0C|0C|
|83|03|09|09|09|0C|0C|0C|0C|
|84|03|09|09|09|0C|0C|0C|0C|
|85|09|09|0B|0B|0C|0C|0C|0C|
|86|09|09|0B|0B|0C|0C|0C|0C|
|87|09|09|0B|0B|0C|0C|0C|0C|
|88|09|09|0B|0B|0C|0C|0C|0C|
|89|09|09|0B|0B|0C|0C|0C|0C|
|90|09|0B|0C|0C|0C|0C|0C|0C|
|91|09|0B|0C|0C|0C|0C|0C|0C|
|92|09|0B|0C|0C|0C|0C|0C|0C|
|93|09|0B|0C|0C|0C|0C|0C|0C|
|94|09|0B|0C|0C|0C|0C|0C|0C|
|95|0B|0C|0C|0C|0C|0C|0C|0C|
|96|0B|0C|0C|0C|0C|0C|0C|0C|
|97|0B|0C|0C|0C|0C|0C|0C|0C|
|98|0B|0C|0C|0C|0C|0C|0C|0C|
|99|0B|0C|0C|0C|0C|0C|0C|0C|

%%TAB_END%%

[http://beckabney.com/mk64/items.php|Item RNG calculation] | [https://github.com/abitalive/MarioKart64/blob/master/Notes/item_rng.txt|Item RNG assembly code with comments]

!! Lap Progress Trick

!!! Miscellaneous Tricks

!! Shells
Item cancel jump.

!! Fake Item Box
Vertical speed multiplier

!! Bananas
Although probably not useful in a TAS, it's worth documenting that spinning out results in a set speed. Normally this speed is slower than you could otherwise travel. However, if you have been shrunken by lightning the spin out speed is faster than you could otherwise travel.

!! Lag Reduction
* Zoomed out camera helps
* Zooming out further by holding a banana or fake item box behind the player helps
** Items can be continued to be held during points screens he Z was being held (and continued to be held) before crossing the finish line


!!! Helpful Game Shark Codes

When testing new strategies, particularly shortcuts, it can be helpful to change some memory addresses to test concepts. The following codes are particularly helpful for this purpose: 
"Turn in Mid Air"%%%
800F6A4F 0000%%%
D00F6915 0020%%%
810F69C8 4000%%%
800F699D 0000%%%%

"Drive Through Walls"%%%
8002E000 0010%%%
8002E058 0010%%%%