AddressDescriptionTypeSize
$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
$7E0057Used in the level loading code. It's the position within the subscreen. Format: yyyyxxxx, where yyyy is the Y position (units of 16 pixels) and xxxx is the X position.Blocks1
$7E0059Used in the level loading routine as an indicator for the size of the object, or extended object type depending on what object is being loaded. Could be used as scratch RAM (except in ObjecTool and similar codes).Blocks1
$7E005AUsed in the level loading routine as the object number. Could be used as scratch RAM (except in ObjecTool and similar codes).Blocks1
$7E005BScreen mode: CD----Vv. C = Collision with either Layer 2 or Layer 3. D = Disable collision with Layer 1. V = Vertical Layer 2. v = Vertical Layer 1. - = unused. For the most part, this address is managed by a table at [url=https://smwc.me/m/smw/rom/058417]$058417[/url], which is indexed by the level mode setting. The only exception to this is that the C bit may also get set if Layer 3 tides are active.Misc.1
$7E005DNumber of screens in level (equivalent to the "number of screens" setting in Lunar Magic). Note that there is no differentiation here between horizontal and vertical levels, so you will need to check that seperately before using this address to handle the maximum X or Y position of something. See [url=https://smwc.me/m/smw/ram/7E005E]$5E[/url] instead for specifically horizontal levels, or [url=https://smwc.me/m/smw/ram/7E005F]$5F[/url] for specifically vertical levels. Also set to FF in Ludwig and Reznor's boss rooms. Instead, those rooms used a fixed width of 1.5 screens.Misc.1
$7E005EIn horizontal levels, used as the level's width in screens, i.e. the screen number (plus 1) at which the camera should stop scrolling rightwards. Equivalent to the "number of screens" dropdown in Lunar Magic's "Change Properties in Header" dialogue. Not used in vertical levels, where it is always set to 01; see [url=https://smwc.me/m/smw/ram/7E005F]$5F[/url] instead. Also set to 00 in Ludwig and Reznor's boss rooms. Instead, those rooms used a fixed width of 1.5 screens.Camera1
$7E005FIn vertical levels, used as the level's height in screens, i.e. the screen number (plus 1) at which the camera should stop scrolling downwards. Equivalent to the "number of screens" dropdown in Lunar Magic's "Change Properties in Header" dialogue. Not used in horizontal levels, where it is always set to 01; see [url=https://smwc.me/m/smw/ram/7E005E]$5E[/url] instead.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
$7E006524-bit pointer to layer 1 data - both level and overworld. Also used during the staff roll sequence of the credits to hold some data about the current line being uploaded to VRAM: - [b]$65-$66[/b] is used to hold the first two bytes of the stripe image header for the current line (in little endian), mainly for keeping track of the Y position. - [b]$67[/b] tracks the current line number being written, with a line defined as two consecutive 8x8 rows.Pointer3
$7E006B24-bit pointer to low byte of Map16 block data. Used during level load.Pointer3
$7E006E24-bit pointer to high byte of Map16 block data. Used during level load.Pointer3
$7E0077Player blocked status. Used to check which sides of Mario are being blocked by solid tiles. Format: S--M^v<>
  • M - Mario is inside of a tile (BodyInside).
  • ^ - There is a tile above Mario (MarioBelow / HeadInside).
  • v - There is a tile below Mario (MarioAbove).
  • < - There is a tile to the left of Mario (MarioSide).
  • > - There is a tile to the right of Mario (MarioSide / HeadInside).
  • S - Special bit indicating Mario is touching the side of the screen in a level that has horizontal scrolling disabled. Intended for autoscrollers.
The game kills Mario if the M, ^, and v bits are all set. If either the < or > bits are set, it will push Mario 1 pixel to the side per frame until he's out of the block. Note that tiles 11E (turnblock) and 152 (invisible solid block) are explicitly coded to never set the M bit.
Player1
$7E0079Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E007CEmpty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E0085Water level flag. #$00 = No; #$01 = Yes.Flag1
$7E0086Slippery level flag. #$00 = No; #$01 through #$7F = Half-slippery; #$80 through #$FF = Yes. Possible values in the clean ROM are #$00 and #$80.Flag1
$7E0087Empty. Cleared on reset, titlescreen load, overworld load and level load. Note that this address is used as freeram by the SA-1 patch.Empty1
$7E0088How long the player goes into a pipe until they warp to another level. Also used as a timer in the castle destruction scenes for holding inputs.Player1
$7E0094Player X position (16-bit) within the level, next frame (calculates player position one frame ahead, as opposed to $D1). It's also used as a player X position on-screen on the overworld border. NOTE: During player interaction with blocks on Layer 2, this value is modified to be relative to Layer 2's position rather than Layer 1. This can be checked via $1933, and can be offset back to Layer 1 by subtracting $26.Player2
$7E0096Player Y position (16-bit) within the level, next frame (calculates player position one frame ahead, as opposed to $D3). It's also used as a player Y position on-screen on the overworld border. NOTE: the player's Y position is not affected by their powerup, nor whether they are crouching; the point will always be 32 pixels above their feet. However, if riding on Yoshi, their Y position does get offset 16 pixels upwards. Additionally, during player interaction with blocks on Layer 2, this value is modified to be relative to Layer 2's position rather than Layer 1. This can be checked via $1933, and can be offset back to Layer 1 by subtracting $28.Player2
$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
$7E00CE24-bit pointer to level's sprite data.Pointer3
$7E00D1Player X position (16-bit) within the level, current frame (as opposed to [url=https://smwc.me/m/smw/ram/7E0094]$94[/url]).Player2
$7E00D3Player Y position (16-bit) within the level, current frame (as opposed to [url=https://smwc.me/m/smw/ram/7E0096]$96[/url]).Player2
$7E00F0Empty. Cleared on reset and titlescreen load. Lunar Magic makes use of a portion of this space (currently $F9-$FF, though subject to change) for various purposes; see details for a list. Most notably, $FE is set to the current level ID plus 1 (so Yoshi's Island 1 would store #$0106 here), with #$0000 being used for non-standard levels like the No Yoshi entrance.Empty16
$7E0100Game mode. This manages directing to the different processing modes of the game, such as being in a level, being on the overworld, or being in a loading screen.Misc.1
$7E0109When set to a non-zero value, the overworld loading routine is overridden by loading a level value stored here, minus #$24 if it's above #$24. For example, the intro level (level C5) is loaded this way by storing #$E9 to this address. Depending on whether the player is on the main overworld or a submap, the level in question is either in the 0xx or 1xx area.Misc.1
$7E010BStack. The first two bytes is the current level number in most hacks.Misc.245
$7E04A0HDMA table for windowing effects, such as with the keyhole, level ending and titlescreen.Misc.448
$7E0660Gets overwritten by the HDMA table for the level ending circle. If the player gets above or below the borders of the screen, it can even run into $7E:0680 and beyond. Otherwise cleared on reset and titlescreen load, but usage as empty RAM is definitely not recommended.Misc.32
$7E0703The entire palette. It is only uploaded to CGRAM during the level loading routine. Also used during overworld load, but not all of it.Palettes512
$7E0905Copy of palettes 0-F from [url=https://smwc.me/m/smw/ram/7E0703]$0703-$08F2[/url]. The original game only includes the first half of palette F (i.e. up to and including color F7). It is used in overworld path events fading in ($04EAA0), and level ending fade in/out ($00AF9D). Lunar Magic may expand this up through $0B05 to include the entirety of palette F in order to support palette ExAnimations.Palettes496
$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
$7E0BF6Used for multiple purposes:
  1. During loading screen messages (MARIO START, TIME UP, GAME OVER, BONUS GAME), temporarily holds the decompressed GFX for tiles 4A-4F and 5A-5F of SP1 so that they can be restored afterwards. Lunar Magic disables this as it overwrites those anyway when it loads the level's GFX files.
  2. On the overworld, may contain decompressed animation data, continued from [url=https://smwc.me/m/smw/ram/7E0AF6]$0AF6[/url].
  3. Lunar Magic 3.00+ uses this region to support the expanded horizontal level system; see details.
Misc.384
$7E0D84Used in Player Graphics DMA routine. This holds the amount of tiles to load. Is #$0A in levels (because of Yoshi) and #$06 on the overworld. If it's set to zero, the player palette isn't reloaded. The presents screen makes use of that.Misc.1
$7E0D9BActivates different IRQ/NMI behavior for various game modes, depending on the following values: #$00 = Regular level. #$01 = Mario Start, Time Up, etc. + Title Screen + Castle destruction scene. #$02 = Overworld. #$80 = Iggy's and Larry's battle mode. #$C0 = Reznor's, Morton's, Roy's, and Ludwig's battle mode. #$C1 = Bowser's battle mode.Misc.1
$7E0D9DMain Screen and Window logic mask setting of current level mode (000abcde - a = Object layer; b = Layer 4; c = Layer 3; d = Layer 2; e = Layer 1). Appears as TM in Lunar Magic. Mirror of SNES registers $212C and $212E; transfer only occurs on level load.Hardware mirror1
$7E0D9ESub Screen and Window logic mask setting of current level mode (000abcde - a = Object layer; b = Layer 4; c = Layer 3; d = Layer 2; e = Layer 1). Appears as TD in Lunar Magic. Mirror of SNES registers $212D and $212F; transfer only occurs on level load.Hardware mirror1
$7E0DB0Current mosaic pixel size on level load. Mirror of SNES register $2106, though bits 0 and 1 are always set ($2106 = $7E:0DB0 | #$03).Hardware mirror1
$7E0DB1Is used to keep a mode active. If the respective value is positive, the game mode doesn't change. This is primarily used in the fading routines (example: from overworld to level and vice versa).Timer1
$7E0DC0Green star block coin counter. Starts at 30 (#$1E) at the beginning of a level, and decrements for each coin that is collected. Adjusts content of green star block when it hits zero. (A 1-Up mushroom comes out, instead of a spinning coin.) It is also used in Chocolate Island 2 to count how many coins have been collected since the start of the level, and determine what sublevel data should be loaded.Counter1
$7E0DC1Player can carry Yoshi over levels flag. #$00 = can't carry over levels; #$01 = can carry over levels.Yoshi1
$7E0DD4This address is effectively the high byte of $0DD3 on the overworld and should not be touched there, though in levels it is unused. It is also referenced once as the low byte of $0DD5, though its value isn't used there. Cleared on reset and titlescreen load, and when Mario starts walking on an overworld path.Should be 001
$7E0DD5Used to indicate how a level has been exited, and hence what events to activate on the overworld.Misc.1
$7E0DDABack-up of the music register. Gets its value from the level music table at $05:84DB. Bit 7 of this address is set when the player has a star powerup or presses a P-switch; when this is cleared again, the music ends. This address is also set to #$FF when the level ends, either by beating it or by dying. Bit 6 is similar but is used to not reupload all music. This is used when changing from the Mario start screen to the level game mode.Misc.1
$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
$7E0F31In-level timer. Each of its three digits are stored separately:
  • $0F31 = Hundreds (X--)
  • $0F32 = Tens (-X-)
  • $0F33 = Ones (--X)
Counter3
$7E0F40Amount of score to add up to the score total, at level end. Decrements as total score increments.Counter2
$7E0FAELow byte of the angle of the Boo rings. $7E:0FAE is for the first Boo ring active; $7E:0FAF is for the second Boo ring active. Note that this is not reset on level or overworld load.Sprites2
$7E0FB0High byte of the angle of the Boo rings. $7E:0FB0 is for the first Boo ring active; $7E:0FB1 is for the second Boo ring active. Note that this does not reset on level or overworld load.Sprites2
$7E0FBCBoo ring index to level table (see $7E:1938). They are never erased, though, so they will always be reloaded.Sprites2
$7E0FBEUsed as a table of 16-bit pointers to the VRAM data for each of the original game's Map16 tiles (tiles 000-1FF), indexed by tile * 2. Generally references the tables at around [url=https://smwc.me/m/smw/rom/0D8000]$0D8000[/url] (levels, FG), [url=https://smwc.me/m/smw/rom/0D9100]$0D9100[/url] (levels, BG), or [url=https://smwc.me/m/smw/rom/05D000]$05D000[/url] (overworld). Only the lower two bytes of each are included, though, with the bank byte just assumed based on whether the player is in a level or the overworld.Pointer1024
$7E13BFTranslevel number, set during transfer from world map to level. This identifies the first room of the current level. To convert this to a room number (the "level number" in Lunar Magic), if > #$24, then add #$DC. In the clean ROM, the actual formula is more complex. If translevel number > #$24, then subtract #$24. Then check RAM [url=https://www.smwcentral.net/?p=memorymap&game=smw&u=0&address=1F11-1F12&sizeOperation=%3D&sizeValue=®ion=ram&type=*&description=]$1F11/$1F12[/url]. If the player is in a submap (not the big world map), then add #$100. Since the submaps of SMW use translevel numbers > #$24 and the big map uses numbers <= #$24, the simplication is that #$100 - #$24 is #$DC; Lunar Magic forces this simplification to remain.Misc.1
$7E13C0While this is never non-zero in the original SMW, $7E:13BF (level number) is sometimes used in 16bit mode, so using this address for different purposes is a bad idea To make this become useful free RAM, use [url=https://smwc.me/w/260]this tweak[/url]. Cleared on reset and titlescreen load.Should be 001
$7E13C2Used occasionally on the overworld as the high byte of $13C1, and thus should be kept as #$00 there. It is safe to use in levels, however. Cleared on reset, title screen load, and when walking onto a new overworld tile.Should be 001
$7E13C6Used by SMW's cutscenes. Goes from #$01 to #$08 and these values are in the order of the boss battles, e.g. #$01 = Iggy's castle, #$02 = Morton's castle. #$08 is the value used for the credits. Set to #$FF (in conjunction with [url=https://smwc.me/m/smw/ram/7E1493]$7E1493[/url]) to end the level as a boss fight: Mario won't walk during the fanfare, and it will trigger the boss cutscene set in Lunar Magic for the current level (if any). This also works for triggering the credit sequence.Misc.1
$7E13C7Yoshi color. #$04=yellow; #$06=blue; #$08=red; #$0A=green. Refreshes on level changeYoshi1
$7E13CAShow save prompt flag. It actually triggers when you get on a new level tile. #$00 = Don't show save prompt; #$01 = show save prompt.Flag1
$7E13CBThis has been left out in the current SMW version. When you hit a goal tape, and spawn a starman (which never happens), this is set to #$01. Now each time you switch an area in a level, this gets multiplied by 2. When this reaches #$80 (changed area seven times), you will start the area with the star power. The instruction which sets this address to #$01 is located at $00:FB5C.Misc.1
$7E13CDIf set to #$00, the midway point won't trigger if grabbed (it'll still make you big, but it won't set the midway flag). Never has any effect in the original SMW, probably left over from a beta. Lunar Magic disables this effect (see [url=https://smwc.me/m/smw/hijack/00F2DB/]$00F2DB[/url]) and uses this for different purposes. For example, it's used during level load, in the routine at $03BCDC and during level scroll code.Misc.1
$7E13CEMidway Point flag. #$00 = Midway Point not crossed; #$01 = Midway Point crossed. Also used on the overworld as a flag to to indicate the level should activate an event.Flag1
$7E13D4The pause flag for levels, and the "look around the map" flag on the overworld.
  • In a level: #$00 = off, #$01 = Paused
  • On the overworld: #$00 = off, #$01 = Look around, #$02 = Return to Mario
Note that this does not cover instances of temporary pauses during gameplay, though (e.g. L/R scrolling, powerup animations, pipes, etc.), which can instead by checked via [url=https://smwc.me/m/smw/ram/7E009D]$9D[/url].
Flag1
$7E13D6Amount of time to wait until the score-incrementing drumroll begins when you beat a level. Any time you enter a level, this address is set to #$50. Once you beat the level and the number of bonus stars you won and the score is displayed (or just the score if you didn't cut the goal tape), this timer will decrement itself once per frame. Once it reaches a negative value or zero, the drumroll will commence. Once the drumroll ends, this is set to #$30, and then set to zero upon going to the overworld. It serves the same purpose after you beat a boss as well.Timer1
$7E13D7Y position fraction bits for the intro march (walking to Yoshi's House). Treated as 16-bit, but the high byte is effectively unused outside of being written to. With Lunar Magic v3.00, this address gains a new purpose in horizontal levels, being used to hold the height of the level data (in units of pixels). For example, in the original level sizes, this value is set to 0x01B0 (for 0x1B blocks tall). Because the level screen is always 16 blocks wide, this is also the number of blocks per screen column.Overworld2
$7E13D9A pointer to various processes running on the overworld. Also used in the level end march.Pointer1
$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
$7E13E6Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty2
$7E13E9Cape interaction X position within the level. It's adjusted when the cape attack is used.Player2
$7E13EBCape interaction Y position within the level. It's adjusted when the cape attack is used.Player2
$7E13F1Vertical scrolling unlocked flag. When in a level that has its vertical scroll setting set to "No Vertical Scroll at Bottom unless Flying/Etc", this flag controls if the camera is currently locked at the bottom of the level (zero) or unlocked (non-zero). For managing if vertical scrolling is enabled in general, see [url=https://smwc.me/m/smw/ram/7E1411]$1412[/url] instead.Flag1
$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
$7E1403Settings for current layer 3 tide. #$00 - Not a tide image #$01 - Water level changes #$02 - Water level doesn't changeMisc.1
$7E1404If vertical scrolling is enabled and the screen is not currently locked to the bottom of the level, setting this flag tells the screen it needs to scroll upwards to "catch up" to Mario. This is only necessary when other conditions that cause the screen to scroll vertically are not met (such as flying, swimming, climbing, or running with a full P-meter). The original game sets it when the screen is unlocked and Mario is on the ground above the Y position defined at [url=https://smwc.me/m/smw/rom/00F806]$00F806[/url], and clears it once he passes below that line.Flag1
$7E1405Indicates that the player is just about to warp to another level via a pipe, and whether or not Yoshi should be drawn at that point. It is set as soon as $7E:0088 reaches zero, and if Yoshi is inside the warp pipe too, his graphics will be hidden.Flag1
$7E140BEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.Empty2
$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
$7E141ACounter that increments every time a new level is entered (with a door or pipe). This enables you to distinguish when the level has just been entered from the overworld (at which point the value is 00) rather than from a sublevel. Warning: Because this value [i]increments[/i] each time a room is entered rather than simply getting set to 1, after transitioning 256 times, it will overflow and cause problems. That can be fixed with [url=https://www.smwcentral.net/?p=section&a=details&id=14053]this patch[/url].Counter1
$7E141BDetermines if you have played the bonus game before in the same level before. If it is non-zero (meaning you've played the game before), all blocks in the coin game will always be incorrect. Note that if you don't hit a single block the first time playing the game, then this will be zero, and you can play the game again.Flag1
$7E141CWhat type of goal tape has just been hit, for deciding which event to activate after the goal walk is finished. Although this value will still be written in vertical levels, it has no effect due to the goal walk not occurring.Flag1
$7E141DWhether "Mario/Luigi Start!" should be shown or not. Used after a "No-Yoshi" entrance to prevent the actual starting level from showing the text. #$00 = enable; #$01 = disable.Flag1
$7E1425Bonus game flag. If anything non-zero, the bonus game will commence after the level has been cleared.Flag1
$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
$7E1433Scaling factor of the circle for the windowing HDMA effects used with the titlescreen, level ending and keyhole. The closer to zero, the smaller the circle. Loads titlescreen when value becomes #$F0 or higher.Timer1
$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
$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
$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
$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
$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
$7E145FWhen the advanced Layer 3 bypass is enabled, Lunar Magic uses this to hold the Layer 3 horizontal scroll setting, multiplied by 2. Notably, the actual order of these values is different from the order Lunar Magic lists them; see the details table for a full list. During level load, it also temporarily holds the vertical scroll setting as well, encoded using the format vvvvhhhh: - vvvv: Vertical scroll setting. The fifth bit can be found in bit 6 of [url=https://smwc.me/m/smw/ram/7FC01C]$7FC01C[/url]. - hhhh: Horizontal scroll setting. The fifth bit can be found in bit 7 of [url=https://smwc.me/m/smw/ram/7FC01C]$7FC01C[/url]. Empty in original game. Cleared on reset, titlescreen load, overworld load and cutscene load.Misc.1
$7E1461Empty. Cleared on reset, titlescreen load, overworld load and cutscene load. This byte functions as the "high byte" of $7E:1460. SMW does not actually use this byte, however it is overwritten during level load (see $05:BE92). Cleared on reset, titlescreen, overworld, level (with the exception of boss rooms) and cutscene load.Empty1
$7E146CWhen the level is using the advanced Layer 3 bypass, Lunar Magic (v3.10+) uses this to hold the initial Layer 3 Y position/offset (multiplied by #$10). This value is then used during the level to calculate the position of Layer 3 after scrolling.Misc.2
$7E1493End level timer. Setting to #$FF will end the level as a goal sphere / boss fight (use in conjunction with [url=https://smwc.me/m/smw/ram/7E13C6]$7E13C6[/url]). Peace sign is shown here when the timer hits #$28. The switches (yellow, green, red and blue) set it to #$08.Timer1
$7E1494Direction of the color fading at level end. Only the highest bit is ever read. #$00 = getting darker; #$80 = getting brighter.Palettes1
$7E1495Timer that controls fading and the level end scorecard. Increments and stops when it hits #$40. While it's ticking, the colors will fade; when it's done, $7E:003A through $7E:003D won't be read and the Layer 3 scrolling will be locked.Timer1
$7E149FCape flight takeoff timer. When the player has a feather and a max P-meter and they jump, this timer gets set to #$50. While this timer is set, the player can receive additional upwards boosts during the jump. If the player starts to descend and meets the additional conditions for flight (i.e. not spinjumping, riding Yoshi, carrying something, or sliding from a slope), then the player will start flying. This timer has two quirks. First is that it will not actually decrease to 0 while the player is in the air (stopping at 2). They won't be able to receive the vertical boosts anymore, but they'll still be able to gain flight so long as they do not touch the ground. The second quirk is that it does not reset when going into another sublevel, allowing the player to "carry over" flying if the timer is sufficient enough that they can get back into the air before the timer runs out.Timer1
$7E14ABBonus game ending timer. Does nothing in a normal level, but during a bonus game, setting it will end the bonus game and return to the overworld. At #$44 it starts the "end bonus game" music, and at #$01 it actually fades to the overworld. Timer1
$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
$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
$7E1696Empty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.Empty1
$7E17BBContains the low byte of the level number when loading the levels. It's cleared when the loading is done. Can be used as freeram, as the value from this is never actually used anywhere.Misc.1
$7E1864Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E1869Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty2
$7E1879Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E188AEmpty. 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).Empty1
$7E188EEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.Empty1
$7E18A6Empty, unused RAM. Referenced at $01CF9E (Morton's code) but never actually used. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E18B4Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E18B7Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$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
$7E18BBEmpty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E18C5Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty8
$7E18D8Empty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.Empty1
$7E18DBSet 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.Empty1
$7E18E6Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$7E18F6Empty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.Empty1
$7E1900Bonus stars gained at level end - decrements to zero.Counter1
$7E1908Empty. Cleared on reset, titlescreen load, overworld load and level load.Empty1
$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
$7E1925Level mode settings from level header.Misc.1
$7E1928One 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 [url=https://smwc.me/m/smw/ram/7E1BA1]$1BA1[/url]. It is also used in the credits as a pointer to which background should be used for which part of the credits roll.Misc.1
$7E192ARAM address used to hold some information while loading a level. Format: swaaaaaa. s = slippery level, w = water level, a = player action. In the original game, if one of bits 3-5 is set, the player action will be "vertical pipe exit downwards, water level", though with Lunar Magic, these extra bits are just ignored. Lunar Magic also uses the w bit during a screen exit for temporarily holding the water/midway flag from [url=https://smwc.me/m/smw/ram/7E19D8]$19D8[/url] as well. Note that the s and w bits are cleared after being transferred to $85/$86, so they'll both be 0 when read mid-level.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
$7E192DFG palette settings from the level header.Misc.1
$7E192ESprite palette settings from the level header.Misc.1
$7E192FBackground color settings from the level header.Misc.1
$7E1930Background palette settings from the level header.Misc.1
$7E1931FG/BG GFX setting from the level header. Also used on the overworld and in cutscenes to determine the graphics files that should be uploaded. FE and FF are special values used by Mode 7 levels in order to upload GFX27 instead.Misc.1
$7E1932Copy of the tileset setting from the level header. Never read by anything, as [url=https://smwc.me/m/smw/ram/7E1931]$1931[/url] is used instead.Misc.1
$7E1933Layer being processed. #$00 = Layer 1; #$01 = Layer 2/3 (depending on which is interactive). Used in both level loading routine and processing interactions.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
$7E19B8Screen exit table, low bytes. Combined with the table at [url=https://smwc.me/m/smw/ram/7E19D8]$19D8[/url], this connects doors and exit-enabled pipes to their correct entrances. This table specifically contains the lower 8 bits of the destination level/secondary exit. This table is indexed by the screen number Mario is on. In regular horizontal levels, this is the high byte of his X position, and in vertical levels, the high byte of his Y position. With the expanded horizontal level mode setting added by LM v3.00+, the current screen number the player is on can be obtained by calling the routine at [url=https://smwc.me/m/smw/rom/03BA02]$03BCDC[/url].Misc.32
$7E19D8Screen exit table, high bytes. Combined with the table at [url=https://smwc.me/m/smw/ram/7E19B8]$19B8[/url], this connects doors and exit-enabled pipes to their correct entrances. This table specifically contains the upper 5 bits of the destination level/secondary exit, as well as some additional information about the exit, in the format HHHHwush:     h: High bit of destination level     HHHHh: High byte of destination secondary exit     s: Secondary exit flag     u: LM-modified flag (if unset, the entire byte is ignored and SMW's original exit system is used instead)     w: Water level flag (secondary exits) or midway flag* (primary exits) [size=8]* Only used if the destination level has "use seperate settings for midway entrance" set[/size] This table is indexed by the screen number Mario is on. In regular horizontal levels, this is the high byte of his X position, and in vertical levels, the high byte of his Y position. With the expanded horizontal level mode setting added by LM v3.00+, the current screen number the player is on can be obtained by calling the routine at [url=https://smwc.me/m/smw/rom/03BA02]$03BCDC[/url]. This table goes unused in the original game, although the h bit for each screen is still written. Instead, the original game just calculates high bit of the destination level/secondary exit based on whether the level is on the main map (0) or submap (1), and the s bit is controlled globally for the entire level by [url=https://smwc.me/m/smw/ram/7E1B93]$1B93[/url].Misc.32
$7E1B78This 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. Lunar Magic also uses it in levels when the "Fix Layer 3 scroll sync" option is enabled, as the next frame's Layer 3 X position (as opposed to the current frame's one in [url=https://smwc.me/m/smw/ram/7E0022]$22[/url]).Overworld2
$7E1B7AThis address serves as an index to [url=https://smwc.me/m/smw/rom/049086]$049086[/url] and [url=https://smwc.me/m/smw/rom/0490CA]$0490CA[/url], which are used to get what hard coded tile to use for the current tile the player is walking on. Lunar Magic also uses it in levels when the "Fix Layer 3 scroll sync" option is enabled, as the next frame's Layer 3 X position (as opposed to the current frame's one in [url=https://smwc.me/m/smw/ram/7E0024]$24[/url]).Overworld2
$7E1B7EThis 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.Overworld1
$7E1B7FEmpty. 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.Empty1
$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
$7E1B93Secondary exit flag. When a screen exit is taken, this controls whether the exit goes to the primary entrance of a level or a secondary entrance. In the original game, this is controlled by the last screen exit present in the level's object data, and affects every screen exit in the level (so you can not have a mixture of primary and secondary exits in a single level). Lunar Magic modifies the system so that this flag instead comes from the screen exit's data at [url=https://smwc.me/m/smw/ram/7E19D8]$19D8[/url].Misc.1
$7E1B95This 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. As a byproduct, Yoshi will have wings in that level, and 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.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
$7E1BA1One 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.Misc.1
$7E1BE6Which 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.Blocks256
$7E1CE8Which 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.Blocks256
$7E1DEAOverworld event to run at level end. #$FF means that no event will be run.Overworld1
$7E1DEBEvent 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.Overworld2
$7E1DEDLast event tile to load to the overworld during a given event, set at level end.Overworld2
$7E1DFDEmpty. 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).Empty2
$7E1E00Empty. Cleared on reset, titlescreen, overworld and level load (the latter two due to new music banks being uploaded).Empty1
$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
$7E1EA2Overworld level setting flags, location within the table corresponds to $7E13BF. Format: bmesudlr. b = level is beaten. m = midway point has been passed. e = unused in SMW, Lunar Magic turns it into the "no entry if level already passed" flag. s = unused in SMW, Lunar Magic turns it into the "open Save Prompt when level is beaten" flag. u = enable walking upwards. d = enable walking downwards. l = enable walking leftwards. r = enable walking rightwards. Setting the high bit of $7E1EEB will enable the special stage features (autumn overworld palettes, etc.) in the ORIGINAL game. The bit is set when you beat level 125 (FUNKY).Overworld96
$7E1F1FMario's overworld X position divided by #$10 (#16). Used to determine which layer 1 tile the player is standing on when drawing the level name, deciding which level the player is entering, and used during the overworld movement code.Player2
$7E1F21Mario's overworld Y position divided by #$10 (#16). Used to determine which layer 1 tile the player is standing on when drawing the level name, deciding which level the player is entering, and used during the overworld movement code.Player2
$7E1F23Luigi's overworld X position divided by #$10 (#16). Used to determine which layer 1 tile the player is standing on when drawing the level name, deciding which level the player is entering, and used during the overworld movement code.Player2
$7E1F25Luigi's overworld Y position divided by #$10 (#16). Used to determine which layer 1 tile the player is standing on when drawing the level name, deciding which level the player is entering, and used during the overworld movement code.Player2
$7E1F27Switch palace activation flags. $00 = off (outline passable switch palace blocks), $01 = on (solid switch palace blocks): $7E1F27: Green $7E1F28: Yellow $7E1F29: Blue $7E1F2A: Red Note: effects to the blocks will only apply during level loading when these flags are changed.Flag4
$7E1F2ENumber of events triggered. Can be used as a levels beaten counter.Counter1
$7E1F2F"Collected five or more Yoshi Coins" flags for each level. Each of the 8 bits of each byte represents a different level, based on the level's translevel ID from [url=https://smwc.me/m/smw/ram/7E13BF]$7E13BF[/url]. If a level's corresponding bit is set, Yoshi Coin objects will be skipped when the level is reloaded. Notably, the levels within each byte are ordered from most-significant bit to least-significant (e.g. level 0 uses bit 7 of $1F2F, while level 7 uses bit 0). To find a specific level's flag, start with the level's translevel ID; use id >> 3 to find its byte, and 1 << (7 - (id & 7)) to get a bitmask for its bit.Flag12
$7E1F3C"Collected invisible 1-Up flags" flags for each level. Each of the 8 bits of each byte represents a different level, based on the level's translevel ID from [url=https://smwc.me/m/smw/ram/7E13BF]$7E13BF[/url]. If a level's corresponding bit is set, the invisible 1-Up checkpoint objects will be skipped when the level is reloaded. Notably, the levels within each byte are ordered from most-significant bit to least-significant (e.g. level 0 uses bit 7 of $1F3C, while level 7 uses bit 0). To find a specific level's flag, start with the level's translevel ID; use id >> 3 to find its byte, and 1 << (7 - (id & 7)) to get a bitmask for its bit.Flag12
$7E1FEE"Collected 3-Up moon" flags for each level. Each of the 8 bits of each byte represents a different level, based on the level's translevel ID from [url=https://smwc.me/m/smw/ram/7E13BF]$7E13BF[/url]. If a level's corresponding bit is set, 3-Up moon objects will be skipped when the level is reloaded. Notably, the levels within each byte are ordered from most-significant bit to least-significant (e.g. level 0 uses bit 7 of $1FEE, while level 7 uses bit 0). To find a specific level's flag, start with the level's translevel ID; use id >> 3 to find its byte, and 1 << (7 - (id & 7)) to get a bitmask for its bit.Flag12
$7EAD00GFX file decompression buffer. Decompressed as 3bpp (3kb) for unexpanded GFX and as 4bpp for expanded. It may also use the RAM following this (up to $7ECCFF) for larger files, such as the LT3 or AN2 slots. The latter continues to remain here after level/overworld load, and is where ExAnimations will pull their data from.Graphics3072
$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
$7EBD00During level load, if using a background Layer 2 tilemap in a level, this table is temporarily used to hold the high byte of each tile. Same format as the low-byte table at [url=https://smwc.me/m/smw/ram/7EB900]$7EB900[/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.Blocks1024
$7EC800Map16 Low Byte Table. For the high bytes, see [url=https://smwc.me/m/smw/ram/7FC800]$7FC800[/url]. In horizontal levels, $1B0 tiles per screen, where each screen can be indexed using the format [code inline]%-------y yyyyxxxx[/code]. Addresses $7EFE00-$7EFFFF (512 bytes) are unused. In vertical levels, $200 bytes per screen, with the format [code inline]%--sssssx yyyyxxxx[/code]. 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 [url=https://www.smwcentral.net/?p=section&a=details&id=19816]this document[/url] for the layout in other level dimensions. [b]On the overworld:[/b] [code inline]$7EC800-$7ECFFF[/code] (2048 bytes) is used as the Layer 1 tilemap for the overworld. To index this table, use [url=https://smwc.me/m/smw/ram/7E1F11]$1F11[/url], [url=https://smwc.me/m/smw/ram/7E1F1F]$1F1F[/url], and [url=https://smwc.me/m/smw/ram/7E1F21]$1F21[/url] to find Mario (or [url=https://smwc.me/m/smw/ram/7E1F12]$1F12[/url], [url=https://smwc.me/m/smw/ram/7E1F23]$1F23[/url], and [url=https://smwc.me/m/smw/ram/7E1F25]$1F25[/url] for Luigi). X position / 16: [code inline]%---- ---- ---X xxxx[/code] Y position / 16: [code inline]%---- ---- ---Y yyyy[/code] Index to this table: [code inline]%---- -SYX yyyy xxxx[/code] * If the player is on a submap, the S bit is set. [code inline]$7ED000-$7ED7FF[/code] (2048 bytes) is used as a table that contains the translevel numbers for every Layer 1 tile, in the format of [url=https://smwc.me/m/smw/ram/7E13BF]$13BF[/url]. [code inline]$7ED800-$7EDFFF[/code] (2048 bytes) is used as a table that contains the path direction settings for every Layer 1 tile, in the format of [url=https://smwc.me/m/smw/rom/04D678]$04D678[/url]. [code inline]$7EE400-$7EEBFF[/code] (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.Blocks14336
$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
$7FC080Used by Lunar Magic as frame counters for each Level/Submap ExAnimation. One byte per slot.Counter32