SMW Memory Map - Waiting Addresses
Displaying 19 out of 19 waiting addresses.
View: moderated | waiting (19)
- Pages:
- 1
RAM Address | Length | Type | Description | Details | Submitter |
---|---|---|---|---|---|
$7E1413 | 1 byte | Misc. | Horizontal scroll setting for Layer 2. The original game only uses 00 (none), 01 (constant), and 02 (medium), while Lunar Magic expands on the system with additional values up to 1F. Notably, the actual order of these values is different from the order Lunar Magic lists them; see the details table for a full list. | Valid Values | Thomas |
$7E1414 | 1 byte | Misc. | Vertical scroll setting for Layer 2. The original game only uses 00 (none), 01 (constant), 02 (medium), and 03 (slow), while Lunar Magic expands on the system with additional values up to 1F. Notably, the actual order of these values is different from the order Lunar Magic lists them; see the details table for a full list. | Valid Values | Thomas |
$7E145E | 1 byte | Misc. | Used 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 $7FC01C. - 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. |
Thomas | |
$7E145F | 1 byte | Misc. | When 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 $7FC01C. - hhhh: Horizontal scroll setting. The fifth bit can be found in bit 7 of $7FC01C. Empty in original game. Cleared on reset, titlescreen load, overworld load and cutscene load. |
Horizontal Scroll Settings | Thomas |
$7E1460 | 1 byte | Misc. | Direction of movement for the Layer 3 tides. 00 = downwards, 01 = upwards. When the advanced Layer 3 bypass is enabled, Lunar Magic also uses this for the Layer 3 vertical 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. |
Vertical Scroll Settings | Thomas |
$7E1938 | 128 bytes | Sprites | Sprite 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 $161A. Shooters similarly have a table for this at $17B3. 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 $7FAF00, 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. |
PIXI Usage | Thomas |
ROM Address | Length | Type | Description | Details | Submitter |
$00E938 | 84 bytes | Mario physics | Code that handles player interacting with layer 1 and 2. At $00E953-$00E975, handles layer 2 interaction. Before and after JSR CODE_00EADB, it first (temporally) offsets the player's XY position ($94 and $96 add by $26 and $28) so that interaction with layer 2 moves with layer 2, then after the layer 2 prcoessing is done, offsets the player's position back (subtract by $26 and $28 not using pull instructions so that blocks that sets the player's XY position wouldn't be canceled). |
HammerBrother | |
$018DBB | 12 bytes | Sprite subroutine (JSR) | Routine to set X speed for Winged Goomba, Moving Coin, Mushroom, 1UP, and Star. 018DBC and 018DC3 are set to F8 and 08 respectively for left and right speed. Runs Every Frame. |
pacmanboss256 | |
$028752 | 335 bytes | Subroutine (JSL) | A subroutine for spawning bounce sprites from blocks. It continues into the routine at $02887D. Input: $04 - bounce sprite command $05 - value to use in $02887D $06 - speed index (see $02873A and $02873E) $07 - value of $9C the block will turn into Tables: $028789 (9 bytes): Block bounce sprite YXPPCCCT table. First 7 values match with the value in $04 ($1699 value - 1), last two are for commands 0x10 and 0x11 (coloured turn blocks / !-block bounce animation). Codes of interests: $028758 (49 bytes): Break turn block routine. $0287B0 (84 bytes): Stops an existing turn block from rotating $028804 (121 bytes): Actual spawn bounce sprite routine |
Bounce commands Hex Edits | MarioFanGamer |
$02919F | 77 bytes | Subroutine (JSR) | Subroutine which changes a tile at the current bounce sprite's position. It can be jumped to the following addresses:
|
Additional Data | MarioFanGamer |
$029356 | 60 bytes | Subroutine (JSR) | Code that generates a spinning coin at the position of a bounce sprite. This is used to be able to collect a coin with a bounce block. However, this routine doesn't handle the removal of the coin which is instead handled by $0291B8. | MarioFanGamer | |
$029F99 | 9 bytes | Sprite physics | Table for Mario fireball bounce speed. Change to all zeros to make straight fireballs not fly off of slopes at an angle. Use in conjunction with the fireball hit timer at $029FE4. | Format | wye |
$0381CE | 1 byte | Timer | Timer for big boo boss to begin reappearing after turning invisible. Default is #$C0. | mason | |
$03D524 | 336 bytes | Sprite tilemap related | OAM data for the "Mario's adventure is over..." message. Excluding whitespace, each character is defined by four bytes of standard OAM data (X position, Y position, tile, YXPPCCCT), and characters will appear one by one in the order listed. | Thomas | |
$04EC67 | 11 bytes | Subroutine (JSR) | Get the relative (screen) position of the path fade sprite. | MarioFanGamer | |
$0CA204 | 1 byte | Coordinate | The X position where Mario stops in the Yoshi's House at Ending. If you change this value, Peach and Green Yoshi's stopping positions will also change to match Mario's. (The spacing will remain the same, but the positions will shift.) |
Francium | |
$0CF7DF | 2048 bytes | Overworld | Layer 1 map16 data of the overworld, uncompressed. The data is directly copied from there to $7EC800. | MarioFanGamer | |
Hijack Address | Length | Type | Description | Details | Submitter |
$02BFA2 | 4 bytes | Jump (JML/JSL) | Modified by the 8x8 Urchin Eyes patch, by Fernap. JML, modifies the Urchin sprite's graphics routine to draw its eyes as two 8x8 tiles. |
Maarfy | |
$02BFC3 | 5 bytes | Jump (JML/JSL) | Modified by the 8x8 Urchin Eyes patch, by Fernap. JSL : RTS, modifies the parameters of the Urchin sprite's FinishOAMWrite call to acknowledge an extra tile + mixed tile sizes. |
Maarfy | |
- Pages:
- 1