AddressDescriptionTypeSize
$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
$7E007AAccumulating fraction bits for fixed point player X speed (fractions of 256, see code around $00D792, this handles horizontal movement with the player and when the player is on the slope). Not to be confused with [url=https://smwc.me/m/smw/ram/7E13DA]$7E13DA[/url], which handles X [i]position[/i].Player1
$7E007BPlayer X speed (8-bit, signed), in 1/16s of a pixel per frame. Positive speeds (01-7F) are rightwards while negative speeds (80-FF) are leftwards.Player1
$7E007DPlayer Y speed (8-bit, signed), in 1/16s of a pixel per frame. Positive speeds (01-7F) are downwards while negative speeds (80-FF) are upwards. SMW generally restricts Mario's downwards speed to a maximum of #$40, although because the game applies gravity after capping the speed, the actual maximum downwards speed is either #$43 (holding A/B) or #$46 (not holding A/B).Player1
$7E00AASprite Y speed table.Sprites12
$7E00B6Sprite X speed table.Sprites12
$7E0DCFPlayer X speed on the overworld. Added with $7E:13D5, which does happen to be zero all the time.Player2
$7E0DD1Player Y speed on the overworld. Added with $7E:13D7, which is zero most of the time.Player2
$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
$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
$7E13D5A flag that determines whether or not Layer 3 should scroll with the screen. If this is zero, Layer 3 will scroll depending on the tileset and tide setting; if it is any other value, Layer 3 will always be at the same position relative to Layer 1. Also used on the overworld as accumulating fraction bits for player X speed (see $04:9801).Misc.1
$7E13DAAccumulating fraction bits for the player's X position. Generally, only the upper four bits are used (i.e. %xxxx0000), with the player's X speed ([url=https://smwc.me/m/smw/ram/7E007B]$7B[/url]) being added to it after shifting 4 bits to the left. This value can be thought of as "subpixels", or fractions of a pixel. The game shifts Mario's X position an extra pixel any time the value overflows after adding his X speed in the routine at [url=https://smwc.me/m/smw/rom/00DC2D]$00DC4F[/url]. Note that the lower 4 bits may still end up non-zero if the player is pushed by the sides of the screen in an autoscrolling level.Player1
$7E13DBPlayer walking/running frame. As the player runs, this will cycle between 0 and the maximum defined by the table at [url=https://smwc.me/m/smw/rom/00DC78]$00DC78[/url] (indexed by the player's powerup). By default, small Mario cycles between 0 and 1, while other powerups cycle 0-2-1-0. The speed at which it cycles is managed by [url=https://smwc.me/m/smw/ram/7E1496]$1496[/url], which obtains its rate from the table at [url=https://smwc.me/m/smw/rom/00DC7C]$00DC7C[/url].Player1
$7E13DCAccumulating fraction bits for the player's Y position, though the game only ever uses the the upper four bits (i.e. %yyyy0000), with the player's Y speed ([url=https://smwc.me/m/smw/ram/7E007D]$7D[/url]) being added to it after shifting 4 bits to the left. This value can be thought of as "subpixels", i.e. fractions of a pixel. The game shifts Mario's Y position an extra pixel any time the value overflows after adding his Y speed in the routine at [url=https://smwc.me/m/smw/rom/00DC2D]$00DC4F[/url].Player1
$7E13DDPose used while the player is on the ground and turning around with a non-zero X speed. Uses same format as $13E0. This address [i]can[/i] be used as a flag for when the player is turning, but note that it only gets set if the player is moving horizontally already; if the player turns from a stand-still, it will not be set. $1499 can be used to check this instead if the player is also holding an item.Player1
$7E13E4Player dash timer/P-meter. Increments with #$02 every frame the player is walking on the ground with the dash button held, otherwise decrements until it is zero. #$70 indicates that the player is at its maximum running speed, and also means that the player is able to fly with a cape.Player1
$7E1444Layer 1 scroll command pointer/timer. This timer serves no defined purpose on itself, but is generally used for waiting a specific number of frames before updating scroll properties such as speed. For example, with the Layer 1 auto-scroll, this value being #$00 indicates the auto-scroll has finished. Also used during the castle destruction scenes as an indicator to show the white surrender flag. Also used as a flag on the overworld to indicate if the player is on a level tile. Value is #$00 when on a path tile, and #$01 when on a level tile.Misc.1
$7E1445Layer 2 scroll command pointer/timer. This timer serves no defined purpose on itself, but is generally used for waiting a specific number of frames before updating scroll properties such as speed. Also used during the castle destruction cutscenes for various purposes. Lemmy uses it as a timer for the hammer animation, Ludwig and Roy uses it as a counter for the ? marks (0-3 for Roy and 4-7 for Ludwig), and Wendy uses it to decide how the broom should move.Sprites1
$7E1446Layer 1 X speed used in the scrolling codes. #$0001-#$7FFF = move left; #$8000-#$FFFF = move right. #$0000 means there is no movement. Effectively, it's the X speed to give the player when they're touching the side of a screen, during a level which does not have regular Layer 1 scrolling. Values are different depending on the type of (auto-)scroll. This value divided by #$10/#16 is stored into $7E:007B. Additionally used during the castle destruction cutscenes for various purposes. $1446 is used in Morton/Roy's scenes to show the huff cloud at the end and as the Y position of the broom in Wendy's scene. $1447 is used in Ludwig's scene as the vertical speed of the castle as well as a counter for the dust animation when it hits the hill, and in Larry's as the vertical speed of the castle as well as a timer for when it crashes.Sprites2
$7E1448Layer 1 Y speed used in the scrolling codes. #$0001-#$7FFF = move upwards; #$8000-#$FFFF = move downwards. #$0000 means there is no movement. $1449 specifically is also used as a timer in Wendy's castle destruction scene for pausing between shifting broom directions or moving Mario to the side.Sprites2
$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
$7E1458Layer 3 X speed, used by the non-tide autoscrolling Layer 3 settings (e.g. the fish or ghost house fog). Lunar Magic expands on the usage of this address when the advanced Layer 3 bypass is enabled, using the full 16-bit value as the Layer 3 autoscroll X speed. Also used during the Yoshi's House portion of the credits, with $1458 being used as the animation frame for the jumping Yoshis and $1459 being used as a timer for their crouching animation.Misc.2
$7E145ALayer 3 Y speed, used by the original game for the rising/falling Layer 3 tides. The tides only actually ever use the low byte, although the high byte does get cleared when initializing Layer 3. Lunar Magic expands on the usage of this address when the advanced Layer 3 bypass is enabled, using the full 16-bit value as the Layer 3 autoscroll Y speed. $145B is also used during the credits for various purposes. During the Yoshi House portion, it's used as a counter for the number of Yoshi eggs hatched. It's also used as for a timer to transition from the Yoshi House cutscene to the enemy roll, and subsequently as a timer for each screen of the enemy credits.Misc.2
$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
$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
$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
$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
$7E173DExtended sprite Y speed. Last two bytes reserved for fireballs.Sprites10
$7E1747Extended sprite X speed. Last two bytes reserved for fireballs.Sprites10
$7E17D8Spinning coin from block Y speed. $20-$9F will terminate the sprite and cause a score sprite to appear.Sprites4
$7E17DCAccumulating fraction bits for fixed point spinning coin from block Y speed.Sprites4
$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
$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
$7E18AAMorton 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.Sprites2
$7E18BCFloating skull speed. It's set to #$00 in the sprite initial routine, and set to #$0C when the player touches the sprite.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
$7E1B7CAccumulating 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.Overworld1
$7E1B7DAccumulating 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.Overworld1
$7E1DF7Used 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 they gets launched in the air. By default the maximum is #$04, though this cap can be altered by editing $04:9E70/0x22070.Player1
$7E1E01During levels, holding A and pressing L will cycle this address through the values 00, 01, 02. The value, however, is only actually read by the unused free-roam debug code found at $00CC86 (enabled via the edit described at [url=https://smwc.me/m/smw/rom/00CC84]$00CC84[/url]). When enabled, the values correspond to: 00 = off, 01 = enable max P-speed, 02 = enable no-clip free roam. Use [url=https://www.smwcentral.net/?p=tweaks&a=details&id=190]this tweak[/url] to disable the cycling, rendering the address truly empty to use as free RAM (cleared at reset and title screen load). Player1
$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
$7EB900During level load, if using a background Layer 2 tilemap in a level, this is table is temporarily used to hold the low byte of each tile. Format: Background is split into two 16x27 rectangles, followed by 160 $25 bytes that are never actually read. The high bytes of each tile are at [url=https://smwc.me/m/smw/ram/7EBD00]$7EBD00[/url]. This table also used as an extension of the GFX decompression buffer at [url=https://smwc.me/m/smw/ram/7EAD00]$7EAD00[/url]. As with that address, during a level, it may be used to hold additional data for the level's AN2 GFX file. In the original game, some of the RAM in this table is also used on the overworld for a number of 40-byte tables relating to the switch palace's block animation:
  • [b]$7EB900[/b] - Switch block X position, high byte
  • [b]$7EB928[/b] - Switch block Y position, high byte
  • [b]$7EB950[/b] - Switch block Z position, high byte
  • [b]$7EB978[/b] - Switch block X position, low byte
  • [b]$7EB9A0[/b] - Switch block Y position, low byte
  • [b]$7EB9C8[/b] - Switch block Z position, low byte
  • [b]$7EB9F0[/b] - Switch block X speed
  • [b]$7EBA18[/b] - Switch block Y speed
  • [b]$7EBA40[/b] - Switch block Z speed
  • [b]$7EBA68[/b] - Accumulating fraction bits for fixed point switch block X speed
  • [b]$7EBA90[/b] - Accumulating fraction bits for fixed point switch block Y speed
  • [b]$7EBAB8[/b] - Accumulating fraction bits for fixed point switch block Z speed
With Lunar Magic, these tables instead get moved over to [url=https://smwc.me/m/smw/ram/7FC500]$7FC500[/url] ([url=https://smwc.me/m/smw/ram/418800]$418800[/url] on SA-1).
Blocks1024
$7FC300Used by Lunar Magic v1.70 as a Map16 high byte buffer. Lunar Magic also moves the tables used for the overworld's switch palace block animation from [url=https://smwc.me/m/smw/ram/7EB900]$7EB900[/url] to here:
  • [b]$7EC500[/b] - Switch block X position, high byte
  • [b]$7EC528[/b] - Switch block Y position, high byte
  • [b]$7EC550[/b] - Switch block Z position, high byte
  • [b]$7EC578[/b] - Switch block X position, low byte
  • [b]$7EC5A0[/b] - Switch block Y position, low byte
  • [b]$7EC5C8[/b] - Switch block Z position, low byte
  • [b]$7EC5F0[/b] - Switch block X speed
  • [b]$7EC618[/b] - Switch block Y speed
  • [b]$7EC640[/b] - Switch block Z speed
  • [b]$7EC668[/b] - Accumulating fraction bits for fixed point switch block X speed
  • [b]$7EC690[/b] - Accumulating fraction bits for fixed point switch block Y speed
  • [b]$7EC6B8[/b] - Accumulating fraction bits for fixed point switch block Z speed
Misc.1024