| Address | Description | Type | Size |
| $008650 | This is the routine that polls the controller and updates $15, $16, $17, $18.
$0086A0 (x8A0) - Change to [9C A0 0D AD A0 0D A2 00] to cause both player 1 & 2 to be controlled by controller 1. | Subroutine (JSR) | 119 |
| $0096AE | This is the code that is executed by game mode 03 (Load title). Game mode 11 (Mario Start) also uses parts of this code. The shared parts starts at $0096D5.
- $0096C4: music bank used for the Title Screen. 0E = Overworld Music, 48 = Level Music, 59 = Ending Music.
- $0096C7: title screen (level C7) song ID.
- $0096CC: title screen level number + $24.
- $009724: intro screen (level C5) music.
- $009725: changing it to [9C FB 1D] will allow you to change the music for the intro via Lunar Magic.
- $009737: Bowser phase 1 song ID. | ASM | 158 |
| $009B1D | BG Palette for the File Erase screen. Original value is $39C9. | Palette | 2 |
| $009BC9 | Save Game function. (Load Game starts around $009CEF. Last byte used in SRAM seems to be $70:0358.) | Subroutine (JSL) | 74 |
| $009CAD | Change '9C 9F 0D' to 'EA EA EA', and, if you happened to have a HDMA effect in the titlescreen, it will not be disabled when you go to the File Menu. | ASM | 3 |
| $00BA60 | The low byte of a series of Map16 data pointers in horizontal levels. The high bytes are at $00BA9C, and the bank byte is either $7E or $7F. These are indexed by screen number; each byte in this table and the other corresponds to the start of a particular screen's Map16 data (or chunk of 0x1B0 bytes). These are used in various routines that read or write Map16 data to find where a particular tile is. | Pointer | 32 |
| $00BEB0 | SMW's Map16-tile-generating routine. It uses values of $9C to determine which tile to generate, but these values are hardcoded. (See RAM address [url=https://smwc.me/m/smw/ram/7E009C]$9C[/url].) This is the main part; $00BFBC runs the codes for each tile. | Subroutine (JSL) | 268 |
| $00BFBC | A subroutine used with $00BEB0; it runs different codes depending on the value of $9C. The pointers for the different values begin at $00BFC9. They go from 01 to 1B, although the actual codes are kind of weird...the pointers vary depending on which Map16 page the tile is on, whether or not item memory should be affected, and if there are special cases (such as the Yoshi coin, which generates two tiles simultaneously). | Subroutine (JSR) | 67 |
| $00C00D | The subroutine that sets item memory bits. It is called during the subroutine at $00BEB0 for values of $9C that utilize item memory. | Subroutine (JSR) | 86 |
| $00C06B | Tiles to generate on Map16 page 0, used for values 01-09 of $9C. Note that the first byte is unused. | Misc. | 9 |
| $00C0B2 | Tiles to generate on Map16 page 1, used for values 0A-17 of $9C. | Misc. | 15 |
| $00C5CE | [9C 9F 0D] This address disables HDMA effects when player animation #$0B (Freeze) is triggered.
To fix this, change to [EA EA EA] (NOP #3). | ASM | 3 |
| $00CE99 | Spin Jump frame table
($00CE99-$00CE9A: 00 00 - Mario Standing - Small - Big)
($00CE9B-$00CE9C: 25 44 - Mario Back to Screen - Small - Big)
($00CE9D-$00CE9E: 00 00 - Same as first)
($00CE9F-$00CEA0: 0F 45 - Mario Facing Screen - Small - Big)
They are indexed by the frame counter. Change the 4th and 8th bytes - 44 and 45 - for 25 and 0F respectively to fix an oversight in which Cape Mario doesn't load its tilemap data when spin jumping and cape attacking. | Mario tilemap | 8 |
| $00D0D5 | Set 9C C1 0D to EA EA EA in order to not lose Yoshi on the OW when you fall down a pit when on top of Yoshi. | ASM | 3 |
| $00E9B6 | [00E8] 16-bit X position of the right edge of the screen, for blocking the player when side exits aren't enabled. The left edge can be found at [url=https://smwc.me/m/smw/rom/00E9C3]$00E9C3[/url]. | Misc. | 2 |
| $00F0C8 | Table for several Map16 blocks that handles which tiles to generate (the value stored to [url=https://www.smwcentral.net/?p=nmap&m=smwram#7E009C]$9C[/url]) when the block is hit. Block order is the same as $00F05C. | Objects | 36 |
| $00F2CD | The code for the midway point tile (Map16 tile 38, not the extended object).
- $00F2CE: what tile gets generated after breaking the midway point tape (see [url=https://smwc.me/m/smw/ram/7E009C]$9C[/url]; default is 02 - none).
- $00F2D5: change to [80 01] to disable the glitter that appears after touching a midpoint.
- $00F2E2: change to [80] to disable midway powerups (or [80 01] to make them always make you big, even if you have a better powerup).
- $00F2E5: what powerup midway points give you.
- $00F2E9: what sound effect midway points play. | Objects | 33 |
| $00F332 | The code that handles a Yoshi coin being collected.
- $00F333: Map16 tile number of the top half of the coin.
- $00F33C: offset of the score sprite when the top half is collected, relative to the bottom half.
- $00F343: changing [EE 22 14] to [EA EA EA] will disable the Yoshi Coin counter in the status bar. Note that this will also stop them from respawning when you've got five of them.
- $00F34A: number of Yoshi coins that need to be collected to trigger the "collected all" flag.
- $00F354: changing [99 2F 1F] to [EA EA EA] will make the Yoshi coins reappear even after collecting all 5 (or more) of them.
- $00F359: Yoshi coin sound.
- $00F35E: amount of regular coins a Dragon Coin gives you.
- $00F364: value stored to [url=https://smwc.me/m/smw/ram/7E009C]$9C[/url] when the coin is collected. | ASM | 69 |
| $00F5B7 | Hurt Subroutine (JSL to it to hurt the player).
$00:F5B9: Change to F0 to make mario invincible. (Will not make him invincible to crushing objects, lava or pitfalls).
$00:F5C1-$00:F5C3: Change from 0D 93 14 to EA EA EA to make Mario die normally when touching an enemy/muncher even after getting the goal tape/sphere.
$00:F5C6: Change from 9C E3 18 to EA EA EA to prevent coin game cloud counter from resetting on hit.
$00:F5D7: Change this to 80 to have Mario die when touched, regardless of powerup status.
$00:F5E3: This SFX plays when you get hit when flying.
$00:F5ED: Invincibility timer when hit while flying.
$00:F5F4: Mario shrinking SFX.
$00:F5F8-$00:F5FB: Set to EA EA EA EA to disable item box auto-falling when you get hurt.
$00:F5FC-$00:F5FF: Change the "A9 01 85 71" to "EA EA EA EA" to disable mario's shrinking animation when hit. | Subroutine (JSL) | 79 |
| $01999E | Block interaction of carryable and kicked sprite for horizontal interaction. This allows sprites to interact with bounce blocks.
Note that for the stunned state ($14C8 = $09), this interaction is skipped for Koopa shells.
- $01999F [$01]: Which sound effect to play when a sprite touches a solid block.
- $0199B2 [$14]: The range of the left side to check whether a sprite is on-screen.
- $0199B4 [$1C]: The range of the right side to check whether a sprite is on-screen (must be added with the left range).
- $0199CE [$05]: How long to disable interaction with capes and bounce sprites.
- $0199D5 [$53]: Which sprite breaks at wall contact.
| Sprite subroutine (JSR) | 62 |
| $019CD3 | X displacement for tiles in the first shared GFX routine ($019CF3). | Sprite tilemap related | 4 |
| $019CD7 | Y displacement for tiles in the first shared GFX routine ($019CF3). | Sprite tilemap related | 4 |
| $019CDB | Properties for tiles in the first shared GFX routine ($019CF3). It's indexed by the value of $05 times 4. | Sprite tilemap related | 24 |
| $01E33C | Tile spawned by ledge-dwelling Monty Mole. Uses the values for [url=https://smwc.me/m/smw/ram/7E009C]$7E009C[/url]. | Misc. | 1 |
| $01E522 | Part of the code that makes sprite 32, the Dry Bones that stays on ledges, throw bones when the overworld level is 10D.
You can change $01E522 to [80 1E] to make sprite 32 never throw bones, change $01E526 to [80 05] to make it throw bones in all overworld levels, or change $01E52A to a different number to make it check a different overworld level. The default value is 31, and it follows the format of RAM address $13BF. If you change this behavior, you must also change the code at $01E59C. | ASM | 11 |
| $01E59C | Part of the code that makes sprite 32, the Dry Bones that stays on ledges, set its timer for throwing bones when the overworld level is 10D.
You can change $01E59C to [80 18] to make sprite 32 never throw bones, change $01E5A0 to [80 05] to make it throw bones in all overworld levels, or change $01E5A4 to a different number to make it check a different overworld level. The default value is 31, and it follows the format of RAM address $13BF. If you change this behavior, you must also change the code at $01E522. | ASM | 11 |
| $01F760 | Tile numbers for each frame in the Yoshi egg hatching animation. Read from right to left as (intact, breaking, breaking, puff of smoke).
Change alongside $019C17 and $01F794 to completely remap the Yoshi egg tiles. | Sprite tilemap related | 4 |
| $01F794 | Yoshi Egg Tilemap (only manifests if the Yoshi egg is in the normal status ($14C8 = #$08), i.e. free-standing Yoshi egg).
Change alongside $019C17 and $01F760 - $01F763 to completely remap the Yoshi egg tiles. | Sprite tilemap related | 1 |
| $028752 | A subroutine for spawning bounce sprites for blocks. It continues into the routine at [url=https://smwc.me/m/smw/rom/02887D]$02887D[/url].
Input:
- $04 - bounce sprite command
- $05 - value to use in $02887D
- $06 - speed index (see $02873A and $02873E)
- $07 - value of [url=https://smwc.me/m/smw/ram/7E009C]$9C[/url] the block will turn into
Notable subsections of this routine include:
- $028789 (9 bytes): Block bounce sprite YXPPCCCT table. First 7 values match with the value in $04 ([url=https://smwc.me/m/smw/ram/7E1699]$1699[/url] - 1) while the last two are for commands 0x10 and 0x11 (coloured turn blocks / !-block bounce animation).
- $028758 (49 bytes): Break turn block routine.
- $0287B0 (84 bytes): Stops an existing bounce animation, if [url=https://smwc.me/m/smw/ram/7E1699]$1699[/url] has no empty slots available to spawn a new bounce sprite into
- $028804 (121 bytes): Portion of the routine to actually spawn the bounce sprite
| Subroutine (JSL) | 335 |
| $02919F | Subroutine used to changed the tile at the current bounce sprite's position.
Contains a few different entry points:
- $02919F: The code which loads the currently assigned block the bounce sprite should turn into ([url=https://smwc.me/m/smw/ram/7E009C]$9C format[/url]) and handles whether a multiple coins block should turn into a used block. Called when a bounce sprite terminates and becomes a normal block again.
- $0291B8: Spawns an invisible solid block. This is called when a bounce sprite has just spawned but also when the bounce sprite collects a coin, leading to the solid air tile glitch (see [url=https://smwc.me/m/smw/rom/029265]$029265[/url]).
- $0291BA: Spawns a tile according to the value in A ([url=https://smwc.me/m/smw/ram/7E009C]$9C format[/url]). This is called from spinning turn blocks when they become solid.
| Subroutine (JSR) | 77 |
| $0291B5 | Value for $9C to change what Map16 tile is created when a multiple-coin-block is hit after its timer has run out. | Misc. | 1 |
| $02B9A4 | This generates a Map16 tile at the position of the sprite currently being processed. It can be accessed with a JSL, and A should be set to the value of $9C you wish to use. | Sprite subroutine (JSL) | 25 |
| $02BB03 | Tile spawned from eating a berry (using tongue). Corresponds to a value in $7E:009C. | Misc. | 1 |
| $02D208 | Tile spawned from eating a berry (w/o using tongue). Corresponds to a value in $7E:009C. | Misc. | 1 |
| $02E83D | Tiles left behind by the left (first 4 bytes) and the right (next 4 bytes) side of the Growing/Shrinking Pipe, in the format of $7E009C. The order of the bytes corresponds to the pipe waiting at the bottom, growing, waiting at the top, and shrinking. | Misc. | 8 |
| $039320 | Which tile gets created by the brown creating block sprite. Does not affect the tile that the eating block sprite eats, or the tile that activates these two sprites when you stand on it. See [url=https://smwc.me/m/smw/ram/7E009C/]this[/url] for a list of possible values. | Objects | 1 |
| $03932D | Which tile is created by the brown eating block sprite. Defaults to air; see [url=https://smwc.me/m/smw/ram/7E009C]this[/url] for a list of possible values.
Note that there is no RAM address that affects which tile this block will eat - it will go after ANY solid block that is next to it. | Objects | 1 |
| $03C000 | This generates a Map16 tile at the position of the sprite currently being processed plus 8 pixels left and 8 pixels down. It can be accessed with a JSL, and A should be set to the value of $9C you wish to use. | Sprite subroutine (JSL) | 35 |
| $04A0FC | How to put level names together.
Format: 16 bits/entry.
First byte contains the offsets to the second and third parts (lowest four bits there is third part, upper four bits there is second), while the second byte (except the highest bit, which is unused) contains the offset to the first part.
Note that those offsets aren't direct, they point to $049C91, $049CCF, or $049CED (note: those offsets are 16bit), which contains the real offsets to $049AC5. | Layer 3 | 186 |
| $05B10C | The subroutine that displays the message from a message box. It handles the windowing HDMA, the stripe image upload, and things such as teleporting to the overworld after the intro screen.
$05B129: [9C 9F 0D] Change to [EA EA EA] to prevent HDMA from getting disabled AFTER a message box has been displayed. Use with $05B296.
$05B15C: [8E] The Y position on which to start the march to Yoshi's House after the intro screen. To be used with $048F08.
$05B15D: [8D 19 1F] ASM code that stores the player's starting Y position to its RAM address, $1F19. Lunar Magic changes this to [EA EA EA] if you move the Mario OW sprite around, thus disabling the intro march (and its effects, such as storing '0' to the amount of levels cleared). If you want to undo this effect, change it back to [8D 19 1F].
$05B160: Side exit subroutine. It can be JSL'd to.
$05B189: [D0 CF] Change to [EA EA] to prevent the message that pops up in the intro screen from exiting the level. (It will act exactly the same as a message in any other level.)
$05B21D: [39] Tile properties of the Layer 3 tiles in message box messages in YXPCCCTT format. (Note: Lunar Magic ASM hacks render this address unused.)
$05B296: [8D] Change to [0C] to prevent HDMA from getting disabled WHILE a message box is being displayed. Use with $05B129. | Subroutine (JSL) | 399 |
| $05BEA6 | [9C 11 14] Change this to EA EA EA to make Layer 2 Sideways Scroll not disable horizontal scroll. | ASM | 3 |
| $068000 | Level 012, 019, 01E, 025-092, 09C-0BC, 10C, 112, 124, 129, 12E, 12F, 131, 133, 137-192, 19C-1BA | Level data | 99 |
| $0683AB | Unused level: Beta level 01A.
| Level data | 342 |
| $07E76D | Level 012, 019, 01E, 025-092, 09C-0BC, 10C, 112, 124, 129, 12E, 12F, 131, 133, 137-192, 19C-1BA (Sprites) | Level data | 2 |
| $07F659 | Default values for $190F, various misc flags, for the standard sprites.
Change $07F69C from 05 to 25 to fix the Dolphin tails showing up when they're vertically off-screen. | Sprite Misc. | 201 |