diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 3ce9b93..976ba5e 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, #$06 ; year/month/day +db #$20, #$18, #$02, #$09 ; year/month/day ;================================================================================ diff --git a/bugfixes.asm b/bugfixes.asm index 2c5bc4f..584190d 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -30,10 +30,30 @@ RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- -;0 = Become Permabunny +;0 = Become (Perma)bunny DecideIfBunny: LDA $7EF357 : BEQ + : RTL : + - LDA $7EF3CA : AND.b #$40 : EOR #$40 + LDA $7EF3CA : AND.b #$40 + PHA : LDA.l InvertedMode : BNE .inverted + .normal + PLA : EOR #$40 + BRA .done + .inverted + PLA + .done +RTL +;-------------------------------------------------------------------------------- +;0 = Become (Perma)bunny +DecideIfBunnyByScreenIndex: + LDA $7EF357 : BEQ + : RTL : + + LDA $8A : AND.b #$40 : PHA + LDA.l InvertedMode : BNE .inverted + .normal + PLA : EOR #$40 + BRA .done + .inverted + PLA + .done RTL ;-------------------------------------------------------------------------------- diff --git a/hooks.asm b/hooks.asm index 841024c..78b90c2 100644 --- a/hooks.asm +++ b/hooks.asm @@ -44,6 +44,18 @@ org $02E21B ; <- 1621B - Bank02.asm : 11211 (STA $040C) JSL.l OnDungeonExit : NOP #2 ;-------------------------------------------------------------------------------- +;================================================================================ +; Inverted Mode +;-------------------------------------------------------------------------------- +org $028413 ; <- 10413 - Bank02.asm : 853 (LDA $7EF357 : BNE .notBunny) +NOP #6 +JSL.l DecideIfBunny : db #$D0 ; BNE +;-------------------------------------------------------------------------------- +org $07AA44 ; <- 3AA44 - Bank07.asm : 853 (LDA $7EF357 : BNE .playerHasMoonPearl) +NOP #6 +JSL.l DecideIfBunnyByScreenIndex : db #$D0 ; BNE +;-------------------------------------------------------------------------------- + ;================================================================================ ; Hash Key Display ;-------------------------------------------------------------------------------- diff --git a/shopkeeper.asm b/shopkeeper.asm index b3f391f..2662c0d 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -146,7 +146,9 @@ SpritePrep_ShopKeeper: - LDA ShopTable+1, X : CMP $A0 : BNE + ;LDA ShopTable+3, X : CMP $010E : BNE + - LDA $7F5099 : AND #$00FF : CMP ShopTable+3, X : BNE + + LDA ShopTable+5, X : AND.w #$0040 : BNE ++ + LDA $7F5099 : AND #$00FF : CMP ShopTable+3, X : BNE + + ++ SEP #$20 ; set 8-bit accumulator LDA ShopTable, X : STA !SHOP_ID LDA ShopTable+5, X : STA !SHOP_TYPE @@ -154,8 +156,8 @@ SpritePrep_ShopKeeper: TXA : LSR #3 : PHA : ASL : !ADD 1,s : STA !SHOP_SRAM_INDEX : PLA BRA .success + - TXA : !ADD.w #$0008 : TAX LDA ShopTable, X : AND.w #$00FF : CMP.w #$00FF : BEQ .fail + INX #8 BRA - .fail @@ -218,6 +220,8 @@ SpritePrep_ShopKeeper: LDA.l !SHOP_TYPE : CMP.b #$FF : BNE + PLA : PLA : PLA + INC $0BA0, X + LDA $0E40, X JML.l ShopkeeperFinishInit + RTL @@ -345,7 +349,14 @@ Sprite_ShopKeeper: JSL.l Sprite_DrawMultiple_quantity_preset LDA $90 : !ADD.b #$04*2 : STA $90 ; increment oam pointer LDA $92 : INC #2 : STA $92 - + + LDA.l !SHOP_TYPE : AND.b #$80 : BEQ + ; Take-any + PHX + LDA !SHOP_SRAM_INDEX : TAX + LDA !SHOP_PURCHASE_COUNTS, X : BEQ ++ : PLX : BRA .done : ++ + PLX + + + ; Draw Items JSR.w Shopkeeper_DrawItems @@ -358,7 +369,7 @@ Sprite_ShopKeeper: ; 0x78 - Center ; 0x90 - Midpoint 2 ; 0xA8 - Right - + .done PLB RTL ;-------------------------------------------------------------------------------- @@ -389,9 +400,9 @@ Shopkeeper_SetupHitboxes: .no_contact JSR.w Setup_ShopItemInteractionHitbox - JSL.l Utility_CheckIfHitBoxesOverlapLong - BCC .no_interaction + JSL.l Utility_CheckIfHitBoxesOverlapLong : BCC .no_interaction LDA $F6 : AND.b #$80 : BEQ .no_interaction ; check for A-press + LDA $10 : CMP.b #$0C : !BGE .no_interaction ; don't interact in other modes besides game action JSR.w Shopkeeper_BuyItem .no_interaction INY #4 @@ -412,7 +423,6 @@ Shopkeeper_BuyItem: CMP.b #$30 : BEQ .refill ; Blue Potion Refill BRA + .refill - STA $FFFFFF JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles + @@ -428,6 +438,7 @@ Shopkeeper_BuyItem: LDA.b #$6B LDY.b #$01 JSL.l Sprite_ShowMessageUnconditional + LDA.b #$3C : STA $012E ; error sound BRA .done .buy REP #$20 : LDA $7EF360 : !SUB !SHOP_INVENTORY+1, X : STA $7EF360 : SEP #$20 ; Take price away @@ -435,11 +446,17 @@ Shopkeeper_BuyItem: LDA.l !SHOP_INVENTORY+3, X : INC : STA.l !SHOP_INVENTORY+3, X TXA : LSR #2 : TAX - LDA.l !SHOP_STATE : ORA.w Shopkeeper_ItemMasks, X : STA.l !SHOP_STATE - PHX - TXA : !ADD !SHOP_SRAM_INDEX : TAX - LDA !SHOP_PURCHASE_COUNTS, X : INC : BEQ + : STA !SHOP_PURCHASE_COUNTS, X : + - PLX + LDA !SHOP_TYPE : AND.b #$80 : BNE + + LDA.l !SHOP_STATE : ORA.w Shopkeeper_ItemMasks, X : STA.l !SHOP_STATE + PHX + TXA : !ADD !SHOP_SRAM_INDEX : TAX + LDA !SHOP_PURCHASE_COUNTS, X : INC : BEQ +++ : STA !SHOP_PURCHASE_COUNTS, X : +++ + PLX + BRA ++ + + ; Take-any + LDA.l !SHOP_STATE : ORA.b #$07 : STA.l !SHOP_STATE + PHX : LDA !SHOP_SRAM_INDEX : TAX : LDA.b #$01 : STA !SHOP_PURCHASE_COUNTS, X : PLX + ++ .done PLY : PLX RTS @@ -470,6 +487,10 @@ Setup_ShopItemCollisionHitbox: REP #$20 ; set 16-bit accumulator !ADD.w Shopkeeper_DrawNextItem_item_offsets+2, Y + PHA : LDA !SHOP_TYPE : AND.w #$0080 : BEQ + ; lower by 4 for Take-any + PLA : !ADD.w #$0004 + BRA ++ + + : PLA : ++ SEP #$20 ; set 8-bit accumulator ; store hitbox Y Low: $05, High $0B @@ -554,7 +575,11 @@ Shopkeeper_DrawNextItem: TYA : ASL #2 : TAY REP #$20 ; set 16-bit accumulator LDA.w .item_offsets, Y : STA.l !SPRITE_OAM - LDA.w .item_offsets+2, Y : STA.l !SPRITE_OAM+2 + LDA !SHOP_TYPE : AND.w #$0080 : BNE + + LDA.w .item_offsets+2, Y : STA.l !SPRITE_OAM+2 : BRA ++ + + + LDA.w .item_offsets+2, Y : !ADD.w #$0004 : STA.l !SPRITE_OAM+2 + ++ SEP #$20 ; set 8-bit accumulator PLY @@ -581,7 +606,9 @@ Shopkeeper_DrawNextItem: ++ PHX : PHA : LDA !SCRATCH_TEMP_X : TAX : PLA : JSR.w RequestItemOAM : PLX - JSR.w Shopkeeper_DrawNextPrice + LDA !SHOP_TYPE : AND.b #$80 : BNE + + JSR.w Shopkeeper_DrawNextPrice + + .next INY diff --git a/tables.asm b/tables.asm index c481480..20de669 100644 --- a/tables.asm +++ b/tables.asm @@ -103,7 +103,7 @@ db #$00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- org $308032 ; PC 0x180032 OpenMode: -db #$01 ; #$00 = Classic (default) - #$01 = Open +db #$01 ; #$00 = Normal (default) - #$01 = Open ;-------------------------------------------------------------------------------- org $308033 ; PC 0x180033 HeartBeep: @@ -193,6 +193,10 @@ org $308049 ; PC 0x180049 MenuCollapse: db #$00 ; #$00 = Press Start (default) - #$10 = Release Start ;-------------------------------------------------------------------------------- +org $30804A ; PC 0x18004A +InvertedMode: +db #$00 ; #$00 = Normal (default) - #$01 = Inverted +;-------------------------------------------------------------------------------- org $308080 ; PC 0x180080 Upgrade5BombsRefill: db #$00 @@ -1236,7 +1240,7 @@ db #$D0 ; #$D0 - Light-to-Dark (Default), #$F0 - Dark-to-Light, #$42 - Both Dire org $07A943 ; PC 013A943 (Bank07.asm:6548) (BNE) db #$D0 ; #$D0 - Dark-to-Light (Default), #$F0 - Light-to-Dark, #$42 - Both Directions ;Residual Portal -org $07A96D ; PC 013A96D (Bank07.asm:6579) (BEQ) +org $07A96D ; PC 013A96D (Bank07.asm:6578) (BEQ) db #$F0 ; #$F0 - Light Side (Default), #$D0 - Dark Side, #$42 - Both Sides org $07A9A7 ; PC 013A9A7 (Bank07.asm:6622) (BNE) db #$D0 ; #$D0 - Light Side (Default), #$F0 - Dark Side, #$42 - Both Sides @@ -1407,13 +1411,16 @@ ItemSubstitutionRules: db $12, $01, $35, $FF db $FF, $FF, $FF, $FF ;================================================================================ -;shop_config - t--- --qq +;shop_config - td-- --qq ; t - 0=Shop - 1=TakeAny +; d - 0=Check Door - 1=Skip Door Check ; qq - # of items for sale org $30C800 ; PC 0x184800 - 0x18487F - max 16 shops ShopTable: ;db [id][roomID-low][roomID-high][doorID][zero][shop_config][pad][pad] -db $FF, $FF, $FF, $FF, $00, $03, $00, $00 +;db $01, $1F, $01, $46, $00, $03, $00, $00 ; Kakariko shop +;db $FF, $12, $01, $58, $00, $03, $00, $00 +db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF 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]