diff --git a/fairyfixes.asm b/fairyfixes.asm index 3183474..c62ea3a 100644 --- a/fairyfixes.asm +++ b/fairyfixes.asm @@ -54,3 +54,35 @@ FairyPond_Init: + : PLY RTL ;-------------------------------------------------------------------------------- +HappinessPond_Check: + LDA $A0 : CMP.b #$15 ;what we wrote over + PHP + BNE .done + + LDA.b #$72 + JSL Sprite_SpawnDynamically + + LDA $0FD8 : STA $0D10, Y + LDA $0FD9 : STA $0D30, Y + + LDA $0FDA : !SUB.b #$40 : STA $0D00, Y + LDA $0FDB : SBC.b #$00 : STA $0D20, Y + + LDA.b #$01 : STA $0DA0, Y + + LDA.b #$BB + JSL Sprite_SpawnDynamically + + LDA.b #$08 : STA $0DD0, Y ; ensure we run prep for the shopkeeper + + LDA $0FD8 : STA $0D10, Y + LDA $0FD9 : STA $0D30, Y + + LDA $0FDA : !SUB.b #$20 : STA $0D00, Y + LDA $0FDB : SBC.b #$00 : STA $0D20, Y + + STZ $0DD0, X ; self terminate + + .done + PLP +RTL diff --git a/hooks.asm b/hooks.asm index 4fe462b..8f7f5b8 100755 --- a/hooks.asm +++ b/hooks.asm @@ -1547,9 +1547,9 @@ JSL.l DialogGanon1 org $1D9078 ; <- E9078 - sprite_ganon.asm:552 (LDA.b #$70 : STA $1CF0) JSL.l DialogGanon2 : RTS ;-------------------------------------------------------------------------------- -;-- Disable Capitalism fairy -org $06C454 ; <- 34454 - sprite_ponds.asm:133 (LDA $0D80, X) -LDA.b #$00 : NOP +;-- Convert Capitalism fairy to shop +org $06C4BD ; <- 34C4BD - sprite_ponds.asm:107 (LDA $A0 : CMP.b #$15 : BEQ Sprite_HappinessPond) +JSL.l HappinessPond_Check ;-------------------------------------------------------------------------------- ;-- Sahasrahla (no green pendant) org $05F16C ; <- 2F16C sprite_elder.asm:137 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) diff --git a/shopkeeper.asm b/shopkeeper.asm index 20d140f..d099c07 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -219,7 +219,18 @@ SpritePrep_ShopKeeper: LDA.b #$00 ++ STA !SHOP_STATE - + + ; If the item is $FF, make it not show (as if already taken) + LDA !SHOP_INVENTORY : CMP.b #$FF : BNE + + LDA !SHOP_STATE : ORA Shopkeeper_ItemMasks : STA !SHOP_STATE + + + LDA !SHOP_INVENTORY+4 : CMP.b #$FF : BNE + + LDA !SHOP_STATE : ORA Shopkeeper_ItemMasks+1 : STA !SHOP_STATE + + + LDA !SHOP_INVENTORY+8 : CMP.b #$FF : BNE + + LDA !SHOP_STATE : ORA Shopkeeper_ItemMasks+2 : STA !SHOP_STATE + + + PLP : PLY : PLX LDA.l !SHOP_TYPE : CMP.b #$FF : BNE + @@ -275,7 +286,44 @@ Shopkeeper_UploadVRAMTiles: LDA #$80 : STA $4302 ; set bus A source address to tile buffer LDA #$A1 : STA $4303 LDA #$7E : STA $4304 - + + LDA !SHOP_TYPE : AND.b #$10 : BNE .special + BRL .normal + + .special + + LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40 + LDA #$40 : STA $2116 ; set VRAM register destination address + LDA #$5A : 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 VRAM register destination address + LDA #$5B : 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 VRAM register destination address + LDA #$5A : 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 VRAM register destination address + LDA #$5B : STA $2117 + LDA #$01 : STA $420B ; begin DMA transfer + + LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40 + LDA #$80 : STA $2116 ; set VRAM register destination address + LDA #$5A : STA $2117 + LDA #$01 : STA $420B ; begin DMA transfer + + LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40 + LDA #$80 : STA $2116 ; set VRAM register destination address + LDA #$5B : STA $2117 + LDA #$01 : STA $420B ; begin DMA transfer + BRL .end + + .normal LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40 LDA #$60 : STA $2116 ; set VRAM register destination address LDA #$5C : STA $2117 @@ -306,6 +354,7 @@ Shopkeeper_UploadVRAMTiles: LDA #$5D : STA $2117 LDA #$01 : STA $420B ; begin DMA transfer ;-------------------------------------------------------------------------------- + .end PLA : STA $4306 ; restore DMA parameters PLA : STA $4305 ; restore DMA parameters PLA : STA $4304 ; restore DMA parameters @@ -404,7 +453,7 @@ dw 0, 0 : db , $40, $00, $02 endmacro ;-------------------------------------------------------------------------------- Shopkeeper_DrawMerchant: - LDA.l !SHOP_MERCHANT : AND.b #$03 + LDA.l !SHOP_MERCHANT : AND.b #$07 BEQ Shopkeeper_DrawMerchant_Type0 CMP.b #$01 : BNE + : BRL Shopkeeper_DrawMerchant_Type1 : + CMP.b #$02 : BNE + : BRL Shopkeeper_DrawMerchant_Type2 : + @@ -684,6 +733,13 @@ Shopkeeper_DrawNextItem: .potion LDA.b #$C0 ; potion is #$C0 because it's already there in VRAM + + XBA + + LDA !SHOP_TYPE : AND.b #$10 : BEQ + + XBA : !SUB #$22 : XBA ; alt vram + + + XBA + STA.l !SPRITE_OAM+4 LDA.l !SHOP_INVENTORY, X ; get item palette diff --git a/tables.asm b/tables.asm index 9947154..4cac3de 100644 --- a/tables.asm +++ b/tables.asm @@ -1473,27 +1473,33 @@ org $30C000 ; PC 0x184000 - 0x184007 ItemSubstitutionRules: ;db [item][quantity][substitution][pad] - CURRENT LIMIT 16 ENTRIES db $12, $01, $35, $FF +db $51, $06, $52, $FF +db $53, $06, $54, $FF db $FF, $FF, $FF, $FF ;-------------------------------------------------------------------------------- ; 0x184008 - 0x1847FF (unused) ;================================================================================ -;shop_config - tda- --qq +;shop_config - tdav --qq ; t - 0=Shop - 1=TakeAny ; d - 0=Check Door - 1=Skip Door Check ; a - 0=Shop/TakeAny - 1=TakeAll +; v - 0=normal vram, 1= alt vram ; qq - # of items for sale -;shopkeeper_config - ppp- --ss +;shopkeeper_config - ppp- -sss ; ppp - palette -; ss - sprite type +; sss - sprite type org $30C800 ; PC 0x184800 - 0x1848FF - max 32 shops ; do not exceed 36 tracked items sram_index > ($24) ShopTable: ;db [id][roomID-low][roomID-high][doorID][zero][shop_config][shopkeeper_config][sram_index] +db $01, $15, $01, $5D, $00, $12, $04, $00 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF org $30C900 ; PC 0x184900 - 0x184FFF - max 224 entries ShopContentsTable: ;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high] +db $01, $51, $64, $00, $07, $FF, $00, $00 +db $01, $53, $64, $00, $07, $FF, $00, $00 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ;================================================================================ org $30D000 ; PC 0x185000 - 0x18503F