Banner
Views: 772,985,020
Time:
22 users online: AbuseFreakHacker, Aeon, dacin, Darkbloom,  Deeke, DrMechano,  Erik, Flippn'Fences,  Giftshaven, Green Jerry, h.carrell,  idol, jona255,  MarioFanGamer, Mariogamer435, niko, Pink Gold Peach, placeholdertest,  RussianMan,  Sayuri,  Shiny Ninetales, yoshi9429 - Guests: 40 - Bots: 162Users: 40,595 (1,829 active)
Latest: Deluxe Team
Tip: Create a fair "difficulty curve" - that is, start off easy and then get gradually more difficult as the hack progresses.Not logged in.
SMW Memory Map
Displaying 324 out of 824 addresses. Show Waiting Addresses (3)
Filter
Link
Address
Hexadecimal number for a partial address. 6-digit number for a full address. Use - to denote a range. Use , to list more than one address.
Length
Type
Enable JavaScript to use multiple regions.
Region
Hold control to select multiple. Check "All" to select all at once.

Type
Description
Separate each individual keyword with spaces. Surround a phrase with quotes to look for the exact phrase, or with / to use a PCRE regular expression. Prepend with - to exclude a keyword or phrase, with + to require a whole word or phrase, or with -+ to exclude a whole word or phrase. ? matches any character, * matches any amount of characters.
 
Pages: « 1 2 » Per Page: 25 50 75 100 150 500 All
RAM Address Length Type Description Details
$7E1697 1 byte Counter Consecutive enemies stomped.
$7E1698 1 byte Sprites Current index being processed for a variety of sprite types, specifically minor extended sprites, bounce sprites, quake sprites, and smoke sprites.
$7E1699 4 bytes Sprites Bounce sprite type number. A list of possible values can be found here.
$7E169D 4 bytes Sprites Bounce sprite initialization flag table. #$00 = bounce sprite in init routine; #$01 = bounce sprite in main routine. Used for several things, such as generating tile 152 (invisible solid) once only.
$7E16A1 4 bytes Sprites Bounce sprite Y position, low byte.
$7E16A5 4 bytes Sprites Bounce sprite X position, low byte.
$7E16A9 4 bytes Sprites Bounce sprite Y position, high byte.
$7E16AD 4 bytes Sprites Bounce sprite X position, high byte.
$7E16B1 4 bytes Sprites Bounce sprite Y speed.
$7E16B5 4 bytes Sprites Bounce sprite X speed.
$7E16B9 4 bytes Sprites Accumulating fraction bits for bounce sprite X speed.
$7E16BD 4 bytes Sprites Accumulating fraction bits for bounce sprite Y speed.
$7E16C1 4 bytes Sprites Bounce sprite turns into Map16 tile. This uses the same values as $7E:009C.
$7E16C5 4 bytes Sprites Bounce sprite timer - amount of frames until bounce sprite disappears. Turn blocks are set to spinning mode when this timer runs out.
$7E16C9 4 bytes Sprites Block bounce sprite table.
Format: L-----DD
L is which layer it is on. Clear means it's on layer 1, set means it's on layer 2 (or layer 3 if applicable).
DD is the direction it is moving in. 00 = up; 01 = right; 10 = left; 11 = down.
The -'s are unknown. They're likely unused, but that's not certain yet.
$7E16CD 4 bytes Sprites Quake/interaction sprite type. 0 = empty, 1 = hitting/breaking a block, 2 = Yoshi's stomp.
$7E16D1 4 bytes Sprites Quake/interaction sprite X position, low byte.
$7E16D5 4 bytes Sprites Quake/interaction sprite X position, high byte.
$7E16D9 4 bytes Sprites Quake/interaction sprite Y position, low byte.
$7E16DD 4 bytes Sprites Quake/interaction sprite Y position, high byte.
$7E16E1 6 bytes Sprites Score/1-Up sprite number. A list of possible values can be found here.
$7E16E7 6 bytes Sprites Score/1-up sprite Y position, low byte.
$7E16ED 6 bytes Sprites Score/1-up sprite X position, low byte.
$7E16F3 6 bytes Sprites Score/1-up sprite X position, high byte.
$7E16F9 6 bytes Sprites Score/1-up sprite Y position, high byte.
$7E16FF 6 bytes Sprites Score/1-up sprite Y movement - how long the score sprite should move upwards. It is not possible to go down, and the maximum amount of frames is #$30. Additionally, the sprite is twice as slow with #$10-#$1F as with #$20-#$2F, and four times as slow with #$00-#$0F. The sprite terminates itself when this hits zero.
$7E1705 6 bytes Sprites Layer the score/1-up sprite is on. Used to control its position.
$7E170B 10 bytes Sprites Extended sprite number. A list of possible values can be found here. Last two bytes reserved for fireballs. Valid Values
$7E1715 10 bytes Sprites Extended sprite Y position, low byte. Last two bytes reserved for fireballs.
$7E171F 10 bytes Sprites Extended sprite X position, low byte. Last two bytes reserved for fireballs.
$7E1729 10 bytes Sprites Extended sprite Y position, high byte. Last two bytes reserved for fireballs.
$7E1733 10 bytes Sprites Extended sprite X position, high byte. Last two bytes reserved for fireballs.
$7E173D 10 bytes Sprites Extended sprite Y speed. Last two bytes reserved for fireballs.
$7E1747 10 bytes Sprites Extended sprite X speed. Last two bytes reserved for fireballs.
$7E1751 10 bytes Sprites Accumulating fraction bits for extended sprite Y speed. The last two bytes are for the player's fireballs.
$7E175B 10 bytes Sprites Accumulating fraction bits for extended sprite X speed. The last two bytes are for the player's fireballs. The fireballs also use this table for a hit flag table.
$7E1765 10 bytes Sprites Extended sprite table. Most extended sprites increment this table and use it for their GFX table. (Use a different image every x frames.)
$7E176F 10 bytes Sprites Extended sprite table with multiple purposes. Fireballs use it as a frame counter table when they hit an object. Various other extended sprites, such as the trail of smoke, use it as a graphics pointer. Table decrements once per frame.
$7E1779 10 bytes Sprites Extended sprite goes behind layers flag. Last two bytes reserved for fireballs.
$7E1783 8 bytes Sprites Shooter number. #$00 = None, #$01 = Bullet Bill shooter, #$02 = Torpedo Launcher.
$7E178B 8 bytes Sprites Shooter Y position, low byte.
$7E1793 8 bytes Sprites Shooter Y position, high byte.
$7E179B 8 bytes Sprites Shooter X position, low byte.
$7E17A3 8 bytes Sprites Shooter X position, high byte.
$7E17AB 8 bytes Sprites Amount of time it takes for a shooter to shoot the next sprite. Decrements every 2 frames via $13.
$7E17B3 8 bytes Sprites Shooter's index to level table (see $7E:1938). Curiously, shooters are always reloaded, because there is no routine to erase them.
$7E17BB 1 byte Empty Contains the low byte of the level number when loading the levels, but never read by anything. It's cleared when the loading is done. Can be used as freeram.
$7E17BC 1 byte Misc. How much the Y position of Layer 1 changed in the current frame. Only used by the originally unused winged cage sprite.
$7E17BD 1 byte Misc. How much the X position of Layer 1 changed in the current frame. Used in various instances, for example to check how fast the spinning coins should move horizontally when a goal tape is touched when there are sprites on screen.
$7E17BE 1 byte Misc. How much the Y position of Layer 2 changed in the current frame. Used when the player should be still compared to a moving layer 2. For example, it's used by the Layer 2 horizontal scroll sprite, F4.
$7E17BF 1 byte Misc. How much the X position of Layer 2 changed in the current frame.
$7E17C0 4 bytes Sprites Smoke sprite number:

