Add Quick Swap

This commit is contained in:
Kevin Cathcart
2018-02-22 19:26:59 -05:00
parent 4641e31019
commit 8c151e0fc2
5 changed files with 109 additions and 1 deletions

View File

@@ -157,6 +157,7 @@ incsrc init.asm
org $A48000 ; code bank - PUT NEW CODE HERE
incsrc openmode.asm
incsrc quickswap.asm
incsrc endingsequence.asm
;org $228000 ; contrib area

View File

@@ -2085,3 +2085,13 @@ JSL.l ArrowGame : NOP #14
org $07A06C ; <- Bank07.asm:5215 (LDA $7EF377 : BEQ BRANCH_EPSILON)
JSL.l DecrementArrows : SKIP #2 : NOP #5
;================================================================================
;================================================================================
; Quick Swap
;--------------------------------------------------------------------------------
org $0287FB ; <- 107FB - Bank02.asm:1526 (LDA $F6 : AND.b #$40 : BEQ .dontActivateMap)
JSL.l QuickSwap
org $02A451 ; <- 12451 - Bank02.asm:6283 (LDA $F6 : AND.b #$40 : BEQ .xButtonNotDown)
JSL.l QuickSwap
;================================================================================

View File

@@ -53,7 +53,7 @@ RTL
LDA.b #$20 : STA $012F ; menu select sound
JSL.l ResetEquipment
RTL
.y_pressed
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
LDA.b #$10 : STA $0207
LDA $0202 ; check selected item
CMP #$02 : BNE + ; boomerang

93
quickswap.asm Normal file
View File

@@ -0,0 +1,93 @@
; Thanks to Kazuto for developing the original QS code that inspired this one
QuickSwap:
; We perform all other checks only if we are pushing L or R in order to have minimal
; perf impact, since this runs every frame
LDA.b $F6 : AND #$30 : BEQ .done
XBA ; stash away the value for after the checks.
LDA.l QuickSwapFlag : BEQ .done
LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items
;TODO add romtype and race rom checks here
PHX
XBA ; restore the stashed value
CMP.b #$30 : BNE +
; If prossing both L and R this frame, then go directly to the special swap code
LDX.w $0202 : BRA .special_swap
+
BIT #$10 : BEQ + ; Only pressed R
JSR.w RCode
LDA.b $F2 : BIT #$20 : BNE .special_swap ; Still holding L from a previous frame
BRA .store
+
; Only pressed L
JSR.w LCode
LDA.b $F2 : BIT #$10 : BNE .special_swap ; Still holding R from a previous frame
BRA .store
.special_swap
CPX.b #$02 : BEQ + ; boomerang
CPX.b #$01 : BEQ + ; bow
CPX.b #$05 : BEQ + ; powder
CPX.b #$0D : BEQ + ; flute
BRA .store
+ STX $0202 : JSL ProcessMenuButtons_y_pressed
.store
LDA.b #$20 : STA.w $012F
STX $0202
JSL HUD_RefreshIconLong
PLX
.done
LDA.b $F6 : AND.b #$40 ;what we wrote over
RTL
RCode:
LDA.w $0202 : TAX
-
CPX.b #$0F : BNE + ; incrementing into bottle
LDX.b #$00 : BRA ++
+ CPX.b #$10 : BNE + ; incrementing bottle
LDA.l $7EF34F : TAX
-- : ++
CPX.b #$04 : BEQ .noMoreBottles
INX
LDA.l $7EF35B,X : BEQ --
TXA : STA.l $7EF34F
LDX #$10
RTS
.noMoreBottles
LDX #$11
BRA .nextItem
+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
+ INX
.nextItem
JSL.l IsItemAvailable : BEQ -
RTS
LCode:
LDA.w $0202 : TAX
-
CPX.b #$11 : BNE + ; decrementing into bottle
LDX.b #$05 : BRA ++
+ CPX.b #$10 : BNE + ; decrementing bottle
LDA.l $7EF34F : TAX
-- : ++
CPX.b #$01 : BEQ .noMoreBottles
DEX
LDA.l $7EF35B,X : BEQ --
TXA : STA.l $7EF34F
LDX.b #$10
RTS
.noMoreBottles
LDX.b #$0F : BRA .nextItem
+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
+ DEX
.nextItem
JSL.l IsItemAvailable : BEQ -
RTS

View File

@@ -197,6 +197,10 @@ org $30804A ; PC 0x18004A
InvertedMode:
db #$00 ; #$00 = Normal (default) - #$01 = Inverted
;--------------------------------------------------------------------------------
org $30804B ; PC 0x18004B
QuickSwapFlag:
db #$00 ; #$00 = Off (default) - #$01 = On
;--------------------------------------------------------------------------------
org $308080 ; PC 0x180080
Upgrade5BombsRefill:
db #$00