AddressDescriptionTypeSize
$7E0014"Effective" frame counter. Stops when, for example, RAM addresses such as $7E:009D are not zero (lock sprite flag, usually indicates the player is dying, grabbing a powerup, or something similar). Inside sprite code, this address is often preferred over $7E:0013, especially in graphics routines, as graphics will not be updated when the player dies if this address is used as an index to the tilemap.Counter1
$7E003FOAM Address, low byte. Also known as the mirror of SNES register $2102. High byte is at $00846B. Is sometimes used to alter priority of various sprite tiles, such as with the sprite backgrounds in the boss rooms.Hardware mirror1
$7E0040Color math designation settings (CGADSUB), mirror of $2131. Format: [code inline]shbo4321[/code]
  • s = 0 to add layers, 1 to subtract layers
  • h = half-color mode
  • b = enable on fixed color
  • o = enable on sprites
  • 4321 = enable on Layer 4, 3, 2, 1 (Layer 3 is only affected below the status bar)
Hardware mirror1
$7E0041Window mask settings, mirroring $2123-$2125. These control what layers each window is active on, as well as whether the window is inverted. Each of the three addresses has the binary format [code inline]ABCDabcd[/code]:
  • A/a = Enable window 2
  • B/b = Invert window 2
  • C/c = Enable window 1
  • D/d = Invert window 1
The lowercase letters affect BG1, BG3, and sprites, while the upper case letters affect BG2, BG4, and the fixed color. Which of the layers in each set of three is then determined by the particular address you modify:
  • $41: BG1 and BG2
  • $42: BG3 and BG4
  • $43: Sprites and fixed color
Hardware mirror3
$7E0055Direction of scrolling for Layer 1. #$00 = left (or up); #$02 = right (or down). Used to index the various camera tables at $7E0045 to $7E0048 and $7E004D to $7E0050. When handling routine $00F70D, it is set to $00 if the player's on-screen X position is less than the value of $142A and $02 otherwise. This is used to determine which side to enable spawning sprites depending which side the player is on compared to $142A. It is also temporarily set to #$01 during level load for loading onscreen sprites.Camera1
$7E0064Properties (YXPPCCCT) byte for most sprites inside levels - including the player. Exceptions to this include sprites that mess with sprite priority in a different way, such as Piranha Plants, items coming out of a box (and inside the item box) and Net Koopas behind the nets.Misc.1
$7E0072Player is in the air flag, as well as the actual pose value to store to $13E0 while the player is in midair. This is set to a certain value depending on how the player got in the air in the first place, and in what state they are currently (rising or sinking). This address is not affected by phases such as climbing. It is, however, also used in swimming animation. Notable values: #$0B = Jumping/swimming upwards. #$0C = Shooting out of a slanted pipe, running at maximum speed. #$24 = Descending/sinking. NOTE: Hitting bottom-solid sprites like invisible solid block, message block etc. does NOT set $72 to this value as cape mario. The address in general is used in many instances. For example, the game checks if this address is #$0C. If not, the player cannot ascend properly with the cape. Furthermore, the Layer 3 smash won't hurt the player if they're not on the ground (any non-zero value) and this address prevents the player from locking in place when still airborne during the Morton/Roy/Ludwig battle.Player1
$7E0078Flags used to disable drawing parts of the player's sprite. Format: dFfcEebh
  • d - used in conjunction with all other set bits in order to disable processes such as the star timer decrementing.
  • h - hide head tile (upper 16x16).
  • b - hide body tile (lower 16x16).
  • e - hide extra tile #1.
  • E - hide extra tile #2.
  • c - hide regular cape tile.
  • f - hide extra cape flight tile #1.
  • F - hide extra cape flight tile #2.
Note that if this byte is set to #$FF, yoshi will also be hidden.
Player1
$7E0082Points to how steep the various slopes are and which parts of the slopes they represent. Points to $00:E5C8 in tilesets 0 and 7, and $00:E55E in others. The table this one points to has one byte per block, from tile 16E to tile 1D7. The value in these tables is then multiplied by 16, the lowest nibble of the sprite/player X position is added, and this is then used as an index to $00:E632 to tell how many pixels the sprite/player should move down from the nearest 16x16 tile.Pointer3
$7E0098Position (in pixels) of the collision point currently being processed for player interaction with blocks in the level. Also used in the creation of various sprite types/other blocks. $98-$99: 16-bit Y position $9A-$9B: 16-bit X position Note that this position is with respect to the top left of the layer being processed. Hence, if Layer 1 and Layer 2 are offset from each other, this value will differ between the two, even when Mario is at the same position with respect to the level. Also note that, in vertical levels, the X and Y position may be swapped after running certain block changing routines (e.g. $00BEB0 or the ChangeMap16 routine included with various tools).Misc.4
$7E009DLock animation and sprites flag. Most codes will still run if this is set, but almost nothing will move or animate. Set by a number of events such as screen scrolling, entering pipes, dying, and more. Notably, not set when the game is actually paused by [url=https://smwc.me/m/smw/ram/7E13D4]$13D4[/url], since most resource processing is skipped altogether by that flag. However, UberASM codes still run prior to that flag being checked, so in those you'll need to check both to prevent any unwanted code from running while the game is frozen.Flag1
$7E009ESprite number, or Acts Like setting for custom sprites. To check the actual sprite ID for custom sprites, see [url=https://smwc.me/m/smw/ram/7FAB9E]$7FAB9E[/url] instead.Sprites12
$7E00AASprite Y speed table.Sprites12
$7E00B6Sprite X speed table.Sprites12
$7E00C2Miscellaneous sprite table. In SMW, it's commonly used as a pointer to different parts of a sprite. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E00CE24-bit pointer to level's sprite data.Pointer3
$7E00D8Sprite Y position, low byte.Sprites12
$7E00E4Sprite X position, low byte.Sprites12
$7E0101Currently loaded sprite GFX files - stored in reverse order.Misc.4
$7E0200OAM table. Used to handle all sprite tile data, with 128 slots for tiles. Generally, the table is indexed from either $0200 or $0300, with $0300 being used for normal sprites (and Mario) and $0200 being used for various other sprite types. Tiles are drawn to the screen from top to bottom of the table; that is, a sprite in slot 0 will always appear visually in front of a sprite in slot 1. The table actually consists of two sub-tables:
  • [b]$0200-$03FF[/b] (512 bytes): Each slot gets four bytes in the order of: X position, Y position, tile number, YXPPCCCT. Unused tiles are generally marked by giving them a Y position of #$F0 (i.e. offscreen).
  • [b]$0400-$041F[/b] (32 bytes): Each slot gets 2 bits [code inline]%SX[/code], with the X bit used to handle a 9th bit of the X position (for handling sprite tiles that go past the left edge of the screen) and the S bit acting as a "size bit" which (generally) controls whether the tile is 8x8 (0) or 16x16 (1). Since each tile only requires 2 bits, each byte of this table actually handles four separate tiles; see the details table for more information. It is not recommended that you write to this table directly, though, and you should use the table at [url=https://smwc.me/m/smw/ram/7E0420]$0420[/url] instead. The routine at [url=https://smwc.me/m/smw/rom/008494/]$008494[/url] is responsible for then packing the data from that table back into $0400.
See details for a more-detailed map of the gane's slot usage.
I/O544
$7E0420OAM extra bits table, with one byte per OAM tile. Used to generate the packed table at [url=https://smwc.me/m/smw/ram/7E0200]$0400[/url] during the routine at [url=https://smwc.me/m/smw/rom/008494]$008494[/url]. Format: [code inline]%000000SX[/code]
  • S - Size. Generally, 0 = 8x8, 1 = 16x16.
  • X - Bit 9 of the tile's X position. Used to allow tiles to be positioned beyond the left edge of the screen.
  • All other bits must remain 0.
Sprites can either manually write the necessary information here, or they can use the routine at [url=https://smwc.me/m/smw/rom/01B7B3]$01B7BE[/url] to take care of it.
Sprites128
$7E0AF6Used for multiple purposes:
  1. Decompressed overworld graphics for animated tiles. Continues into [url=https://smwc.me/m/smw/ram/7E0BF6]$0BF6-$0C55[/url].
  2. Iggy's/Larry's platform interaction. (16x16 tiles in a 16x16 square.)
  3. Various sprite tables for the credits and castle destruction scenes; see details. Note that the white flag sprite used in the castle destruction scenes has its X/Y designation reversed for whatever reason.
  4. Lunar Magic may extend [url=https://smwc.me/m/smw/ram/7E0905]$0905[/url] to include the first 15 bytes of this region (up to and including $0B05), corresponding to palette data for colors F8-FF.
  5. Lunar Magic v3.00+ uses part of this region at $0BE6-$0BF5 to support the expanded horizontal level system. See details for more information.
Misc.256
$7E0DDEWhich files to delete on the erase file screen. Format: xxxxx123. It is also used as an overworld sprite index.Misc.1
$7E0DDFStarting OAM index for overworld sprites. Appears to be used only by the cloud sprites.Sprites1
$7E0DE0Used for the overworld cloud sprites. This table is used in such a way that clouds check each other's 16-bit Y positions. By doing this, they can maintain their speed, making it the same for all clouds on-screen.Sprites5
$7E0DE5Overworld sprite number.Sprites16
$7E0DF5Miscellaneous overworld sprite table.Sprites16
$7E0E05Miscellaneous overworld sprite table.Sprites16
$7E0E15Miscellaneous overworld sprite table.Sprites16
$7E0E25Miscellaneous overworld sprite table.Sprites16
$7E0E35Overworld sprite X position, low byte.Sprites16
$7E0E45Overworld sprite Y position, low byte.Sprites16
$7E0E55Overworld sprite Z position, low byte; distance that the sprite is from the ground.Sprites16
$7E0E65Overworld sprite X position, high byte.Sprites16
$7E0E75Overworld sprite Y position, high byte.Sprites16
$7E0E85Overworld sprite Z position, high byte; distance that the sprite is from the ground. Probably has no real purpose in the original SMW; it may not be anything but #$00.Sprites16
$7E0E95Overworld sprite X speed.Sprites16
$7E0EA5Overworld sprite Y speed.Sprites16
$7E0EB5Overworld sprite Z speed.Sprites16
$7E0EC5Accumulating fraction bits for overworld sprite X speed.Sprites16
$7E0ED5Accumulating fraction bits for overworld sprite Y speed.Sprites16
$7E0EE5Accumulating fraction bits for overworld sprite Z speed.Sprites16
$7E0EF5Bits 5 through 7 of this address are used to keep track of which overworld Koopa Kids have been defeated (i.e. they pulled Mario into a level and the level was beaten). If set, the corresponding sprite will not respawn.Overworld1
$7E0EF7If bit 7 is set (#$80-#$FF) and the player is located on a level tile, they will enter it directly without user input. The Koopa Kid and Piranha Plant overworld sprites also write their sprite index to this address while the player is in contact with them. The Piranha Plant in particular uses this to erase itself if Mario beats the level the sprite is on top of.Overworld1
$7E0F4AMiscellaneous cluster sprite table.Sprites20
$7E0F5EEmpty, cleared on reset and titlescreen load. This table was probably meant to function as a miscellaneous cluster sprite table (and note that PIXI does have defines to treat it as one), but the original game never actually uses it.Empty20
$7E0F72Miscellaneous cluster sprite table.Sprites20
$7E0F86Miscellaneous cluster sprite table.Sprites20
$7E0F9AMiscellaneous cluster sprite table. Used specifically by the Boo and Swooper ceilings.Sprites20
$7E13CCThe value you store here is the amount of coins that are being added up, once per frame, to the total (done by incrementing the coin count and decrementing $13CC until 0). This is originally to allow the coin incrementing animation instead of instantly showing the total. This is handled by a code at $008F1D-$008F27. In the vanilla game, $13CC is written to via the routines at $05B329 - used by sprite 7E, the flying red coin, to give the player 5 coins - $05B330 - used by the Yoshi coin, to give the player 1 coin without overwriting the Yoshi coin sound effect - and $05B34A - used by various things which give the player a coin. These routines accumulate the value, in such a manner that the player can collect more than one coin in the same frame.Counter1
$7E13E8Cape spin interacts with sprites flag. #$00 = don't interact; #$01 = do interact.Flag1
$7E13F9Used to control the graphical layer priority of the player. 01 will send him behind objects, 02 will send him behind objects and sprites, and 03 will only send him behind sprites. #$01 is also used to indicate Mario as being behind a net, meaning he'll only interact with sprites also behind nets (indicated by [url=https://smwc.me/m/smw/ram/7E1632]$1632[/url]). #$02 is used when entering pipes and #$03 is used on the overworld and after killing Bowser. Both of these disable sprite interaction entirely.Player1
$7E13FBPlayer is frozen flag. This includes controls and animation. Other sprites still move and can interact with the player, but contact with them should be avoided, as it would freeze the game. This may be useful for cutscenes to eliminate the jumping sound. Mainly used for the Yoshi growing animation from a baby to an adult, as well as while Yoshi is laying an egg or eating a berry. It's also used during the keyhole animation and at the start of Morton/Roy's fight.Player1
$7E13FCCurrently active Mode 7 boss. Used for determining which graphics to load, as well as checking for various other purposes (like when the player should have priority over certain sprite backgrounds that can be found in the boss rooms). Note that Iggy and Lemmy don't make use of this despite having a Mode 7 room. Cleared on level->overworld transitions, and possibly at other times too.Misc.1
$7E1402A flag that is set when the player is on a note block that is currently going down, i.e. the bounce sprite is moving downwards. If this wouldn't be set, the player would be pushed away from tile 152 (the tile that temporarily comes into place of the note block).Blocks1
$7E140ELayer 2 is touched flag, which is used in the Layer 2 sinking/rising upon touch scroll sprite. #$00 = Layer 2 not touched; #$01 = Layer 2 touched.Sprites1
$7E140FKeeps incrementing in the Reznor battle room. It is used as a flag to determine that a different OAM index needs to be used for a smoke sprite or a puff of smoke, to make sure there's no conflict with the platform tiles. However, since this keeps incrementing and thus sometimes hits #$00 again, it can occur that a platform tile disappears for one frame when a smoke sprite is shown.Flag1
$7E1411Vertical and horizontal scroll settings from header: $1411: Horizontal scroll settings from header flag. #$00 = Disable; #$01 = Enable. $1412: Vertical scroll settings from header. #$00 = Disable; #$01 = Enable; #$02 = Enable if flying/climbing/etc. Note that setting these to zero will merely disable the screen from scrolling within the player, as well checking the scroll limits to prevent it from escaping the level boundaries. It is disabled by auto-scroll sprite generators to prevent the code at $00F713 and $00F7F4 from interfering with the generator from moving the screen.Camera2
$7E1419How sprites enter pipes with the player. This handles carried sprites and riding yoshi, and is always set regardless whether or not the player is carrying a sprite and whether or not is riding yoshi. When this RAM is set to any non-zero and the sprite is being carried and/or yoshi is being ridden on, they're placed behind layer 1 and yoshi's tongue is not shown (when licking).
  • $01 = Horizontal pipes (duck a little on yoshi and carrying sprites facing left or right).
  • $02 = Vertical pipes (face the screen).
  • $FF = Don't change image, only go behind layer (shooting out of slanted pipe). Note that this will probably work with all values #$03-#$FF.
Note: Yoshi always show his pipe animation pose regardless if the player is mounted on Yoshi or not, consider using this patch to fix it.
Sprites1
$7E1430Lowest tile that's solid for sprites from below (in addition to 111 through 16D). It's on page 1.Blocks1
$7E1431Highest tile that's solid for sprites from below (in addition to 111 through 16D) plus 1. It's on page 1.Blocks1
$7E1432Directional coin activation flag. This is set to #$01 when the sprite changes the music, and it is used to prevent the player being able to spawn any more than one instance of the sprite in an entire level, as it carries across sublevels.Flag1
$7E1434Set to #$30 to end level via keyhole. Works as a timer of some sorts, to indicate how long the keyhole sequence should last - but in SMW, this value is never set to anything other than #$00 or #$30. Also, this address freezes player and sprites by storing its value to $7E:13FB, resp. $7E:009D.Timer1
$7E1440The starting Y position of the current scroll sprite, left-shifted twice and with the extra bits still added. (Format: --YYYYEE, where Y = Y position and EE = extra bits). Regularly adjusted inside the scroll sprites. It can be particularly useful for determining what type of scrolling should be applied with this scroll sprite. This address is used for Layer 1 scrolling. Also used during the castle destruction cutscenes as a frame number for various animations.Sprites1
$7E1441The starting Y position of the current scroll sprite, left-shifted twice and with the extra bits still added. (Format: --YYYYEE, where Y = Y position and EE = extra bits). Regularly adjusted inside the scroll sprites. It can be particularly useful for determining what type of scrolling should be applied with this scroll sprite. This address is used for Layer 2 scrolling. Also used during Iggy, Ludwig, and Roy's castle destruction scenes as a timer for the explosion.Sprites1
$7E1442Used in scroll sprites for tracking what type of scrolling Layer 1 it is currently doing, usually depending on [url=https://smwc.me/m/smw/ram/7E1440]$1440[/url]. Also used during the Yoshi's House portion of the credits to keep track of the current phase (24-bit pointers to which can be found at $0CA1DE):
  • 00 = Player and companion walks in
  • 01 = Various Yoshis duck and watch in excitement.
  • 02 = Eggs are shattering, one by one.
  • 03 = Yoshis get up and "THANK YOU" appears on Yoshi's house.
  • 04 = Yoshis jump in excitement, then screen fades out.
Similarly used during the castle destruction sequences to keep track of the current phase for those as well. Each castle destruction has its own pointer table for this address, which can be found by starting from the pointer table at $0CC9A5.
Misc.1
$7E1443Used in scroll sprites for tracking what type of scrolling Layer 2 it is currently doing, usually depending on [url=https://smwc.me/m/smw/ram/7E1441]$1441[/url]. It's also a castle destruction sequence text timer. Starts at #$FF when the 'Welcome' music starts, and a new line of text appears every #$20 frames after that. (#$DF, #$BF, #$9F, etc.)Sprites1
$7E144ALayer 2 X speed used in the scrolling codes. #$0001-#$7FFF = move left; #$8000-#$FFFF = move right. #$0000 means there is no movement. $144A specifically is also used in the castle destruction cutscenes to indicate what sprite Mario is holding, if any, 00 indicates the egg, 01 indicates nothing, and anything greater indicates something else (e.g. the hammer or broom).Sprites2
$7E144CLayer 2 Y speed used in the scrolling codes, particularly in the Layer 2 scroll command (sprite EA). #$0001-#$7FFF = move upwards; #$8000-#$FFFF = move downwards. #$0000 means there is no movement. $7E:144D also controls the time until you can press a button to end the castle destruction sequence (after all text has been generated on-screen).Sprites2
$7E144EUsed internally by scroll sprites, often as accumulating fraction bits for Layer 1's X position (specifically with the routine at $05C4F9). On the overworld, $144E specifically is used to determine after how many frames the player should face the screen again after settling on a level tile. During the credits, $144E is used as a timer for Peach's walking animation, while $144F indicates which frame of that animation she is in.Sprites2
$7E1450Used internally by scroll sprites as accumulating fraction bits for Layer 1's Y position, specifically with the routine at $05C4F9.Sprites2
$7E1452Used internally by scroll sprites, usually as accumulating fraction bits for Layer 2's X position (specifically with the routine at $05C4F9).Sprites2
$7E1454Used internally by scroll sprites as accumulating fraction bits for Layer 2's Y position, specifically with the routine at $05C4F9.Sprites2
$7E1456Used internally by scroll sprites for indexing the layer position RAM addresses based on which layer is being moved (00 = Layer 1, 04 = Layer 2).Sprites1
$7E145EUsed by Lunar Magic to hold various settings, mainly related to Layer 3. Format: yyyyyosb - yyyyy: Initial Layer 3 Y position bits 0-4; bits 5-10 can be found in bits 0-5 of [url=https://smwc.me/m/smw/ram/7FC01C]$7FC01C[/url]. - o: Make sprites beyond level boundaries interact with air instead of water. - s: Enable Layer 3 scroll sync fix. - b: Enable advanced Layer 3 bypass settings. Empty in original game. Cleared on reset, titlescreen load, overworld load and cutscene load.Misc.1
$7E1470Carrying something flag. Very similar to $7E:148F, with the difference that, if this flag is set, the player's graphics don't change, and throw blocks can still be picked up as long as $7E:148F remains zero. If used in a carryable custom sprite to check if the player is already carrying something, definitely combine it with $7E:148F to assure there are no exceptions. #$00 = Carrying nothing; #$01 = carrying something.Flag1
$7E1471Whether the player is on top of a solid sprite, and what kind of sprite that is. #$01 = Standing on top of a floating rock, floating grass platform, floating skull, Mega Mole, carrot top lift, etc. This one calculates the player's position based on the next frame. #$02 = Standing on top of a springboard, pea bouncer. This one calculates the player's position based on the next frame. There's a check at $00:D60B so that the player can hold the jump button pressed for a longer while to jump higher. #$03 = Standing on top of a brown chained platform, gray falling platform. This one calculates the player's position based on the current frame.Misc.1
$7E1486Unused, set to #$01 in the dark room spotlight sprite. Change $03:C544 to EA EA EA (NOP #3) to change this into free RAM. If that patch is performed, this address is safe for other uses. Cleared on reset, titlescreen load, overworld load and cutscene load. Sprites1
$7E1491Amount of pixels on the X/Y axis a sprite has moved in the current frame. It is set after every call to update sprite position based on speed (see $01801A, $018022, and $01802A), and the routine that updates both X/Y position based on speed will leave $7E1491 with the movement on the X axis in this address. Very often used for rideable sprites as this address can be added to the player position to move the player in tandem with the sprite. Note: If using $01802A (both X and Y movement), this contains the X-movement because it handles the Y movement first, then the X movement with the latter being the last write to $1491.Sprites1
$7E1497Flashing invulnerability timer - not to be confused with the star timer. This is activated when the player gets hurt. Controls both interaction (player should not interact with sprites again) as well as the blinking graphics.Timer1
$7E149DSide flipping climbing net sprite flag and timer. Whenever you punch the flipping net, this gets set to #$1E and decrements every frame till it's zero. That's how many frames the spinning animation lasts. It also determines the X speed the player has while they're on the climbing net sprite - this means that it should be decremented every frame in order to avoid issues.Timer1
$7E14B2Used for multiple purposes. The 16-bit address forms the center Y position of the brown chained platform that is currently processed. Note that, since the radius based on the sprite Y position is always zero, this holds the same value as $7E:14B6. The formula for this address = $7E:14B6 - $7E:14BF. Additionally, the Lakitu cloud graphics routine uses $7E:14B2 as scratch RAM for the Y position of a tile. $7E:14B2 is also a flag for scaling when Bowser is flying away. #$00 = shrinking; #$01 = growing; #$02 = disappear. And finally, $7E:14B3 is an incrementing index to the Y position for the teardrop tile that appears on the Clown Car when Bowser is hurt.Misc.2
$7E14B4Used for multiple purposes. Both addresses are used by brown chained platforms as a 16-bit X position of the platform's right-most point, when the cosine of the platform's angle is 1. This is a mirror of the sprite's X position around the sprite's center of rotation, so the center of the platform can also be found by subtracting the sprite's radius ([url=https://smwc.me/m/smw/ram/7E14BC]$14BC[/url]) from here. Both are also used to determine the interactive X position of Iggy/Larry, as well as the X position of the player's fireballs during their boss battle. $14B4 specifically is used in the Bowser battle as an index to what music should be played in phases 2 and 3. It only appears to use values 07 and 08, which correspond to tracks 19 and 1A; both tracks are identical, so it may be a remnant of an unused music variant. $14B5 specifically is also used a timer for Bowser's hurt state. If non-zero, Bowser will show his hurt pose.Misc.2
$7E14B6Used for multiple purposes. The 16-bit address is the Y position of the brown chained platform sprite at sin a = 0. It is in fact a mirror of the sprite Y position, which always stays the same. By subtracting the horizontal radius ($7E:14BF) from this address, the center position to revolve around is calculated. Since $7E:14BF is always zero, the center position and this address always have the same identical value. The 16-bit address is also used to determine Iggy/Larry interactive Y position, as well as the player's fireball Y position during this boss battle. $7E:14B6 is also a timer that is set to #$FF when Bowser begins with the Big Steelie attack. Note that the Big Steelie is thrown when this timer is at #$80. And finally, $7E:14B7 holds the X position of each new fireball that falls from the sky in the Bowser battle, as well as the index to the sound effects that are generated with them (table at $03:A841).Sprites2
$7E14BCRadius of the rotating brown platform, by default this value is #$50 (found at $01:CACC). This value is subtracted from $7E:14B4 and stored into $7E:14B0. In SMW however, the value is always #$50. Additionally, the high byte is always #$00. Note that this radius depends on sprite X position (which stays the same). It calculates the center position of the imaginary circle you rotate around from that position. The further you increment the radius, the further you will have to move the sprite to the right in order for the center position to be the same. See also $7E:14BF.Sprites2
$7E14C8Sprite status table. State 0 indicates a sprite slot is empty and available to use. State 1 indicates a slot has been taken, but has not run its initialization routine. States 8+ are generally used to indicate the sprite is alive, while states 2-7 indicate the sprite has been killed and should not run its usual code.Sprites12
$7E14D4Sprite Y position, high byte.Sprites12
$7E14E0Sprite X position, high byte.Sprites12
$7E14ECAccumulating fraction bits for fixed point sprite Y position (in fractions of 16 with only the high nybble being used, i.e. %YYYY0000). Modified via routine at [url=https://smwc.me/m/smw/rom/01ABCC]$01ABCC[/url].Sprites12
$7E14F8Accumulating fraction bits for fixed point sprite X position (in fractions of 16 with only the high nybble being used, i.e. %XXXX0000). Modified via routine at [url=https://smwc.me/m/smw/rom/01ABCC]$01ABCC[/url].Sprites12
$7E1504Miscellaneous sprite table. In the original game, it's only used in the revolving brown platform and nowhere else. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1510Miscellaneous sprite table. In the original game, it's only used in the revolving brown platform and nowhere else. Unlike $1504 (and every other sprite table), it is also not cleared by the sprite table initialization routine. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E151CMiscellaneous sprite table, often used by the game for controlling the direction of vertical movement for a sprite. More information can be found [url=https://smwc.me/t/91198]here[/url]. $7E1520-$7E1523 specifically are also hardcoded as a set of shared 'Reznor killed' flags. If a Reznor is spawned in sprite slot 7 and these four addresses add up to exactly 4, then the Reznor will be treated as defeated and the level will end.Sprites12
$7E1528Miscellaneous sprite table. In SMW, it's used for Chargin' Chuck HP (see [url=https://smwc.me/m/smw/ram/7E190F]$190F[/url]), Thwomp's face expression, etc. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1534Miscellaneous sprite table. Certain powerups use this table as a blink-fall flag. #$00 = Off; #$01 = On, powerup will blink and fall straight down. The game stores #$01 here when it drops the reserved item from the item box. The blink-fall flag affects the Super Mushroom and the Fire Flower, but not the Cape Feather. The blink-fall flag also affects some other sprites, at least the Starman, the 1-Up mushroom and the coin sprite, but these sprites might glitch if you set the flag. One glitch is that the blinking sprite-coin permanently occupies a sprite slot if it falls off the level, so that it might prevent the spawning of other common sprites. Other than that, this address has many different purposes. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1540Miscellaneous sprite table. Table decrements itself once per frame, except for carryable sprites, where it decrements every second frame (the code at $0196D7 “slows” the timer by 1/2 by incrementing it every even frames ($13), which results in a decrement every odd frames). Various sprites use this table as a stun timer. For example, this timer controls when flipped Goombas and squashed Mecha-Koopas decide to rise and walk. This table is also the sprite spinjump death frame counter - that is, how long to show the "spinjumped" image when the sprite is killed by a jump of such sorts. More information can be found [url=https://www.smwcentral.net/?p=viewthread&t=91198]here[/url].Sprites12
$7E154CMiscellaneous sprite table. Used as a timer to disable sprite contact with the player. Table decrements itself once per frame. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1558Miscellaneous sprite table. Used as a timer for how long a sprite is sinking in lava/mud. Table decrements itself once per frame. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1564Miscellaneous sprite table. Used as a timer to disable sprite contact with other sprites. Table decrements itself once per frame. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1570Miscellaneous sprite table. In SMW's original sprites, it's most commonly used as a local frame counter (as opposed to the global frame counter at [url=https://smwc.me/m/smw/ram/7E0014]$14[/url]). More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E157CMiscellaneous sprite table. It's most often used as a horizontal sprite direction table. #$00 = Right; #$01 = Left. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1588Sprite blocked status table. Format: [code inline]asb-udlr[/code] [ul] -[code inline]a[/code] - blocked by Layer 2 above -[code inline]s[/code] - blocked by Layer 2 on the side -[code inline]b[/code] - blocked by Layer 2 below -[code inline]u[/code] - blocked above (ceiling) -[code inline]d[/code] - blocked below (floor) -[code inline]l[/code] - blocked to the left -[code inline]r[/code] - blocked to the right[/ul] The goal tape in particular also uses this as a miscellaneous sprite table, for tracking its direction of movement.Sprites12
$7E1594Miscellaneous sprite table. In classic Piranha Plants, it is used to check if the sprite should be made visible and have interaction with the player. If it's any non-zero value, that Piranha Plant will become invisible. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E15A0Sprite off screen flag table, horizontal.Sprites12
$7E15ACMiscellaneous sprite table. It's often used as a timer to determine how long it takes to turn around. Table decrements itself once per frame. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E15B8Determines what kind of slope a sprite is on.Sprites12
$7E15C4Flag set if a sprite is more than 4 tiles horizontally offscreen. Used by a few large sprites (e.g. turnblock bridges and chained platforms) to determine whether to draw any of the sprite at all.Sprites12
$7E15D0Flag for whether the sprite is on Yoshi's tongue. #$00 = No; #$01 = Yes.Sprites12
$7E15DCFlag to disable sprite interaction with objects. Ghost house ledge holes store their sprite index (plus one) to this to make sprites fall through the ground, but any non-zero value will work.Sprites12
$7E15E9Sprite index for the current sprite that is being processed. It can be used in a sprite to reload the current index in X after having used X for something else. Make sure you don't change it in a sprite's code, or unintended effects may happen (game crash, infinite loops, ...). Most sprite types use this: normal sprites, spinning coin sprites, extended sprites, score sprites, cluster sprites, and shooters. Other sprite types use [url=https://smwc.me/m/smw/ram/7E1698]$1698[/url].Sprites1
$7E15EASprite index to the OAM table, handled by [url=https://smwc.me/m/smw/rom/0180D2]$0180D2[/url] to quickly obtain an empty OAM slot. Note: meant to be used as an index to the second half of the OAM table (use it for $0300 and $0460, not $0200 and $0420).Sprites12
$7E15F6Sprite [url=https://web.archive.org/web/20190910050417/http://old.smwiki.net/wiki/Yxppccct]YXPPCCCT[/url] table. Many sprites use it in their graphics routines.Sprites12
$7E1602Miscellaneous sprite table. Often used as graphics pointer. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E160EMiscellaneous sprite table. In SMW, it is used to keep track of things such as the green bouncing Koopa's Y speed and the sprite number of certain spawned, kicked, etc. sprites. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E161ASprite index to the load status table (see $7E1938). $FF means the sprite won't be reloaded.Sprites12
$7E1626Miscellaneous sprite table. Consecutive enemies killed by a sprite table. Each byte is how many sprites that particular sprite has killed. In SMW, this applies to sprites that can be thrown, such as Koopa shells. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E1632"Sprite is behind scenery" flag. Sprites will only interact with each other if they share the same value in this address; this includes interaction with Mario using his equivalent flag at [url=https://smwc.me/m/smw/ram/7E13F9]$13F9[/url], and with fireballs using their flags at [url=https://smwc.me/m/smw/ram/7E1779]$1779[/url]. Mainly used for handling the climbing net Koopas, but does also get used for e.g. sprites sinking in lava or being eaten by Baby Yoshi.Sprites12
$7E163EMiscellaneous sprite table. Table decrements once per frame. In SMW, it's used as e.g. a timer that, when it's zero, makes Ludwig face the player, while he's spitting fireballs. More information can be found [url=https://smwc.me/t/91198]here[/url].Sprites12
$7E164ASprite is in liquid indicator table. #$00 = Sprite not in liquid; #$01 = Sprite in water; #$80 = Sprite in lava. Also used in the Morton/Roy battle as an indicator that the walls have to close in, and in Bowser's fight to indicate the music after Bowser is defeated has already started.Sprites12
$7E1656Sprite properties, first Tweaker/MWR byte. Format: sSjJcccc s=Disappear in cloud of smoke. S=Hop in/kick shells. j=Dies when jumped on. J=Can be jumped on (false = player gets hurt if they jump on the sprite, but can bounce off with a spin jump). cccc=Object clipping.Sprites12
$7E1662Sprite properties, second Tweaker/MWR byte. Format: dscccccc d=Falls straight down when killed s=Use shell as death frame cccccc=Sprite clippingSprites12
$7E166ESprite properties, third Tweaker/MWR byte. Format: lwcfpppg l=Don't interact with layer 2 (or layer 3 tides) w=Disable water splash c=Disable cape killing f=Disable fireball killing ppp=Palette g=Use second graphics pageSprites12
$7E167ASprite properties, fourth Tweaker/MWR byte. Bitwise format: dpmksPiS:
  • d = Don't use default interaction with player
  • p = Gives power-up when eaten by Yoshi
  • m = Process interaction with player every frame
  • k = Can't be kicked like a shell
  • s = Don't change into a shell when stunned
  • P = Process while off screen
  • i = Invincible to star/cape/fire/bouncing bricks (fireballs passes through rather than disappear in a puff of smoke)
  • S = Don't disable clipping when killed with star
Sprites12
$7E1686Sprite properties, fifth Tweaker/MWR byte. Format: dnctswye d=Don't interact with objects n=Spawns a new sprite c=Don't turn into a coin when goal passed t=Don't change direction if touched s=Don't interact with other sprites w=Weird ground behavior y=Stay in Yoshi's mouth e=InedibleSprites12
$7E1692Sprite memory setting from header.Sprites1
$7E1694How many pixels the sprite should move down from the nearest 16x16 tile. Originally, its data comes from the table at $00:E632.Blocks1
$7E1695Used most often in tracking the second sprite currently being checked in various interaction routines, for example the second sprite's index in the sprite contact routine (used similarly to $7E15E9). It also serves a use during checking when a sprite is entering/exiting water.Misc.1
$7E1698Current index being processed for a variety of sprite types, specifically minor extended sprites, bounce sprites, quake sprites, and smoke sprites.Sprites1
$7E1699Bounce sprite type number.Sprites4
$7E169DBounce 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.Sprites4
$7E16A1Bounce sprite Y position, low byte.Sprites4
$7E16A5Bounce sprite X position, low byte.Sprites4
$7E16A9Bounce sprite Y position, high byte.Sprites4
$7E16ADBounce sprite X position, high byte.Sprites4
$7E16B1Bounce sprite Y speed.Sprites4
$7E16B5Bounce sprite X speed.Sprites4
$7E16B9Accumulating fraction bits for bounce sprite X speed.Sprites4
$7E16BDAccumulating fraction bits for bounce sprite Y speed.Sprites4
$7E16C1Bounce sprite turns into Map16 tile. This uses the same values as [url=https://smwc.me/m/smw/ram/7E009C/]$9C[/url].Sprites4
$7E16C5Bounce sprite timer - amount of frames until bounce sprite disappears. Turn blocks are set to spinning mode when this timer runs out.Sprites4
$7E16C9Block 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.Sprites4
$7E16CDQuake/interaction sprite type. 0 = empty, 1 = hitting/breaking a block, 2 = Yoshi's stomp.Sprites4
$7E16D1Quake/interaction sprite X position, low byte.Sprites4
$7E16D5Quake/interaction sprite X position, high byte.Sprites4
$7E16D9Quake/interaction sprite Y position, low byte.Sprites4
$7E16DDQuake/interaction sprite Y position, high byte.Sprites4
$7E16E1Score/1-Up sprite number.Sprites6
$7E16E7Score/1-up sprite Y position, low byte.Sprites6
$7E16EDScore/1-up sprite X position, low byte.Sprites6
$7E16F3Score/1-up sprite X position, high byte.Sprites6
$7E16F9Score/1-up sprite Y position, high byte.Sprites6
$7E16FFScore/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.Sprites6
$7E1705Layer the score/1-up sprite is on. Used to control its position.Sprites6
$7E170BExtended sprite number. Last two bytes reserved for fireballs.Sprites10
$7E1715Extended sprite Y position, low byte. Last two bytes reserved for fireballs.Sprites10
$7E171FExtended sprite X position, low byte. Last two bytes reserved for fireballs.Sprites10
$7E1729Extended sprite Y position, high byte. Last two bytes reserved for fireballs.Sprites10
$7E1733Extended sprite X position, high byte. Last two bytes reserved for fireballs.Sprites10
$7E173DExtended sprite Y speed. Last two bytes reserved for fireballs.Sprites10
$7E1747Extended sprite X speed. Last two bytes reserved for fireballs.Sprites10
$7E1751Accumulating fraction bits for extended sprite Y position (fractions of 16: %YYYY0000). The last two bytes are for the player's fireballs. Handled via $02B560.Sprites10
$7E175BAccumulating fraction bits for extended sprite X position (fractions of 16: %XXXX0000). The last two bytes are for the player's fireballs. Handled via $02B560. The fireballs also use this table for a hit flag table.Sprites10
$7E1765Miscellaneous extended sprite table.Sprites10
$7E176FMiscellaneous extended sprite table, decrements by 1 each frame until zero. Often used for animation management or as a "lifespan" timer that erases the sprite when it reaches zero.Sprites10
$7E1779"Extended sprite is behind scenery" flag. Extended sprites will only interact with sprites who share the same value in their equivalent table at [url=https://smwc.me/m/smw/ram/7E1632]$1632[/url], or with Mario only if he has the same value in his equivalent address at [url=https://smwc.me/m/smw/ram/7E13F9]$13F9[/url]. Mainly intended for fireballs shot by Mario while behind a net.Sprites10
$7E17ABAmount of time it takes for a shooter to shoot the next sprite. Decrements every 2 frames via $13.Sprites8
$7E17B3Index to the sprite load status table ([url=https://smwc.me/m/smw/ram/7E1938]$1938[/url]) for each shooter. However, the original game's shooters never actually do anything with this address, so they'll always respawn no matter what.Sprites8
$7E17BCHow much the Y position of Layer 1 changed in the current frame. Only used by the originally unused winged cage sprite.Misc.1
$7E17BDHow 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.Misc.1
$7E17BEHow 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.Misc.1
$7E17C0Smoke sprite number.Sprites4
$7E17C4Smoke sprite Y position, low byte.Sprites4
$7E17C8Smoke sprite X position, low byte.Sprites4
$7E17CCSmoke sprite timer - amount of frames until smoke sprite disappears.Sprites4
$7E17D8Spinning coin from block Y speed. $20-$9F will terminate the sprite and cause a score sprite to appear.Sprites4
$7E17F0Minor extended sprite number.Sprites12
$7E17FCMinor extended sprite Y position, low byte.Sprites12
$7E1808Minor extended sprite X position, low byte.Sprites12
$7E1814Minor extended sprite Y position, high byte.Sprites12
$7E1820Minor extended sprite Y speed.Sprites12
$7E182CMinor extended sprite X speed.Sprites12
$7E1838Accumulating fraction bits for fixed point minor extended sprite Y speed.Sprites12
$7E1844Accumulating fraction bits for fixed point minor extended sprite X speed.Sprites12
$7E1850Minor extended sprite table. Often used as a lifespan timer to indicate when the sprite should despawn.Sprites12
$7E185CFlag 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.Player1
$7E185DRelated 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.Sprites1
$7E185ESometimes used to keep track of a tile to generate at $00:BEB0 (before storing to $7E:009C); may be used in conjunction with $7E:18B6. Also used to determine the player Y position when they're on the line guided rope and used to determine positions and such of Yoshi's tiles. In the sprite/object interaction routine, it's also used to indicate which layer the sprite is touching. 00 = layer 1; 01 = layer 2.Misc.1
$7E185FThis 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 [url=https://smwc.me/m/smw/ram/7E18D7]$18D7[/url]. This address is set after calling the standard object-sprite interaction routine at [url=https://smwc.me/m/smw/rom/019138]$019138[/url] (or [url=https://smwc.me/m/smw/rom/01802A]$01802A[/url]).Sprites1
$7E1860This 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 [url=https://smwc.me/m/smw/ram/7E1862]$1862[/url]. This address is set after calling the standard object-sprite interaction routine at [url=https://smwc.me/m/smw/rom/019138]$019138[/url] (or [url=https://smwc.me/m/smw/rom/01802A]$01802A[/url]).Sprites1
$7E1861Which 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.Sprites1
$7E1862This 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 [url=https://smwc.me/m/smw/ram/7E1860]$1860[/url]. This address is set after calling the standard object-sprite interaction routine at [url=https://smwc.me/m/smw/rom/019138]$019138[/url] (or [url=https://smwc.me/m/smw/rom/01802A]$01802A[/url]).Sprites1
$7E1863Smoke 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.Sprites1
$7E1868Used as a mirror of [url=https://smwc.me/m/smw/ram/7E1693]$1693[/url] (the low byte of a Map16 tile being interacted with) for solid Map16 tiles when touched from below by a sprite. Carryable sprites in particular then use this value to handle actually hitting the block.Blocks1
$7E186CSprite off screen flag table, vertical. For sprites in bank 1, if the sprite is set to be two tiles high (with [url=https://smwc.me/m/smw/ram/7E190F]$190F[/url]), 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 [url=https://smwc.me/m/smw/ram/7E1662]$1662[/url] (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.Sprites12
$7E1878Indicates 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.Sprites1
$7E187BMiscellaneous sprite table. Has the following purposes: Sprite stomp immunity flag table - enables stomp immunity for sprites if the flag is set, meaning the sprite will act as a Chuck/Disco Shell when jumped on (when using default interaction). Additionally, any kicked sprite will move towards Mario like Disco Shells do. 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 [url=https://smwc.me/t/91198]here[/url]. $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 into a greyish blue very briefly. Change $02:8380 to #$80 to fix the bug.Sprites12
$7E188CFlag 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.Flag1
$7E1892Cluster sprite number. The pointer to each cluster sprite's MAIN code can be found at [url=https://smwc.me/m/smw/rom/02F825]$02F825[/url].Sprites20
$7E18ACTimer on when Yoshi will swallow the sprite in his mouth. Decrements every fourth frame (based on [url=https://smwc.me/m/smw/ram/7E0014]$14[/url]), and Yoshi's swallowing animation starts when this is #$26 or lower. Note that the original game has a minor issue with this timer where if the game freezes via [url=https://smwc.me/m/smw/ram/7E009D]$9D[/url] on a frame when $14 is zero, the timer will decrement every frame during that freeze, which can cause Yoshi to swallow a sprite much faster than he should. That can be fixed by using this patch.Yoshi1
$7E18B8Flag for whether cluster sprite routines should be run. Initially set to 0 at the start of a level, then set to 1 whenever any cluster sprite is spawned.Flag1
$7E18BCFloating skull speed. It's set to #$00 in the sprite initial routine, and set to #$0C when the player touches the sprite.Sprites1
$7E18BFTimer 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.Timer1
$7E18C0Timer 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.Timer1
$7E18C1Used by Magikoopa and Lakitu to determine which sprite number should respawn when $7E:18BF is zero.Sprites1
$7E18C3Y position of the respawning sprite, used with $7E:18C0 (respawn timer) and $7E:18C1 (respawn sprite number).Sprites2
$7E18CDBounce sprite (alternative) index. Also used as which bounce sprite to overwrite if all slots are full when resetting a turn block (similar to $7E1861).Sprites1
$7E18D2This 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-UpPlayer1
$7E18D7This 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 [url=https://smwc.me/m/smw/ram/7E185F]$185F[/url]. This address is set after calling the standard object-sprite interaction routine at [url=https://smwc.me/m/smw/rom/019138]$019138[/url] (or [url=https://smwc.me/m/smw/rom/01802A]$01802A[/url]).Sprites1
$7E18DASprite number that spawns when Yoshi lays an egg. Valid values are #$74 (mushroom) and #$6A (coin game cloud).Yoshi1
$7E18DFSprite slot plus 1 of the currently active Yoshi, current frame. If no Yoshi is active, will be set to 00. In reality, this address is set to #$00 every frame, and Yoshi's sprite routines later set it. Because of this, sprites running prior to Yoshi's code won't be able to actually get the slot from here. Instead, it is preferable to use [url=https://smwc.me/m/smw/ram/7E18E2]$18E2[/url], which contains the previous frame's value for this address.Yoshi1
$7E18E1Slot 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.Sprites1
$7E18E2Sprite slot plus 1 of the currently active Yoshi, previous frame. If no Yoshi is active, will be set to 00. Copied from [url=https://smwc.me/m/smw/ram/7E18DF]$18DF[/url], though it is generally preferable to use this address instead. If set, Yoshis spawned from an egg will become a 1-up instead.Yoshi1
$7E18EAMinor extended sprite X position, high byte.Sprites12
$7E18F7Score sprite index.Sprites1
$7E18F8Timer for quake/interaction sprites. This is set to #$06 and decrements by 1 each frame. If the timer is less than #$03, the quake sprite is allowed to interact with normal sprites (if [url=https://smwc.me/m/smw/ram/7E16CD]$7E:16CD[/url] is not 0). When it reaches 0, the quake sprite is erased.Sprites4
$7E18FCAlternative 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.Sprites1
$7E1901YXPPCCCT data of bounce sprite that is being shown.Sprites4
$7E190AReappearing 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.Sprites1
$7E190BBig Boo Boss palette index, used for the transparency effect. The reappearing Boos (cluster sprites) also use this. They set this address to #$08.Sprites1
$7E190ESprite 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.Sprites1
$7E190FSprite 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. If not set, the sprite is killed with a single fireball. The counter for hits is controlled by [url=https://smwc.me/m/smw/ram/7E1528]$1528[/url]. s=Can't be killed by sliding D=Don't erase when goal passed p=Make platform passable from belowSprites12
$7E191DWhich cluster sprite to overwrite for the Sumo Bros. lightning's flames if all usable slots are full. Only cycles through sprites 0 to 9.Sprites1
$7E191EIs 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.Misc.1
$7E192BSprite GFX setting from the level header. Also used on the overworld and in cutscenes to determine the graphics files that should be uploaded.Graphics1
$7E192ESprite palette settings from the level header.Misc.1
$7E1938Sprite load status within the level, used as a flag to determine whether to respawn a sprite when its spawn position is scrolled onscreen. A sprite will only respawn if its value in the table is 00. Currently-loaded sprites can retrieve their index to the table via [url=https://smwc.me/m/smw/ram/7E161A]$161A[/url]. Shooters similarly have a table for this at [url=https://smwc.me/m/smw/ram/7E17B3]$17B3[/url]. The table is initialized to zeros on level load, indicating that all sprites should be able to spawn. When a sprite is spawned, it sets its entry to 01, and when it despawns offscreen without dying, it's set back to 00. However, if the sprite is instead erased by being killed, its entry will remain 01 to prevent it from respawning. The original game has an issue where only the first 64 bytes of actually get reset when entering a new subroom, which meant that if there were enough sprites in a level, sprites in sublevels could be blocked from spawning at all. Lunar Magic fixes this to reset the full 128-byte table. PIXI expands the table even further to 256 bytes by relocating it to [url=https://smwc.me/m/smw/ram/7FAF00]$7FAF00[/url], though as a safeguard whichever one is in use can be accessed via the !1938 define. Prior to v1.41, the relocation could be disabled via the !Disable255SpritesPerLevel define, but this is now no longer supported. Instead, this space is repurposed as a series of miscellaneous tables for various sprite types; see details for a breakdown.Sprites128
$7E1B82X position on-screen of the current castle/fortress destruction explosion. Also denotes X position on-screen of the appearing event sprite tiles.Overworld1
$7E1B83Y position on-screen of the current castle/fortress destruction explosion. Also denotes Y position on-screen of the appearing event sprite tiles.Overworld1
$7E1B84The 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).Timer2
$7E1B94Disable bonus game sprite from being loaded flag. If not zero, the bonus game sprite will terminate itself in the init routine.Flag1
$7E1B97This 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.Empty2
$7E1B9ABackground 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.Graphics1
$7E1E02Cluster sprite Y position, low byte.Sprites20
$7E1E16Cluster sprite X position, low byte.Sprites20
$7E1E2ACluster sprite Y position, high byte.Sprites20
$7E1E3ECluster sprite X position, high byte.Sprites20
$7E1E52Miscellaneous cluster sprite table, mainly used as its Y speed (particularly for the position update routine at [url=https://smwc.me/m/smw/rom/02FF98]$02FF98[/url]).Sprites20
$7E1E66Miscellaneous cluster sprite table, mainly used as its X speed (particularly for the position update routine at [url=https://smwc.me/m/smw/rom/02FF98]$02FF98[/url]).Sprites20
$7E1E7AMiscellaneous cluster sprite table, mainly used as the accumulating fraction bits of its Y position (particularly for the position update routine at [url=https://smwc.me/m/smw/rom/02FF98]$02FF98[/url]).Sprites20
$7E1E8EMiscellaneous cluster sprite table, mainly used as the accumulating fraction bits of its X position (particularly for the position update routine at [url=https://smwc.me/m/smw/rom/02FF98]$02FF98[/url]).Sprites20
$7E1FD6Unused sprite table, cleared at individual sprite load. (1 slot each.)Sprites12
$7E1FE2Sprite 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 [url=https://smwc.me/t/91198]here[/url].Sprites12
$7F0000Layer 2 overworld event tilemap. The space after $7F0D00 is unused in the original game, but is used by LM to hold the expanded tilemap area. Note that this only holds the YXPCCCTT properties, with the actual tile numbers being retrieved from $0C8000. If LM's title screen moves recording hijack is installed, this region is also used to store the title screen movements. Three bytes are written any time a new key is pressed or released, or if the same keys are held for 256 frames. Since the event tilemap isn't restored, however, this will causes glitches with event tiles if the hijack isn't uninstalled. $7F0B44-$7F1343 is also used as a buffer for dynamic sprite graphics, to be uploaded during V-blank.Overworld16384
$7F8000Unrolled 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.Sprites387
$7FAB10Custom sprite table used by Pixi. It holds the extra bits of a sprite.Sprites12
$7FAB1CUsed by PIXI during sprite loading to signal that the sprite being loaded is custom. Used for custom generators, shooters and normal sprites. (Note that the 11 bytes that follow are unused by the tool, probably because this was mistakenly defined a a sprite table.)Sprites1
$7FAB28Custom sprite table used by Pixi. It holds the first extra property byte of the sprite.Sprites12
$7FAB34Custom sprite table used by Pixi. It holds the second extra property byte of the sprite. The highest two bits are used by Pixi to determine if the sprite should execute the original code for sprite states other than 8 (main): if the highest bit is set, the original code will be skipped, while if the second highest bit is set, the original code will be executed and then the custom code.Sprites12
$7FAB40Custom sprite table used by Pixi. It holds the first extra (extension) byte of the sprite.Sprites12
$7FAB4CCustom sprite table used by Pixi. It holds the second extra (extension) byte of the sprite.Sprites12
$7FAB58Custom sprite table used by Pixi. It holds the third extra (extension) byte of the sprite.Sprites12
$7FAB64Custom sprite table used by Pixi. It holds the fourth extra (extension) byte of the sprite.Sprites12
$7FAB9ECustom sprite table used by Pixi. It holds the custom sprite number, as defined in the list.txt file, and is a copy of [url=https://smwc.me/m/smw/ram/7E009E]$9E[/url] for vanilla sprites. To get the act as of a custom sprite, use $9E instead.Sprites12
$7FAC00Custom shooter sprite table used by Pixi. It holds the first extra byte of the shooter.Sprites8
$7FAC08Custom shooter sprite table used by Pixi. It holds the second extra byte of the shooter.Sprites8
$7FAC10Custom shooter sprite table used by Pixi. It holds the third extra byte of the shooter.Sprites8
$7FAF00Custom sprite table used by Pixi. This serves the same purpose as [url=https://smwc.me/m/smw/ram/7E1938]$1938[/url], but it supports up to 255 sprites per level. Not used if !Disable255SpritesPerLevel is set. In custom sprites it's recommended to use the !1938 define, since it'll be mapped to either $1938 or $7FAF00 depending on the Pixi configuration (pay attention that in one case it's absolute, in the other it's long!).Sprites256