SMW Memory Map
|$00F160||263 bytes||Subroutine (JSL)||Routine used to trigger SMW blocks, used for example by kicked sprites to make ON/OFF blocks, Note blocks, etc. activate when hitting them.
- $98: 16-bit Y position of the block.
- $9A: 16-bit X position of the block.
- $1933: which layer the block is in.
- Y: must be #$00.
- A: map16 number low byte (high byte is always #$01, since all the blocks that can be triggered by this are in map16 page 1).
|$00F176||131 bytes||Objects||Green Star Block code.
$00:F1E9 - FG/BG Tileset in which coin question blocks' behavior are changed for the 3-block 1up bonus game.
$00:F1EA - Change from F0 0D to EA EA to disable the 3-block 1up bonus game, allowing you to use coin question blocks in levels with the switch palace tileset (4), and freeing up the 5 bytes at RAM address $13F4 for custom use.
|$00F17A||1 byte||Objects||How many colored Exclamation Blocks are allowed by default within all tilesets to enable spawning items, with the exception of Ghost House, Boss Battles, etc...
$02 (Green, Yellow) by default, Can be set to $00 to disable item spawning, and instead make them solid.
|$00F21D||1 byte||Sprite Misc.||Sprite to generate out of the bonus block (the rows of ?-blocks) if all three of them were guessed right. Default: #$05 (1-Up). Other possible values include, but are not excluded to: #$00 = None; #$01 = Mushroom; #$02 = Fire Flower; #$03 = Star; #$04 = Feather.|
|$00F237||1 byte||Sound effect||Incorrect! Sound effect for the bonus 3 block minigame.|
|$00F253||1 byte||Misc.||What the remaining blocks become when hitting the incorrect block in a bonus area|
|$00F2BB||3 bytes||ASM||Change [99 3C 1F] to [EA EA EA] to make the 1up checkpoint work again when reentering a level|
|$00F2C0||183 bytes||Mario physics||Shared Map16 interaction routine to handle interaction with various tiles on page 0. The tile number is passed in Y, and the specific interaction point being processed is identified via a value passed in A, using a format similar to that of $74. The routine specifically handles interaction for the following tiles, in the following order:
The game uses multiple entry points to the routine depending on the interaction point being processed:
|$00F2CD||33 bytes||Objects||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 $9C; default is 02 - none).
- $00F2D5: change to [80 01] to disable the glitter that appears after touching a midpoint.
- $00F2E2: change to  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.
|$00F316||1 byte||Misc.||Change '0F' to the following, and the 3UP moon will add this to your life or score counter:
00 = Nothing at all
01 - 0C = Scores 10-8000.
0D = 1UP.
0E = 2UP.
0F = 3UP.
10 = 5UP (glitched).
11-FF = Best not to use.
|$00F325||3 bytes||ASM||Replace '99 EE 1F' with 'EA EA EA' to make moons reappear when you re-enter a level after collecting them.|
|$00F332||69 bytes||ASM||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 $9C when the coin is collected.
|$00F377||59 bytes||Subroutine (JSL)||The subroutine that handles the score when you get a Yoshi coin.
Changing $00F37A [EE 20 14] to [EA EA EA] will stop the Yoshi Coin counter from increasing and giving you points and giving you a life after you collected enough for one.
|$00F38A||40 bytes||Subroutine (JSL)||Subroutine to spawn a score sprite at Mario's position. Load the score sprite to spawn in A before calling; alternatively, jump a few bytes earlier to $00F388 to specifically spawn a 1up score sprite.|
|$00F3B2||18 bytes||Subroutine (JSR)||This subroutine gets an index to the "one bit per level" tables ($1F2F, $1F3C, $1FEE) depending on the overworld level number ($13BF). When it returns, Y holds the byte index to $1F2F and A holds the bit to check/set.|
|$00F3E3||1 byte||Coordinate||[0A] Signed offset of the enterable region of the left tile of an exit-enabled vertical pipe from the left edge of the tile, in pixels, minus 1
Change to #$FF to make up pipes enterable as no matter where you hit them. (For use with the hex edit at $00F3F9)
|$00F3E4||1 byte||Coordinate||[FF] Signed offset of the enterable region of the right tile of a vertical exit-enabled pipe from the left edge of the tile, minus 1|
|$00F3E5||4 bytes||Controller||Which button you have to be pushing in order to enter the 4 kinds of pipes. In order: End on right, end on left, end on bottom, end on top.|
|$00F3ED||1 byte||Misc.|| Offset of entering vertical pipes. Setting it to any other number than 36-38 will make the player incapable of entering.|
|$00F3F9||1 byte||Coordinate|| Width of the enterable region of a vertical exit-enabled pipe tile (either one), in pixels
In vanilla SMW, this is half the width of the enterable region of the entire pipe, but this won't be true if the two exit-enabled pipe tiles are made to have overlapping enterable regions.
Change to #$10 to make up pipes enterable no matter where you hit them. (For use with the hex edit at $00F3E3)
|$00F43A||1 byte||Sound effect||Going Down Pipe Sound|
|$00F443||10 bytes||Subroutine (JSR)||Subroutine that checks if Mario is in the center of a door. Not used for boss doors.
$00F44B  is the width of the enterable region of the door (up to 0x10). $00F447  is how far to offset the enterable region; this should be set to half of $00F44B.
|$00F44D||24 bytes||Mario physics||Routine that sets up Mario's object collision points for RAM addresses $98-$9B, inclusive.|
|$00F545||80 bytes||Subroutine (JSL)||Routine that handles behaviours for various Map16 tiles. For P-Switch dependent tiles, this routine only sets the "act as", not the graphics.
$00F54C: Map16 tile number (low byte) that should act like a ? Coin Block when the blue P-Switch is active. Default is ($00)29, the Invisible POW ? Coin Block.
$00F555: Map16 tile number (low byte) that the Invisible POW ? Coin Block should act like when the blue P-Switch is active. Default is ($01)24, the ? Coin Block.
$00F55B: Map16 tile number (low byte) that should act like a Brown "used" Block when the blue P-Switch is active. Default is ($00)2B, the Coin.
$00F572: Map16 tile number (low byte) that Coins should act like when the blue P-Switch is active. Default is ($01)32, the Brown "used" Block.
$00F561 & $00F563: Range of Map16 tiles (page 0) that set the "current Palace Switch being pressed" value in $1423. $00F561 (#$EC) is subtracted from the Map16 tile number, then compared with $00F563 (#$10). If the result is less than #$10, the value gets incremented by 1 and stored to $1423. This makes it so that only tiles ($00)EC to ($00)FB, the Palace Switch tiles, set $1423.
$00F57B: Map16 tile number (low byte) that should act like a Coin when the blue P-Switch is active. Default is ($01)32, the Brown "used" Block.
$00F585: Map16 tile number (low byte) that should act like a Coin when the silver P-Switch is active. Default is ($01)2F, the Black Piranha Plant.
$00F58E: Map16 tile number (low byte) that the Brown "used" Block should act like when the blue P-Switch is active, and the Black Piranha Plant should act like when the silver P-Switch is active. Default is ($00)2B, the Coin.
|$00F598||2 bytes||Mario physics||Highest Y position that the player is able to be at, 16 bit. Note that this is a negative value.|
|$00F5AD||2 bytes||Misc.||Change to 80 03 (BRA $03) to make it so falling into a pit results in death even in Yoshi wings levels, or to 80 00 (BRA $00) to make it so falling into a pit will always activate the normal exit.|
|$00F5B7||79 bytes||Subroutine (JSL)||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.
|$00F606||35 bytes||Subroutine (JSL)||Death Subroutine (JSL to it to kill Mario).
$00F607 controls the speed at which the player jumps up ($7E007D format).
$00F60B controls which music is played when Mario dies.
$00F619 can be changed from 0D 14 to 12 14 to make the screen not scroll when the player loses a life.
$00F61C controls the amount of time Mario stays on screen before dying.
*note that if Mario Falls into a hole, the rom will JSL to $00F60A to skip the death animation
|$00F69F||4 bytes||Misc.||Where Mario has to be vertically on-screen for the game to consider the screen "caught up" with him in a particular direction, thereby stopping it from scrolling. The first two bytes are for scrolling upwards, while the second two are scrolling down.|
|$00F6A7||6 bytes||Misc.||How fast the camera "catches up" to Mario when scrolling vertically. The first two bytes are when scrolling upwards, while the second two are scrolling down.
The third entry is a bit strange, and for the most part unused. If the level is set to "no vertical scroll unless flying/climbing/etc.", then it gets used as the upwards scroll speed of the screen when it's below the point where the screen "locks" vertical scrolling. Since this is normally at the bottom of a level where the screen can't scroll any further down, it can only really get used in vertical levels.
|$00F6AD||6 bytes||Misc.||Vertical limits for scrolling the screen.
The first two bytes are the highest distance the screen can scroll upwards; essentially, it's the top of the level.
The second two are the highest distance the screen can scroll upwards... when the screen is stationary or moving downwards. Recommended to keep it identical to the first two bytes.
The third entry is where the screen's vertical scrolling locks in a level with the "no vertical scroll unless flying/climbing/etc." option. The screen can actually still scroll vertically if it goes below this point, but it can't scroll up past it unless one of the special conditions is met.
|$00F6B3||4 bytes||Misc.||The maximum distances the screen will scroll normally (without L/R held), in 16-bit. The first two are scrolling left, the second two are scrolling right.
Setting these values higher than the ones in $00F6CD may cause the screen to act strangely.
|$00F6C1||4 bytes||Misc.||How quickly the screen moves when scrolling with L/R. The first two bytes are scrolling right, while the second two are scrolling left.
It's worth noting that these are also used to check whether Mario is facing the direction the screen is scrolling, for deciding whether to have it "catch up" to him while he's walking around. It only matters whether the two values are negative or positive, though, so as long as you aren't changing the scroll direction, there shouldn't be any issues. If you want to fix that, you can do so by changing $00F8CB from 0xBF to 0xC5.
|$00F6C7||4 bytes||Misc.||How quickly the screen scrolls horizontally when "catching up" to Mario while he's walking around normally. The first two bytes are right, while the second are left.|
|$00F6CD||4 bytes||Misc.||The maximum distances the screen can be scrolled with L and R, in 16-bit. The first is scrolling right, the second is scrolling left.
Setting these values lower than the ones in $00F6B3 may cause the screen to act strangely when screen scrolling.
|$00F6DB||516 bytes||Misc.||Level camera handling routine. This routine handles camera movement with the player.
Horizontal scrolling is handled at $00F70D (horizontal level) and $00F75C (vertical level)
Vertical scrolling (both horizontal and vertical levels) handled at $00F7F4
L/R scrolling (as well as the “auto look ahead” based on player's facing) handled at $00F8AB (scroll lines being moved around is handled at $00CE09)
Layer 2 scrolling (mainly for background) is handled at $00F79D, which determines the scrolling rate in relation with layer 1.
|$00F6E5||2 bytes||Misc.||Distance Mario must be offset to the left of the screen's "hotspot" defined by $7E142A for the screen to scroll leftwards.|
|$00F6EC||2 bytes||Misc.||Distance Mario must be offset to the right of the offset at $00F6E5 for the screen to scroll rightwards. Essentially, this defines the width of the area where the screen will never scroll horizontally.|
|$00F70E||2 bytes||Coordinate||Lowest Y position the screen is allowed to scroll down to in horizontal levels. Change from C0 00 to CF 00 (do the same on $00F6B1 so the "no vertical scroll unless flying/climbing/etc." work consistently) to allow the bottom row of 16x16 blocks to be shown.|
|$00F727||1 byte||Misc.||Change #$00 to #$02 (value to be stored in $7E:0055 and $7E:0056) and you'll get a SMB1-like effect regarding screen-scrolling: it's impossible to go to the left, even with L/R-scrolling.|
|$00F79D||13 bytes||ASM||Code that handles the Layer 2 horizontal scroll settings (LM's "Layer 2 (BG) Scrolling Rate").|
|$00F7AA||24 bytes||ASM||Code that handles the Layer 2 vertical scroll settings (LM's "Layer 2 (BG) Scrolling Rate").|
|$00F806||2 bytes||Coordinate||How high Mario must be in order to make the screen scroll vertically, when the scrolling mode is 'Vertical scroll at will', when Mario lands on a platform. 16-bit value, little endian.
The lower the value, the higher Mario must be in order to make the screen scroll vertically.
|$00F878||1 byte||Misc.||Change from D0 to 80 to activate free vertical scrolling. This will bypass the routine that checks whether Mario is standing on solid ground or not (RAM address $72) and sets the scrolling flag accordingly. The camera follows Mario instead of waiting for him to land on something.|
|$00F99C||2 bytes||Coordinate||What 16-bit Y position on screen ($7E:0080) the player should have at the very minimum, before being killed in the Iggy/Larry battle room. Used to simulate lava tiles.|
|$00F9F5||27 bytes||Empty||Unused data.|
|$00FA10||9 bytes||Subroutine (JSL)||Unreachable, but can be JSL'ed to clear out the sprite status table.|
|$00FA19||44 bytes||Sprite subroutine (JSL)||Load slope information. This is a subroutine which gets the slope information for the current tile which means slope type and height of the ground for the current X position. It's used to load the slope info for sprites.
Map16 tile ID low byte
$0A: X position of the interaction point
$0C: Y position of the interaction point
Y: Index to the ground height table, calculated with from $08 * 4 + $0A & #$0F.
$00: Y position of the current interaction within the block, calculated from $0C & #$0F.
$05-$07: 24-bit pointer to the ground height table $00E632.
$08: Slope type.
|$00FA46||1 byte||Misc.||Time to shake ground when you hit the big switch in the switch palace. Default is 20.|
|$00FA4D||1 byte||Sprite number||Sprite that's spawned when hitting a switch palace. Note that it always uses slot 02.|
|$00FA80||95 bytes||Subroutine (JSL)||The routine which triggers the goal tape.
$00FABF -  The state which sprites are put into when the goal tape is triggered. Can be set to any of the valid values for RAM address $14C8.
|$00FADF||28 bytes||Misc.||Table of the various sprites Mario receives for carrying different items past the goal tape.
The table itself is divided into four 7-byte sections: P-switches and springboards will use the second section, keys will use the third, baby Yoshi will use the fourth, and anything else will use the first.
Each section is then indexed by Mario's current state, in the order: small, big, cape, fire, with star power, on Yoshi, and unused. The star power index is essentially unused, however, because the counter always gets cleared before the table gets loaded from.
If the value returned is E0-EF, Mario will receive the sprite written at $00FB50 (1-up by default). If it's F0-FF, he'll receive the sprite at $00FB54 (...also a 1-up by default). In both cases, it'll also store the lower four bits to $1594, which for a 1up, will affect the number of lives it gives (0 = 1 life, 1 = 2 lives, 2 = 3 lives, 3 = 5 lives). It's 0 in every obtainable case, though, so the feature is effectively unused.
Additionally, $00FB40 is the sprite to spawn if Mario already has the sprite in his item box (again, 1-up by default).
Lastly, you can re-enable factoring star power into the table by changing $01C0FE to EA EA EA.
|$00FB40||1 byte||Sprite number||Sprite that the Blue/Silver P-switch, Portable Spring Board, Throw Block Sprite and carryable stunned enemies will turn into when they reach the goal point.|
|$00FB50||1 byte||Sprite number||Sprite that the Key will turn into when it reaches the goal point.|
|$00FB53||5 bytes||ASM||Change to EA EA EA EA EA to prevent the 1UPs being spawned at the goal point. $00:FB54 controls the sprite number that Baby Yoshi (Green, Red, Yellow, Blue) will turn into when it reaches the goal point.|
|$00FB6F||1 byte||Sprite Misc.||The Y speed of the sprite when you carry an item over the goal.|
|$00FB74||1 byte||Sprite Misc.||The X speed of the sprite when you carry an item over the goal.|
|$00FB7E||1 byte||Sound effect||Sound for items given at goal point|
|$00FBAC||8 bytes||Sprite subroutine (JSL)||Routine that handles sprites turned into a coin by the goal tape. It's a JSL wrapper to the subroutine at $00FBB4.|
|$00FBB4||111 bytes||Sprite subroutine (JSR)||Routine that handles sprites turned into a coin by the goal tape. It first makes the coin appear as a smoke cloud until $1540,x is 0, then it draws the coin, handles its movement and finally it gives Mario a coin, erasing the sprite permanently.|
|$00FC17||1 byte||Misc.|| Difference between point values of successive sprite coins spawned at the goal tape. The default is 02, so the point sequence will go 100, 400, 1000, 4000, etc.; you can change it to 01 to make the point values go 100, 200, 400, 800, etc. or to 00 to make it always stay at 100 no matter how many sprites get turned into coins.|
|$00FC23||87 bytes||Sprite subroutine (JSL)||An unused routine. When called, if there's a Yoshi spawned in the level and Mario is not riding him, it'll teleport him to the left edge of the screen running towards the right, and move him to Mario's Y position. If there's no Yoshi spawned, nothing happens. No matter what, the Yoshi will be turned to green and without wings.
Note that the routine overwrites the Y register.
$00F6CE: [$10] X speed given to Yoshi.
|$00FC7A||114 bytes||Subroutine (JSL)||Used in SMW to initialize Yoshi when entering a level, or sublevel. JSLing to this will cause a Yoshi to spawn and Mario will be riding him, however the Yoshi will not transfer to sublevel or to the overworld. You must set $13C7 if you plan to manually JSL to this routine.
Changing $00FCCE to 0x80 will keep Yoshi from turning blue after grabbing a pair of Yoshi wings.
|$00FCF6||1 byte||Coordinate||X lo position of Iggy and Larry at the start of the boss battle.|
|$00FCFA||1 byte||Coordinate||X hi position of Iggy and Larry at the start of the boss battle.|
|$00FCFF||1 byte||Coordinate||Y lo position of Iggy and Larry at the start of the boss battle.|
|$00FD03||1 byte||Coordinate||Y hi position of Iggy and Larry at the start of the boss battle.|
|$00FD27||1 byte||Sprite number||Object that Mario "breathes" while underwater (small bubble)|
|$00FD5A||67 bytes||Subroutine (JSR)||SMW's glitter trail subroutine, called when you collect a coin or Yoshi coin.
Change $00FD6B to EA EA EA EA EA (NOP #5) to disable showing a glitter effect when a coin is collected.
|$00FD9D||4 bytes||Misc.||Table of four bytes that are used to determine where the water splash sprite Y position for Mario is.
Changing $00FD9E from $FC to $00 will fix the splash from being one tile above big Mario.
|$00FE17||1 byte||Sprite number||Object that Mario leaves when he jumps into water (small bubble)|
|$00FE4A||73 bytes||Subroutine (JSR)||Routine to show little puff of smoke when the player turns around.|
|$00FE94||1 byte||Mario physics||Initial fireball X speed facing left|
|$00FE95||1 byte||Mario physics||Initial fireball X speed facing right|
|$00FE96||1 byte||Coordinate||X-position of Mario's fireball (left)|
|$00FE97||1 byte||Coordinate||X-position of Mario's fireball (right)|
|$00FE98||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi (left). Only relevant if you enable the debug code at $00D087.|
|$00FE99||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi (right). Only relevant if you enable the debug code at $00D087.|
|$00FE9A||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi and ducking (left). Only relevant if you enable the debug code at $00D087.|
|$00FE9B||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi and ducking (right). Only relevant if you enable the debug code at $00D087.|
|$00FE9C||1 byte||Coordinate||X-position of Mario's fireball (left), high byte.|
|$00FE9D||1 byte||Coordinate||X-position of Mario's fireball (right), high byte.|
|$00FE9E||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi (left), high byte. Only relevant if you enable the debug code at $00D087.|
|$00FE9F||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi (right), high byte. Only relevant if you enable the debug code at $00D087.|
|$00FEA0||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi and ducking (left), high byte. Only relevant if you enable the debug code at $00D087.|
|$00FEA1||1 byte||Coordinate||X-position of Mario's fireball when on Yoshi and ducking (right), high byte. Only relevant if you enable the debug code at $00D087.|
|$00FEA2||1 byte||Coordinate||Y-Position for Mario's Fireballs (Left)|
|$00FEA3||1 byte||Coordinate||Y-Position for Mario's Fireballs (Right)|
|$00FEA4||1 byte||Coordinate||Y-position of Mario's fireball when on Yoshi (left). Only relevant if you enable the debug code at $00D087|
|$00FEA5||1 byte||Coordinate||Y-position of Mario's fireball when on Yoshi (right). Only relevant if you enable the debug code at $00D087|
|$00FEA6||1 byte||Coordinate||Y-position of Mario's fireball when on Yoshi and ducking (left). Only relevant if you enable the debug code at $00D087.|
|$00FEA7||1 byte||Coordinate||Y-position of Mario's fireball when on Yoshi and ducking (right). Only relevant if you enable the debug code at $00D087.|
|$00FEB6||1 byte||Sound effect||Fireball sound effect|
|$00FEC0||1 byte||Sprite number||Object Fire Mario shoots (must change $00FEA9 to 07 for some values to work)|
|$00FEC5||1 byte||Mario physics||Initial fireball Y speed|
|$00FF93||45 bytes||Empty||Empty (all FF) in a clean ROM.
Used by many patches (like fastrom), and the last byte becomes 42 when you lock the ROM.
|$00FFC0||64 bytes||Misc.||Internal ROM header. Contains a brief summary of the game. See details.||Data format|
|$018008||6 bytes||Sprite subroutine (JSR)||Subroutine that checks if a sprite is touching a wall. If the accumulator is set, it's touching a wall.|
|$01800E||6 bytes||Sprite subroutine (JSR)||Subroutine that is accessed by sprites to check if a sprite is touching the ground. If the accumulator is set, it's touching the ground.|
|$018014||6 bytes||Sprite subroutine (JSR)||Routine that checks if a sprite is touching a ceiling. If the accumulator is set, it's touching a ceiling.|
|$01801A||8 bytes||Sprite subroutine (JSL)||The subroutine that updates a sprite's Y position without gravity. JSRs into $01ABD8 which is the main handler of adjusting the sprite's position.|
|$018022||8 bytes||Sprite subroutine (JSL)||The subroutine that updates a sprite's X position without gravity. JSRs into $01ABCC, which adds the sprite's index number by 12 (which is the number of existing sprite slots), then JSRs again into $01ABD8 so that it will handle moving the X position of the sprite.|
|$01802A||8 bytes||Sprite subroutine (JSL)||Subroutine that updates a sprite's X/Y position, including gravity and block interaction. This calls $019032 and also calls $01ABCC to apply the movement.|
|$018032||8 bytes||Sprite subroutine (JSL)||Sprite to sprite interaction wrapper. That one jumps to $01A40D so the sprite to sprite interaction routine can be called from any bank.|
|$01803A||8 bytes||Sprite subroutine (JSL)||A subroutine that makes sprites interact with each other and with the player, essentially combining $018032 and $01A7DC.|
|$018042||8 bytes||Sprite subroutine (JSL)||SMW's first shared subroutine for drawing sprites. This one draws four 8x8 tiles in a 16x16 arrangement. Not very useful for custom sprites.|
|$01804A||4 bytes||Subroutine (JSR)||Routine that inverts the value in the accumulator.|
|$01804E||62 bytes||Sprite subroutine (JSR)||Routine to spawn dust sprite (smoke sprite number $03) at the sprite's position. Used for example by Sliding Koopas and Monty Moles.|
|$01808C||63 bytes||Subroutine (JSL)||Routine that runs all the normal and cluster sprites routines.|
|$0180D2||85 bytes||Subroutine (JSR)||Routine that gets the current sprite's OAM index and decrements all the sprite timers.|
|$018137||26 bytes||Pointer||Sprite status subroutine pointers. These are called based on the value of $14C8,x; valid values are 00-0C.|
|$018151||6 bytes||Sprite Misc.||This is sprite status #$00, which is is called when a sprite is either dead or nonexistent. It also sets $161A,x to #$FF to prevent that sprite from being reloaded.|
|$018157||22 bytes||Sprite Misc.||Routine that handles sprites in the "powerup from being carried past the goal tape" state ($14C8,x = #$0C). It calls the sprite's main code, then despawns it if it went offscreen and applies movement (decelerating the Y speed).|
|$01816D||5 bytes||Sprite Misc.||Routine that handles sprites in the "turned into coin by the goal tape" state ($14C8 = #$06). It just JSLs to $00FBAC.|
|$018172||11 bytes||Subroutine (JSR)||This is sprite status #$01, which will call the current sprite's init routine.|
|$01817D||402 bytes||Pointer||Pointers to sprite initialization routines. These are called based on the sprite number ($9E,x). Valid values are 00-C8; sprites C9 and above are considered different types of sprites and handled by other routines.|
|$018223||2 bytes||Pointer||Change from C2 85 to 35 84 to allow throw blocks to be placed directly in Lunar Magic, with infinite timer until they disappear.|
|$018327||1 byte||Timer||[3F] How many frames until a Timed Lift (sprite BA) will fall if it starts at an odd X position. Default value is $3F, or about 1 second.|
|$01832F||1 byte||Timer||[FF] How many frames until a Timed Lift (sprite BA) will fall if it starts at an even X position. Default value is $FF, or about 4 seconds.|
|$018335||4 bytes||Palette||Colours of Yoshi Eggs (Red, Blue, Yellow, Blue)|
|$018340||1 byte||Misc.||How many types of Yoshi Eggs to allow, minus one|
|$01834C||2 bytes||Sprite physics||Initial leftward and rightward X speeds of diagonally moving sprites, i.e. stream of boo buddies and reflecting fireball (F0).|
|$018357||1 byte||Misc.||Initial Y speed of diagonally moving sprites, i.e. stream of boo buddies and reflecting fireball (F0).|
|$01836A||1 byte||ASM||Change to EA to make both wooden spikes move up or down depending on X&1 instead of sprite AC always moving down first.|
|$018391||1 byte||Sound effect||SFX played by the Banzai Bill|
|$0183A0||4 bytes||Sprite number||Sprites inside exploding turn block (Fish, Goomba, Shelless Green Koopa, Green Koopa)|
|$0183DB||1 byte||Timer||Length of time before sprite #19's message box appears (don't set lower than 04)|
|$018455||1 byte||Misc.||How many types of P-Switches to allow, minus one|
|$018466||2 bytes||Palette||Colours of P-Switches (Blue, Silver)|
|$0184A5||1 byte||Sprite number||Sprite spawned by killing Lakitu with cape or fireball (Lakitu Cloud)|
|$0184C6||4 bytes||ASM||Change to EA EA EA EA to make lakitu cloud never get spawned|
|$0184E4||1 byte||Sprite Misc.|| Timer to send Bullet Bills behind objects, set on spawn.|
|$01854C||1 byte||Misc.||How many segments Pokey has when Mario is riding Yoshi. The amount of segments depends on these bits:
---x xxxx. If any of the x bits are set, a segment will be added. If none is set, the sprite won't appear. If any of the - bits is set, the sprite won't appear.
|$018553||1 byte||Misc.||How many segments Pokey has when Mario isn't riding Yoshi. The amount of segments depends on these bits:
---x xxxx. If any of the x bits are set, a segment will be added. If none is set, the sprite won't appear. If any of the - bits is set, the sprite won't appear.
|$01857A||8 bytes||Sprite subroutine (JSR)||Face Mario subroutine, usually used by sprites to initially face Mario's direction.|
|$0185CC||402 bytes||Pointer||Pointers to sprite main routines. These are called based on the sprite number ($9E,x). Valid values are 00-C8; sprites C9 and above are considered different types of sprites and handled by other routines.|
|$018763||38 bytes||Sprite subroutine (JSR)||Goal point sphere/boss killed code.
- $018778: if you change this to [20 23 CD] and change $01CD23 to [9E C8 14 CE C6 13 60], it will prevent the player from walking after touching a goal sphere in a horizontal level.
- $018784: it controls which music is played when it's collected.
|$018890||3 bytes||Subroutine (JSR)||Initialization routine for sprite 52 (moving ledge hole in ghost house) that simply decrements the low byte of its Y position.
Lunar Magic v2.53+ renders this routine unused by changing the initialization routine to $0185B7 instead. This is done in order to fix the glitch where placing the hole at the top of a subscreen causes its position to wrap around to the bottom of the subscreen.
|$018898||84 bytes||Sprite subroutine (JSR)||Subroutine that makes Yellow Koopas jump over shells.
$0188E5 is the Y speed they get when jumping ($C0).
|$0188EC||4 bytes||Sprite Misc.||Standard X speeds for sprites 00-13. The first two bytes are used when the "move faster" bit at $0188F0 is clear for the sprite, while the second two are used when it's set.|
|$0188F0||20 bytes||Sprite Misc.||Various properties for sprites 00-13. Format: ak--jfls.
a = animate twice as fast in air
k = use 32x16 tilemap (also draws wings on sprites 08+)
-- = unknown/unused
j = jump over thrown shells
f = follow Mario
l = stay on ledges
s = move faster (use $0188EE for X speeds instead of $0188EC)
|$0189ED||1 byte||Sprite tilemap related||Tilemap of blue shell less koopa sliding out of shell|
|$018AED||1 byte||Sprite Misc.||Change from D0 to 80 to make bob-ombs not stun themselves then explode on their own, like SMB3 and other games.|
|$018AF5||1 byte||Timer||How quickly Bob-omb explodes|
|$018BCD||1 byte||Misc.||What animation frame most regular sprites use when turning around|
|$018C0D||1 byte||Sprite number||Sprite number to start adding wings to 2-tile high sprites|
|$018C31||1 byte||Sprite number||Sprite that Spiny Egg turns into after touching the ground|
|$018CD7||1 byte||Misc.||Time it takes for a Red Vertical Parakoopa to turn around after reaching it's maximum/mimimum Y speed. (08)|
|$018DA2||1 byte||Sprite physics||Winged Goomba jump height (between 80-FF).|
|$018DC7||16 bytes||Sprite tilemap related||Goomba Wing alignment, X position. First 8 bytes are for the alignment when the goomba's hopping left, the other 8 when he's hopping into the right direction.|
|$018DDF||2 bytes||Sprite tilemap related||Palette/GFX page/Priority/Flip of Goomba Wing Tiles|
|$018DE1||4 bytes||Sprite tilemap related||Sprite tilemap: Goomba Wings|
|$018DE5||4 bytes||Sprite tilemap related||Size of Goomba Wing tiles|
|$018E6E||4 bytes||Misc.||Speed of piranha plant (in pipe, going up, staying up, going down).|
|$018E93||1 byte||Sprite Misc.||YXPPCCCT properties of the stem of sprite 2A, the upside-down piranha plant. Change to $0A to make it use the first graphics page.|
|$018ECE||1 byte||Misc.||Replace D0 with 80 to make the classic and upsidedown piranha plants keep coming out of the pipe even if Mario is near or on top of the sprite.|
|$018F8D||1 byte||Sprite number||Object Hopping Flame leaves behind|
|$018FC7||8 bytes||Sprite tilemap related||Bullet Bill properties, YXPPCCCT.
- First byte: Right flying bullet bill
- Second byte: Left flying bullet bill
- Third byte: Vertically upwards flying bullet bill
- Fourth byte: Vertically downwards flying bullet bill
- Fifth byte: Diagonally flying bullet bill, lower left
- Sixth byte: Diagonally flying bullet bill, upper left
- Seventh byte: Diagonally flying bullet bill, upper right
- Eighth byte: Diagonally flying bullet bill, lower right
|$018FCF||8 bytes||Sprite tilemap related||Which GFX frame to use (00 = regular bill, 01 = vertical bill, 02 = diagonal bill) for the Bullet Bills. Same order as x91C7.|
|$018FD7||8 bytes||Sprite physics||X speed of Bullet Bills. Same order as $018FC7.|
|$018FDF||8 bytes||Sprite physics||Y speed of Bullet Bills. Same order as $018FC7.|
|$019032||87 bytes||Subroutine (JSR)||Default sprite physics routine. It handles speed in both directions, handles gravity, water movement and block interaction.
$019042 [$E8] is the terminal velocity
$019045 [$E8] is the speed which is stored when a sprite reaches the terminal velocity (ideally identical to the previous address).
If you want to access the routine outside of bank $01, call $01802A.
|$0190B2||8 bytes||Sprite subroutine (JSL)||SMW's third shared subroutine for drawing sprites. This one draws a single 16x16 tile.
It can be used by custom sprites, although you'll have to set the correct tile number in OAM afterwards (see the example code).
|$0190BA||122 bytes||Sprite physics||Positions of each of the 4 object collision points for each sprite hitbox, relative to the sprite's XY position ($E4/$14E0 and $D8/$14D4). Consists of two 61-byte tables for each of the X and Y positions:
|$019138||8 bytes||Sprite subroutine (JSL)||JSL for sprites interacting with objects. Actually calls routine at $019140.
During processing GPS blocks:
|$019211||115 bytes||Subroutine (JSR)||Sprite buoyancy routine. Called from the object interaction routine and handles collision points.
Change $01927F from $13 to $14 to fix an exploit that freezing (setting $9D or pausing the game) can be used to manipulate wall-embedded sprites (with an Xspeed of $00) to move in a desired direction (left and right), see here at 1:40 for an example.
|$0192C5||2 bytes||Misc.||[$01 $FF] Speed (right, left) given by conveyors (tiles 10C/10D) to sprites standing on them.|
|$0193EF||22 bytes||Sprite subroutine (JSR)||The code that makes sprites move if placed on conveyor belts.|
|$0195A5||1 byte||Sprite physics||Change this value to $00 to fix a small glitch with carryable sprites where throwing the sprite upwards at a hittable block will occasionally cause it to hit the block without actually activating it (due to registering both the bottom of the block and the side of another block at the same time).|
|$0195FC||32 bytes||Empty||Unused data.|
|$01961C||8 bytes||Sprite number||Sprites spawned by stomping Koopa Troopas (shelless Koopas)|
|$01962A||49 bytes||ASM||Code that handles the Bob-omb flashing and exploding. Change $019630 from 1D to 1C to disable the flashing entirely.|
|$019632||1 byte||Sound effect||Bob-omb's explosion SFX|
|$01963C||1 byte||Timer||Length of Bob-omb's explosion|
|$019654||1 byte||Sprite Misc.||Bob-omb Flashing Cycle
|$019688||1 byte||Misc.||Which shell colour makes a shelless Koopa become invincible (00=Green; 01=Red; 02=Blue; 03=Yellow)|
|$0196C6||1 byte||ASM||Change from 1A to 04 to prevent shelless Koopas from hopping out of stunned shells (Use with $01AA15)|
|$019768||1 byte||Sprite number|| Which of the four Koopas generates a coin when stomped. Valid values are 04 (green), 05 (red), 06 (blue), and 07 (yellow). All others will make the coin never appear.
Alternatively, you can change the next two bytes ([D0 0A]) to [EA EA] to make all (shelled) Koopas spawn coins.
|$01977C||1 byte||Sprite number||Sprite that's spawned when a Yellow Koopa is stomped (Coin)|
|$019807||1 byte||Misc.||Default animation frame to use for the shell|
|$01980E||1 byte||Misc.||Animation frame to use for the shell when Mario is turning around while holding it|
|$01983F||1 byte||Timer||Timing that enemies in a stunned state begin to shake|
|$019851||1 byte||Sprite tilemap related||Change to #$80 to prevent koopas eyes blinking while inside the shell.|
|$019881||1 byte||Sprite tilemap related||Koopa eye tiles when in shell (open)|
|$019889||1 byte||Sprite tilemap related||Koopa eye tiles when in shell (closed)|
|$0198A7||2 bytes||Sprite physics||[$E0 $20] X speed (left, right) to give Disco Shells when bumping into a wall.|
|$0198C7||1 byte||Sprite physics||($20) Maximum right speed of Disco Shells.|
|$0198D1||1 byte||Sprite physics||($E0) Maximum left speed of Disco Shells.|
|$019913||8 bytes||ASM||Start of sprite being kicked routine.|
|$019972||1 byte||Sprite physics||Y speed of kicked Koopa shells and throw blocks when they hit the ground.
Change from 10 to 0C to make shells always glide over one-tile-wide holes, or 14 to make them always fall in.
|$01999F||1 byte||Sound effect||Hitting block with shell sound|
|$019A22||4 bytes||Misc.||Animation frame assignments for the shell|
|$019A26||4 bytes||Misc.||Flip of each animation frame|
|$019A34||1 byte||Misc.||How many animation frames the spinning shell has, -1|
|$019A52||41 bytes||Sprite subroutine (JSR)||This is the routine that handles sprites in the "killed by a spin jump state" ($14C8,x = #$04). It handles drawing the smoke on screen, then it erases the sprite permanently when $1540,x is #$00.
$019A57: change to $60 to stop the smoke from appearing (doesn't stop the spin jump stars from appearing).
|$019A93||1 byte||Sprite physics||Change to 02 to fix a small glitch where sprites can slide through solid blocks while sinking in lava if they're moving to the left.|
|$019AA2||66 bytes||Sprite subroutine (JSR)||Routine for sprites in state 02 (killed and falling offscreen). It's also shared by the routine for sprites killed in lava.|
|$019AE4||47 bytes||Sprite Misc.||Routine that handles sprites in the "smushed state" ($14C8,x = #$03). It draws graphics (with special cases for Dino-Torch and Rex) and handles speed and movement. Once $1540,x reaches 0, the sprite is erased permanently.|
|$019B0B||1 byte||Sprite tilemap related||Tile used by squished Dino Torch|
|$019B13||112 bytes||Sprite Misc.||Routine called during two sprite death states ($14C8,x = #$02 or #$05). If the "Don't disable clipping when killed by star" tweaker bit is set (bit 0 in $167A,x) the sprite's main code is jumped to. Otherwise, it just draws the death frame.
This is what makes some sprites appear glitched when killed in unintended ways (for example, killing a grinder by sliding).
|$019B83||6 bytes||Sprite tilemap related||Standard Sprite Tile Table: Koopa tilemap|
|$019B89||3 bytes||Sprite tilemap related||Standard Sprite Tile Table: Koopa shell tilemap|
|$019B8C||7 bytes||Sprite tilemap related||Standard Sprite Tile Table: Shelless koopa tilemap (Fourth byte unused?)|
|$019B93||7 bytes||Sprite tilemap related||Standard Sprite Tile Table: Blue shelless koopa tilemap (Fourth byte unused?)|
|$019B9A||14 bytes||Sprite tilemap related||Standard Sprite Tile Table: Para-goomba tilemap|
|$019BA8||4 bytes||Sprite tilemap related||Standard Sprite Tile Table: Goomba tilemap|
|$019BAC||14 bytes||Sprite tilemap related||Standard Sprite Tile Table: Para-bomb tilemap|
|$019BBA||3 bytes||Sprite tilemap related||Standard Sprite Tile Table: Bob-omb tilemap|
|$019BBD||12 bytes||Sprite tilemap related||Standard Sprite Tile Table: Piranha plant tilemap|
|$019BC9||1 byte||Sprite tilemap related||Standard Sprite Tile Table: Football tilemap|
|$019BCA||4 bytes||Sprite tilemap related||Standard Sprite Tile Table: Bullet Bill tilemap (Horizontal, Vertical, Diagonal, Diagonal)|
|$019BCE||3 bytes||Sprite tilemap related||Standard Sprite Tile Table: Spiny tilemap|
|$019BD1||8 bytes||Sprite tilemap related||Standard Sprite Tile Table: Spiny egg tilemap|
|$019BDD||3 bytes||Sprite tilemap related||Standard Sprite Tile Table: Buzzy Beetle|
|$019BE3||3 bytes||Sprite tilemap related||Standard Sprite Tile Table: Buzzy Beetle Shell.|
|$019BE6||6 bytes||Sprite tilemap related||Spike Top tilemap|
|$019BEC||2 bytes||Sprite tilemap related||Hopping Flame tilemap|
|$019BEE||6 bytes||Sprite tilemap related||Lakitu tilemap (3 frames, 2 bytes each)|
|$019BF6||12 bytes||Sprite tilemap related||Magikoopa Tilemap|
|$019C02||1 byte||Sprite tilemap related||Throw block sprite tilemap and turn block sprite with hidden enemies inside. (Both use the same byte)|
|$019C03||10 bytes||Sprite tilemap related||Climbing Koopa Tilemap|
|$019C0D||4 bytes||Sprite tilemap related||Fish (Cheep Cheep) Tilemap (2 frames swimming, 2 frames flopping)|
|$019C13||4 bytes||Sprite tilemap related||Thwimp Tilemap|
|$019C17||1 byte||Sprite tilemap related||Yoshi Egg Tilemap (only manifests if the Yoshi egg is in the stunned status ($14C8 = #$09), i.e. found in a block or laid by Yoshi; otherwise, the tile loaded from this address is overwritten before drawing).
Change alongside $01F760 - $01F763 and $01F794 to completely remap the Yoshi egg tiles.
|$019C1D||12 bytes||Sprite tilemap related||Portable Springboard Tilemap|
|$019C2D||4 bytes||Sprite tilemap related||Bony Beetle tilemap|
|$019C35||16 bytes||Sprite tilemap related||Vertical Fireball (Podoboo) tilemap.|
|$019C5A||2 bytes||Sprite tilemap related||Eerie tilemap|
|$019C5C||9 bytes||Sprite tilemap related||Boo Ghost Tilemap|
|$019C65||4 bytes||Sprite tilemap related||Rip Van Fish Tilemap|
|$019C69||2 bytes||Sprite tilemap related||Vertical Dolphin Tilemap|
|$019C6B||2 bytes||Sprite tilemap related||Diggin' Chuck's Rock Tilemap|
|$019C6D||3 bytes||Sprite tilemap related||Monty Mole Tilemap|
|$019C70||1 byte||Sprite tilemap related||Ledge-dwelling Mole's Dirt Tilemap (data shared with Goal Point Sphere's Tilemap)|
|$019C71||8 bytes||Sprite tilemap related||Ground-dwelling Monty Mole's Dirt (2 Air tiles, 2 Dirt Tiles, 2 Air tiles, 2 Dirt Tiles)|
|$019C79||4 bytes||Sprite tilemap related||Sumo Bros' Lightning Tilemap|
|$019C7D||2 bytes||Sprite tilemap related||Ninji Tilemap|
|$019C7F||84 bytes||Sprite tilemap related||Table containing a sprite's location in the Standard Sprite Tile Table.|
|$019CD3||4 bytes||Sprite tilemap related||X displacement for tiles in the first shared GFX routine ($019CF3).|
|$019CF3||108 bytes||Sprite subroutine (JSR)||The first of the shared graphics subroutines. This one creates 4 8x8 tiles in a 16x16 block.|
|$019D5F||177 bytes||Sprite subroutine (JSL)||The second of the shared graphics subroutines. This one creates 2 16x16 tiles in a 16x32 block, with the second one tile below the base position. It can also be called with a JSR to $019D67.|
|$019DB6||1 byte||Sprite tilemap related||Palette/GFX page of standard sprites (shared)|
|$019E1C||4 bytes||Sprite tilemap related||Sprite tilemap: Paratroopa Wings|
|$019E20||4 bytes||Sprite tilemap related||Palette/GFX page/Priority/Flip of Paratroopa Wing tiles|
|$019E24||4 bytes||Sprite tilemap related||Size of Paratroopa Wing tiles|
|$019E95||116 bytes||Sprite subroutine (JSR)||Subroutine that draws wings for 16x16 sprites.
It uses $1570,x to decide if to draw open or closed wings (increasing it once per frame will result in the normal wings animation speed).
If used in a custom sprite, the data bank needs to be set to $01 (see example code).
|$019F0D||78 bytes||Sprite subroutine (JSR)||The third of the shared graphics subroutines. This one creates a single 16x16 tile.|
|$019F3C||1 byte||Sprite tilemap related||Palette/GFX page of standard sprites (shared)|
|$019F5B||6 bytes||Coordinate||x-pos table of sprite being carried:
walking, turn from left to right, turn from right to left (two bytes each, indexed by Mario's direction)
|$019F6B||4 bytes||Sprite physics||X-speed of the touched/kicked shell.
Value 1: left-speed, when touched (not kicking)
Value 2: right-speed, when touched
Value 3: left-speed, when kicked
Value 4: right-speed, when kicked.
This will also affect the shell of buzzy beetle! Setting the speed to 00 or FF will make the shells not spinning, giving unlimited score.
D2 2E CC 34
|$019F9B||46 bytes||Subroutine (JSR)||First half of the routine that handles sprites being carried, though it's actually only the part that handles the P-balloon.
Any other sprite will branch to $019FE0
$019FA7 change to EA EA EA EA EA to the P-Balloon last forever.
$019FB0 is the time at which the deflatting animation starts. (default 30)
$019FC2 change 90 to 80 to make Mario keep the balloon effect even after taking hits or power-ups. (causes weird behaviour when dying)
|$019FA7||5 bytes||ASM||Change to [EA EA EA EA EA] to give the P-Balloon an infinite timer|
|$01A0A7||1 byte||Sprite physics||Number of frames to disable player contact with any carryable sprite after kicking it.|
|$01A0AC||1 byte||Timer||Time to show Mario's "kicking" pose when a Bob-omb is kicked|
|$01A119||1 byte||Coordinate||carried sprite Y-pos while picking up|
|$01A1E1||4 bytes||ASM||Changing [1A 1A 29 0F] to [EA EA EA EA] will disable the throw block sprites flashing.|
|$01A1F0||1 byte||Sprite tilemap related||Tile used by stunned Bob-omb|
|$01A1FA||1 byte||Sprite tilemap related||Key tilemap|
|$01A221||1 byte||Sprite tilemap related||POW (P-Switch) Tilemap|
|$01A26A||1 byte||Sprite physics||[$F0] Baby Yoshi's idle hopping speed. Change to $00 to make him not hop when on the ground.|
|$01A291||1 byte||Sound effect||Sound baby Yoshi makes when eating|
|$01A295||2 bytes||Sprite Misc.||Change to [$80,$1E] to make Baby Yoshi instantly grow when eating something, regardless if it's a powerup or not.
Change to [$80,$5D] to make Baby Yoshi never grow instantly when eating something, even if it's a powerup. It will count as one sprite eaten instead.
If changing this, you also need to apply the hex edit at $03C03C for it to work properly.
|$01A2BC||1 byte||Sprite number||Sprite that Baby Yoshi turns into|
|$01A2C6||1 byte||Sound effect||Yoshi's egg explodes sound|
|$01A2FB||1 byte||Misc.||Number of enemies Baby Yoshi must eat to grow|
|$01A300||2 bytes||Sprite Misc.||Change to $80,$02 to disable getting a coin when Baby Yoshi eats something.|
|$01A3DF||44 bytes||Sprite subroutine (JSR)||Routine called by the shared sprite GFX routines at $019D5F and $0190B2 to hide tiles that would be drawn offscreen vertically. It works for both 1 and 2 tile high sprites by using the first two bits in $186C to determine which tile(s) should be hidden.|
|$01A61E||7 bytes||Sound effect||Sound effects to use for consecutive bounces on enemies. Begins with  (1st bounce) and ends with  (7th bounce).|
|$01A65B||1 byte||Sound effect||Koopa hit by shell sound|
|$01A6D7||2 bytes||Sprite Misc.||The x-speed given to a shell kicked by the blue shelless koopa.||Speeds|
|$01A716||1 byte||ASM||Set to 60 to stop Blue Koopas from kicking shells|
|$01A729||1 byte||Sound effect||Kicking shell sound|
|$01A737||1 byte||Sprite Misc.||[0F] Change to [0D] to fix a bug where shell-less Koopas can hop inside a Bob-omb if its stun timer is 0 (by being carried through a pipe).|
|$01A78D||1 byte||ASM||Set to 80 to stop Blue Koopas from stopping shells|
|$01A7D1||1 byte||Sprite number||Enemy spawned from stomping horizontal green winged koopas|
|$01A7D2||1 byte||Sprite number||Enemy spawned from stomping bouncing green winged koopas|
|$01A7D3||1 byte||Sprite number||Enemy spawned from stomping vertical red winged koopas|
|$01A7D4||1 byte||Sprite number||Enemy spawned from stomping horizontal red winged koopas|
|$01A7D5||1 byte||Sprite number||Enemy spawned from stomping yellow winged koopas|
|$01A7D9||1 byte||Sprite number||Enemy spawned from stomping winged goombas|
|$01A7DA||1 byte||Sprite number||Sprite spawned from Para-Goomba|
|$01A7DB||1 byte||Sprite number||Sprite spawned from Para-Bomb|
|$01A7DC||93 bytes||Sprite subroutine (JSL)||Subroutine that handles interaction between Mario and the sprite slot currently in X.
If the "Don't use default interaction with player" tweaker bit in $167A,x is not set, the routine checks for contact between Mario and the sprite and handles the default interaction by jumping to the routine at $01A83B. Otherwise, it just checks for contact and returns with carry set if there's contact, and clear if there's not contact (note that when the sprite uses default interaction, the return carry isn't meaningful).
Note that the routine will return "No contact" and skip interaction every other frame if the "Process interaction with player every frame" tweaker bit in $167A,x is not set, or if the sprite is horizontally offscreen during a frame in which it should be interacted with.
|$01A7F0||3 bytes||Sprite Misc.||Change from [1D A0 15] to [EA EA EA] to fix a glitch where sprites lose their interaction with the player while touching the edge of the screen. An example of this happens when a Banzai Bill's leftmost pixel goes past the left edge of the screen.|
|$01A83B||779 bytes||Sprite subroutine (JSR)||Default sprite interaction routine. The sprite interaction routine calls it if $167A,x is positive/ bit 7 is not set.
- $01A852 controls number where the star chain should stop. To be used with $01A856
- $01A856 controls, how many points/ one-ups are added if the max limit of a star chain is reached. To be used with $01A852
$01A8D0 handles the code when you jump on a spiky enemy.
Change $01A8D3 to $AD (LDA $xxxx) to disable spin jumping on spiky enemies. On contrary, change $01A8D3 to $80,$01 (BRA $01) to disable jumping with Yoshi on spiky enemies. To disable both, change $01A8D0 to $80,$04 (BRA $04).
$01A91C handles the code when you jump on a non-spiky enemy.
Change $01A91F to $AD (LDA $xxxx) to make spin jumps count as normal jumps. On contrary, change $01A91F to $80,$01 (BRA $01) to make jumps with Yoshi on enemies count as regular jumps. To make both count as regular jumps, change $01A91C to $80,$04 (BRA $04).
Change $01A930 to $00 to enable the boost gain with spin jump kill.
$01A940 is the sound effect to play when you kill an enemy with a spin jump/ jump with Yoshi.
$01AA42 is the routine for carryable sprites.
Change $01AA61 to $AD (LDA $xxxx) to enable carrying more than one sprite at time even though you already have one.
|$01A887||1 byte||Sprite physics||Number of frames to disable player contact for most sprites after being touched by Mario. Used to prevent issues like Mario getting hurt by a sprite he just bounced off of.|
|$01A8D3||1 byte||Misc.||Change from 0D to AD to prevent Mario from being able to jump on spikey enemies with the spin jump|
|$01A940||1 byte||Sound effect||Sound effect used when spinjumping an enemy or when Yoshi stomps on it.|
|$01A976||1 byte||Sprite number||Sprite that Super Koopa (sprite 73) becomes when stomped|
|$01A987||1 byte||Sprite number||Enemy spawned from stomping Dino-Rhino|
|$01A9D9||1 byte||Timer||Timer for displaying smashed shelless Koopas|
|$01AA0E||1 byte||Misc.||Change to 03 to prevent Bob-omb, Goomba, Mechakoopa's stun timers from being reset when kicked|
|$01AA15||1 byte||ASM||Change from 02 to FF to prevent Koopas from spawning shelless Koopas when jumped on. (Use with $0196C6)|
|$01AA29||1 byte||Timer||Stun timer for Goombas, Buzzy Beetles, Mechakoopas, Bob-ombs|
|$01AA2E||1 byte||Misc.||State of Koopa when stomped|
|$01AA33||15 bytes||Subroutine (JSL)||Boost player subroutine. Boosts the player up a bit or a lot depending on whether A/B are being pressed.|
|$01AA38||1 byte||Sprite physics||How high Mario bounces when he jumps on an enemy (normal jump & spin jump)|
|$01AA3E||1 byte||Sprite physics||How high Mario bounces when he jumps on an enemy with button A pressed (normal jump & spin jump)|
|$01AA5C||1 byte||ASM||Change from BEQ [F0] to BRA  and Mario will not be able to carry items by holding X or Y.|
|$01AAA0||1 byte||Misc.||State of Koopa shell when kicked|
|$01AAA5||1 byte||Timer||Number of frames to disable player contact with any carryable sprite after touching it without holding dash (not to be confused with $01A0A7). Default is $10.|
|$01AB05||2 bytes||Music||Change to [80 00] to not have star music override P-Switch music. Instead which ever is pressed/collected recently will have priority.|
|$01AB08||1 byte||Music||Music played when a POW is pressed|
|$01AB0D||1 byte||Timer||Time it takes for POW to disappear after jumping on it. Change to 00 to keep the POW after jumping on it.|
|$01AB1B||1 byte||Timer||How long blue and silver P-Switches last (default is $B0), in units of every 4th frame. Therefore PSwitchTimerLength = Seconds * 15|
|$01AB20||1 byte||Timer||POW shaking screen timer.|
|$01AB28||4 bytes||Misc.||Change to EA EA EA EA to prevent on screen sprites from turning into silver coins when the silver POW is active (USE WITH $02A9A1)|
|$01AB31||21 bytes||Sprite physics||Code that pushes the player out of solid carryable sprites, such as keys and springboards. Increments/decrements $94 (player x position).|
|$01AB55||1 byte||Sound effect||Change to  to give enemies (inc. goomba) the SMAS stomp sound.|
|$01AB63||1 byte||Misc.||Value that determines what to give the player for bouncing on 8 or more enemies consecutively. Change to  to give the player 8000 points instead of a 1up for the consecutive jumps.
(See ROM Map address $02ACE5 for other values)
|$01AB6F||42 bytes||Sprite subroutine (JSL)||Routine that displays the white star effect at a sprite's position and plays the "kicked" sfx (used, for example, when kicking a Shell or killing an enemy with a Shell).
JSL to $01AB72 to show the star but not play the sound effect.
|$01AB99||51 bytes||Sprite subroutine (JSL)||Routine that displays the contact graphics at Mario's position, usually called by sprites when Mario jumps on them.|
|$01ABCC||65 bytes||Sprite subroutine (JSR)||Routine that updates the sprite's X and Y position ($E4/$14E0/$14F8 and $D8/$14D4/$14EC) by its speed ($7E00AA and $7E00B6), this alone is without gravity and block interaction. The rate of movement is “subpixels” (1/16th of a pixel) per frame, similarly to Mario's speed handler at $00DC4F.
Best call these JSL subroutines instead, since this use JSR-RTS:
$01801A: Y speed, no gravity and no object interaction
$018022: X speed, no gravity and no object interaction
$01802A: X and Y speed, with gravity and with object interaction
$01ABCC-$01ABD7: Calls $01ABD8 with the current sprite X index +12 (number of existing sprite slots) to use the X position instead of Y.
$01ABD8: The position updater itself. Input:
This also outputs the amount of pixels moved in $7E1491, which is used for making the player move with the sprites (such as platforms)
|$01AC8A||1 byte||Sprite Misc.||How long until Magikoopa respawns after being killed. Normally $FF.|
|$01ACF9||55 bytes||Subroutine (JSL)||Random number generation subroutine. Access using JSL $01ACF9.
16bit result at $148D.
|$01AE88||8 bytes||Sprite Misc.||Sprites for the flying ? blocks to spawn, as indexes to the table starting at $0288A3. First four are used if Mario has a powerup, second four if he doesn't.|
|$01AEC7||1 byte||ASM||Change from $26 to $31 to prevent Thwomps from dropping while vertically off screen.|
|$01AEE1||1 byte||Misc.||What face to use for Thwomp if Mario comes close (00 - Calm, 01 - Grumpy, 02 - Raging)|
|$01AEEF||1 byte||Misc.||What face to use for Thwomp Crashing down (00 - Calm, 01 - Grumpy, 02 - Raging)|
|$01AF13||1 byte||Timer||Thwomp shaking screen timer.|
|$01AF18||1 byte||Sound effect||Thwomp Sound Effect.|
|$01AF1D||1 byte||Timer||Thwomp Stalling Timer.|
|$01AF39||1 byte||Sprite physics||Thwomp returning Y speed (between 80-90, C0, E0-FF) other values can give odd effects, so do not use any other bytes.|
|$01AF4A||5 bytes||Sprite tilemap related||Thwomp Tilemap|
|$01AF4F||5 bytes||Sprite tilemap related||YXPPCCCT - Thwomp Properties
Byte 01 - Top left
Byte 02 - Bottom left
Byte 03 - Top right
Byte 04 - Bottom Right
Byte 05 - Angry Thwomp Face
|$01AF8D||1 byte||Sprite tilemap related||Angry Thwomp Face|
|$01AFEA||1 byte||Sprite physics||Thwimp jumping height (between 80-FF)|
|$01AFF3||1 byte||Sprite physics||Thwimp jumping Right speed.|
|$01AFF7||1 byte||Sprite physics||Thwimp jumping Left Speed.|
|$01AFFD||1 byte||Sound effect||Thwimp Sound Effect.|
|$01B002||1 byte||Timer||Thwimp stalling timer|
|$01B0A1||1 byte||Misc.||Value to add for flopping Cheep-Cheep animations|
|$01B0C4||1 byte||Sprite physics||How far cheep-cheeps will move (the greater the value, the longer the distance.)|
|$01B10F||1 byte||Misc.||Change to 00 to switch the GFX pages used by the swimming and flopping Cheep-Cheeps|
|$01B119||3 bytes||Sprite tilemap related||Replace 9D F6 15 with EA EA EA to make the fish (Cheep Cheep) tilemap use a single GFX page|
|$01B12A||36 bytes||Sprite subroutine (JSR)||This subroutine is what is used to kill stunned koopas and out of water fish. The following offsets may be of use:
$01B12B - How long to show the player kicked a sprite pose.
$01B130 - The sound effect to play (default #$03)
$01B132 - The sound effect channel (default $1DF9)
$01B13D - Y speed of the dying sprite (default #$E0)
$01B145 - Forces the player to face the killed sprite, change to NOP #2 (EA EA) to disable
|$01B14E||44 bytes||Sprite subroutine (JSR)||Sprite based sparkle routine. Used by Magikoopa's magic and the goal sphere. The goal sphere calls $01:B152.|
|$01B212||4 bytes||Sprite physics||Table of X speeds for the floating spike ball (sprite A4). In order: Slow right, slow left, fast right, fast left.|
|$01B22E||5 bytes||Sprite Misc.||The code that checks the sprite buoyancy to determine whether sprites 5C and 5E should float on water or be suspended in the air. You can change this to 80 03 xx xx xx (xx can by any byte) to make them always stay in air or to 80 06 xx xx xx to make them always float.|
|$01B2C3||14 bytes||Sprite tilemap related||For sprites 55-58 and 5B-5E, partly determines which tilemap to use. 00 -> wooden or checkerboard platform, 01 -> flying rock or grassy platform. The table offset is the sprite number minus 55, and the fifth and sixth bytes and the last four bytes are not used.|
|$01B32B||1 byte||Sprite tilemap related||Change to 80 to let sprite 63 use the wooden platform tilemap only.
However, the size will be still different, depending on the x-pos.
|$01B32E||1 byte||Sprite tilemap related||Left Tile of Checkerboard Platform (sprites 55, 57, 5C and 63)|
|$01B333||1 byte||Sprite tilemap related||Center Tile of Checkerboard Platform (sprites 55, 57, 5C and 63)|
|$01B33E||1 byte||Sprite tilemap related||Right Tile of Checkerboard Platform (sprites 55, 57, 5C and 63)|
|$01B345||1 byte||Sprite tilemap related||Tilemap: Left edge of line guided wooden platform (Sprite 62)|
|$01B34A||1 byte||Sprite tilemap related||Tilemap: Center of line guided wooden platform (Sprite 62)|
|$01B355||1 byte||Sprite tilemap related||Tilemap: Right edge of line guided wooden platform (Sprite 62)|
|$01B372||1 byte||Sprite tilemap related||Tilemap: Right edge of line guided wooden platform (Sprite 62)|
|$01B383||9 bytes||Sprite tilemap related||Grassy Orange Platform Tilemap (sprites 5D and 5E)|
|$01B38C||9 bytes||Sprite tilemap related||Flying Rock Platform Tilemap (Sprites 56 and 58)|
|$01B42F||1 byte||Sprite tilemap related||Edge of Flying Rock Platform (mirrored)|
|$01B434||1 byte||Sprite tilemap related||Bottom edge of Rock Platform (mirrored)|
|$01B43B||1 byte||Sprite tilemap related||Edge of Grassy Orange Platform (mirrored)|
|$01B440||1 byte||Sprite tilemap related||Bottom edge of Grassy Orange Platform (mirrored)|
|$01B44F||231 bytes||Sprite subroutine (JSL)||Invisible solid block subroutine. JSL to it in a sprite to make it solid (or act as a platform depending on bit 0 of $190F).
- $1528,x: number of pixels Mario has moved horizontally in the current frame, used to move Mario with the sprite when he's standing on top of it. Note: not cleared post-routine.
- Carry: set if Mario is on top of the sprite, clear if not.
- $C2,x: if the sprite is set to be solid from all sides, it's set to #$01 if it was #$00 before. It can be used as a flag for the sprite being hit from below by Mario.
- $1558,x: if the sprite is set to be solid from all sides, it's set to #$10 if $C2,x was #$00 before. It can be used as a timer for a bouncing animation when the sprite is hit from below.
- $1564,x: if the sprite is set to be solid from all sides, it's set to #$0F when hit from below (only for sprites >= $83). This is used to disable interaction with sprites for a short amount of time.
- $1471: set to #$01 if Mario is standing on top of the sprite.
- $01B477: [$10] Y speed given to Mario when sitting on top of a solid block/platform.
- $01B4C0: Change to [$A0 $00] to make Super/Fire/Cape Mario have a 16x16 interaction field (like Small Mario) or change to [$A0 $01] to have a 16x32 interaction field (like Big Mario) (in conjunction with addresses $00EB79 and $03B67C).
- $01B4D9: [$10] Y speed given to Mario when hitting a solid sprite from below.
- $01B4F3: [$01] SFX that comes up when Mario hits a solid sprite from below.
- $01B4F5: [$1DF9] Bank used for the SFX when Mario hits a solid sprite from below.
|$01B555||1 byte||Sprite physics||Speed of the horizontal platform that goes on forever (sprite 5E).|
|$01B65A||4 bytes||Sprite tilemap related||X displacement for each tile of the floating spike ball (sprite A4). In order: Top left, top right, bottom left, bottom right.|
|$01B65E||4 bytes||Sprite tilemap related||Y displacement for each tile of the floating spike ball (sprite A4). In order: Top left, top right, bottom left, bottom right.|
|$01B662||4 bytes||Sprite tilemap related||Tile properties for each tile of the floating spike ball (sprite A4). In order: Top left, top right, bottom left, bottom right.|
|$01B666||57 bytes||Sprite subroutine (JSR)||The GFX routine for the floating spike ball (sprite A4). $01B686 controls the first tile number used, and the second is always one 16x16 tile to the right of that.|
|$01B69F||2 bytes||Misc.||Length of Turn Block Bridge (sprites 59 and 5A)|
|$01B6A1||2 bytes||Sprite physics||X speed of Turn Block Bridge (sprites 59 and 5A)|
|$01B6A3||2 bytes||Misc.||Time of Turn Block Bridge (sprites 59 and 5A)|
|$01B77E||1 byte||Sprite tilemap related||Tile used by Turn Block Bridge (sprites 59 and 5A)|
|$01B790||14 bytes||Sprite tilemap related||Change to [09 xx 99 07 03 99 0B 03 99 0F 03 99 13 03] to change the palette used by the turn block bridge. ("xx" is the new palette value; 00 is the original.) This also prevents the last tile from being X-flipped.|
|$01B7B3||8 bytes||Sprite subroutine (JSL)||Finish OAM write caller subroutine (JSRs to the main one and ends in RTL).
Value in A: Amount of OAM slots to write minus 1 (i.e. to write 4 tiles, A must be #$03)
Value in Y: Size of the OAM tiles. #$00 = 8x8, #$02 = 16x16, any negative value (e.g. #$FF) = is manually set with $0460.
Note: This routine is only used if you finished to write with a regular sprite. Do not use it outside of regular sprites!
|$01B7BB||136 bytes||Sprite subroutine (JSR)||Finish OAM write routine. JSL to $01B7B3 to access it from all banks other then bank $01.|
|$01B93C||2 bytes||Sprite physics||Green horizontal net Koopa's speed (right, left). Red horizontal net Koopas move twice this speed.|
|$01B94D||1 byte||Sprite physics||Green vertical net Koopa's initial speed. Red vertical net Koopas move twice this speed.|
|$01BA20||1 byte||Sprite physics||Lowest Map16 tile that a vertical net Koopa can climb on. Change from 07 to 06 to allow vertical net Koopas to climb on vine tiles.|
|$01BA24||1 byte||Sprite physics||Highest Map16 tile that a vertical net Koopa can climb on, plus one.|
|$01BA2B||1 byte||Sprite physics||Lowest Map16 tile that a horizontal net Koopa can climb on. Change from 07 to 06 to allow horizontal net Koopas to climb on vine tiles.|
|$01BA2F||1 byte||Sprite physics||Highest Map16 tile that a horizontal net Koopa can climb on, plus one.|
|$01BAB7||21 bytes||Sprite tilemap related||Gate Sprite Tilemap|
|$01BBD3||1 byte||Sprite tilemap related||Gate Sprite palette|
|$01BC34||4 bytes||Sprite tilemap related||The OAM Properties of the Magikoopa's magic.|
|$01BC67||8 bytes||Misc.||Change to EA EA EA EA EA EA EA EA and every Map16 block will change into sprites when touched by Magikoopa's Magic. (Not just turn blocks)|
|$01BC7D||1 byte||Sprite number||What Magikoopa's magic transforms turn block into (1up)|
|$01BC83||1 byte||Sprite number||What Magikoopa's magic transforms turn block into (Coin)|
|$01BC89||1 byte||Sprite number||What Magikoopa's magic transforms turn block into (Thwimp)|
|$01BC8F||1 byte||Sprite number||What Magikoopa's magic transforms turn block into (Yellow Koopa)|
|$01BCE0||16 bytes||Sprite Misc.||Magikoopa's Magic Sine Rotation Table.|
|$01BD83||1 byte||Sprite tilemap related||Magikoopa's Magic Tilemap (Circle)|
|$01BD88||1 byte||Sprite tilemap related||Magikoopa's Magic Tilemap (Square)|
|$01BD8D||1 byte||Sprite tilemap related||Magikoopa's Magic Tilemap (Triangle)|
|$01BF05||1 byte||Sprite tilemap related||Tile used by Magikoopa's Wand|
|$01BF29||1 byte||Sound effect||SFX played by Magikoopa|
|$01BF33||1 byte||Sprite number||The sprite that Magikoopa throws|
|$01BF6A||121 bytes||Sprite subroutine (JSR)||The aiming routine used by Magikoopas to aim their magic at (the upper tile of) the player. Input is the total speed (X + Y); output is Y speed in $00 and X speed in $01.|
|$01C0BD||1 byte||Misc.|| Change to A5 to stop the goal point bar from moving.|
|$01C0F0||1 byte||Music||Goal tape end level music|
|$01C10A||1 byte||Sound effect||Goal tape breaking sound effect.|
|$01C11B||1 byte||Timer||How long the bonus star number stays on screen|
|$01C158||1 byte||Sprite tilemap related||Goal Bar Tilemap|
|$01C164||1 byte||Sprite tilemap related||Palette/priority/flip of Goal tape tiles|
|$01C17A||4 bytes||Misc.||Change 22 CA F1 07 to EA EA EA EA to disable the digits made up of star tiles at the goal tape (which resemble the amount of bonus stars gathered)|
|$01C19E||1 byte||Sprite tilemap related||Tile for Growing Vine's Piranha head(1)|
|$01C1A2||1 byte||Sprite tilemap related||Tile for Growing Vine's Piranha head(2)|
|$01C1AE||1 byte||Misc.||Y speed of Growing Vine's growth|
|$01C1E6||1 byte||Misc.||Tiles created from growing vine sprite|
|$01C299||1 byte||Sprite Misc.|| Number of coins awarded when the player collects a Flying Red Coin (Sprite #$7E).|
|$01C313||4 bytes||Sprite number||Sprites used by the changing item (Mushroom, Flower, Feather, Star)|
|$01C33D||1 byte||Sprite number||Sprite that the Changing Item is made from|
|$01C345||4 bytes||Sprite tilemap related||Eaten berry palettes (unused, red, pink, green)|
|$01C34C||1 byte||Misc.||Change to 00 and the Fire Flower won't flip back and forth|
|$01C35F||1 byte||Sprite tilemap related||Eaten berry tile|
|$01C381||1 byte||Sprite physics||[$10] Y speed at which the powerups dropped from the item box fall. Does not include the feather, who's speed is handled at $01C730.|
|$01C42C||3 bytes||ASM||Set to EA EA EA to disable moving coin and star movement|
|$01C47B||1 byte||Sprite physics||Star bounce height (between 80-FF)|
|$01C510||20 bytes||Misc.||Table of items to put in the item box when a powerup is touched. Indexed by Mario's status ($19), plus 4 times the type of powerup touched. Powerups are ordered as follows:
$01C510 to $01C513 - Mushroom
$01C514 to $01C517 - Flower
$01C518 to $01C51B - Star
$01C51C to $01C51F - Cape
$01C520 to $01C523 - 1-up
For a list of possible values, see $0DC2.
Note: A value of 0x00 (empty) means that the item in the item box doesn't change.
|$01C524||20 bytes||Misc.||Action to take when Mario touches a powerup. Indexed by Mario's status ($19), plus 4 times the type of powerup touched. Powerups are ordered as follows:
$01C524 to $01C527 - Mushroom
$01C528 to $01C52B - Flower
$01C52C to $01C52F - Star
$01C530 to $01C533 - Cape
$01C534 to $01C537 - 1up
Possible values are:
00: Give a mushroom
01: Do nothing
02: Give a star
03: Give a cape
04: Give a flower
05: Give a 1up
|$01C538||28 bytes||Sprite Misc.||Handles what happens when the player touches a powerup. This routine will manage the item box as well. $01C549 [0B] is the sound effect to play when touching a powerup.
Set $01C543 to $80 to prevent the items from being put in the item box (though it still can be filled by other means).
|$01C554||12 bytes||Pointer||powerup routines (indexed by values from $01C524 - $01C537)|
|$01C561||14 bytes||Subroutine (JSR)||Routine for when Mario touches a Mushroom. It sets the animation value and timer, then jumps to $01C56F.
$01C566: [$2F] replace with [$00] to completely skip the Mushroom powerup animation.
|$01C566||1 byte||Timer||Length of Mario's growing animation. Setting it higher than 2F may cause it to use different Mario tiles.|
|$01C568||1 byte||Mario tilemap||Changing this to 99 will make Mario face the camera if he grows from a mushroom.|
|$01C570||1 byte||Misc.||How many points you get by getting a powerup.
00 = 200
01 = 400
02 = 800
03 = 1000
04 = 2000
05 = 4000
06 = 8000
07 and above = 1-up
FB = nothing
|$01C57B||1 byte||Sound effect||Mario picking up a Mushroom or Flower Sound Effect.|
|$01C580||18 bytes||Subroutine (JSL)||Star Subroutine. JSL to it to give Mario star power. $01C581 controls how long stars last, $01C586 controls the music that is played during star power.|
|$01C599||1 byte||Misc.||What powerup feathers give you|
|$01C59D||1 byte||Sound effect||Sound Effect will make if you grabbed the feather. Change to 0C to make the sound effect like in SMB3.|
|$01C5EC||18 bytes||Subroutine (JSR)||Routine for when Mario touches a Fire Flower. It sets the animation value and timer, then jumps to $01C56F.
$01C5EC: [$A9 $20] Replace with [$80 $09] to completely skip the Fire Flower powerup animation.
|$01C5F8||1 byte||Misc.||What powerup flowers give you|
|$01C609||5 bytes||Sprite tilemap related||Tilemap: Power-ups (Mushroom, Flower, Star, Feather, 1Up)|
|$01C612||1 byte||Sprite tilemap related||Tile used by the P-Balloon|
|$01C613||1 byte||Sprite tilemap related||Tile used by Flying Red Coin|
|$01C614||1 byte||Sprite tilemap related||Tile used by Flying Yellow 1Up Mushroom|
|$01C615||1 byte||Sprite tilemap related||Tile used by Flying Key?|
|$01C616||4 bytes||Palette||The palettes the star sprite flashes through. 00 is palette 8, 02 is palette 9, 04 palette A, etc. YXPPCCCT format.|
|$01C641||96 bytes||Sprite subroutine (JSL)||The GFX routine of the moving coin (sprite 21) and various other coin sprites, such as the directional coins.
- $01C641: 4 bytes, JSRs to the main routine and ends in RTL.
- $01C645: Start of the main GFX routine.
- $01C653: Tile used by the first frame. This is the 16x16 one.
- $01C667: Changing this to [80 07] will cause all 4 frames to use 2 tiles, and changing it to [D0 00] or [EA EA] will cause all 4 frames to use only 1 tile.
- $01C66A: Changing this to 00 will cause all 4 frames to be 8x8.
- $01C66D: Tiles used by the second, third, and fourth frames. These are all 8x8.
- $01C699: Changing this to 02 will cause all 4 frames to be 16x16.
|$01C6A1||69 bytes||Sprite subroutine (JSR)||Graphics routine for the powerups (mushroom, fire flower, cape feather, and star).
- $01C6A3: Changing this to  will disable the star flashing.
- $01C6C2: Changing this to  will fix the powerups being covered by the background in levels with transparent layer 3.
- $01C6C3: Changing this to  will disable the x-flipping of the feather and fire flower.
|$01C7EA||1 byte||Sprite tilemap related||Tilemap: Swinging Platform's Chain 1 (Sprite 5F)|
|$01C7EF||1 byte||Palette||Palette of chain link connected to platform|
|$01C871||1 byte||Sprite tilemap related||Tilemap: Swinging Platform's Chain 2 (Sprite 5F)|
|$01C8C7||1 byte||Sprite tilemap related||Tilemap: Swinging Platform's Chain 3 (Sprite 5F). Also used by Chains 4 and 5.|
|$01C8CC||1 byte||Palette||Palette of other chain links|
|$01C8FB||1 byte||Palette||Palette of wooden platform|
|$01C9BB||4 bytes||Sprite tilemap related||Tilemap: Brown Swinging Platform (Sprite 5F)|
|$01CACB||85 bytes||ASM||Sprite rotation preparation routine. First JSR to this, then to $01CB20 and finally to $01CB53.|
|$01CB20||51 bytes||ASM||Routine for preparing the game's global rotation routine. First you can JSR to either $01CACB
for sprite rotation or to $01CCC7 for Mode 7 rotation (this step seems to be optional). Next you JSR to this to prepare the rotation and finally you JSR to $01CB53.
|$01CB53||330 bytes||ASM||The game's global rotation routine. First you can JSR to either $01CACB
for sprite rotation or to $01CCC7 for Mode 7 rotation (this step seems to be optional). Next you JSR to $01CB20 to prepare the rotation and finally you JSR to this.
|$01CCC7||35 bytes||ASM||Mode 7 rotation preparation routine. First JSR to this, then to $01CB20 and finally to $01CB53.|
|$01CD1E||12 bytes||Empty||Unused ROM.|
|$01CD4F||1 byte||Coordinate||Y lo starting position of Morton/Ludwig/Roy at the boss battle.|
|$01CD7E||1 byte||Coordinate||X low position of Ludwig at the start of the boss battle.|
|$01CD82||1 byte||Coordinate||X high position of Ludwig at the start of the boss battle.|
|$01CE3E||2 bytes||ASM||Change [64 7B] to [EA EA] in order to prevent Mario from slowing down when Ludwig appears.|
|$01CEAE||2 bytes||Sprite physics||Ludwig's shell speed|
|$01CEB4||2 bytes||Sprite physics||Ludwig's horizontal jump distance|
|$01CECE||1 byte||Timer||Counts how long to delay before Ludwig jumps out of his shell.|
|$01CED8||1 byte||Sprite physics||Vertical height of Ludwig's jump (lower is shorter).|
|$01CF57||1 byte||Misc.||Ludwig jump right type modifier|
|$01CF58||1 byte||Misc.||Ludwig jump left type modifier|
|$01CFCD||1 byte||Misc.||Ludwig, Morton, and Roy's HP|
|$01CFD1||1 byte||Sound effect||Morton/Ludwig/Roy spiralling out sound effect.|
|$01D04F||1 byte||Music||Music played after Morton/Ludwig/Roy is defeated|
|$01D05A||1 byte||Sound effect||What sound is played by Ludwig's fireball.|
|$01D06F||1 byte||Sprite number||Sprite spawned by Ludwig von Koopa|
|$01D080||1 byte||Misc.||Height of fireball spawned by Ludwig.|
|$01D0B8||1 byte||Misc.||How long fireballs stay in Ludwig's mouth for.|
|$01D0BE||1 byte||Sprite physics||X Speed of Ludwig's Fireball (Right)|
|$01D0BF||1 byte||Sprite physics||Left speed of ludwig's fireballs (reversed)|
|$01D122||1 byte||Sprite physics||Morton and Roy's speed for first hit, left.|
|$01D124||1 byte||Sprite physics||Morton and Roy's speed for first hit, right.|
|$01D126||1 byte||Sprite physics||Morton and Roy's speed for second hit, left.|
|$01D128||1 byte||Sprite physics||Morton and Roy's speed for second hit, right.|
|$01D12A||1 byte||Sprite physics||Morton and Roy's speed for third hit, left.|
|$01D12C||1 byte||Sprite physics||Morton and Roy's speed for third hit, right.|
|$01D12F||1 byte||Sprite physics||Morton and Roy's vertical speed for first hit, up.|
|$01D131||1 byte||Sprite physics||Morton and Roy's vertical speed for first hit, down.|
|$01D133||1 byte||Sprite physics||Morton and Roy's vertical speed for second hit, up.|
|$01D135||1 byte||Sprite physics||Morton and Roy's vertical speed for second hit, down.|
|$01D137||1 byte||Sprite physics||Morton and Roy's vertical speed for third hit, up.|
|$01D139||1 byte||Sprite physics||Morton and Roy's vertical speed for third hit, down.|
|$01D239||2 bytes||Sprite physics||How fast Morton and Roy rotate when they're crawling on a wall or ceiling. By default FC and 04. The closer to 00, the slower it gets. Do not exceed above a difference of 80 (that is, don't make the first value 01-7F, and don't make the second value 81-FF). Using 00 isn't recommended either.|
|$01D26E||1 byte||Sprite physics||Falling speed of Morton and Roy|
|$01D28C||1 byte||Timer||How much the ground shakes after Morton/Roy hit the floor.|
|$01D295||1 byte||Timer||How long Mario is stunned for after Morton/Roy hits ground.|
|$01D29A||1 byte||Sound effect||Morton/Roy landing sound effect.|
|$01D29F||1 byte||Timer||How long Morton/Roy stays put after landing on floor.|
|$01D2D0||1 byte||Misc.||Timer determining how many frames to wait before being able to interact with Morton/Ludwig/Roy, after having interacted with it. (By default: 08)|
|$01D2FA||1 byte||Misc.||Y speed of Mario when he bounces off Morton/Roy (normal state) and Ludwig (always).|
|$01D2FE||1 byte||Sound effect||Which sound to generate when stomping Ludwig when he's inside his shell, and Morton/Roy/Ludwig when they're vulnerable (a second sound effect is generated too here, see $01D3AC).
By default #$02.
|$01D31F||1 byte||Sound effect||SFX Played when Mario hits Morton/Roy while on the ceiling, while falling, and after they have just landed.|
|$01D330||1 byte||Mario physics||Mario's Y-Speed after jumping on Morton/Roy when they have just landed. Closer to 80 - highest.|
|$01D335||1 byte||Sound effect||Sound effect played when Mario hits Morton/Roy when going up the wall.|
|$01D343||1 byte||Misc.||X speed of Mario when he bounces off Morton/Roy when they're crawling on the left side of the screen.|
|$01D349||1 byte||Misc.||X speed of Mario when he bounces off Morton/Roy when they're crawling on the right half of the screen.|
|$01D34D||1 byte||Misc.||Y speed of Mario when he bounces off Morton/Roy in their unusual state (as in, crawling on walls, falling from ceiling).|
|$01D37A||1 byte||Misc.||Horizontal scaling of Morton/Roy/Ludwig (Mode 7) just after they're hit. The higher the value, the thinner they are. Extreme values, such as 00 (biggest) or FF (smallest), are not recommended as they may or may not partially affect the gameplay. Keep the value near the original, if you change it.
By default: #$18.
|$01D383||1 byte||Misc.||Vertical scaling of Morton/Roy/Ludwig (Mode 7) just after they had been hit. The bigger the value, the shorter the Koopa Kids become.
Do not change the value to #$00 - #$1F or #$80 - #$FF as it will mess up. If changing value, keep it near the original since it might affect the Koopa Kid's height afterwards, if the value was too extreme.
By default: #$28.
|$01D3A2||1 byte||Timer||How long Morton/Roy/Ludwig recovers after Mario has hit him.|
|$01D3AC||1 byte||Sound effect||Which sound to generate when stomping Morton/Roy/Ludwig when they're vulnerable (a second sound effect is generated too, see $01D2FE).
By default #$28.
|$01D3F4||1 byte||Sound effect||Sound effect played when Morton, Ludwig and Roy takes damage from a fireball. Stored into $1DF9.|
|$01D3F8||6 bytes||Misc.||Counts fireball hits to Morton/Roy/Ludwig. Change to [80 06] to make Morton/Roy/Ludwig immune to fireballs.
Alternately, change to [FE 10 15 BD 10 15] to decouple their fireball HP from their stomp HP, so that they don't die after 2+ fireballs and a single jump.
|$01D3FF||1 byte||Misc.||How many fireballs it takes before Morton/Ludwig/Roy are killed.
Counts up to the stomping HP counter as well. By default: 0C.
|$01D446||4 bytes||Sprite tilemap related||Sprite tilemap: Ludwig Fireball|
|$01D6D2||6 bytes||Sprite Misc.||The code that determines whether sprite 63 should be brown or checkered. Change to "A9 xx EA EA EA EA" to make the platform always brown or always checkered (if brown, xx = 00, if checkered, xx = 01).
- $01D6D5: change to 00 to make sprite 63 use the small wooden platform no matter which x-position. (to use with $01D6D7)
- $01D6D7: change to 00 to make sprite 63 use the small wooden platform no matter which x-position. (to use with $01D6D5)
|$01D6ED||3 bytes||ASM||Change to EA EA EA to make all line-guided sprites move at the same speed instead of the chainsaws, Grinder, and Fuzzy going twice as fast.|
|$01D6F0||23 bytes||Sprite Misc.||Change to B5 E4 29 10 4A 4A 4A 4A 9D 7C 15 80 14 EA EA EA EA EA EA EA EA EA EA to fix certain line-guided sprites: instead of moving left on odd starting X positions and not showing up at all on even ones (actually, they are just shifted offscreen), they will instead move right on even starting X positions.
x$01D6FA - X position (low byte) of sprites 65, 66, 67 and 68. Change it to 0F to fix its x position when it goes to the right. (USE WITH $01D701)
$01D701 - X position (high byte) of sprites 65, 66, 67 and 68. Change it to 00 to fix its x position when it goes to the right. (USE WITH $01D6FA)