From 7583e46504e8e62f746479fe323ab12cdd7e7839 Mon Sep 17 00:00:00 2001 From: Karkat Date: Sun, 3 Dec 2017 23:45:15 -0500 Subject: [PATCH] let's dev 12/2/17 freestanding hera small key pickup stats capitalism fairy fix permabunny fix save file crossover fix started shopkeeper --- LTTP_RND_GeneralBugfixes.asm | 9 +- bugfixes.asm | 8 ++ hooks.asm | 23 +++++ init.asm | 21 +++++ inventory.asm | 6 +- shopkeeper.asm | 176 +++++++++++++++++++++++++++++++++++ stats.asm | 4 +- tables.asm | 6 +- 8 files changed, 247 insertions(+), 6 deletions(-) diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 9bc9d75..184d038 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, #$17, #$11, #$18 ; year/month/day +db #$20, #$17, #$12, #$03 ; year/month/day ;================================================================================ @@ -121,6 +121,7 @@ incsrc hardmode.asm incsrc goalitem.asm incsrc compasses.asm incsrc doorframefixes.asm +;incsrc shopkeeper.asm incsrc hashalphabet.asm ; <- TAKE OUT THE EXTRA ORGS IN HERE - THIS IS WHY WE COULDN'T ADD MORE FILES EARLIER warnpc $A18000 @@ -374,6 +375,9 @@ Sprite_DirectionToFacePlayer: org $06F12F Sprite_CheckDamageToPlayerSameLayerLong: +org $06F86A +OAM_AllocateDeferToPlayerLong: + org $07999D Link_ReceiveItem: @@ -467,4 +471,7 @@ Sprite_SpawnDynamically: org $1DFD4B DiggingGameGuy_AttemptPrizeSpawn: + +org $1EF4E7 +Sprite_PlayerCantPassThrough: ;================================================================================ diff --git a/bugfixes.asm b/bugfixes.asm index 8746c20..db6c2c9 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -27,4 +27,12 @@ MSMusicReset: LDA $23 + RTL +;-------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +;0 = Become Permabunny +DecideIfBunny: + LDA $7EF357 : BEQ + : RTL : + + LDA $7EF3CA : AND.b #$40 : EOR #$40 +RTL ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/hooks.asm b/hooks.asm index 079d99d..2f543c1 100644 --- a/hooks.asm +++ b/hooks.asm @@ -434,6 +434,9 @@ LDA.w PotionListExpanded, X org $06D1EB ; 351EB - sprite_absorbable.asm:364 (STA $7EF375) ; bugbug commented out until i figure out why it doesn't work JSL HandleBombAbsorbtion ;-------------------------------------------------------------------------------- +;org $09873F ; <- 04873F - ancilla_init.asm : 960 (ADC [$00] : STA [$00] ) +;JSL.l AddToStock +;-------------------------------------------------------------------------------- ;================================================================================ ; Kholdstare Shell Fix @@ -995,6 +998,23 @@ org $05FBD3 ; <- 2FBD3 - sprite_mad_batter.asm:209 - (STA $7EF37B) JSL.l GetMagicBatItem ;-------------------------------------------------------------------------------- +;================================================================================ +; Replacement Shopkeeper +;-------------------------------------------------------------------------------- +;org $068BEB ; <- 30BEB - Bank07.asm:1125 - (INC $0BA0, X) +;JSL.l SpritePrep_ShopKeeper : RTS +;-------------------------------------------------------------------------------- +;org $1EEEE3 ; <- F6EE3 - sprite_shopkeeper.asm:7 - (LDA $0E80, X) +;JSL.l Sprite_ShopKeeper : RTS +;-------------------------------------------------------------------------------- + +;================================================================================ +; Permabunny Fix +;-------------------------------------------------------------------------------- +org $078F32 ; <- 38F32 - Bank07.asm:2420 - (LDA $7EF357) +JSL.l DecideIfBunny +;-------------------------------------------------------------------------------- + ;================================================================================ ; Open Mode Fixes ;-------------------------------------------------------------------------------- @@ -1196,6 +1216,9 @@ JSL.l DialogBlind org $06C94C ; <- 3494C - sprite_ponds.asm:970 (JSL Sprite_ShowMessageUnconditional) JSL.l DialogFatFairy ;-------------------------------------------------------------------------------- +org $06C454 ; <- 34454 - sprite_ponds.asm:133 (LDA $0D80, X) +LDA.b #$00 : NOP +;-------------------------------------------------------------------------------- ;-- Sahasrahla (no green pendant) org $05F16C ; <- 2F16C sprite_elder.asm:137 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) JSL.l Sprite_ShowSolicitedMessageIfPlayerFacing_Alt diff --git a/init.asm b/init.asm index aed405c..cbe7aff 100644 --- a/init.asm +++ b/init.asm @@ -20,6 +20,27 @@ Init_Primary: INX CPX #$FF : !BLT - + LDX #$00 + - + LDA $702000, X : CMP $00FFC0, X : BNE .clear + INX + CPX #$15 : !BLT - + BRA .done + .clear + REP #$30 ; set 16-bit accumulator & index registers + LDA.w #$0000 + - + STA $700000, X + INX + CPX #$2000 : !BLT - + SEP #$30 ; set 8-bit accumulator & index registers + LDX #$00 + - + LDA $00FFC0, X : STA $702000, X + INX + CPX #$15 : !BLT - + .done + LDA.b #$01 : STA $420D ; enable fastrom access on upper banks LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad diff --git a/inventory.asm b/inventory.asm index 8b5247f..2f68807 100644 --- a/inventory.asm +++ b/inventory.asm @@ -172,9 +172,13 @@ macro BottomHalf(address) PLX : PLA endmacro ;-------------------------------------------------------------------------------- +;FullInventoryExternal: +; LDA !LOCK_STATS : BEQ + : RTL : + +; PHA : PHX : PHP : JMP AddInventory_fullItemCounts +;-------------------------------------------------------------------------------- FullInventoryExternal: LDA !LOCK_STATS : BEQ + : RTL : + - PHA : PHX : PHP : JMP AddInventory_fullItemCounts + PHA : PHX : PHP : JMP AddInventory_incrementCounts ;-------------------------------------------------------------------------------- !SHAME_CHEST = "$7EF416" ; ---s ---- AddInventory: diff --git a/shopkeeper.asm b/shopkeeper.asm index 5132dc6..22ed153 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -21,4 +21,180 @@ RTL ;-------------------------------------------------------------------------------- ; 291 - Moldorm Cave ; 286 - Northeast Dark Swamp Cave +;-------------------------------------------------------------------------------- +!BIGRAM = "$7EC900"; +;-------------------------------------------------------------------------------- +;-------------------------------------------------------------------------------- +; $0A : Digit Offset +; $0C-$0D : Value to Display +; $0E-$0F : Base Coordinate +;-------------------------------------------------------------------------------- +macro DrawDigit(value,offset) + STZ $0A ; clear digit buffer + LDA $0C ; load value + -- + CMP.w : !BLT ++ + !SUB.w + INC $0A + BRA -- + ++ + STA $0C ; save value + CPY.b #$FF : BNE + + LDY.b + LDA $0E : !ADD.w .digit_offsets, Y : STA $0E + + + LDA $0E : STA !BIGRAM, X : INX : INX + LDA.w #56 : STA !BIGRAM, X : INX : INX + LDY $0A : TYA : ASL : TAY : LDA .digit_properties, Y : STA !BIGRAM, X : INX : INX + LDA.w #$0000 : STA !BIGRAM, X : INX : INX + + LDA $0E : !ADD.w #$0008 : STA $0E ; move offset 8px right +endmacro +;-------------------------------------------------------------------------------- +DrawPrice: + PHX : PHY : PHP + LDY.b #$FF + LDX #$00 ; clear bigram pointer + + LDA $0C : CMP.w #1000 : !BLT + : BRL .len4 : + + CMP.w #100 : !BLT + : BRL .len3 : + + CMP.w #10 : !BLT + : BRL .len2 : + + CMP.w #1 : !BLT + : BRL .len1 : + + + .len4 + %DrawDigit(#1000,#6) + + .len3 + %DrawDigit(#100,#4) + + .len2 + %DrawDigit(#10,#2 + + .len1 + %DrawDigit(#1,#0) + + SEP #$20 ; set 8-bit accumulator + TXA : LSR #3 : STA $06 ; request 1-4 OAM slots + ASL #2 : JSL.l OAM_AllocateFromRegionA ; request 4-16 bytes + TXA : LSR #3 + PLP : PLY : PLX +RTS +;-------------------------------------------------------------------------------- +.digit_properties +dw $0230, $0231, $0202, $0203, $0212, $0213, $0222, $0223, $0232, $0233 +;-------------------------------------------------------------------------------- +.digit_offsets +dw 4, 0, -4, -8 +;-------------------------------------------------------------------------------- +SpritePrep_ShopKeeper: + +RTL +;-------------------------------------------------------------------------------- +Sprite_ShopKeeper: + PHB : PHK : PLB + JSL.l Sprite_PlayerCantPassThrough + + ; Draw Shopkeeper + LDA.b #$02 : STA $06 ; request 2 OAM slots + LDA #$08 : JSL.l OAM_AllocateFromRegionB ; 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 + + ; Draw Items + LDA.b #$03 : STA $06 ; request 3 OAM slots + LDA #$0C : JSL.l OAM_AllocateFromRegionB ; request 12 bytes + LDA.b #$03 : STA $06 ; request 3 OAM slots + STZ $07 + LDA.b #.oam_items : STA $08 + LDA.b #.oam_items>>8 : STA $09 + JSL.l Sprite_DrawMultiple_quantity_preset + LDA $90 : !ADD.b #$04*3 : STA $90 ; increment oam pointer + LDA $92 : INC #3 : STA $92 + + ; Draw Prices + ;LDA.b #$0C : STA $06 ; request 12 OAM slots + ;LDA #$30 : JSL.l OAM_AllocateFromRegionA ; request 48 bytes + ;LDA.b #$0C : STA $06 ; request 12 OAM slots + ;STZ $07 + ;LDA.b #.oam_prices : STA $08 + ;LDA.b #.oam_prices>>8 : STA $09 + ;JSL.l Sprite_DrawMultiple_quantity_preset + ;LDA $90 : !ADD.b #4*12 : STA $90 ; increment oam pointer + ;LDA $92 : INC #12 : STA $92 + + LDA.b #$00 : STA.l !SKIP_EOR + + REP #$20 ; set 16-bit accumulator + LDA.w #651 : STA $0C ; set value + LDA.w #8 : STA $0E ; set coordinate + JSR.w DrawPrice + SEP #$20 : STA $06 ; set 8-bit accumulator & store result + PHA + STZ $07 + LDA.b #!BIGRAM : STA $08 + LDA.b #!BIGRAM>>8 : STA $09 + LDA.b #$7E : PHA : PLB ; set data bank to $7E + JSL.l Sprite_DrawMultiple_quantity_preset + LDA 1,s + ASL #2 : !ADD $90 : STA $90 ; increment oam pointer + PLA + !ADD $92 : STA $92 + + REP #$20 ; set 16-bit accumulator + LDA.w #55 : STA $0C ; set value + LDA.w #56 : STA $0E ; set coordinate + JSR.w DrawPrice + SEP #$20 : STA $06 ; set 8-bit accumulator & store result + PHA + STZ $07 + LDA.b #!BIGRAM : STA $08 + LDA.b #!BIGRAM>>8 : STA $09 + LDA.b #$7E : PHA : PLB ; set data bank to $7E + JSL.l Sprite_DrawMultiple_quantity_preset + LDA 1,s + ASL #2 : !ADD $90 : STA $90 ; increment oam pointer + PLA + !ADD $92 : STA $92 + PLB +RTL +;-------------------------------------------------------------------------------- +.oam_shopkeeper_f1 +dw 8, -8 : db $00, $0C, $00, $02 +dw 8, 0 : db $10, $0C, $00, $02 +.oam_shopkeeper_f2 +dw 8, -8 : db $00, $0C, $00, $02 +dw 8, 0 : db $10, $4C, $00, $02 +;-------------------------------------------------------------------------------- +.oam_items +dw -40, 40 : db $C0, $08, $00, $02 +dw 8, 40 : db $C2, $04, $00, $02 +dw 56, 40 : db $C4, $02, $00, $02 +;-------------------------------------------------------------------------------- +.oam_prices +dw -48, 56 : db $30, $02, $00, $00 +dw -40, 56 : db $31, $02, $00, $00 +dw -32, 56 : db $02, $02, $00, $00 +dw -24, 56 : db $03, $02, $00, $00 + +dw 0, 56 : db $12, $02, $00, $00 +dw 8, 56 : db $13, $02, $00, $00 +dw 16, 56 : db $22, $02, $00, $00 +dw 24, 56 : db $23, $02, $00, $00 + +dw 48, 56 : db $32, $02, $00, $00 +dw 56, 56 : db $33, $02, $00, $00 +dw 64, 56 : db $30, $02, $00, $00 +dw 72, 56 : db $31, $02, $00, $00 ;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/stats.asm b/stats.asm index 6428600..5a7d3e9 100644 --- a/stats.asm +++ b/stats.asm @@ -199,7 +199,9 @@ IncrementSmallKeys: JSL AddInventory_incrementKeyLong + JSL.l UpdateKeys -RTL + PHY : LDY.b #24 : JSL.l FullInventoryExternal : PLY + JSL.l HUD_RebuildLong +;RTL ;-------------------------------------------------------------------------------- DecrementSmallKeys: STA $7EF36F ; thing we wrote over, write small key count diff --git a/tables.asm b/tables.asm index e3d4b37..75541df 100644 --- a/tables.asm +++ b/tables.asm @@ -103,7 +103,7 @@ db #$00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- org $308032 ; PC 0x180032 OpenMode: -db #$00 ; #$00 = Classic (default) - #$01 = Open +db #$01 ; #$00 = Classic (default) - #$01 = Open ;-------------------------------------------------------------------------------- org $308033 ; PC 0x180033 HeartBeep: @@ -131,7 +131,7 @@ org $30803B ; PC 0x18003B MapMode: db #$00 ; #$00 = Always On (default) - #$01 = Require Map Item CompassMode: -db #$00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Compass - #$02 = Display Dungeon Count Always +db #$02 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Compass - #$02 = Display Dungeon Count Always ;-------------------------------------------------------------------------------- org $30803D ; PC 0x18003D PersistentFloodgate: @@ -743,7 +743,7 @@ StartingTime: dw #$0000, #$0000 ; #$A5E0, #$0001 = 30 minutes ;================================================================================ org $09E3BB ; PC 0x4E3BB -db $EB ; Hera Big Key (Set to programmable HP $EB) (set to $E4 for original hookable/boomable key behavior) +db $E4 ; Hera Basement Key (Set to programmable HP $EB) (set to $E4 for original hookable/boomable key behavior) ;================================================================================ org $308210 ; PC 0x180210 RandomizerSeedType: