$7E00D5
|
3 bytes |
Pointer |
Pointer to X and Y positions of Wiggler segments. Table at $7F9A7B. |
$7E00D8
|
12 bytes |
Sprites |
Sprite Y position, low byte. |
$7E00E4
|
12 bytes |
Sprites |
Sprite X position, low byte. |
$7E00F0
|
16 bytes |
Empty |
Used by Lunar Magic for various purposes.
$7E:00FE is the current level number plus 1 (so Yoshi's Island 1 would store #$0106 here). It's used for the custom palette loading code. #$0000 means that the custom palette won't be loaded (this is probably used for castle intros and/or credits).
The rest is unknown.
Originally, this address is empty, and it's cleared at reset, titlescreen and overworld load. |
$7E0100
|
1 byte |
Misc. |
Game Mode. |
Valid Values
|
$7E0101
|
4 bytes |
Misc. |
Currently loaded sprite GFX files - stored in reverse order. |
$7E0105
|
4 bytes |
Misc. |
Currently loaded layer GFX files - stored in reverse order. |
$7E0109
|
1 byte |
Misc. |
When 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. |
$7E010A
|
1 byte |
Misc. |
Current save file number. |
$7E010B
|
245 bytes |
Misc. |
Stack. The first two bytes is the current level number in most hacks. |
$7E0200
|
544 bytes |
I/O |
OAM table - handles all sprite tiles. There are 0x80 (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.
Note that tiles are drawn to the screen from top to bottom of the table; that is, a sprite in slot 0 will always appear visually on top of a sprite in slot 1.
The actual OAM table consists of two sub-tables:
- $7E0200-$7E03FF (512 bytes): Each slot consists of 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 (which is offscreen).
- $7E0400-$7E041F (32 bytes): Each slot gets 2 bits, used to handle a 9th bit of the X position (for handling sprite tiles that go past the left edge of the screen) and 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 $0420 instead.
Various tiles are documented here. Note that:
Code$7E0310-$7E0313 is for the player's upper half
$7E0314-$7E0317 for the player's lower half
$7E0318-$7E031B is for the player's hand. |
$0400 formatting
|
$7E0420
|
128 bytes |
Sprites |
A table that determines the size of a sprite tile - 8x8 (#$00) or 16x16 (#$02). Each byte corresponds to four OAM bytes. Stores to $7E:0400-$7E:041F (where each two bits correspond to four OAM bytes.)
The lowest bit (#$01) is also used for the high bit of the X position. |
$7E04A0
|
448 bytes |
Misc. |
HDMA table for windowing effects, such as with the keyhole, level ending and titlescreen. |
$7E0660
|
32 bytes |
Misc. |
Gets 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. |
$7E0680
|
1 byte |
Palettes |
Index to the palette updating tables, that are uploaded every frame.
#$00 = Use table at $7E:0682.
#$03 = Use table at $7E:0905.
#$06 = Use table at $7E:0703. |
$7E0681
|
1 byte |
Palettes |
Index to the table at $7E:0682 during the time when data is stored to this table in the lightning, Magikoopa and Big Boo Boss codes. |
$7E0682
|
19 bytes |
Palettes |
Used for uploading palettes dynamically. SMW uses this in the lightning/Magikoopa/Big Boo Boss palette effects. $7E:0682 holds the amount of bytes to transfer, $7E:0683 holds the color number (stored to SNES register $2121), the bytes afterwards hold the actual color values transferred to the CGRAM. Further, this table may be indexed by $7E:0681 to add more color destinations; it's terminated by a #$00. The format is the same as before, just at the new location.
This table doesn't actually have to end at $7E:0694, but SMW never goes beyond this. As such, the area after this address is listed as "empty". |
$7E0695
|
108 bytes |
Empty |
100 bytes used in LM 1.70+ for VRAM modification.
In the clean ROM, it's empty (cleared on reset and titlescreen load). |
$7E0701
|
2 bytes |
Palettes |
Background color. Used during gameplay in conjunction with $2132. |
$7E0703
|
512 bytes |
Palettes |
The entire palette. It is only uploaded to CGRAM during the level loading routine. Also used during overworld load, but not all of it. |
$7E0903
|
2 bytes |
Palettes |
Copy of background color $7E:0701/2. |
$7E0905
|
496 bytes |
Palettes |
Copy of palettes 0-F from $0703-$08F2. Only the first half of palette F is included. It is used in overworld path events fading in ($04:EAA0), and level ending fade in/out ($00:AF9D). |
$7E0AF5
|
1 byte |
Empty |
Cleared on reset and titlescreen load. Also cleared after a boss had been beaten - this can be disabled by changing [9C 5C 0A] at $00:B08D to [80 01 EA]. |
$7E0AF6
|
256 bytes |
Misc. |
Used for three different things:
1. Decompressed overworld graphics, animated tiles. For that it also cooperates with $7E:0BF6-$7E:0C55.
2. Iggy's/Larry's platform interaction. (16x16 tiles in a 16x16 square.)
3. Various tables for the Yoshi eggs at the credits, such as how much time must be waited until a new egg breaks, Y speed tables. See this post.
In addition, Lunar Magic 3.00+ uses part of this region to support the expanded horizontal level system. Addresses are as follows:
$0BEE: Used if the Smart Spawn option is set to check if the screen has scrolled horizontally this frame.
$0BEF: Used if the Smart Spawn option is set to check if the screen has scrolled vertically this frame.
$0BF0-$0BF1: Minimum Y offset from the screen that a sprite can be in order to spawn. Set depending on the spawn range index.
$0BF2-$0BF3: Maximum Y offset from the screen that a sprite can be in order to spawn. Set depending on the spawn range index.
$0BF4: Extra flags for sprites, s-----rr. s = Smart Spawn flag, rr = spawn range index, - = unused bits.
$0BF5: Extra flags and horizontal level mode, tbnmmmmm. t = flags the level as using a non-background Layer 2 or 3, b = show the bottom row of the level, n = use the new sprite system, mmmmm = horizontal level mode (see here for more info). |
$7E0BF6
|
384 bytes |
Misc. |
Decompressed GFX for tiles #$4A-#$4F, #$5A-#$5F of SP1.
In addition, Lunar Magic 3.00+ uses this region to support the expanded horizontal level system. Addresses are used as follows:
$0BF6-$0C55: Table of up to 32 24-bit pointers to the low byte of the object data in each screen. These point to locations in $7EC800. $0C26-$0C55 is used for Layer 2/3 data in levels with a Layer 2/3 foreground.
$0C56-$0CB5: Table of up to 32 24-bit pointers to the high byte of the object data in each screen. These point to locations in $7FC800. $0C86-$0CB5 is used for Layer 2/3 data in levels with a Layer 2/3 foreground.
$0CB6-$0CD5: Copy of the low bytes of the table at $0BF6. $0CC6-$0CD5 is used for Layer 2/3 data in levels with a Layer 2/3 foreground.
$0CD6-$0CF5: Copy of the low bytes of the table at $0C56. $0CE6-$0CF5 is used for Layer 2/3 data in levels with a Layer 2/3 foreground.
$0CF6-$0D35: Table of up to 32 16-bit pointers to the sprite data in each screen. These are used to change $CE-$CF.
$0D36-$0D75: Table of up to 32 16-bit values, one for each screen. The low byte is used to modify the sprite's Y position, while the high byte indicates the number of the sprite within the level (or the number of sprites that have been processed in the level so far). |
Follow Us On