Refactor menu system: Add constants and deduplicate input logic

This commit is contained in:
scawful
2025-11-22 19:03:56 -05:00
parent 3ceab24c7c
commit 52a5ed4b02
2 changed files with 106 additions and 213 deletions

View File

@@ -329,135 +329,3 @@ assert pc() <= $0DE3C7
pullpc
; =========================================================
; Stats Screen Selector Logic
; =========================================================
Menu_StatsCursorPositions:
; Row 14: Sword, Shield, Tunic
dw menu_offset(14,2) ; 0: Sword
dw menu_offset(14,5) ; 1: Shield
dw menu_offset(14,8) ; 2: Tunic
dw menu_offset(14,8) ; 3: Placeholder (maps to Tunic)
; Row 17: Glove, Flippers, Boots, Pearl
dw menu_offset(17,2) ; 4: Glove
dw menu_offset(17,5) ; 5: Flippers
dw menu_offset(17,8) ; 6: Boots
dw menu_offset(17,11) ; 7: Pearl
Stats_Nav_Right:
db $01, $02, $00, $00, $05, $06, $07, $04
Stats_Nav_Left:
db $02, $00, $01, $01, $07, $04, $05, $06
Stats_Nav_Down:
db $04, $05, $06, $07, $00, $01, $02, $02
Stats_Nav_Up:
db $04, $05, $06, $07, $00, $01, $02, $02
Menu_DrawStatsCursor:
{
LDA.b #$20 : BIT.w $0207
REP #$20
BEQ .no_delete
; Delete cursor
LDA.w #$20F5
STA.w $1108, X : STA.w $1148, X
STA.w $114E, X : STA.w $110E, X
STA.w $11C8, X : STA.w $1188, X
STA.w $118E, X : STA.w $11CE, X
BRA .done
.no_delete
; We reuse the Item Menu cursor graphics
LDA.w #$3060 : STA.w $1108, X ; corner
LDA.w #$3070 : STA.w $1148, X
LDA.w #$7060 : STA.w $110E, X ; corner
LDA.w #$7070 : STA.w $114E, X
LDA.w #$3070 : STA.w $1188, X
LDA.w #$B060 : STA.w $11C8, X ; corner
LDA.w #$7070 : STA.w $118E, X
LDA.w #$F060 : STA.w $11CE, X ; corner
.done
SEP #$20
RTS
}
Menu_DeleteStatsCursor:
{
REP #$30
; Use $020C for index
LDA.w $020C : AND.w #$00FF : ASL : TAY
LDX.w Menu_StatsCursorPositions, Y
LDA.w #$20F5
STA.w $1108, X : STA.w $1148, X
STA.w $114E, X : STA.w $110E, X
STA.w $11C8, X : STA.w $1188, X
STA.w $118E, X : STA.w $11CE, X
SEP #$30
STZ $0207
RTS
}
Menu_StatsScreen_Input:
{
INC $0207
; Safety check for uninitialized index
LDA.w $020C : AND #$F8 : BEQ .safe_index
STZ.w $020C
.safe_index
LDA.b $F4 ; Joypad
LSR : BCS .move_right
LSR : BCS .move_left
LSR : BCS .move_down
LSR : BCS .move_up
BRA .draw_cursor
.move_right
JSR Menu_DeleteStatsCursor
LDY.w $020C
LDA.w Stats_Nav_Right, Y
STA.w $020C
BRA .play_sound
.move_left
JSR Menu_DeleteStatsCursor
LDY.w $020C
LDA.w Stats_Nav_Left, Y
STA.w $020C
BRA .play_sound
.move_down
JSR Menu_DeleteStatsCursor
LDY.w $020C
LDA.w Stats_Nav_Down, Y
STA.w $020C
BRA .play_sound
.move_up
JSR Menu_DeleteStatsCursor
LDY.w $020C
LDA.w Stats_Nav_Up, Y
STA.w $020C
BRA .play_sound
.play_sound
LDA.b #$20 : STA.w $012F
.draw_cursor
SEP #$30
LDA.w $020C : ASL : TAY
REP #$10
LDX.w Menu_StatsCursorPositions, Y
JSR Menu_DrawStatsCursor
SEP #$20
RTS
}