Shops VRAM transfer

This commit is contained in:
cassidoxa
2023-08-13 18:55:52 -04:00
parent aaf970b837
commit cc83fef9b0
3 changed files with 44 additions and 12 deletions

View File

@@ -35,7 +35,27 @@ PostNMIHookAction:
.return
STZ.w NMIAux ; zero bank byte of NMI hook pointer
+
JSR.w TransferItemGFX
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
JML.l PostNMIHookReturn
;--------------------------------------------------------------------------------
TransferItemGFX:
; 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.
REP #$30
LDX.w ItemQueuePtr : BEQ .done
-
LDA.w ItemGFXQueue,X : STA.w ItemGFXPtr
LDA.w ItemTargetQueue,X : STA.w ItemGFXTarget
PHX
JSL.l TransferItemToVRAM
REP #$10
PLX
DEX #2
BPL -
STZ.w ItemQueuePtr
.done
SEP #$30
RTS

View File

@@ -189,9 +189,11 @@ RaceGameFlag = $7E021B ;
MessageJunk = $7E0223 ; Zeroed but never used (?)
;
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
;CoolScratch = $7E0226 ; 0x5A bytes of free ram
SpriteID = $7E0230 ; 0x0A bytes
;
;CoolScratch = $7E0224 ; 0x5C bytes of free ram
ItemQueuePtr = $7E0226 ; Pointer into Item GFX and VRAM target queues. Word length.
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
AncillaZCoord = $7E029E ; 0x0A bytes
;

View File

@@ -136,7 +136,7 @@ SpritePrep_ShopKeeper:
TAY
REP #$30
LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX
JSR LoadTile
JSR.w SetupTileTransfer
PLY : PLX
INY #4
@@ -144,10 +144,12 @@ SpritePrep_ShopKeeper:
INX #8
JMP -
.stop
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux
REP #$20
LDA.w ItemQueuePtr
DEC #2
AND.w #$00E
STA.w ItemQueuePtr
SEP #$20
.done
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
@@ -188,7 +190,7 @@ dw $0100, $0000
;--------------------------------------------------------------------------------
; X - Tile Buffer Offset
; Y - Item ID
LoadTile:
SetupTileTransfer:
LDA.l ShopType : BIT.w #$0010 : BNE .alt_vram
TXA : LSR #2
CLC : ADC.w #!FREE_TILE
@@ -197,10 +199,18 @@ LoadTile:
TXA : LSR #2
CLC : ADC.w #!FREE_TILE_ALT
.store_target
STA.w ItemGFXTarget
LDX.w ItemQueuePtr
STA.w ItemTargetQueue,X
TYA : ASL : TAX
LDA.l StandingItemGraphicsOffsets,X : STA.w ItemGFXPtr
JSL.l TransferItemToVRAM
LDA.l StandingItemGraphicsOffsets,X
LDX.w ItemQueuePtr
STA.w ItemGFXQueue,X
TXA
INC #2
AND.w #$000E
STA.w ItemQueuePtr
TDC
REP #$10 ; set 16-bit index registers
SEP #$20