From ed916c2ff18962b37d1e0549a2a09ced601bb63b Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Thu, 16 Jul 2026 18:31:08 -0400 Subject: [PATCH 01/27] Disable NMI earlier in crash handler --- src/crash.asm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/crash.asm b/src/crash.asm index 38f19a663..e47368801 100644 --- a/src/crash.asm +++ b/src/crash.asm @@ -119,9 +119,11 @@ BRKHandler: .setBank PHP : PHB %ai16() - - ; store CPU registers STA !ram_crash_a + LDA #$0000 : STA $004200 ; disable NMI + + .registers + ; store remaining CPU registers TXA : STA !ram_crash_x TYA : STA !ram_crash_y PLA : STA !ram_crash_dbp @@ -153,9 +155,11 @@ COPHandler: .setBank PHP : PHB %ai16() - - ; store CPU registers STA !ram_crash_a + LDA #$0000 : STA $004200 ; disable NMI + + .registers + ; store remaining CPU registers TXA : STA !ram_crash_x TYA : STA !ram_crash_y PLA : STA !ram_crash_dbp @@ -192,7 +196,6 @@ CrashViewer: %a8() STZ $420C LDA #$80 : STA $802100 ; Force blank on, zero brightness - LDA #$A1 : STA $4200 ; NMI, V-blank IRQ, and auto-joypad read on LDA #$09 : STA $2105 ; BG3 priority on, BG Mode 1 LDA #$58 : STA $2109 ; BG3 address, 32x32 size LDA #$17 : STA $212C ; Enable BG3 on main screen @@ -201,6 +204,7 @@ CrashViewer: LDA #$33 : STA $2131 ; Enable color math on backgrounds and OAM STZ $2111 : STZ $2111 ; BG3 X scroll, write twice STZ $2112 : STZ $2112 ; BG3 Y scroll, write twice + LDA #$A1 : STA $4200 ; NMI, V-blank IRQ, and auto-joypad read on LDA #$0F : STA $0F2100 ; Force blank off, max brightness %ai16() From cfb8a194ee155002115246e0ce3d7f5fcf897f27 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Thu, 16 Jul 2026 18:39:47 -0400 Subject: [PATCH 02/27] Handle emulation mode crashes Get out of emulation mode ASAP and mark it with an E to the left of BRK/COP --- src/crash.asm | 46 +++++++++++++++++++++++++++++++++++++++------- src/defines.asm | 1 + src/symbols.asm | 1 + 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/crash.asm b/src/crash.asm index e47368801..31e8b16aa 100644 --- a/src/crash.asm +++ b/src/crash.asm @@ -25,18 +25,19 @@ NativeBRKHandlerHook: ; Hijack emulation COP vector org $80FFF4 EmulationCOPHandlerHook: - dw COPHandler + dw EmuCOPHandler ; Hijack emulation IRQ/BRK vector ; Due to a bug in vanilla code, MSB needs to be unchanged (0x85) -; https://patrickjohnston.org/bank/A6?just=9BB2 +; https://patrickjohnston.org/bank/A6?just=9B18&highlight#f9B18 org $80FFFE EmulationBRKHandlerHook: - dw BRKHandlerHook + dw EmuBRKHandlerHook -org $808577 -BRKHandlerHook: - JML BRKHandler_setBank +org $808577 ; unused vanilla code, see note above +EmuBRKHandlerHook: + JMP EmuBRKHandler +warnpc $80858C %startfree(80) @@ -54,6 +55,9 @@ CrashHandler: PLA : STA !ram_crash_dbp TSC : STA !ram_crash_sp + ; not emulation mode + LDA #$0000 : STA !ram_crash_emu + ; check condition of stack BMI .overflow CMP #$2000 : BPL .underflow @@ -121,6 +125,7 @@ BRKHandler: %ai16() STA !ram_crash_a LDA #$0000 : STA $004200 ; disable NMI + STA !ram_crash_emu ; not emulation mode .registers ; store remaining CPU registers @@ -149,6 +154,17 @@ BRKHandler: JMP CrashHandler_fixStack } +EmuBRKHandler: +{ + CLC : XCE ; get out of emulation mode + PHP : PHB + %ai16() + STA !ram_crash_a + LDA #$0000 : STA $004200 ; disable NMI + LDA #$FFFF : STA !ram_crash_emu ; mark as emulation mode + JML BRKHandler_registers +} + COPHandler: { JML .setBank @@ -157,6 +173,7 @@ COPHandler: %ai16() STA !ram_crash_a LDA #$0000 : STA $004200 ; disable NMI + STA !ram_crash_emu ; not emulation mode .registers ; store remaining CPU registers @@ -185,6 +202,17 @@ COPHandler: JMP CrashHandler_fixStack } +EmuCOPHandler: +{ + CLC : XCE ; get out of emulation mode + PHP : PHB + %ai16() + STA !ram_crash_a + LDA #$0000 : STA $004200 ; disable NMI + LDA #$FFFF : STA !ram_crash_emu ; mark as emulation mode + JML COPHandler_registers +} + %endfree(80) %startfree(89) @@ -480,7 +508,7 @@ table ../resources/normal.tbl LDA #$2C00|'#' : STA !CRASHDUMP_TILEMAP_BUFFER+$2D4 LDA #$2C00|'$' : STA !CRASHDUMP_TILEMAP_BUFFER+$2D6 STA !CRASHDUMP_TILEMAP_BUFFER+$2E6 - BRA .drawStack + BRA .emuMarker .COPcrash LDA #$2C00|'C' : STA !CRASHDUMP_TILEMAP_BUFFER+$2CC @@ -490,6 +518,10 @@ table ../resources/normal.tbl LDA #$2C00|'$' : STA !CRASHDUMP_TILEMAP_BUFFER+$2D6 STA !CRASHDUMP_TILEMAP_BUFFER+$2E6 + .emuMarker + LDA !ram_crash_emu : BEQ .drawStack + LDA #$2C00|'E' : STA !CRASHDUMP_TILEMAP_BUFFER+$2C8 + .drawStack ; -- Draw Stack Values -- ; start by setting up tilemap position diff --git a/src/defines.asm b/src/defines.asm index 0e8e2b341..9ba488449 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -452,6 +452,7 @@ !ram_crash_mem_viewer = !CRASHDUMP+$54 !ram_crash_mem_viewer_bank = !CRASHDUMP+$56 !ram_crash_temp = !CRASHDUMP+$58 +!ram_crash_emu = !CRASHDUMP+$5A !ram_crash_input = !CRASHDUMP+$60 !ram_crash_input_new = !CRASHDUMP+$62 diff --git a/src/symbols.asm b/src/symbols.asm index c2c2f59d3..cf229e707 100644 --- a/src/symbols.asm +++ b/src/symbols.asm @@ -427,6 +427,7 @@ ram_crash_text_palette = !ram_crash_text_palette ; !CRASHDUMP+$52 ram_crash_mem_viewer = !ram_crash_mem_viewer ; !CRASHDUMP+$54 ram_crash_mem_viewer_bank = !ram_crash_mem_viewer_bank ; !CRASHDUMP+$56 ram_crash_temp = !ram_crash_temp ; !CRASHDUMP+$58 +ram_crash_emu = !ram_crash_emu ; !CRASHDUMP+$5A ram_crash_input = !ram_crash_input ; !CRASHDUMP+$60 ram_crash_input_new = !ram_crash_input_new ; !CRASHDUMP+$62 From 1a70fc5e1c5ec9efc2f41d217a36c93051a1ced7 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Mon, 27 Jul 2026 11:39:33 -0400 Subject: [PATCH 03/27] CGRAM upload routine for crash handler Eliminates the last of the vanilla calls --- src/crash.asm | 63 +++++++++++++++++++++++++++-------------------- src/cropmenu.asm | 8 ++++-- src/cutscenes.asm | 2 +- src/damage.asm | 2 +- src/infohud.asm | 10 ++------ 5 files changed, 46 insertions(+), 39 deletions(-) diff --git a/src/crash.asm b/src/crash.asm index 31e8b16aa..47ba16026 100644 --- a/src/crash.asm +++ b/src/crash.asm @@ -237,8 +237,8 @@ CrashViewer: %ai16() JSL crash_next_frame - JSL crash_cgram_transfer - LDA $C1 : PHA : LDA $C3 : PHA + JSL crash_cycle_palettes + PEI ($C1) : PEI ($C3) JSL cm_transfer_custom_tileset PLA : STA $C3 : PLA : STA $C1 @@ -324,7 +324,7 @@ endif INC : STA !ram_crash_palette .updateCGRAM - JSL crash_cgram_transfer + JSL crash_cycle_palettes JMP CrashLoop } @@ -469,7 +469,7 @@ table ../resources/normal.tbl ; -- Detect and Draw COP/BRK -- LDA !ram_crash_type : AND #$0003 : BEQ .drawStack_bridge LDA !ram_crash_type : AND #$C000 : BNE .corruptBRKCOP - LDA $C1 : PHA : LDA $C3 : PHA + PEI ($C1) : PEI ($C3) %a8() LDA !ram_crash_stack : STA !ram_crash_draw_value @@ -723,7 +723,7 @@ CrashMemViewer: ; draw the current value and nearby bytes LDA !ram_crash_mem_viewer : BMI .bridge_drawUpperHalf %a16() - LDA $C1 : PHA : LDA $C3 : PHA + PEI ($C1) : PEI ($C3) LDA !ram_crash_mem_viewer_bank : STA $C3 LDA !ram_crash_mem_viewer : STA $C1 : STA !ram_crash_temp LDA [$C1] : STA !ram_crash_draw_value @@ -775,7 +775,7 @@ CrashMemViewer: .drawUpperHalf %a16() - LDA $41 : PHA : LDA $43 : PHA + PEI ($41) : PEI ($43) LDA !ram_crash_mem_viewer_bank : STA $43 LDA !ram_crash_mem_viewer : STA $41 : STA !ram_crash_temp LDA [$41] : STA !ram_crash_draw_value @@ -894,7 +894,7 @@ CrashInfo: crash_draw_text: { ; X = pointer to tilemap area (STA !CRASHDUMP_TILEMAP_BUFFER,X) - LDA $C5 : PHA : LDA $C7 : PHA + PEI ($C5) : PEI ($C7) LDA !ram_crash_text_bank : STA $C7 LDA !ram_crash_text : STA $C5 %a8() @@ -914,7 +914,6 @@ crash_draw_text: crash_draw4: { - PHP : %a16() ; (X000) LDA !ram_crash_draw_value : AND #$F000 : XBA : LSR #3 : TAY LDA.w HexMenuGFXTable,Y : STA !CRASHDUMP_TILEMAP_BUFFER,X @@ -927,7 +926,6 @@ crash_draw4: ; (000X) LDA !ram_crash_draw_value : AND #$000F : ASL : TAY LDA.w HexMenuGFXTable,Y : STA !CRASHDUMP_TILEMAP_BUFFER+6,X - PLP RTS } @@ -944,18 +942,20 @@ crash_draw2: RTS } -crash_cgram_transfer: +crash_cycle_palettes: { - PHP : %a16() - - LDA !ram_crash_palette : BEQ .white ; 0 index - DEC : BEQ .grey ; 1 - DEC : BEQ .green ; 2 - DEC : BEQ .pink ; 3 - DEC : BEQ .yellow ; 4 - DEC : BEQ .blue ; 5 - DEC : BEQ .red ; 6 - DEC : BEQ .orange ; 7 + LDA !ram_crash_palette : ASL : TAX + JMP (.pointers,X) + + .pointers + dw .white ; 0 index + dw .grey ; 1 + dw .green ; 2 + dw .pink ; 3 + dw .yellow ; 4 + dw .blue ; 5 + dw .red ; 6 + dw .orange ; 7 .white LDA #$44E5 : STA $7EC012 @@ -1005,9 +1005,18 @@ crash_cgram_transfer: STA $7EC016 : STA $7EC01E STA $7EC03C - JSL transfer_cgram_long - PLP - PHK : PLB + %a8() + LDA #$80 : STA $802100 ; forced blanking on + LDA #$00 : STA $4300 ; DMA mode + LDA #$7E : STA $4304 ; src bank + LDX #$C010 : STX $4302 ; src addr + LDA #$22 : STA $4301 ; dest addr + LDA #$08 : STA $2121 ; CGRAM addr + LDX #$0010 : STX $4305 ; size + LDA #$01 : STA $420B ; enable + LDA #$0F : STA $0F2100 ; forced blanking off + %a16() + RTL } @@ -1049,18 +1058,18 @@ crash_tilemap_transfer: crash_next_frame: { - PHP : %a8() + %a8() LDA !NMI_COUNTER : PHA .loop CMP !NMI_COUNTER : BEQ .loop PLA : STA !NMI_COUNTER - PLP + %a16() RTL } crash_read_inputs: { - PHP : %a8() + %a8() .loop LDA $4212 : AND #$01 : BNE .loop @@ -1087,7 +1096,7 @@ crash_read_inputs: .done LDA !ram_crash_input : STA !ram_crash_input_prev - PLP + %a16() RTL } diff --git a/src/cropmenu.asm b/src/cropmenu.asm index 4c870e3d1..ce59c30da 100644 --- a/src/cropmenu.asm +++ b/src/cropmenu.asm @@ -97,7 +97,9 @@ cm_crop_mode: LDA #$0008 .decSetPalette DEC : STA !ram_crash_palette - JSL crash_cgram_transfer + %i16() + JSL crash_cycle_palettes + JSL transfer_cgram_long BRA .loop .incPalette @@ -105,7 +107,9 @@ cm_crop_mode: LDA #$FFFF .incSetPalette INC : STA !ram_crash_palette - JSL crash_cgram_transfer + %i16() + JSL crash_cycle_palettes + JSL transfer_cgram_long BRA .loop .end diff --git a/src/cutscenes.asm b/src/cutscenes.asm index f57ded2e6..886f5bf34 100644 --- a/src/cutscenes.asm +++ b/src/cutscenes.asm @@ -1837,7 +1837,7 @@ else org $A98C05 endif JMP cutscenes_mb_first_earthquake_start - NOP : NOP : NOP : NOP + BRA $02 cutscenes_mb_first_earthquake_end: if !FEATURE_PAL diff --git a/src/damage.asm b/src/damage.asm index ae3505b2a..c6af8f036 100644 --- a/src/damage.asm +++ b/src/damage.asm @@ -41,7 +41,7 @@ org $90E72B org $90E74D PLA : PHX : TAX JSR (periodic_damage_table,X) - PLX : NOP : NOP + PLX : BRA $00 ; Transfer logic here by overwriting redundant end of periodic damage ; Also repoint jump and branch to avoid the redundant section diff --git a/src/infohud.asm b/src/infohud.asm index e3c92570f..f5027826f 100644 --- a/src/infohud.asm +++ b/src/infohud.asm @@ -50,7 +50,7 @@ else org $A09CC8 endif JSL infidoppler_hook_projectile_collision - NOP : NOP + BRA $00 if !FEATURE_VANILLAHUD ; skip the rest of the hijacks if Vanilla HUD build @@ -599,7 +599,6 @@ ih_before_room_transition: dw status_door_xpos dw status_door_ypos } -endif ; !FEATURE_VANILLAHUD ceres_start_timers: { @@ -609,14 +608,9 @@ ceres_start_timers: ; overwritten code STZ !SCREEN_FADE_DELAY : STZ !SCREEN_FADE_COUNTER -if !FEATURE_VANILLAHUD -else JML ceres_start_timers_return -endif } -if !FEATURE_VANILLAHUD -else ih_unpause: ; Adds frames when unpausing (nmi is turned off during vram transfers) { @@ -2035,7 +2029,7 @@ infidoppler_hook_projectile_collision: .no ; Vanilla logic LDA !SAMUS_PROJ_PROPERTIES,Y - BIT #$0008 + AND #$0008 RTL .disable From 29234613d7677568b161991d59fd9a2287a9d6f1 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Thu, 6 Aug 2026 15:06:54 -0400 Subject: [PATCH 04/27] Automate number of BRB screens --- src/BRBmenu.asm | 7 +++---- src/defines.asm | 1 + 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/BRBmenu.asm b/src/BRBmenu.asm index 086d69279..5a21701ac 100644 --- a/src/BRBmenu.asm +++ b/src/BRBmenu.asm @@ -1,7 +1,6 @@ %startfree(8E) -!BRB_TOTAL_SCREENS = #$0007 ; -------- ; BRB Data @@ -216,7 +215,7 @@ endif CMP !CTRL_A : BNE .loop LDA !ram_cm_brb_screen : INC : STA !ram_cm_brb_screen - CMP !BRB_TOTAL_SCREENS : BMI .loop + CMP.w !BRB_TOTAL_SCREENS : BMI .loop TDC : STA !ram_cm_brb_screen : STA !ram_cm_brb_timer BRA .loop } @@ -251,7 +250,7 @@ cm_tilemap_brb: ; Cycle screen text LDA !ram_cm_brb_screen : INC : STA !ram_cm_brb_screen - CMP !BRB_TOTAL_SCREENS : BMI .done_cycle_text + CMP.w !BRB_TOTAL_SCREENS : BMI .done_cycle_text TDC : STA !ram_cm_brb_screen .done_cycle_text @@ -730,6 +729,7 @@ BRBTilemapTableLine1: dw #BRB_screen5_line1 dw #BRB_screen6_line1 dw #BRB_screen7_line1 + .end BRBTilemapTableLine2: dw #BRB_screen1_line2 @@ -741,7 +741,6 @@ BRBTilemapTableLine2: dw #BRB_screen7_line2 -; see !BRB_TOTAL_SCREENS at top of file BRB_screen1_line1: db #$28, " SM Speedrunning Wiki", #$FF BRB_screen1_line2: diff --git a/src/defines.asm b/src/defines.asm index 9ba488449..fa834b900 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1379,6 +1379,7 @@ endif !SUIT_PROPERTIES_MASK = #$0007 !SUIT_PROPRETIES_PAL_DEBUG_FLAG = #$0008 !DROP_CHANCE_TABLE_LENGTH = #(drop_chance_tables_end-drop_chance_tables)/2 +!BRB_TOTAL_SCREENS = #(BRBTilemapTableLine1_end-BRBTilemapTableLine1)/2 !FRAME_COUNTER_USE_IGT = #$0001 !FRAME_COUNTER_ADJUST_REALTIME = #$0002 From 0d42dd9f89c0aaea2806ad6bb117333527ead71a Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Fri, 7 Aug 2026 17:05:28 -0400 Subject: [PATCH 05/27] Optimize Metroid and Zeb menu code --- src/flagmenu.asm | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/src/flagmenu.asm b/src/flagmenu.asm index af2130344..88e3433ab 100644 --- a/src/flagmenu.asm +++ b/src/flagmenu.asm @@ -907,43 +907,27 @@ events_metroids: %cm_numfield("Metroid Rooms Cleared", !ram_cm_metmask, 0, 4, 1, 1, #.routine) .routine CMP #$0000 : BEQ .done - CMP #$0001 : BEQ .one - CMP #$0002 : BEQ .two - CMP #$0003 : BEQ .three - - LDA #$000F : BRA .done - .three - LDA #$0007 : BRA .done - .two - LDA #$0003 : BRA .done - .one - LDA #$0001 : BRA .done - + DEC : ASL : TAX + LDA.l .table,X .done STA $C1 LDA $7ED822 : AND #$FFF0 : ORA $C1 : STA $7ED822 RTL + .table + dw $0001, $0003, $0007, $000F events_zebettites: %cm_numfield("Zebs Killed", !ram_cm_zebmask, 0, 4, 1, 1, #.routine) .routine CMP #$0000 : BEQ .done - CMP #$0001 : BEQ .one - CMP #$0002 : BEQ .two - CMP #$0003 : BEQ .three - - LDA #$0020 : BRA .done - .three - LDA #$0018 : BRA .done - .two - LDA #$0010 : BRA .done - .one - LDA #$0008 - + DEC : ASL : TAX + LDA.l .table,X .done STA $C1 LDA $7ED820 : AND #$FFC7 : ORA $C1 : STA $7ED820 RTL + .table + dw $0008, $0010, $0018, $0020 events_mb1glass: %cm_toggle_bit("MB1 Glass Broken", $7ED820, #$0004, #0) From 0d8d613ce8437727ebbf907274324186e593e8c3 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Fri, 7 Aug 2026 18:43:37 -0400 Subject: [PATCH 06/27] More PEI usage --- src/menu.asm | 2 +- src/presets.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/menu.asm b/src/menu.asm index e2e0b0164..1cd11ad4f 100644 --- a/src/menu.asm +++ b/src/menu.asm @@ -1757,7 +1757,7 @@ draw_ram_watch: JSR cm_hex2dec_draw5 ; adjust max cursor position to prevent selecting display item - LDA !DP_MenuIndices : PHA + PEI (!DP_MenuIndices) JSL cm_calculate_max PLA : STA !DP_MenuIndices LDA !ram_cm_cursor_max : SEC : SBC #$0004 : STA !ram_cm_cursor_max diff --git a/src/presets.asm b/src/presets.asm index 9bbd1932b..365175013 100644 --- a/src/presets.asm +++ b/src/presets.asm @@ -516,7 +516,7 @@ category_preset_load: .setBanks ; Set bank to read data from - STZ $00 : %a8() : LDA $C5 : PHA : PLB + STZ $00 : %a8() : PEI ($C5) : PLB ; Set bank to store data to LDA #$7E : STA $C5 : %a16() From 95318ae25b4b9ff2425448c36caae2426a6594ef Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Sun, 9 Aug 2026 09:35:30 -0400 Subject: [PATCH 07/27] Macro for menu music toggle --- src/BRBmenu.asm | 25 +------------------------ src/customizemenu.asm | 25 +------------------------ src/macros.asm | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 48 deletions(-) diff --git a/src/BRBmenu.asm b/src/BRBmenu.asm index 5a21701ac..b5cb630a1 100644 --- a/src/BRBmenu.asm +++ b/src/BRBmenu.asm @@ -84,30 +84,7 @@ brb_menu_scroll: %cm_toggle("Screen Scrolling", !ram_cm_brb_scroll, #$01, #0) brb_menu_music_toggle: - dw !ACTION_CHOICE - dl #!sram_music_toggle - dw .routine - db #$28, "Music", #$FF - db #$28, " OFF", #$FF - db #$28, " ON", #$FF - db #$28, " FAST OFF", #$FF - db #$28, " PRESET OFF", #$FF - db #$FF - .routine - ; Clear music queue - STZ !MUSIC_QUEUE_TIMERS : STZ !MUSIC_QUEUE_TIMERS+$2 - STZ !MUSIC_QUEUE_TIMERS+$4 : STZ !MUSIC_QUEUE_TIMERS+$6 - STZ !MUSIC_QUEUE_TIMERS+$8 : STZ !MUSIC_QUEUE_TIMERS+$A - STZ !MUSIC_QUEUE_TIMERS+$C : STZ !MUSIC_QUEUE_TIMERS+$E - STZ !MUSIC_QUEUE_NEXT : STZ !MUSIC_QUEUE_START - STZ !MUSIC_ENTRY : STZ !MUSIC_TIMER - CMP #$0001 : BEQ .resume_music - STZ $2140 - RTL - .resume_music - LDA !MUSIC_DATA : CLC : ADC #$FF00 : PHA : STZ !MUSIC_DATA : PLA : JSL !MUSIC_ROUTINE - LDA !MUSIC_TRACK : PHA : STZ !MUSIC_TRACK : PLA : JSL !MUSIC_ROUTINE - RTL + %cm_music_toggle() brb_streamer_name: %cm_jsl("Set Streamer Name", #.routine, #!sram_streamer_name) diff --git a/src/customizemenu.asm b/src/customizemenu.asm index 602b76b3e..dea36373a 100644 --- a/src/customizemenu.asm +++ b/src/customizemenu.asm @@ -24,30 +24,7 @@ AudioMenu: %cm_footer("PRESS Y TO PLAY SOUNDS") audio_music_toggle: - dw !ACTION_CHOICE - dl #!sram_music_toggle - dw .routine - db #$28, "Music", #$FF - db #$28, " OFF", #$FF - db #$28, " ON", #$FF - db #$28, " FAST OFF", #$FF - db #$28, " PRESET OFF", #$FF - db #$FF - .routine - ; Clear music queue - STZ !MUSIC_QUEUE_TIMERS : STZ !MUSIC_QUEUE_TIMERS+$2 - STZ !MUSIC_QUEUE_TIMERS+$4 : STZ !MUSIC_QUEUE_TIMERS+$6 - STZ !MUSIC_QUEUE_TIMERS+$8 : STZ !MUSIC_QUEUE_TIMERS+$A - STZ !MUSIC_QUEUE_TIMERS+$C : STZ !MUSIC_QUEUE_TIMERS+$E - STZ !MUSIC_QUEUE_NEXT : STZ !MUSIC_QUEUE_START - STZ !MUSIC_ENTRY : STZ !MUSIC_TIMER - CMP #$0001 : BEQ .resume_music - STZ $2140 - RTL - .resume_music - LDA !MUSIC_DATA : CLC : ADC #$FF00 : PHA : STZ !MUSIC_DATA : PLA : JSL !MUSIC_ROUTINE - LDA !MUSIC_TRACK : PHA : STZ !MUSIC_TRACK : PLA : JSL !MUSIC_ROUTINE - RTL + %cm_music_toggle() audio_fanfare_toggle: !FANFARE_FORCE_MUSIC = #$0002 diff --git a/src/macros.asm b/src/macros.asm index 1eac33da4..5c661c080 100644 --- a/src/macros.asm +++ b/src/macros.asm @@ -522,6 +522,34 @@ macro cm_equipment_beam(name, addr, bitmask, inverse, and) JMP equipment_toggle_beams endmacro +macro cm_music_toggle() +; Used in multiple menu banks + dw !ACTION_CHOICE + dl #!sram_music_toggle + dw .routine + db #$28, "Music", #$FF + db #$28, " OFF", #$FF + db #$28, " ON", #$FF + db #$28, " FAST OFF", #$FF + db #$28, " PRESET OFF", #$FF + db #$FF + .routine + ; Clear music queue + STZ !MUSIC_QUEUE_TIMERS : STZ !MUSIC_QUEUE_TIMERS+$2 + STZ !MUSIC_QUEUE_TIMERS+$4 : STZ !MUSIC_QUEUE_TIMERS+$6 + STZ !MUSIC_QUEUE_TIMERS+$8 : STZ !MUSIC_QUEUE_TIMERS+$A + STZ !MUSIC_QUEUE_TIMERS+$C : STZ !MUSIC_QUEUE_TIMERS+$E + STZ !MUSIC_QUEUE_NEXT : STZ !MUSIC_QUEUE_START + STZ !MUSIC_ENTRY : STZ !MUSIC_TIMER + CMP #$0001 : BEQ .resume_music + STZ $2140 + RTL + .resume_music + LDA !MUSIC_DATA : CLC : ADC #$FF00 : PHA : STZ !MUSIC_DATA : PLA : JSL !MUSIC_ROUTINE + LDA !MUSIC_TRACK : PHA : STZ !MUSIC_TRACK : PLA : JSL !MUSIC_ROUTINE + RTL +endmacro + macro cm_preset_adjust_item(name, addr, bitmask) ; Allows four-way toggling of items: NO CHANGE/EQUIP/UNEQUIP/REMOVE .dm_actionIndex From 3ec29959f5425b04b397d489881700b25ad7b583 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Sun, 9 Aug 2026 10:05:23 -0400 Subject: [PATCH 08/27] Use !PRESET_COMPRESSED bitmask Two of the old bitmasks could no longer be toggled individually, and the third was never used --- src/defines.asm | 5 +---- src/tilegraphics.asm | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index fa834b900..3246778a5 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1448,10 +1448,7 @@ endif !SUPPRESS_BOSS_DAMAGE_FLASH = #$0010 !SUPPRESS_EARTHQUAKE = #$0020 -!PRESETS_COMPRESSED_GRAPHICS = #$0001 -!PRESETS_COMPRESSED_PALETTES = #$0002 -!PRESETS_COMPRESSED_TABLES = #$0004 -!PRESETS_COMPRESSED = #$0007 +!PRESETS_COMPRESSED = #$0001 !PRESETS_CLOSE_BLUE_DOORS = #$0008 !PRESETS_PRESERVE_ENEMIES = #$0010 !PRESETS_CLEAR_MAP_TILES = #$0020 diff --git a/src/tilegraphics.asm b/src/tilegraphics.asm index 8c03bf7b8..c5df73ec4 100644 --- a/src/tilegraphics.asm +++ b/src/tilegraphics.asm @@ -137,7 +137,7 @@ load_raw_tile_graphics: CLC : ADC #tileset_palettes ; Save that for later and prepare for DMA - PHA : LDA !sram_preset_options : BIT !PRESETS_COMPRESSED_GRAPHICS : BNE .tile_decompression + PHA : LDA !sram_preset_options : BIT !PRESETS_COMPRESSED : BNE .tile_decompression %a8() : LDA.l raw_tile_graphics_table,X : BPL .separate_dmas ; A few tilesets also include the CRE and can be done in one DMA @@ -232,7 +232,7 @@ load_raw_tile_graphics: LDA #$01 : STA $420B ; initiate DMA (channel 1) .tileset_palette - LDA !sram_preset_options : BIT.b !PRESETS_COMPRESSED_PALETTES : BNE .palette_decompression + LDA !sram_preset_options : BIT.b !PRESETS_COMPRESSED : BNE .palette_decompression ; Copy tileset palette to $7EC200 PLX : LDY #$C200 : LDA #$FF @@ -285,7 +285,7 @@ preset_load_level: .level_data_done PEA $8F00 : PLB : PLB - LDA !sram_preset_options : BIT !PRESETS_COMPRESSED_GRAPHICS : BNE .tile_table_decompression + LDA !sram_preset_options : BIT !PRESETS_COMPRESSED : BNE .tile_table_decompression ; Jump to routine based on graphics set LDX !STATE_POINTER : LDA $0003,X : AND #$00FF From 31fd9f203317e9813b65eb8f5f996522cf7b0d96 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Sun, 9 Aug 2026 15:51:44 -0400 Subject: [PATCH 09/27] Automate !IH_MODE_INDEX updates --- src/defines.asm | 29 ++++++++++++++++ src/gamemode.asm | 24 +++++++------- src/infohud.asm | 22 ++++++------- src/infohudmodes.asm | 36 +++++++++++++++++--- src/layout.asm | 4 +-- src/mainmenu.asm | 78 +++++++++++++++++++------------------------- src/misc.asm | 2 +- src/ramwatchmenu.asm | 4 +-- 8 files changed, 122 insertions(+), 77 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index 3246778a5..d98843df8 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1384,6 +1384,35 @@ endif !FRAME_COUNTER_USE_IGT = #$0001 !FRAME_COUNTER_ADJUST_REALTIME = #$0002 +!IH_MODE_INDEX_ENEMYHP = (status_display_table_enemyhp-status_display_table)/2 +!IH_MODE_INDEX_ROOMSTRAT = (status_display_table_roomstrat-status_display_table)/2 +!IH_MODE_INDEX_CHARGETIMER = (status_display_table_chargetimer-status_display_table)/2 +!IH_MODE_INDEX_XFACTOR = (status_display_table_xfactor-status_display_table)/2 +!IH_MODE_INDEX_COOLDOWN = (status_display_table_cooldown-status_display_table)/2 +!IH_MODE_INDEX_SHINETIMER = (status_display_table_shinetimer-status_display_table)/2 +!IH_MODE_INDEX_DASHCOUNTER = (status_display_table_dashcounter-status_display_table)/2 +!IH_MODE_INDEX_SHINETUNE = (status_display_table_shinetune-status_display_table)/2 +!IH_MODE_INDEX_IFRAMECOUNTER = (status_display_table_iframecounter-status_display_table)/2 +!IH_MODE_INDEX_SPIKESUIT = (status_display_table_spikesuit-status_display_table)/2 +!IH_MODE_INDEX_LAGCOUNTER = (status_display_table_lagcounter-status_display_table)/2 +!IH_MODE_INDEX_CPUUSAGE = (status_display_table_cpuusage-status_display_table)/2 +!IH_MODE_INDEX_HSPEED = (status_display_table_hspeed-status_display_table)/2 +!IH_MODE_INDEX_DASHSPEED = (status_display_table_dashspeed-status_display_table)/2 +!IH_MODE_INDEX_VSPEED = (status_display_table_vspeed-status_display_table)/2 +!IH_MODE_INDEX_QUICKDROP = (status_display_table_quickdrop-status_display_table)/2 +!IH_MODE_INDEX_WALLJUMP = (status_display_table_walljump-status_display_table)/2 +!IH_MODE_INDEX_DOUBLESBJ = (status_display_table_doublesbj-status_display_table)/2 +!IH_MODE_INDEX_COUNTDAMAGE = (status_display_table_countdamage-status_display_table)/2 +!IH_MODE_INDEX_COUNTHP = (status_display_table_counthp-status_display_table)/2 +!IH_MODE_INDEX_ARMPUMP = (status_display_table_armpump-status_display_table)/2 +!IH_MODE_INDEX_PUMPCOUNTER = (status_display_table_pumpcounter-status_display_table)/2 +!IH_MODE_INDEX_XPOS = (status_display_table_xpos-status_display_table)/2 +!IH_MODE_INDEX_YPOS = (status_display_table_ypos-status_display_table)/2 +!IH_MODE_INDEX_CAMERAPOS = (status_display_table_camerapos-status_display_table)/2 +!IH_MODE_INDEX_SHOTTIMER = (status_display_table_shottimer-status_display_table)/2 +!IH_MODE_INDEX_RAMWATCH = (status_display_table_ramwatch-status_display_table)/2 +!IH_MODE_COUNT = (status_display_table_end-status_display_table)/2 + !ROOM_LAYOUT_NO_MAGNET_STAIRS = #$0001 !ROOM_LAYOUT_AREA_RANDO = #$0002 !ROOM_LAYOUT_ANTISOFTLOCK = #$0004 diff --git a/src/gamemode.asm b/src/gamemode.asm index 0c487308e..23f4d8c1a 100644 --- a/src/gamemode.asm +++ b/src/gamemode.asm @@ -455,8 +455,8 @@ if !FEATURE_VANILLAHUD else gamemode_reveal_damage: { - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BEQ .checkRoomStrat - CMP !IH_MODE_COUNTDAMAGE_INDEX : BNE .reveal + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BEQ .checkRoomStrat + CMP.w !IH_MODE_INDEX_COUNTDAMAGE : BNE .reveal ; revert to prior mode LDA !ram_display_backup : STA !sram_display_mode %sfxreset() @@ -466,7 +466,7 @@ gamemode_reveal_damage: LDA !sram_display_mode .reveal STA !ram_display_backup - LDA !IH_MODE_COUNTDAMAGE_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_COUNTDAMAGE : STA !sram_display_mode %sfxconfirm() BRA gamemode_reveal_hp_updateHUD @@ -488,8 +488,8 @@ gamemode_reveal_damage: gamemode_reveal_hp: { - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BEQ .checkRoomStrat - CMP !IH_MODE_COUNTHP_INDEX : BNE .reveal + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BEQ .checkRoomStrat + CMP.w !IH_MODE_INDEX_COUNTHP : BNE .reveal ; revert to prior mode LDA !ram_display_backup : STA !sram_display_mode %sfxreset() @@ -504,7 +504,7 @@ gamemode_reveal_hp: LDA !sram_display_mode .reveal STA !ram_display_backup - LDA !IH_MODE_COUNTHP_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_COUNTHP : STA !sram_display_mode %sfxconfirm() BRA .updateHUD @@ -586,7 +586,7 @@ else gamemode_increment_display_mode: { LDA !sram_display_mode : INC - CMP !IH_MODE_COUNT : BNE .set + CMP.w !IH_MODE_COUNT : BNE .set TDC .set STA !sram_display_mode @@ -597,7 +597,7 @@ gamemode_decrement_display_mode: { LDA !sram_display_mode : DEC CMP #$FFFF : BNE .set - LDA !IH_MODE_COUNT-1 + LDA.w !IH_MODE_COUNT-1 .set STA !sram_display_mode JML ih_update_status @@ -611,7 +611,7 @@ gamemode_increment_room_strat: .set STA !sram_room_strat ; enable ROOM STRAT mode - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode JML ih_update_status } @@ -623,7 +623,7 @@ gamemode_decrement_room_strat: .set STA !sram_room_strat ; enable ROOM STRAT mode - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode JML ih_update_status } @@ -635,7 +635,7 @@ gamemode_increment_super_hud: .set STA !sram_superhud_bottom ; enable Super HUD - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode TDC : STA !sram_room_strat JML ih_update_status } @@ -648,7 +648,7 @@ gamemode_decrement_super_hud: .set STA !sram_superhud_bottom ; enable Super HUD - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode TDC : STA !sram_room_strat JML ih_update_status } diff --git a/src/infohud.asm b/src/infohud.asm index f5027826f..e796a1410 100644 --- a/src/infohud.asm +++ b/src/infohud.asm @@ -467,7 +467,7 @@ ih_after_room_transition: STA !REALTIME_LAG_COUNTER ; for lagcounter HUD mode ; Check if MBHP needs to be disabled - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .segmentTimer + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .segmentTimer LDA !sram_room_strat : BEQ .checkSuperHUD CMP !IH_STRAT_MBHP_INDEX : BNE .segmentTimer LDA !ROOM_ID : CMP.w #ROOM_MotherBrainRoom : BEQ .segmentTimer @@ -554,7 +554,7 @@ ih_before_room_transition: LDX #$00C2 LDA !sram_top_display_mode : BIT.b !TOP_HUD_VANILLA_BIT : BNE .vanillaDoorLag LDA !ram_minimap : BEQ .draw3 - LDA !sram_display_mode : CMP.b !IH_MODE_ROOMSTRAT_INDEX : BNE .drawDoorMM + LDA !sram_display_mode : CMP.b !IH_MODE_INDEX_ROOMSTRAT : BNE .drawDoorMM LDA !sram_room_strat : BNE .drawDoorMM %a16() BRA .done @@ -771,7 +771,7 @@ ih_update_hud_before_transition: ; Bank 80 PEA $8080 : PLB : PLB - LDA !sram_display_mode : CMP !IH_MODE_ARMPUMP_INDEX : BNE ih_update_hud_after_transition_start + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ARMPUMP : BNE ih_update_hud_after_transition_start ; Report armpump room totals .armpump @@ -789,7 +789,7 @@ ih_update_hud_after_transition: PEA $8080 : PLB : PLB .start - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE ih_update_hud_code_start + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE ih_update_hud_code_start LDA !sram_room_strat : BNE ih_update_hud_code_start ; Update Super HUD lag counters @@ -839,7 +839,7 @@ ih_update_hud_code: .mmHUD ; Map visible, so draw map counter over item% LDA !sram_top_display_mode : BIT !TOP_HUD_VANILLA_BIT : BNE .mmVanilla - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .mmTileCounter + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .mmTileCounter LDA !sram_room_strat : BEQ .mmRoomTimer .mmTileCounter @@ -907,8 +907,8 @@ ih_update_hud_code: ; 3 tiles between input display and missile icon ; skip item% if display mode = vspeed LDA !sram_top_display_mode : BNE .skipToLag - LDA !sram_display_mode : CMP !IH_MODE_VSPEED_INDEX : BEQ .skipToLag - CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .drawItemPercent + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_VSPEED : BEQ .skipToLag + CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .drawItemPercent LDA !sram_room_strat : BEQ .skipToLag .drawItemPercent @@ -1160,7 +1160,7 @@ ih_hud_code: .status_display LDA !sram_display_mode : ASL : TAX - JSR (.status_display_table,X) + JSR (status_display_table,X) .status_display_done if !INFOHUD_ALWAYS_SHOW_X_Y @@ -1200,7 +1200,7 @@ endif .reserves LDA !sram_top_display_mode : BEQ .statusIcons BIT !TOP_HUD_VANILLA_BIT : BNE .vanilla_check_health - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .checkReserves + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .checkReserves LDA !sram_room_strat : BNE .checkReserves RTL @@ -1239,7 +1239,7 @@ endif ; Super HUD .checkSuperHUD - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .checkHealthBomb + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .checkHealthBomb LDA !sram_room_strat : BNE .checkHealthBomb RTL @@ -2435,7 +2435,7 @@ ih_update_timers: ; Map visible, so draw map counter over item% LDA !sram_top_display_mode : BIT !TOP_HUD_VANILLA_BIT : BNE .mmEnd STZ $4205 - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .mmTileCounter + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .mmTileCounter LDA !sram_room_strat : BEQ .mmRoomTimer .mmTileCounter diff --git a/src/infohudmodes.asm b/src/infohudmodes.asm index 3c623e79b..1fa708f45 100644 --- a/src/infohudmodes.asm +++ b/src/infohudmodes.asm @@ -2,36 +2,62 @@ ;InfoHUD modes and room strats ;======================================================= -; When adding or removing infohud modes, -; also update infohud.asm: inc_statusdisplay and dec_statusdisplay -.status_display_table +status_display_table: + .enemyhp ; assumed to be zero index dw status_enemyhp + .roomstrat dw status_roomstrat + .chargetimer dw status_chargetimer + .xfactor dw status_xfactor + .cooldown dw status_cooldown + .shinetimer dw status_shinetimer + .dashcounter dw status_dashcounter + .shinetune dw status_shinetune + .iframecounter dw status_iframecounter + .spikesuit dw status_spikesuit + .lagcounter dw status_lagcounter + .cpuusage dw status_cpuusage + .hspeed dw status_hspeed + .dashspeed dw status_dashspeed + .vspeed dw status_vspeed + .quickdrop dw status_quickdrop + .walljump dw status_walljump + .doublesbj dw status_doublesbj + .countdamage dw status_countdamage + .counthp dw status_enemyhp + .armpump dw status_armpump + .pumpcounter dw status_pumpcounter + .xpos dw status_xpos + .ypos dw status_ypos + .camerapos dw status_camerapos + .shottimer dw status_shottimer + .ramwatch dw status_ramwatch + .end status_enemyhp: { @@ -247,7 +273,7 @@ endif BRA .shinetune_start .check_superhud - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BEQ .done_momentum + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BEQ .done_momentum BRA .print_momentum .shinetune_start @@ -1036,7 +1062,7 @@ endif ; Print initial jump speed over item% when Samus doesn't bonk and superhud not selected LDA !sram_top_display_mode : BNE .skipprint LDA $0B1A : BNE .skipprint - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .printjumpseed + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .printjumpseed LDA !sram_room_strat : BEQ .skipprint .printjumpseed diff --git a/src/layout.asm b/src/layout.asm index ed810d0fd..d15359d6e 100644 --- a/src/layout.asm +++ b/src/layout.asm @@ -2434,7 +2434,7 @@ layout_asm_mbhp: if !FEATURE_VANILLAHUD else LDA !sram_display_mode : BEQ .assignMBHP - CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .done + CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .done LDA !sram_superhud_bottom : BNE .done ; Switch Super HUD enemy HP to MB HP LDA !IH_SUPERHUD_MBHP_BOTTOM_INDEX : STA !sram_superhud_bottom @@ -2442,7 +2442,7 @@ else .assignMBHP ; Switch enemy HP to MB HP - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode LDA !IH_STRAT_MBHP_INDEX : STA !sram_room_strat endif ; !FEATURE_VANILLAHUD .done diff --git a/src/mainmenu.asm b/src/mainmenu.asm index d4fa0cc54..cad1a6516 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -2235,96 +2235,86 @@ DisplayModeMenu2: ; Enemy HP must always be the first display mode option ihmode_enemyhp: - %cm_jsl("Enemy HP", #action_select_infohud_mode, #$0000) + %cm_jsl("Enemy HP", #action_select_infohud_mode, !IH_MODE_INDEX_ENEMYHP) ihmode_roomstrat: -!IH_MODE_ROOMSTRAT_INDEX = #$0001 - %cm_jsl("Room Strat", #action_select_infohud_mode, #$0001) + %cm_jsl("Room Strat", #action_select_infohud_mode, !IH_MODE_INDEX_ROOMSTRAT) ihmode_chargetimer: - %cm_jsl("Charge Timer", #action_select_infohud_mode, #$0002) + %cm_jsl("Charge Timer", #action_select_infohud_mode, !IH_MODE_INDEX_CHARGETIMER) ihmode_xfactor: - %cm_jsl("X-Factor Timer", #action_select_infohud_mode, #$0003) + %cm_jsl("X-Factor Timer", #action_select_infohud_mode, !IH_MODE_INDEX_XFACTOR) ihmode_cooldown: - %cm_jsl("Cooldown Timer", #action_select_infohud_mode, #$0004) + %cm_jsl("Cooldown Timer", #action_select_infohud_mode, !IH_MODE_INDEX_COOLDOWN) ihmode_shinetimer: - %cm_jsl("Shinespark Timer", #action_select_infohud_mode, #$0005) + %cm_jsl("Shinespark Timer", #action_select_infohud_mode, !IH_MODE_INDEX_SHINETIMER) ihmode_dashcounter: - %cm_jsl("Dash Counter", #action_select_infohud_mode, #$0006) + %cm_jsl("Dash Counter", #action_select_infohud_mode, !IH_MODE_INDEX_DASHCOUNTER) ihmode_shinetune: -!IH_MODE_SHINETUNE_INDEX = #$0007 - %cm_jsl("Shine Tune", #action_select_infohud_mode, #$0007) + %cm_jsl("Shine Tune", #action_select_infohud_mode, !IH_MODE_INDEX_SHINETUNE) ihmode_iframecounter: - %cm_jsl("I-Frame Counter", #action_select_infohud_mode, #$0008) + %cm_jsl("I-Frame Counter", #action_select_infohud_mode, !IH_MODE_INDEX_IFRAMECOUNTER) ihmode_spikesuit: - %cm_jsl("Spikesuit Trainer", #action_select_infohud_mode, #$0009) + %cm_jsl("Spikesuit Trainer", #action_select_infohud_mode, !IH_MODE_INDEX_SPIKESUIT) ihmode_lagcounter: - %cm_jsl("Lag Counter", #action_select_infohud_mode, #$000A) + %cm_jsl("Lag Counter", #action_select_infohud_mode, !IH_MODE_INDEX_LAGCOUNTER) ihmode_cpuusage: - %cm_jsl("CPU Usage", #action_select_infohud_mode, #$000B) + %cm_jsl("CPU Usage", #action_select_infohud_mode, !IH_MODE_INDEX_CPUUSAGE) ihmode_hspeed: - %cm_jsl("Horizontal Speed", #action_select_infohud_mode, #$000C) + %cm_jsl("Horizontal Speed", #action_select_infohud_mode, !IH_MODE_INDEX_HSPEED) ihmode_dashspeed: - %cm_jsl("Dash Speed", #action_select_infohud_mode, #$000D) + %cm_jsl("Dash Speed", #action_select_infohud_mode, !IH_MODE_INDEX_DASHSPEED) ihmode_vspeed: -!IH_MODE_VSPEED_INDEX = #$000E - %cm_jsl("Vertical Speed", #action_select_infohud_mode, #$000E) + %cm_jsl("Vertical Speed", #action_select_infohud_mode, !IH_MODE_INDEX_VSPEED) ihmode_quickdrop: - %cm_jsl("Quickdrop Trainer", #action_select_infohud_mode, #$000F) + %cm_jsl("Quickdrop Trainer", #action_select_infohud_mode, !IH_MODE_INDEX_QUICKDROP) ihmode_walljump: -!IH_MODE_WALLJUMP_INDEX = #$0010 - %cm_jsl("Walljump Trainer", #action_select_infohud_mode, #$0010) + %cm_jsl("Walljump Trainer", #action_select_infohud_mode, !IH_MODE_INDEX_WALLJUMP) ihmode_doublesbj: - %cm_jsl("Double Springball Jump", #action_select_infohud_mode, #$0011) + %cm_jsl("Double Springball Jump", #action_select_infohud_mode, !IH_MODE_INDEX_DOUBLESBJ) ihmode_countdamage: -!IH_MODE_COUNTDAMAGE_INDEX = #$0012 - %cm_jsl("Boss Damage Counter", #action_select_infohud_mode, #$0012) + %cm_jsl("Boss Damage Counter", #action_select_infohud_mode, !IH_MODE_INDEX_COUNTDAMAGE) ihmode_counthp: -!IH_MODE_COUNTHP_INDEX = #$0013 - %cm_jsl("Boss HP Counter", #action_select_infohud_mode, #$0013) + %cm_jsl("Boss HP Counter", #action_select_infohud_mode, !IH_MODE_INDEX_COUNTHP) ihmode_armpump: -!IH_MODE_ARMPUMP_INDEX = #$0014 - %cm_jsl("Arm Pump Trainer", #action_select_infohud_mode, #$0014) + %cm_jsl("Arm Pump Trainer", #action_select_infohud_mode, !IH_MODE_INDEX_ARMPUMP) ihmode_pumpcounter: - %cm_jsl("Arm Pump Counter", #action_select_infohud_mode, #$0015) + %cm_jsl("Arm Pump Counter", #action_select_infohud_mode, !IH_MODE_INDEX_PUMPCOUNTER) ihmode_xpos: - %cm_jsl("X Position", #action_select_infohud_mode, #$0016) + %cm_jsl("X Position", #action_select_infohud_mode, !IH_MODE_INDEX_XPOS) ihmode_ypos: - %cm_jsl("Y Position", #action_select_infohud_mode, #$0017) + %cm_jsl("Y Position", #action_select_infohud_mode, !IH_MODE_INDEX_YPOS) ihmode_camerapos: - %cm_jsl("Camera Position", #action_select_infohud_mode, #$0018) + %cm_jsl("Camera Position", #action_select_infohud_mode, !IH_MODE_INDEX_CAMERAPOS) ihmode_shottimer: -!IH_MODE_SHOTTIMER_INDEX = #$0019 - %cm_jsl("Shot Timer", #action_select_infohud_mode, #$0019) + %cm_jsl("Shot Timer", #action_select_infohud_mode, !IH_MODE_INDEX_SHOTTIMER) ihmode_ramwatch: -!IH_MODE_RAMWATCH_INDEX = #$001A - %cm_jsl("Custom RAM Watch", #action_select_infohud_mode, #$001A) + %cm_jsl("Custom RAM Watch", #action_select_infohud_mode, !IH_MODE_INDEX_RAMWATCH) -!IH_MODE_COUNT = #$001B action_select_infohud_mode: { TYA : STA !sram_display_mode @@ -2494,7 +2484,7 @@ action_select_room_strat: { TYA : STA !sram_room_strat ; enable ROOM STRAT mode - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode JSL init_print_segment_timer JML cm_previous_menu } @@ -2535,7 +2525,7 @@ ih_room_strat: db #$28, " TWO CRIES", #$FF db #$FF .routine - LDA !IH_MODE_ROOMSTRAT_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode JML init_print_segment_timer ih_goto_superhud: @@ -3055,7 +3045,7 @@ action_select_superhud_top: } ih_superhud_enable: - %cm_jsl("Enable Super HUD", .routine, !IH_MODE_ROOMSTRAT_INDEX) + %cm_jsl("Enable Super HUD", .routine, !IH_MODE_INDEX_ROOMSTRAT) .routine TYA : STA !sram_display_mode TDC : STA !sram_room_strat @@ -4558,10 +4548,10 @@ else if !INFOHUD_ALWAYS_SHOW_X_Y else ; Skip printing segment timer when shinetune or walljump or shot timer enabled - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BEQ .checkSuperHUD - CMP !IH_MODE_SHINETUNE_INDEX : BEQ .skip - CMP !IH_MODE_WALLJUMP_INDEX : BEQ .skip - CMP !IH_MODE_SHOTTIMER_INDEX : BEQ .skip + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BEQ .checkSuperHUD + CMP.w !IH_MODE_INDEX_SHINETUNE : BEQ .skip + CMP.w !IH_MODE_INDEX_WALLJUMP : BEQ .skip + CMP.w !IH_MODE_INDEX_SHOTTIMER : BEQ .skip .print LDA !ram_print_segment_timer : ORA #$8000 : STA !ram_print_segment_timer RTL diff --git a/src/misc.asm b/src/misc.asm index ddef57d1a..2b2b881f8 100644 --- a/src/misc.asm +++ b/src/misc.asm @@ -585,7 +585,7 @@ endif if !FEATURE_VANILLAHUD else ; Check if door skip is selected - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .check_sprite_flags + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .check_sprite_flags LDA !sram_room_strat : BEQ .check_super_hud CMP !IH_STRAT_DOORSKIP_INDEX : BNE .check_sprite_flags diff --git a/src/ramwatchmenu.asm b/src/ramwatchmenu.asm index f4ca25dc1..95748ab84 100644 --- a/src/ramwatchmenu.asm +++ b/src/ramwatchmenu.asm @@ -764,10 +764,10 @@ ramwatch_execute_right: action_HUD_ramwatch: { - LDA !sram_display_mode : CMP !IH_MODE_ROOMSTRAT_INDEX : BNE .notSuperHUD + LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .notSuperHUD LDA !sram_room_strat : BEQ .superHUD .notSuperHUD - LDA !IH_MODE_RAMWATCH_INDEX : STA !sram_display_mode + LDA.w !IH_MODE_INDEX_RAMWATCH : STA !sram_display_mode %sfxconfirm() JML init_print_segment_timer From d5d625eec533358d56f17b0b506fbf172535f319 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Sun, 9 Aug 2026 16:08:34 -0400 Subject: [PATCH 10/27] Automate !IH_STRAT_INDEX updates --- src/defines.asm | 25 ++++++++++++++++++++++ src/gamemode.asm | 4 ++-- src/infohud.asm | 2 +- src/infohudmodes.asm | 28 +++++++++++++++++++++++-- src/layout.asm | 2 +- src/mainmenu.asm | 49 +++++++++++++++++++++----------------------- src/misc.asm | 2 +- 7 files changed, 79 insertions(+), 33 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index d98843df8..23bc9129e 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1413,6 +1413,31 @@ endif !IH_MODE_INDEX_RAMWATCH = (status_display_table_ramwatch-status_display_table)/2 !IH_MODE_COUNT = (status_display_table_end-status_display_table)/2 +!IH_STRAT_INDEX_SUPERHUD = (status_room_table_superhud-status_room_table)/2 +!IH_STRAT_INDEX_CERESRIDLEY = (status_room_table_ceresridley-status_room_table)/2 +!IH_STRAT_INDEX_DOORSKIP = (status_room_table_doorskip-status_room_table)/2 +!IH_STRAT_INDEX_TACOTANK = (status_room_table_tacotank-status_room_table)/2 +!IH_STRAT_INDEX_PITDOOR = (status_room_table_pitdoor-status_room_table)/2 +!IH_STRAT_INDEX_MOONDANCE = (status_room_table_moondance-status_room_table)/2 +!IH_STRAT_INDEX_KRAIDRADAR = (status_room_table_kraidradar-status_room_table)/2 +!IH_STRAT_INDEX_BOOTLESSUP = (status_room_table_bootlessup-status_room_table)/2 +!IH_STRAT_INDEX_GATEGLITCH = (status_room_table_gateglitch-status_room_table)/2 +!IH_STRAT_INDEX_MOATCWJ = (status_room_table_moatcwj-status_room_table)/2 +!IH_STRAT_INDEX_ROBOTFLUSH = (status_room_table_robotflush-status_room_table)/2 +!IH_STRAT_INDEX_SHINETOPB = (status_room_table_shinetopb-status_room_table)/2 +!IH_STRAT_INDEX_ELEVATORCF = (status_room_table_elevatorcf-status_room_table)/2 +!IH_STRAT_INDEX_BOTWOONCF = (status_room_table_botwooncf-status_room_table)/2 +!IH_STRAT_INDEX_DRAYGONAI = (status_room_table_draygonai-status_room_table)/2 +!IH_STRAT_INDEX_SNAILCLIP = (status_room_table_snailclip-status_room_table)/2 +!IH_STRAT_INDEX_WASTELAND = (status_room_table_wasteland-status_room_table)/2 +!IH_STRAT_INDEX_RIDLEYAI = (status_room_table_ridleyai-status_room_table)/2 +!IH_STRAT_INDEX_KIHUNTERMANIP = (status_room_table_kihuntermanip-status_room_table)/2 +!IH_STRAT_INDEX_DOWNBACKZEB = (status_room_table_downbackzeb-status_room_table)/2 +!IH_STRAT_INDEX_ZEBSKIP = (status_room_table_zebskip-status_room_table)/2 +!IH_STRAT_INDEX_MBHP = (status_room_table_mbhp-status_room_table)/2 +!IH_STRAT_INDEX_TWOCRIES = (status_room_table_twocries-status_room_table)/2 +!IH_STRAT_COUNT = (status_room_table_end-status_room_table)/2 + !ROOM_LAYOUT_NO_MAGNET_STAIRS = #$0001 !ROOM_LAYOUT_AREA_RANDO = #$0002 !ROOM_LAYOUT_ANTISOFTLOCK = #$0004 diff --git a/src/gamemode.asm b/src/gamemode.asm index 23f4d8c1a..c66011de0 100644 --- a/src/gamemode.asm +++ b/src/gamemode.asm @@ -606,7 +606,7 @@ gamemode_decrement_display_mode: gamemode_increment_room_strat: { LDA !sram_room_strat : INC - CMP !IH_ROOM_STRAT_COUNT : BNE .set + CMP.w !IH_STRAT_COUNT : BNE .set TDC .set STA !sram_room_strat @@ -619,7 +619,7 @@ gamemode_decrement_room_strat: { LDA !sram_room_strat : DEC CMP #$FFFF : BNE .set - LDA !IH_ROOM_STRAT_COUNT-1 + LDA.w !IH_STRAT_COUNT-1 .set STA !sram_room_strat ; enable ROOM STRAT mode diff --git a/src/infohud.asm b/src/infohud.asm index e796a1410..6b847943e 100644 --- a/src/infohud.asm +++ b/src/infohud.asm @@ -469,7 +469,7 @@ ih_after_room_transition: ; Check if MBHP needs to be disabled LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .segmentTimer LDA !sram_room_strat : BEQ .checkSuperHUD - CMP !IH_STRAT_MBHP_INDEX : BNE .segmentTimer + CMP.w !IH_STRAT_INDEX_MBHP : BNE .segmentTimer LDA !ROOM_ID : CMP.w #ROOM_MotherBrainRoom : BEQ .segmentTimer TDC : STA !sram_display_mode BRA .segmentTimer diff --git a/src/infohudmodes.asm b/src/infohudmodes.asm index 1fa708f45..f261a4050 100644 --- a/src/infohudmodes.asm +++ b/src/infohudmodes.asm @@ -71,33 +71,57 @@ status_enemyhp: status_roomstrat: { LDA !sram_room_strat : ASL : TAX - JSR (.status_room_table,X) + JSR (status_room_table,X) RTS - .status_room_table +status_room_table: + .superhud ; assumed to be zero index dw status_superhud + .ceresridley dw status_ceresridley + .doorskip dw status_doorskip + .tacotank dw status_tacotank + .pitdoor dw status_pitdoor + .moondance dw status_moondance + .kraidradar dw status_kraidradar + .bootlessup dw status_bootlessup + .gateglitch dw status_gateglitch + .moatcwj dw status_moatcwj + .robotflush dw status_robotflush + .shinetopb dw status_shinetopb + .elevatorcf dw status_elevatorcf + .botwooncf dw status_botwooncf + .draygonai dw status_draygonai + .snailclip dw status_snailclip + .wasteland dw status_wasteland + .ridleyai dw status_ridleyai + .kihuntermanip dw status_kihuntermanip + .downbackzeb dw status_downbackzeb + .zebskip dw status_zebskip + .mbhp dw status_mbhp + .twocries dw status_twocries + .end } status_chargetimer: diff --git a/src/layout.asm b/src/layout.asm index d15359d6e..20e657fa8 100644 --- a/src/layout.asm +++ b/src/layout.asm @@ -2443,7 +2443,7 @@ else .assignMBHP ; Switch enemy HP to MB HP LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode - LDA !IH_STRAT_MBHP_INDEX : STA !sram_room_strat + LDA.w !IH_STRAT_INDEX_MBHP : STA !sram_room_strat endif ; !FEATURE_VANILLAHUD .done RTS diff --git a/src/mainmenu.asm b/src/mainmenu.asm index cad1a6516..0b7578014 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -2409,77 +2409,74 @@ RoomStratMenu2: ; Super HUD must always be the first room strat option ihstrat_superhud: - %cm_jsl("Super HUD", #action_select_room_strat, #$0000) + %cm_jsl("Super HUD", #action_select_room_strat, !IH_STRAT_INDEX_SUPERHUD) ihstrat_ceresridley: - %cm_jsl("Ceres Ridley Hits", #action_select_room_strat, #$0001) + %cm_jsl("Ceres Ridley Hits", #action_select_room_strat, !IH_STRAT_INDEX_CERESRIDLEY) ihstrat_doorskip: -!IH_STRAT_DOORSKIP_INDEX = #$0002 - %cm_jsl("Parlor/Botwoon Door Skip", #action_select_room_strat, #$0002) + %cm_jsl("Parlor/Botwoon Door Skip", #action_select_room_strat, !IH_STRAT_INDEX_DOORSKIP) ihstrat_tacotank: - %cm_jsl("Taco Tank", #action_select_room_strat, #$0003) + %cm_jsl("Taco Tank", #action_select_room_strat, !IH_STRAT_INDEX_TACOTANK) ihstrat_pitdoor: - %cm_jsl("Pit Room Right Door", #action_select_room_strat, #$0004) + %cm_jsl("Pit Room Right Door", #action_select_room_strat, !IH_STRAT_INDEX_PITDOOR) ihstrat_moondance: - %cm_jsl("Moondance", #action_select_room_strat, #$0005) + %cm_jsl("Moondance", #action_select_room_strat, #!IH_STRAT_INDEX_MOONDANCE) ihstrat_kraidradar: - %cm_jsl("Kraid Nail Radar", #action_select_room_strat, #$0006) + %cm_jsl("Kraid Nail Radar", #action_select_room_strat, !IH_STRAT_INDEX_KRAIDRADAR) ihstrat_bootlessup: - %cm_jsl("Bootless Up In Two", #action_select_room_strat, #$0007) + %cm_jsl("Bootless Up In Two", #action_select_room_strat, !IH_STRAT_INDEX_BOOTLESSUP) ihstrat_gateglitch: - %cm_jsl("Gate Glitch", #action_select_room_strat, #$0008) + %cm_jsl("Gate Glitch", #action_select_room_strat, !IH_STRAT_INDEX_GATEGLITCH) ihstrat_moatcwj: - %cm_jsl("Moat CWJ", #action_select_room_strat, #$0009) + %cm_jsl("Moat CWJ", #action_select_room_strat, !IH_STRAT_INDEX_MOATCWJ) ihstrat_robotflush: - %cm_jsl("Robot Flush", #action_select_room_strat, #$000A) + %cm_jsl("Robot Flush", #action_select_room_strat, !IH_STRAT_INDEX_ROBOTFLUSH) ihstrat_shinetopb: - %cm_jsl("Shine to PB", #action_select_room_strat, #$000B) + %cm_jsl("Shine to PB", #action_select_room_strat, !IH_STRAT_INDEX_SHINETOPB) ihstrat_elevatorcf: - %cm_jsl("Elevator Crystal Flash", #action_select_room_strat, #$000C) + %cm_jsl("Elevator Crystal Flash", #action_select_room_strat, !IH_STRAT_INDEX_ELEVATORCF) ihstrat_botwooncf: - %cm_jsl("Botwoon Crystal Flash", #action_select_room_strat, #$000D) + %cm_jsl("Botwoon Crystal Flash", #action_select_room_strat, !IH_STRAT_INDEX_BOTWOONCF) ihstrat_draygonai: - %cm_jsl("Draygon AI", #action_select_room_strat, #$000E) + %cm_jsl("Draygon AI", #action_select_room_strat, !IH_STRAT_INDEX_DRAYGONAI) ihstrat_snailclip: - %cm_jsl("Aqueduct Snail Clip", #action_select_room_strat, #$000F) + %cm_jsl("Aqueduct Snail Clip", #action_select_room_strat, !IH_STRAT_INDEX_SNAILCLIP) ihstrat_wasteland: - %cm_jsl("Wasteland Entry", #action_select_room_strat, #$0010) + %cm_jsl("Wasteland Entry", #action_select_room_strat, !IH_STRAT_INDEX_WASTELAND) ihstrat_ridleyai: - %cm_jsl("Ridley AI", #action_select_room_strat, #$0011) + %cm_jsl("Ridley AI", #action_select_room_strat, !IH_STRAT_INDEX_RIDLEYAI) ihstrat_kihuntermanip: - %cm_jsl("Kihunter Manipulation", #action_select_room_strat, #$0012) + %cm_jsl("Kihunter Manipulation", #action_select_room_strat, !IH_STRAT_INDEX_KIHUNTERMANIP) ihstrat_downbackzeb: - %cm_jsl("Downback Zeb Skip", #action_select_room_strat, #$0013) + %cm_jsl("Downback Zeb Skip", #action_select_room_strat, !IH_STRAT_INDEX_DOWNBACKZEB) ihstrat_zebskip: - %cm_jsl("Zeb Skip Indicator", #action_select_room_strat, #$0014) + %cm_jsl("Zeb Skip Indicator", #action_select_room_strat, !IH_STRAT_INDEX_ZEBSKIP) ihstrat_mbhp: -!IH_STRAT_MBHP_INDEX = #$0015 - %cm_jsl("Mother Brain HP", #action_select_room_strat, #$0015) + %cm_jsl("Mother Brain HP", #action_select_room_strat, !IH_STRAT_INDEX_MBHP) ihstrat_twocries: - %cm_jsl("Two Cries Standup", #action_select_room_strat, #$0016) + %cm_jsl("Two Cries Standup", #action_select_room_strat, !IH_STRAT_INDEX_TWOCRIES) -!IH_ROOM_STRAT_COUNT = #$0017 action_select_room_strat: { TYA : STA !sram_room_strat diff --git a/src/misc.asm b/src/misc.asm index 2b2b881f8..103da8094 100644 --- a/src/misc.asm +++ b/src/misc.asm @@ -587,7 +587,7 @@ else ; Check if door skip is selected LDA !sram_display_mode : CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .check_sprite_flags LDA !sram_room_strat : BEQ .check_super_hud - CMP !IH_STRAT_DOORSKIP_INDEX : BNE .check_sprite_flags + CMP.w !IH_STRAT_INDEX_DOORSKIP : BNE .check_sprite_flags .draw_earthquake ; Draw value relevant for block shuffler From 46bb3225a92df0c6c296f9d9f148dbfbeb264e6b Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Sun, 9 Aug 2026 17:45:46 -0400 Subject: [PATCH 11/27] Automate !IH_SUPERHUD_INDEX updates --- src/defines.asm | 86 +++++++++++++++++++++ src/gamemode.asm | 8 +- src/infohud.asm | 8 +- src/infohudmodes.asm | 89 +++++++++++++++++++++- src/layout.asm | 2 +- src/mainmenu.asm | 178 ++++++++++++++++++++----------------------- src/misc.asm | 2 +- src/ramwatchmenu.asm | 2 +- 8 files changed, 266 insertions(+), 109 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index 23bc9129e..411f00114 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1438,6 +1438,92 @@ endif !IH_STRAT_INDEX_TWOCRIES = (status_room_table_twocries-status_room_table)/2 !IH_STRAT_COUNT = (status_room_table_end-status_room_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ENEMYHP = (superhud_bottom_table_enemyhp-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CHARGETIMER = (superhud_bottom_table_chargetimer-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_XFACTOR = (superhud_bottom_table_xfactor-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_COOLDOWN = (superhud_bottom_table_cooldown-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHINETIMER = (superhud_bottom_table_shinetimer-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DASHCOUNTER = (superhud_bottom_table_dashcounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHINETUNE = (superhud_bottom_table_shinetune-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_IFRAMECOUNTER = (superhud_bottom_table_iframecounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SPIKESUIT = (superhud_bottom_table_spikesuit-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_LAGCOUNTER = (superhud_bottom_table_lagcounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CPUUSAGE = (superhud_bottom_table_cpuusage-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_HSPEED = (superhud_bottom_table_hspeed-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DASHSPEED = (superhud_bottom_table_dashspeed-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_VSPEED = (superhud_bottom_table_vspeed-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_QUICKDROP = (superhud_bottom_table_quickdrop-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_WALLJUMP = (superhud_bottom_table_walljump-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DOUBLESBJ = (superhud_bottom_table_doublesbj-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_COUNTDAMAGE = (superhud_bottom_table_countdamage-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_COUNTHP = (superhud_bottom_table_counthp-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ARMPUMP = (superhud_bottom_table_armpump-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_PUMPCOUNTER = (superhud_bottom_table_pumpcounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_XPOS = (superhud_bottom_table_xpos-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_YPOS = (superhud_bottom_table_ypos-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CAMERAPOS = (superhud_bottom_table_camerapos-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHOTTIMER = (superhud_bottom_table_shottimer-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_RAMWATCH = (superhud_bottom_table_ramwatch-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CERESRIDLEY = (superhud_bottom_table_ceresridley-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DOORSKIP = (superhud_bottom_table_doorskip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_TACOTANK = (superhud_bottom_table_tacotank-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_PITDOOR = (superhud_bottom_table_pitdoor-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_MOONDANCE = (superhud_bottom_table_moondance-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_KRAIDRADAR = (superhud_bottom_table_kraidradar-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_BOOTLESSUP = (superhud_bottom_table_bootlessup-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_GATEGLITCH = (superhud_bottom_table_gateglitch-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_MOATCWJ = (superhud_bottom_table_moatcwj-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ROBOTFLUSH = (superhud_bottom_table_robotflush-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHINETOPB = (superhud_bottom_table_shinetopb-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ELEVATORCF = (superhud_bottom_table_elevatorcf-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_BOTWOONCF = (superhud_bottom_table_botwooncf-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DRAYGONAI = (superhud_bottom_table_draygonai-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SNAILCLIP = (superhud_bottom_table_snailclip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_WASTELAND = (superhud_bottom_table_wasteland-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_RIDLEYAI = (superhud_bottom_table_ridleyai-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_KIHUNTERMANIP = (superhud_bottom_table_kihuntermanip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DOWNBACKZEB = (superhud_bottom_table_downbackzeb-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ZEBSKIP = (superhud_bottom_table_zebskip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_MBHP = (superhud_bottom_table_mbhp-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_TWOCRIES = (superhud_bottom_table_twocries-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_COUNT = (superhud_bottom_table_end-superhud_bottom_table)/2 + +!IH_SUPERHUD_MIDDLE_INDEX_OFF = (superhud_middle_table_off-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_CHARGETIMER = (superhud_middle_table_chargetimer-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_XFACTOR = (superhud_middle_table_xfactor-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_COOLDOWN = (superhud_middle_table_cooldown-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_SHINETIMER = (superhud_middle_table_shinetimer-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_DASHCOUNTER = (superhud_middle_table_dashcounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_IFRAMECOUNTER = (superhud_middle_table_iframecounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_LAGCOUNTER = (superhud_middle_table_lagcounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_CPUUSAGE = (superhud_middle_table_cpuusage-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_HSPEED = (superhud_middle_table_hspeed-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_DASHSPEED = (superhud_middle_table_dashspeed-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_SHOTTIMER = (superhud_middle_table_shottimer-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_ITEMPERCENT = (superhud_middle_table_itempercent-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_RESERVES = (superhud_middle_table_reserves-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_STATUSICONS = (superhud_middle_table_statusicons-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_TILECOUNTER = (superhud_middle_table_tilecounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_COUNT = (superhud_middle_table_-superhud_middle_table)/2 + +!IH_SUPERHUD_TOP_INDEX_OFF = (superhud_top_table_off-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_CHARGETIMER = (superhud_top_table_chargetimer-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_XFACTOR = (superhud_top_table_xfactor-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_COOLDOWN = (superhud_top_table_cooldown-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_SHINETIMER = (superhud_top_table_shinetimer-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_DASHCOUNTER = (superhud_top_table_dashcounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_IFRAMECOUNTER = (superhud_top_table_iframecounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_LAGCOUNTER = (superhud_top_table_lagcounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_CPUUSAGE = (superhud_top_table_cpuusage-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_HSPEED = (superhud_top_table_hspeed-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_DASHSPEED = (superhud_top_table_dashspeed-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_SHOTTIMER = (superhud_top_table_shottimer-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_ITEMPERCENT = (superhud_top_table_itempercent-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_RESERVES = (superhud_top_table_reserves-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_STATUSICONS = (superhud_top_table_statusicons-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_TILECOUNTER = (superhud_top_table_tilecounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_COUNT = (superhud_top_table_end-superhud_top_table)/2 + !ROOM_LAYOUT_NO_MAGNET_STAIRS = #$0001 !ROOM_LAYOUT_AREA_RANDO = #$0002 !ROOM_LAYOUT_ANTISOFTLOCK = #$0004 diff --git a/src/gamemode.asm b/src/gamemode.asm index c66011de0..1bc67d889 100644 --- a/src/gamemode.asm +++ b/src/gamemode.asm @@ -473,7 +473,7 @@ gamemode_reveal_damage: .checkRoomStrat LDA !sram_room_strat : BNE .revealRoomStrat ; handle Super HUD case - LDA !sram_superhud_bottom : CMP !IH_SUPERHUD_COUNTDAMAGE_BOTTOM_INDEX : BNE .revealSuperHUD + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_COUNTDAMAGE : BNE .revealSuperHUD ; revert to prior Super HUD mode LDA !ram_display_backup : STA !sram_superhud_bottom %sfxreset() @@ -481,7 +481,7 @@ gamemode_reveal_damage: .revealSuperHUD STA !ram_display_backup - LDA !IH_SUPERHUD_COUNTDAMAGE_BOTTOM_INDEX : STA !sram_superhud_bottom + LDA.w !IH_SUPERHUD_BOTTOM_INDEX_COUNTDAMAGE : STA !sram_superhud_bottom %sfxconfirm() BRA gamemode_reveal_hp_updateHUD } @@ -511,7 +511,7 @@ gamemode_reveal_hp: .checkRoomStrat LDA !sram_room_strat : BNE .revealRoomStrat ; handle Super HUD case - LDA !sram_superhud_bottom : CMP !IH_SUPERHUD_COUNTHP_BOTTOM_INDEX : BNE .revealSuperHUD + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_COUNTHP : BNE .revealSuperHUD ; revert to prior Super HUD mode LDA !ram_display_backup : STA !sram_superhud_bottom %sfxreset() @@ -519,7 +519,7 @@ gamemode_reveal_hp: .revealSuperHUD STA !ram_display_backup - LDA !IH_SUPERHUD_COUNTHP_BOTTOM_INDEX : STA !sram_superhud_bottom + LDA.w !IH_SUPERHUD_BOTTOM_INDEX_COUNTHP : STA !sram_superhud_bottom ; set ram_HUD_check to some value that cannot match the damage counter ; conveniently the current value of A will work STA !ram_HUD_check diff --git a/src/infohud.asm b/src/infohud.asm index 6b847943e..dbdf600a2 100644 --- a/src/infohud.asm +++ b/src/infohud.asm @@ -475,7 +475,7 @@ ih_after_room_transition: BRA .segmentTimer .checkSuperHUD - LDA !sram_superhud_bottom : CMP !IH_SUPERHUD_MBHP_BOTTOM_INDEX : BNE .segmentTimer + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_MBHP : BNE .segmentTimer LDA !ROOM_ID : CMP.w #ROOM_MotherBrainRoom : BEQ .segmentTimer TDC : STA !sram_superhud_bottom @@ -793,7 +793,7 @@ ih_update_hud_after_transition: LDA !sram_room_strat : BNE ih_update_hud_code_start ; Update Super HUD lag counters - LDA !sram_superhud_top : CMP !IH_SUPERHUD_LAG_COUNTER_TOP_INDEX : BNE .middleHUD + LDA !sram_superhud_top : CMP.w !IH_SUPERHUD_TOP_INDEX_LAGCOUNTER : BNE .middleHUD LDA !sram_lag_counter_mode : BNE .topFullTime LDA !ram_last_door_lag_frames BRA .topDrawTime @@ -804,7 +804,7 @@ ih_update_hud_after_transition: TDC : STA !ram_HUD_top .middleHUD - LDA !sram_superhud_middle : CMP !IH_SUPERHUD_LAG_COUNTER_MIDDLE_INDEX : BNE .bottomHUD + LDA !sram_superhud_middle : CMP.w !IH_SUPERHUD_MIDDLE_INDEX_LAGCOUNTER : BNE .bottomHUD LDA !sram_lag_counter_mode : BNE .middleFullTime LDA !ram_last_door_lag_frames BRA .middleDrawTime @@ -816,7 +816,7 @@ ih_update_hud_after_transition: ; Check armpump .bottomHUD - LDA !sram_superhud_bottom : CMP !IH_SUPERHUD_ARMPUMP_BOTTOM_INDEX : BNE ih_update_hud_code_start + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_ARMPUMP : BNE ih_update_hud_code_start JMP ih_update_hud_before_transition_armpump } diff --git a/src/infohudmodes.asm b/src/infohudmodes.asm index f261a4050..f16c09580 100644 --- a/src/infohudmodes.asm +++ b/src/infohudmodes.asm @@ -1874,90 +1874,173 @@ status_superhud: JMP (superhud_bottom_table,X) superhud_bottom_table: + .enemyhp dw status_enemyhp + .chargetimer dw status_chargetimer + .xfactor dw status_xfactor + .cooldown dw status_cooldown + .shinetimer dw status_shinetimer + .dashcounter dw status_dashcounter + .shinetune dw status_shinetune + .iframecounter dw status_iframecounter + .spikesuit dw status_spikesuit + .lagcounter dw status_lagcounter + .cpuusage dw status_cpuusage + .hspeed dw status_hspeed + .dashspeed dw status_dashspeed + .vspeed dw status_vspeed + .quickdrop dw status_quickdrop + .walljump dw status_walljump + .doublesbj dw status_doublesbj + .countdamage dw status_countdamage + .counthp dw status_enemyhp + .armpump dw status_armpump + .pumpcounter dw status_pumpcounter + .xpos dw status_xpos + .ypos dw status_ypos + .camerapos dw status_camerapos + .shottimer dw status_shottimer + .ramwatch dw status_ramwatch + .ceresridley dw status_ceresridley + .doorskip dw status_doorskip + .tacotank dw status_tacotank + .pitdoor dw status_pitdoor + .moondance dw status_moondance + .kraidradar dw status_kraidradar + .bootlessup dw status_bootlessup + .gateglitch dw status_gateglitch + .moatcwj dw status_moatcwj + .robotflush dw status_robotflush + .shinetopb dw status_shinetopb + .elevatorcf dw status_elevatorcf + .botwooncf dw status_botwooncf + .draygonai dw status_draygonai + .snailclip dw status_snailclip + .wasteland dw status_wasteland + .ridleyai dw status_ridleyai + .kihuntermanip dw status_kihuntermanip + .downbackzeb dw status_downbackzeb + .zebskip dw status_zebskip + .mbhp dw status_mbhp + .twocries dw status_twocries + .end superhud_middle_table: + .off dw status_enemyhp_done + .chargetimer dw middleHUD_chargetimer + .xfactor dw middleHUD_xfactor + .cooldown dw middleHUD_cooldown + .shinetimer dw middleHUD_shinetimer + .dashcounter dw middleHUD_dashcounter + .iframecounter dw middleHUD_iframecounter + .lagcounter dw middleHUD_lagcounter + .cpuusage dw middleHUD_cpuusage + .hspeed dw middleHUD_hspeed + .dashspeed dw middleHUD_dashspeed + .shottimer dw middleHUD_shottimer + .itempercent dw middleHUD_itempercent + .reserves dw middleHUD_reserves + .statusicons dw middleHUD_statusicons + .tilecounter dw middleHUD_tilecounter + .end superhud_top_table: + .off dw status_enemyhp_done + .chargetimer dw topHUD_chargetimer + .xfactor dw topHUD_xfactor + .cooldown dw topHUD_cooldown + .shinetimer dw topHUD_shinetimer + .dashcounter dw topHUD_dashcounter + .iframecounter dw topHUD_iframecounter + .lagcounter dw topHUD_lagcounter + .cpuusage dw topHUD_cpuusage + .hspeed dw topHUD_hspeed + .dashspeed dw topHUD_dashspeed + .shottimer dw topHUD_shottimer + .itempercent dw topHUD_itempercent + .reserves dw topHUD_reserves + .statusicons dw topHUD_statusicons + .tilecounter dw topHUD_tilecounter + .end middleHUD_chargetimer: { @@ -2988,7 +3071,7 @@ endif .peaking ; If still rising, nothing to do LDA !SAMUS_Y_DIRECTION : CMP #$0001 : BEQ .done - + ; Fail if not falling with proper speed and pose CMP #$0002 : BNE .peakfail LDA !SAMUS_Y : CMP #$0243 : BPL .peakfail @@ -3958,7 +4041,7 @@ status_bootlessup: .inccounter LDA !ram_roomstrat_counter : INC : STA !ram_roomstrat_counter BRA .checkstartpos - + .checky1bomb LDA !IH_CONTROLLER_PRI_NEW : AND !IH_INPUT_SHOT : BEQ .inccounter JMP .laidy1bomb @@ -5446,7 +5529,7 @@ status_downbackzeb: ; Start the vertical subpixel checks once knockback runs out STA !ram_roomstrat_state TDC : STA !ram_roomstrat_counter - + ; check horizontal position LDA !IH_LETTER_X LDX !SAMUS_X_SUBPX : BEQ .good_subx diff --git a/src/layout.asm b/src/layout.asm index 20e657fa8..9ca961510 100644 --- a/src/layout.asm +++ b/src/layout.asm @@ -2437,7 +2437,7 @@ else CMP.w !IH_MODE_INDEX_ROOMSTRAT : BNE .done LDA !sram_superhud_bottom : BNE .done ; Switch Super HUD enemy HP to MB HP - LDA !IH_SUPERHUD_MBHP_BOTTOM_INDEX : STA !sram_superhud_bottom + LDA.w !IH_SUPERHUD_BOTTOM_INDEX_MBHP : STA !sram_superhud_bottom RTS .assignMBHP diff --git a/src/mainmenu.asm b/src/mainmenu.asm index 0b7578014..8450a381d 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -2671,159 +2671,149 @@ SuperHUDBottomMenu3: ; Enemy HP must always be the first Super HUD bottom option ih_superhud_enemyhp: - %cm_jsl("Enemy HP", #action_select_superhud_bottom, #$0000) + %cm_jsl("Enemy HP", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_ENEMYHP) ih_superhud_chargetimer: - %cm_jsl("Charge Timer", #action_select_superhud_bottom, #$0001) + %cm_jsl("Charge Timer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_CHARGETIMER) ih_superhud_xfactor: - %cm_jsl("X-Factor Timer", #action_select_superhud_bottom, #$0002) + %cm_jsl("X-Factor Timer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_XFACTOR) ih_superhud_cooldown: - %cm_jsl("Cooldown Timer", #action_select_superhud_bottom, #$0003) + %cm_jsl("Cooldown Timer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_COOLDOWN) ih_superhud_shinetimer: - %cm_jsl("Shinespark Timer", #action_select_superhud_bottom, #$0004) + %cm_jsl("Shinespark Timer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_SHINETIMER) ih_superhud_dashcounter: - %cm_jsl("Dash Counter", #action_select_superhud_bottom, #$0005) + %cm_jsl("Dash Counter", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_DASHCOUNTER) ih_superhud_shinetune: -!IH_SUPERHUD_SHINETUNE_BOTTOM_INDEX = #$0006 - %cm_jsl("Shine Tune", #action_select_superhud_bottom, #$0006) + %cm_jsl("Shine Tune", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_SHINETUNE) ih_superhud_iframecounter: - %cm_jsl("I-Frame Counter", #action_select_superhud_bottom, #$0007) + %cm_jsl("I-Frame Counter", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_IFRAMECOUNTER) ih_superhud_spikesuit: - %cm_jsl("Spikesuit Trainer", #action_select_superhud_bottom, #$0008) + %cm_jsl("Spikesuit Trainer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_SPIKESUIT) ih_superhud_lagcounter: - %cm_jsl("Lag Counter", #action_select_superhud_bottom, #$0009) + %cm_jsl("Lag Counter", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_LAGCOUNTER) ih_superhud_cpuusage: - %cm_jsl("CPU Usage", #action_select_superhud_bottom, #$000A) + %cm_jsl("CPU Usage", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_CPUUSAGE) ih_superhud_hspeed: - %cm_jsl("Horizontal Speed", #action_select_superhud_bottom, #$000B) + %cm_jsl("Horizontal Speed", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_HSPEED) ih_superhud_dashspeed: - %cm_jsl("Dash Speed", #action_select_superhud_bottom, #$000C) + %cm_jsl("Dash Speed", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_DASHSPEED) ih_superhud_vspeed: - %cm_jsl("Vertical Speed", #action_select_superhud_bottom, #$000D) + %cm_jsl("Vertical Speed", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_VSPEED) ih_superhud_quickdrop: - %cm_jsl("Quickdrop Trainer", #action_select_superhud_bottom, #$000E) + %cm_jsl("Quickdrop Trainer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_QUICKDROP) ih_superhud_walljump: -!IH_SUPERHUD_WALLJUMP_BOTTOM_INDEX = #$000F - %cm_jsl("Walljump Trainer", #action_select_superhud_bottom, #$000F) + %cm_jsl("Walljump Trainer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_WALLJUMP) ih_superhud_doublesbj: - %cm_jsl("Double Springball Jump", #action_select_superhud_bottom, #$0010) + %cm_jsl("Double Springball Jump", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_DOUBLESBJ) ih_superhud_countdamage: -!IH_SUPERHUD_COUNTDAMAGE_BOTTOM_INDEX = #$0011 - %cm_jsl("Boss Damage Counter", #action_select_superhud_bottom, #$0011) + %cm_jsl("Boss Damage Counter", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_COUNTDAMAGE) ih_superhud_counthp: -!IH_SUPERHUD_COUNTHP_BOTTOM_INDEX = #$0012 - %cm_jsl("Boss HP Counter", #action_select_superhud_bottom, #$0012) + %cm_jsl("Boss HP Counter", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_COUNTHP) ih_superhud_armpump: -!IH_SUPERHUD_ARMPUMP_BOTTOM_INDEX = #$0013 - %cm_jsl("Arm Pump Trainer", #action_select_superhud_bottom, #$0013) + %cm_jsl("Arm Pump Trainer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_ARMPUMP) ih_superhud_pumpcounter: - %cm_jsl("Arm Pump Counter", #action_select_superhud_bottom, #$0014) + %cm_jsl("Arm Pump Counter", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_PUMPCOUNTER) ih_superhud_xpos: - %cm_jsl("X Position", #action_select_superhud_bottom, #$0015) + %cm_jsl("X Position", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_XPOS) ih_superhud_ypos: - %cm_jsl("Y Position", #action_select_superhud_bottom, #$0016) + %cm_jsl("Y Position", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_YPOS) ih_superhud_camerapos: - %cm_jsl("Camera Position", #action_select_superhud_bottom, #$0017) + %cm_jsl("Camera Position", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_CAMERAPOS) ih_superhud_shottimer: -!IH_SUPERHUD_SHOTTIMER_BOTTOM_INDEX = #$0018 - %cm_jsl("Shot Timer", #action_select_superhud_bottom, #$0018) + %cm_jsl("Shot Timer", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_SHOTTIMER) ih_superhud_ramwatch: -!IH_SUPERHUD_RAMWATCH_BOTTOM_INDEX = #$0019 - %cm_jsl("Custom RAM Watch", #action_select_superhud_bottom, #$0019) + %cm_jsl("Custom RAM Watch", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_RAMWATCH) ih_superhud_ceresridley: - %cm_jsl("Ceres Ridley Hits", #action_select_superhud_bottom, #$001A) + %cm_jsl("Ceres Ridley Hits", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_CERESRIDLEY) ih_superhud_doorskip: -!IH_SUPERHUD_DOORSKIP_BOTTOM_INDEX = #$001B - %cm_jsl("Parlor-Climb Door Skip", #action_select_superhud_bottom, #$001B) + %cm_jsl("Parlor-Climb Door Skip", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_DOORSKIP) ih_superhud_tacotank: - %cm_jsl("Taco Tank", #action_select_superhud_bottom, #$001C) + %cm_jsl("Taco Tank", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_TACOTANK) ih_superhud_pitdoor: - %cm_jsl("Pit Room Right Door", #action_select_superhud_bottom, #$001D) + %cm_jsl("Pit Room Right Door", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_PITDOOR) ih_superhud_moondance: - %cm_jsl("Moondance", #action_select_superhud_bottom, #$001E) + %cm_jsl("Moondance", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_MOONDANCE) ih_superhud_kraidradar: - %cm_jsl("Kraid Nail Radar", #action_select_superhud_bottom, #$001F) + %cm_jsl("Kraid Nail Radar", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_KRAIDRADAR) ih_superhud_bootlessup: - %cm_jsl("Bootless Up In Two", #action_select_superhud_bottom, #$0020) + %cm_jsl("Bootless Up In Two", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_BOOTLESSUP) ih_superhud_gateglitch: - %cm_jsl("Gate Glitch", #action_select_superhud_bottom, #$0021) + %cm_jsl("Gate Glitch", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_GATEGLITCH) ih_superhud_moatcwj: - %cm_jsl("Moat CWJ", #action_select_superhud_bottom, #$0022) + %cm_jsl("Moat CWJ", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_MOATCWJ) ih_superhud_robotflush: - %cm_jsl("Robot Flush", #action_select_superhud_bottom, #$0023) + %cm_jsl("Robot Flush", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_ROBOTFLUSH) ih_superhud_shinetopb: - %cm_jsl("Shine to PB", #action_select_superhud_bottom, #$0024) + %cm_jsl("Shine to PB", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_SHINETOPB) ih_superhud_elevatorcf: - %cm_jsl("Elevator Crystal Flash", #action_select_superhud_bottom, #$0025) + %cm_jsl("Elevator Crystal Flash", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_ELEVATORCF) ih_superhud_botwooncf: - %cm_jsl("Botwoon Crystal Flash", #action_select_superhud_bottom, #$0026) + %cm_jsl("Botwoon Crystal Flash", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_BOTWOONCF) ih_superhud_draygonai: - %cm_jsl("Draygon AI", #action_select_superhud_bottom, #$0027) + %cm_jsl("Draygon AI", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_DRAYGONAI) ih_superhud_snailclip: - %cm_jsl("Aqueduct Snail Clip", #action_select_superhud_bottom, #$0028) + %cm_jsl("Aqueduct Snail Clip", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_SNAILCLIP) ih_superhud_wasteland: - %cm_jsl("Wasteland Entry", #action_select_superhud_bottom, #$0029) + %cm_jsl("Wasteland Entry", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_WASTELAND) ih_superhud_ridleyai: - %cm_jsl("Ridley AI", #action_select_superhud_bottom, #$002A) + %cm_jsl("Ridley AI", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_RIDLEYAI) ih_superhud_kihuntermanip: - %cm_jsl("Kihunter Manipulation", #action_select_superhud_bottom, #$002B) + %cm_jsl("Kihunter Manipulation", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_KIHUNTERMANIP) ih_superhud_downbackzeb: - %cm_jsl("Downback Zeb Skip", #action_select_superhud_bottom, #$002C) + %cm_jsl("Downback Zeb Skip", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_DOWNBACKZEB) ih_superhud_zebskip: - %cm_jsl("Zeb Skip Indicator", #action_select_superhud_bottom, #$002D) + %cm_jsl("Zeb Skip Indicator", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_ZEBSKIP) ih_superhud_mbhp: -!IH_SUPERHUD_MBHP_BOTTOM_INDEX = #$002E - %cm_jsl("Mother Brain HP", #action_select_superhud_bottom, #$002E) + %cm_jsl("Mother Brain HP", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_MBHP) ih_superhud_twocries: - %cm_jsl("Two Cries Standup", #action_select_superhud_bottom, #$002F) + %cm_jsl("Two Cries Standup", #action_select_superhud_bottom, !IH_SUPERHUD_BOTTOM_INDEX_TWOCRIES) -!IH_SUPERHUD_BOTTOM_COUNT = #$0030 action_select_superhud_bottom: { TYA : STA !sram_superhud_bottom @@ -2886,53 +2876,52 @@ SuperHUDMiddleMenu: %cm_header("SUPER HUD MIDDLE MODE") ih_superhud_middle_off: - %cm_jsl("Disabled", #action_select_superhud_middle, #$0000) + %cm_jsl("Disabled", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_OFF) ih_superhud_middle_chargetimer: - %cm_jsl("Charge Timer", #action_select_superhud_middle, #$0001) + %cm_jsl("Charge Timer", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_CHARGETIMER) ih_superhud_middle_xfactor: - %cm_jsl("X-Factor Timer", #action_select_superhud_middle, #$0002) + %cm_jsl("X-Factor Timer", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_XFACTOR) ih_superhud_middle_cooldown: - %cm_jsl("Cooldown Timer", #action_select_superhud_middle, #$0003) + %cm_jsl("Cooldown Timer", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_COOLDOWN) ih_superhud_middle_shinetimer: - %cm_jsl("Shinespark Timer", #action_select_superhud_middle, #$0004) + %cm_jsl("Shinespark Timer", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_SHINETIMER) ih_superhud_middle_dashcounter: - %cm_jsl("Dash Counter", #action_select_superhud_middle, #$0005) + %cm_jsl("Dash Counter", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_DASHCOUNTER) ih_superhud_middle_iframecounter: - %cm_jsl("I-Frame Counter", #action_select_superhud_middle, #$0006) + %cm_jsl("I-Frame Counter", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_IFRAMECOUNTER) -!IH_SUPERHUD_LAG_COUNTER_MIDDLE_INDEX = #$0007 ih_superhud_middle_lagcounter: - %cm_jsl("Lag Counter", #action_select_superhud_middle, #$0007) + %cm_jsl("Lag Counter", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_LAGCOUNTER) ih_superhud_middle_cpuusage: - %cm_jsl("CPU Usage", #action_select_superhud_middle, #$0008) + %cm_jsl("CPU Usage", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_CPUUSAGE) ih_superhud_middle_hspeed: - %cm_jsl("Horizontal Speed", #action_select_superhud_middle, #$0009) + %cm_jsl("Horizontal Speed", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_HSPEED) ih_superhud_middle_dashspeed: - %cm_jsl("Dash Speed", #action_select_superhud_middle, #$000A) + %cm_jsl("Dash Speed", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_DASHSPEED) ih_superhud_middle_shottimer: - %cm_jsl("Shot Timer", #action_select_superhud_middle, #$000B) + %cm_jsl("Shot Timer", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_SHOTTIMER) ih_superhud_middle_itempercent: - %cm_jsl("Item Collection %", #action_select_superhud_middle, #$000C) + %cm_jsl("Item Collection %", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_ITEMPERCENT) ih_superhud_middle_reserves: - %cm_jsl("Reserves", #action_select_superhud_middle, #$000D) + %cm_jsl("Reserves", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_RESERVES) ih_superhud_middle_statusicons: - %cm_jsl("Status Icons", #action_select_superhud_middle, #$000E) + %cm_jsl("Status Icons", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_STATUSICONS) ih_superhud_middle_tilecounter: - %cm_jsl("Map Tile Counter", #action_select_superhud_middle, #$000F) + %cm_jsl("Map Tile Counter", #action_select_superhud_middle, !IH_SUPERHUD_MIDDLE_INDEX_TILECOUNTER) action_select_superhud_middle: { @@ -2987,53 +2976,52 @@ SuperHUDTopMenu: %cm_header("SUPER HUD TOP MODE") ih_superhud_top_off: - %cm_jsl("Disabled", #action_select_superhud_top, #$0000) + %cm_jsl("Disabled", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_OFF) ih_superhud_top_chargetimer: - %cm_jsl("Charge Timer", #action_select_superhud_top, #$0001) + %cm_jsl("Charge Timer", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_CHARGETIMER) ih_superhud_top_xfactor: - %cm_jsl("X-Factor Timer", #action_select_superhud_top, #$0002) + %cm_jsl("X-Factor Timer", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_XFACTOR) ih_superhud_top_cooldown: - %cm_jsl("Cooldown Timer", #action_select_superhud_top, #$0003) + %cm_jsl("Cooldown Timer", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_COOLDOWN) ih_superhud_top_shinetimer: - %cm_jsl("Shinespark Timer", #action_select_superhud_top, #$0004) + %cm_jsl("Shinespark Timer", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_SHINETIMER) ih_superhud_top_dashcounter: - %cm_jsl("Dash Counter", #action_select_superhud_top, #$0005) + %cm_jsl("Dash Counter", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_DASHCOUNTER) ih_superhud_top_iframecounter: - %cm_jsl("I-Frame Counter", #action_select_superhud_top, #$0006) + %cm_jsl("I-Frame Counter", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_IFRAMECOUNTER) -!IH_SUPERHUD_LAG_COUNTER_TOP_INDEX = #$0007 ih_superhud_top_lagcounter: - %cm_jsl("Lag Counter", #action_select_superhud_top, #$0007) + %cm_jsl("Lag Counter", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_LAGCOUNTER) ih_superhud_top_cpuusage: - %cm_jsl("CPU Usage", #action_select_superhud_top, #$0008) + %cm_jsl("CPU Usage", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_CPUUSAGE) ih_superhud_top_hspeed: - %cm_jsl("Horizontal Speed", #action_select_superhud_top, #$0009) + %cm_jsl("Horizontal Speed", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_HSPEED) ih_superhud_top_dashspeed: - %cm_jsl("Dash Speed", #action_select_superhud_top, #$000A) + %cm_jsl("Dash Speed", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_DASHSPEED) ih_superhud_top_shottimer: - %cm_jsl("Shot Timer", #action_select_superhud_top, #$000B) + %cm_jsl("Shot Timer", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_SHOTTIMER) ih_superhud_top_itempercent: - %cm_jsl("Item Collection %", #action_select_superhud_top, #$000C) + %cm_jsl("Item Collection %", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_ITEMPERCENT) ih_superhud_top_reserves: - %cm_jsl("Reserves", #action_select_superhud_top, #$000D) + %cm_jsl("Reserves", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_RESERVES) ih_superhud_top_statusicons: - %cm_jsl("Status Icons", #action_select_superhud_top, #$000E) + %cm_jsl("Status Icons", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_STATUSICONS) ih_superhud_top_tilecounter: - %cm_jsl("Map Tile Counter", #action_select_superhud_top, #$000F) + %cm_jsl("Map Tile Counter", #action_select_superhud_top, !IH_SUPERHUD_TOP_INDEX_TILECOUNTER) action_select_superhud_top: { @@ -4555,9 +4543,9 @@ else .checkSuperHUD LDA !sram_room_strat : BNE .print - LDA !sram_superhud_bottom : CMP !IH_SUPERHUD_SHINETUNE_BOTTOM_INDEX : BEQ .skip - CMP !IH_SUPERHUD_WALLJUMP_BOTTOM_INDEX : BEQ .skip - CMP !IH_SUPERHUD_SHOTTIMER_BOTTOM_INDEX : BNE .print + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_SHINETUNE : BEQ .skip + CMP.w !IH_SUPERHUD_BOTTOM_INDEX_WALLJUMP : BEQ .skip + CMP.w !IH_SUPERHUD_BOTTOM_INDEX_SHOTTIMER : BNE .print .skip endif diff --git a/src/misc.asm b/src/misc.asm index 103da8094..7da9aa9cb 100644 --- a/src/misc.asm +++ b/src/misc.asm @@ -606,7 +606,7 @@ else BRA .check_sprite_flags .check_super_hud - LDA !sram_superhud_bottom : CMP !IH_SUPERHUD_DOORSKIP_BOTTOM_INDEX + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_DOORSKIP BEQ .draw_earthquake .check_sprite_flags diff --git a/src/ramwatchmenu.asm b/src/ramwatchmenu.asm index 95748ab84..eb2e98eed 100644 --- a/src/ramwatchmenu.asm +++ b/src/ramwatchmenu.asm @@ -772,7 +772,7 @@ action_HUD_ramwatch: JML init_print_segment_timer .superHUD - LDA !IH_SUPERHUD_RAMWATCH_BOTTOM_INDEX : STA !sram_superhud_bottom + LDA.w !IH_SUPERHUD_BOTTOM_INDEX_RAMWATCH : STA !sram_superhud_bottom %sfxconfirm() JML init_print_segment_timer } From 78fe1e9e89634b4301aaa0801a641a7c9e94b97d Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Mon, 10 Aug 2026 06:22:55 -0400 Subject: [PATCH 12/27] Revert micro optimization Not worth figuring out how to balance it in artificial lag, and nobody cares anyway Also revert bank $00 orgs in crash.asm --- src/damage.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/damage.asm b/src/damage.asm index c6af8f036..ae3505b2a 100644 --- a/src/damage.asm +++ b/src/damage.asm @@ -41,7 +41,7 @@ org $90E72B org $90E74D PLA : PHX : TAX JSR (periodic_damage_table,X) - PLX : BRA $00 + PLX : NOP : NOP ; Transfer logic here by overwriting redundant end of periodic damage ; Also repoint jump and branch to avoid the redundant section From fedff88bc52a8ae1857db724495a0c457ac557e5 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Mon, 10 Aug 2026 20:49:00 -0400 Subject: [PATCH 13/27] Submenu for Door Display Mode selection Update defines.asm --- src/defines.asm | 11 ++++++++++ src/infohud.asm | 26 ++++++++++++++++-------- src/mainmenu.asm | 53 +++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index 411f00114..bed6f1a18 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1524,6 +1524,17 @@ endif !IH_SUPERHUD_TOP_INDEX_TILECOUNTER = (superhud_top_table_tilecounter-superhud_top_table)/2 !IH_SUPERHUD_TOP_COUNT = (superhud_top_table_end-superhud_top_table)/2 +!IH_DOOR_INDEX_OFF = (DoorDisplayTable_off-DoorDisplayTable)/2 +!IH_DOOR_INDEX_HSPEED = (DoorDisplayTable_hspeed-DoorDisplayTable)/2 +!IH_DOOR_INDEX_DASHSPEED = (DoorDisplayTable_dashspeed-DoorDisplayTable)/2 +!IH_DOOR_INDEX_VSPEED = (DoorDisplayTable_vspeed-DoorDisplayTable)/2 +!IH_DOOR_INDEX_CHARGETIMER = (DoorDisplayTable_chargetimer-DoorDisplayTable)/2 +!IH_DOOR_INDEX_SHINETIMER = (DoorDisplayTable_shinetimer-DoorDisplayTable)/2 +!IH_DOOR_INDEX_DASHCOUNTER = (DoorDisplayTable_dashcounter-DoorDisplayTable)/2 +!IH_DOOR_INDEX_XPOS = (DoorDisplayTable_xpos-DoorDisplayTable)/2 +!IH_DOOR_INDEX_YPOS = (DoorDisplayTable_ypos-DoorDisplayTable)/2 +!IH_DOOR_COUNT = (DoorDisplayTable_end-DoorDisplayTable)/2 + !ROOM_LAYOUT_NO_MAGNET_STAIRS = #$0001 !ROOM_LAYOUT_AREA_RANDO = #$0002 !ROOM_LAYOUT_ANTISOFTLOCK = #$0004 diff --git a/src/infohud.asm b/src/infohud.asm index dbdf600a2..081b91c80 100644 --- a/src/infohud.asm +++ b/src/infohud.asm @@ -569,7 +569,7 @@ ih_before_room_transition: LDA !sram_display_mode : BNE .done LDA !sram_door_display_mode : BEQ .done ASL : TAX - JSR (.doorDisplayTable,X) + JSR (DoorDisplayTable,X) ; Suppress Enemy HP display LDA !ENEMY_HP : STA !ram_enemy_hp @@ -588,16 +588,26 @@ ih_before_room_transition: TYA : JSR Draw2 BRA .doorDisplay - .doorDisplayTable - dw #$0000 ; off/dummy - dw status_door_hspeed +DoorDisplayTable: + .off + dw #$0000 ; off/dummy + .hspeed + dw status_door_hspeed + .dashspeed dw status_door_dashspeed - dw status_door_vspeed + .vspeed + dw status_door_vspeed + .chargetimer dw status_door_chargetimer - dw status_door_shinetimer + .shinetimer + dw status_shinetimer + .dashcounter dw status_door_dashcounter - dw status_door_xpos - dw status_door_ypos + .xpos + dw status_door_xpos + .ypos + dw status_door_ypos + .end } ceres_start_timers: diff --git a/src/mainmenu.asm b/src/mainmenu.asm index 8450a381d..f526189fd 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -3040,7 +3040,7 @@ ih_superhud_enable: ih_door_display_mode: dw !ACTION_CHOICE dl #!sram_door_display_mode - dw #$0000 + dw #.routine db #$28, "Door HUD Mode", #$FF db #$28, " OFF", #$FF db #$28, "HORIZ SPEED", #$FF @@ -3052,6 +3052,57 @@ ih_door_display_mode: db #$28, " X POSITION", #$FF db #$28, " Y POSITION", #$FF db #$FF + .routine + ; check for A or Y input + LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done + ; jump to submenu + LDY.w #DoorDisplayModeMenu + JSL cm_go_back + %submenu_jump() + .done + RTL + +DoorDisplayModeMenu: + dw ih_door_display_off + dw ih_door_display_hspeed + dw ih_door_display_vspeed + dw ih_door_display_chargetimer + dw ih_door_display_shinetimer + dw ih_door_display_dashcounter + dw ih_door_display_xpos + dw ih_door_display_ypos + dw $0000 + %cm_header("Select Door HUD Mode") + +ih_door_display_off: + %cm_jsl("Disabled", #action_select_door_display_mode, !IH_DOOR_INDEX_OFF) + +ih_door_display_hspeed: + %cm_jsl("Horizontal Speed", #action_select_door_display_mode, !IH_DOOR_INDEX_HSPEED) + +ih_door_display_vspeed: + %cm_jsl("Vertical Speed", #action_select_door_display_mode, !IH_DOOR_INDEX_VSPEED) + +ih_door_display_chargetimer: + %cm_jsl("Charge Timer", #action_select_door_display_mode, !IH_DOOR_INDEX_CHARGETIMER) + +ih_door_display_shinetimer: + %cm_jsl("Shinespark Timer", #action_select_door_display_mode, !IH_DOOR_INDEX_SHINETIMER) + +ih_door_display_dashcounter: + %cm_jsl("Dash Counter", #action_select_door_display_mode, !IH_DOOR_INDEX_DASHCOUNTER) + +ih_door_display_xpos: + %cm_jsl("X Position", #action_select_door_display_mode, !IH_DOOR_INDEX_XPOS) + +ih_door_display_ypos: + %cm_jsl("Y Position", #action_select_door_display_mode, !IH_DOOR_INDEX_YPOS) + +action_select_door_display_mode: +{ + TYA : STA !sram_door_display_mode + JML cm_previous_menu +} ih_goto_timer_settings: %cm_submenu("Timer Settings", #TimerSettingsMenu) From 1bc796e939ea309d1d63fa9ee6a9ce4ca11d127b Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Mon, 10 Aug 2026 21:20:50 -0400 Subject: [PATCH 14/27] HUD Mode choice menus open submenus Press A or Y on HUD mode choice menus to open submenu list --- src/mainmenu.asm | 70 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/src/mainmenu.asm b/src/mainmenu.asm index f526189fd..203c9a3c6 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -2362,7 +2362,19 @@ ih_display_mode: db #$28, " RAM WATCH", #$FF db #$FF .routine - JML init_print_segment_timer + JSL init_print_segment_timer + ; check for A or Y input + LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done + ; jump to appropriate submenu page + LDA !sram_superhud_bottom : CMP.w !IH_MODE_INDEX_COUNTDAMAGE : BMI .p1 + LDY.w #DisplayModeMenu2 + BRA .jump + .p1 + LDY.w #DisplayModeMenu + .jump + JSL action_submenu + .done + RTL ih_display_mode_reward: %cm_toggle("Strat Reward SFX", !sram_display_mode_reward, #$01, #0) @@ -2523,7 +2535,19 @@ ih_room_strat: db #$FF .routine LDA.w !IH_MODE_INDEX_ROOMSTRAT : STA !sram_display_mode - JML init_print_segment_timer + JSL init_print_segment_timer + ; check for A or Y input + LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done + ; jump to appropriate submenu page + LDA !sram_superhud_bottom : CMP.w !IH_STRAT_INDEX_DOWNBACKZEB : BMI .p1 + LDY.w #RoomStratMenu2 + BRA .jump + .p1 + LDY.w #RoomStratMenu + .jump + JSL action_submenu + .done + RTL ih_goto_superhud: %cm_submenu("Configure Super HUD", #SuperHUDMenu) @@ -2545,8 +2569,8 @@ SuperHUDMenu: ih_superhud_bottom_selector: dw !ACTION_CHOICE dl #!sram_superhud_bottom - dw #$0000 db #$28, "Current Bottom", #$FF + dw #.routine db #$28, " ENEMY HP", #$FF db #$28, " CHARGE", #$FF db #$28, " X FACTOR", #$FF @@ -2596,6 +2620,23 @@ ih_superhud_bottom_selector: db #$28, " MB HP", #$FF db #$28, " TWO CRIES", #$FF db #$FF + .routine + ; check for A or Y input + LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done + ; jump to appropriate submenu page + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_WALLJUMP : BMI .p1 + LDA !sram_superhud_bottom : CMP.w !IH_SUPERHUD_BOTTOM_INDEX_WASTELAND : BMI .p2 + LDY.w #SuperHUDBottomMenu3 + BRA .jump + .p2 + LDY.w #SuperHUDBottomMenu2 + BRA .jump + .p1 + LDY.w #SuperHUDBottomMenu + .jump + JSL action_submenu + .done + RTL ih_superhud_bottom_submenu: %cm_submenu("Bottom HUD List", #SuperHUDBottomMenu) @@ -2832,8 +2873,8 @@ ih_superhud_goto_page3: ih_superhud_middle_selector: dw !ACTION_CHOICE dl #!sram_superhud_middle - dw #$0000 db #$28, "Current Middle", #$FF + dw #.routine db #$28, " OFF", #$FF db #$28, " CHARGE", #$FF db #$28, " X FACTOR", #$FF @@ -2851,6 +2892,14 @@ ih_superhud_middle_selector: db #$28, "STATUS ICON", #$FF db #$28, " MAP TILES", #$FF db #$FF + .routine + ; check for A or Y input + LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done + ; jump to submenu + LDY.w #SuperHUDMiddleMenu + JSL action_submenu + .done + RTL ih_superhud_middle_submenu: %cm_submenu("Middle HUD List", #SuperHUDMiddleMenu) @@ -2932,7 +2981,7 @@ action_select_superhud_middle: ih_superhud_top_selector: dw !ACTION_CHOICE dl #!sram_superhud_top - dw #$0000 + dw #.routine db #$28, "Current Top ", #$FF db #$28, " OFF", #$FF db #$28, " CHARGE", #$FF @@ -2951,6 +3000,14 @@ ih_superhud_top_selector: db #$28, "STATUS ICON", #$FF db #$28, " MAP TILES", #$FF db #$FF + .routine + ; check for A or Y input + LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done + ; jump to submenu + LDY.w #SuperHUDTopMenu + JSL action_submenu + .done + RTL ih_superhud_top_submenu: %cm_submenu("Top HUD List", #SuperHUDTopMenu) @@ -3057,8 +3114,7 @@ ih_door_display_mode: LDA !IH_CONTROLLER_PRI_NEW : BIT #$4080 : BEQ .done ; jump to submenu LDY.w #DoorDisplayModeMenu - JSL cm_go_back - %submenu_jump() + JSL action_submenu .done RTL From 7fac03372638e784c49f7be53bf0fcf19f08c937 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Mon, 10 Aug 2026 21:22:51 -0400 Subject: [PATCH 15/27] Fixing bugs in previous commits Fix missing # on HUD Mode defines Fix 8bit PEI Fix shifted lines in choice menu --- src/defines.asm | 300 +++++++++++++++++++++++------------------------ src/mainmenu.asm | 6 +- src/presets.asm | 2 +- 3 files changed, 154 insertions(+), 154 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index bed6f1a18..2f0fa7163 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1384,156 +1384,156 @@ endif !FRAME_COUNTER_USE_IGT = #$0001 !FRAME_COUNTER_ADJUST_REALTIME = #$0002 -!IH_MODE_INDEX_ENEMYHP = (status_display_table_enemyhp-status_display_table)/2 -!IH_MODE_INDEX_ROOMSTRAT = (status_display_table_roomstrat-status_display_table)/2 -!IH_MODE_INDEX_CHARGETIMER = (status_display_table_chargetimer-status_display_table)/2 -!IH_MODE_INDEX_XFACTOR = (status_display_table_xfactor-status_display_table)/2 -!IH_MODE_INDEX_COOLDOWN = (status_display_table_cooldown-status_display_table)/2 -!IH_MODE_INDEX_SHINETIMER = (status_display_table_shinetimer-status_display_table)/2 -!IH_MODE_INDEX_DASHCOUNTER = (status_display_table_dashcounter-status_display_table)/2 -!IH_MODE_INDEX_SHINETUNE = (status_display_table_shinetune-status_display_table)/2 -!IH_MODE_INDEX_IFRAMECOUNTER = (status_display_table_iframecounter-status_display_table)/2 -!IH_MODE_INDEX_SPIKESUIT = (status_display_table_spikesuit-status_display_table)/2 -!IH_MODE_INDEX_LAGCOUNTER = (status_display_table_lagcounter-status_display_table)/2 -!IH_MODE_INDEX_CPUUSAGE = (status_display_table_cpuusage-status_display_table)/2 -!IH_MODE_INDEX_HSPEED = (status_display_table_hspeed-status_display_table)/2 -!IH_MODE_INDEX_DASHSPEED = (status_display_table_dashspeed-status_display_table)/2 -!IH_MODE_INDEX_VSPEED = (status_display_table_vspeed-status_display_table)/2 -!IH_MODE_INDEX_QUICKDROP = (status_display_table_quickdrop-status_display_table)/2 -!IH_MODE_INDEX_WALLJUMP = (status_display_table_walljump-status_display_table)/2 -!IH_MODE_INDEX_DOUBLESBJ = (status_display_table_doublesbj-status_display_table)/2 -!IH_MODE_INDEX_COUNTDAMAGE = (status_display_table_countdamage-status_display_table)/2 -!IH_MODE_INDEX_COUNTHP = (status_display_table_counthp-status_display_table)/2 -!IH_MODE_INDEX_ARMPUMP = (status_display_table_armpump-status_display_table)/2 -!IH_MODE_INDEX_PUMPCOUNTER = (status_display_table_pumpcounter-status_display_table)/2 -!IH_MODE_INDEX_XPOS = (status_display_table_xpos-status_display_table)/2 -!IH_MODE_INDEX_YPOS = (status_display_table_ypos-status_display_table)/2 -!IH_MODE_INDEX_CAMERAPOS = (status_display_table_camerapos-status_display_table)/2 -!IH_MODE_INDEX_SHOTTIMER = (status_display_table_shottimer-status_display_table)/2 -!IH_MODE_INDEX_RAMWATCH = (status_display_table_ramwatch-status_display_table)/2 -!IH_MODE_COUNT = (status_display_table_end-status_display_table)/2 - -!IH_STRAT_INDEX_SUPERHUD = (status_room_table_superhud-status_room_table)/2 -!IH_STRAT_INDEX_CERESRIDLEY = (status_room_table_ceresridley-status_room_table)/2 -!IH_STRAT_INDEX_DOORSKIP = (status_room_table_doorskip-status_room_table)/2 -!IH_STRAT_INDEX_TACOTANK = (status_room_table_tacotank-status_room_table)/2 -!IH_STRAT_INDEX_PITDOOR = (status_room_table_pitdoor-status_room_table)/2 -!IH_STRAT_INDEX_MOONDANCE = (status_room_table_moondance-status_room_table)/2 -!IH_STRAT_INDEX_KRAIDRADAR = (status_room_table_kraidradar-status_room_table)/2 -!IH_STRAT_INDEX_BOOTLESSUP = (status_room_table_bootlessup-status_room_table)/2 -!IH_STRAT_INDEX_GATEGLITCH = (status_room_table_gateglitch-status_room_table)/2 -!IH_STRAT_INDEX_MOATCWJ = (status_room_table_moatcwj-status_room_table)/2 -!IH_STRAT_INDEX_ROBOTFLUSH = (status_room_table_robotflush-status_room_table)/2 -!IH_STRAT_INDEX_SHINETOPB = (status_room_table_shinetopb-status_room_table)/2 -!IH_STRAT_INDEX_ELEVATORCF = (status_room_table_elevatorcf-status_room_table)/2 -!IH_STRAT_INDEX_BOTWOONCF = (status_room_table_botwooncf-status_room_table)/2 -!IH_STRAT_INDEX_DRAYGONAI = (status_room_table_draygonai-status_room_table)/2 -!IH_STRAT_INDEX_SNAILCLIP = (status_room_table_snailclip-status_room_table)/2 -!IH_STRAT_INDEX_WASTELAND = (status_room_table_wasteland-status_room_table)/2 -!IH_STRAT_INDEX_RIDLEYAI = (status_room_table_ridleyai-status_room_table)/2 -!IH_STRAT_INDEX_KIHUNTERMANIP = (status_room_table_kihuntermanip-status_room_table)/2 -!IH_STRAT_INDEX_DOWNBACKZEB = (status_room_table_downbackzeb-status_room_table)/2 -!IH_STRAT_INDEX_ZEBSKIP = (status_room_table_zebskip-status_room_table)/2 -!IH_STRAT_INDEX_MBHP = (status_room_table_mbhp-status_room_table)/2 -!IH_STRAT_INDEX_TWOCRIES = (status_room_table_twocries-status_room_table)/2 -!IH_STRAT_COUNT = (status_room_table_end-status_room_table)/2 - -!IH_SUPERHUD_BOTTOM_INDEX_ENEMYHP = (superhud_bottom_table_enemyhp-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_CHARGETIMER = (superhud_bottom_table_chargetimer-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_XFACTOR = (superhud_bottom_table_xfactor-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_COOLDOWN = (superhud_bottom_table_cooldown-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_SHINETIMER = (superhud_bottom_table_shinetimer-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_DASHCOUNTER = (superhud_bottom_table_dashcounter-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_SHINETUNE = (superhud_bottom_table_shinetune-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_IFRAMECOUNTER = (superhud_bottom_table_iframecounter-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_SPIKESUIT = (superhud_bottom_table_spikesuit-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_LAGCOUNTER = (superhud_bottom_table_lagcounter-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_CPUUSAGE = (superhud_bottom_table_cpuusage-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_HSPEED = (superhud_bottom_table_hspeed-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_DASHSPEED = (superhud_bottom_table_dashspeed-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_VSPEED = (superhud_bottom_table_vspeed-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_QUICKDROP = (superhud_bottom_table_quickdrop-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_WALLJUMP = (superhud_bottom_table_walljump-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_DOUBLESBJ = (superhud_bottom_table_doublesbj-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_COUNTDAMAGE = (superhud_bottom_table_countdamage-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_COUNTHP = (superhud_bottom_table_counthp-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_ARMPUMP = (superhud_bottom_table_armpump-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_PUMPCOUNTER = (superhud_bottom_table_pumpcounter-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_XPOS = (superhud_bottom_table_xpos-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_YPOS = (superhud_bottom_table_ypos-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_CAMERAPOS = (superhud_bottom_table_camerapos-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_SHOTTIMER = (superhud_bottom_table_shottimer-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_RAMWATCH = (superhud_bottom_table_ramwatch-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_CERESRIDLEY = (superhud_bottom_table_ceresridley-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_DOORSKIP = (superhud_bottom_table_doorskip-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_TACOTANK = (superhud_bottom_table_tacotank-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_PITDOOR = (superhud_bottom_table_pitdoor-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_MOONDANCE = (superhud_bottom_table_moondance-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_KRAIDRADAR = (superhud_bottom_table_kraidradar-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_BOOTLESSUP = (superhud_bottom_table_bootlessup-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_GATEGLITCH = (superhud_bottom_table_gateglitch-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_MOATCWJ = (superhud_bottom_table_moatcwj-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_ROBOTFLUSH = (superhud_bottom_table_robotflush-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_SHINETOPB = (superhud_bottom_table_shinetopb-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_ELEVATORCF = (superhud_bottom_table_elevatorcf-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_BOTWOONCF = (superhud_bottom_table_botwooncf-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_DRAYGONAI = (superhud_bottom_table_draygonai-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_SNAILCLIP = (superhud_bottom_table_snailclip-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_WASTELAND = (superhud_bottom_table_wasteland-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_RIDLEYAI = (superhud_bottom_table_ridleyai-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_KIHUNTERMANIP = (superhud_bottom_table_kihuntermanip-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_DOWNBACKZEB = (superhud_bottom_table_downbackzeb-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_ZEBSKIP = (superhud_bottom_table_zebskip-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_MBHP = (superhud_bottom_table_mbhp-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_INDEX_TWOCRIES = (superhud_bottom_table_twocries-superhud_bottom_table)/2 -!IH_SUPERHUD_BOTTOM_COUNT = (superhud_bottom_table_end-superhud_bottom_table)/2 - -!IH_SUPERHUD_MIDDLE_INDEX_OFF = (superhud_middle_table_off-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_CHARGETIMER = (superhud_middle_table_chargetimer-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_XFACTOR = (superhud_middle_table_xfactor-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_COOLDOWN = (superhud_middle_table_cooldown-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_SHINETIMER = (superhud_middle_table_shinetimer-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_DASHCOUNTER = (superhud_middle_table_dashcounter-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_IFRAMECOUNTER = (superhud_middle_table_iframecounter-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_LAGCOUNTER = (superhud_middle_table_lagcounter-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_CPUUSAGE = (superhud_middle_table_cpuusage-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_HSPEED = (superhud_middle_table_hspeed-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_DASHSPEED = (superhud_middle_table_dashspeed-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_SHOTTIMER = (superhud_middle_table_shottimer-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_ITEMPERCENT = (superhud_middle_table_itempercent-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_RESERVES = (superhud_middle_table_reserves-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_STATUSICONS = (superhud_middle_table_statusicons-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_INDEX_TILECOUNTER = (superhud_middle_table_tilecounter-superhud_middle_table)/2 -!IH_SUPERHUD_MIDDLE_COUNT = (superhud_middle_table_-superhud_middle_table)/2 - -!IH_SUPERHUD_TOP_INDEX_OFF = (superhud_top_table_off-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_CHARGETIMER = (superhud_top_table_chargetimer-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_XFACTOR = (superhud_top_table_xfactor-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_COOLDOWN = (superhud_top_table_cooldown-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_SHINETIMER = (superhud_top_table_shinetimer-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_DASHCOUNTER = (superhud_top_table_dashcounter-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_IFRAMECOUNTER = (superhud_top_table_iframecounter-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_LAGCOUNTER = (superhud_top_table_lagcounter-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_CPUUSAGE = (superhud_top_table_cpuusage-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_HSPEED = (superhud_top_table_hspeed-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_DASHSPEED = (superhud_top_table_dashspeed-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_SHOTTIMER = (superhud_top_table_shottimer-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_ITEMPERCENT = (superhud_top_table_itempercent-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_RESERVES = (superhud_top_table_reserves-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_STATUSICONS = (superhud_top_table_statusicons-superhud_top_table)/2 -!IH_SUPERHUD_TOP_INDEX_TILECOUNTER = (superhud_top_table_tilecounter-superhud_top_table)/2 -!IH_SUPERHUD_TOP_COUNT = (superhud_top_table_end-superhud_top_table)/2 - -!IH_DOOR_INDEX_OFF = (DoorDisplayTable_off-DoorDisplayTable)/2 -!IH_DOOR_INDEX_HSPEED = (DoorDisplayTable_hspeed-DoorDisplayTable)/2 -!IH_DOOR_INDEX_DASHSPEED = (DoorDisplayTable_dashspeed-DoorDisplayTable)/2 -!IH_DOOR_INDEX_VSPEED = (DoorDisplayTable_vspeed-DoorDisplayTable)/2 -!IH_DOOR_INDEX_CHARGETIMER = (DoorDisplayTable_chargetimer-DoorDisplayTable)/2 -!IH_DOOR_INDEX_SHINETIMER = (DoorDisplayTable_shinetimer-DoorDisplayTable)/2 -!IH_DOOR_INDEX_DASHCOUNTER = (DoorDisplayTable_dashcounter-DoorDisplayTable)/2 -!IH_DOOR_INDEX_XPOS = (DoorDisplayTable_xpos-DoorDisplayTable)/2 -!IH_DOOR_INDEX_YPOS = (DoorDisplayTable_ypos-DoorDisplayTable)/2 -!IH_DOOR_COUNT = (DoorDisplayTable_end-DoorDisplayTable)/2 +!IH_MODE_INDEX_ENEMYHP = #(status_display_table_enemyhp-status_display_table)/2 +!IH_MODE_INDEX_ROOMSTRAT = #(status_display_table_roomstrat-status_display_table)/2 +!IH_MODE_INDEX_CHARGETIMER = #(status_display_table_chargetimer-status_display_table)/2 +!IH_MODE_INDEX_XFACTOR = #(status_display_table_xfactor-status_display_table)/2 +!IH_MODE_INDEX_COOLDOWN = #(status_display_table_cooldown-status_display_table)/2 +!IH_MODE_INDEX_SHINETIMER = #(status_display_table_shinetimer-status_display_table)/2 +!IH_MODE_INDEX_DASHCOUNTER = #(status_display_table_dashcounter-status_display_table)/2 +!IH_MODE_INDEX_SHINETUNE = #(status_display_table_shinetune-status_display_table)/2 +!IH_MODE_INDEX_IFRAMECOUNTER = #(status_display_table_iframecounter-status_display_table)/2 +!IH_MODE_INDEX_SPIKESUIT = #(status_display_table_spikesuit-status_display_table)/2 +!IH_MODE_INDEX_LAGCOUNTER = #(status_display_table_lagcounter-status_display_table)/2 +!IH_MODE_INDEX_CPUUSAGE = #(status_display_table_cpuusage-status_display_table)/2 +!IH_MODE_INDEX_HSPEED = #(status_display_table_hspeed-status_display_table)/2 +!IH_MODE_INDEX_DASHSPEED = #(status_display_table_dashspeed-status_display_table)/2 +!IH_MODE_INDEX_VSPEED = #(status_display_table_vspeed-status_display_table)/2 +!IH_MODE_INDEX_QUICKDROP = #(status_display_table_quickdrop-status_display_table)/2 +!IH_MODE_INDEX_WALLJUMP = #(status_display_table_walljump-status_display_table)/2 +!IH_MODE_INDEX_DOUBLESBJ = #(status_display_table_doublesbj-status_display_table)/2 +!IH_MODE_INDEX_COUNTDAMAGE = #(status_display_table_countdamage-status_display_table)/2 +!IH_MODE_INDEX_COUNTHP = #(status_display_table_counthp-status_display_table)/2 +!IH_MODE_INDEX_ARMPUMP = #(status_display_table_armpump-status_display_table)/2 +!IH_MODE_INDEX_PUMPCOUNTER = #(status_display_table_pumpcounter-status_display_table)/2 +!IH_MODE_INDEX_XPOS = #(status_display_table_xpos-status_display_table)/2 +!IH_MODE_INDEX_YPOS = #(status_display_table_ypos-status_display_table)/2 +!IH_MODE_INDEX_CAMERAPOS = #(status_display_table_camerapos-status_display_table)/2 +!IH_MODE_INDEX_SHOTTIMER = #(status_display_table_shottimer-status_display_table)/2 +!IH_MODE_INDEX_RAMWATCH = #(status_display_table_ramwatch-status_display_table)/2 +!IH_MODE_COUNT = #(status_display_table_end-status_display_table)/2 + +!IH_STRAT_INDEX_SUPERHUD = #(status_room_table_superhud-status_room_table)/2 +!IH_STRAT_INDEX_CERESRIDLEY = #(status_room_table_ceresridley-status_room_table)/2 +!IH_STRAT_INDEX_DOORSKIP = #(status_room_table_doorskip-status_room_table)/2 +!IH_STRAT_INDEX_TACOTANK = #(status_room_table_tacotank-status_room_table)/2 +!IH_STRAT_INDEX_PITDOOR = #(status_room_table_pitdoor-status_room_table)/2 +!IH_STRAT_INDEX_MOONDANCE = #(status_room_table_moondance-status_room_table)/2 +!IH_STRAT_INDEX_KRAIDRADAR = #(status_room_table_kraidradar-status_room_table)/2 +!IH_STRAT_INDEX_BOOTLESSUP = #(status_room_table_bootlessup-status_room_table)/2 +!IH_STRAT_INDEX_GATEGLITCH = #(status_room_table_gateglitch-status_room_table)/2 +!IH_STRAT_INDEX_MOATCWJ = #(status_room_table_moatcwj-status_room_table)/2 +!IH_STRAT_INDEX_ROBOTFLUSH = #(status_room_table_robotflush-status_room_table)/2 +!IH_STRAT_INDEX_SHINETOPB = #(status_room_table_shinetopb-status_room_table)/2 +!IH_STRAT_INDEX_ELEVATORCF = #(status_room_table_elevatorcf-status_room_table)/2 +!IH_STRAT_INDEX_BOTWOONCF = #(status_room_table_botwooncf-status_room_table)/2 +!IH_STRAT_INDEX_DRAYGONAI = #(status_room_table_draygonai-status_room_table)/2 +!IH_STRAT_INDEX_SNAILCLIP = #(status_room_table_snailclip-status_room_table)/2 +!IH_STRAT_INDEX_WASTELAND = #(status_room_table_wasteland-status_room_table)/2 +!IH_STRAT_INDEX_RIDLEYAI = #(status_room_table_ridleyai-status_room_table)/2 +!IH_STRAT_INDEX_KIHUNTERMANIP = #(status_room_table_kihuntermanip-status_room_table)/2 +!IH_STRAT_INDEX_DOWNBACKZEB = #(status_room_table_downbackzeb-status_room_table)/2 +!IH_STRAT_INDEX_ZEBSKIP = #(status_room_table_zebskip-status_room_table)/2 +!IH_STRAT_INDEX_MBHP = #(status_room_table_mbhp-status_room_table)/2 +!IH_STRAT_INDEX_TWOCRIES = #(status_room_table_twocries-status_room_table)/2 +!IH_STRAT_COUNT = #(status_room_table_end-status_room_table)/2 + +!IH_SUPERHUD_BOTTOM_INDEX_ENEMYHP = #(superhud_bottom_table_enemyhp-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CHARGETIMER = #(superhud_bottom_table_chargetimer-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_XFACTOR = #(superhud_bottom_table_xfactor-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_COOLDOWN = #(superhud_bottom_table_cooldown-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHINETIMER = #(superhud_bottom_table_shinetimer-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DASHCOUNTER = #(superhud_bottom_table_dashcounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHINETUNE = #(superhud_bottom_table_shinetune-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_IFRAMECOUNTER = #(superhud_bottom_table_iframecounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SPIKESUIT = #(superhud_bottom_table_spikesuit-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_LAGCOUNTER = #(superhud_bottom_table_lagcounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CPUUSAGE = #(superhud_bottom_table_cpuusage-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_HSPEED = #(superhud_bottom_table_hspeed-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DASHSPEED = #(superhud_bottom_table_dashspeed-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_VSPEED = #(superhud_bottom_table_vspeed-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_QUICKDROP = #(superhud_bottom_table_quickdrop-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_WALLJUMP = #(superhud_bottom_table_walljump-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DOUBLESBJ = #(superhud_bottom_table_doublesbj-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_COUNTDAMAGE = #(superhud_bottom_table_countdamage-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_COUNTHP = #(superhud_bottom_table_counthp-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ARMPUMP = #(superhud_bottom_table_armpump-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_PUMPCOUNTER = #(superhud_bottom_table_pumpcounter-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_XPOS = #(superhud_bottom_table_xpos-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_YPOS = #(superhud_bottom_table_ypos-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CAMERAPOS = #(superhud_bottom_table_camerapos-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHOTTIMER = #(superhud_bottom_table_shottimer-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_RAMWATCH = #(superhud_bottom_table_ramwatch-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_CERESRIDLEY = #(superhud_bottom_table_ceresridley-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DOORSKIP = #(superhud_bottom_table_doorskip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_TACOTANK = #(superhud_bottom_table_tacotank-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_PITDOOR = #(superhud_bottom_table_pitdoor-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_MOONDANCE = #(superhud_bottom_table_moondance-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_KRAIDRADAR = #(superhud_bottom_table_kraidradar-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_BOOTLESSUP = #(superhud_bottom_table_bootlessup-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_GATEGLITCH = #(superhud_bottom_table_gateglitch-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_MOATCWJ = #(superhud_bottom_table_moatcwj-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ROBOTFLUSH = #(superhud_bottom_table_robotflush-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SHINETOPB = #(superhud_bottom_table_shinetopb-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ELEVATORCF = #(superhud_bottom_table_elevatorcf-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_BOTWOONCF = #(superhud_bottom_table_botwooncf-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DRAYGONAI = #(superhud_bottom_table_draygonai-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_SNAILCLIP = #(superhud_bottom_table_snailclip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_WASTELAND = #(superhud_bottom_table_wasteland-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_RIDLEYAI = #(superhud_bottom_table_ridleyai-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_KIHUNTERMANIP = #(superhud_bottom_table_kihuntermanip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_DOWNBACKZEB = #(superhud_bottom_table_downbackzeb-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_ZEBSKIP = #(superhud_bottom_table_zebskip-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_MBHP = #(superhud_bottom_table_mbhp-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_INDEX_TWOCRIES = #(superhud_bottom_table_twocries-superhud_bottom_table)/2 +!IH_SUPERHUD_BOTTOM_COUNT = #(superhud_bottom_table_end-superhud_bottom_table)/2 + +!IH_SUPERHUD_MIDDLE_INDEX_OFF = #(superhud_middle_table_off-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_CHARGETIMER = #(superhud_middle_table_chargetimer-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_XFACTOR = #(superhud_middle_table_xfactor-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_COOLDOWN = #(superhud_middle_table_cooldown-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_SHINETIMER = #(superhud_middle_table_shinetimer-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_DASHCOUNTER = #(superhud_middle_table_dashcounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_IFRAMECOUNTER = #(superhud_middle_table_iframecounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_LAGCOUNTER = #(superhud_middle_table_lagcounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_CPUUSAGE = #(superhud_middle_table_cpuusage-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_HSPEED = #(superhud_middle_table_hspeed-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_DASHSPEED = #(superhud_middle_table_dashspeed-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_SHOTTIMER = #(superhud_middle_table_shottimer-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_ITEMPERCENT = #(superhud_middle_table_itempercent-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_RESERVES = #(superhud_middle_table_reserves-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_STATUSICONS = #(superhud_middle_table_statusicons-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_INDEX_TILECOUNTER = #(superhud_middle_table_tilecounter-superhud_middle_table)/2 +!IH_SUPERHUD_MIDDLE_COUNT = #(superhud_middle_table_-superhud_middle_table)/2 + +!IH_SUPERHUD_TOP_INDEX_OFF = #(superhud_top_table_off-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_CHARGETIMER = #(superhud_top_table_chargetimer-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_XFACTOR = #(superhud_top_table_xfactor-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_COOLDOWN = #(superhud_top_table_cooldown-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_SHINETIMER = #(superhud_top_table_shinetimer-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_DASHCOUNTER = #(superhud_top_table_dashcounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_IFRAMECOUNTER = #(superhud_top_table_iframecounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_LAGCOUNTER = #(superhud_top_table_lagcounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_CPUUSAGE = #(superhud_top_table_cpuusage-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_HSPEED = #(superhud_top_table_hspeed-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_DASHSPEED = #(superhud_top_table_dashspeed-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_SHOTTIMER = #(superhud_top_table_shottimer-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_ITEMPERCENT = #(superhud_top_table_itempercent-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_RESERVES = #(superhud_top_table_reserves-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_STATUSICONS = #(superhud_top_table_statusicons-superhud_top_table)/2 +!IH_SUPERHUD_TOP_INDEX_TILECOUNTER = #(superhud_top_table_tilecounter-superhud_top_table)/2 +!IH_SUPERHUD_TOP_COUNT = #(superhud_top_table_end-superhud_top_table)/2 + +!IH_DOOR_INDEX_OFF = #(DoorDisplayTable_off-DoorDisplayTable)/2 +!IH_DOOR_INDEX_HSPEED = #(DoorDisplayTable_hspeed-DoorDisplayTable)/2 +!IH_DOOR_INDEX_DASHSPEED = #(DoorDisplayTable_dashspeed-DoorDisplayTable)/2 +!IH_DOOR_INDEX_VSPEED = #(DoorDisplayTable_vspeed-DoorDisplayTable)/2 +!IH_DOOR_INDEX_CHARGETIMER = #(DoorDisplayTable_chargetimer-DoorDisplayTable)/2 +!IH_DOOR_INDEX_SHINETIMER = #(DoorDisplayTable_shinetimer-DoorDisplayTable)/2 +!IH_DOOR_INDEX_DASHCOUNTER = #(DoorDisplayTable_dashcounter-DoorDisplayTable)/2 +!IH_DOOR_INDEX_XPOS = #(DoorDisplayTable_xpos-DoorDisplayTable)/2 +!IH_DOOR_INDEX_YPOS = #(DoorDisplayTable_ypos-DoorDisplayTable)/2 +!IH_DOOR_COUNT = #(DoorDisplayTable_end-DoorDisplayTable)/2 !ROOM_LAYOUT_NO_MAGNET_STAIRS = #$0001 !ROOM_LAYOUT_AREA_RANDO = #$0002 diff --git a/src/mainmenu.asm b/src/mainmenu.asm index 203c9a3c6..984a68cbe 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -2436,7 +2436,7 @@ ihstrat_pitdoor: %cm_jsl("Pit Room Right Door", #action_select_room_strat, !IH_STRAT_INDEX_PITDOOR) ihstrat_moondance: - %cm_jsl("Moondance", #action_select_room_strat, #!IH_STRAT_INDEX_MOONDANCE) + %cm_jsl("Moondance", #action_select_room_strat, !IH_STRAT_INDEX_MOONDANCE) ihstrat_kraidradar: %cm_jsl("Kraid Nail Radar", #action_select_room_strat, !IH_STRAT_INDEX_KRAIDRADAR) @@ -2569,8 +2569,8 @@ SuperHUDMenu: ih_superhud_bottom_selector: dw !ACTION_CHOICE dl #!sram_superhud_bottom - db #$28, "Current Bottom", #$FF dw #.routine + db #$28, "Current Bottom", #$FF db #$28, " ENEMY HP", #$FF db #$28, " CHARGE", #$FF db #$28, " X FACTOR", #$FF @@ -2873,8 +2873,8 @@ ih_superhud_goto_page3: ih_superhud_middle_selector: dw !ACTION_CHOICE dl #!sram_superhud_middle - db #$28, "Current Middle", #$FF dw #.routine + db #$28, "Current Middle", #$FF db #$28, " OFF", #$FF db #$28, " CHARGE", #$FF db #$28, " X FACTOR", #$FF diff --git a/src/presets.asm b/src/presets.asm index 365175013..9bbd1932b 100644 --- a/src/presets.asm +++ b/src/presets.asm @@ -516,7 +516,7 @@ category_preset_load: .setBanks ; Set bank to read data from - STZ $00 : %a8() : PEI ($C5) : PLB + STZ $00 : %a8() : LDA $C5 : PHA : PLB ; Set bank to store data to LDA #$7E : STA $C5 : %a16() From 498578ebc9c0d88243acaacd3c23561a48a5b5ea Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Tue, 11 Aug 2026 00:09:25 -0400 Subject: [PATCH 16/27] More info in freespace prints Add bytes used and total freespace per bank Force printing for all banks that have valid freespace Modified create_names.py and create_clear_enemies_data.py to write a manual orgs instead of freespace macros --- enemies/create_clear_enemies_data.py | 3 +- names/create_names.py | 3 +- src/BRBmenu.asm | 2 +- src/clearenemies.asm | 4 +- src/freespace.asm | 107 +++++++++++++++++++++++++-- src/presets.asm | 5 +- src/roomnames.asm | 4 +- src/tilegraphics.asm | 5 +- 8 files changed, 111 insertions(+), 22 deletions(-) diff --git a/enemies/create_clear_enemies_data.py b/enemies/create_clear_enemies_data.py index c8b841478..faab42eae 100644 --- a/enemies/create_clear_enemies_data.py +++ b/enemies/create_clear_enemies_data.py @@ -33,7 +33,7 @@ last_enemy_id = None for enemy_id in sorted(enemies): if not last_enemy_id: - f_output.write("\n\n%startfree(E5)\n") + f_output.write("\n\norg $E58000\n") f_output.write("ClearEnemiesTable:\n\n") enemy_id_pal = enemy_id + 8 f_output.write("") @@ -42,6 +42,5 @@ f_output.write("dw $000" + enemies[enemy_id] + "\n\n") last_enemy_id = enemy_id -f_output.write("%endfree(E5)\n\n") f_output.close() diff --git a/names/create_names.py b/names/create_names.py index 14f46c18e..791a5b01f 100644 --- a/names/create_names.py +++ b/names/create_names.py @@ -49,7 +49,7 @@ f_output.write("\n; Room Names") f_output.write("\n; (autogenerated)") f_output.write("\n; ---------------") -f_output.write("\n\n%startfree(E5)\n") +f_output.write("\n\norg $E58000\n") f_output.write("RoomNameTextTable:\n") f_output.write("ROOM:\n\n") @@ -71,6 +71,5 @@ last_room_end = int(last_room_id, 16) + max_characters f_output.write("warnpc $E5" + f'{last_room_end:04X}' + "\n\n") -f_output.write("%endfree(E5)\n\n") f_output.close() diff --git a/src/BRBmenu.asm b/src/BRBmenu.asm index b5cb630a1..c9315f63b 100644 --- a/src/BRBmenu.asm +++ b/src/BRBmenu.asm @@ -778,7 +778,7 @@ ZSNES_Palette: incbin ../resources/zsnes_palette.bin print pc, " zsnes splashscreen graphics crossbank end" -warnpc $E48000 +warnpc !START_FREESPACE_E3 check bankcross on endif diff --git a/src/clearenemies.asm b/src/clearenemies.asm index 62c43ce6c..b860a51e8 100644 --- a/src/clearenemies.asm +++ b/src/clearenemies.asm @@ -4,7 +4,7 @@ ; (autogenerated) ; --------------- -%startfree(E5) +org $E58000 ClearEnemiesTable: if !FEATURE_PAL @@ -1155,5 +1155,3 @@ org $E5FDE4 endif dw $0001 ; BATTA3Tu (escape silver walking space pirate) -%endfree(E5) - diff --git a/src/freespace.asm b/src/freespace.asm index 59c1cf666..8f78be75b 100644 --- a/src/freespace.asm +++ b/src/freespace.asm @@ -71,7 +71,7 @@ endif !START_FREESPACE_E0 = $E08000 ; $8000 !START_FREESPACE_E1 = $E18000 ; $8000 !START_FREESPACE_E2 = $E28000 ; $8000 -!START_FREESPACE_E3 = $E38000 ; $8000 +!START_FREESPACE_E3 = $E3EA40 ; $15C0 ZSNES graphics !START_FREESPACE_E4 = $E48000 ; $8000 !START_FREESPACE_E5 = $E58000 ; $8000 !START_FREESPACE_E6 = $E68000 ; $8000 @@ -250,10 +250,10 @@ endif !END_FREESPACE_DF = $DF0000+$10000 !END_FREESPACE_E0 = $E00000+$E7E0 ; preserve_wram.asm !END_FREESPACE_E1 = $E10000+$10000 -!END_FREESPACE_E2 = $E20000+$10000 +!END_FREESPACE_E2 = $E28000 ; ZSNES graphics !END_FREESPACE_E3 = $E30000+$10000 !END_FREESPACE_E4 = $E40000+$10000 -!END_FREESPACE_E5 = $E50000+$10000 +!END_FREESPACE_E5 = $E58000 ; roomnames.asm !END_FREESPACE_E6 = $E68000 ; tilegraphics.asm !END_FREESPACE_E7 = $E78000 ; tilegraphics.asm !END_FREESPACE_E8 = $E88000 ; tilegraphics.asm + presets.asm @@ -263,7 +263,7 @@ endif !END_FREESPACE_EC = $EC8000 ; presets.asm !END_FREESPACE_ED = $ED8000 ; presets.asm !END_FREESPACE_EE = $EE8000 ; presets.asm -!END_FREESPACE_EF = $EF0000+$10000 +!END_FREESPACE_EF = $EF8000 ; presets.asm !END_FREESPACE_F0 = $F00000+$10000 !END_FREESPACE_F1 = $F10000+$10000 !END_FREESPACE_F2 = $F20000+$10000 @@ -308,12 +308,107 @@ macro printfreespacebank(bank) org !FREESPACE_ !FREESPACE_COUNTER_ ?= 0 if !FREESPACE_COUNTER_ -print "Bank $ ended at $", pc, " with $", hex(!END_FREESPACE_-!FREESPACE_), " bytes remaining" +print "Bank $ ended at $", pc, " with $", hex(!FREESPACE_-!START_FREESPACE_), "/$", hex(!END_FREESPACE_-!START_FREESPACE_), " bytes used, $", hex(!END_FREESPACE_-!FREESPACE_), " bytes remaining" endif endmacro +macro tickfreespace(bank) +; make %printfreespace() print each bank with valid freespace +; without altering the other macros +%startfree() +%endfree() +endmacro + macro printfreespace() -; Hide this long list in a single macro +; Hide these long lists in a single macro +%tickfreespace(80) +%tickfreespace(81) +%tickfreespace(82) +%tickfreespace(83) +%tickfreespace(84) +%tickfreespace(85) +%tickfreespace(86) +%tickfreespace(87) +%tickfreespace(88) +%tickfreespace(89) +%tickfreespace(8A) +%tickfreespace(8B) +%tickfreespace(8C) +%tickfreespace(8D) +%tickfreespace(8E) +%tickfreespace(8F) +%tickfreespace(90) +%tickfreespace(91) +%tickfreespace(92) +%tickfreespace(93) +%tickfreespace(94) +%tickfreespace(99) +%tickfreespace(9A) +%tickfreespace(9B) +%tickfreespace(9C) +%tickfreespace(9D) +%tickfreespace(9E) +%tickfreespace(9F) +%tickfreespace(A0) +%tickfreespace(A1) +%tickfreespace(A2) +%tickfreespace(A3) +%tickfreespace(A4) +%tickfreespace(A5) +%tickfreespace(A6) +%tickfreespace(A7) +%tickfreespace(A8) +%tickfreespace(A9) +%tickfreespace(AA) +%tickfreespace(AB) +%tickfreespace(AC) +%tickfreespace(AD) +%tickfreespace(AE) +%tickfreespace(AF) +%tickfreespace(B0) +%tickfreespace(B2) +%tickfreespace(B3) +%tickfreespace(B4) +%tickfreespace(B5) +%tickfreespace(B6) +%tickfreespace(B7) +%tickfreespace(B8) +%tickfreespace(CE) +%tickfreespace(DE) +%tickfreespace(DF) +%tickfreespace(E0) +%tickfreespace(E1) +;%tickfreespace(E2) ZSNES graphics +%tickfreespace(E3) +%tickfreespace(E4) +;%tickfreespace(E5) roomnames.asm +;%tickfreespace(E6) tilegraphics.asm +;%tickfreespace(E7) tilegraphics.asm +;%tickfreespace(E8) tilegraphics.asm + presets.asm +;%tickfreespace(E9) presets.asm +;%tickfreespace(EA) presets.asm +;%tickfreespace(EB) presets.asm +;%tickfreespace(EC) presets.asm +;%tickfreespace(ED) presets.asm +;%tickfreespace(EE) presets.asm +;%tickfreespace(EF) presets.asm +%tickfreespace(F0) +%tickfreespace(F1) +%tickfreespace(F2) +%tickfreespace(F3) +%tickfreespace(F4) +;%tickfreespace(F5) tilegraphics.asm +;%tickfreespace(F6) tilegraphics.asm +;%tickfreespace(F7) tilegraphics.asm +;%tickfreespace(F8) tilegraphics.asm +;%tickfreespace(F9) tilegraphics.asm +;%tickfreespace(FA) tilegraphics.asm +;%tickfreespace(FB) tilegraphics.asm +;%tickfreespace(FC) tilegraphics.asm +;%tickfreespace(FD) tilegraphics.asm +;%tickfreespace(FE) tilegraphics.asm +;%tickfreespace(FF) used by SpriteSomething + %printfreespacebank(80) %printfreespacebank(81) %printfreespacebank(82) diff --git a/src/presets.asm b/src/presets.asm index 9bbd1932b..97194f264 100644 --- a/src/presets.asm +++ b/src/presets.asm @@ -1176,7 +1176,8 @@ resume_infohud_icon_initialization: ; Category Menus/Data ; ------------------- -org $E8E000 +org $E8D800 +PresetData: check bankcross off print pc, " preset data crossbank start" @@ -1187,7 +1188,7 @@ print pc, " preset data crossbank end" table ../resources/normal.tbl incsrc presets/combined_preset_names.asm -warnpc $F08000 +warnpc !START_FREESPACE_F0 check bankcross on %startfree(F1) diff --git a/src/roomnames.asm b/src/roomnames.asm index e98fd649e..45b646763 100644 --- a/src/roomnames.asm +++ b/src/roomnames.asm @@ -4,7 +4,7 @@ ; (autogenerated) ; --------------- -%startfree(E5) +org $E58000 RoomNameTextTable: ROOM: @@ -1318,5 +1318,3 @@ org $E5E82C db $28, "Debug Room", $FF warnpc $E5E844 -%endfree(E5) - diff --git a/src/tilegraphics.asm b/src/tilegraphics.asm index c5df73ec4..e1230534c 100644 --- a/src/tilegraphics.asm +++ b/src/tilegraphics.asm @@ -1,5 +1,5 @@ -org $E68800 +org $E68000 check bankcross off print pc, " raw tile tables crossbank start" @@ -50,7 +50,7 @@ tile_table_28_draygon: incbin ../resources/tile_table_28_draygon.bin print pc, " raw tile tables crossbank end" -warnpc $E8E000 ; presets.asm +warnpc PresetData check bankcross on @@ -602,7 +602,6 @@ preset_vram_landing_site_floor_params: db $D1, $08, $C9, $08 ; Y = 4.0+ %endfree(F4) -warnpc $F4D800 org $F4D800 From f83ce7f5d85df5c3b6d9351fa85837e92441d743 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Wed, 12 Aug 2026 01:19:40 -0400 Subject: [PATCH 17/27] Create recommended.txt An incomplete list of tools we use when developing the practice hack --- tools/recommended.txt | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tools/recommended.txt diff --git a/tools/recommended.txt b/tools/recommended.txt new file mode 100644 index 000000000..7c73e90de --- /dev/null +++ b/tools/recommended.txt @@ -0,0 +1,35 @@ + +This is an incomplete list of tools we use when developing the practice hack. + + +P.JBoy's bank logs - https://patrickjohnston.org/bank/index.html +Complete documentation of the Super Metroid ROM. + +Mesen - https://mesen.ca +Mesen is currently the most accurate SNES emulator. It includes a very powerful suite of debugging tools. Drag and drop our symbols file (generated by build_dev.bat) to get our source code labels in the debugger. Highly recommended for hacking and casual exploration! + +Notepad++ - https://notepad-plus-plus.org/ +Any text editor will do, but we like Notepad++. + +YY-CHR - https://w.atwiki.jp/yychr +A pixel editor that supports retro console graphics in their native formats. We use it to edit our HUD and menu graphics with the 2BPP GB format option, and 4BPP SNES for sprites. While the website is in Japanese, the application is localized to English based on your PC settings. + +Lunar IPS - https://fusoya.eludevisibility.org/lips/ +A simple patching tool for creating and applying IPS files. build_dev.bat will try to patch the ROM with Lunar IPS if included. + +Lunar Address - https://fusoya.eludevisibility.org/la/ +Translates SNES address space to PC (ROM file) format. Super Metroid uses LoROM 80:8000 - FF:FFFF ROM type. We always work with headerless ROMs. + +HxD - https://mh-nexus.de/en/hxd/ +A popular hex editor. We don't do much hex editing these days (that's what ASM is for!) but the file compare feature can be useful at times. + +SMILE RF - https://sadiztyk.metroidconstruction.com/rf.php +Super Metroid Integrated Level Editor. We don't use it to edit anything, but it can still be useful for research. The tooltip that appears when you select a tile and press tilda (`) is particularly handy. SMART is a newer editor with most of the same tools and more, but one of its main goals is to repoint things in the ROM and manage a hack project. We don't need any of that. + +Snes9x-rr v1.51 - https://github.com/TASEmulators/snes9x-rr/releases/tag/snes9x-151-v7.1 +The teledump lua script was written for this particular version of Snes9x. It is needed to create new category presets. + + + +Alternatives for Linux? +Sublime Text, Floating IPS From c1e60adbf031e6ed196eda9fbf64966333de0bb4 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Wed, 12 Aug 2026 02:49:02 -0400 Subject: [PATCH 18/27] Update SMILE link and mention RAM map --- tools/recommended.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/recommended.txt b/tools/recommended.txt index 7c73e90de..874e2bd59 100644 --- a/tools/recommended.txt +++ b/tools/recommended.txt @@ -3,7 +3,7 @@ This is an incomplete list of tools we use when developing the practice hack. P.JBoy's bank logs - https://patrickjohnston.org/bank/index.html -Complete documentation of the Super Metroid ROM. +Complete documentation of the Super Metroid ROM, easily viewable in your browser or downloaded as text. The RAM map linked within is essential. Mesen - https://mesen.ca Mesen is currently the most accurate SNES emulator. It includes a very powerful suite of debugging tools. Drag and drop our symbols file (generated by build_dev.bat) to get our source code labels in the debugger. Highly recommended for hacking and casual exploration! @@ -23,7 +23,7 @@ Translates SNES address space to PC (ROM file) format. Super Metroid uses LoROM HxD - https://mh-nexus.de/en/hxd/ A popular hex editor. We don't do much hex editing these days (that's what ASM is for!) but the file compare feature can be useful at times. -SMILE RF - https://sadiztyk.metroidconstruction.com/rf.php +SMILE RF - https://metroidconstruction.com/SMMM/SMILE_RF_3.0.80_offline.zip Super Metroid Integrated Level Editor. We don't use it to edit anything, but it can still be useful for research. The tooltip that appears when you select a tile and press tilda (`) is particularly handy. SMART is a newer editor with most of the same tools and more, but one of its main goals is to repoint things in the ROM and manage a hack project. We don't need any of that. Snes9x-rr v1.51 - https://github.com/TASEmulators/snes9x-rr/releases/tag/snes9x-151-v7.1 From b5ec5581a8c74d9248d72389705feee77dfd8049 Mon Sep 17 00:00:00 2001 From: idle Date: Tue, 11 Aug 2026 20:49:09 -0500 Subject: [PATCH 19/27] Add NOPs back after branch --- src/cutscenes.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cutscenes.asm b/src/cutscenes.asm index 886f5bf34..6a48e8a69 100644 --- a/src/cutscenes.asm +++ b/src/cutscenes.asm @@ -1837,7 +1837,7 @@ else org $A98C05 endif JMP cutscenes_mb_first_earthquake_start - BRA $02 + BRA $02 : NOP #2 cutscenes_mb_first_earthquake_end: if !FEATURE_PAL From 902a41219ef778a10d3bef20eea72abdf6b7c8b7 Mon Sep 17 00:00:00 2001 From: idle Date: Tue, 11 Aug 2026 20:52:34 -0500 Subject: [PATCH 20/27] Move tile tables start back to E68800 --- src/freespace.asm | 4 ++-- src/presets.asm | 4 ++-- src/tilegraphics.asm | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/freespace.asm b/src/freespace.asm index 8f78be75b..f0298631c 100644 --- a/src/freespace.asm +++ b/src/freespace.asm @@ -254,7 +254,7 @@ endif !END_FREESPACE_E3 = $E30000+$10000 !END_FREESPACE_E4 = $E40000+$10000 !END_FREESPACE_E5 = $E58000 ; roomnames.asm -!END_FREESPACE_E6 = $E68000 ; tilegraphics.asm +!END_FREESPACE_E6 = $E68800 ; tilegraphics.asm !END_FREESPACE_E7 = $E78000 ; tilegraphics.asm !END_FREESPACE_E8 = $E88000 ; tilegraphics.asm + presets.asm !END_FREESPACE_E9 = $E98000 ; presets.asm @@ -382,7 +382,7 @@ macro printfreespace() %tickfreespace(E3) %tickfreespace(E4) ;%tickfreespace(E5) roomnames.asm -;%tickfreespace(E6) tilegraphics.asm +%tickfreespace(E6) ;%tickfreespace(E7) tilegraphics.asm ;%tickfreespace(E8) tilegraphics.asm + presets.asm ;%tickfreespace(E9) presets.asm diff --git a/src/presets.asm b/src/presets.asm index 97194f264..6f6f9eccf 100644 --- a/src/presets.asm +++ b/src/presets.asm @@ -1176,7 +1176,7 @@ resume_infohud_icon_initialization: ; Category Menus/Data ; ------------------- -org $E8D800 +org $E8E000 PresetData: check bankcross off @@ -1188,7 +1188,7 @@ print pc, " preset data crossbank end" table ../resources/normal.tbl incsrc presets/combined_preset_names.asm -warnpc !START_FREESPACE_F0 +warnpc $F08000 check bankcross on %startfree(F1) diff --git a/src/tilegraphics.asm b/src/tilegraphics.asm index e1230534c..f75cd1b06 100644 --- a/src/tilegraphics.asm +++ b/src/tilegraphics.asm @@ -1,5 +1,5 @@ -org $E68000 +org $E68800 check bankcross off print pc, " raw tile tables crossbank start" From 75d4bd765e60a13620655109e9d771ec0689f6b9 Mon Sep 17 00:00:00 2001 From: idle Date: Tue, 11 Aug 2026 20:20:01 -0500 Subject: [PATCH 21/27] Avoid saving to SRAM when loading preset or savestate --- src/defines.asm | 37 +++++++++++++++++-------------------- src/menu.asm | 4 ++-- src/presets.asm | 14 +++++++------- src/save.asm | 35 ++++++++++++++--------------------- src/symbols.asm | 23 +++++++++++++++-------- src/tinystates.asm | 35 ++++++++++++++--------------------- 6 files changed, 69 insertions(+), 79 deletions(-) diff --git a/src/defines.asm b/src/defines.asm index 2f0fa7163..ea784c60a 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -402,9 +402,6 @@ !ram_cm_selected_slot = !WRAM_MENU_START+$92 !ram_cm_preset_elevator = !WRAM_MENU_START+$94 -; keyboard used by both presets and customize menus -!ram_cm_keyboard_buffer = !WRAM_MENU_START+$B8 ; $18 bytes - !ram_cm_custompalette_blue = !WRAM_MENU_START+$90 !ram_cm_custompalette_green = !WRAM_MENU_START+$92 !ram_cm_custompalette_red = !WRAM_MENU_START+$94 @@ -414,13 +411,25 @@ !ram_cm_dummy_off = !WRAM_MENU_START+$AC !ram_cm_dummy_num = !WRAM_MENU_START+$AE +; keyboard used by both presets and customize menus +!ram_cm_keyboard_buffer = !WRAM_MENU_START+$B8 ; $18 bytes + ; ^ FREE SPACE ^ up to +$CE ; Note: +$B8 to +$CE range also used as frames held counters and keyboard buffer ; and is reset to zero when loading a savestate -; Reserve 48 bytes for CGRAM cache -; Currently first 32 bytes plus last 2 bytes are used -!ram_cgram_cache = !WRAM_MENU_START+$D0 ; $30 bytes +; load state cannot be initiated from the menu, so it can overlap cgram +!ram_loadstate_music_data = !WRAM_MENU_START+$D0 +!ram_loadstate_music_track = !WRAM_MENU_START+$D2 +!ram_loadstate_sound_timer = !WRAM_MENU_START+$D4 +!ram_loadstate_cached_random_number = !WRAM_MENU_START+$D6 +!ram_loadstate_frame_counter = !WRAM_MENU_START+$D8 +!ram_loadstate_enemy_main_loop_counter = !WRAM_MENU_START+$DA +!ram_cgram_cache = !WRAM_MENU_START+$D0 ; $20 bytes + +!ram_backup_message_box = !WRAM_MENU_START+$F0 + +; ^ FREE SPACE ^ up to +$FE ; ----------------- @@ -637,11 +646,6 @@ !sram_custom_preset_safewords_tinystates = !SRAM_START+$E30 ; $20 bytes !sram_custom_preset_names_tinystates = !SRAM_START+$E50 ; $180 bytes -; SM specific things -!SRAM_MUSIC_DATA = !SRAM_START+$FD0 -!SRAM_MUSIC_TRACK = !SRAM_START+$FD2 -!SRAM_SOUND_TIMER = !SRAM_START+$FD4 - ; ^ FREE SPACE ^ up to +$FFE @@ -1182,8 +1186,9 @@ !CATEGORY_PRESET_STACK_SIZE = #$0800 !eram_category_preset_stack = !ENEMY_ID +!BG3_HDMA_CHANNELS_BACKUP = $7E33EA !HUD_TILEMAP = $7EC600 -!MAP_COUNTER = $7ECAE8 ; Not used in vanilla +!MAP_COUNTER = $7ECAE8 ; Not used in vanilla !SCROLLS = $7ECD20 !MAP_TILES_EXPLORED_CRATERIA = $7ECD52 !MAP_TILES_EXPLORED_BRINSTAR = $7ECE52 @@ -1260,26 +1265,18 @@ if !FEATURE_TINYSTATES !SRAM_DMA_BANK = $737000 !SRAM_SAVED_SP = $737F00 !SRAM_SAVED_STATE = $737F02 -!SRAM_SAVED_RNG = $737F80 -!SRAM_SAVED_FRAME_COUNTER = $737F82 -!SRAM_SAVED_ENEMY_COUNTER = $737F84 !SRAM_SAVED_MINIMAP = $737F86 !SRAM_SEG_TIMER_F = $737F88 !SRAM_SEG_TIMER_S = $737F8A !SRAM_SEG_TIMER_M = $737F8C -!SRAM_SLOWDOWN_MODE = $737F8E else !SRAM_DMA_BANK = $770000 -!SRAM_SAVED_RNG = $770080 -!SRAM_SAVED_FRAME_COUNTER = $770082 -!SRAM_SAVED_ENEMY_COUNTER = $770084 !SRAM_SAVED_SP = $774004 !SRAM_SAVED_STATE = $774006 !SRAM_SAVED_MINIMAP = $774008 !SRAM_SEG_TIMER_F = $77400A !SRAM_SEG_TIMER_S = $77400C !SRAM_SEG_TIMER_M = $77400E -!SRAM_SLOWDOWN_MODE = $774010 endif endif diff --git a/src/menu.asm b/src/menu.asm index 1cd11ad4f..2046927f9 100644 --- a/src/menu.asm +++ b/src/menu.asm @@ -19,7 +19,7 @@ incsrc mainmenu.asm %startfree(85) initialize_ppu_long: - LDA $7E33EA : STA !ram_cgram_cache+$2E + LDA !BG3_HDMA_CHANNELS_BACKUP : STA !ram_backup_message_box JSR $8143 ; cm_transfer_custom_tileset will call %ai16() RTL @@ -27,7 +27,7 @@ initialize_ppu_long: restore_ppu_long: JSR $861A %ai16() - LDA !ram_cgram_cache+$2E : STA $7E33EA + LDA !ram_backup_message_box : STA !BG3_HDMA_CHANNELS_BACKUP RTL play_music_long: diff --git a/src/presets.asm b/src/presets.asm index 6f6f9eccf..99837cd2c 100644 --- a/src/presets.asm +++ b/src/presets.asm @@ -4,8 +4,8 @@ preset_load: { PHP - LDA !MUSIC_DATA : STA !SRAM_MUSIC_DATA - LDA !MUSIC_TRACK : STA !SRAM_MUSIC_TRACK + LDA !MUSIC_DATA : STA !ram_loadstate_music_data + LDA !MUSIC_TRACK : STA !ram_loadstate_music_track JSL $809E93 ; Clear timer RAM JSR $819B ; Initialize IO registers @@ -818,25 +818,25 @@ endif LDA !sram_music_toggle : CMP #$0002 : BPL .doneMusic ; Compare to currently loaded music data - LDA !SRAM_MUSIC_DATA : CMP !MUSIC_DATA : BEQ .doneLoadMusicData + LDA !ram_loadstate_music_data : CMP !MUSIC_DATA : BEQ .doneLoadMusicData ; Clear track if necessary - LDA !SRAM_MUSIC_TRACK : BEQ .loadMusicData + LDA !ram_loadstate_music_track : BEQ .loadMusicData TDC : JSL !MUSIC_ROUTINE .loadMusicData LDA !MUSIC_DATA : TAX - LDA !SRAM_MUSIC_DATA : STA !MUSIC_DATA + LDA !ram_loadstate_music_data : STA !MUSIC_DATA TXA : CLC : ADC #$FF00 : JSL !MUSIC_ROUTINE BRA .loadMusicTrack .doneLoadMusicData ; Compare to currently playing music - LDA !SRAM_MUSIC_TRACK : CMP !MUSIC_TRACK : BEQ .doneMusic + LDA !ram_loadstate_music_track : CMP !MUSIC_TRACK : BEQ .doneMusic .loadMusicTrack LDA !MUSIC_TRACK : TAX - LDA !SRAM_MUSIC_TRACK : STA !MUSIC_TRACK + LDA !ram_loadstate_music_track : STA !MUSIC_TRACK TXA : JSL !MUSIC_ROUTINE .doneMusic diff --git a/src/save.asm b/src/save.asm index d3e20c554..3dfa8b2d6 100644 --- a/src/save.asm +++ b/src/save.asm @@ -44,20 +44,16 @@ endmacro ; Both A and X/Y are 16-bit here pre_load_state: { - LDA !MUSIC_DATA : STA !SRAM_MUSIC_DATA - LDA !MUSIC_TRACK : STA !SRAM_MUSIC_TRACK - LDA !SOUND_TIMER : STA !SRAM_SOUND_TIMER - - LDA !ram_slowdown_mode : STA !SRAM_SLOWDOWN_MODE + LDA !MUSIC_DATA : STA !ram_loadstate_music_data + LDA !MUSIC_TRACK : STA !ram_loadstate_music_track + LDA !SOUND_TIMER : STA !ram_loadstate_sound_timer ; Rerandomize LDA !sram_save_has_set_rng : BMI .done LDA !sram_rerandomize : BEQ .done - LDA !CACHED_RANDOM_NUMBER : STA !SRAM_SAVED_RNG - LDA !FRAME_COUNTER : STA !SRAM_SAVED_FRAME_COUNTER - LDA !ENEMY_MAIN_LOOP_COUNTER : STA !SRAM_SAVED_ENEMY_COUNTER - LDA !ram_seed_X : STA !sram_seed_X - LDA !ram_seed_Y : STA !sram_seed_Y + LDA !CACHED_RANDOM_NUMBER : STA !ram_loadstate_cached_random_number + LDA !FRAME_COUNTER : STA !ram_loadstate_frame_counter + LDA !ENEMY_MAIN_LOOP_COUNTER : STA !ram_loadstate_enemy_main_loop_counter .done RTS @@ -94,18 +90,15 @@ post_load_state: ; Reload custom HUD number GFX JSL overwrite_HUD_numbers - LDA !SRAM_SLOWDOWN_MODE : STA !ram_slowdown_mode TDC : STA !ram_slowdown_frames STA !ram_slowdown_controller_1 : STA !ram_slowdown_controller_2 ; Rerandomize LDA !sram_save_has_set_rng : BMI .randomizeOnLoad LDA !sram_rerandomize : BEQ .randomizeOnLoad - LDA !SRAM_SAVED_RNG : STA !CACHED_RANDOM_NUMBER - LDA !SRAM_SAVED_FRAME_COUNTER : STA !FRAME_COUNTER - LDA !SRAM_SAVED_ENEMY_COUNTER : STA !ENEMY_MAIN_LOOP_COUNTER - LDA !sram_seed_X : STA !ram_seed_X - LDA !sram_seed_Y : STA !ram_seed_Y + LDA !ram_loadstate_cached_random_number : STA !CACHED_RANDOM_NUMBER + LDA !ram_loadstate_frame_counter : STA !FRAME_COUNTER + LDA !ram_loadstate_enemy_main_loop_counter : STA !ENEMY_MAIN_LOOP_COUNTER JSL MenuRNG ; rerandomize hack RNG .randomizeOnLoad @@ -181,7 +174,7 @@ post_load_music: LDA !sram_music_toggle : CMP #$0002 : BPL .fast_off_preset_off ; No data found in queue, check if we need to insert it - LDA !SRAM_MUSIC_DATA : CMP !MUSIC_DATA : BEQ .music_queue_increase_timer + LDA !ram_loadstate_music_data : CMP !MUSIC_DATA : BEQ .music_queue_increase_timer ; Insert queued music data DEX #2 : TXA : AND #$000E : TAX @@ -197,7 +190,7 @@ post_load_music: .music_queue_empty LDA !sram_music_toggle : CMP #$0002 : BPL .fast_off_preset_off - LDA !SRAM_MUSIC_DATA : CMP !MUSIC_DATA : BNE .clear_track_load_data + LDA !ram_loadstate_music_data : CMP !MUSIC_DATA : BNE .clear_track_load_data JMP .check_track .clear_track_load_data @@ -218,7 +211,7 @@ post_load_music: .music_queue_increase_timer ; Data is correct, but we may need to increase our sound timer - LDA !SRAM_SOUND_TIMER : CMP !MUSIC_TIMER : BMI .done + LDA !ram_loadstate_sound_timer : CMP !MUSIC_TIMER : BMI .done STA !MUSIC_TIMER : STA !SOUND_TIMER BRA .done @@ -236,7 +229,7 @@ post_load_music: LDX !MUSIC_QUEUE_START .queued_music_prepare_set_timer - LDA !SRAM_SOUND_TIMER : BNE .queued_music_set_timer + LDA !ram_loadstate_sound_timer : BNE .queued_music_set_timer INC .queued_music_set_timer @@ -244,7 +237,7 @@ post_load_music: BRA .done .check_track - LDA !SRAM_MUSIC_TRACK : CMP !MUSIC_TRACK : BEQ .done + LDA !ram_loadstate_music_track : CMP !MUSIC_TRACK : BEQ .done .load_track LDA !MUSIC_TRACK : JSL !MUSIC_ROUTINE diff --git a/src/symbols.asm b/src/symbols.asm index cf229e707..6868a4141 100644 --- a/src/symbols.asm +++ b/src/symbols.asm @@ -378,9 +378,6 @@ ram_cm_manage_slots = !ram_cm_manage_slots ; !WRAM_MENU_START+$90 ram_cm_selected_slot = !ram_cm_selected_slot ; !WRAM_MENU_START+$92 ram_cm_preset_elevator = !ram_cm_preset_elevator ; !WRAM_MENU_START+$94 -; keyboard used by both presets and customize menus -ram_cm_keyboard_buffer = !ram_cm_keyboard_buffer ; !WRAM_MENU_START+$B8 ; $18 bytes - ram_cm_custompalette_blue = !ram_cm_custompalette_blue ; !WRAM_MENU_START+$90 ram_cm_custompalette_green = !ram_cm_custompalette_green ; !WRAM_MENU_START+$92 ram_cm_custompalette_red = !ram_cm_custompalette_red ; !WRAM_MENU_START+$94 @@ -390,13 +387,25 @@ ram_cm_dummy_on = !ram_cm_dummy_on ; !WRAM_MENU_START+$AA ram_cm_dummy_off = !ram_cm_dummy_off ; !WRAM_MENU_START+$AC ram_cm_dummy_num = !ram_cm_dummy_num ; !WRAM_MENU_START+$AE +; keyboard used by both presets and customize menus +ram_cm_keyboard_buffer = !ram_cm_keyboard_buffer ; !WRAM_MENU_START+$B8 ; $18 bytes + ; ^ FREE SPACE ^ up to +$CE ; Note: +$B8 to +$CE range also used as frames held counters and keyboard buffer ; and is reset to zero when loading a savestate -; Reserve 48 bytes for CGRAM cache -; Currently first 32 bytes plus last 2 bytes are used -ram_cgram_cache = !ram_cgram_cache ; !WRAM_MENU_START+$D0 ; $30 bytes +; load state cannot be initiated from the menu, so it can overlap cgram +ram_loadstate_music_data = !ram_loadstate_music_data ; !WRAM_MENU_START+$D0 +ram_loadstate_music_track = !ram_loadstate_music_track ; !WRAM_MENU_START+$D2 +ram_loadstate_sound_timer = !ram_loadstate_sound_timer ; !WRAM_MENU_START+$D4 +ram_loadstate_cached_random_number = !ram_loadstate_cached_random_number ; !WRAM_MENU_START+$D6 +ram_loadstate_frame_counter = !ram_loadstate_frame_counter ; !WRAM_MENU_START+$D8 +ram_loadstate_enemy_main_loop_counter = !ram_loadstate_enemy_main_loop_counter ; !WRAM_MENU_START+$DA +ram_cgram_cache = !ram_cgram_cache ; !WRAM_MENU_START+$D0 ; $20 bytes + +ram_backup_message_box = !ram_backup_message_box ; !WRAM_MENU_START+$F0 + +; ^ FREE SPACE ^ up to +$FE ; ----------------- ; Crash Handler RAM @@ -600,8 +609,6 @@ sram_custom_header_tinystates = !sram_custom_header_tinystates ; !SRAM_START+$E1 sram_custom_preset_safewords_tinystates = !sram_custom_preset_safewords_tinystates ; !SRAM_START+$E30 ; $20 bytes sram_custom_preset_names_tinystates = !sram_custom_preset_names_tinystates ; !SRAM_START+$E50 ; $180 bytes -; SM specific things - ; ^ FREE SPACE ^ up to +$FFE ; -------------- diff --git a/src/tinystates.asm b/src/tinystates.asm index 3e9a328c6..0696bff7e 100644 --- a/src/tinystates.asm +++ b/src/tinystates.asm @@ -44,20 +44,16 @@ endmacro ; Both A and X/Y are 16-bit here pre_load_state: { - LDA !MUSIC_DATA : STA !SRAM_MUSIC_DATA - LDA !MUSIC_TRACK : STA !SRAM_MUSIC_TRACK - LDA !SOUND_TIMER : STA !SRAM_SOUND_TIMER - - LDA !ram_slowdown_mode : STA !SRAM_SLOWDOWN_MODE + LDA !MUSIC_DATA : STA !ram_loadstate_music_data + LDA !MUSIC_TRACK : STA !ram_loadstate_music_track + LDA !SOUND_TIMER : STA !ram_loadstate_sound_timer ; Rerandomize LDA !sram_save_has_set_rng : BMI .done LDA !sram_rerandomize : BEQ .done - LDA !CACHED_RANDOM_NUMBER : STA !SRAM_SAVED_RNG - LDA !FRAME_COUNTER : STA !SRAM_SAVED_FRAME_COUNTER - LDA !ENEMY_MAIN_LOOP_COUNTER : STA !SRAM_SAVED_ENEMY_COUNTER - LDA !ram_seed_X : STA !sram_seed_X - LDA !ram_seed_Y : STA !sram_seed_Y + LDA !CACHED_RANDOM_NUMBER : STA !ram_loadstate_cached_random_number + LDA !FRAME_COUNTER : STA !ram_loadstate_frame_counter + LDA !ENEMY_MAIN_LOOP_COUNTER : STA !ram_loadstate_enemy_main_loop_counter .done ; Force blank and disable NMI @@ -133,18 +129,15 @@ post_load_state: ; Reload custom HUD number GFX JSL overwrite_HUD_numbers - LDA !SRAM_SLOWDOWN_MODE : STA !ram_slowdown_mode TDC : STA !ram_slowdown_frames STA !ram_slowdown_controller_1 : STA !ram_slowdown_controller_2 ; Rerandomize LDA !sram_save_has_set_rng : BMI .randomizeOnLoad LDA !sram_rerandomize : BEQ .randomizeOnLoad - LDA !SRAM_SAVED_RNG : STA !CACHED_RANDOM_NUMBER - LDA !SRAM_SAVED_FRAME_COUNTER : STA !FRAME_COUNTER - LDA !SRAM_SAVED_ENEMY_COUNTER : STA !ENEMY_MAIN_LOOP_COUNTER - LDA !sram_seed_X : STA !ram_seed_X - LDA !sram_seed_Y : STA !ram_seed_Y + LDA !ram_loadstate_cached_random_number : STA !CACHED_RANDOM_NUMBER + LDA !ram_loadstate_frame_counter : STA !FRAME_COUNTER + LDA !ram_loadstate_enemy_main_loop_counter : STA !ENEMY_MAIN_LOOP_COUNTER JSL MenuRNG ; rerandomize hack RNG .randomizeOnLoad @@ -225,7 +218,7 @@ post_load_music: LDA !sram_music_toggle : CMP #$0002 : BPL .fast_off_preset_off ; No data found in queue, check if we need to insert it - LDA !SRAM_MUSIC_DATA : CMP !MUSIC_DATA : BEQ .music_queue_increase_timer + LDA !ram_loadstate_music_data : CMP !MUSIC_DATA : BEQ .music_queue_increase_timer ; Insert queued music data DEX #2 : TXA : AND #$000E : TAX @@ -241,7 +234,7 @@ post_load_music: .music_queue_empty LDA !sram_music_toggle : CMP #$0002 : BPL .fast_off_preset_off - LDA !SRAM_MUSIC_DATA : CMP !MUSIC_DATA : BNE .clear_track_load_data + LDA !ram_loadstate_music_data : CMP !MUSIC_DATA : BNE .clear_track_load_data JMP .check_track .clear_track_load_data @@ -262,7 +255,7 @@ post_load_music: .music_queue_increase_timer ; Data is correct, but we may need to increase our sound timer - LDA !SRAM_SOUND_TIMER : CMP !MUSIC_TIMER : BMI .done + LDA !ram_loadstate_sound_timer : CMP !MUSIC_TIMER : BMI .done STA !MUSIC_TIMER : STA !SOUND_TIMER BRA .done @@ -280,7 +273,7 @@ post_load_music: LDX !MUSIC_QUEUE_START .queued_music_prepare_set_timer - LDA !SRAM_SOUND_TIMER : BNE .queued_music_set_timer + LDA !ram_loadstate_sound_timer : BNE .queued_music_set_timer INC .queued_music_set_timer @@ -288,7 +281,7 @@ post_load_music: BRA .done .check_track - LDA !SRAM_MUSIC_TRACK : CMP !MUSIC_TRACK : BEQ .done + LDA !ram_loadstate_music_track : CMP !MUSIC_TRACK : BEQ .done .load_track LDA !MUSIC_TRACK : JSL !MUSIC_ROUTINE From 7328d85b21e3d46ed0bb4dce482a22ae70dda7ab Mon Sep 17 00:00:00 2001 From: idle Date: Thu, 13 Aug 2026 16:42:29 -0500 Subject: [PATCH 22/27] Optimize and free up some menu memory --- src/BRBmenu.asm | 24 +- src/menu.asm | 636 ++++++++++++++++++------------------------------ 2 files changed, 253 insertions(+), 407 deletions(-) diff --git a/src/BRBmenu.asm b/src/BRBmenu.asm index c9315f63b..abfa7f281 100644 --- a/src/BRBmenu.asm +++ b/src/BRBmenu.asm @@ -310,13 +310,13 @@ cm_tilemap_brb: .draw_timer ; Seconds LDA !ram_cm_brb_secs : ASL : TAX - LDA.l TimerNumberGFX1,X : STA !ram_tilemap_buffer+$360 - LDA.l TimerNumberGFX2,X : STA !ram_tilemap_buffer+$362 + LDA.l BRBTimerNumberGFX1,X : STA !ram_tilemap_buffer+$360 + LDA.l BRBTimerNumberGFX2,X : STA !ram_tilemap_buffer+$362 ; Minutes LDA !ram_cm_brb_mins : ASL : TAX - LDA.l TimerNumberGFX1,X : STA !ram_tilemap_buffer+$35A - LDA.l TimerNumberGFX2,X : STA !ram_tilemap_buffer+$35C + LDA.l BRBTimerNumberGFX1,X : STA !ram_tilemap_buffer+$35A + LDA.l BRBTimerNumberGFX2,X : STA !ram_tilemap_buffer+$35C ; Draw colon seperator LDA #$2800|':' : STA !ram_tilemap_buffer+$35E @@ -760,6 +760,22 @@ BRB_screen7_line1: BRB_screen7_line2: db #$28, " crocomi.re", #$FF +BRBTimerNumberGFX1: + dw #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870 + dw #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871 + dw #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872 + dw #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873 + dw #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874 + dw #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875 + +BRBTimerNumberGFX2: + dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + %endfree(A1) diff --git a/src/menu.asm b/src/menu.asm index 2046927f9..4cffdeb12 100644 --- a/src/menu.asm +++ b/src/menu.asm @@ -834,22 +834,12 @@ draw_toggle: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; Set position for ON/OFF - TXA : CLC : ADC #$002E : TAX - ; grab the value at that memory address - LDA [!DP_Address] : CMP !DP_ToggleValue : BEQ .checked - - ; Off - LDA #$244B : STA !ram_tilemap_buffer,X ; O - LDA #$244D : STA !ram_tilemap_buffer+2,X ; F - LDA #$244D : STA !ram_tilemap_buffer+4,X ; F - RTS + LDA [!DP_Address] : CMP !DP_ToggleValue : BNE draw_toggle_bit_off - .checked - ; On - LDA #$384B : STA !ram_tilemap_buffer+2,X ; O - LDA #$384C : STA !ram_tilemap_buffer+4,X ; N + .on + LDA #$384B : STA !ram_tilemap_buffer+$30,X ; O + INC : STA !ram_tilemap_buffer+$32,X ; N RTS } @@ -869,22 +859,13 @@ draw_toggle_bit: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; Set position for ON/OFF - TXA : CLC : ADC #$002E : TAX - ; grab the value at that memory address - LDA [!DP_Address] : AND !DP_ToggleValue : BNE .checked + LDA [!DP_Address] : AND !DP_ToggleValue : BNE draw_toggle_on - ; Off - LDA #$244B : STA !ram_tilemap_buffer,X ; O - LDA #$244D : STA !ram_tilemap_buffer+2,X ; F - LDA #$244D : STA !ram_tilemap_buffer+4,X ; F - RTS - - .checked - ; On - LDA #$384B : STA !ram_tilemap_buffer+2,X ; O - LDA #$384C : STA !ram_tilemap_buffer+4,X ; N + .off + LDA #$244B : STA !ram_tilemap_buffer+$2E,X ; O + INC #2 : STA !ram_tilemap_buffer+$30,X ; F + STA !ram_tilemap_buffer+$32,X ; F RTS } @@ -904,22 +885,12 @@ draw_toggle_inverted: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; Set position for ON/OFF - TXA : CLC : ADC #$002E : TAX - ; grab the value at that memory address - LDA [!DP_Address] : CMP !DP_ToggleValue : BNE .checked + LDA [!DP_Address] : CMP !DP_ToggleValue : BEQ draw_toggle_bit_inverted_off - ; Off - LDA #$244B : STA !ram_tilemap_buffer,X ; O - LDA #$244D : STA !ram_tilemap_buffer+2,X ; F - LDA #$244D : STA !ram_tilemap_buffer+4,X ; F - RTS - - .checked - ; On - LDA #$384B : STA !ram_tilemap_buffer+2,X ; O - LDA #$384C : STA !ram_tilemap_buffer+4,X ; N + .on + LDA #$384B : STA !ram_tilemap_buffer+$30,X ; O + INC : STA !ram_tilemap_buffer+$32,X ; N RTS } @@ -939,23 +910,43 @@ draw_toggle_bit_inverted: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; Set position for ON/OFF - TXA : CLC : ADC #$002E : TAX - ; grab the value at that memory address - LDA [!DP_Address] : AND !DP_ToggleValue : BEQ .checked + LDA [!DP_Address] : AND !DP_ToggleValue : BEQ draw_toggle_inverted_on - ; Off - LDA #$244B : STA !ram_tilemap_buffer,X ; O - LDA #$244D : STA !ram_tilemap_buffer+2,X ; F - LDA #$244D : STA !ram_tilemap_buffer+4,X ; F + .off + LDA #$244B : STA !ram_tilemap_buffer+$2E,X ; O + INC #2 : STA !ram_tilemap_buffer+$30,X ; F + STA !ram_tilemap_buffer+$32,X ; F RTS +} - .checked - ; On - LDA #$384B : STA !ram_tilemap_buffer+2,X ; O - LDA #$384C : STA !ram_tilemap_buffer+4,X ; N - RTS +draw_numfield_signed: +{ + ; grab the memory address (long) + LDA [!DP_CurrentMenu] : INC !DP_CurrentMenu : INC !DP_CurrentMenu : STA !DP_Address + LDA [!DP_CurrentMenu] : INC !DP_CurrentMenu : STA !DP_Address+2 + + ; skip min/max and increment values + INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu + INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu + + ; increment past JSL + INC !DP_CurrentMenu : INC !DP_CurrentMenu + + ; Draw the text + %item_index_to_vram_index() + PHX : JSR cm_draw_text : PLX + + ; Draw sign + LDA [!DP_Address] : BEQ draw_numfield_convert_value : BPL .plus + LDA.w #$1C00 : ORA !DP_Palette : XBA : STA !ram_tilemap_buffer+$2C,X + LDA [!DP_Address] : EOR #$FFFF : INC + BRA draw_numfield_convert_value + + .plus + LDA.w #$4F00 : ORA !DP_Palette : XBA : STA !ram_tilemap_buffer+$2C,X + LDA [!DP_Address] + BRA draw_numfield_convert_value } draw_numfield: @@ -974,34 +965,30 @@ draw_numfield: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; set position for the number - TXA : CLC : ADC #$002E : TAX - ; convert value to decimal - LDA [!DP_Address] : AND #$00FF : JSR cm_hex2dec + LDA [!DP_Address] : AND #$00FF - ; Clear out the area - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - STA !ram_tilemap_buffer+2,X - STA !ram_tilemap_buffer+4,X + .convert_value + JSR cm_hex2dec - ; Set palette - %a8() - LDA #$24 : ORA !DP_Palette : STA !DP_Palette+1 - LDA #$70 : STA !DP_Palette ; number tiles are 70-79 + ; Set palette word, with lower byte set to 70 since number tiles are 70-79 + LDA !DP_Palette : XBA : ORA #$2470 : STA !DP_Palette - ; Draw numbers - %a16() - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit : BEQ .done - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; hundreds - LDA !DP_FirstDigit : BEQ .done - CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + ; Draw ones digit + CLC : ADC !DP_ThirdDigit : STA !ram_tilemap_buffer+$32,X - .done + ; Draw remaining digits + LDA !DP_FirstDigit : BEQ .clearHundreds + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2E,X + LDA !DP_SecondDigit + .drawTens + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$30,X + RTS + + .clearHundreds + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$2E,X + LDA !DP_SecondDigit : BNE .drawTens + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$30,X RTS } @@ -1022,30 +1009,22 @@ draw_numfield_sound: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; set position for the number - TXA : CLC : ADC #$0030 : TAX - ; load the value LDA [!DP_Address] : AND #$00FF : STA !DP_DrawValue - ; Clear out the area - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - STA !ram_tilemap_buffer+2,X - ; Draw numbers ; (00X0) LDA !DP_DrawValue : AND #$00F0 : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$30,X ; (000X) LDA !DP_DrawValue : AND #$000F : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+2,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$32,X ; overwrite palette bytes %a8() LDA #$24 : ORA !DP_Palette - STA !ram_tilemap_buffer+1,X : STA !ram_tilemap_buffer+3,X + STA !ram_tilemap_buffer+$31,X : STA !ram_tilemap_buffer+$33,X %a16() - RTS } @@ -1066,39 +1045,32 @@ draw_numfield_word: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; set position for the number - TXA : CLC : ADC #$002C : TAX - ; convert value to decimal LDA [!DP_Address] : JSR cm_hex2dec - ; Clear out the area - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - STA !ram_tilemap_buffer+2,X - STA !ram_tilemap_buffer+4,X - STA !ram_tilemap_buffer+6,X - - ; Set palette - %a8() - LDA #$24 : ORA !DP_Palette : STA !DP_Palette+1 - LDA #$70 : STA !DP_Palette ; number tiles are 70-79 - - ; Draw numbers - %a16() - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+6,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .done - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; hundreds - LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .done - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; thousands - LDA !DP_Temp : BEQ .done - CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + ; Set palette word, with lower byte set to 70 since number tiles are 70-79 + LDA !DP_Palette : XBA : ORA #$2470 : STA !DP_Palette + + ; Draw ones digit + CLC : ADC !DP_ThirdDigit : STA !ram_tilemap_buffer+$32,X + + ; Draw remaining digits + LDA !DP_Temp : BEQ .clearThousands + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2C,X + LDA !DP_FirstDigit + .drawHundreds + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2E,X + LDA !DP_SecondDigit + .drawTens + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$30,X + RTS - .done + .clearThousands + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$2C,X + LDA !DP_FirstDigit : BNE .drawHundreds + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$2E,X + LDA !DP_SecondDigit : BNE .drawTens + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$30,X RTS } @@ -1115,100 +1087,29 @@ draw_numfield_hex_word: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; set position for the number - TXA : CLC : ADC #$002C : TAX - ; load the value LDA [!DP_Address] : STA !DP_DrawValue - ; Clear out the area - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - STA !ram_tilemap_buffer+2,X - STA !ram_tilemap_buffer+4,X - STA !ram_tilemap_buffer+6,X - ; Draw numbers ; (X000) LDA !DP_DrawValue : AND #$F000 : XBA : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$2C,X ; (0X00) LDA !DP_DrawValue : AND #$0F00 : XBA : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+2,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$2E,X ; (00X0) LDA !DP_DrawValue : AND #$00F0 : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+4,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$30,X ; (000X) LDA !DP_DrawValue : AND #$000F : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+6,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$32,X ; overwrite palette bytes %a8() LDA #$2C : ORA !DP_Palette - STA !ram_tilemap_buffer+1,X : STA !ram_tilemap_buffer+3,X - STA !ram_tilemap_buffer+5,X : STA !ram_tilemap_buffer+7,X - %a16() - - RTS -} - -draw_numfield_signed: -{ - ; grab the memory address (long) - LDA [!DP_CurrentMenu] : INC !DP_CurrentMenu : INC !DP_CurrentMenu : STA !DP_Address - LDA [!DP_CurrentMenu] : INC !DP_CurrentMenu : STA !DP_Address+2 - - ; skip min/max and increment values - INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu - INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu : INC !DP_CurrentMenu - - ; increment past JSL - INC !DP_CurrentMenu : INC !DP_CurrentMenu - - ; Draw the text - %item_index_to_vram_index() - PHX : JSR cm_draw_text : PLX - - ; set position for the number - TXA : CLC : ADC #$002C : TAX - - ; Clear out the area - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - STA !ram_tilemap_buffer+2,X - STA !ram_tilemap_buffer+4,X - STA !ram_tilemap_buffer+6,X - - ; Draw sign - LDA [!DP_Address] : BEQ .convert_value : BPL .plus - LDA.w #$1C00 : ORA !DP_Palette : XBA : STA !ram_tilemap_buffer,X - LDA [!DP_Address] : EOR #$FFFF : INC - BRA .convert_value - - .plus - LDA.w #$4F00 : ORA !DP_Palette : XBA : STA !ram_tilemap_buffer,X - LDA [!DP_Address] - - .convert_value - ; Convert value to decimal - JSR cm_hex2dec - - ; Set palette - %a8() - LDA #$24 : ORA !DP_Palette : STA !DP_Palette+1 - LDA #$70 : STA !DP_Palette ; number tiles are 70-79 - - ; Draw numbers + STA !ram_tilemap_buffer+$2D,X : STA !ram_tilemap_buffer+$2F,X + STA !ram_tilemap_buffer+$31,X : STA !ram_tilemap_buffer+$33,X %a16() - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+6,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .done - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; hundreds - LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .done - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - - .done RTS } @@ -1226,31 +1127,23 @@ draw_numfield_color: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; set position for the number - TXA : CLC : ADC #$0030 : TAX - ; load the value LDA [!DP_Address] : AND #$00FF : STA !DP_DrawValue - ; Clear out the area - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - STA !ram_tilemap_buffer+2,X - ; Draw numbers ; (00X0) LDA !DP_DrawValue : AND #$001E : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$30,X ; (000X) LDA !DP_DrawValue : AND #$0001 : ASL #4 : STA !DP_Temp LDA !DP_DrawValue : AND #$001C : LSR : CLC : ADC !DP_Temp : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+2,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$32,X ; overwrite palette bytes %a8() LDA #$24 : ORA !DP_Palette - STA !ram_tilemap_buffer+1,X : STA !ram_tilemap_buffer+3,X + STA !ram_tilemap_buffer+$31,X : STA !ram_tilemap_buffer+$33,X %a16() - RTS } @@ -1265,10 +1158,10 @@ draw_choice: ; Draw the text first %item_index_to_vram_index() - PHX : JSR cm_draw_text : PLX + PHX : JSR cm_draw_text : PLA ; set position for choice - TXA : CLC : ADC #$001E : TAX + CLC : ADC #$001E : TAX ; grab the value at that memory address LDA [!DP_Address] : TAY @@ -1414,9 +1307,6 @@ draw_controller_input: %item_index_to_vram_index() PHX : JSR cm_draw_text : PLX - ; set position for the input - TXA : CLC : ADC #$0020 : TAX - ; check if anything to draw LDA !sram_room_layout : BIT !ROOM_LAYOUT_MAP_RANDO : BNE .check_normal LDA !DP_Address : CMP #!CTRL_BINDING_ANGLEUP : BEQ .check_angle @@ -1427,36 +1317,38 @@ draw_controller_input: LDA (!DP_Address) : AND !CTRL_LR : BNE .determine_input .unbound - LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - RTS + LDA !MENU_BLANK + BRA .draw .check_normal LDA (!DP_Address) : AND !CTRL_ABLRXY_SELECT : BEQ .unbound .determine_input - ; determine which input to draw, using Y to refresh A - TAY : AND !CTRL_A : BEQ .check_b : LDY #$0000 : BRA .draw + ; determine which input to draw + BIT !CTRL_A : BEQ .check_b + LDA #$288F : BRA .draw .check_b - TYA : AND !CTRL_B : BEQ .check_x : LDY #$0002 : BRA .draw + BIT !CTRL_B : BEQ .check_x + LDA #$2887 : BRA .draw .check_x - TYA : AND !CTRL_X : BEQ .check_y : LDY #$0004 : BRA .draw + BIT !CTRL_X : BEQ .check_y + LDA #$288E : BRA .draw .check_y - TYA : AND !CTRL_Y : BEQ .check_l : LDY #$0006 : BRA .draw + BIT !CTRL_Y : BEQ .check_l + LDA #$2886 : BRA .draw .check_l - TYA : AND !CTRL_L : BEQ .check_r : LDY #$0008 : BRA .draw + BIT !CTRL_L : BEQ .check_r + LDA #$288D : BRA .draw .check_r - TYA : AND !CTRL_R : BEQ .check_select : LDY #$000A : BRA .draw + BIT !CTRL_R : BEQ .check_select + LDA #$288C : BRA .draw .check_select - TYA : AND !CTRL_SELECT : BEQ .unbound : LDY #$000C + BIT !CTRL_SELECT : BEQ .unbound + LDA #$2885 .draw - LDA.w .CtrlMenuGFXTable,Y : STA !ram_tilemap_buffer,X + STA !ram_tilemap_buffer+$20,X RTS - - .CtrlMenuGFXTable - ; A B X Y L R Select - ; $0080 $8000 $0040 $4000 $0020 $0010 $2000 - dw $288F, $2887, $288E, $2886, $288D, $288C, $2885 } draw_jsl: @@ -1536,103 +1428,85 @@ draw_custom_preset: ; draw Samus CURRENT ENERGY LDX !DP_Address : LDA !PRESET_SLOTS_ENERGY,X : STA !DP_DrawValue JSR cm_hex2dec - ; set palette - LDA !DP_CtrlInput : STA !DP_Palette - %a8() - LDA #$2C : ORA !DP_Palette : STA !DP_Palette+1 - LDA #$70 : STA !DP_Palette ; number tiles are 70-79 - %a16() - ; set tilemap position - LDA !DP_JSLTarget : CLC : ADC #$0006 : TAX - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+6,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .drawSamusMaxEnergy - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; hundreds - LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .drawSamusMaxEnergy - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; thousands - LDA !DP_Temp : BEQ .drawSamusMaxEnergy - CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + ; set palette word, with lower byte set to 70 since number tiles are 70-79 + LDA !DP_CtrlInput : XBA : ORA #$2C70 : STA !DP_Palette + ; draw ones digit + CLC : ADC !DP_ThirdDigit : STA !ram_tilemap_buffer+$C,X + ; draw remaining digits + LDA !DP_Temp : BEQ .samusEnergyHundreds + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$6,X + .samusEnergyHundreds + LDA !DP_FirstDigit : BEQ .samusEnergyTens + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$8,X + .samusEnergyTens + LDA !DP_SecondDigit : BEQ .drawSamusMaxEnergy + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$A,X .drawSamusMaxEnergy - ; set tilemap position and draw hyphen - LDA !DP_JSLTarget : CLC : ADC #$000E : TAX - LDA !MENU_SLASH : STA !ram_tilemap_buffer,X - + ; draw hyphen + LDA !MENU_SLASH : STA !ram_tilemap_buffer+$E,X ; get Samus max energy LDX !DP_Address : LDA !PRESET_SLOTS_MAXENERGY,X : STA !DP_DrawValue JSR cm_hex2dec - ; set tilemap position - LDA !DP_JSLTarget : CLC : ADC #$0010 : TAX - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+6,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .drawSamusReserves - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; hundreds - LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .drawSamusReserves - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; thousands - LDA !DP_Temp : BEQ .drawSamusReserves - CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + ; draw ones + LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$16,X + ; draw remaining digits + LDA !DP_Temp : BEQ .samusMaxEnergyHundreds + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$10,X + .samusMaxEnergyHundreds + LDA !DP_FirstDigit : BEQ .samusMaxEnergyTens + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$12,X + .samusMaxEnergyTens + LDA !DP_SecondDigit : BEQ .drawSamusReserves + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$14,X .drawSamusReserves LDX !DP_Address : LDA !PRESET_SLOTS_RESERVES,X : STA !DP_DrawValue JSR cm_hex2dec - ; set tilemap position - LDA !DP_JSLTarget : CLC : ADC #$001A : TAX - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .drawSamusMissiles - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; hundreds - LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .drawSamusMissiles - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + ; draw ones + LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$1E,X + ; draw remaining digits + LDA !DP_FirstDigit : BEQ .samusReservesTens + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$1A,X + .samusReservesTens + LDA !DP_SecondDigit : BEQ .drawSamusMissiles + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$1C,X .drawSamusMissiles LDX !DP_Address : LDA !PRESET_SLOTS_MISSILES,X : STA !DP_DrawValue JSR cm_hex2dec - ; set tilemap position - LDA !DP_JSLTarget : CLC : ADC #$0022 : TAX - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .drawSamusSupers - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; hundreds - LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .drawSamusSupers - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + ; draw ones + LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$26,X + ; draw remaining digits + LDA !DP_FirstDigit : BEQ .samusMissilesTens + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$22,X + .samusMissilesTens + LDA !DP_SecondDigit : BEQ .drawSamusSupers + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$24,X .drawSamusSupers LDX !DP_Address : LDA !PRESET_SLOTS_SUPERS,X : STA !DP_DrawValue JSR cm_hex2dec - ; set tilemap position - LDA !DP_JSLTarget : CLC : ADC #$002A : TAX - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .drawSamusPowerBombs - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + ; draw ones + LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2C,X + ; draw remaining digits + LDA !DP_SecondDigit : BEQ .drawSamusPowerBombs + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2A,X .drawSamusPowerBombs LDX !DP_Address : LDA !PRESET_SLOTS_PBS,X : STA !DP_DrawValue JSR cm_hex2dec - ; set tilemap position - LDA !DP_JSLTarget : CLC : ADC #$0030 : TAX - ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X - ; tens - LDA !DP_SecondDigit : ORA !DP_FirstDigit - ORA !DP_Temp : BEQ .done - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + ; draw ones + LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$32,X + ; draw remaining digits + LDA !DP_SecondDigit : BEQ .done + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$30,X .done RTS @@ -1653,8 +1527,8 @@ draw_manage_presets: TYA : CMP !ram_cm_selected_slot : BNE .done ; add the indicator on the left side - LDX !DP_JSLTarget : DEX #2 - LDA !MENU_ARROW_RIGHT : STA !ram_tilemap_buffer,X + LDX !DP_JSLTarget + LDA !MENU_ARROW_RIGHT : STA !ram_tilemap_buffer-$2,X .done RTS @@ -1676,7 +1550,7 @@ draw_ram_watch: .both_8bit TXA : STA !ram_tilemap_buffer+$5D4 : STA !ram_tilemap_buffer+$5EA - ; Draw hexidecimal numbers + ; Draw hexadecimal numbers .draw_hex LDX #$05D2 ; position for left hex LDA !ram_watch_left : CLC : ADC !ram_watch_left_index : STA !DP_Address @@ -1704,14 +1578,14 @@ draw_ram_watch: LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer,X ; (0X00) LDA !DP_DrawValue : AND #$0F00 : XBA : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+2,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$2,X .left_8bit ; (00X0) LDA !DP_DrawValue : AND #$00F0 : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+4,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$4,X ; (000X) LDA !DP_DrawValue : AND #$000F : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+6,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$6,X ; Draw left decimal number LDX #$0610 ; position for left decimal @@ -1743,14 +1617,14 @@ draw_ram_watch: LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer,X ; (0X00) LDA !DP_DrawValue : AND #$0F00 : XBA : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+2,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$2,X .right_8bit ; (00X0) LDA !DP_DrawValue : AND #$00F0 : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+4,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$4,X ; (000X) LDA !DP_DrawValue : AND #$000F : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+6,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$6,X ; Draw right decimal number LDX #$0626 ; position for right decimal @@ -1909,7 +1783,6 @@ cm_hex2dec_draw5: ; expects value to be drawn in !DP_DrawValue ; expects tilemap pointer in X { - PHB LDA !DP_DrawValue : STA $4204 %a8() LDA #$0A : STA $4206 ; divide by 10 @@ -1921,7 +1794,7 @@ cm_hex2dec_draw5: LDA #$2C70 : STA !DP_Palette ; number tiles are 70-79 ; Ones digit - LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+8,X + LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+$8,X LDA !DP_Temp : BEQ .blanktens STA $4204 @@ -1932,7 +1805,7 @@ cm_hex2dec_draw5: LDA $4214 : STA !DP_ThirdDigit ; Tens digit - LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+6,X + LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+$6,X LDA !DP_ThirdDigit : BEQ .blankhundreds STA $4204 @@ -1943,7 +1816,7 @@ cm_hex2dec_draw5: LDA $4214 : STA !DP_SecondDigit ; Hundreds digit - LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+4,X + LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+$4,X LDA !DP_SecondDigit : BEQ .blankthousands STA $4204 @@ -1954,36 +1827,22 @@ cm_hex2dec_draw5: LDA $4214 : STA !DP_FirstDigit ; Thousands digit - LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+2,X + LDA $4216 : ORA !DP_Palette : STA !ram_tilemap_buffer+$2,X ; Ten thousands digit LDA !DP_FirstDigit : BEQ .blanktenthousands ORA !DP_Palette : STA !ram_tilemap_buffer,X - - .done - PLB - INX #10 RTS .blanktens - LDA !MENU_BLANK - STA !ram_tilemap_buffer,X : STA !ram_tilemap_buffer+2,X - STA !ram_tilemap_buffer+4,X : STA !ram_tilemap_buffer+6,X - BRA .done - + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$6,X .blankhundreds - LDA !MENU_BLANK - STA !ram_tilemap_buffer,X : STA !ram_tilemap_buffer+2,X : STA !ram_tilemap_buffer+4,X - BRA .done - + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$4,X .blankthousands - LDA !MENU_BLANK - STA !ram_tilemap_buffer,X : STA !ram_tilemap_buffer+2,X - BRA .done - + LDA !MENU_BLANK : STA !ram_tilemap_buffer+$2,X .blanktenthousands LDA !MENU_BLANK : STA !ram_tilemap_buffer,X - BRA .done + RTS } cm_draw_text: @@ -2236,10 +2095,10 @@ cm_edit_digits: ; check for A, B, and D-pad JSR cm_get_inputs : STA !ram_cm_controller - AND #$8F80 : BEQ .redraw + AND #$8F80 : BEQ .goto_redraw BIT !IH_INPUT_LEFTRIGHT : BNE .selecting BIT !IH_INPUT_UPDOWN : BNE .editing - BIT !CTRL_AB : BEQ .redraw + BIT !CTRL_AB : BEQ .goto_redraw ; exit if A or B pressed ; skip if JSL target is zero @@ -2267,16 +2126,12 @@ cm_edit_digits: LDA !ram_cm_controller : BIT !IH_INPUT_LEFT : BNE .left ; inc/dec horizontal cursor index LDA !ram_cm_horizontal_cursor : DEC : AND #$0003 : STA !ram_cm_horizontal_cursor + .goto_redraw BRA .redraw + .left LDA !ram_cm_horizontal_cursor : INC : AND #$0003 : STA !ram_cm_horizontal_cursor - .redraw - ; redraw numbers so selected digit is highlighted - LDX !MENU_STACK_INDEX : LDA !ram_cm_cursor_stack,X : TAY - %item_index_to_vram_index() - TXA : CLC : ADC #$002C : TAX - LDA [!DP_DigitAddress] - JMP cm_draw4_editing ; and return from there + BRA .redraw .editing ; use horizontal cursor index to ADC/SBC @@ -2293,56 +2148,48 @@ cm_edit_digits: ORA !DP_DigitValue : AND !DP_DigitMaximum : STA [!DP_DigitAddress] %sfxnumber() - ; redraw numbers + .redraw LDX !MENU_STACK_INDEX : LDA !ram_cm_cursor_stack,X : TAY %item_index_to_vram_index() - TXA : CLC : ADC #$002C : TAX LDA [!DP_DigitAddress] - ; fallthrough to cm_draw4_editing and return from there -} - -cm_draw4_editing: -{ ; (X000) STA !DP_DrawValue : AND #$F000 : XBA : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$2C,X ; (0X00) LDA !DP_DrawValue : AND #$0F00 : XBA : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+2,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$2E,X ; (00X0) LDA !DP_DrawValue : AND #$00F0 : LSR #3 : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+4,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$30,X ; (000X) LDA !DP_DrawValue : AND #$000F : ASL : TAY - LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+6,X + LDA.w HexMenuGFXTable,Y : STA !ram_tilemap_buffer+$32,X ; set palette bytes to unselected %a8() LDA #$2C - STA !ram_tilemap_buffer+1,X : STA !ram_tilemap_buffer+3,X - STA !ram_tilemap_buffer+5,X : STA !ram_tilemap_buffer+7,X + STA !ram_tilemap_buffer+$2D,X : STA !ram_tilemap_buffer+$2F,X + STA !ram_tilemap_buffer+$31,X : STA !ram_tilemap_buffer+$33,X ; highlight selected digit only - LDA !ram_cm_horizontal_cursor : BEQ .ones - DEC : BEQ .tens - DEC : BEQ .hundreds + LDA !ram_cm_horizontal_cursor : BEQ .highlight_ones + DEC : BEQ .highlight_tens + DEC : BEQ .highlight_hundreds ; thousands $X000 - LDA #$3C : STA !ram_tilemap_buffer+1,X - BRA .done - .hundreds ; $0X00 - LDA #$3C : STA !ram_tilemap_buffer+3,X - BRA .done - .tens ; $00X0 - LDA #$3C : STA !ram_tilemap_buffer+5,X - BRA .done - .ones ; $000X - LDA #$3C : STA !ram_tilemap_buffer+7,X - - .done + LDA #$3C : STA !ram_tilemap_buffer+$2D,X + BRA .redraw_done + .highlight_hundreds ; $0X00 + LDA #$3C : STA !ram_tilemap_buffer+$2F,X + BRA .redraw_done + .highlight_tens ; $00X0 + LDA #$3C : STA !ram_tilemap_buffer+$31,X + BRA .redraw_done + .highlight_ones ; $000X + LDA #$3C : STA !ram_tilemap_buffer+$33,X + .redraw_done %a16() - JSR cm_tilemap_transfer - RTS + JMP cm_tilemap_transfer } cm_SingleDigitEdit: @@ -2430,35 +2277,34 @@ cm_edit_decimal_digits: ; get tilemap address LDX !MENU_STACK_INDEX : LDA !ram_cm_cursor_stack,X : TAY %item_index_to_vram_index() - TXA : CLC : ADC #$002C : TAX ; is editing thousands digit allowed? LDA #$2C00|'0' LDY !DP_DigitMaximum : CPY #1000 : BMI .drawThreeDigits ; start with zero tiles - STA !ram_tilemap_buffer,X + STA !ram_tilemap_buffer+$2C,X .drawThreeDigits - STA !ram_tilemap_buffer+2,X - STA !ram_tilemap_buffer+4,X - STA !ram_tilemap_buffer+6,X + STA !ram_tilemap_buffer+$2E,X + STA !ram_tilemap_buffer+$30,X + STA !ram_tilemap_buffer+$32,X ; set palette and default zero tile STA !DP_Palette ; Draw numbers ; ones - LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+6,X + LDA !DP_ThirdDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$32,X ; tens LDA !DP_SecondDigit : ORA !DP_FirstDigit ORA !DP_Temp : BEQ .highlighting - LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+4,X + LDA !DP_SecondDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$30,X ; hundreds LDA !DP_FirstDigit : ORA !DP_Temp : BEQ .highlighting - LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+2,X + LDA !DP_FirstDigit : CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2E,X ; thousands LDA !DP_Temp : BEQ .highlighting - CLC : ADC !DP_Palette : STA !ram_tilemap_buffer,X + CLC : ADC !DP_Palette : STA !ram_tilemap_buffer+$2C,X .highlighting ; highlight the selected tile @@ -2475,10 +2321,9 @@ cm_edit_decimal_digits: TXA : CLC : ADC #$0006 : TAX .highlight ; number tiles are 70-79 - LDA !ram_tilemap_buffer,X : ORA #$3C70 : STA !ram_tilemap_buffer,X + LDA !ram_tilemap_buffer+$2C,X : ORA #$3C70 : STA !ram_tilemap_buffer+$2C,X - JSR cm_tilemap_transfer - RTS + JMP cm_tilemap_transfer .exit ; check if value is inbounds @@ -4427,23 +4272,8 @@ cm_hud_table: incbin ../resources/cm_gfx.bin HexMenuGFXTable: - dw $2C70, $2C71, $2C72, $2C73, $2C74, $2C75, $2C76, $2C77, $2C78, $2C79, $2C50, $2C51, $2C52, $2C53, $2C54, $2C55 - -TimerNumberGFX1: - dw #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870, #$2870 - dw #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871, #$2871 - dw #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872, #$2872 - dw #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873, #$2873 - dw #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874, #$2874 - dw #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875, #$2875 - -TimerNumberGFX2: - dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 - dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 - dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 - dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 - dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 - dw #$2870, #$2871, #$2872, #$2873, #$2874, #$2875, #$2876, #$2877, #$2878, #$2879 + dw #$2C70, #$2C71, #$2C72, #$2C73, #$2C74, #$2C75, #$2C76, #$2C77 + dw #$2C78, #$2C79, #$2C50, #$2C51, #$2C52, #$2C53, #$2C54, #$2C55 %endfree(89) From b7a1b7debc4411099cb4643bfac154bae743900d Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Fri, 14 Aug 2026 01:52:11 -0400 Subject: [PATCH 23/27] Read-Only Locks Allow custom presets and savestates to be marked as read-only --- resources/cm_gfx.bin | Bin 4096 -> 4096 bytes resources/cm_gfx2.bin | Bin 4096 -> 4096 bytes src/defines.asm | 7 +++- src/gamemode.asm | 12 +++++++ src/init.asm | 5 +++ src/mainmenu.asm | 18 ++++++++-- src/menu.asm | 76 +++++++++++++++++++++++++++++++++++++----- src/symbols.asm | 2 ++ 8 files changed, 107 insertions(+), 13 deletions(-) diff --git a/resources/cm_gfx.bin b/resources/cm_gfx.bin index 1a7a007be1d56229827d4808342da7e924be909e..fee016d27fd4f44c5cf3024589da03be6333ea21 100644 GIT binary patch delta 30 gcmZorXi(S?$jSTs|7{>_guuyxoW`3ca^|xE0R8|E)c^nh delta 20 bcmZorXi(S?$T>NgQ*Uwsr_kn!ocU}3Ml%Lj diff --git a/resources/cm_gfx2.bin b/resources/cm_gfx2.bin index 37b3698de38c7183fed28d070815793f0b2bccb0..9b7c79831732aa809700ecc8ce75a64eb4ef9837 100644 GIT binary patch delta 30 gcmZorXi(S?$jSTs|7{>_guuyxoW`3ca^|xE0R8|E)c^nh delta 20 bcmZorXi(S?$T>NgQ*Uwsr_kn!ocU}3Ml%Lj diff --git a/src/defines.asm b/src/defines.asm index ea784c60a..9c3e9d448 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -488,7 +488,7 @@ ; SRAM ; ----- -!SRAM_VERSION = #$0020 +!SRAM_VERSION = #$0021 !SRAM_START = $702000 !SRAM_SIZE = #$1000 @@ -636,11 +636,13 @@ ; ^ FREE SPACE ^ up to +$B8E (normal) / +$DFE (tinystates) +!sram_read_only_locks_tinystates = !SRAM_START+$B8A ; $6 bytes !sram_streamer_name_normal = !SRAM_START+$B90 ; $18 bytes !sram_custom_header_normal = !SRAM_START+$BA8 ; $18 bytes !sram_custom_preset_safewords_normal = !SRAM_START+$BC0 ; $50 bytes !sram_custom_preset_names_normal = !SRAM_START+$C10 ; $3C0 bytes +!sram_read_only_locks_normal = !SRAM_START+$DFA ; $6 bytes !sram_streamer_name_tinystates = !SRAM_START+$E00 ; $18 bytes !sram_custom_header_tinystates = !SRAM_START+$E18 ; $18 bytes !sram_custom_preset_safewords_tinystates = !SRAM_START+$E30 ; $20 bytes @@ -664,6 +666,7 @@ !MENU_BLANK = #$281F !MENU_SLASH = #$287F !MENU_ARROW_RIGHT = #$3880 +!MENU_LOCK = #$2895 !IH_BLANK = #$2C0F !IH_PERCENT = #$0C0A !IH_DECIMAL = #$0CCB @@ -1287,11 +1290,13 @@ endif ; this is moved here to prevent symbols.asm from having duplicate labels if !FEATURE_TINYSTATES +!sram_read_only_locks = !sram_read_only_locks_tinystates !sram_streamer_name = !sram_streamer_name_normal !sram_custom_header = !sram_custom_header_tinystates !sram_custom_preset_safewords = !sram_custom_preset_safewords_tinystates !sram_custom_preset_names = !sram_custom_preset_names_tinystates else +!sram_read_only_locks = !sram_read_only_locks_normal !sram_streamer_name = !sram_streamer_name_tinystates !sram_custom_header = !sram_custom_header_normal !sram_custom_preset_safewords = !sram_custom_preset_safewords_normal diff --git a/src/gamemode.asm b/src/gamemode.asm index 1bc67d889..b3ff350a0 100644 --- a/src/gamemode.asm +++ b/src/gamemode.asm @@ -87,12 +87,16 @@ gamemode_door_transtion_load_sprites: BMI .auto_save TDC : STA !ram_auto_save_state .auto_save + LDA !sram_read_only_locks+5 : AND #$00FF : BNE .failSFX PHP : PHB PHK : PLB JSL save_state PLB : PLP .done JML $82E4A9 ; return to hijacked code + .failSFX + %sfxfail() + BRA .done .check if !FEATURE_PAL JML $82E4A9 ; return to hijacked code @@ -250,6 +254,7 @@ if !FEATURE_TINYSTATES CMP #$001C : BPL .done .save endif + LDA !sram_read_only_locks+5 : AND #$00FF : BNE .failSFX PHP PHB JSL save_state @@ -261,6 +266,10 @@ endif .done RTL + + .failSFX + %sfxfail() + RTL } gamemode_load_state: @@ -328,6 +337,9 @@ gamemode_save_custom_preset: CMP #$0013 : BPL .not_safe .safe + LDA !sram_custom_preset_slot : AND #$003F + JSL $808192 ; change bit index to byte index + LDA !sram_read_only_locks,X : BIT $05E7 : BNE .not_safe JSL custom_preset_save %sfxconfirm() RTL diff --git a/src/init.asm b/src/init.asm index 23a40c323..dad8b30d5 100644 --- a/src/init.asm +++ b/src/init.asm @@ -167,6 +167,7 @@ init_sram_routine_table: dw init_sram_upgrade_1Dto1E dw init_sram_upgrade_1Eto1F dw init_sram_upgrade_1Fto20 + dw init_sram_upgrade_20to21 dw init_sram_fail init_sram: @@ -320,6 +321,10 @@ endif LDA !VANILLA_SPRITE_PALETTE_5_BLUE_COLOR : STA !sram_sprite_features_blue_color LDA !VANILLA_SPRITE_PALETTE_5_GRAPPLE_COLOR : STA !sram_sprite_features_grapple_color + .upgrade_20to21 + TDC : STA !sram_read_only_locks : STA !sram_read_only_locks+2 + STA !sram_read_only_locks+4 + LDA !SRAM_VERSION : STA !sram_initialized RTS diff --git a/src/mainmenu.asm b/src/mainmenu.asm index 984a68cbe..757989857 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -595,6 +595,9 @@ presets_save_custom_preset: CMP #$0013 : BPL .not_safe .safe + LDA !sram_custom_preset_slot : AND #$003F + JSL $808192 ; change bit index to byte index + LDA !sram_read_only_locks,X : BIT $05E7 : BNE .not_safe JSL custom_preset_save LDA #$0001 : STA !ram_cm_leave %sfxconfirm() @@ -1324,7 +1327,7 @@ endif endif dw #$0000 %cm_header("PRESS A TO SWAP PRESETS") - %cm_footer("PRESS X TO DELETE PRESET") + %cm_footer("X DELETES - Y TOGGLES LOCK") %cm_managepreset(00) %cm_managepreset(01) @@ -1383,7 +1386,7 @@ ManagePresetsMenu2: dw #managepreset_goto_page3 dw #$0000 %cm_header("PRESS A TO SWAP PRESETS") - %cm_footer("PRESS X TO DELETE PRESET") + %cm_footer("X DELETES - Y TOGGLES LOCK") %cm_managepreset(16) %cm_managepreset(17) @@ -1425,7 +1428,7 @@ ManagePresetsMenu3: dw #managepreset_goto_page2 dw #$0000 %cm_header("PRESS A TO SWAP PRESETS") - %cm_footer("PRESS X TO DELETE PRESET") + %cm_footer("X DELETES - Y TOGGLES LOCK") %cm_managepreset(32) %cm_managepreset(33) @@ -4520,6 +4523,7 @@ SavestateMenu: dw #save_freeze dw #save_middoorsave dw #save_alwayssave + dw #save_read_only dw #$FFFF dw #save_rando_enable dw #save_rando_energy @@ -4548,6 +4552,14 @@ save_middoorsave: save_alwayssave: %cm_toggle_bit("Auto-Save Every Door", !ram_auto_save_state, #$8000, #0) +save_read_only: + %cm_toggle("Read-Only Lock", !sram_read_only_locks+5, #$01, #.routine) + .routine + TAX : BEQ .done + TDC : STA !ram_auto_save_state + .done + RTL + if !FEATURE_DEV save_delete: %cm_jsl("DEV Delete Savestate", .routine, #$DEAD) diff --git a/src/menu.asm b/src/menu.asm index 2046927f9..8e6e5ddb4 100644 --- a/src/menu.asm +++ b/src/menu.asm @@ -1501,6 +1501,15 @@ draw_custom_preset: RTS .validPreset + ; check if read-only lock exists + LDA !DP_ToggleValue : AND #$003F + JSL $808192 ; change bit index to byte index + LDA !sram_read_only_locks,X : BIT $05E7 : BEQ .whatToDraw + ; draw lock + LDX !DP_JSLTarget + LDA !MENU_LOCK : STA !ram_tilemap_buffer-2,X + + .whatToDraw ; determine what to draw LDA !ram_cm_custom_preset_labels : BNE .drawSamusData @@ -3954,11 +3963,8 @@ endif execute_manage_presets: { LDA !IH_CONTROLLER_PRI : ORA !IH_CONTROLLER_SEC : BIT !IH_INPUT_LEFTRIGHT : BEQ .manageSlots -if !FEATURE_MAPSTATES - ; Mapstates only has one page -else -if !FEATURE_TINYSTATES - ; TinyStates only has one page +if !FEATURE_MAPSTATES || !FEATURE_TINYSTATES + ; TinyStates and Mapstates only have one page else ; flip to the next/prev page BIT !IH_INPUT_LEFT : BNE .decPage @@ -3978,17 +3984,20 @@ else .adjacentMenu JSL cm_previous_menu JSL action_submenu -endif endif RTS .manageSlots - ; are we deleting (X) or swapping? - LDA !IH_CONTROLLER_PRI_NEW : ORA !IH_CONTROLLER_SEC_NEW : BIT !CTRL_X : BEQ .swapMode + ; are we deleting (X)? + LDA !IH_CONTROLLER_PRI_NEW : ORA !IH_CONTROLLER_SEC_NEW : BIT !CTRL_X : BEQ .checkLock ; check if preset exists LDA [!DP_CurrentMenu] : AND #$00FF : STA !ram_cm_selected_slot %presetslotsize() LDA !PRESET_SLOTS,X : CMP !SAFEWORD : BNE .failSFX + ; check for read-only lock + LDA !ram_cm_selected_slot : AND #$003F + JSL $808192 ; change bit index to byte index + LDA !sram_read_only_locks,X : BIT $05E7 : BNE .failSFX ; open confirmation screen before deleting preset LDY.w #ManagePresetsConfirm ; set bank for manual submenu jump @@ -4000,6 +4009,19 @@ endif %sfxfail() RTS + .checkLock + ; check if toggling lock (Y) + BIT !CTRL_Y : BEQ .swapMode + LDA [!DP_CurrentMenu] : AND #$00FF : STA !ram_cm_selected_slot + %presetslotsize() + LDA !PRESET_SLOTS,X : CMP !SAFEWORD : BNE .failSFX + + ; toggle read-only lock + LDA !ram_cm_selected_slot : AND #$003F + JSL $808192 ; change bit index to byte index + LDA !sram_read_only_locks,X : EOR $05E7 : STA !sram_read_only_locks,X + RTS + .swapMode ; swap mode, check if a slot has already been selected LDA !ram_cm_manage_slots : BNE .swapSlots @@ -4016,7 +4038,8 @@ endif CLC : ADC.w #!PRESET_SLOTS : STA !DP_Address ; get preset slot # - LDA [!DP_CurrentMenu] : AND #$00FF : %presetslotsize() + LDA [!DP_CurrentMenu] : AND #$00FF : STA !DP_Palette + %presetslotsize() ; put source address for slot 2 in !DP_JSLTarget CLC : ADC.w #!PRESET_SLOTS : STA !DP_JSLTarget @@ -4068,6 +4091,41 @@ endif LDA !sram_custom_preset_safewords,X : TYX : STA !sram_custom_preset_safewords,X LDX !DP_Temp : LDA !DP_Address : STA !sram_custom_preset_safewords,X + ; swap read-only locks + ; get slot 1 data + LDA !ram_cm_selected_slot : AND #$003F + JSL $808192 ; change bit index to byte index + STX !DP_JSLTarget + LDA $05E7 : STA !DP_Temp + LDA !sram_read_only_locks,X : AND !DP_Temp : STA !DP_CtrlInput + + ; get slot 2 data + LDA !DP_Palette : AND #$003F + JSL $808192 ; change bit index to byte index + STX !DP_JSLTarget+2 + LDA !sram_read_only_locks,X : AND $05E7 : STA !DP_CtrlInput+2 + + ; check if locks need swapping + LDA !DP_CtrlInput+2 : ORA !DP_CtrlInput : BEQ .finalizeSwap + + ; check which slot is locked + ; if both locked, no swap needed + LDA !DP_CtrlInput : BEQ .slot2 + LDA !DP_CtrlInput+2 : BNE .finalizeSwap + + ; slot 1 was locked + LDX !DP_JSLTarget + LDA !sram_read_only_locks,X : EOR !DP_CtrlInput : STA !sram_read_only_locks,X + LDX !DP_JSLTarget+2 + LDA !sram_read_only_locks,X : ORA $05E7 : STA !sram_read_only_locks,X + BRA .finalizeSwap + + .slot2 + LDA !sram_read_only_locks,X : EOR !DP_CtrlInput+2 : STA !sram_read_only_locks,X + LDX !DP_JSLTarget + LDA !sram_read_only_locks,X : ORA !DP_Temp : STA !sram_read_only_locks,X + + .finalizeSwap TDC : STA !ram_cm_manage_slots LDA !sram_last_preset_low_word : BMI .done TDC : STA !sram_last_preset_low_word : STA !sram_last_preset_high_word diff --git a/src/symbols.asm b/src/symbols.asm index 6868a4141..660e8f73f 100644 --- a/src/symbols.asm +++ b/src/symbols.asm @@ -599,11 +599,13 @@ sram_ctrl_2_shortcut_inputs = !sram_ctrl_2_shortcut_inputs ; !SRAM_START+$1A0 ; ; ^ FREE SPACE ^ up to +$B8E (normal) / +$DFE (tinystates) +sram_read_only_locks_tinystates = !sram_read_only_locks_tinystates ; !SRAM_START+$B8A ; $6 bytes sram_streamer_name_normal = !sram_streamer_name_normal ; !SRAM_START+$B90 ; $18 bytes sram_custom_header_normal = !sram_custom_header_normal ; !SRAM_START+$BA8 ; $18 bytes sram_custom_preset_safewords_normal = !sram_custom_preset_safewords_normal ; !SRAM_START+$BC0 ; $50 bytes sram_custom_preset_names_normal = !sram_custom_preset_names_normal ; !SRAM_START+$C10 ; $3C0 bytes +sram_read_only_locks_normal = !sram_read_only_locks_normal ; !SRAM_START+$DFA ; $6 bytes sram_streamer_name_tinystates = !sram_streamer_name_tinystates ; !SRAM_START+$E00 ; $18 bytes sram_custom_header_tinystates = !sram_custom_header_tinystates ; !SRAM_START+$E18 ; $18 bytes sram_custom_preset_safewords_tinystates = !sram_custom_preset_safewords_tinystates ; !SRAM_START+$E30 ; $20 bytes From 43b41a1b1a73364abbc767640843f3854197c2e9 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Sat, 15 Aug 2026 19:03:10 -0400 Subject: [PATCH 24/27] Lock optimizations Remove a few unnecessary instructions Use elseif with map/tiny state conditionals --- src/custompresets.asm | 4 +--- src/defines.asm | 9 ++++++--- src/macros.asm | 4 +--- src/mainmenu.asm | 4 +--- src/menu.asm | 20 ++++++++------------ 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/custompresets.asm b/src/custompresets.asm index a957220b5..eaebd3821 100644 --- a/src/custompresets.asm +++ b/src/custompresets.asm @@ -949,14 +949,12 @@ preset_scroll_fixes: if !FEATURE_MAPSTATES ASL : ASL : ASL : XBA : CLC ; multiply by 800h (slot offset) ADC #(!PRESET_SLOTS+$BD) : TAX ; X = Source -else -if !FEATURE_TINYSTATES +elseif !FEATURE_TINYSTATES XBA : CLC ; multiply by 100h (slot offset) ADC #(!PRESET_SLOTS+$BD) : TAX ; X = Source else ASL : XBA : CLC ; multiply by 200h (slot offset) ADC #(!PRESET_SLOTS+$1E9) : TAX ; X = Source -endif endif LDY #$CD51 : LDA #$0031 ; Y = Destination, A = Size-1 MVP $707E ; srcBank, destBank diff --git a/src/defines.asm b/src/defines.asm index 9c3e9d448..79d09a482 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -1222,10 +1222,13 @@ if !FEATURE_MAPSTATES if !FEATURE_TINYSTATES +; mapstates with tinystates !TOTAL_PRESET_SLOTS = #$0001 else +; mapstates without tinystates !TOTAL_PRESET_SLOTS = #$0009 endif +; mapstates !PRESET_SLOT_SIZE = #$0800 !PRESET_SLOTS_ROOM = !PRESET_SLOTS+$6 !PRESET_SLOTS_ENERGY = !PRESET_SLOTS+$28 @@ -1234,8 +1237,8 @@ endif !PRESET_SLOTS_SUPERS = !PRESET_SLOTS+$30 !PRESET_SLOTS_PBS = !PRESET_SLOTS+$34 !PRESET_SLOTS_RESERVES = !PRESET_SLOTS+$3C -else -if !FEATURE_TINYSTATES +elseif !FEATURE_TINYSTATES +; tinystates !TOTAL_PRESET_SLOTS = #$000F !PRESET_SLOT_SIZE = #$0100 !PRESET_SLOTS_ROOM = !PRESET_SLOTS+$6 @@ -1246,6 +1249,7 @@ if !FEATURE_TINYSTATES !PRESET_SLOTS_PBS = !PRESET_SLOTS+$34 !PRESET_SLOTS_RESERVES = !PRESET_SLOTS+$3C else +; not mapstates or tinystates !TOTAL_PRESET_SLOTS = #$0027 !PRESET_SLOT_SIZE = #$0200 !PRESET_SLOTS_ROOM = !PRESET_SLOTS+$A @@ -1256,7 +1260,6 @@ else !PRESET_SLOTS_PBS = !PRESET_SLOTS+$38 !PRESET_SLOTS_RESERVES = !PRESET_SLOTS+$40 endif -endif ; ---------- diff --git a/src/macros.asm b/src/macros.asm index 5c661c080..0e48e1bf3 100644 --- a/src/macros.asm +++ b/src/macros.asm @@ -31,13 +31,11 @@ macro presetslotsize() if !FEATURE_MAPSTATES ASL : ASL : ASL ; multiply by $800 XBA : TAX -else -if !FEATURE_TINYSTATES +elseif !FEATURE_TINYSTATES XBA : TAX ; multiply by $100 else ASL : XBA : TAX ; multiply by $200 endif -endif endmacro macro setmenubank() diff --git a/src/mainmenu.asm b/src/mainmenu.asm index 757989857..b2046c3f4 100644 --- a/src/mainmenu.asm +++ b/src/mainmenu.asm @@ -568,8 +568,7 @@ presets_custom_preset_slot: if !FEATURE_MAPSTATES ; Mapstates only has slots 00-01 or 00-09 LDY.w #CustomPresetsMenu -else -if !FEATURE_TINYSTATES +elseif !FEATURE_TINYSTATES ; Tinystates only has slots 00-15 LDY.w #CustomPresetsMenu else @@ -581,7 +580,6 @@ else .page3 LDY.w #CustomPresetsMenu3 .done -endif endif %setmenubank() JML action_submenu diff --git a/src/menu.asm b/src/menu.asm index 8e6e5ddb4..f6b66475b 100644 --- a/src/menu.asm +++ b/src/menu.asm @@ -1502,7 +1502,7 @@ draw_custom_preset: .validPreset ; check if read-only lock exists - LDA !DP_ToggleValue : AND #$003F + LDA !DP_ToggleValue JSL $808192 ; change bit index to byte index LDA !sram_read_only_locks,X : BIT $05E7 : BEQ .whatToDraw ; draw lock @@ -3930,11 +3930,8 @@ execute_custom_preset: RTS .flipPage -if !FEATURE_MAPSTATES - ; Mapstates only has one page -else -if !FEATURE_TINYSTATES - ; TinyStates only has one page +if !FEATURE_TINYSTATES || !FEATURE_MAPSTATES + ; Tinystates and Mapstates only have one page else ; flip to the next/prev page BIT !IH_INPUT_LEFT : BNE .decPage @@ -3955,7 +3952,6 @@ else .done JSL cm_go_back_adjacent_submenu JSL action_submenu -endif endif RTS } @@ -3995,7 +3991,7 @@ endif %presetslotsize() LDA !PRESET_SLOTS,X : CMP !SAFEWORD : BNE .failSFX ; check for read-only lock - LDA !ram_cm_selected_slot : AND #$003F + LDA !ram_cm_selected_slot JSL $808192 ; change bit index to byte index LDA !sram_read_only_locks,X : BIT $05E7 : BNE .failSFX ; open confirmation screen before deleting preset @@ -4017,7 +4013,7 @@ endif LDA !PRESET_SLOTS,X : CMP !SAFEWORD : BNE .failSFX ; toggle read-only lock - LDA !ram_cm_selected_slot : AND #$003F + LDA !ram_cm_selected_slot JSL $808192 ; change bit index to byte index LDA !sram_read_only_locks,X : EOR $05E7 : STA !sram_read_only_locks,X RTS @@ -4093,20 +4089,20 @@ endif ; swap read-only locks ; get slot 1 data - LDA !ram_cm_selected_slot : AND #$003F + LDA !ram_cm_selected_slot JSL $808192 ; change bit index to byte index STX !DP_JSLTarget LDA $05E7 : STA !DP_Temp LDA !sram_read_only_locks,X : AND !DP_Temp : STA !DP_CtrlInput ; get slot 2 data - LDA !DP_Palette : AND #$003F + LDA !DP_Palette JSL $808192 ; change bit index to byte index STX !DP_JSLTarget+2 LDA !sram_read_only_locks,X : AND $05E7 : STA !DP_CtrlInput+2 ; check if locks need swapping - LDA !DP_CtrlInput+2 : ORA !DP_CtrlInput : BEQ .finalizeSwap + ORA !DP_CtrlInput : BEQ .finalizeSwap ; check which slot is locked ; if both locked, no swap needed From 6460c55f990259a0463d9fba650b64c238e26657 Mon Sep 17 00:00:00 2001 From: idle Date: Wed, 19 Aug 2026 00:56:09 -0500 Subject: [PATCH 25/27] Cleanup preset data and fix Kraid Kihunters presets --- src/presets/100map_data.asm | 3 --- src/presets/14ice_data.asm | 2 -- src/presets/14speed_data.asm | 2 -- src/presets/combined_preset_data.asm | 6 +++--- src/presets/kpdr20_data.asm | 17 +++-------------- src/presets/kpdr21_data.asm | 17 +++-------------- src/presets/kpdr22_data.asm | 17 ++--------------- src/presets/kpdr23_data.asm | 15 ++------------- src/presets/kpdr25_data.asm | 21 ++------------------- src/presets/nodropskpdr_data.asm | 3 --- src/presets/pkrd_data.asm | 6 ------ src/presets/spazermap_data.asm | 3 --- 12 files changed, 15 insertions(+), 97 deletions(-) diff --git a/src/presets/100map_data.asm b/src/presets/100map_data.asm index eb46f2250..29bb68be3 100644 --- a/src/presets/100map_data.asm +++ b/src/presets/100map_data.asm @@ -4497,7 +4497,6 @@ preset_100map_greenpink_brin_cleanup_green_hill_zone_final: dw $09C2, $006B ; Health dw $09C6, $0008 ; Missiles dw $09CA, $000B ; Supers - dw $09CE, $0003 ; Pbs dw $0A1C, $0001 ; Samus position/state dw $0A1E, $0008 ; More position/state dw $0AF6, $035E ; Samus X @@ -4538,7 +4537,6 @@ preset_100map_blue_brinstar_cleanup_blue_brinstar_etank_room: dw $0919, $0000 ; Layer 2 Y position dw $09C2, $0069 ; Health dw $09C6, $0003 ; Missiles - dw $09CE, $0003 ; Pbs dw $09D2, $0000 ; Currently selected item dw $0AF6, $00D8 ; Samus X dw $CAE8, $0460 ; Map counter @@ -4970,7 +4968,6 @@ preset_100map_tourian_baby_skip: dw $0911, $0100 ; Screen X position in pixels dw $0913, $1000 ; Screen subpixel Y position dw $0917, $00C0 ; Layer 2 X position - dw $09C2, $031F ; Health dw $09CA, $000D ; Supers dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state diff --git a/src/presets/14ice_data.asm b/src/presets/14ice_data.asm index 4bcdec31e..d7f7ee807 100644 --- a/src/presets/14ice_data.asm +++ b/src/presets/14ice_data.asm @@ -374,9 +374,7 @@ preset_14ice_brinstar_big_pink: dw $090F, $7000 ; Screen subpixel X position dw $0911, $0600 ; Screen X position in pixels dw $0913, $9400 ; Screen subpixel Y position - dw $0915, $0000 ; Screen Y position in pixels dw $0917, $0480 ; Layer 2 X position - dw $0919, $0000 ; Layer 2 Y position dw $09C6, $0000 ; Missiles dw $09CA, $0004 ; Supers dw $09CC, $0005 ; Max supers diff --git a/src/presets/14speed_data.asm b/src/presets/14speed_data.asm index 30f0e1531..3aa9ae6b7 100644 --- a/src/presets/14speed_data.asm +++ b/src/presets/14speed_data.asm @@ -374,9 +374,7 @@ preset_14speed_brinstar_big_pink: dw $090F, $7000 ; Screen subpixel X position dw $0911, $0600 ; Screen X position in pixels dw $0913, $9400 ; Screen subpixel Y position - dw $0915, $0000 ; Screen Y position in pixels dw $0917, $0480 ; Layer 2 X position - dw $0919, $0000 ; Layer 2 Y position dw $09C6, $0000 ; Missiles dw $09CA, $0004 ; Supers dw $09CC, $0005 ; Max supers diff --git a/src/presets/combined_preset_data.asm b/src/presets/combined_preset_data.asm index 98760bbcc..04720250a 100644 --- a/src/presets/combined_preset_data.asm +++ b/src/presets/combined_preset_data.asm @@ -4704,7 +4704,7 @@ preset_kpdr22_kraid_kraid_kihunters: dw $079B, $A471 ; MDB dw $0913, $8000 ; Screen subpixel Y position dw $0919, $0100 ; Layer 2 Y position - dw $09D2, $0002 ; Currently selected item + dw $09CA, $0002 ; Supers dw $0AF6, $0167 ; Samus X dw $0AF8, $B000 ; Samus subpixel X dw #$FFFF @@ -5450,7 +5450,7 @@ preset_kpdr25_kraid_kraid_kihunters: dw $09A6, $1004 ; Equipped Beams dw $09A8, $1004 ; Collected Beams dw $09C6, $0007 ; Missiles - dw $09CA, $0004 ; Supers + dw $09CA, $0003 ; Supers dw $D874, $0404 ; Items dw $D8B6, $8008 ; Doors dw #$FFFF @@ -6284,7 +6284,7 @@ preset_kpdr25_kraid_minikraid: dw $09A6, $1004 ; Equipped Beams dw $09A8, $1004 ; Collected Beams dw $09C6, $0007 ; Missiles - dw $09CA, $0004 ; Supers + dw $09CA, $0003 ; Supers dw $D874, $0404 ; Items dw $D8B6, $8008 ; Doors dw #$FFFF diff --git a/src/presets/kpdr20_data.asm b/src/presets/kpdr20_data.asm index 11c2f33fa..5c3784f2f 100644 --- a/src/presets/kpdr20_data.asm +++ b/src/presets/kpdr20_data.asm @@ -491,10 +491,8 @@ preset_kpdr20_brinstar_passing_through_maridia: dw $078D, $9132 ; DDB dw $079B, $A408 ; MDB dw $090F, $8000 ; Screen subpixel X position - dw $0911, $0100 ; Screen X position in pixels dw $0913, $CC00 ; Screen subpixel Y position dw $0915, $0100 ; Screen Y position in pixels - dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C0 ; Layer 2 Y position dw $09C6, $0006 ; Missiles dw $09CA, $0005 ; Supers @@ -512,7 +510,6 @@ preset_kpdr20_kraid_entering_kraids_lair: dw $0919, $0100 ; Layer 2 Y position dw $09D2, $0002 ; Currently selected item dw $0AF6, $002E ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr20_kraid_warehouse_zeelas: @@ -534,13 +531,14 @@ preset_kpdr20_kraid_warehouse_zeelas: dw #$FFFF preset_kpdr20_kraid_kraid_kihunters: - dw #preset_kpdr20_kraid_entering_kraids_lair ; Kraid: Entering Kraid's Lair + dw #preset_kpdr20_kraid_warehouse_zeelas ; Kraid: Warehouse Zeelas dw $078D, $923A ; DDB dw $079B, $A471 ; MDB dw $07F5, $0005 ; Music Track dw $090F, $8000 ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels dw $0913, $8000 ; Screen subpixel Y position + dw $0915, $0100 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $0100 ; Layer 2 Y position dw $0AF6, $0167 ; Samus X @@ -642,14 +640,10 @@ preset_kpdr20_kraid_minikraid_revisit: dw $079B, $A56B ; MDB dw $090F, $3000 ; Screen subpixel X position dw $0913, $7800 ; Screen subpixel Y position - dw $0915, $0100 ; Screen Y position in pixels dw $0919, $0100 ; Layer 2 Y position dw $09C2, $007C ; Health dw $09D2, $0002 ; Currently selected item - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0058 ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr20_kraid_kraid_kihunters_revisit: @@ -691,13 +685,11 @@ preset_kpdr20_kraid_business_center_preelev: dw $090F, $3000 ; Screen subpixel X position dw $0911, $0006 ; Screen X position in pixels dw $0913, $0000 ; Screen subpixel Y position - dw $0917, $0006 ; Layer 2 X position dw $0915, $0000 ; Screen Y position in pixels + dw $0917, $0006 ; Layer 2 X position dw $0919, $0000 ; Layer 2 Y position dw $09C6, $0006 ; Missiles dw $09CA, $0004 ; Supers - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0078 ; Samus X dw $0AFA, $008B ; Samus Y dw #$FFFF @@ -866,7 +858,6 @@ preset_kpdr20_upper_norfair_bat_cave_revisit: dw $0919, $0014 ; Layer 2 Y position dw $09A2, $3105 ; Equipped Items dw $09A4, $3105 ; Collected Items - dw $09CA, $0001 ; Supers dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state dw $0AF6, $002D ; Samus X @@ -881,7 +872,6 @@ preset_kpdr20_upper_norfair_single_chamber: dw $079B, $ACB3 ; MDB dw $090F, $BFFF ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0104 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C3 ; Layer 2 Y position @@ -1769,7 +1759,6 @@ preset_kpdr20_upper_norfair_revisit_ice_beam_gates: dw $078D, $9246 ; DDB dw $079B, $A7DE ; MDB dw $07F3, $0015 ; Music Bank - dw $090F, $8000 ; Screen subpixel X position dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0238 ; Screen Y position in pixels dw $0919, $01AA ; Layer 2 Y position diff --git a/src/presets/kpdr21_data.asm b/src/presets/kpdr21_data.asm index 161045fb8..0cbe36e0c 100644 --- a/src/presets/kpdr21_data.asm +++ b/src/presets/kpdr21_data.asm @@ -491,10 +491,8 @@ preset_kpdr21_brinstar_passing_through_maridia: dw $078D, $9132 ; DDB dw $079B, $A408 ; MDB dw $090F, $8000 ; Screen subpixel X position - dw $0911, $0100 ; Screen X position in pixels dw $0913, $CC00 ; Screen subpixel Y position dw $0915, $0100 ; Screen Y position in pixels - dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C0 ; Layer 2 Y position dw $09C6, $0006 ; Missiles dw $09CA, $0005 ; Supers @@ -512,7 +510,6 @@ preset_kpdr21_kraid_entering_kraids_lair: dw $0919, $0100 ; Layer 2 Y position dw $09D2, $0002 ; Currently selected item dw $0AF6, $002E ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr21_kraid_warehouse_zeelas: @@ -534,13 +531,14 @@ preset_kpdr21_kraid_warehouse_zeelas: dw #$FFFF preset_kpdr21_kraid_kraid_kihunters: - dw #preset_kpdr21_kraid_entering_kraids_lair ; Kraid: Entering Kraid's Lair + dw #preset_kpdr21_kraid_warehouse_zeelas ; Kraid: Warehouse Zeelas dw $078D, $923A ; DDB dw $079B, $A471 ; MDB dw $07F5, $0005 ; Music Track dw $090F, $8000 ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels dw $0913, $8000 ; Screen subpixel Y position + dw $0915, $0100 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $0100 ; Layer 2 Y position dw $0AF6, $0167 ; Samus X @@ -642,14 +640,10 @@ preset_kpdr21_kraid_minikraid_revisit: dw $079B, $A56B ; MDB dw $090F, $3000 ; Screen subpixel X position dw $0913, $7800 ; Screen subpixel Y position - dw $0915, $0100 ; Screen Y position in pixels dw $0919, $0100 ; Layer 2 Y position dw $09C2, $007C ; Health dw $09D2, $0002 ; Currently selected item - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0058 ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr21_kraid_kraid_kihunters_revisit: @@ -691,13 +685,11 @@ preset_kpdr21_kraid_business_center_preelev: dw $090F, $3000 ; Screen subpixel X position dw $0911, $0006 ; Screen X position in pixels dw $0913, $0000 ; Screen subpixel Y position - dw $0917, $0006 ; Layer 2 X position dw $0915, $0000 ; Screen Y position in pixels + dw $0917, $0006 ; Layer 2 X position dw $0919, $0000 ; Layer 2 Y position dw $09C6, $0006 ; Missiles dw $09CA, $0004 ; Supers - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0078 ; Samus X dw $0AFA, $008B ; Samus Y dw #$FFFF @@ -866,7 +858,6 @@ preset_kpdr21_upper_norfair_bat_cave_revisit: dw $0919, $0014 ; Layer 2 Y position dw $09A2, $3105 ; Equipped Items dw $09A4, $3105 ; Collected Items - dw $09CA, $0001 ; Supers dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state dw $0AF6, $002D ; Samus X @@ -881,7 +872,6 @@ preset_kpdr21_upper_norfair_single_chamber: dw $079B, $ACB3 ; MDB dw $090F, $BFFF ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0104 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C3 ; Layer 2 Y position @@ -1771,7 +1761,6 @@ preset_kpdr21_upper_norfair_revisit_ice_beam_gates: dw $078D, $9246 ; DDB dw $079B, $A7DE ; MDB dw $07F3, $0015 ; Music Bank - dw $090F, $8000 ; Screen subpixel X position dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0238 ; Screen Y position in pixels dw $0919, $01AA ; Layer 2 Y position diff --git a/src/presets/kpdr22_data.asm b/src/presets/kpdr22_data.asm index d2f5b2838..c662eed45 100644 --- a/src/presets/kpdr22_data.asm +++ b/src/presets/kpdr22_data.asm @@ -491,10 +491,8 @@ preset_kpdr22_brinstar_passing_through_maridia: dw $078D, $9132 ; DDB dw $079B, $A408 ; MDB dw $090F, $8000 ; Screen subpixel X position - dw $0911, $0100 ; Screen X position in pixels dw $0913, $CC00 ; Screen subpixel Y position dw $0915, $0100 ; Screen Y position in pixels - dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C0 ; Layer 2 Y position dw $09C6, $0006 ; Missiles dw $09CA, $0005 ; Supers @@ -512,7 +510,6 @@ preset_kpdr22_kraid_entering_kraids_lair: dw $0919, $0100 ; Layer 2 Y position dw $09D2, $0002 ; Currently selected item dw $0AF6, $002E ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr22_kraid_warehouse_zeelas: @@ -534,13 +531,14 @@ preset_kpdr22_kraid_warehouse_zeelas: dw #$FFFF preset_kpdr22_kraid_kraid_kihunters: - dw #preset_kpdr22_kraid_entering_kraids_lair ; Kraid: Entering Kraid's Lair + dw #preset_kpdr22_kraid_warehouse_zeelas ; Kraid: Warehouse Zeelas dw $078D, $923A ; DDB dw $079B, $A471 ; MDB dw $07F5, $0005 ; Music Track dw $090F, $8000 ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels dw $0913, $8000 ; Screen subpixel Y position + dw $0915, $0100 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $0100 ; Layer 2 Y position dw $0AF6, $0167 ; Samus X @@ -642,14 +640,10 @@ preset_kpdr22_kraid_minikraid_revisit: dw $079B, $A56B ; MDB dw $090F, $3000 ; Screen subpixel X position dw $0913, $7800 ; Screen subpixel Y position - dw $0915, $0100 ; Screen Y position in pixels dw $0919, $0100 ; Layer 2 Y position dw $09C2, $007C ; Health dw $09D2, $0002 ; Currently selected item - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0058 ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr22_kraid_kraid_kihunters_revisit: @@ -711,8 +705,6 @@ preset_kpdr22_kraid_business_center_preelev: dw $0911, $0006 ; Screen X position in pixels dw $0913, $0000 ; Screen subpixel Y position dw $0917, $0006 ; Layer 2 X position - dw $0915, $0000 ; Screen Y position in pixels - dw $0919, $0000 ; Layer 2 Y position dw $09C6, $0006 ; Missiles dw $09CA, $0004 ; Supers dw $0A1C, $0002 ; Samus position/state @@ -885,7 +877,6 @@ preset_kpdr22_upper_norfair_hjb_missile_bat_cave_revisit: dw $0919, $0014 ; Layer 2 Y position dw $09A2, $3105 ; Equipped Items dw $09A4, $3105 ; Collected Items - dw $09CA, $0001 ; Supers dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state dw $0AF6, $002D ; Samus X @@ -900,7 +891,6 @@ preset_kpdr22_upper_norfair_hjb_missile_single_chamber: dw $079B, $ACB3 ; MDB dw $090F, $BFFF ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0104 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C3 ; Layer 2 Y position @@ -1155,7 +1145,6 @@ preset_kpdr22_upper_norfair_moat_missile_bat_cave_revisit: dw $0919, $0014 ; Layer 2 Y position dw $09A2, $3105 ; Equipped Items dw $09A4, $3105 ; Collected Items - dw $09CA, $0001 ; Supers dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state dw $0AF6, $002D ; Samus X @@ -1170,7 +1159,6 @@ preset_kpdr22_upper_norfair_moat_missile_single_chamber: dw $079B, $ACB3 ; MDB dw $090F, $BFFF ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0104 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C3 ; Layer 2 Y position @@ -2240,7 +2228,6 @@ preset_kpdr22_upper_norfair_revisit_ice_beam_gates: dw $078D, $9246 ; DDB dw $079B, $A7DE ; MDB dw $07F3, $0015 ; Music Bank - dw $090F, $8000 ; Screen subpixel X position dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0238 ; Screen Y position in pixels dw $0919, $01AA ; Layer 2 Y position diff --git a/src/presets/kpdr23_data.asm b/src/presets/kpdr23_data.asm index 99d5436e9..39fb49d58 100644 --- a/src/presets/kpdr23_data.asm +++ b/src/presets/kpdr23_data.asm @@ -491,14 +491,11 @@ preset_kpdr23_brinstar_spazer: dw $078D, $9102 ; DDB dw $079B, $A408 ; MDB dw $090F, $2000 ; Screen subpixel X position - dw $0911, $0100 ; Screen X position in pixels dw $0913, $5000 ; Screen subpixel Y position dw $0915, $001D ; Screen Y position in pixels - dw $0917, $00C0 ; Layer 2 X position dw $0919, $0015 ; Layer 2 Y position dw $09CA, $0003 ; Supers dw $0AF6, $01B3 ; Samus X - dw $0AFA, $008B ; Samus Y dw $D8B6, $8008 ; Doors dw #$FFFF @@ -550,7 +547,6 @@ preset_kpdr23_kraid_entering_kraids_lair: dw $0919, $0100 ; Layer 2 Y position dw $09D2, $0002 ; Currently selected item dw $0AF6, $002E ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr23_kraid_warehouse_zeelas: @@ -572,13 +568,14 @@ preset_kpdr23_kraid_warehouse_zeelas: dw #$FFFF preset_kpdr23_kraid_kraid_kihunters: - dw #preset_kpdr23_kraid_entering_kraids_lair ; Kraid: Entering Kraid's Lair + dw #preset_kpdr23_kraid_warehouse_zeelas ; Kraid: Warehouse Zeelas dw $078D, $923A ; DDB dw $079B, $A471 ; MDB dw $07F5, $0005 ; Music Track dw $090F, $8000 ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels dw $0913, $8000 ; Screen subpixel Y position + dw $0915, $0100 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $0100 ; Layer 2 Y position dw $0AF6, $0167 ; Samus X @@ -680,14 +677,10 @@ preset_kpdr23_kraid_minikraid_revisit: dw $079B, $A56B ; MDB dw $090F, $3000 ; Screen subpixel X position dw $0913, $7800 ; Screen subpixel Y position - dw $0915, $0100 ; Screen Y position in pixels dw $0919, $0100 ; Layer 2 Y position dw $09C2, $007C ; Health dw $09D2, $0002 ; Currently selected item - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0058 ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr23_kraid_kraid_kihunters_revisit: @@ -749,8 +742,6 @@ preset_kpdr23_kraid_business_center_preelev: dw $0911, $0006 ; Screen X position in pixels dw $0913, $0000 ; Screen subpixel Y position dw $0917, $0006 ; Layer 2 X position - dw $0915, $0000 ; Screen Y position in pixels - dw $0919, $0000 ; Layer 2 Y position dw $09C6, $000A ; Missiles dw $09CA, $0004 ; Supers dw $0A1C, $0002 ; Samus position/state @@ -937,7 +928,6 @@ preset_kpdr23_upper_norfair_single_chamber: dw $079B, $ACB3 ; MDB dw $090F, $BFFF ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0104 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $00C3 ; Layer 2 Y position @@ -1828,7 +1818,6 @@ preset_kpdr23_upper_norfair_revisit_ice_beam_gates: dw $078D, $9246 ; DDB dw $079B, $A7DE ; MDB dw $07F3, $0015 ; Music Bank - dw $090F, $8000 ; Screen subpixel X position dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0238 ; Screen Y position in pixels dw $0919, $01AA ; Layer 2 Y position diff --git a/src/presets/kpdr25_data.asm b/src/presets/kpdr25_data.asm index 523ff7a58..9e8fa7ba2 100644 --- a/src/presets/kpdr25_data.asm +++ b/src/presets/kpdr25_data.asm @@ -491,14 +491,11 @@ preset_kpdr25_brinstar_spazer: dw $078D, $9102 ; DDB dw $079B, $A408 ; MDB dw $090F, $2000 ; Screen subpixel X position - dw $0911, $0100 ; Screen X position in pixels dw $0913, $5000 ; Screen subpixel Y position dw $0915, $001D ; Screen Y position in pixels - dw $0917, $00C0 ; Layer 2 X position dw $0919, $0015 ; Layer 2 Y position dw $09CA, $0003 ; Supers dw $0AF6, $01B3 ; Samus X - dw $0AFA, $008B ; Samus Y dw $D8B6, $8008 ; Doors dw #$FFFF @@ -550,7 +547,6 @@ preset_kpdr25_kraid_entering_kraids_lair: dw $0919, $0100 ; Layer 2 Y position dw $09D2, $0002 ; Currently selected item dw $0AF6, $002E ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr25_kraid_warehouse_zeelas: @@ -572,13 +568,14 @@ preset_kpdr25_kraid_warehouse_zeelas: dw #$FFFF preset_kpdr25_kraid_kraid_kihunters: - dw #preset_kpdr25_kraid_entering_kraids_lair ; Kraid: Entering Kraid's Lair + dw #preset_kpdr25_kraid_warehouse_zeelas ; Kraid: Warehouse Zeelas dw $078D, $923A ; DDB dw $079B, $A471 ; MDB dw $07F5, $0005 ; Music Track dw $090F, $8000 ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels dw $0913, $8000 ; Screen subpixel Y position + dw $0915, $0100 ; Screen Y position in pixels dw $0917, $00C0 ; Layer 2 X position dw $0919, $0100 ; Layer 2 Y position dw $0AF6, $0167 ; Samus X @@ -680,14 +677,10 @@ preset_kpdr25_kraid_minikraid_revisit: dw $079B, $A56B ; MDB dw $090F, $3000 ; Screen subpixel X position dw $0913, $7800 ; Screen subpixel Y position - dw $0915, $0100 ; Screen Y position in pixels dw $0919, $0100 ; Layer 2 Y position dw $09C2, $007C ; Health dw $09D2, $0002 ; Currently selected item - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0058 ; Samus X - dw $0AFA, $018B ; Samus Y dw #$FFFF preset_kpdr25_kraid_kraid_kihunters_revisit: @@ -749,8 +742,6 @@ preset_kpdr25_kraid_business_center_preelev: dw $0911, $0006 ; Screen X position in pixels dw $0913, $0000 ; Screen subpixel Y position dw $0917, $0006 ; Layer 2 X position - dw $0915, $0000 ; Screen Y position in pixels - dw $0919, $0000 ; Layer 2 Y position dw $09C6, $0009 ; Missiles dw $09CA, $0004 ; Supers dw $0A1C, $0002 ; Samus position/state @@ -1843,7 +1834,6 @@ preset_kpdr25_maridia_lower_maridia_gate: dw $0915, $0100 ; Screen Y position in pixels dw $0919, $0100 ; Layer 2 Y position dw $09C2, $01F3 ; Health - dw $09CE, $0005 ; Pbs dw $0AF6, $002E ; Samus X dw #$FFFF @@ -1867,7 +1857,6 @@ preset_kpdr25_lower_norfair_magdollite_tunnel: dw $078D, $9576 ; DDB dw $079B, $AEDF ; MDB dw $090F, $B001 ; Screen subpixel X position - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $01F4 ; Screen Y position in pixels dw $0919, $0177 ; Layer 2 Y position dw $0AF6, $0059 ; Samus X @@ -1881,15 +1870,12 @@ preset_kpdr25_lower_norfair_ln_main_hall: dw $07F3, $0018 ; Music Bank dw $090F, $E000 ; Screen subpixel X position dw $0911, $0400 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0200 ; Screen Y position in pixels dw $0917, $0300 ; Layer 2 X position dw $0919, $0301 ; Layer 2 Y position dw $09C2, $01F0 ; Health dw $09C6, $0008 ; Missiles dw $09CE, $0004 ; Pbs - dw $0A1C, $009B ; Samus position/state - dw $0A1E, $0000 ; More position/state dw $0AF6, $0480 ; Samus X dw $0AFA, $0288 ; Samus Y dw $D8BA, $01F1 ; Doors @@ -2022,7 +2008,6 @@ preset_kpdr25_lower_norfair_ridley: dw $079B, $B37A ; MDB dw $090F, $2000 ; Screen subpixel X position dw $0913, $5000 ; Screen subpixel Y position - dw $09C2, $01A5 ; Health dw $09CA, $0006 ; Supers dw $0AF6, $003D ; Samus X dw $0AFA, $009B ; Samus Y @@ -2301,8 +2286,6 @@ preset_kpdr25_backtracking_green_pirate_shaft_revisit: dw $0915, $0200 ; Screen Y position in pixels dw $0917, $0000 ; Layer 2 X position dw $0919, $0180 ; Layer 2 Y position - dw $0A1C, $0002 ; Samus position/state - dw $0A1E, $0004 ; More position/state dw $0AF6, $0073 ; Samus X dw $0AFA, $029B ; Samus Y dw #$FFFF diff --git a/src/presets/nodropskpdr_data.asm b/src/presets/nodropskpdr_data.asm index 6774419aa..96d984e64 100644 --- a/src/presets/nodropskpdr_data.asm +++ b/src/presets/nodropskpdr_data.asm @@ -632,7 +632,6 @@ preset_nodropskpdr_refill_15_missiles_path_missile_refill: dw $0915, $061A ; Screen Y position in pixels dw $0919, $0493 ; Layer 2 Y position dw $09C2, $0077 ; Health - dw $09C6, $0000 ; Missiles dw $09C8, $000F ; Max missiles dw $09CA, $0005 ; Supers dw $09CC, $0005 ; Max supers @@ -1049,7 +1048,6 @@ preset_nodropskpdr_refill_25_missiles_path_leaving_spore_spawn_supers: dw $0A1E, $0004 ; More position/state dw $0AF6, $0192 ; Samus X dw $0AFA, $088B ; Samus Y - dw $D870, $D180 ; Items dw #$FFFF preset_nodropskpdr_refill_25_missiles_path_green_hill_zone: @@ -1402,7 +1400,6 @@ preset_nodropskpdr_speed_wave_power_bombs_bat_cave_revisit: dw $0919, $0014 ; Layer 2 Y position dw $09A2, $3105 ; Equipped Items dw $09A4, $3105 ; Collected Items - dw $09C8, $0023 ; Max missiles dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state dw $0AF6, $002D ; Samus X diff --git a/src/presets/pkrd_data.asm b/src/presets/pkrd_data.asm index bb7395157..fa68fe811 100644 --- a/src/presets/pkrd_data.asm +++ b/src/presets/pkrd_data.asm @@ -953,7 +953,6 @@ preset_pkrd_kraid_kraid_kihunters: dw $090F, $8000 ; Screen subpixel X position dw $0911, $0100 ; Screen X position in pixels dw $0913, $0C00 ; Screen subpixel Y position - dw $0917, $00C0 ; Layer 2 X position dw $0919, $0100 ; Layer 2 Y position dw $09CA, $0007 ; Supers dw $09D2, $0000 ; Currently selected item @@ -1831,8 +1830,6 @@ preset_pkrd_maridia_aqueduct: dw $0917, $0006 ; Layer 2 X position dw $0919, $0240 ; Layer 2 Y position dw $09D2, $0002 ; Currently selected item - dw $0A1C, $0001 ; Samus position/state - dw $0A1E, $0008 ; More position/state dw $0AF6, $0078 ; Samus X dw $0AFA, $03AB ; Samus Y dw #$FFFF @@ -1862,7 +1859,6 @@ preset_pkrd_maridia_botwoon: dw #preset_pkrd_maridia_botwoon_hallway ; Maridia: Botwoon Hallway dw $078D, $A72C ; DDB dw $079B, $D617 ; MDB - dw $090F, $0000 ; Screen subpixel X position dw $0911, $0300 ; Screen X position in pixels dw $0913, $F800 ; Screen subpixel Y position dw $0915, $0001 ; Screen Y position in pixels @@ -1946,7 +1942,6 @@ preset_pkrd_maridia_spikesuit_reverse_halfie: dw $0919, $0002 ; Layer 2 Y position dw $09C2, $00D8 ; Health dw $09C6, $000F ; Missiles - dw $09CA, $0003 ; Supers dw $0A68, $0001 ; Flash suit dw $0AF6, $003F ; Samus X dw $0AFA, $008B ; Samus Y @@ -2066,7 +2061,6 @@ preset_pkrd_backtracking_parlor_return: dw $07F3, $000C ; Music Bank dw $07F5, $0005 ; Music Track dw $0911, $05E3 ; Screen X position in pixels - dw $0913, $0000 ; Screen subpixel Y position dw $0915, $0400 ; Screen Y position in pixels dw $0917, $02F1 ; Layer 2 X position dw $09C6, $0010 ; Missiles diff --git a/src/presets/spazermap_data.asm b/src/presets/spazermap_data.asm index 8752cdf0b..51abaa25f 100644 --- a/src/presets/spazermap_data.asm +++ b/src/presets/spazermap_data.asm @@ -4501,7 +4501,6 @@ preset_spazermap_greenpink_brin_cleanup_green_hill_zone_final: dw $09C2, $006B ; Health dw $09C6, $0008 ; Missiles dw $09CA, $000B ; Supers - dw $09CE, $0003 ; Pbs dw $0A1C, $0001 ; Samus position/state dw $0A1E, $0008 ; More position/state dw $0AF6, $035E ; Samus X @@ -4542,7 +4541,6 @@ preset_spazermap_blue_brinstar_cleanup_blue_brinstar_etank_room: dw $0919, $0000 ; Layer 2 Y position dw $09C2, $0069 ; Health dw $09C6, $0003 ; Missiles - dw $09CE, $0003 ; Pbs dw $09D2, $0000 ; Currently selected item dw $0AF6, $00D8 ; Samus X dw $CAE8, $0460 ; Map counter @@ -4974,7 +4972,6 @@ preset_spazermap_tourian_baby_skip: dw $0911, $0100 ; Screen X position in pixels dw $0913, $1000 ; Screen subpixel Y position dw $0917, $00C0 ; Layer 2 X position - dw $09C2, $031F ; Health dw $09CA, $000D ; Supers dw $0A1C, $0002 ; Samus position/state dw $0A1E, $0004 ; More position/state From 9d6dc555f0b4144d949e1949e41068baca8f004b Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Tue, 18 Aug 2026 18:56:57 -0400 Subject: [PATCH 26/27] Optimize Metroid and Zeb menu code (round 2) --- src/flagmenu.asm | 51 ++++++++++-------------------------------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/src/flagmenu.asm b/src/flagmenu.asm index 88e3433ab..268549636 100644 --- a/src/flagmenu.asm +++ b/src/flagmenu.asm @@ -828,41 +828,16 @@ eventflags_setmapstations: eventflags_prepare_events_menu: { - ; Zebettites - LDA $7ED820 : AND #$0038 - CMP #$0020 : BEQ .fourZeb - CMP #$0018 : BEQ .threeZeb - CMP #$0010 : BEQ .twoZeb - CMP #$0008 : BEQ .oneZeb - LDA #$0000 : BRA .doneZeb - .fourZeb - LDA #$0004 : BRA .doneZeb - .threeZeb - LDA #$0003 : BRA .doneZeb - .twoZeb - LDA #$0002 : BRA .doneZeb - .oneZeb - LDA #$0001 : BRA .doneZeb - .doneZeb - STA !ram_cm_zebmask - ; Metroids LDA $7ED822 : AND #$000F - BIT #$0008 : BNE .fourMet - BIT #$0004 : BNE .threeMet - BIT #$0002 : BNE .twoMet - BIT #$0001 : BNE .oneMet - LDA #$0000 : BRA .doneMet - .fourMet - LDA #$0004 : BRA .doneMet - .threeMet - LDA #$0003 : BRA .doneMet - .twoMet - LDA #$0002 : BRA .doneMet - .oneMet - LDA #$0001 : BRA .doneMet - .doneMet - STA !ram_cm_metmask + LDX #$FFFF + .metLoop + INX + LSR : BCS .metLoop + TXA : STA !ram_cm_metmask + + ; Zebetites + LDA $7ED820 : AND #$0038 : LSR #3 : STA !ram_cm_zebmask %setmenubank() JML action_submenu @@ -906,7 +881,7 @@ events_chozoacid: events_metroids: %cm_numfield("Metroid Rooms Cleared", !ram_cm_metmask, 0, 4, 1, 1, #.routine) .routine - CMP #$0000 : BEQ .done + TAX : BEQ .done DEC : ASL : TAX LDA.l .table,X .done @@ -919,15 +894,9 @@ events_metroids: events_zebettites: %cm_numfield("Zebs Killed", !ram_cm_zebmask, 0, 4, 1, 1, #.routine) .routine - CMP #$0000 : BEQ .done - DEC : ASL : TAX - LDA.l .table,X - .done - STA $C1 + ASL #3 : STA $C1 LDA $7ED820 : AND #$FFC7 : ORA $C1 : STA $7ED820 RTL - .table - dw $0008, $0010, $0018, $0020 events_mb1glass: %cm_toggle_bit("MB1 Glass Broken", $7ED820, #$0004, #0) From a0a9f2a6ae441b966165475b3e920dfbcda350a0 Mon Sep 17 00:00:00 2001 From: InsaneFirebat Date: Tue, 18 Aug 2026 19:11:09 -0400 Subject: [PATCH 27/27] Docs for read-only locks plus the version bump --- src/main.asm | 4 ++-- web/data/changelog.mdx | 1 + web/data/config.json | 2 +- web/data/help.mdx | 6 +++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main.asm b/src/main.asm index 2af8b4eda..eddeb69da 100644 --- a/src/main.asm +++ b/src/main.asm @@ -16,8 +16,8 @@ lorom !VERSION_MAJOR = 2 !VERSION_MINOR = 7 -!VERSION_BUILD = 9 -!VERSION_REV = 1 +!VERSION_BUILD = 10 +!VERSION_REV = 0 table ../resources/normal.tbl print "" diff --git a/web/data/changelog.mdx b/web/data/changelog.mdx index 045e1eba7..9c690abca 100644 --- a/web/data/changelog.mdx +++ b/web/data/changelog.mdx @@ -64,6 +64,7 @@ - Rerandomize on load now runs extra RNG calls (2.7.9) - Update timers routine optimized and accounted for by artificial lag (2.7.9) - Clear BG1 VRAM when loading presets to improve screen-shake artifacts (2.7.9.1) +- Added options to prevent savestates and custom presets from being overwritten (2.7.10) # Version 2.6.x - Optimize kraid rock projectiles to reduce lag when Kraid rises (2.6.0) diff --git a/web/data/config.json b/web/data/config.json index ea373ff61..3f28896f8 100644 --- a/web/data/config.json +++ b/web/data/config.json @@ -1,6 +1,6 @@ { "name": "Super Metroid Practice Hack", - "version": "2.7.9.1", + "version": "2.7.10", "variants": ["NTSC", "PAL"], "base": { "NTSC": { diff --git a/web/data/help.mdx b/web/data/help.mdx index f6fa798dd..3c31deee9 100644 --- a/web/data/help.mdx +++ b/web/data/help.mdx @@ -67,7 +67,10 @@ If you experience crashes or severe glitches when using savestates, your platfor | - Custom Preset Slot | Select one of 40 slots in memory to save or load custom presets. Press A to open a submenu with a list of preset slots. | | Press Y in the submenu to toggle the display between room names and Samus data. | | Press X in the submenu to provide a custom preset name. -| | Use the Manage Custom Presets option at the bottom to swap or delete slots. +| | Use the Manage Custom Presets option at the bottom to swap, lock, or delete slots. +| | Press A to select a slot. Move to another slot and press A again to swap the two slots. +| | Press X to delete the custom preset in the selected slot. A confirmation page is provided. +| | Press Y to toggle the read-only lock, preventing the custom preset from being deleted or overwritten. | - Save Custom Preset | Save a custom preset to the current slot in SRAM. | | A grapple sound effect will play if a preset cannot be saved (for example during room transition). | - Load Custom Preset | Load the custom preset in the current slot in SRAM. @@ -237,6 +240,7 @@ If you experience crashes or severe glitches when using savestates, your platfor | | It also resets the segment timer. Beware that since it leverages the existing frame advance feature, toggling this on changes the way frame advance works. | - Auto-Save Mid Door | Creates a savestate in the middle of the next door transition. | - Auto-Save Every Door | Creates a savestate in the middle of every door transition. +| - Read-Only Lock | Prevents a savestate from being overwritten. | - Energy/Ammo Variance | Set ranges allowing resources to vary randomly when you reload a savestate. | | | **Slowdown Mode** | Set if practice hack is in slowdown mode and the number of lag frames it is set for.