Introduce bound to QS loop to prevent infinite loop on last bomb loss

Move !INFINITE_BOMB define to ram.asm, replace with labels
This commit is contained in:
cassidoxa
2022-10-23 22:02:36 -04:00
parent 0e87fb3bc4
commit cafb0908a0
6 changed files with 38 additions and 33 deletions

View File

@@ -131,19 +131,18 @@ RefreshRainAmmo:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
!INFINITE_ARROWS = "$7F50C8" !INFINITE_ARROWS = "$7F50C8"
!INFINITE_BOMBS = "$7F50C9"
!INFINITE_MAGIC = "$7F50CA" !INFINITE_MAGIC = "$7F50CA"
SetEscapeAssist: SetEscapeAssist:
LDA ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state LDA ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state
.rain .rain
LDA.l EscapeAssist LDA.l EscapeAssist
BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : +
BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + BIT.b #$02 : BEQ + : STA InfiniteBombs : +
BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : +
BRA ++ BRA ++
.no_train ; choo choo .no_train ; choo choo
LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : + LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : +
LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA !INFINITE_BOMBS : + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA InfiniteBombs : +
LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : +
++ ++
RTL RTL

View File

@@ -60,7 +60,7 @@ OnUncleItemGet:
LDA.l EscapeAssist LDA.l EscapeAssist
BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : +
BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + BIT.b #$02 : BEQ + : STA InfiniteBombs : +
BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : +
PLA PLA

View File

@@ -3,10 +3,9 @@ SEP #$30
;================================================================================ ;================================================================================
; Draw bomb count ; Draw bomb count
!BOMBCOUNT_DRAW_ADDRESS = "$7EC75A" !BOMBCOUNT_DRAW_ADDRESS = "$7EC75A"
!INFINITE_BOMBS = "$7F50C9"
;================================================================================ ;================================================================================
LDA !INFINITE_BOMBS : BNE .infinite_bombs LDA.l InfiniteBombs : BNE .infinite_bombs
.finite_bombs .finite_bombs
LDA.l BombsEquipment ; bombs LDA.l BombsEquipment ; bombs
JSR HudHexToDec2Digit ;requires 8 bit registers! JSR HudHexToDec2Digit ;requires 8 bit registers!

View File

@@ -11,6 +11,7 @@ QuickSwap:
LDA.l QuickSwapFlag : BEQ .done LDA.l QuickSwapFlag : BEQ .done
LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items
LDY.b #$14
PHX PHX
XBA ; restore the stashed value XBA ; restore the stashed value
CMP.b #$30 : BNE + CMP.b #$30 : BNE +
@@ -58,8 +59,10 @@ RCode:
- -
+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1 + CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
+ INX + INX
DEY : BEQ +
.nextItem .nextItem
JSL.l IsItemAvailable : BEQ - JSL.l IsItemAvailable : BEQ -
+
RTS RTS
LCode: LCode:
@@ -73,6 +76,17 @@ LCode:
- -
+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14 + CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
+ DEX + DEX
DEY : BEQ +
.nextItem .nextItem
JSL.l IsItemAvailable : BEQ - JSL.l IsItemAvailable : BEQ -
+
RTS RTS
IsItemAvailable:
LDA.l InfiniteBombs : BEQ .finite
.infinite
CPX.b #$04 : BNE .finite
LDA.b #$01 : RTL
.finite
LDA.l EquipmentWRAM-1, X
RTL

View File

@@ -6,6 +6,7 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Placeholder and for compass item max count allocations, still WIP ; Placeholder and for compass item max count allocations, still WIP
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
InfiniteBombs = $7F50C9
CompassTotalsWRAM = $7F5410 CompassTotalsWRAM = $7F5410
;================================================================================ ;================================================================================
@@ -15,4 +16,5 @@ macro assertRAM(label, address)
assert <label> = <address>, "<label> labeled at incorrect address." assert <label> = <address>, "<label> labeled at incorrect address."
endmacro endmacro
%assertRAM(InfiniteBombs, $7F50C9)
%assertRAM(CompassTotalsWRAM, $7F5410) %assertRAM(CompassTotalsWRAM, $7F5410)

View File

