First of all, the offsets documented in this file are for the headerless American Super Mario Kart ROM.

---------------------Internal ROM Info----------------------
       File: Super Mario Kart (U) [!].smc
       Name: SUPER MARIO KART       Company: Nintendo
     Header: None                      Bank: HiROM
Interleaved: No                        SRAM: 16 Kb
       Type: DSP-1 + Batt               ROM: 4 Mb
    Country: USA                      Video: NTSC
  ROM Speed: 120ns (FastROM)       Revision: 1.0
   Checksum: Good 0xEB44              CRC32: CD80DB86
   Name: Super Mario Kart
Country: USA                    Revision: 1.0
 Port 1: Gamepad                  Port 2: Gamepad
Genre 1: Racing                  Genre 2: Battle

In order to hack the ROM, you will mainly need a hexadecimal editor (whichever) and a graphics editor (like Tile Molester).
To change the tracks, you can use Epic Edit.

As for the compressed data, you can use Epic Edit or Lunar Compress to decompress and recompress it.
You only need the starting address, on the left of the note pages.

Using Lunar Compress, the compression settings for SMK are format1 = 4 and format2 = 0.
For example, if you want to decompress the Monty Mole sprite, type something like that in the Lunar Compress window:
decomp.exe smk.smc mole.smc 5D6 4 0
And to recompress it:
recomp.exe mole.smc smk.smc 5D6 4 0
After having decompressed data, modified it, then recompressed it into the ROM, you will also need to make sure its recompressed size isn't bigger than the original compressed size (detailed in the (*) column). Else, that will overwrite the data directly below it, and therefore corrupt a part of your ROM, unless that part was full of blank data. You'll see a bigger size between brackets whenever there's some free room after the concerned compressed structure, meaning the new compressed size can be as big as this second size.

You will see "2bpp" (2 bits per pixel) or "4bpp rev" (4 bits per pixel, reversed) next to some graphics. They are graphics that may require you to change the codec view in your graphics editor in order to see them correctly.

Also, you will often find "tcp" in this manual. That stands for "tile and color palette pointers".
This is implied for most letters or texts (ie: 1 letter = 2 bytes, 1st byte = letter tile pointer, 2nd byte = letter color palette pointer), and texts are delimited by double quotes, so you know it's text.

By the way, whenever there is data about the drivers in the ROM, like pointers or names, their order is almost always this one:
Mario, Luigi, Bowser, Princess, Donkey Kong Jr, Koopa, Toad, Yoshi.
By looking for "10 00 11 00 12 00 (...) 16 00 17", you will also find data related the 8 characters ("10" being Mario) that is not documented here because not figured out by us. If your hex editor allows wildcard searches, you can also do a search like "10 ?? 11 ?? 12..." for more results.

Finally, if you want to submit corrections or new offsets, feel free to contact me at, and I'll update the manual.

Written by the Epic Racers team: Ok Impala!, Stifu, smkdan
Thanks to: FuSoYa, DJ Bouche, d4s, DeaDb0Lt, Cool NesTea, Gavin Ward, dirtbag, GlitchCog, Mattrizzle, Dr. Floppy MD