let's dev 2/11/18

fixes for retro/shops/generic keys
This commit is contained in:
Karkat
2018-02-11 00:02:49 -05:00
parent 6728d21fd5
commit ac274f444c
9 changed files with 173 additions and 55 deletions

View File

@@ -26,7 +26,7 @@ org $3FFFFF ; <- 1FFFFF
db #$00 ; expand file to 2mb
org $1FFFF8 ; <- FFFF8 timestamp rom
db #$20, #$18, #$02, #$09 ; year/month/day
db #$20, #$18, #$02, #$11 ; year/month/day
;================================================================================

View File

@@ -50,6 +50,9 @@ OnFileLoad:
JSL.l InitOpenMode
LDA #$FF : STA !RNG_ITEM_LOCK_IN ; reset rng item lock-in
LDA #$00 : STA $7F5001 ; mark fake flipper softlock as impossible
LDA.l GenericKeys : BEQ +
LDA $7EF38B : STA $7EF36F ; copy generic keys to key counter
+
RTL
;--------------------------------------------------------------------------------
!RNG_ITEM_LOCK_IN = "$7F5090"

View File

@@ -989,8 +989,8 @@ STA $7EC760 ; nudge arrow 10s digit right
org $0DFCE8 ; <- 6FCE8
STA $7EC762 ; nudge arrow 1s digit right
org $0DFD0A ; <- 6FD0A - headsup_display.asm : 900
STA $7EC766 ; nudge key digit right
;org $0DFD0A ; <- 6FD0A - headsup_display.asm : 900
;STA $7EC766 ; nudge key digit right
org $0DFD13 ; <- 6FD13 - headsup_display.asm : 905
STA $7EC726 ; key icon blank
@@ -1135,6 +1135,9 @@ JSL.l EndRainState : NOP #2
;================================================================================
; Generic Keys
;--------------------------------------------------------------------------------
org $028157 ; <- 10157 - Bank02.asm:381 - (LDA $040C : CMP.b #$FF : BEQ .notPalace)
JSL.l CheckKeys : NOP
;--------------------------------------------------------------------------------
org $028166 ; <- 10166 - Bank02.asm:396 - (LDA $7EF37C, X)
JSL.l LoadKeys
;--------------------------------------------------------------------------------
@@ -1150,6 +1153,12 @@ JSL.l SaveKeys
org $0282EC ; <- 102EC - Bank02.asm:650 - (STA $7EF36F)
JSL.l ClearOWKeys
;--------------------------------------------------------------------------------
org $0DFA80 ; <- 6FA80 ; headsup_display.asm:596 - (LDA.b #$00 : STA $7EC017)
JSL.l HUDRebuildIndoor : NOP #4
;--------------------------------------------------------------------------------
org $0DFD02 ; <- 6FD02 ; headsup_display.asm:900 - (LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC764)
JSL.l DrawKeyIcon : NOP #8
;--------------------------------------------------------------------------------
;================================================================================
; Pendant / Crystal Fixes

View File

@@ -800,6 +800,24 @@ UpgradeFlute:
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; CheckKeys:
;--------------------------------------------------------------------------------
CheckKeys:
LDA.l GenericKeys : BEQ + : RTL : +
LDA $040C : CMP.b #$FF
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; DrawKeyIcon:
;--------------------------------------------------------------------------------
DrawKeyIcon:
LDA $04 : AND.w #$00FF : CMP.w #$0090 : BNE + : LDA.w #$007F : + : ORA.w #$2400 : STA $7EC764
LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC766
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
; LoadKeys:
;--------------------------------------------------------------------------------

View File

@@ -316,10 +316,15 @@ AddReceivedItemExpandedGetItem:
+ CMP.b #$A0 : !BLT + : CMP.b #$B0 : !BGE + ; Free Small Key
AND #$0F : TAX
LDA $7EF37C, X : INC : STA $7EF37C, X ; Increment Key Count
TXA : ASL : CMP $040C : BNE ++
LDA.l GenericKeys : BEQ +
.generic
LDA $7EF36F : INC : STA $7EF36F
++
BRL .done
BRL .done
.normal
TXA : ASL : CMP $040C : BNE ++
LDA $7EF36F : INC : STA $7EF36F
++
BRL .done
+
.done
PLX

View File

@@ -18,6 +18,17 @@ FlipLWDWFlag:
PLP
RTL
;================================================================================
HUDRebuildIndoor:
LDA.l GenericKeys : BEQ .normal
.generic
LDA.b #$00 : STA $7EC017
LDA $7EF38B ; generic key count
RTL
.normal
LDA.b #$00 : STA $7EC017
LDA.b #$FF ; don't show keys
RTL
;================================================================================
GetCrystalNumber:
PHX
TXA : ASL : TAX

View File

@@ -131,6 +131,7 @@ RTS
!SCRATCH_CAPACITY = "$7F5060"
!SCRATCH_TEMP_X = "$7F5061"
!SHOP_SRAM_INDEX = "$7F5062"
!SHOP_MERCHANT = "$7F5063"
;--------------------------------------------------------------------------------
.digit_properties
dw $0230, $0231, $0202, $0203, $0212, $0213, $0222, $0223, $0232, $0233
@@ -152,6 +153,7 @@ SpritePrep_ShopKeeper:
SEP #$20 ; set 8-bit accumulator
LDA ShopTable, X : STA !SHOP_ID
LDA ShopTable+5, X : STA !SHOP_TYPE
LDA ShopTable+6, X : STA !SHOP_MERCHANT
AND.b #$03 : ASL #2 : STA !SCRATCH_CAPACITY
TXA : LSR #3 : PHA : ASL : !ADD 1,s : STA !SHOP_SRAM_INDEX : PLA
BRA .success
@@ -202,9 +204,9 @@ SpritePrep_ShopKeeper:
LDA 1,s : TAX : LDA.l .tile_offsets, X : TAX
JSR LoadTile
PLY : PLX
INX #8
INY #4
+
INX #8
BRL -
@@ -277,32 +279,32 @@ UploadVRAMTiles:
LDA #$7E : STA $4304
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
STZ $2116 ; set WRAM register source address
LDA #$60 : STA $2116 ; set VRAM register destination address
LDA #$5E : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
LDA #$60 : STA $2116 ; set WRAM register source address
LDA #$5F : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
LDA #$20 : STA $2116 ; set VRAM register destination address
LDA #$5C : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
STZ $2116 ; set WRAM register source address
LDA #$20 : STA $2116 ; set VRAM register destination address
LDA #$5D : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
LDA #$20 : STA $2116 ; set WRAM register source address
LDA #$40 : STA $2116 ; set VRAM register destination address
LDA #$5C : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
LDA #$20 : STA $2116 ; set WRAM register source address
LDA #$5D : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
LDA #$40 : STA $2116 ; set WRAM register source address
LDA #$5C : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
LDA #$40 : STA $2116 ; set WRAM register source address
LDA #$40 : STA $2116 ; set VRAM register destination address
LDA #$5D : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
;--------------------------------------------------------------------------------
@@ -333,22 +335,7 @@ Sprite_ShopKeeper:
JSL.l Sprite_PlayerCantPassThrough
; Draw Shopkeeper
LDA.b #$02 : STA $06 ; request 2 OAM slots
LDA #$08 : JSL.l OAM_AllocateFromRegionA ; request 8 bytes
LDA.b #$02 : STA $06 ; request 2 OAM slots
STZ $07
LDA $1A : AND #$10 : BEQ +
LDA.b #.oam_shopkeeper_f1 : STA $08
LDA.b #.oam_shopkeeper_f1>>8 : STA $09
BRA ++
+
LDA.b #.oam_shopkeeper_f2 : STA $08
LDA.b #.oam_shopkeeper_f2>>8 : STA $09
++
;LDA.b #$01 : STA.l !SKIP_EOR
JSL.l Sprite_DrawMultiple_quantity_preset
LDA $90 : !ADD.b #$04*2 : STA $90 ; increment oam pointer
LDA $92 : INC #2 : STA $92
JSR.w Shopkeeper_DrawMerchant
LDA.l !SHOP_TYPE : AND.b #$80 : BEQ + ; Take-any
PHX
@@ -373,12 +360,54 @@ Sprite_ShopKeeper:
PLB
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant:
LDA.l !SHOP_MERCHANT : AND.b #$0F
BEQ Shopkeeper_DrawMerchant_Type0
CMP.b #$01 : BEQ Shopkeeper_DrawMerchant_Type1
Shopkeeper_DrawMerchant_Type0:
LDA.b #$02 : STA $06 ; request 2 OAM slots
LDA #$08 : JSL.l OAM_AllocateFromRegionA ; request 8 bytes
STZ $07
LDA $1A : AND #$10 : BEQ +
LDA.b #.oam_shopkeeper_f1 : STA $08
LDA.b #.oam_shopkeeper_f1>>8 : STA $09
BRA ++
+
LDA.b #.oam_shopkeeper_f2 : STA $08
LDA.b #.oam_shopkeeper_f2>>8 : STA $09
++
JSL.l Sprite_DrawMultiple_quantity_preset
LDA $90 : !ADD.b #$04*2 : STA $90 ; increment oam pointer
LDA $92 : INC #2 : STA $92
RTS
.oam_shopkeeper_f1
dw 0, -8 : db $00, $0C, $00, $02
dw 0, 0 : db $10, $0C, $00, $02
dw 0, -8 : db $00, $0A, $00, $02
dw 0, 0 : db $10, $0A, $00, $02
.oam_shopkeeper_f2
dw 0, -8 : db $00, $0C, $00, $02
dw 0, 0 : db $10, $4C, $00, $02
dw 0, -8 : db $00, $0A, $00, $02
dw 0, 0 : db $10, $4A, $00, $02
;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant_Type1:
LDA.b #$01 : STA $06 ; request 1 OAM slot
LDA #$04 : JSL.l OAM_AllocateFromRegionA ; request 4 bytes
STZ $07
LDA $1A : AND #$08 : BEQ +
LDA.b #.oam_shopkeeper_f1 : STA $08
LDA.b #.oam_shopkeeper_f1>>8 : STA $09
BRA ++
+
LDA.b #.oam_shopkeeper_f2 : STA $08
LDA.b #.oam_shopkeeper_f2>>8 : STA $09
++
JSL.l Sprite_DrawMultiple_quantity_preset
LDA $90 : !ADD.b #$04 : STA $90 ; increment oam pointer
LDA $92 : INC : STA $92
RTS
.oam_shopkeeper_f1
dw 0, 0 : db $46, $0A, $00, $02
.oam_shopkeeper_f2
dw 0, 0 : db $46, $4A, $00, $02
;--------------------------------------------------------------------------------
Shopkeeper_SetupHitboxes:
PHX : PHY : PHP
@@ -569,7 +598,7 @@ RTS
;--------------------------------------------------------------------------------
Shopkeeper_DrawNextItem:
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BNE .next
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : BRL .next : +
PHY
TYA : ASL #2 : TAY
@@ -582,8 +611,16 @@ Shopkeeper_DrawNextItem:
++
SEP #$20 ; set 8-bit accumulator
PLY
LDA.w .tile_indices, Y ; get item gfx index
LDA.l !SHOP_INVENTORY, X ; get item id
CMP.b #$2E : BNE + : BRA .potion
+ CMP.b #$2F : BNE + : BRA .potion
+ CMP.b #$30 : BEQ .potion
.normal
LDA.w .tile_indices, Y : BRA + ; get item gfx index
.potion
LDA.b #$C0 ; potion is #$C0 because it's already there in VRAM
+
STA.l !SPRITE_OAM+4
LDA.l !SHOP_INVENTORY, X ; get item palette
@@ -620,7 +657,7 @@ dw -40, 40
dw 8, 40
dw 56, 40
.tile_indices
db $C0, $C2, $C4
db $E6, $C2, $C4
;--------------------------------------------------------------------------------
!COLUMN_LOW = "$7F5022"
!COLUMN_HIGH = "$7F5023"

View File

@@ -1415,19 +1415,54 @@ db $FF, $FF, $FF, $FF
; t - 0=Shop - 1=TakeAny
; d - 0=Check Door - 1=Skip Door Check
; qq - # of items for sale
;shopkeeper_config - -ppp --ss
; ppp - palette
; ss - sprite type
org $30C800 ; PC 0x184800 - 0x18487F - max 16 shops
ShopTable:
;db [id][roomID-low][roomID-high][doorID][zero][shop_config][pad][pad]
;db $01, $1F, $01, $46, $00, $03, $00, $00 ; Kakariko shop
;db $FF, $12, $01, $58, $00, $03, $00, $00
;db [id][roomID-low][roomID-high][doorID][zero][shop_config][shopkeeper_config][pad]
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
db $00, $12, $01, $6E, $00, $03, $51, $00
db $01, $10, $01, $75, $00, $03, $50, $00
db $02, $0F, $01, $57, $00, $03, $50, $00
db $03, $0F, $01, $60, $00, $03, $50, $00
db $04, $0F, $01, $6F, $00, $03, $50, $00
db $05, $FF, $00, $00, $00, $03, $50, $00
db $06, $1F, $01, $46, $00, $03, $50, $00
db $FF, $12, $01, $58, $00, $03, $50, $00
org $30C880 ; PC 0x184880 - 0x184FFF - max 240 entries
ShopContentsTable:
;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high]
db $FF, $AF, $50, $00, $00, $FF, $00, $00
db $FF, $27, $0A, $00, $00, $FF, $00, $00
db $FF, $12, $F4, $01, $01, $2F, $3C, $00
;db $FF, $AF, $50, $00, $00, $FF, $00, $00
;db $FF, $31, $0A, $00, $00, $FF, $00, $00
;db $FF, $12, $F4, $01, $01, $2F, $3C, $00
db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
;db $00, $2E, $96, $00, $00, $FF, $00, $00
;db $00, $AF, $50, $00, $00, $FF, $00, $00
;db $00, $31, $32, $00, $00, $FF, $00, $00
;db $01, $05, $F4, $01, $00, $FF, $00, $00
;db $01, $AF, $50, $00, $00, $FF, $00, $00
;db $01, $44, $1E, $00, $00, $FF, $00, $00
;db $02, $2E, $96, $00, $00, $FF, $00, $00
;db $02, $AF, $50, $00, $00, $FF, $00, $00
;db $02, $31, $32, $00, $00, $FF, $00, $00
;db $03, $2E, $96, $00, $00, $FF, $00, $00
;db $03, $AF, $50, $00, $00, $FF, $00, $00
;db $03, $31, $32, $00, $00, $FF, $00, $00
;db $04, $2E, $96, $00, $00, $FF, $00, $00
;db $04, $AF, $50, $00, $00, $FF, $00, $00
;db $04, $31, $32, $00, $00, $FF, $00, $00
;db $05, $2E, $96, $00, $00, $FF, $00, $00
;db $05, $AF, $50, $00, $00, $FF, $00, $00
;db $05, $31, $32, $00, $00, $FF, $00, $00
;db $06, $2E, $96, $00, $00, $FF, $00, $00
;db $06, $AF, $50, $00, $00, $FF, $00, $00
;db $06, $31, $32, $00, $00, $FF, $00, $00
;db $FF, $2E, $96, $00, $00, $FF, $00, $00
;db $FF, $AF, $50, $00, $00, $FF, $00, $00
;db $FF, $31, $32, $00, $00, $FF, $00, $00
;db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF
;================================================================================
org $30D000
MSUTrackList:

View File

@@ -335,10 +335,10 @@ RTL
{
.smallSprites
db $04, $07, $08, $09, $0A, $0B, $0C, $13
db $15, $18, $24, $2A, $31, $34, $35, $36
db $42, $43, $45, $59, $A0, $A1, $A2, $A3
db $A4, $A5, $A6, $A7, $A8, $A9, $AA, $AB
db $AC, $AD, $AE, $AF, $FF, $FF, $FF, $FF
db $15, $18, $24, $2A, $34, $35, $36, $42
db $43, $45, $59, $A0, $A1, $A2, $A3, $A4
db $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC
db $AD, $AE, $AF, $FF, $FF, $FF, $FF, $FF
}
;--------------------------------------------------------------------------------