@@ -1,47 +1,38 @@
!INFINITE_BOMBS = "$7F50C9"
IsItemAvailable:
LDA !INFINITE_BOMBS : BEQ .finite
.infinite
CPX.b #$04 : BNE .finite
LDA.b #$01 : RTL
.finite
LDA EquipmentWRAM-1, X
RTL
LoadBombCount: LoadBombCount:
LDA !INFINITE_BOMBS : BNE .infinite LDA.l InfiniteBombs : BNE .infinite
.finite .finite
LDA BombsEquipment LDA.l BombsEquipment
.infinite .infinite
RTL RTL
LoadBombCount16: LoadBombCount16:
LDA !INFINITE_BOMBS : AND.w #$00FF : BNE .infinite LDA.l InfiniteBombs : AND.w #$00FF : BNE .infinite
.finite .finite
LDA BombsEquipment LDA.l BombsEquipment
.infinite .infinite
RTL RTL
StoreBombCount: StoreBombCount:
PHA : LDA !INFINITE_BOMBS : BEQ .finite PHA : LDA.l InfiniteBombs : BEQ .finite
.infinite .infinite
PLA : LDA.b #$01 : RTL PLA : LDA.b #$01 : RTL
.finite .finite
PLA : STA BombsEquipment PLA : STA.l BombsEquipment
RTL RTL
SearchForEquippedItem: SearchForEquippedItem:
LDA !INFINITE_BOMBS : BEQ + LDA.l InfiniteBombs : BEQ +
LDA.b #$01 : LDX.b #$00 : RTL LDA.b #$01 : LDX.b #$00 : RTL
+ +
LDA BowEquipment ; thing we wrote over LDA.l BowEquipment ; thing we wrote over
RTL RTL
!INFINITE_ARROWS = "$7F50C8" !INFINITE_ARROWS = "$7F50C8"
DecrementArrows: DecrementArrows:
LDA !INFINITE_ARROWS : BNE .infinite LDA.l !INFINITE_ARROWS : BNE .infinite
LDA.l ArrowMode : BNE .rupees : BRA .normal LDA.l ArrowMode : BNE .rupees : BRA .normal
.infinite .infinite
LDA.b #$01 : RTL LDA.b #$01 : RTL
.normal .normal
LDA CurrentArrows : BEQ .done LDA.l CurrentArrows : BEQ .done
DEC : STA CurrentArrows : INC DEC : STA.l CurrentArrows : INC
BRA .done BRA .done
.rupees .rupees
REP #$20 REP #$20
@@ -57,11 +48,11 @@ DecrementArrows:
.shoot_arrow .shoot_arrow
PHX PHX
REP #$20 REP #$20
LDA CurrentRupees : BEQ + LDA.l CurrentRupees : BEQ +
PHA : LDA BowEquipment : DEC : AND #$0002 : TAX : PLA PHA : LDA.l BowEquipment : DEC : AND.w #$0002 : TAX : PLA
!SUB.l ArrowModeWoodArrowCost, X ; CMP.w #$0000 !SUB.l ArrowModeWoodArrowCost, X ; CMP.w #$0000
BMI .not_enough_money BMI .not_enough_money
STA CurrentRupees : LDA.w #$0001 : BRA + STA.l CurrentRupees : LDA.w #$0001 : BRA +
.not_enough_money .not_enough_money
LDA.w #$0000 LDA.w #$0000
+ +
@@ -72,17 +63,17 @@ DecrementArrows:
RTL RTL
ArrowGame: ArrowGame:
LDA $0B99 : BEQ + LDA.w $0B99 : BEQ +
DEC $0B99 ; reduce minigame arrow count DEC $0B99 ; reduce minigame arrow count
LDA.l ArrowMode : BNE .rupees LDA.l ArrowMode : BNE .rupees
.normal .normal
LDA CurrentArrows : INC #2 : STA CurrentArrows ; increment arrow count (by 2 for some reason) LDA.l CurrentArrows : INC #2 : STA.l CurrentArrows ; increment arrow count (by 2 for some reason)
RTL RTL
.rupees .rupees
PHX PHX
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
LDA BowEquipment : DEC : AND #$0002 : TAX LDA.l BowEquipment : DEC : AND #$0002 : TAX
LDA CurrentRupees : !ADD.l ArrowModeWoodArrowCost, X : STA CurrentRupees LDA.l CurrentRupees : !ADD.l ArrowModeWoodArrowCost, X : STA.l CurrentRupees
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
PLX PLX
+ +