Fix GFX transfer, use stack
Fix HUD arrow icon after buying shop arrow
This commit is contained in:
@@ -44,10 +44,12 @@ TransferItemGFX:
|
|||||||
; Only used for shops now but could be used for anything. We should look at how door rando does this
|
; Only used for shops now but could be used for anything. We should look at how door rando does this
|
||||||
; and try to unify one approach.
|
; and try to unify one approach.
|
||||||
REP #$30
|
REP #$30
|
||||||
LDX.w ItemQueuePtr : BEQ .done
|
LDX.w ItemStackPtr : BEQ .done
|
||||||
|
TXA : BIT #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.)
|
||||||
|
DEX #2
|
||||||
-
|
-
|
||||||
LDA.w ItemGFXQueue,X : STA.w ItemGFXPtr
|
LDA.l ItemGFXStack,X : STA.w ItemGFXPtr
|
||||||
LDA.w ItemTargetQueue,X : STA.w ItemGFXTarget
|
LDA.l ItemTargetStack,X : STA.w ItemGFXTarget
|
||||||
PHX
|
PHX
|
||||||
JSL.l TransferItemToVRAM
|
JSL.l TransferItemToVRAM
|
||||||
REP #$10
|
REP #$10
|
||||||
@@ -55,7 +57,9 @@ TransferItemGFX:
|
|||||||
DEX #2
|
DEX #2
|
||||||
BPL -
|
BPL -
|
||||||
|
|
||||||
STZ.w ItemQueuePtr
|
STZ.w ItemStackPtr
|
||||||
.done
|
.done
|
||||||
SEP #$30
|
SEP #$30
|
||||||
RTS
|
RTS
|
||||||
|
.fail
|
||||||
|
BRK #$00
|
||||||
|
|||||||
@@ -1032,7 +1032,7 @@ ItemReceiptGraphicsOffsets:
|
|||||||
dw $05A0 ; 4D - Arrow capacity (70)
|
dw $05A0 ; 4D - Arrow capacity (70)
|
||||||
dw $01A0 ; 4E - 1/2 magic
|
dw $01A0 ; 4E - 1/2 magic
|
||||||
dw $01E0 ; 4F - 1/4 magic
|
dw $01E0 ; 4F - 1/4 magic
|
||||||
dw $0 ; 50 - Safe master sword
|
dw $00E0 ; 50 - Safe master sword
|
||||||
dw $0420 ; 51 - Bomb capacity (+5)
|
dw $0420 ; 51 - Bomb capacity (+5)
|
||||||
dw $0460 ; 52 - Bomb capacity (+10)
|
dw $0460 ; 52 - Bomb capacity (+10)
|
||||||
dw $0520 ; 53 - Arrow capacity (+5)
|
dw $0520 ; 53 - Arrow capacity (+5)
|
||||||
|
|||||||
@@ -434,7 +434,10 @@ ItemBehavior:
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
.single_arrow
|
.single_arrow
|
||||||
INC.w UpdateHUD
|
LDA.l ArrowMode : BEQ +
|
||||||
|
LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address
|
||||||
|
INC.w UpdateHUD ; in retro/rupee bow mode.
|
||||||
|
+
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
.rupoor
|
.rupoor
|
||||||
|
|||||||
12
ram.asm
12
ram.asm
@@ -190,10 +190,10 @@ MessageJunk = $7E0223 ; Zeroed but never used (?)
|
|||||||
;
|
;
|
||||||
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
|
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
|
||||||
;CoolScratch = $7E0224 ; 0x5C bytes of free ram
|
;CoolScratch = $7E0224 ; 0x5C bytes of free ram
|
||||||
ItemQueuePtr = $7E0226 ; Pointer into Item GFX and VRAM target queues. Word length.
|
ItemStackPtr = $7E0226 ; Pointer into Item GFX and VRAM target queues. Word length.
|
||||||
|
; If not zero, pointer should always be left pointing at the
|
||||||
|
; next available slot in the stack during the frame.
|
||||||
SpriteID = $7E0230 ; 0x0A bytes. Receipt ID for main loop sprite we're handling.
|
SpriteID = $7E0230 ; 0x0A bytes. Receipt ID for main loop sprite we're handling.
|
||||||
ItemGFXQueue = $7E0230 ; Pointers to decompressed item tiles deferred to NMI loading. $10 bytes
|
|
||||||
ItemTargetQueue = $7E0240 ; Pointers to VRAM targets for ItemGFXQueue. $10 bytes
|
|
||||||
AncillaVelocityZ = $7E0294 ; 0x0A bytes
|
AncillaVelocityZ = $7E0294 ; 0x0A bytes
|
||||||
AncillaZCoord = $7E029E ; 0x0A bytes
|
AncillaZCoord = $7E029E ; 0x0A bytes
|
||||||
;
|
;
|
||||||
@@ -476,7 +476,10 @@ HUDArrowCount = $7EC760 ;
|
|||||||
HUDKeyDigits = $7EC764 ;
|
HUDKeyDigits = $7EC764 ;
|
||||||
;
|
;
|
||||||
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
|
BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
|
||||||
TotalItemCountTiles = $7ECB00 ; Cached total item count tiles for HUD. Four words high to low.
|
ItemGFXStack = $7ECB00 ; Pointers to source of decompressed item tiles deferred to NMI loading.
|
||||||
|
ItemGFXSBankStack = $7ECB20 ; Source bank byte for above.
|
||||||
|
ItemTargetStack = $7ECB40 ; Pointers to VRAM targets for ItemGFXStack.
|
||||||
|
TotalItemCountTiles = $7ECF00 ; Cached total item count tiles for HUD. Four words high to low.
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
; Bank 7F
|
; Bank 7F
|
||||||
@@ -485,7 +488,6 @@ DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes.
|
|||||||
|
|
||||||
DecompBuffer2 = $7F4000 ; Another buffer
|
DecompBuffer2 = $7F4000 ; Another buffer
|
||||||
|
|
||||||
|
|
||||||
base $7F5000
|
base $7F5000
|
||||||
RedrawFlag: skip 1 ;
|
RedrawFlag: skip 1 ;
|
||||||
skip 2 ; Unused
|
skip 2 ; Unused
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ SpritePrep_ShopKeeper:
|
|||||||
LDX.w #$0000
|
LDX.w #$0000
|
||||||
LDY.w #$0000
|
LDY.w #$0000
|
||||||
-
|
-
|
||||||
TYA : CMP.l ShopCapacity : !BLT ++ : JMP .stop : ++
|
TYA : CMP.l ShopCapacity : !BLT ++ : JMP .done : ++
|
||||||
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .stop : ++
|
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .done : ++
|
||||||
|
|
||||||
LDA.l ShopContentsTable, X : CMP.l ShopId : BEQ ++ : JMP .next : ++
|
LDA.l ShopContentsTable, X : CMP.l ShopId : BEQ ++ : JMP .next : ++
|
||||||
LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l ShopInventory, X : PLX
|
LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l ShopInventory, X : PLX
|
||||||
@@ -143,15 +143,9 @@ SpritePrep_ShopKeeper:
|
|||||||
.next
|
.next
|
||||||
INX #8
|
INX #8
|
||||||
JMP -
|
JMP -
|
||||||
.stop
|
|
||||||
REP #$20
|
|
||||||
LDA.w ItemQueuePtr
|
|
||||||
DEC #2
|
|
||||||
AND.w #$00E
|
|
||||||
STA.w ItemQueuePtr
|
|
||||||
SEP #$20
|
|
||||||
|
|
||||||
.done
|
.done
|
||||||
|
SEP #$20
|
||||||
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
|
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
|
||||||
.takeAll
|
.takeAll
|
||||||
|
|
||||||
@@ -199,19 +193,19 @@ SetupTileTransfer:
|
|||||||
TXA : LSR #2
|
TXA : LSR #2
|
||||||
CLC : ADC.w #!FREE_TILE_ALT
|
CLC : ADC.w #!FREE_TILE_ALT
|
||||||
.store_target
|
.store_target
|
||||||
LDX.w ItemQueuePtr
|
LDX.w ItemStackPtr
|
||||||
STA.w ItemTargetQueue,X
|
STA.l ItemTargetStack,X
|
||||||
|
|
||||||
TYA : ASL : TAX
|
TYA : ASL : TAX
|
||||||
LDA.l StandingItemGraphicsOffsets,X
|
LDA.l StandingItemGraphicsOffsets,X
|
||||||
LDX.w ItemQueuePtr
|
LDX.w ItemStackPtr
|
||||||
STA.w ItemGFXQueue,X
|
STA.l ItemGFXStack,X
|
||||||
|
|
||||||
TXA
|
TXA
|
||||||
INC #2
|
INC #2
|
||||||
AND.w #$000E
|
STA.l ItemStackPtr
|
||||||
STA.w ItemQueuePtr
|
|
||||||
TDC
|
LDA.w #$0000
|
||||||
REP #$10 ; set 16-bit index registers
|
REP #$10 ; set 16-bit index registers
|
||||||
SEP #$20
|
SEP #$20
|
||||||
RTS
|
RTS
|
||||||
|
|||||||
Reference in New Issue
Block a user