Language…
19 users online:  Alex, AppleBoy54321, BeyondJon, brickblock369, DanMario24YT, Easy Difficulty, Firstnamebutt, Fullcannon, Green, h.carrell, Humpty Dumpty Magazine,  idol, MrInfinite, NGB, Oskise, shaoshao, Skye, Sonikado br1500, Soul - Guests: 87 - Bots: 190
Users: 62,720 (2,509 active)
Latest user: Wasthistaken2

SMW Memory Map - Waiting Addresses

Displaying 29 out of 29 waiting addresses.

View: moderated | waiting (29)

Filter

Link
  • Pages:
  • 1
RAM Address Length Type Description Details Submitter
$7E006E 3 bytes Pointer 24-bit pointer to the level Map16 block data ($7EC800/7FC800). Used during level load and also during change-map16 (e.g when a block gets hit and temporally turns into $0152).

Note to mods: I tested via breakpoint at $00C0EF and it also handles the low byte when an on/off switch is hit.
HammerBrother
ROM Address Length Type Description Details Submitter
$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:
  • X = $00: Update X position
  • X = $02: Update Y position
How it works Math Example HammerBrother
$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
$019FC1 1 byte Sprite Misc. change 01 to 05 to make Mario keep the balloon effect even after taking hits or power-ups.(no weird behaviour when dying) Isikoro
$01A40D 956 bytes Sprite subroutine (JSR) The primary routine used to process most standard interactions between a sprite and other sprites; call this routine from within the sprite's MAIN routine to do so. A JSL to this routine can be found at $018032.

When two sprites are interacting, only the sprite in the higher slot actually processes it to prevent the interaction from being handled twice. Interactions can be prevented entirely by setting either sprite's "don't interact with other sprites" tweaker bit ($1686) or $1564. Notably, not using one of these two methods and instead simply not calling the routine in the first place does not guarantee interaction will not be processed, as it can still occur if the handling is coming from a sprite in a higher slot. An example of this in the original game exists with shells and Thwomps, who are immune to thrown shells when they handle the interaction, but are killed when the shell does instead.

Overwrites $00-$03 when called. When processing interaction for sprites in status 8 that have the "change direction when touched" tweaker bit set ($1686), $157C is assumed to be their horizontal direction and $15AC will be set for a timer intended to control a turning-around animation for the sprite.
Thomas
$01AD42 18 bytes Sprite subroutine (JSR) Calculates the player's Y position relative to the sprite (aka SubVertPos):
Output:
HammerBrother
$02881E 5 bytes Sound effect Sound effect the on/off switch makes when spawning the bounce sprite. Note that the sound effect is actually played twice, with the other being at $02918C.

