diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 976ba5e..9695e94 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -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 ;================================================================================ diff --git a/events.asm b/events.asm index 5f078a3..22f89a4 100644 --- a/events.asm +++ b/events.asm @@ -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" diff --git a/hooks.asm b/hooks.asm index 78b90c2..f603d2e 100644 --- a/hooks.asm +++ b/hooks.asm @@ -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 diff --git a/inventory.asm b/inventory.asm index 60abf0e..138a80d 100644 --- a/inventory.asm +++ b/inventory.asm @@ -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: ;-------------------------------------------------------------------------------- diff --git a/newitems.asm b/newitems.asm index 97f693a..176db05 100755 --- a/newitems.asm +++ b/newitems.asm @@ -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 diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index 502c187..e1393ce 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -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 diff --git a/shopkeeper.asm b/shopkeeper.asm index 2662c0d..45935d2 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -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" diff --git a/tables.asm b/tables.asm index 20de669..75ac004 100644 --- a/tables.asm +++ b/tables.asm @@ -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: diff --git a/utilities.asm b/utilities.asm index b81b0e1..e8a94e1 100644 --- a/utilities.asm +++ b/utilities.asm @@ -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 } ;--------------------------------------------------------------------------------