A: You need to make a slight edit to the HDMA code. You should see something like this:
LDA #$17 STA $212C LDA #$00 STA $212E
Change that to:
LDA #$17 STA $212C LDA #$17 ;<- change here STA $212E
LDA #$FF STA $1DFB|!addr
A: You want to also store #$FF
to $0DDA
, like this:
LDA #$FF STA $1DFB|!addr STA $0DDA|!addr ;<- change here
A: One common cause for this is a bug with AddmusicK that happens when you change certain songs to #$00
in the asm/tweaks.asm (or asm/UserDefines.asm) file, specifically: !Miss
, !BossClear
, !StageClear
, !Keyhole
or !IrisOut
(maybe also !SwitchPalace
, !RescueEgg
and !StaffRoll
). This can cause issues like the one mentioned here or the P-Switch/Star timers acting weirdly when activated
To fix this, open AMK's asm/SNES/patch.asm file and remove all instances of codes like this:
CMP !SongThatYouChangedTo0 BEQ Something
For example, if you changed !IrisOut
to #$00
, then you'd remove these codes (you can CTRL+F !IrisOut
to find all instances in the file):
CMP !IrisOut BEQ ++
CMP !IrisOut BEQ LevelEndMusicChange
CMP !IrisOut BEQ Okay
Run AddmusicK after applying the changes and the issue should be fixed. If it still happens but you didn't change the tweaks/UserDefines file, then DM me the issue.
A: To fix, add this code at the very start of the Single Screen's main code:
LDA $71 CMP #$09 BNE + RTL +
A: Secondary entrances that are already present in the original game won't work properly. To make it work, delete it and remake it in Lunar Magic.
A: After inserting Retry for the first time, don't load a save state that you made before inserting it and make sure to start from a new save file.
By default Retry only works with the vanilla midway tile, but it's fairly straightforward to make it work with your own blocks/sprites. Retry has a specific RAM address that can be used to set the midway in the current level (according to the checkpoint
setting in retry_config/settings_local.asm). The address is !ram_set_checkpoint
to have it always available in sprites/blocks, you can copy the contents of "ram.asm" into PIXI's asm/sa1def.asm, GPS's defines.asm and UberASM Tool's other/macro_library.asm.
The system works as follows: if you set the low byte (!ram_set_checkpoint
) to #$00
, it will trigger the current level's midway. If the checkpoint table for this sublevel is 0, it means it will give you the midway for the main level. While if it's 2 or 3, it will give you the midway for the current sublevel.
You can also set a completely custom entrance for the checkpoint, similarly to how Retry's custom midway objects work. To do this, you need to set the entire 16 bit address (!ram_set_checkpoint
and !ram_set_checkpoint+1
) to the entrance value you want to use. This value follows the format of $7E19B8 and $7E19D8 (where $7E19B8 should go in the first byte of the address, $7E19D8 in the second). For more info, check those addresses in SMWCentral's RAM Map. In practice, your midway block sprite should have a piece of code like this, to set the vanilla midway:
LDA #$01 STA $13CE
To add multiple midway support, you'd just need to add this after it:
LDA #$00 STA !ram_set_checkpoint
To make the midway take you to an arbitrary entrance, you need to set a different value depending on what entrance it is. For example, to make it use secondary exit number $0169, you'd use this code:
REP #$20 LDA #$0169 ; Secondary exit number. ORA #$0200 ; Set the "secondary exit" bit in the high byte (like $7E19D8). STA !ram_set_checkpoint SEP #$20
Additionally, you can also reset the current level's checkpoint by setting !ram_set_checkpoint to #$80. This will respawn Mario in the current level's main entrance when dying.
A: Those patches have a high chance of using the same spots in SP1 for their dynamic tiles as the Retry prompt. To fix it, open retry_config/settings_global.asm and towards the bottom you'll see a bunch of !tile_...
defines. You need to edit some of those to other free spots in SP1 that aren't used by other patches.
A: vanilla autoscrollers should already stop when dying with this options turned on, while custom autoscrollers need to be handled on a case-by-case basis by adding a check for Mario's state. This is usually simple to fix by adding a code like this at the beginning of your custom autoscroller's main code:
LDA $71 CMP #$09 BNE .run RTL .run:
(if your autoscroller code is in a routine that ends with RTS, use RTS instead of RTL before .run
).