Set to EA EA EA EA EA (or org $02881E : nop #5) to fix it from being played twice.
HammerBrother
$02918C 5 bytes Sound effect Sound effect the on/off bounce block sprite makes when triggered, overrides the "hit head" sound. NOTE: the sound effect is actually played twice, with the other being at $02881E (code that spawns the bounce block).

Set to EA EA EA EA EA (or org $02918C : NOP #5) to prevent the SFX from being played twice.
HammerBrother
$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:
  • $02919F: The code which loads the currently assigned block the bounce sprite should turn into ($9C format) but also handles on whether a multiple coins block should turn into a used block. This is called when a bounce sprite terminates and becomes a solid block again.
  • $0291B8: Spawns an invisible solid block. This is called when a bounce sprite has just spawned but also when the bounce sprite collects a coin, leading to the solid air tile glitch.
  • $0291BA: Spawns a tile in the $9C format with A as the parameter at the bounce sprite's position. This is called from spinning turn blocks when they become solid.
Additional Data MarioFanGamer
$029265 241 bytes Subroutine (JSR) Subroutine for most bounce sprites' init code. It makes bounce blocks (e.g. a ?-block) able to collect a coin right above them.

$029330: The block on page 0 which can be collected. Keep in mind that this is independent of the acts like setting and support thereof 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 a coin with a bounce block. However, this routine doesn't handle the removal of the coin which is instead handled by $0291B8. MarioFanGamer
$02A906 1 byte Sprite number Which sprite number only uses a reserved slot if placed on an odd X-coordinate. (Default: 64) imamelia
$03C0A2 1 byte Misc. Number of enemies Baby Yoshi must eat to grow if the double-eat glitch occurs ($01A2FB is the address for the regular eating behaviour) Vellidragon
$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
$00A31A 4 bytes Jump (JML/JSL) Modified by the Custom Mario Palettes patch, by Erik, Roy, underway.

JML, jumps to a routine that makes the bank used in a DMA transfer to depend on a FreeRAM.
MarioFanGamer
$00B048 4 bytes Jump (JML/JSL) Modified by the Custom Mario Palettes patch, by Erik, Roy, underway.

JSL, sets the bank of the pointer to the palette to write to the CGRAM mirror.
MarioFanGamer
$00C533 6 bytes Jump (JML/JSL) Hijacked by Super Mario Advance 4 !-Switch, by Burning Loaf

JML : NOP #2, adds a check for the !-Switch timer to resume the level music when a P-Switch is pressed.
MarioFanGamer
$00CD74 5 bytes Jump (JML/JSL) Hijacked by Disable 1-UP Chain when Free Up-Down patch by Isikoro.

JML : NOP, clears the consecutive enemies stomped counter when the players is climbing a vine or net.
MarioFanGamer
$00E31B 4 bytes Jump (JML/JSL) Modified by the Custom Mario Palettes patch, by Erik, Roy, underway.

JML, gets the player's palette of the current level / submap and store its pointer the player palette pointer as well as to freeRAM which acts as the pointers bank.
MarioFanGamer
$00EA5E 4 bytes Jump (JML/JSL) Hijacked by Disable 1-UP Chain when Free Up-Down patch by Isikoro.

JML, clears the consecutive enemies stomped counter when the players enters water.
MarioFanGamer
$019FA1 4 bytes Jump (JML/JSL) Hijacked by Disable 1-UP Chain when Free Up-Down patch by Isikoro.

JML, clears the consecutive enemies stomped counter when the players in the P-Balloon state.
MarioFanGamer
$01EF13 4 bytes Jump (JML/JSL) Hijacked by Disable 1-UP Chain when Free Up-Down patch by Isikoro.

JML, clears the consecutive enemies stomped counter when the players rides Yoshi with wings.
MarioFanGamer
$02A763 16 bytes Jump (JML/JSL) Hijacked by AMK 1.0.9.

Handles disabling and enabling Yoshi drums when entering levels.
The jump instruction is follwed by 12 NOP insutrctions.
Donut
$02E277 6 bytes Jump (JML/JSL) Hijacked by Super Mario Advance 4 !-Switch, by Burning Loaf

JML : NOP #2, adds a check for the !-Switch timer to resume the level music when a Directional Coin terminates.
MarioFanGamer
$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
$05DBAC 29 bytes Jump (JML/JSL) Modified by the Bonus Game Destination Expander patch, by Sonikku.

JML : RTS : NOP #24, modifies the 100-star bonus game and Yoshi wings level destination selection routine to allow for more destinations, as well as a more in-depth means of selecting destinations.
Maarfy
$0FF200 1024 bytes Table Used by Lunar Magic for the "old" graphics bypass using lists. In that system, an index of $00 is used to mark that no list bypass is used, and indices $01-$FF will point into this table (However, Lunar Magic's UI will instead display $00 as the first list and $FE as the last list). To calculate the direct offset, take ((index-1)*4). Note that both FG/BG list bypass and sprite list bypass share the same range of indices.

For each offset, contains four bytes for the four (Ex)GFX files that are used for this index. This system is only capable of addressing Graphics files numbered $00 through $FF.
Ragey
  • Pages:
  • 1