#$00 = Free slot.
#$01 = Puff of smoke.
#$02 = Contact graphic.
#$03 = Smoke when the player turns around abruptly.
#$04 = Unused/None.
#$05 = Glitter sprite.
$7E17C4 4 bytes Sprites Smoke sprite Y position, low byte.
$7E17C8 4 bytes Sprites Smoke sprite X position, low byte.
$7E17CC 4 bytes Sprites Smoke sprite timer - amount of frames until smoke sprite disappears.
$7E17D0 4 bytes Sprites Spinning coin from block. If zero, the slot is free, otherwise it's occupied by such a spinning coin.
$7E17D4 4 bytes Sprites Spinning coin from block Y position, low byte.
$7E17D8 4 bytes Sprites Spinning coin from block Y speed. $20-$9F will terminate the sprite and cause a score sprite to appear.
$7E17DC 4 bytes Sprites Accumulating fraction bits for fixed point spinning coin from block Y speed.
$7E17E0 4 bytes Sprites Spinning coin from block X position, low byte.
$7E17E4 4 bytes Sprites Spinning coin from block table. Indicates whether the spinning coin is generated from a block on Layer 1, or Layer 2/3. Depending on the layer, it updates its position based on the layer's movements.
$7E17E8 4 bytes Sprites Spinning coin from block Y position, high byte.
$7E17EC 4 bytes Sprites Spinning coin from block X position, high byte.
$7E17F0 12 bytes Sprites Minor extended sprite number. A list of possible values can be found here. Valid Values
$7E17FC 12 bytes Sprites Minor extended sprite Y position, low byte.
$7E1808 12 bytes Sprites Minor extended sprite X position, low byte.
$7E1814 12 bytes Sprites Minor extended sprite Y position, high byte.
$7E1820 12 bytes Sprites Minor extended sprite Y speed.
$7E182C 12 bytes Sprites Minor extended sprite X speed.
$7E1838 12 bytes Sprites Accumulating fraction bits for fixed point minor extended sprite Y speed.
$7E1844 12 bytes Sprites Accumulating fraction bits for fixed point minor extended sprite X speed.
$7E1850 12 bytes Sprites Minor extended sprite timer. Indicates how long the minor extended sprite is still staying active, on-screen.
$7E185C 1 byte Player Flag to disable player interaction with objects. Ghost house ledge holes store their sprite index (plus one) to this to make Mario fall through the ground, but any non-zero value will work.
$7E185D 1 byte Sprites Related to the spawning of extended sprites. Used to index $7E:17F0 (minor extended sprite type table) if there are no empty slots when an extended sprite needs to be spawned. This is so that the oldest extended sprite can be removed when a new one needs to be made.
$7E185E 1 byte Misc. Sometimes used to keep track of a tile to generate at $00:BEB0 (before storing to $7E:009C); may be in conjunction with $7E:18B6. Also used to determine the player Y position when he's on the line guided rope, used to determine positions and such of Yoshi's tiles, etc.
$7E185F 1 byte Sprites This is the low byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically. The high byte is at $18D7.

This, $1860, $1862, and $18D7 are set after $019138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01802A, the routine that updates sprite position with gravity, which calls $019138.)
$7E1860 1 byte Sprites This is the low byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching horizontally. The high byte is at $1862.

This, $185F, $1862, and $18D7 are set after $019138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01802A, the routine that updates sprite position with gravity, which calls $019138.)
$7E1861 1 byte Sprites Which sprite to overwrite if all slots are full. Used for blocks containing sprites and the item box.
Note that only the last two slots can be overwritten using this method.
$7E1862 1 byte Sprites This is the high byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching horizontally. The low byte is at $1860.

This, $185F, $1860, and $18D7 are set after $019138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01802A, the routine that updates sprite position with gravity, which calls $019138.)
$7E1863 1 byte Sprites Smoke sprite index. Holds the first available smoke image index and resets to #$03 if all of them have been filled and another smoke image is spawned.
$7E1864 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E1865 1 byte Sprites Spinning coin from block index. Holds the first available index and resets to #$03 if all of them have been filled and another coin is spawned.
$7E1866 2 bytes Misc. Two seperate, 8-bit addresses used by the brown chained platform rotation routine. Used to tell if an angle is negative or not. Refer to $7E:0036 also.
$7E1868 1 byte Blocks Used as a mirror of $7E:1693 in stunned sprites. This address here is used to check if a sprite is hitting a smashable block (for example, a question mark block) from below.
$7E1869 2 bytes Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E186B 1 byte Blocks Multiple coin block timer - amount of time until the multiple coin block turns into a used block. Keeps decrementing until it's #$01, after that it stays that value until the block is hit again, at which it's turned into a used block. Then, this address gets set to zero.
$7E186C 12 bytes Sprites Sprite off screen flag table, vertical. For sprites in bank 1, if the sprite is set to be two tiles high (with $190F), then bits 0 and 1 correspond to the top and bottom tiles respectively.

The routine that sets this address in bank 2 and 3 has an error, however; this address instead does the 2-bit functionality if bit 5 of $1662 (which is one of the bits in the sprite clipping value). As a result, some sprites will register as vertically offscreen when they're actually just at the top of the screen.
$7E1878 1 byte Sprites Indicates where the player is on the X axis in relation to the currently-active revolving net door sprite. If this is #$00, the player is perfectly centered on the sprite horizontally. It will be positive if the player is toward the left side of the sprite (the farther left, the bigger the positive number) and negative if the player is toward the right side of the sprite (the farther right, the bigger the negative number).

Is used to calculate the player X speed as the net is turning around sideways.
$7E1879 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E187A 1 byte Yoshi Riding Yoshi Flag. #$00 = No, #$01 = Yes, #$02 = Yes, and turning around.
$7E187B 12 bytes Sprites Miscellaneous sprite table. Has the following purposes:

