Rework menu dungeon item + select behavior
Fix colored heart animations
This commit is contained in:
@@ -10,10 +10,9 @@ ProcessMenuButtons:
|
||||
BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button
|
||||
LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held
|
||||
.sel_unheld
|
||||
LDA.l HudFlag : AND.b #$20 : BEQ +
|
||||
LDA.l HudFlag : AND.b #$DF : STA.l HudFlag ; select is released, unset hud flag
|
||||
LDA.b IndoorsFlag : BEQ + ; skip if outdoors
|
||||
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||
LDA.l HudFlag : AND.b #$60 : BEQ +
|
||||
LDA.b #$00 : STA.l HudFlag
|
||||
JSL.l MaybePlaySelectSFX
|
||||
+
|
||||
JSL.l ResetEquipment
|
||||
+
|
||||
@@ -21,8 +20,14 @@ ProcessMenuButtons:
|
||||
CLC ; no buttons
|
||||
RTL
|
||||
.sel_pressed
|
||||
LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag ; set hud flag
|
||||
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||
LDA.l HUDDungeonItems : BIT.b #$0C : BNE +
|
||||
LDA.b #$40
|
||||
BRA .store_flag
|
||||
+
|
||||
LDA.b #$60
|
||||
.store_flag
|
||||
STA.l HudFlag
|
||||
JSL.l MaybePlaySelectSFX
|
||||
JSL.l ResetEquipment
|
||||
RTL
|
||||
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
|
||||
@@ -737,3 +742,14 @@ RTL
|
||||
|
||||
}
|
||||
;--------------------------------------------------------------------------------
|
||||
MaybePlaySelectSFX:
|
||||
LDA.w DungeonID : BMI .not_dungeon
|
||||
.play
|
||||
LDA.b #$20 : STA.w SFX3 ; menu select sound
|
||||
RTL
|
||||
.not_dungeon
|
||||
LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play
|
||||
BIT.b #$0C : BEQ .dont_play
|
||||
BRA .play
|
||||
.dont_play
|
||||
RTL
|
||||
|
||||
@@ -494,9 +494,11 @@ CheckHeartPalette:
|
||||
RTS
|
||||
|
||||
ColorAnimatedHearts:
|
||||
PHX
|
||||
REP #$20
|
||||
LDA.l HUDHeartColors_index : ASL : TAX
|
||||
LDA.l HUDHeartColors_masks_game_hud,X
|
||||
PLX
|
||||
ORA.l HeartFramesBaseTiles,X
|
||||
STA.b [Scrap00],Y
|
||||
SEP #$20
|
||||
|
||||
@@ -116,10 +116,14 @@ RTL
|
||||
;================================================================================
|
||||
ShowDungeonItems:
|
||||
REP #$30
|
||||
LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave
|
||||
LDA.l HudFlag : AND.w #$0020 ; check hud flag
|
||||
BEQ + : LDA.w #$0000 : RTL : + ; if set, send the zero onwards
|
||||
LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF ; original logic
|
||||
LDA.w DungeonID-1 : BMI .no_dungeon
|
||||
LDA.l HudFlag : AND.w #$0040 : BEQ +
|
||||
.no_dungeon
|
||||
LDA.w #$0000
|
||||
RTL
|
||||
+
|
||||
LDA.w IndoorsFlag
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
UpdateKeys:
|
||||
@@ -254,27 +258,18 @@ DrawHUDDungeonItems:
|
||||
dw $0D*2 ; ; Ganon's Tower
|
||||
|
||||
.continue
|
||||
PHP
|
||||
|
||||
PHB
|
||||
PHK
|
||||
PLB
|
||||
|
||||
PHP : PHB
|
||||
PHK : PLB
|
||||
REP #$30
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
; dungeon names
|
||||
LDA.w #$2D50
|
||||
|
||||
LDY.w #00
|
||||
|
||||
|
||||
.next_dungeon_name
|
||||
LDX.w .dungeon_positions,Y
|
||||
STA.w GFXStripes+$0646,X
|
||||
|
||||
INC
|
||||
|
||||
INY : INY
|
||||
CPY.w #26 : BCC .next_dungeon_name
|
||||
|
||||
@@ -286,25 +281,20 @@ DrawHUDDungeonItems:
|
||||
STA.w GFXStripes+$06C6,X
|
||||
STA.w GFXStripes+$0706,X
|
||||
|
||||
DEX : DEX : BPL --
|
||||
|
||||
DEX : DEX
|
||||
BPL --
|
||||
|
||||
LDA.l HudFlag : AND.w #$0020 : BEQ +
|
||||
|
||||
JMP .maps_and_compasses
|
||||
|
||||
+
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
LDA.l HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys
|
||||
|
||||
+
|
||||
LDA.l HUDDungeonItems : AND.w #$0001 : BNE +
|
||||
LDA.w #$24F5 : STA.w GFXStripes+$0684 ; blank tile
|
||||
BRA .skip_small_keys
|
||||
+
|
||||
.draw_small_keys
|
||||
LDA.w #$2810 : STA.w GFXStripes+$0684 ; small keys icon
|
||||
|
||||
LDY.w #0
|
||||
|
||||
; Clear the carry only once
|
||||
; it will be cleared by looping condition afterwards
|
||||
CLC
|
||||
|
||||
.next_small_key
|
||||
@@ -322,17 +312,13 @@ DrawHUDDungeonItems:
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
.skip_small_keys
|
||||
|
||||
; Big Keys
|
||||
LDA.l HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys
|
||||
|
||||
|
||||
LDA.l HUDDungeonItems : AND.w #$0002 : BNE +
|
||||
LDA.w #$24F5 : STA.w GFXStripes+$06C4 ; blank tile
|
||||
BRA .skip_big_keys
|
||||
+
|
||||
LDA.w #$2811 : STA.w GFXStripes+$06C4 ; big key icon
|
||||
|
||||
; use X so we can BIT
|
||||
LDX.w #0
|
||||
|
||||
; load once and test multiple times
|
||||
LDA.l BigKeyField
|
||||
|
||||
.next_big_key
|
||||
@@ -342,8 +328,6 @@ DrawHUDDungeonItems:
|
||||
LDY.w .dungeon_positions,X
|
||||
LDA.w #$2826
|
||||
STA.w GFXStripes+$06C6,Y
|
||||
|
||||
; reload
|
||||
LDA.l BigKeyField
|
||||
|
||||
..skip_key
|
||||
@@ -353,8 +337,10 @@ DrawHUDDungeonItems:
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
.skip_big_keys
|
||||
|
||||
LDA.l HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills
|
||||
LDA.l HUDDungeonItems : AND.w #$0010 : BNE +
|
||||
LDA.w #$24F5 : STA.w GFXStripes+$0704 ; blank tile
|
||||
BRA .skip_boss_kills
|
||||
+
|
||||
LDA.w #$280F : STA.w GFXStripes+$0704 ; skull icon
|
||||
LDY.w #0
|
||||
|
||||
@@ -363,33 +349,27 @@ DrawHUDDungeonItems:
|
||||
LDA.l RoomDataWRAM.l,X
|
||||
AND.w #$0800
|
||||
BEQ ..skip_boss_kill
|
||||
|
||||
LDA.w #$2826
|
||||
LDX.w .dungeon_positions,Y
|
||||
STA.w GFXStripes+$0706,X
|
||||
|
||||
..skip_boss_kill
|
||||
INY : INY
|
||||
CPY.w #26 : BCC .next_boss_kill
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
.skip_boss_kills
|
||||
LDA.l HUDDungeonItems : BIT.w #$00F3 : BEQ .maps_and_compasses
|
||||
JMP .exit
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
; This should only display if select is pressed in hud
|
||||
.maps_and_compasses
|
||||
|
||||
LDA.w #$24F5 : STA.w GFXStripes+$0704 ; blank tile boss icon
|
||||
; Maps
|
||||
LDA.l HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps
|
||||
LDA.l HUDDungeonItems : AND.w #$0004 : BNE +
|
||||
LDA.w #$24F5 : STA.w GFXStripes+$0684 ; map icon
|
||||
BRA .skip_maps
|
||||
+
|
||||
LDA.w #$2821 : STA.w GFXStripes+$0684 ; map icon
|
||||
|
||||
; use X so we can BIT
|
||||
LDX.w #0
|
||||
|
||||
; load once and test multiple times
|
||||
LDA.l MapField
|
||||
|
||||
.next_map
|
||||
@@ -399,26 +379,19 @@ DrawHUDDungeonItems:
|
||||
LDY.w .dungeon_positions,X
|
||||
LDA.w #$2826
|
||||
STA.w GFXStripes+$0686,Y
|
||||
|
||||
; reload
|
||||
LDA.l MapField
|
||||
|
||||
..skip_map
|
||||
INX : INX
|
||||
CPX.w #26 : BCC .next_map
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
.skip_maps
|
||||
|
||||
; Compasses
|
||||
LDA.l HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses
|
||||
LDA.l HUDDungeonItems : AND.w #$0008 : BNE +
|
||||
LDA.w #$24F5 : STA.w GFXStripes+$06C4 ; blank tile
|
||||
BRA .skip_compasses
|
||||
+
|
||||
LDA.w #$2C20 : STA.w GFXStripes+$06C4 ; compass icon
|
||||
|
||||
; use X so we can BIT
|
||||
LDX.w #0
|
||||
|
||||
; load once and test multiple times
|
||||
LDA.l CompassField
|
||||
|
||||
.next_compass
|
||||
@@ -428,8 +401,6 @@ DrawHUDDungeonItems:
|
||||
LDY.w .dungeon_positions,X
|
||||
LDA.w #$2826
|
||||
STA.w GFXStripes+$06C6,Y
|
||||
|
||||
; reload
|
||||
LDA.l CompassField
|
||||
|
||||
..skip_compass
|
||||
@@ -439,7 +410,6 @@ DrawHUDDungeonItems:
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
.skip_compasses
|
||||
|
||||
.exit
|
||||
PLB
|
||||
PLP
|
||||
@@ -598,15 +568,19 @@ HandleEmptyMenu:
|
||||
LDA.b Joy1A_New : BIT.b #$DF : BNE .close_menu ; Not select, close menu
|
||||
BIT.b #$20 : BNE .sel_pressed
|
||||
LDA.b Joy1A_All : BIT.b #$20 : BNE .wait_for_change
|
||||
LDA.l HudFlag : AND.b #$20 : BEQ .wait_for_change ; HUD flag off, skip drawing work
|
||||
LDA.l HudFlag : AND.b #$DF : STA.l HudFlag ; Unset without select
|
||||
LDA.b IndoorsFlag : BEQ ++ ; skip if outdoors
|
||||
LDA.b #$20 : STA.w SFX3
|
||||
++
|
||||
LDA.l HudFlag : AND.b #$60 : BEQ .wait_for_change
|
||||
LDA.l HudFlag : AND.b #$9F : STA.l HudFlag ; Unset without select
|
||||
JSL.l MaybePlaySelectSFX
|
||||
LDA.b #$0C : BRA .done
|
||||
.sel_pressed
|
||||
LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag
|
||||
LDA.b #$20 : STA.w SFX3
|
||||
LDA.l HUDDungeonItems : BIT.b #$0C : BNE +
|
||||
LDA.b #$40
|
||||
BRA .store_flag
|
||||
+
|
||||
LDA.b #$60
|
||||
.store_flag
|
||||
STA.l HudFlag
|
||||
JSL.l MaybePlaySelectSFX
|
||||
LDA.b #$0C : BRA .done
|
||||
.wait_for_change
|
||||
LDA.b #$03 : BRA .done
|
||||
@@ -665,3 +639,4 @@ dw $2084, $6084, $2085, $6085 ; 0 heart pieces
|
||||
dw $20AD, $6084, $2085, $6085 ; 1 heart piece
|
||||
dw $20AD, $6084, $20AE, $6085 ; 2 heart pieces
|
||||
dw $20AD, $60AD, $20AE, $6085 ; 3 heart pieces
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
3
sram.asm
3
sram.asm
@@ -255,7 +255,8 @@ MapOverlay: skip 2 ; Used to reveal dungeon prizes on the map in mo
|
||||
; | m = Misery Mire | d = Palace of Darkness | s = Swamp Palace
|
||||
; | a = Aga Tower | t = Desert Palace | e = Eastern Palace
|
||||
; / h = Hyrule Castle | s = Sewer Passage
|
||||
HudFlag: ;
|
||||
HudFlag: ; - h c - - - - -
|
||||
; c = show maps and compasses | h = show heart pieces
|
||||
IgnoreFaeries: ;
|
||||
HasGroveItem: ;
|
||||
GeneralFlags: skip 1 ; - - h - - i - g (bitfield)
|
||||
|
||||
Reference in New Issue
Block a user