; 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 Joy1B_New : AND.b #$30 : BEQ .done

	XBA ; stash away the value for after the checks.

	LDA.l QuickSwapFlag : BEQ .done
	LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items
	LDA.b #$01 : STA.l UpdateHUDFlag
	LDY.b #$14
	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 ItemCursor : BRA .special_swap
	+
	BIT.b #$10 : BEQ + ; Only pressed R
		JSR RCode
		LDA.b Joy1B_All : BIT.b #$20 : BNE .special_swap ; Still holding L from a previous frame
		BRA .store
	+
	; Only pressed L
	JSR LCode
	LDA.b Joy1B_All : BIT #$10 : BNE .special_swap ; Still holding R from a previous frame
	BRA .store

	.special_swap
	LDA.l InventoryTracking+1 : ORA.b #$01 : STA.l InventoryTracking+1
	CPX.b #$02 : BEQ + ; boomerang
	CPX.b #$01 : BEQ + ; bow
	CPX.b #$05 : BEQ + ; powder
	CPX.b #$0D : BEQ + ; flute
	CPX.b #$10 : BEQ + ; bottle
	BRA .store
	+ STX.w ItemCursor : JSL ProcessMenuButtons_y_pressed

	.store
	LDA.b #$20 : STA.w SFX3
	STX.w ItemCursor

	JSL HUD_RefreshIconLong
	PLX

	.done
	LDA.b Joy1B_New : AND.b #$40 ;what we wrote over
RTL
RCode:
	LDX.w ItemCursor
	LDA.b Joy1B_All : BIT.b #$20 : BNE ++ ; Still holding L from a previous frame
		LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
		BRA +
	++
	LDA.l InventoryTracking+1 : BIT.b #$01 : BEQ +
	RTS
	-
		+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
		+ INX
                DEY : BEQ +
	.nextItem
	JSL IsItemAvailable : BEQ -
        +
RTS

LCode:
	LDX.w ItemCursor
	LDA.b Joy1B_All : BIT #$10 : BNE ++ ; Still holding R from a previous frame
		LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
		BRA +
	++
	LDA.l InventoryTracking+1 : BIT.b #$01 : BEQ +
	RTS
	-
		+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
		+ DEX
                DEY : BEQ +
	.nextItem
	JSL IsItemAvailable : BEQ -
        +
RTS

IsItemAvailable:
        LDA.l InfiniteBombs : BEQ .finite
        .infinite
                CPX.b #$04 : BNE .finite
                LDA.b #$01 : RTL
        .finite
                LDA.l EquipmentWRAM-1, X
RTL
