Add Quick Swap
This commit is contained in:
@@ -157,6 +157,7 @@ incsrc init.asm
|
|||||||
|
|
||||||
org $A48000 ; code bank - PUT NEW CODE HERE
|
org $A48000 ; code bank - PUT NEW CODE HERE
|
||||||
incsrc openmode.asm
|
incsrc openmode.asm
|
||||||
|
incsrc quickswap.asm
|
||||||
incsrc endingsequence.asm
|
incsrc endingsequence.asm
|
||||||
|
|
||||||
;org $228000 ; contrib area
|
;org $228000 ; contrib area
|
||||||
|
|||||||
10
hooks.asm
10
hooks.asm
@@ -2085,3 +2085,13 @@ JSL.l ArrowGame : NOP #14
|
|||||||
org $07A06C ; <- Bank07.asm:5215 (LDA $7EF377 : BEQ BRANCH_EPSILON)
|
org $07A06C ; <- Bank07.asm:5215 (LDA $7EF377 : BEQ BRANCH_EPSILON)
|
||||||
JSL.l DecrementArrows : SKIP #2 : NOP #5
|
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
|
||||||
|
;================================================================================
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ RTL
|
|||||||
LDA.b #$20 : STA $012F ; menu select sound
|
LDA.b #$20 : STA $012F ; menu select sound
|
||||||
JSL.l ResetEquipment
|
JSL.l ResetEquipment
|
||||||
RTL
|
RTL
|
||||||
.y_pressed
|
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
|
||||||
LDA.b #$10 : STA $0207
|
LDA.b #$10 : STA $0207
|
||||||
LDA $0202 ; check selected item
|
LDA $0202 ; check selected item
|
||||||
CMP #$02 : BNE + ; boomerang
|
CMP #$02 : BNE + ; boomerang
|
||||||
|
|||||||
93
quickswap.asm
Normal file
93
quickswap.asm
Normal 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
|
||||||
@@ -197,6 +197,10 @@ org $30804A ; PC 0x18004A
|
|||||||
InvertedMode:
|
InvertedMode:
|
||||||
db #$00 ; #$00 = Normal (default) - #$01 = Inverted
|
db #$00 ; #$00 = Normal (default) - #$01 = Inverted
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
org $30804B ; PC 0x18004B
|
||||||
|
QuickSwapFlag:
|
||||||
|
db #$00 ; #$00 = Off (default) - #$01 = On
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
org $308080 ; PC 0x180080
|
org $308080 ; PC 0x180080
|
||||||
Upgrade5BombsRefill:
|
Upgrade5BombsRefill:
|
||||||
db #$00
|
db #$00
|
||||||
|
|||||||
Reference in New Issue
Block a user