Sprite stomp immunity flag table - enables stomp immunity for sprites if the flag is set.
Additionally, the changing item sprite uses it to determine which sprite it is (#$00 = mushroom, #$40 = fire flower, #$80 = feather, #$C0 = star), the goal tape determines by this address whether it activates the normal or secret exit, the radius of rotating chain sprites is held by this address, certain Yoshi abilities are handled, etc. More information can be found here.

$7E:1884 is also used to determine what background should be used during the Morton/Roy/Ludwig battle scene. #$00 = Ludwig; #$01 = Morton/Roy.
There is also a bug with the background flames during the Ludwig battle, as they seem to change color upon this address not being #$01. This is responsible for a palette glitch in the original SMW, where the fire turns a greyish blue very briefly. Change $02:8380 to #$80 to fix the bug.
$7E1887 1 byte Timer Time to shake Layer 1.
$7E1888 2 bytes Misc. Layer 1 image relative Y position, used by $7E:1887 (shaking ground). Does not affect Layer 1 interaction. #$0000 = default value, Layer 1's image unchanged. The higher the value (positive, #$0001 and beyond), the more Layer 1 goes up. The lower the value (negative, wraps around to #$FFFF and below) the more Layer 1 goes down.
$7E188A 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load, hurt, death, and taking hit while cape flying ($00:F625 for the last three) and in the Peach Rescued scene ($03:AE39).
$7E188B 1 byte Player Player image-relative Y position, used by $7E:1887 (shaking ground). Does not affect player interaction. Unlike $7E:1888, this is an 8-bit address.
$7E188C 1 byte Flag Flag that determines if the game should keep updating the tile and YXPPCCCT data for the sprite background tiles in the Morton/Roy/Ludwig room.

#$00 = Keep updating; #$01 = Stop updating.
$7E188D 1 byte Misc. Used during the calculation of the X position of the background in the Morton/Roy/Ludwig room. It starts by copying the value from $7E:001A (8-bit) and getting the lowest bit from $7E:001B by using the carry bit. So first, this address is $7E:001A (9-bit) > 1.
This address is then, after it's inverted with EOR #$FF : INC A, used for $7E:0006 (scratch RAM, used for X displacement of all tiles).
$7E188E 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E188F 1 byte Sprites Used to indicate whether the bonus game is over. It will disable the interaction and movement.
$7E1890 1 byte Counter How many 1-Ups to spawn. (Used for bonus game.)
$7E1891 1 byte Timer P-balloon timer. Ticks down one step per four frames.
Note that setting this doesn't make the player fly away. The flight controller is $7E:13F3.
$7E1892 20 bytes Sprites Cluster sprite number. The pointer for those is at $02:F825. A list of possible values, as well as more information on cluster sprites in general, can be found here.
$7E18A6 1 byte Empty Empty, unused RAM. Referenced at $01CF9E (Morton's code) but never actually used. Cleared on reset, titlescreen load, overworld load and level load.
$7E18A7 1 byte Blocks This address is a mirror of $7E:1693, which holds the Map16 number of the current block that is being checked. Primarily used in the Chargin' Chuck turn/throw block detection code.
$7E18A8 2 bytes Sprites Morton and Roy left and right pillar status. $7E:18A8 controls the left pillar, whereas $7E:18A9 is used for the right pillar.
#$00 = Pillar is not falling yet.
#$01 = Pillar is falling.
#$81 = Pillar has fallen.
$7E18AA 2 bytes Sprites Morton and Roy left and right pillar Y positions. $7E:18AA is the left pillar, $7E:18AB is the right pillar.
The pillar status ($7E:18A8 and $7E:18A9) is set to #$81 (pillar has fallen) as soon as this Y position becomes #$B0.
The Y speed here accelerates slightly - see $02:83F8 for reference.
$7E18AC 1 byte Yoshi Timer on when Yoshi will swallow the sprite in his mouth. It ticks down one step every fourth frame, and Yoshi's swallowing animation starts when this is #$26 or lower.
$7E18AD 1 byte Yoshi Frame counter for Yoshi's walking frames. It goes from #$00-#$02, forms an index for the image table at $01:EDEE, and becomes #$02 when it gets lower than #$00 (frame counter decrements).
This address is comparable with the player's version, at $7E:13DB.
$7E18AE 1 byte Timer How long it takes for Yoshi's tongue to come out after the player "hits" Yoshi (after $7E:14A3 becomes #$10). Starts at #$06 and decrements each frame.
$7E18AF 1 byte Yoshi Yoshi squatting timer. It's set to #$0C once the player hops onto Yoshi, decrements once every frame, and takes care of the ducking frame.
$7E18B0 2 bytes Yoshi Yoshi's X position. Used only to determine where Yoshi is when eating a berry (by means of walking into one, not sticking his tongue out).
$7E18B2 2 bytes Yoshi Yoshi's Y position. Used only to determine where Yoshi is when eating a berry (by means of walking into one, not sticking his tongue out).
$7E18B4 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E18B5 1 byte Flag Cleared when standing on the ground, set when standing on the floor of the unused winged cage. It tells whether the player should be following the cage or layer 1.
$7E18B6 1 byte Misc. Sometimes used to keep track of a tile to generate at $00:BEB0 (before storing to $7E:009C); may be in conjunction with $7E:185E. Also used to determine the player X position when he's on the line guided rope, used when the player is on top of Boo Block, etc.
$7E18B7 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E18B8 1 byte Flag Run cluster sprite code.
#$00 = No; #$01 = Yes.
$7E18B9 1 byte Sprites Generator type that is currently active. #$01 = Eerie Generator; #$02 = Para Goomba; and so on. The pointer for this address is located at $02:B00C.
$7E18BA 1 byte Sprites Index to the Boo rings that are on screen (maximum is two). Additionally, depending on bit 0 of this byte, the reappearing ghosts use position combination 1 or 2.
$7E18BB 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E18BC 1 byte Sprites Floating skull speed. It's set to #$00 in the sprite initial routine, and set to #$0C when the player touches the sprite.
$7E18BD 1 byte Timer Time to stun the player. It will make the player face the screen and make him unable to move.
$7E18BE 1 byte Flag Flag used to tell if the player can climb on air. The line guided ropes use this to let the player get onto them.
$7E18BF 1 byte Timer Timer used by a bunch of appearing/disappearing sprites (examples: Lakitu, Magikoopa, and Layer 3 smasher). Sprite D2 freezes it by incrementing the timer - effectively getting rid of the decrements applied by said sprites.
$7E18C0 1 byte Timer Timer for respawning certain sprites, such as the Boo Buddies or sprite E5 (and Lakitu). Sprite D2, Turn Off Generator 2, sets this to zero when it is active.
$7E18C1 1 byte Sprites Used by Magikoopa and Lakitu to determine which sprite number should respawn when $7E:18BF is zero.
$7E18C2 1 byte Flag Player is inside Lakitu cloud flag.
#$00 = Not inside Lakitu cloud.
#$01 = Inside Lakitu cloud.
If the latter, the player does not animate as if he were walking or floating.
$7E18C3 2 bytes Sprites Y position of the respawning sprite, used with $7E:18C0 (respawn timer) and $7E:18C1 (respawn sprite number).
$7E18C5 8 bytes Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E18CD 1 byte Sprites Bounce sprite (alternative) index. Also used as which bounce sprite to overwrite if all slots are full when resetting a turn block (similar to $7E1861).
$7E18CE 4 bytes Timer Spinning turn block timer - amount of frames a spinning turn block lasts. When it hits zero, it reverts to a regular turn block.
$7E18D2 1 byte Player This address is incremented every time the player kills a sprite with a star while the star is active and will reset when the star runs out.
#$01 = 200; #$02 = 400; #$03 = 800; #$04 = 1000; #$05 = 2000; #$06 = 4000; #$07 = 8000; #$08 and above = 1-Up
$7E18D3 1 byte Timer Write a value to here, and sparkles (like the ones from the stars) will fly around the player for that amount of frames. However, it is never used in the original game.
Note that if the player has an invincibility star, this timer will wait until the star runs out.
$7E18D4 1 byte Yoshi Red berries eaten by Yoshi. After 10 berries, the counter resets and Yoshi lays an egg, containing a mushroom.
$7E18D5 1 byte Yoshi Pink berries eaten by Yoshi. After 2 berries, the counter resets and Yoshi lays an egg, containing a coin game cloud.
$7E18D6 1 byte Yoshi Type of the current berry being eaten. #$00 = Coin (no effect except getting a coin), #$01 = Red, #$02 = Pink, #$03 = Green. Controls both color and what happens when Yoshi eats the berry.
$7E18D7 1 byte Sprites This is the high byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically. The low byte is at $185F.

This, $185F, $1860, and $1862 are set after $019138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01802A, the routine that updates sprite position with gravity, which calls $019138.)
$7E18D8 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E18D9 1 byte Timer Timer for the castle/ghost house door in the intro sequence. The castle door starts at #$FF, the ghost house door starts at #$7F.
For the castle door: start rising and generate first sound at #$B0, rise until #$81, stay still until #$30, then sink and generate second sound at #$01.
For the ghost house door: open and generate first sound at #$76, then close and generate second sound at #$08.
$7E18DA 1 byte Yoshi Sprite number that spawns when Yoshi lays an egg. Valid values are #$74 (mushroom) and #$6A (coin game cloud).
$7E18DB 1 byte Empty Set to #$08 at $00:CDD4 (unreachable by default) and never touched again. Might have been intended as a starting index for the player's fireballs.
Cleared on reset, titlescreen load, overworld load and level load.
$7E18DC 1 byte Yoshi Flag that is set when the player is ducking with Yoshi. They cannot turn around in this state. If you were to use the debug codes at $00:D085-$00:D089, this also makes the fireballs that the player fires when on Yoshi appear at a different position.
$7E18DD 1 byte Counter Number of silver coins collected.
$7E18DE 1 byte Yoshi Timer that determines how long it takes before an egg is laid by Yoshi, when 10 red Berries have been eaten. Is set to #$20 by default. Also, as long as this timer is above #$01, the player is frozen ($7E:13FB is set).
$7E18DF 1 byte Sprites Slot (index to $7E:009E and similar) of the current Yoshi, plus 1. Set to #$00 when the Yoshi despawns.
$7E18E0 1 byte Timer Timer for how long stolen Lakitu clouds should remain before evaporating. Decrements once every four frames.
$7E18E1 1 byte Sprites Slot of the Lakitu cloud (index to the sprite table that corresponds to the Lakitu cloud sprite). Contains a valid value even if the Lakitu itself is still alive.
$7E18E2 1 byte Yoshi Loose Yoshi Flag. If set, any Yoshis spawned will become 1-Ups instead. It's also Yoshi's index in the sprite table, plus 1.
$7E18E3 1 byte Sprites How many of the coins from the coin game cloud (the one that appears if Yoshi eats two pink berries) the player has collected. Oddly enough, it's cleared if you get hurt.
$7E18E4 1 byte Misc. 1-Up handler. Write to it to give that many lives. Handles everything except the 1-Up/2-Up/etc. graphics.
$7E18E5 1 byte Timer Amount of time until the next life is given through the 1-Up handler ($7E:18E4).
$7E18E6 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E18E7 1 byte Yoshi Yoshi ground stomp flag. #$00 = Yoshi does not stomp the ground when landing on it; #$01 = Yoshi does stomp the ground when landing on it.
This is set to #$01 when a Yellow Yoshi has a shell in its mouth, or when any Yoshi has a yellow shell in its mouth.
$7E18E8 1 byte Yoshi Yoshi growing animation timer. Starts at #$40 and then decrements. Additionally, it freezes everything on the screen except Yoshi.
$7E18E9 1 byte Sprites Occasionally used to index $7E:17C0 (smoke image table). If there are no empty slots left when a smoke image should be spawned, the oldest one is removed and the index is reset.
$7E18EA 12 bytes Sprites Minor extended sprite X position, high byte.
$7E18F6 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E18F7 1 byte Sprites Score sprite index.
$7E18F8 4 bytes Sprites Time for a bounce sprite to interact with a normal sprite. Starts at #$06 and decrements. Actual interaction doesn't occur until the value is lower than #$03, though, and $7E:16CD has to be non-zero.
$7E18FC 1 byte Sprites Alternative extended sprite index, used when the extended sprite tables are full. Holds the first available extended sprite index and resets to #$07 if all of them have been filled and another extended sprite is spawned.
$7E18FD 1 byte Sprites Flag set when Whistlin' Chuck whistles, even when it's the Super Koopa-generating kind. Setting this makes Rip van Fish chase the player.
$7E18FE 1 byte Sprites The diagonal and surrounded bullet bills timer. It increments every second frame, and when it reaches #$A0, it sends out some more Bullet Bills and resets itself.
$7E18FF 1 byte Sprites Shooter index for the current shooter that is being processed.
$7E1900 1 byte Counter Bonus stars gained at level end - decrements to zero.
$7E1901 4 bytes Sprites YXPPCCCT data of bounce sprite that is being shown.
$7E1905 1 byte Counter Iggy's/Larry's platform total number of tilts made counter. It will increment everytime the platform will be at a maximum tilt.
Only the lowest bit is ever used, and it controls which direction it should move.
$7E1906 1 byte Timer Iggy/Larry's platform stationary phase timer. Is set to #$40 and decrements every frame. As long as it's not zero, the platform won't rotate.
$7E1907 1 byte Counter Iggy's platform rotation phase counter.
#$00 = First phase, tilting left.
#$01 = First phase, tilting right.
#$02 = Second phase, tilting left.
#$03 = Second phase, tilting right.
#$04 = Third phase, tilting left steeply.
#$05 = Third phase, tilting right steeply.
After the third phase ends, the counter resets.
$7E1908 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.
$7E1909 1 byte Flag Flag that makes the creating/eating block run or not run. #$FF = don't run, any other value = run. Set to #$00 when a brown block is touched.
$7E190A 1 byte Sprites Reappearing Boo frame counter. They start appearing at #$FF, become fully opaque at #$DF, start disappearing at #$3F, and become fully invisible at #$1F. The counter decrements every frame and doesn't stop when it hits #$00 unless sprite D2 is active, which causes it to freeze at #$FF.
$7E190B 1 byte Sprites Big Boo Boss palette index, used for the transparency effect. The reappearing Boos (cluster sprites) also use this. They set this address to #$08.
$7E190C 1 byte Timer Directional coin timer. Decrements every fourth frame.
$7E190D 1 byte Flag Used as a flag in the Bowser battle for whether or not the final cutscene is playing. Used to remove the item box, as well as several palette updates and using a different OAM index for the roof tiles. Any non-zero value activates the flag.
$7E190E 1 byte Sprites Sprite buoyancy settings from level header. Format: XY-- ---- (bits)
X = Enable sprite buoyancy. This reduces the number of sprites that can be on the screen at once without slowing down.
Y = Enable sprite buoyancy and disable all other sprite interaction with layer 2. This reduces the processing cost and slowdown.
$7E190F 12 bytes Sprites Sprite properties, sixth Tweaker/MWR byte.
Format: wcdj5sDp
w=Don't get stuck in walls (carryable sprites)
c=Don't turn into a coin with silver POW
d=Death frame 2 tiles high
j=Can be jumped on with upward Y speed
5=Takes 5 fireballs to kill. Clear means it's killed by one. The hit counter is at $7E:1528.
s=Can't be killed by sliding
D=Don't erase when goal passed
p=Make platform passable from below
$7E191B 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load, and every frame when Yoshi is on screen. The latter can be disabled by changing $01:EBD9 from [9C 1B 19] to [80 01 EA].
$7E191C 1 byte Yoshi Indicates whether or not Yoshi has a key in his mouth. #$00 = no, #$01 = yes.
$7E191D 1 byte Sprites Which cluster sprite to overwrite for the Sumo Bros. lightning's flames if all usable slots are full. Only cycles through sprites 0 to 9.
$7E191E 1 byte Misc. Is set to a value #$00-#$03 when pressing a big switch. Depending on the value, either a green, yellow, blue or red flat switch sprite will be left behind in the room.
$7E191F 1 byte Empty Empty. Cleared on reset, titlescreen load and overworld load.
$7E1920 1 byte Counter How many 1-Ups from the bonus game are still not collected. Decrements every time a 1-Up is collected. The bonus game ends when this address hits zero.
$7E1921 1 byte Misc. During the cutscene after defeating Bowser, indicates which letter the "Mario's adventure is over..." message is currently at. Ends at #$54.
$7E1922 1 byte Should be 00 High byte of $7E:1921. This is never any value other than #$00 in the original SMW, but since $7E:1921 is sometimes loaded in 16-bit mode, it's not a good idea to use it if you're using the original Bowser battle. Cleared on reset, title screen load, and overworld load.
$7E1923 2 bytes Empty Empty. Cleared on reset, titlescreen load and overworld load.
$7E1925 1 byte Misc. Level mode settings from level header.
$7E1926 2 bytes Empty Empty. Cleared on reset, titlescreen load and overworld load.
$7E1928 1 byte Misc. One of two screen numbers used in the level loading routine. This one points to where the current object is placed and is never changed inside an object loading code. The other screen number is $7E:1BA1.

It is also used in the credits as a pointer to which background should be used for which part of the credits roll.
$7E1929 1 byte Empty Empty. Cleared on reset, titlescreen load and overworld load.
$7E192A 1 byte Misc. RAM address used to hold some information from the level entrance. Format: swaaaaaa. s = slippery level, w = water level, a = player action. If one of bits 3-5 is set, the player action will be "vertical pipe exit downwards, water level".
Note that the s and w bits are cleared after being transferred to $85/$86, so they'll be 0 when read mid-level.
$7E192B 1 byte Graphics Sprite GFX set that is currently used.
$7E192C 1 byte Empty Empty. Cleared on reset, titlescreen load and overworld load.
$7E192D 1 byte Misc. FG palette settings from the level header.
$7E192E 1 byte Misc. Sprite palette settings from the level header.
$7E192F 1 byte Misc. Background color settings from the level header.
$7E1930 1 byte Misc. Background palette settings from the level header.
$7E1931 1 byte Misc. Tileset setting from level header. Also used on the overworld and in cutscenes to determine what graphics should be uploaded.
$7E1932 1 byte Misc. Copy of the tileset setting from the level header. Never read by anything.
$7E1933 1 byte Misc. Layer being processed. #$00 = Layer 1; #$01 = Layer 2/3 (depending on which is interactive). Used in both level loading routine and processing interactions.
$7E1934 1 byte Should be 00 While this is never non-zero in the original SMW, $7E:1933 (current layer) is sometimes used in 16bit mode, so using this address for different purposes is a bad idea.
$7E1935 1 byte Flag When set to a non-zero value, it'll overwrite tiles #$4A-#$4F and #$5A-#$5F with graphics which it gets from $7E:0BF6 on level load. Used by the MARIO START! sign. Flag is immediately cleared after that.
$7E1936 2 bytes Misc. Used by Lunar Magic v3.00+ to hold the screen size minus one tile. Effectively equivalent to $13D7 - #$10.
$7E1938 128 bytes Sprites Sprite load status within the level.
Loaded sprites' indices to this table are stored in the sprite table at $7E:161A. Shooters' indices are stored to $7E:17B3.
All sprites are set to #$00 when the player enters a new area, meaning they are marked to be loaded.
If a sprite's value is set to anything else, for example if it's killed, it will not reload until the player exits and re-enters the area.

Note that indices 0 to 63 (#$00 to #$3F) are cleared on level load, index 64 to 127 (#$40 to #$7F) are not. This can be fixed by changing $02ABF3 to #$7F.
$7E19B8 32 bytes Misc. Exit Table. This connects doors and exit-enabled pipes to their correct entrances.
The index for this exit table is the position of the exit (relative to layer 1) divided by 256. If layer 1 is vertical, then use the Y position of the exit, else use the X position. This is also known as the current screen number.
For primary exits, the value in this exit table is the low 8 bits of the level number of the destination room. For secondary exits, the value in this exit table is the index to the secondary entrance ROM tables; and ROM table $05:F800/0x2FA00 provides the low 8 bits of the room number.
$7E19D8 32 bytes Misc. Exit Table, flags + high bit. Format: HHHHwush
h = Bit 8 of the level number for normal exits (0 = level 0xx, 1 = level 1xx).
HHHHh = Bits 8-12 of the secondary exit number.
s = Secondary exit flag.
u = LM-modified flag. If not set, the entire byte is ignored and SMW's original exit system is used.
w = Water flag (secondary exits) / Midway flag* (non-secondary exits).

* Only used if the level has "use seperate settings for midway entrance" set.

This table is only used when Lunar Magic is done with the ROM. The original game does write the h bit, but never uses it.
$7E19F8 384 bytes Misc. Three tables of 128 bytes each for remembering which items have been collected (item memory settings). If the corresponding bits are set (items are collected), those objects will not be reloaded.
The tables are split up like this: every screen number has 4 bytes designated to it. The first byte is for the left half of the top subscreen, the second byte for the right half, and the third and fourth are for the bottom subscreen. Each vertical column within these regions uses one bit.

Item memory setting 3 doesn't actually exist in the original game, but LM still allows you to select it. As of LM 1.8, it is apparently possible to use item memory setting 3 as well, but it only means "make everything respawn" and doesn't remember anything.
$7E1B78 2 bytes Overworld This is used on the overworld to determine if a hard coded path should be processed. This flag is set and read in 16-bit mode, it can have the values #$0000 or #$0001. #$0001 means that a hard coded path/event is processed.
Also used by Lunar Magic in levels for the "Fix Layer 3 scroll sync" option, but only when the option is on.
$7E1B7A 2 bytes Overworld This address serves as index to $04:9086 which is used to get what hard coded tile to use for the current tile the player is walking on. This address plus one is also the index to $04:90CA.
Also used by Lunar Magic in levels for the "Fix Layer 3 scroll sync" option, but only when the option is on.
$7E1B7C 1 byte Overworld Accumulating fraction bits for the Layer 1 X speed on the overworld, used when the camera returns to the player after having been in free scrolling mode. This address handles incrementing the Layer 1 X position when it overflows.
$7E1B7D 1 byte Overworld Accumulating fraction bits for the Layer 1 Y speed on the overworld, used when the camera returns to the player after having been in free scrolling mode. This address handles incrementing the Layer 1 Y position when it overflows.
$7E1B7E 1 byte Overworld This address is a mirror of $7E:13C1 (tile the player is on in the overworld) and it's used to check whether the player is walking on a complementive corner tile (those small corners used with the paths, a list of all tile numbers can be found at $04:A03C) while settling on a level tile.
Appears to be designed to allow for (very) curvy paths leading to level tiles, found in for example Star World and the path to the warp pipe from Chocolate Island 2.
Depending on the complementive corner tile in question, the player image and position are altered when settling on a level tile.
$7E1B7F 1 byte Empty Empty. Cleared on reset, titlescreen load, overworld load and level load.

This address could be regarded as the "high byte" of $7E:1B7E, however it is never used (AND #$00FF is applied) and only stored to on the overworld. Thus, it is safe to use this address as free RAM outside of the overworld.
$7E1B80 1 byte Overworld Player is on a ladder or vine flag (tiles 3F-41).
#$00 = Player is not on a climbing tile.
#$01 = Player is on a climbing tile.
$7E1B81 1 byte Should be 00 Uses in 16-bit loads to $7E:1B80, and otherwise #$00 is always stored here. Using this outside of the overworld is fine, however. Cleared on reset, titlescreen load and overworld load.
$7E1B82 1 byte Overworld X position on-screen of the current castle/fortress destruction explosion. Also denotes X position on-screen of the appearing event sprite tiles.
$7E1B83 1 byte Overworld Y position on-screen of the current castle/fortress destruction explosion. Also denotes Y position on-screen of the appearing event sprite tiles.
$7E1B84 2 bytes Timer The 16-bit address is used to determine whether the large event tiles (6x6) are uploaded or the small event tiles (2x2). It's #$0900 or higher if it's the latter. It gets its values from the table at $04:DD8D.

Solely $7E:1B84 is a timer used for handling castle/fortress destruction on the overworld, as well as the timer used for a level tile being revealed (the flash sprite).
$7E1B86 1 byte Pointer Pointer to the various routines that handle overworld events being activated. The pointers are located at $04E577.

#$00 = Check if an event needs to run, and check if a "explosion" is needed.
#$01 = Show the castle/P-switch "explosion".
#$02 = Set up the event index counters.
#$03 = Get layer 2 event tile.
#$04 = Animate the fade in for layer 2 tile.
#$05 = Get layer 1 event tile.
#$06 = Animate the fade in for layer 1 tile.
#$07 = End of event, marks event as run.
$7E1B87 1 byte Pointer Overworld continue/save prompt trigger.

#$01 = Init of game over, continue screen. If 2-Player flag is on ($7E:0DB2 is non-zero), go to following value.
#$02 = Preparing $7E:1B8A, go to following value, fading into the 'swap lives between players' screen.
#$03 = Swap lives between players screen.
#$04 = Fading out of the 'swap lives between players' screen.
#$05 = Init of save prompt.
#$06 = Fading into save prompt.
#$07 = Save prompt screen.
#$08 = Fading out of save prompt.
$7E1B88 1 byte Flag Message box expanding (#$00) or shrinking (#$01) flag. Also used in various other instances such as the save prompt on the overworld.
$7E1B89 1 byte Misc. Message box expansion and shrinking timer/size. Note: Setting expanding timer above #$04 will cause the message to be blank. Also used in various other instances such as the save prompt on the overworld.
$7E1B8A 1 byte Flag Which direction to point the arrow on the give lives menu.
#$00 = Point to Luigi's direction, give him lives.
#$01 = Point to Mario's direction, give him lives.
$7E1B8B 1 byte Overworld A timer that increments every frame, used for the blinking arrow on the give lives (between players) screen. If $7E:1B8B & #$18 gives a non-zero value, the arrow is shown. If the result of that is zero instead, a blank is shown.
$7E1B8C 1 byte Flag Used as a flag to determine whether you are at the first or second iteration of the pointer to $04:DB18 ($7E:1DE8 is #$00 or #$06). #$02 is fully cleared, #$00 is fully blacked out. Needed to make the windowing HDMA fade out at first, then fade back in when the submap switching process is done.
$7E1B8D 2 bytes Overworld Used in the calculation of the X positions for the overworld fade in/out windowing HDMA transitions. Removing stores to this address will make it only active in the Y direction. Starts at #$0000 (completely black) and ends at #$7000 (cleared, except for the sides which are hidden under the overworld border).
$7E1B8F 2 bytes Overworld Used in the calculation of the Y positions for the overworld fade in/out windowing HDMA transitions. Removing stores to this address will make it only active in the X direction. Starts at #$0000 (completely black) and ends at #$5400 (cleared).
$7E1B91 1 byte Counter Blinking cursor frame counter (file select, save prompt, etc.)
$7E1B92 1 byte Misc. Position of the cursor on the title screen menus.
$7E1B93 1 byte Misc. Use Secondary Exits flag. This is likely not used when Lunar Magic is done with the ROM.
$7E1B94 1 byte Flag Disable bonus game sprite from being loaded flag. If not zero, the bonus game sprite will terminate itself in the init routine.
$7E1B95 1 byte Flag This flag is set to #$02 as soon as the Yoshi wings animation (#$08 of $7E:0071) brings you above the screen ($7E:0080 = #$FFC0), which means you will be heading for level C8 or 1C8.
A bycoming effect is that Yoshi will have wings in that level, and that you can't die from falling into the depths. Moreover, as you enter the level, Yoshi will always be blue. It's also the only way you can "die" with Yoshi without losing him on the overworld.
$7E1B96 1 byte Flag Side exit enabled flag. #$00 = Disabled; #$01 = enabled.
$7E1B97 2 bytes Empty This address is only stored to once in all of SMW, and that's in code that was originally never used (the fifth scrolling command, sprite #$EC). It was going to have some unknown use when you reached the last screen of the level. Because SMW never executes the code that writes to it (unless that command is used), this is a safe address to use.

Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E1B99 1 byte Flag Used in goal point marching: flag to show peace image flag and handling the fade-out ellipse.
#$00 = Don't show peace image yet, don't handle fade-out ellipse.
#$01 = Show peace image and handle fade-out ellipse.
$7E1B9A 1 byte Graphics Background Scroll Activated flag. The unused orange platform (sprite 5E) sets it to #$01, and the flying turn blocks (sprite C1) set it to #$08.
If set, triggers the fast BG scroll sprite, as well as making the flying turn blocks move.
$7E1B9B 1 byte Flag Used to check if Yoshi should not reappear for the next room (castle intro cutscene and the likes). These cutscenes set the flag to #$01, which makes Yoshi not reappear for the next room, but it does keep Yoshi on the overworld. Automatically set to #$00 when the overworld is loaded again. One could use this RAM address to disable Yoshi for one room, but re-enable him in the next again.
$7E1B9C 1 byte Overworld Player is entering a warp pipe/star flag.
#$00 = No; #$01 = Yes.
$7E1B9D 1 byte Timer Time to wait until the rising/sinking tide starts rising/sinking again (after the "no movement" interval).
$7E1B9E 1 byte Flag Music has to be altered on the overworld during a 2-player game flag.
#$00 = Do not alter music.
#$01 = Do alter music.
It's set when the players are switching, but also when you go from submap to submap, the latter even when it's a 1-player game. But this flag is never read if it's a 1-player game.
$7E1B9F 1 byte Counter Number of broken tile pairs in the Reznor battle.
$7E1BA0 1 byte Overworld The overworld uses this address to shake the ground as the Valley of Bowser entrance rises from the depths, by setting this address to #$FF. It also changes the music and adds some sound effects. It's a timer, but it only decrements as long as $7E:13D9 is #$02.
$7E1BA1 1 byte Misc. One of two screen numbers used in the level loading routine. This one points to where the next tile will be placed and is often changed inside an object loading code. The other screen number is $7E:1928.
Although referenced at $03:DF58 (Bowser's code), its value isn't actually used there.
$7E1BA2 1 byte Sprites Bits 0-6 form the index to the tilemap for the Mode 7 bosses, which read from the table at $03:D9DE, 16 bytes per image. Bit 7 is used to control the X-flip of the tiles. What actually happens then, is that the odd graphic tile is used instead of the even graphic tile, since all Mode 7 graphics are decompressed into a regular and flipped tile. For example, tile #$01 in VRAM is the same as tile #$00 except it's flipped.
$7E1BA3 64 bytes Graphics A buffer that is used for uploading Mode 7 tile data to VRAM in non-platform Mode 7 bosses. The buffer is enough to fill in an entire 8x8 tile, as each 8x8 tile requires 64 bytes in Mode 7 8bpp.

$7E:1BB2 is also used as a buffer in the graphics upload routine. The use seems to be for converting 3bpp to 4bpp format.

$7E:1BBC is used as a flag in the graphics upload routine to alter 3bpp to 4bpp conversion depending on the graphics file that is being uploaded.
$7E1BE3 1 byte Misc. Layer 3 settings.
#$00 = No Layer 3; #$01 = Low and high tide; #$02 = Low tide only; #$03 = Tileset specific image.
$7E1BE4 2 bytes Blocks VRAM address to start uploading data from the table at $7E:1BE6. It's used for layer 1. Big endian.
$7E1BE6 256 bytes Blocks Which tiles should be used for each row of 16x16 tiles, 2 bytes per 8x8 tile, used while scrolling layer 1 (loading new tiles). In horizontal levels, $7E:1BE6-$7E:1C65 form the left column of 8x8 tiles while $7E:1C66-$7E:1CE5 form the right column of 8x8 tiles. On the overworld and in vertical levels, $7E:1BE6-$7E:1C65 form the upper row of 8x8 tiles, while $7E:1C66-$7E:1CE5 form the bottom row of 8x8 tiles.
$7E1CE6 2 bytes Blocks VRAM address to start uploading data from the table at $7E:1CE8. It's used for layer 2. Big endian.
$7E1CE8 256 bytes Blocks Which tiles should be used for each row of 16x16 tiles, 2 bytes per 8x8 tile, used while scrolling interactive layer 2 (loading new tiles). In horizontal levels, $7E:1CE8-$7E:1D77 form the left column of 8x8 tiles while $7E:1D78-$7E:1DE7 form the right column of 8x8 tiles. On the overworld and in vertical levels, $7E:1CE8-$7E:1D77 form the upper row of 8x8 tiles, while $7E:1D78-$7E:1DE7 form the bottom row of 8x8 tiles.
$7E1DE8 1 byte Overworld This is a pointer index used for various tasks during the submap switching scene ($7E:13D9 is #$0A), possible values are:
#$00 = Commence with handling windowing HDMA.
#$01-04 = Update layer 1 on the overworld.
#$05 = Handle palette loading.
#$06 = End with windowing HDMA.
#$07 = Terminate submap switching phase by storing #$04 to $7E:13D9, make eventual submap changes (for example, what music to play).
$7E1DE9 1 byte Overworld If non-zero, indicates an event should be activated on overworld load (otherwise, event handling is skipped). The 'Course Clear!' and Switch Palace message box routines set this just before loading the overworld, and it's set to zero again when the event finishes executing.

Additionally, the enemy credits use this as the current screen number. Counts up to #$0C, which has the last set of enemies (the Koopa Kids and Bowser).
$7E1DEA 1 byte Overworld Overworld event to run at level end. #$FF means that no event will be run.
$7E1DEB 2 bytes Overworld Event tile to load to the overworld. A starting value is set to this at level end, and it increments until it reaches the value of $7E:1DED.
$7E1DED 2 bytes Overworld Last event tile to load to the overworld during a given event, set at level end.
$7E1DEF 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E1DF0 2 bytes Overworld $7E:1DF0 - X position of the camera when using the overworld scroll function, low byte.
$7E:1DF1 - X position of the camera when using the overworld scroll function, high byte.
These values are only used to determine which way the camera should go to get back to the player.
$7E1DF2 2 bytes Overworld $7E:1DF2 - Y position of the camera when using the overworld scroll function, low byte.
$7E:1DF3 - Y position of the camera when using the overworld scroll function, high byte.
These values are only used to determine which way the camera should go to get back to the player.
$7E1DF4 1 byte Misc. Index to intro control sequence data table.
$7E1DF5 1 byte Timer Timer to used for multiple purposes:
- How long a particular input during the intro sequence will remain pressed.
- How long the Nintendo Presents screen will remain active.
- How long a Switch Palace message will remain active.
- How long the player has to wait before he can dismiss the intro message.
$7E1DF6 1 byte Overworld Star and Warp pipe handler. It's an index of the current star/warp pipe tile you're standing on, multiplied by two. With this index, the destination coordinates are determined.
$7E1DF7 1 byte Player Used by the Star Road warp star on the overworld. Determines the speed with which the player is launched in the air during warping. The higher the value, the faster he gets launched in the air. By default the maximum is #$04, though this cap can be altered by editing $04:9E70/0x22070.
$7E1DF8 1 byte Timer Used by the Star Road warp star tile on the overworld. It controls how long the player has to stay on the ground during the warp, before he actually gets launched in the air. The player gets airborne as soon as the timer hits #$31 (as it increments).
$7E1DF9 4 bytes I/O SPC700 I/O Ports. Write values to play music/SFX. A list of values can be found here.
$7E1DFD 2 bytes Empty Empty. Cleared on reset, titlescreen, overworld and level load (the latter two due to new music banks being uploaded). Note that $7E:1DFD is cleared twice, due to a 16-bit store to $7E:1DFC - at $04:969F/0x2189F (LDA #$0023 : STA $1DFC) and $05:C75D/0x2C95D (LDA #$0009 : STA $1DFC).
$7E1DFF 1 byte I/O A copy of $7E:1DFB, the music register. It contains the last value written to SNES register $2142. Probably used to keep the music playing between areas.
$7E1E00 1 byte Empty Empty. Cleared on reset, titlescreen, overworld and level load (the latter two due to new music banks being uploaded).
$7E1E01 1 byte Empty Empty, unused. Cleared on reset and titlescreen load. However, if the debug code at $00:CC86/0x4E86 is enabled, this address allows you to be in free roaming mode: the player can move in any direction, without being affected by objects or sprites. #$00 = none; #$01 = dash immediately; #$02 = free roaming.
$7E1E02 20 bytes Sprites Cluster sprite Y position, low byte.
$7E1E16 20 bytes Sprites Cluster sprite X position, low byte.
$7E1E2A 20 bytes Sprites Cluster sprite Y position, high byte.
$7E1E3E 20 bytes Sprites Cluster sprite X position, high byte.
$7E1E52 20 bytes Sprites Cluster sprite table. Used as:
- Y position of reappearing Boos, frame 1. Not relative to screen border.
- Y speed for Boos from ghost ceiling and death bats.
$7E1E66 20 bytes Sprites Cluster sprite table. Used as:
- X position of reappearing Boos, frame 1. Not relative to screen border.
- X speed for Boos from ghost ceiling and death bats.
$7E1E7A 20 bytes Sprites Cluster sprite table. Used as:
- Y position of reappearing Boos, frame 2. Not relative to screen border.
- Accumulating fraction bits for fixed point Y speed of death bats.
$7E1E8E 20 bytes Sprites Cluster sprite table. Used as:
- X position of reappearing Boos, frame 2. Not relative to screen border.
$7E1EA2 96 bytes Overworld Overworld level setting flags, location within the table corresponds to $7E:13BF. Format: bmesudlr.
b = level is beaten.
m = midway point has been passed.
e = no entry if level already passed.
s = open Save Prompt when level is beaten.
u = enable walking upwards.
d = enable walking downwards.
l = enable walking leftwards.
r = enable walking rightwards.

Setting the high bit of $7E:1EEB will enable the special stage features (autumn overworld palettes, etc.) in the ORIGINAL game.
$7E1F02 15 bytes Overworld Overworld event flags. The table works bitwise - if a bit corresponding to an event is set, that event has been run. If it's clear, it hasn't been run yet.

There's a little formula for finding out what event number corresponds to which bit. Take the event number, divide by eight and use that as index for this table. Take the remainder, and that number (0-7) is the position of the bit inside the indexed byte (left to right).
Example: Finding event #$13. Division by eight turns #$02 as index (so $7E:1F04) and #$03 as the remainder. It's bit 4 of $7E:1F04 (xxxx xxxx). Not bit 3, because of the "reversed" AND tables that are used with this table - bits are not counted from right to left, but from left to right instead.
$7E1F11 1 byte Overworld Current submap for Mario. #$00 = Main map; #$01 = Yoshi's Island; #$02 = Vanilla Dome; #$03 = Forest of Illusion; #$04 = Valley of Bowser; #$05 = Special World; #$06 = Star World.
$7E1F12 1 byte Overworld Current submap for Luigi. #$00 = Main map; #$01 = Yoshi's Island; #$02 = Vanilla Dome; #$03 = Forest of Illusion; #$04 = Valley of Bowser; #$05 = Special World; #$06 = Star World.
$7E1F13 4 bytes Player Player animation on the overworld.

#$00 = Move up.
#$02 = Move down, stand still (facing the screen).
#$04 = Move left.
#$06 = Move right.
#$08 = Move up while in water.
#$0A = Move down while in water, stand still while in water (facing the screen).
#$0C = Move left while in water.
#$0E = Move right while in water.
#$10 = Sticking hand out (entering level).
#$12 = Sticking hand out while in the water (entering level).
#$14 = Climb ladder/vine, only used when descending path tile #$41.
#$16 = Climb ladder/vine, regular.

$7E:1F13/4 form Mario's image and $7E:1F15/6 form Luigi's image. Note that the high bytes of the two (bytes 2 and 4, $7E:1F14 and $7E:1F16) are actually unused.
$7E1F17 2 bytes Player Overworld X position of Mario.
$7E1F19 2 bytes Player Overworld Y position of Mario.
$7E1F1B 2 bytes Player Overworld X position of Luigi.
$7E1F1D 2 bytes Player Overworld Y position of Luigi.
$7E1F1F 2 bytes Player Pointer to Mario's overworld X position. Value is Mario's regular overworld X position divided by #$10 (#16).
$7E1F21 2 bytes Player Pointer to Mario's overworld Y position. Value is Mario's regular overworld Y position divided by #$10 (#16).
$7E1F23 2 bytes Player Pointer to Luigi's overworld X position. Value is Luigi's regular overworld X position divided by #$10 (#16).
$7E1F25 2 bytes Player Pointer to Luigi's overworld Y position. Value is Luigi's regular overworld Y position divided by #$10 (#16).
$7E1F27 4 bytes Flag Switch palace block flags (Green, Yellow, Blue and Red). #$00 = off; only outlines, #$01-#$FF = on; solid.
$7E1F2B 3 bytes Empty Empty. Unlike most empty addresses, this one is saved to and loaded from SRAM, so it's effectively cleared only at reset and new game.
$7E1F2E 1 byte Counter Number of events triggered. Can be used as a levels beaten counter.
$7E1F2F 12 bytes Flag "Collected five or more Yoshi Coins" flags, for each level.
Each seperate byte represents the values for 8 levels, with each bit acting as a flag for a given level.
If a bit is set, no Yoshi Coins will reappear in that level.

The format is as following: $7E:13BF (the level number) divided by 8 (3x LSR) provides the index per byte into this table; that's because 8 levels are represented by one byte, 1 bit per level.
For each byte, the level modulo 8 (AND #$07) is the index to the bit, and said index gets the corresponding bit from an AND table at $05:B35B.
That bit will be the flag for the level.
0 = clear bit, less than five Yoshi Coins collected; 1 = set bit, five or more Yoshi Coins collected.

An example: checking if five or more Yoshi Coins were collected in level 105. First, convert to $7E:13BF format. #$29 indicates you're in level 105.
Divide that by 8 to get the byte index - #$29 divided by 8 is five (rounded), so the sixth byte is the correct index.
After that, apply modulo 8 on #$29 - AND #$07 - and you'll end up with #$01.
This value is then used to index the aforementioned AND table, which gets the corresponding bit - in this case, #$40, bit 6.
So if bit 6 of the sixth byte ($7E:1F34) in the table is set, five or more Yoshi Coins have been collected in level 105.
$7E1F3B 1 byte Empty Empty. Cleared on reset, titlescreen load and at the game over screen.
$7E1F3C 12 bytes Flag "Collected invisible 1-Up flags", for each level.
Each seperate byte represents the values for 8 levels, with each bit acting as a flag for a given level.
If a bit is set, no invisible 1-Up will reappear in that level.

The format is as following: $7E:13BF (the level number) divided by 8 (3x LSR) provides the index per byte into this table; that's because 8 levels are represented by one byte, 1 bit per level.
For each byte, the level modulo 8 (AND #$07) is the index to the bit, and said index gets the corresponding bit from an AND table at $05:B35B.
That bit will be the flag for the level.
0 = clear bit, invisible 1-Up not collected; 1 = set bit, invisible 1-Up collected.

An example: checking if an invisible 1-Up was collected in level 105. First, convert to $7E:13BF format. #$29 indicates you're in level 105.
Divide that by 8 to get the byte index - #$29 divided by 8 is five (rounded), so the sixth byte is the correct index.
After that, apply modulo 8 on #$29 - AND #$07 - and you'll end up with #$01.
This value is then used to index the aforementioned AND table, which gets the corresponding bit - in this case, #$40, bit 6.
So if bit 6 of the sixth byte ($7E:1F41) in the table is set, an invisible 1-Up has been collected in level 105.
$7E1F48 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E1F49 141 bytes Overworld Buffer for $7E:1EA2-$7E:1F2E. SRAM transfer of those bytes goes via this buffer.
$7E1FD6 12 bytes Sprites Unused sprite table, cleared at individual sprite load. (1 slot each.)
$7E1FE2 12 bytes Sprites Sprite table that decrements once per frame, and is used for multiple purposes. All standard sprites have it briefly set after spawning.

Primarily, it disables water splashes from showing when the sprite enter or exits water, and disables interaction for the sprite with capespins, quake sprites, cape smashes, and net punches. Some sprites use it for miscellaneous purposes, as well. More information can be found here.
$7E1FEE 12 bytes Flag "Collected 3-Up moon" flags, for each level.
Each seperate byte represents the values for 8 levels, with each bit acting as a flag for a given level.
If a bit is set, no 3-Up will reappear in that level.

The format is as following: $7E:13BF (the level number) divided by 8 (3x LSR) provides the index per byte into this table; that's because 8 levels are represented by one byte, 1 bit per level.
For each byte, the level modulo 8 (AND #$07) is the index to the bit, and said index gets the corresponding bit from an AND table.
That bit will be the flag for the level.
0 = clear bit, no 3-Up moon collected; 1 = set bit, 3-Up moon collected.

An example: checking if a 3-Up moon was collected in level 105. First, convert to $7E:13BF format. #$29 indicates you're in level 105.
Divide that by 8 to get the byte index - #$29 divided by 8 is five (rounded), so the sixth byte is the correct index.
After that, apply modulo 8 on #$29 - AND #$07 - and you'll end up with #$01.
This value is then used to index the aforementioned AND table, which gets the corresponding bit - in this case, #$40, bit 6.
So if bit 6 of the sixth byte ($7E:1FF3) in the table is set, a 3-Up moon has been collected in level 105.
$7E1FFA 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E1FFB 1 byte Palettes Lightning flash color index. Only #$00-#$07 are actually used. #$07 is the brightest shade of white, the lower the value, the closer to black it gets. This address gets its value from the table at $04:F700.
$7E1FFC 1 byte Timer How long to wait until the next lightning flash is generated. Gets its value from a table at $04:F6F8, which in turn gets its index from a "random" value in the routine of $04:F708 & #$07. This address decrements after the previous lightning flash has ended.
$7E1FFD 1 byte Timer How long a lightning flash should last, per color change. Is set to #$08 frames for the first color flash (the most bright one), then it's set to #$04 frames for the following color flashes which are becoming less and less bright. Decrements every frame.
$7E1FFE 1 byte Flag Whether to update the background in the first part of the credits, or not.
#$00 = Don't update the background.
#$01 = Do update the background.
$7E1FFF 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E2000 23808 bytes Graphics GFX32 decompressed. Written while the Nintendo Presents logo is shown and never modified after that, but often read.
$7E7D00 12288 bytes Graphics GFX33 decompressed. Written while the Nintendo Presents logo is shown and never modified after that, but often read.
$7EAD00 3072 bytes Graphics GFX file decompression buffer. Decompressed as 3bpp (3kb) for unexpanded GFX and as 4bpp for expanded.
Also used for Lunar Magic's extra animated tile space.
$7E:B900 is also used as additional buffer kilobyte.
$7EB900 1024 bytes Blocks Layer 2 tilemap, low byte. Format: First two 16x27 rectangles, then 160 25s that are never read.

Also used on the overworld during the switch block events for various purposes:
$7EB900-$7EB927 = Switch block X position, high byte
$7EB928-$7EB94F = Switch block Y position, high byte
$7EB950-$7EB977 = Switch block Z position, high byte
$7EB978-$7EB99F = Switch block X position, low byte
$7EB9A0-$7EB9C7 = Switch block Y position, low byte
$7EB9C8-$7EB9EF = Switch block Z position, low byte
$7EB9F0-$7EBA17 = Switch block X speed
$7EBA18-$7EBA3F = Switch block Y speed
$7EBA40-$7EBA67 = Switch block Z speed
$7EBA68-$7EBA8F = Accumulating fraction bits for fixed point switch block X speed
$7EBA90-$7EBAB7 = Accumulating fraction bits for fixed point switch block Y speed
$7EBAB8-$7EBADF = Accumulating fraction bits for fixed point switch block Z speed
$7EBD00 1024 bytes Blocks Layer 2 tilemap, high byte; same format as $7E:B900. Writing to this area with the gfx+2 patch installed generates BG garbage and should never be done.
$7EC100 1408 bytes Empty Empty, untouched RAM on an unhacked ROM. Lunar Magic uses it to store ExAnimation graphics data if the ExAnimation file is larger than 0x1400 bytes. Maximum size is 0x1B00, or enough for 0xD8 4bpp 8x8 tiles, in which case all of $7E:AD00-$7E:C7FF is used.
$7EC680 96 bytes Misc. Tilemap of Mode 7 bosses (Ludwig, Roy, Morton and Bowser).
$7EC6E0 288 bytes Empty Empty, untouched RAM on an unhacked ROM. In a hacked ROM, it may be occupied by ExAnimation data (see $7E:C100).
$7EC800 14336 bytes Blocks Map16 Low Byte Table.
For horizontal levels, $1B0 tiles per screen, where each screen can be indexed using the format ------y yyyyxxxx. $7E:FE00-$7E:FFFF are unused.
For vertical levels, $200 bytes per screen, with the format --sssssx yyyyxxxx. All bytes are used.
If layer 2 or 3 is interactive in the level, it uses screens 10-1F (0E-1B in vertical levels).

On Lunar Magic version 3+, refer to this document for the blocks format for other level dimensions.


On the overworld:
$7E:C800-$7E:CFFF (2048 ($800) bytes) is used as the Layer 1 tilemap for the overworld.
To index this table, use $7E:1F11, $7E:1F1F, and $7E:1F21 to find Mario, or use $7E:1F12, $7E:1F23, and $7E:1F25 to find Luigi.
X position / 16: %---- ---- ---X xxxx
Y position / 16: %---- ---- ---Y yyyy
Index to this table: %---- -SYX yyyy xxxx
* If Mario is on a submap, the S bit is set.

$7ED000-$7ED7FF (2048 bytes) is used as a table that contains the translevel numbers for every Layer 1 tile, in the format of $7E13BF.
$7ED800-$7EDFFF (2048 bytes) is used as a table that contains the path direction settings for every Layer 1 tile, in the format of $04D678.
$7EE400-$7EEBFF (2048 bytes) is used for uploading the Layer 1 tile map to VRAM in 2KB chunks. One chunk is uploaded per frame for four frames during transitions between the main overworld and submaps. Data is refreshed after each DMA.
$7F0000 16384 bytes Overworld Layer 2 event tilemap of the overworld. $7F:0D00-$7F:3FFF is empty (untouched) RAM on a vanilla ROM, but LM uses it to hold the expanded layer 2 event tilemap on a hacked ROM.
LM also uses $7F:0000 and upwards to store title screen movement (three bytes every time a key is pressed or released, or if the same keys are held for #$FF frames), and $7F:0B44-$7F:1343 are also used as buffer for dynamic sprite graphics because of them being uploaded during V-Blank.
$7F4000 16384 bytes Overworld The Layer 2 tilemap of the whole overworld (including submaps, starting at $7F:6000). It does NOT affect the event tiles. The tiles are also 8x8. The tilemap starts from the top left corner of the main overworld. Format is as following:
[Tile number], [Tile properties]
This table is also used for a RAM buffer for the credit cutscene backgrounds.
$7F8000 387 bytes Sprites Unrolled loop which, executed once per each frame, writes to OAM to put all sprites outside the screen (this clears the OAM slots by setting their Y positions to #$F0). Note: Not executed during pause.
$7F8183 504 bytes Empty Empty, untouched RAM.
~420 bytes used in LM 1.70+ for VRAM modification.
$7F837B 2 bytes Misc. Current length of the $7F837D stripe image, excluding the FF terminator. Used to allow two subroutines to write to $7F837D in the same frame.
$7F837D 5118 bytes Misc. VRAM upload table, as a stripe image. Used for things that change in the middle of the screen, such as ? blocks. Uploaded and reset every frame; most frames, it's empty.

Not all of it is used during normal gameplay, so $7F:8600+ shouldn't be dangerous to use.

See here for more info.
$7F977B 768 bytes Misc. Mario/Luigi Start, Game Over, Time Up etc. messages Graphics, decompressed.
$7F9A7B 512 bytes Sprites Position of Wiggler's segments.
$7F9C7B 11141 bytes Empty Empty RAM which is entirely untouched.
This area is used by many SMW hacking tools, so hacked ROMs are likely to use some of the addresses found here. A list of RAM addresses used by several SMW hacking tools can be found here.
A few more addresses are documented here. [TODO: Merge those into SMWiki once it unlocks.]
$7FC800 14336 bytes Blocks Map16 high byte table. Same format as $7E:C800.
$7F:FFF8 through $7F:FFFD are also used by Lunar Magic's title screen recording ASM.
Pages: « 1 2 » Per Page: 25 50 75 100 150 500 All

The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.

Copyright © 2005 - 2019 - SMW Central
Legal Information - Privacy Policy - Link To Us


Total queries: 9

Menu

Follow Us On

  • YouTube
  • Twitch
  • Twitter

Affiliates

  • Talkhaus
  • SMBX Community
  • GTx0
  • Super Luigi Bros
  • ROMhacking.net
  • MFGG
  • Gaming Reinvented