SMW Memory Map - Waiting Addresses
Displaying 29 out of 29 waiting addresses.
View: moderated | waiting (29)
- Páginas:
- 1
RAM Address | Length | Type | Description | Details | Submitter |
---|---|---|---|---|---|
$7E0072 | 1 byte | Player | Player 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. |
HammerBrother | |
$7E1419 | 1 byte | Sprites | How 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).
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. |
HammerBrother | |
$7E146C | 4 bytes | Empty | Empty. Cleared on reset, titlescreen load, overworld load and cutscene load. $7E146C-$7E146D is used by Lunar Magic (v3.10+): on level load it holds the Layer 3 Y position/offset (as defined in the advanced bypass settings), and it's updated during the level when the layer 3 scrolls vertically to keep track of how much it scrolled. It's used to make layer 3 scroll with the camera in levels that scroll vertically, when the layer 3 vertical scroll is not "None". |
Kevin | |
$7E19B8 | 64 bytes | Misc. | Exit Table. This connects doors and exit-enabled pipes to their correct entrances.
|
Table correspondance | HammerBrother |
$7E1EA2 | 96 bytes | Overworld | Overworld level setting flags, location within the table corresponds to $7E:13BF. 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 $7E:1EEB will enable the special stage features (autumn overworld palettes, etc.) in the ORIGINAL game. The bit is set when you clear all special world levels. |
MarioFanGamer | |
$7F0B44 | 2048 bytes | Misc. | It is used for Dynamic Z V3.75 or more, for severals differents variables. More Documentation here: https://sneslab.net/wiki/Dynamic_Z Start at $418000 in SA-1 rom. |
anonimzwx | |
$7F837D | 5118 bytes | Misc. | VRAM upload table, as a stripe image. Used for things that change in the middle of the screen, such as ? blocks. Uploaded and reset every frame; most frames, it's empty. Not all of it is used during normal gameplay, so $7F:8600+ shouldn't be dangerous to use. See here for more info. |
Data store in RAM format Example how to use in ASM - Layer 3 Another layer 3 example using RLE | HammerBrother |
$7FB408 | 3396 bytes | Misc. | Potentially used by Dynamic Z V3.75, lot of them usually are untouched but depends on the features that you use, they can be used by Dynamic Z V3.75 or later Documentation Here: https://sneslab.net/wiki/Dynamic_Z Start at $418B80 on SA-1 rom. |
anonimzwx | |
$7FC070 | 16 bytes | Misc. | Manual ExAnimation triggers. Each manual trigger slot corresponds to 1 byte in this table. Note that this address is not initialized unless you use the "Trigger Init" button in the ExAnimation dialog. Used since Lunar Magic 1.70. |
Trigger number -> RAM table | HammerBrother |
$7FC0FC | 2 bytes | Misc. | Custom ExAnimation triggers. Each trigger corresponds to 1 bit, where a bit set means the trigger is enabled. Note that this address isn't initialized unless you use the "Trigger Init" button in the ExAnimation dialog. Used since Lunar Magic 1.70. |
Flag and bit table ASM code to set/clear a specified bit | HammerBrother |
ROM Address | Length | Type | Description | Details | Submitter |
$00A635 | 225 bytes | ASM | Initialises levels and castle destruction cutscenes. That one clears out various flags including but not limited to $7E0070-$7E0093, $7E13D9-$7E1410, the p-switch, star and directional coins timers, stops the starman and p-switch music from playing as well as whether the no-Yoshi intro cutscene should play or whether Yoshi will be removed from the level. Afterwards, the initialisation depends on whether a no-Yoshi intro has been loaded or not:
|
MarioFanGamer | |
$00C9A7 | 8 bytes | Level number | The level numbers that triggers the seven castle destruction sequences and the credits scene. The first byte is for scene 1, the second is for scene 2, and so on, while the last byte is for the level which triggers the credits. | MarioFanGamer | |
$00D2CD | 60 bytes | Mario physics | Deceleration table. Each value here are 16-bit values to modify $7A-$7B so that the player slows down to either #$00 or some value based on slopes (autoslide). Note: Due to a bug, if Mario is traveling faster than his maximum speed and hold down the D-pad in the same direction (for example, going rightwards faster than his maximum rightwards speed and the player holds right), would slow him down. The index on this table is by taking $13E1: Y_index = (Value_In_RAM_13E1 / 2) + SlopeThreshold. Where SlopeThreshold is 0 if the player speed is equal or faster than the minimum speed, otherwise it is 2. |
Calculation of index Values in table | HammerBrother |
$00DC4F | 75 bytes | Mario physics | Routine that updates the player's X and Y position ($94 and $13DA, $96 and $13DC) by X and Y speed ($7B and $7D). The rate of movement is in “subpixels” per frame-- 1/16th of a pixel for more precise movement, using fixed point arithmetic. Note that stuff using position besides speed related data, such as hitboxes will only take the pixel position and not the subpixel position. Normally this routine is called after JSR to $00DC2D. It then JSRs into $00DC4F with:
|
How it works Math Example | HammerBrother |
$019138 | 8 bytes | Sprite subroutine (JSL) | JSL for sprites interacting with objects. Actually calls routine at $019140. During processing GPS blocks:
Message to mods: SpriteV and SpriteH are swapped on the info about $0F. I fixed it. |
HammerBrother | |
$01A40E | 172 bytes | Sprite Misc. | Part of the main Sprite<->Sprite interaction subroutine. Called from $018032 How this works:
|
HammerBrother | |
$0288A1 | 2 bytes | Sprite Misc. | The sprite which comes out of a Yoshi egg when spawned from a question mark block. The first byte is the sprite ID when no Yoshi exists and the second byte is the sprite ID when Yoshi does exist. By default, these are $35 (Yoshi) and $78 (1-up). | MarioFanGamer | |
$029265 | 301 bytes | Subroutine (JSR) | Subroutine run on bounce sprite INIT (for all bounce sprites except turnblocks), which is responsible for the bug where a coin on top of hittable block and hitting said block will cause the coin to turn into an invisible solid block. $029330 is the block on page 0 which is to be collected. Keep in mind that this is independent of the acts like setting and has to be implemented manually. |
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 with a bounce block. However, this routine doesn't handle the removal of the coin which is instead handled by $0291B8. | MarioFanGamer | |
$02A1A4 | 115 bytes | Sprite subroutine (JSR) | 8x8 fireball GFX subroutine. Is it also used as a base for various other extended sprites' graphics (they JSR to it and then change the tile numbers and properties) as well as despawning them when they leave the screen. | HammerBrother | |
$02A547 | 39 bytes | Sprite subroutine (JSR) | "Get Fireball clipping" subroutine. Valid for Yoshi's and Mario's fireballs, Stores the clipping X displacement low byte to $00, the clipping X displacement high byte to $08, the clipping width (#0C) to $02, the clipping Y displacement low byte to $01, the clipping Y displacement high byte to $09, and the clipping height (#$13) to $03 (so it's equivalent to the "Get sprite clipping B" routine). Input: - Y: which extended sprite slot to get clipping of (should be #$08, #$09 for Fireball #1 and #2) |
Example Code | Disk Poppy |
$02B5BC | 48 bytes | Sprite subroutine (JSR) | Suboutine that updates the extended sprite's X and Y position ($171F/$1733/$175B and $1715/$1729/$1751) by its speed ($1747 and $173D). This alone is without gravity. The rate of movement is “subpixels” (1/16th of a pixels) per frame, similarly to Mario's speed handler at $00DC4F $02B5BC-$02B5C7: Calls $02B5C8 with the current extended sprite index +10 (number of existing extended sprite slots) to use the X position instead of Y. $02B5C8-$02B5EB: The subroutine itself. Input:
|
HammerBrother | |
$02F594 | 133 bytes | Sprite subroutine (JSL) | Ghost House Exit main pointer. The actual routine is located at $02F5D0; this is merely a wrapper for it, so it can JSL'ed. | Major Flare | |
$03B664 | 59 bytes | Sprite subroutine (JSL) | "Get player clipping B" subroutine. Stores the clipping X position low byte to $00, the clipping X position high byte to $08, the clipping width to $02, the clipping Y position low byte to $01, the clipping Y position high byte to $09, and the clipping height to $03. $03B673 - The width of Mario hitbox with sprites in pixels. $03B67C - Change to A9 00 to make Super/Fire/Cape Mario have a 16x16 interaction field (like Small Mario)or change to A9 01 to have a 16x32 interaction field (like Big Mario)(in conjunction with addresses $00EB79 and $01B4C0) This subroutine is used to detect if two hitboxes, A (often a sprite) and B (the player) are in collision with each other. To do that, have both hitbox A and B stored in scratch RAM $00-$0B, then call JSL $03B72B to check. |
Clipping data | HammerBrother |
$03B69F | 70 bytes | Sprite subroutine (JSL) | "Get sprite clipping A" subroutine. Stores the clipping X position low byte to $04, the clipping X position high byte to $0A, the clipping width to $06, the clipping Y position low byte to $05, the clipping Y position high byte to $0B, and the clipping height to $07. This subroutine is used to detect if two hitboxes A and B are in collision with each other. To do that, have both hitbox A and B stored in scratch RAM $00-$0B, then call JSL $03B72B to check. |
Clipping data | HammerBrother |
$03B6E5 | 70 bytes | Sprite subroutine (JSL) | "Get sprite clipping B" subroutine. Stores the clipping X position low byte to $00, the clipping X position high byte to $08, the clipping width to $02, the clipping Y position low byte to $01, the clipping Y position high byte to $09, and the clipping height to $03. This subroutine is used to detect if two hitboxes A and B are in collision with each other. To do that, have both hitbox A and B stored in scratch RAM $00-$0B, then call JSL $03B72B to check. |
Clipping data | HammerBrother |
$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 | |
Hijack Address | Length | Type | Description | Details | Submitter |
$01BEE7 | 4 bytes | Jump (JML/JSL) | Hijacked by the Magikoopa Wand Fix patch by HammerBrother. Checks to make sure the wand tile is onscreen before setting the Y coordinate of the OAM table entry. |
Fernap | |
$03BB4F | 2 bytes | Hex Edit | Position of OW level names. Increase/decrease by 1 to make it move up to the right/left, increase/decrease by 20 to make it move down/upwards. Note that #$8B should be considered the low byte for the address, not #$50. Originally the routine is at $049D22 but Lunar Magic hijacks level names on the overworld and therefore this is the correct address if you want to change the position of the level names on the overworld. |
Ice Man | |
- Páginas:
- 1