Fixing bugs with pottery lottery
This commit is contained in:
@@ -23,7 +23,7 @@ DrawDungeonCompassCounts:
|
|||||||
INC
|
INC
|
||||||
+ TAX : LDA.l CompassTotal, X : AND #$00FF
|
+ TAX : LDA.l CompassTotal, X : AND #$00FF
|
||||||
SEP #$20
|
SEP #$20
|
||||||
JSR HudHexToDec2Digit
|
JSR HudHexToDec3Digit
|
||||||
REP #$20
|
REP #$20
|
||||||
PHX
|
PHX
|
||||||
LDX.b $06 : TXA : ORA #$2400 : STA $7EC79A
|
LDX.b $06 : TXA : ORA #$2400 : STA $7EC79A
|
||||||
@@ -32,7 +32,7 @@ DrawDungeonCompassCounts:
|
|||||||
|
|
||||||
LDA $7EF4BF, X : AND #$00FF
|
LDA $7EF4BF, X : AND #$00FF
|
||||||
SEP #$20
|
SEP #$20
|
||||||
JSR HudHexToDec2Digit
|
JSR HudHexToDec3Digit
|
||||||
REP #$20
|
REP #$20
|
||||||
|
|
||||||
LDX.b $06 : TXA : ORA #$2400 : STA $7EC794 ; Draw the item count
|
LDX.b $06 : TXA : ORA #$2400 : STA $7EC794 ; Draw the item count
|
||||||
|
|||||||
@@ -1,180 +1,173 @@
|
|||||||
|
; where we shove the decompressed graphics to send to WRAM
|
||||||
|
DynamicDropGFX = $7EF500
|
||||||
|
|
||||||
StandItemGFXIDs = $7E07E0 ; 0x8 bytes for IDs
|
; this will just count from 0 to 4 to determine which slot we're using
|
||||||
StandingItemTransferGFX = $7E07E8 ; bit field for item transfers
|
; we're expecting 5 items max per room, and order is irrelevant
|
||||||
SICharRecID = $7E07E9 ; ID of receipt item for temp use
|
; we just need to keep track of where they go
|
||||||
SICharSource = $7E07EA ; source address of the sprite's graphics
|
DynamicDropGFXIndex = $7E1E70
|
||||||
SIVRAMAddr = $7E07ED ; VRAM address to write the next slot to
|
|
||||||
SIVRAMSlot = $7E07EF ; current vram slot to ask for
|
|
||||||
SprSIChar = $7E07F0 ; standing item character for draw routine
|
|
||||||
|
|
||||||
;===================================================================================================
|
; this will keep track of the above for each item
|
||||||
|
SprItemGFX = $7E0780
|
||||||
|
|
||||||
|
; this is the item requested and a flag
|
||||||
|
DynamicDropRequest = $7E1E71
|
||||||
|
DynamicDropQueue = $7E1E72
|
||||||
|
|
||||||
SpriteDraw_DynamicStandingItem:
|
; Come in with
|
||||||
JSL Sprite_PrepOAMCoord_long ; 06E41C
|
; A = item receipt ID
|
||||||
|
; X = slot
|
||||||
LDA.b $00 : STA.b ($90),Y
|
|
||||||
|
|
||||||
LDA.b $01 : CMP.b #$01
|
|
||||||
LDA.b #$01 : ROL : STA.b ($92)
|
|
||||||
|
|
||||||
INY
|
|
||||||
|
|
||||||
REP #$21
|
|
||||||
|
|
||||||
LDA.b $02 : ADC.w #$0010
|
|
||||||
CMP.w #$0100
|
|
||||||
|
|
||||||
SEP #$20 : BCS .off_screen
|
|
||||||
|
|
||||||
SBC.b #$0F : STA.b ($90),Y
|
|
||||||
|
|
||||||
INY
|
|
||||||
|
|
||||||
LDA.w SprDropsItem,X : STA.b ($90),Y
|
|
||||||
|
|
||||||
INY
|
|
||||||
|
|
||||||
LDA.b $05 : STA.b ($90),Y
|
|
||||||
|
|
||||||
.off_screen
|
|
||||||
JML SpriteDraw_Shadow_long ; 06DC5C
|
|
||||||
|
|
||||||
; Call from standing/dropped items to request a free slot in VRAM in underworld
|
|
||||||
; Enter with
|
|
||||||
; A = receipt ID
|
|
||||||
; X = sprite slot
|
|
||||||
RequestStandingItemVRAMSlot:
|
RequestStandingItemVRAMSlot:
|
||||||
JSR SetSISource
|
STA.w DynamicDropQueue
|
||||||
JSR GetSIVRAMSlot
|
LDA.b #$01
|
||||||
RTL
|
STA.w DynamicDropRequest
|
||||||
|
|
||||||
; Take 8-bit receipt ID and turn it into a 24-bit source graphics address
|
|
||||||
; how we use this is TBD
|
|
||||||
; we could set up a buffer of 8 24-bit addresses to reference during NMI
|
|
||||||
; and we may or may not do decompression from here
|
|
||||||
SetSISource:
|
|
||||||
STA.w SICharRecID
|
|
||||||
PHX ; make sure X is preserved during this
|
|
||||||
|
|
||||||
PLX
|
|
||||||
STA.w SICharSource+1
|
|
||||||
STY.w SICharSource+2 ; don't need to use Y, but just as an example
|
|
||||||
|
|
||||||
RTS
|
|
||||||
|
|
||||||
GetSIVRAMSlot:
|
|
||||||
SEP #$30
|
|
||||||
|
|
||||||
PHX
|
|
||||||
|
|
||||||
LDA.w SIVRAMSlot : TAX
|
|
||||||
|
|
||||||
|
LDA.w DynamicDropGFXIndex
|
||||||
INC
|
INC
|
||||||
CMP.b #$07 : BCC .fine
|
CMP.b #$05 : BCC .fine
|
||||||
|
|
||||||
LDA.b #$00
|
LDA.b #$00
|
||||||
|
|
||||||
.fine
|
.fine
|
||||||
STA.w SIVRAMSlot
|
STA.w DynamicDropGFXIndex
|
||||||
|
STA.w SprItemGFX,X
|
||||||
|
|
||||||
; flag this slot for a transfer
|
|
||||||
LDA.l .eightbits,X
|
|
||||||
ORA.l StandingItemTransferGFX
|
|
||||||
STA.l StandingItemTransferGFX
|
|
||||||
|
|
||||||
; set grapgics ID to look up for NMI transfer
|
; decompress graphics
|
||||||
LDA.w SICharRecID
|
PHX
|
||||||
STA.w StandItemGFXIDs,X
|
LDX.w DynamicDropQueue
|
||||||
|
|
||||||
LDA.l .char,X
|
REP #$20
|
||||||
|
LDA.w #DynamicDropGFX-$7E9000
|
||||||
|
STA.l !TILE_UPLOAD_OFFSET_OVERRIDE
|
||||||
|
SEP #$20
|
||||||
|
|
||||||
|
LDA.w DynamicDropQueue
|
||||||
|
JSL.l GetSpriteID
|
||||||
|
JSL.l GetAnimatedSpriteTile_variable
|
||||||
|
|
||||||
|
SEP #$30
|
||||||
PLX
|
PLX
|
||||||
|
|
||||||
STA.w SprSIChar,X
|
RTL
|
||||||
|
|
||||||
RTS
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.char
|
|
||||||
db $20
|
|
||||||
db $22
|
|
||||||
db $2C
|
|
||||||
db $CB
|
|
||||||
db $E0
|
|
||||||
db $E5
|
|
||||||
db $EE
|
|
||||||
|
|
||||||
.eightbits
|
|
||||||
db 1<<0
|
|
||||||
db 1<<1
|
|
||||||
db 1<<2
|
|
||||||
db 1<<3
|
|
||||||
db 1<<4
|
|
||||||
db 1<<5
|
|
||||||
db 1<<6
|
|
||||||
db 1<<7
|
|
||||||
|
|
||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
|
|
||||||
NMI_TransferSIGFX:
|
TransferPotGFX:
|
||||||
LDA.l StandingItemTransferGFX
|
SEP #$10
|
||||||
BEQ .exit
|
|
||||||
|
|
||||||
REP #$20
|
REP #$20
|
||||||
AND.w #$00FF
|
LDX.w DynamicDropRequest
|
||||||
STA.b $00
|
BEQ .no
|
||||||
|
|
||||||
LDY.b #$80 : STY.w $2115
|
STZ.w DynamicDropRequest
|
||||||
|
|
||||||
LDX.b #$00
|
LDA.w DynamicDropGFXIndex
|
||||||
|
ASL
|
||||||
|
TAX
|
||||||
|
LDA.l FreeUWGraphics,X
|
||||||
|
STA.w $2116
|
||||||
|
|
||||||
.next
|
; calculate bottom row now
|
||||||
LSR.b $00 : BEQ .done : BCC .skip
|
CLC : ADC.w #$0200>>1 : PHA
|
||||||
|
|
||||||
PHX
|
LDX.b #$7E : STX.w $4314
|
||||||
|
LDA.w #DynamicDropGFX : STA.w $4302
|
||||||
|
|
||||||
TXY
|
LDX.b #$80 : STX.w $2115
|
||||||
TXA : ASL : TAX
|
LDA.w #$1801 : STA.w $4300
|
||||||
|
|
||||||
LDA.l .addr,X : STA.w $2116
|
LDA.w #$0040 : STA.w $4305
|
||||||
|
LDY.b #$01
|
||||||
|
|
||||||
; get source address based on ID
|
STY.w $420B
|
||||||
LDA.w StandItemGFXIDs,Y
|
STA.w $4305
|
||||||
; code
|
|
||||||
STA.b $04 ; source address
|
|
||||||
STY.w $4344 ; source bank
|
|
||||||
|
|
||||||
LDY.b #$10 ; DMA trigger
|
PLA
|
||||||
|
STA.w $2116
|
||||||
STA.w $4342 ; save address
|
|
||||||
LDA.w #$1801 : STA.w $4340 ; DMA type
|
|
||||||
LDA.w #64 : STA.w $4345 ; DMA size
|
|
||||||
STY.w $420B
|
STY.w $420B
|
||||||
|
|
||||||
STA.w $4345 ; DMA size again
|
.no
|
||||||
CLC
|
|
||||||
LDA.b $04 : ADC.w #$0200 : STA.w $4344 ; assuming we've got things in squares in ROM
|
|
||||||
STY.w $420B
|
|
||||||
|
|
||||||
PLX
|
|
||||||
|
|
||||||
.skip
|
|
||||||
INX
|
|
||||||
BRA .next
|
|
||||||
|
|
||||||
|
|
||||||
.done
|
|
||||||
SEP #$20
|
|
||||||
|
|
||||||
.exit
|
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
.addr
|
|
||||||
|
FreeUWGraphics:
|
||||||
dw $8800>>1
|
dw $8800>>1
|
||||||
dw $8840>>1
|
dw $8840>>1
|
||||||
dw $8980>>1
|
dw $8980>>1
|
||||||
dw $9960>>1
|
dw $9960>>1
|
||||||
dw $9C00>>1
|
dw $9DC0>>1
|
||||||
dw $9CA0>>1
|
|
||||||
dw $9DC0>>1
|
|
||||||
|
;===================================================================================================
|
||||||
|
|
||||||
|
DrawPotItem:
|
||||||
|
|
||||||
|
JSL.l IsNarrowSprite : BCS .narrow
|
||||||
|
|
||||||
|
.full
|
||||||
|
LDA.b #$01 : STA $06
|
||||||
|
LDA #$0C : JSL.l OAM_AllocateFromRegionC
|
||||||
|
LDA #$02 : PHA
|
||||||
|
REP #$20
|
||||||
|
LDA.w #DynamicOAMTile_full
|
||||||
|
BRA .draw
|
||||||
|
|
||||||
|
.narrow
|
||||||
|
LDA.b #$02 : STA $06
|
||||||
|
LDA #$10 : JSL.l OAM_AllocateFromRegionC
|
||||||
|
LDA #$03 : PHA
|
||||||
|
REP #$20
|
||||||
|
LDA.w #DynamicOAMTile_thin
|
||||||
|
.draw
|
||||||
|
PHB : PHK : PLB
|
||||||
|
|
||||||
|
STA.b $08
|
||||||
|
LDA.w SprItemGFX,X
|
||||||
|
AND.w #$00FF
|
||||||
|
ASL : ASL : ASL : ASL
|
||||||
|
ADC.b $08
|
||||||
|
STA.b $08
|
||||||
|
SEP #$20
|
||||||
|
STZ.b $07
|
||||||
|
|
||||||
|
JSL Sprite_DrawMultiple_quantity_preset
|
||||||
|
|
||||||
|
LDA.b $90 : CLC : ADC.b #$08 : STA.b $90
|
||||||
|
INC.b $92
|
||||||
|
INC.b $92
|
||||||
|
|
||||||
|
PLB
|
||||||
|
PLA
|
||||||
|
RTL
|
||||||
|
|
||||||
|
DynamicOAMTile_thin:
|
||||||
|
dw 0, 0 : db $40, $00, $20, $00
|
||||||
|
dw 0, 8 : db $50, $00, $20, $00
|
||||||
|
|
||||||
|
dw 0, 0 : db $42, $00, $20, $00
|
||||||
|
dw 0, 8 : db $52, $00, $20, $00
|
||||||
|
|
||||||
|
dw 0, 0 : db $4C, $00, $20, $00
|
||||||
|
dw 0, 8 : db $5C, $00, $20, $00
|
||||||
|
|
||||||
|
dw 0, 0 : db $CB, $00, $20, $00
|
||||||
|
dw 0, 8 : db $DB, $00, $20, $00
|
||||||
|
|
||||||
|
dw 0, 0 : db $EE, $00, $20, $00
|
||||||
|
dw 0, 8 : db $FE, $00, $20, $00
|
||||||
|
|
||||||
|
DynamicOAMTile_full:
|
||||||
|
dw -4, -1 : db $40, $00, $20, $02
|
||||||
|
dd 0, 0
|
||||||
|
|
||||||
|
dw -4, -1 : db $42, $00, $20, $02
|
||||||
|
dd 0, 0
|
||||||
|
|
||||||
|
dw -4, -1 : db $4C, $00, $20, $02
|
||||||
|
dd 0, 0
|
||||||
|
|
||||||
|
dw -4, -1 : db $CB, $00, $20, $02
|
||||||
|
dd 0, 0
|
||||||
|
|
||||||
|
dw -4, -1 : db $EE, $00, $20, $02
|
||||||
|
dd 0, 0
|
||||||
@@ -31,7 +31,13 @@ org $06d18d ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA
|
|||||||
JSL KeyGet
|
JSL KeyGet
|
||||||
|
|
||||||
org $06f9f3 ; bank06.asm : 6732 (JSL Sprite_LoadProperties)
|
org $06f9f3 ; bank06.asm : 6732 (JSL Sprite_LoadProperties)
|
||||||
JSL LoadProperties_PreserveItemMaybe
|
JSL LoadProperties_PreserveCertainProps
|
||||||
|
|
||||||
|
org $008BAA ; NMI hook
|
||||||
|
JSL TransferPotGFX
|
||||||
|
|
||||||
|
org $06828A
|
||||||
|
JSL CheckSprite_Spawn
|
||||||
|
|
||||||
|
|
||||||
; refs to other functions
|
; refs to other functions
|
||||||
@@ -214,7 +220,8 @@ RevealSpriteDrop:
|
|||||||
LDA #$02 : STA.l SpawnedItemFlag
|
LDA #$02 : STA.l SpawnedItemFlag
|
||||||
STX SpawnedItemIndex
|
STX SpawnedItemIndex
|
||||||
LDA.l SprItemReceipt, X : STA SpawnedItemID
|
LDA.l SprItemReceipt, X : STA SpawnedItemID
|
||||||
LDA.b #$01 : STA $0CBA, X : RTL ; trigger the small key routines
|
LDA.b #$01 : STA $0CBA, X ; trigger the small key routines
|
||||||
|
LDA.b #$09 : STA $0DD0, X : RTL ; unstun if stunned
|
||||||
.normal
|
.normal
|
||||||
LDA.w $0CBA, X : BNE .no_forced_drop
|
LDA.w $0CBA, X : BNE .no_forced_drop
|
||||||
RTL
|
RTL
|
||||||
@@ -233,25 +240,22 @@ db $40, $20
|
|||||||
; Runs during Sprite_E4_SmallKey and duning Sprite_E5_BigKey spawns
|
; Runs during Sprite_E4_SmallKey and duning Sprite_E5_BigKey spawns
|
||||||
ShouldSpawnItem:
|
ShouldSpawnItem:
|
||||||
LDA.l StandingItemsOn : BEQ .normal
|
LDA.l StandingItemsOn : BEQ .normal
|
||||||
; todo: check our sram table
|
; checking our sram table
|
||||||
PHX : PHY
|
PHX : PHY
|
||||||
REP #$30
|
REP #$30
|
||||||
LDA.b $A0 : ASL : TAY
|
LDA.b $A0 : ASL : TAY
|
||||||
LDA.l SpawnedItemIndex : ASL
|
LDA.w SprItemIndex, X : AND #$00FF : ASL
|
||||||
TAX : LDA.l BitFieldMasks, X : STA $00
|
PHX
|
||||||
TYX
|
TAX : LDA.l BitFieldMasks, X : STA $00
|
||||||
LDA.w SpawnedItemFlag : CMP #$0001 : BEQ +
|
PLX ; restore X again
|
||||||
LDA.l SpriteItemSRAM, X : BIT $00 : BEQ .notObtained
|
LDA.w SprItemFlags, X : AND #$00FF : CMP #$0001 : BEQ +
|
||||||
|
TYX : LDA.l SpriteItemSRAM, X : BIT $00 : BEQ .notObtained
|
||||||
BRA .obtained
|
BRA .obtained
|
||||||
+ LDA.l PotItemSRAM, X : BIT $00 : BEQ .notObtained
|
+ TYX : LDA.l PotItemSRAM, X : BIT $00 : BEQ .notObtained
|
||||||
.obtained
|
.obtained
|
||||||
SEP #$30 : PLY : PLX : LDA #$01 : RTL ; already obtained
|
SEP #$30 : PLY : PLX : LDA #$01 : RTL ; already obtained
|
||||||
.notObtained
|
.notObtained
|
||||||
SEP #$30 : PLY : PLX
|
SEP #$30 : PLY : PLX
|
||||||
LDA.w SpawnedItemIndex : STA SprItemIndex, X
|
|
||||||
LDA.w SpawnedItemFlag : STA SprItemFlags, X
|
|
||||||
LDA.w SpawnedItemMWPlayer : STA SprItemMWPlayer, X
|
|
||||||
; todo: RequestStandingItemVRAMSlot instead? - need to see how often this is called
|
|
||||||
LDA #$00 : RTL
|
LDA #$00 : RTL
|
||||||
.normal
|
.normal
|
||||||
LDA.w $0403
|
LDA.w $0403
|
||||||
@@ -277,13 +281,18 @@ MarkSRAMForItem:
|
|||||||
SpriteKeyPrep:
|
SpriteKeyPrep:
|
||||||
LDA.w $0B9B : STA.w $0CBA, X ; what we wrote over
|
LDA.w $0B9B : STA.w $0CBA, X ; what we wrote over
|
||||||
PHA
|
PHA
|
||||||
LDA.l SpawnedItemFlag : BEQ +
|
LDA.w SpawnedItemIndex : STA SprItemIndex, X
|
||||||
|
LDA.w SpawnedItemMWPlayer : STA SprItemMWPlayer, X
|
||||||
|
LDA.w SpawnedItemFlag : STA SprItemFlags, X : BEQ +
|
||||||
LDA.l SpawnedItemID : STA $0E80, X
|
LDA.l SpawnedItemID : STA $0E80, X
|
||||||
CMP #$24 : BNE ++ ; todo: check how the big key drop flows through this
|
PHA
|
||||||
|
JSL.l GetSpritePalette : STA $0F50, X ; setup the palette
|
||||||
|
PLA
|
||||||
|
CMP #$24 : BNE ++ ;
|
||||||
LDA $A0 : CMP.b #$80 : BNE +
|
LDA $A0 : CMP.b #$80 : BNE +
|
||||||
LDA SpawnedItemFlag : BNE +
|
LDA SpawnedItemFlag : BNE +
|
||||||
LDA #$24 ; it's the big key drop?
|
LDA #$24 ; it's the big key drop?
|
||||||
++ JSL PrepDynamicTile ; todo: remove in favor of RequestStandingItemVRAMSlot
|
++ JSL RequestStandingItemVRAMSlot
|
||||||
+ PLA
|
+ PLA
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
@@ -301,8 +310,7 @@ SpriteKeyDrawGFX:
|
|||||||
JML Sprite_DrawAbsorbable
|
JML Sprite_DrawAbsorbable
|
||||||
.jslrtsreturn
|
.jslrtsreturn
|
||||||
RTL
|
RTL
|
||||||
; todo : SpriteDraw_DynamicStandingItem here?
|
+ JSL DrawPotItem
|
||||||
+ JSL DrawDynamicTile ; see DrawHeartPieceGFX if problems
|
|
||||||
CMP #$03 : BNE +
|
CMP #$03 : BNE +
|
||||||
PHA : LDA $0E60, X : ORA.b #$20 : STA $0E60, X : PLA
|
PHA : LDA $0E60, X : ORA.b #$20 : STA $0E60, X : PLA
|
||||||
+ JSL.l Sprite_DrawShadowLong
|
+ JSL.l Sprite_DrawShadowLong
|
||||||
@@ -357,12 +365,30 @@ BigKeyGet:
|
|||||||
CLC : RTL
|
CLC : RTL
|
||||||
+ SEC : RTL
|
+ SEC : RTL
|
||||||
|
|
||||||
LoadProperties_PreserveItemMaybe:
|
LoadProperties_PreserveCertainProps:
|
||||||
|
LDA.l StandingItemsOn : BNE +
|
||||||
|
JML Sprite_LoadProperties
|
||||||
|
+ LDA $0F50, X : PHA
|
||||||
LDA $0E80, X : PHA
|
LDA $0E80, X : PHA
|
||||||
JSL Sprite_LoadProperties
|
JSL Sprite_LoadProperties
|
||||||
PLA : STA $0e80, X
|
PLA : STA $0E80, X
|
||||||
|
PLA : STA $0F50, X
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
CheckSprite_Spawn:
|
||||||
|
JSL Sprite_SpawnDynamically
|
||||||
|
BMI .check
|
||||||
|
RTL
|
||||||
|
.check
|
||||||
|
PHA
|
||||||
|
LDA $0D : CMP #$08 : BNE +
|
||||||
|
LDA.b #$3C ; SFX2_3C - error beep
|
||||||
|
STA.w $012E
|
||||||
|
+ PLA
|
||||||
|
RTL
|
||||||
|
|
||||||
|
incsrc dynamic_si_vram.asm
|
||||||
|
|
||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
; Pot items
|
; Pot items
|
||||||
;===================================================================================================
|
;===================================================================================================
|
||||||
|
|||||||
@@ -242,7 +242,8 @@ IncrementSmallKeysNoPrimary:
|
|||||||
JSL.l UpdateKeys
|
JSL.l UpdateKeys
|
||||||
LDA $1B : BEQ + ; skip room check if outdoors
|
LDA $1B : BEQ + ; skip room check if outdoors
|
||||||
PHP : REP #$20 ; set 16-bit accumulator
|
PHP : REP #$20 ; set 16-bit accumulator
|
||||||
LDA $048E : CMP.w #$0087 : BNE ++ ; hera basement
|
LDA $048E : CMP.w #$0087 : BNE ++ ; check for hera basement cage
|
||||||
|
LDA $A8 : AND #$0003 : CMP #$0002 : BNE ++ ; must be quadrant 2
|
||||||
PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal
|
PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal
|
||||||
LDA ShuffleKeyDrops : BNE +++
|
LDA ShuffleKeyDrops : BNE +++
|
||||||
JSR CountChestKey
|
JSR CountChestKey
|
||||||
|
|||||||
Reference in New Issue
Block a user