From 23f839ccedea87832114639e3fd50082396340a4 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 26 Jan 2024 11:33:32 -0700 Subject: [PATCH 1/3] fix: swamola issue with cached sprites refactor: move some hooks --- enemizer/blindboss.asm | 12 +++++++++++- enemizer/enemizerflags.asm | 2 +- enemizer/hooks.asm | 4 +--- enemizer/hooks/blindboss_hooks.asm | 11 ----------- enemizer/main.asm | 1 + enemizer/swamola_fix.asm | 18 ++++++++++++++++++ 6 files changed, 32 insertions(+), 16 deletions(-) delete mode 100644 enemizer/hooks/blindboss_hooks.asm create mode 100644 enemizer/swamola_fix.asm diff --git a/enemizer/blindboss.asm b/enemizer/blindboss.asm index 4e495dc..1702295 100644 --- a/enemizer/blindboss.asm +++ b/enemizer/blindboss.asm @@ -2,7 +2,17 @@ ; Blind Boss fight ;-------------------------------------------------------------------------------- -print "Blind Spawn Code Check: ", pc +pushpc + +org $9DA081 ; Original Code + JML check_blind_boss_room +Check_for_Blind_Fight: + +org $9DA090 +Initialize_Blind_Fight: + +pullpc + check_blind_boss_room: LDA $A0 ; load room index (low byte) CMP #172 : BNE + ; Is is Thieves Town Boss Room diff --git a/enemizer/enemizerflags.asm b/enemizer/enemizerflags.asm index e406db7..5e3808c 100644 --- a/enemizer/enemizerflags.asm +++ b/enemizer/enemizerflags.asm @@ -6,7 +6,7 @@ db #$00 ;368100 ; Enable random enemy under bushes db #$00 ;408101 : 200101 ; Enable blind's door closing for other bosses .moldorm_eye_count db #$01 ;408102 : 200102 ; Moldorm eye count, default to 2 eyes (1) -.randomize_sprites +EnemizerFlag_Randomize_Sprites: db #$00 ;408103 : 200103 ; Randomize Sprites. .agahnim_fun_balls db #$00 ;408104 : 200104 ; make Agahnim balls deflect back diff --git a/enemizer/hooks.asm b/enemizer/hooks.asm index 31ec286..189b01e 100644 --- a/enemizer/hooks.asm +++ b/enemizer/hooks.asm @@ -14,6 +14,4 @@ incsrc hooks/damage_hooks.asm incsrc hooks/overworld_sprite_hooks.asm -incsrc hooks/underworld_sprite_hooks.asm - -incsrc hooks/blindboss_hooks.asm \ No newline at end of file +incsrc hooks/underworld_sprite_hooks.asm \ No newline at end of file diff --git a/enemizer/hooks/blindboss_hooks.asm b/enemizer/hooks/blindboss_hooks.asm deleted file mode 100644 index 2d67736..0000000 --- a/enemizer/hooks/blindboss_hooks.asm +++ /dev/null @@ -1,11 +0,0 @@ - -;================================================================================ -; Blind Boss fight -;-------------------------------------------------------------------------------- - -org $9DA081 ; Original Code - JML check_blind_boss_room -Check_for_Blind_Fight: - -org $9DA090 -Initialize_Blind_Fight: \ No newline at end of file diff --git a/enemizer/main.asm b/enemizer/main.asm index b6a2cc5..4f19a03 100644 --- a/enemizer/main.asm +++ b/enemizer/main.asm @@ -47,6 +47,7 @@ incsrc bossdrop.asm incsrc moldorm.asm incsrc kodongo_fixes.asm incsrc mimic_fixes.asm +incsrc swamola_fix.asm ; vitreous key fix for boss shuffle - uses FixPrizeOnTheEyes flag incsrc overworld_sprites.asm diff --git a/enemizer/swamola_fix.asm b/enemizer/swamola_fix.asm new file mode 100644 index 0000000..4b4a3ff --- /dev/null +++ b/enemizer/swamola_fix.asm @@ -0,0 +1,18 @@ +pushpc + +org $8683B5 +JSL MaybeDoCachedSprites ; JSL ExecuteCachedSprites + +org $9DE9DA +ExecuteCachedSprites: + +pullpc + +MaybeDoCachedSprites: + LDA.l EnemizerFlag_Randomize_Sprites + BNE .enemizer + + JML ExecuteCachedSprites ; what we copied over + +.enemizer + RTL \ No newline at end of file From ed8cefe0c609304effabbeffa8fba510e8547dd5 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 7 Feb 2024 12:36:54 -0700 Subject: [PATCH 2/3] fix: bad branch, bad org, dead code, bad args flags --- doorrando/overrides.asm | 4 ++-- hooks.asm | 6 ++++-- newitems.asm | 23 ----------------------- 3 files changed, 6 insertions(+), 27 deletions(-) diff --git a/doorrando/overrides.asm b/doorrando/overrides.asm index 8d09c62..bf50c16 100644 --- a/doorrando/overrides.asm +++ b/doorrando/overrides.asm @@ -70,14 +70,14 @@ CutoffEntranceRug: LDA $04 : cmp #$000A : BEQ + ; only affect A & C objects cmp #$000C : BNE .norm + LDX #$0000 : LDA !CutoffTable, x - - CMP.W $A0 : BEQ .check + - CMP.b $A0 : BEQ .check INX #2 : LDA !CutoffTable, x : CMP.w #$FFFF : BNE - .norm PLX : PLA : LDA $9B52, y : STA $7E2000, x ; what we wrote over RTL .check LDA $0c : CMP #$0004 : !BGE .skip LDA $0e : CMP #$0008 : !BGE .skip - CMP.l #$0004 : !BLT .skip + CMP.w #$0004 : !BLT .skip BRA .norm .skip PLX : PLA : RTL diff --git a/hooks.asm b/hooks.asm index fb5b386..c9fb6f1 100644 --- a/hooks.asm +++ b/hooks.asm @@ -504,8 +504,10 @@ PreventEnterOnBonk_BRANCH_IX: ;================================================================================ ; Crystals Mode ;-------------------------------------------------------------------------------- +org $899B6D +AncillaAdd_GTCutscene_Exit: org $899B7F ; <- ancilla_init.asm : 4136 (LDA $7EF37A : AND.b #$7F : CMP.b #$7F) -JSL CheckTowerOpen : BCC $899B6D +JSL CheckTowerOpen : BCC AncillaAdd_GTCutscene_Exit ;-------------------------------------------------------------------------------- org $88CE0C ; <- 44E0C - ancilla_break_tower_seal.asm : 168 (BEQ #$03 : JSR GTCutscene_SparkleALot : LDX.b #$06) JML.l GTCutscene_AnimateCrystals_Prep : NOP @@ -2391,7 +2393,7 @@ org $80D17E+178 : db ExpandedTrinexx>>0 ; Use above sheet in Hyrule castle courtyard after rain state. org $80DB9E ; Hyrule Castle GFX Sprite Sheet 4 on [LW1] db $3F -db $80DBA2 ; Hyrule Castle GFX Sprite Sheet 4 on [RainState] +org $80DBA2 ; Hyrule Castle GFX Sprite Sheet 4 on [RainState] db $3F org $80DC0A ; Hyrule Castle GFX Sprite Sheet 4 on [LW2] db $3F diff --git a/newitems.asm b/newitems.asm index dff195e..e5c0db4 100644 --- a/newitems.asm +++ b/newitems.asm @@ -1207,27 +1207,4 @@ dw $0000 ; Sewers PendantMasks: db $04, 01, 02 -NewItemsChecks: - CMP.b #$B2 : BNE + ; Fairy - LDA.b #$E3 : JSL Sprite_SpawnDynamically : BMI .done - LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y - LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8 - LDA.b $20 : SEC : SBC.b #$10 : STA.w $0D00,Y - LDA.b $21 : SBC.b #$00 : STA.w $0D20,Y ; move up 16 pixels - LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link - LDA.b #$FF : STA.w $0B58,Y ; allows them to expire - BRA .done - + CMP.b #$B3 : BNE + ; Chicken - LDA.b #$0B : JSL Sprite_SpawnDynamically : BMI .done - LDA $22 : CLC : ADC.b #$03 : AND.b #$F8 : STA $0D10,Y - LDA $23 : ADC.b #$00 : STA $0D30,Y ; round X to nearest 8 - LDA.b $20 : SEC : SBC.b #$08 : STA.w $0D00,Y - LDA.b $21 : SBC.b #$00 : STA.w $0D20,Y ; move up 8 pixels - LDA.b $EE : STA.w $0F20,Y ; spawns on same layer as link - BRA .done - + CMP.b #$B4 : BNE .done ; Big Magic - LDA.b #$80 : STA MagicFiller ; fill magic - .done -RTS - From 16d249859f3c9eeab1f1940b4a8b9426be92b6d6 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 7 Feb 2024 15:15:22 -0700 Subject: [PATCH 3/3] fix: issues around item substitution for harder difficulties --- keydrop/standing_items.asm | 4 +++- newitems.asm | 13 ++++--------- shopkeeper.asm | 7 +++++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/keydrop/standing_items.asm b/keydrop/standing_items.asm index 19db1eb..386b695 100644 --- a/keydrop/standing_items.asm +++ b/keydrop/standing_items.asm @@ -679,7 +679,8 @@ KeyGet: JSL CountChestKeyLong ++ PLA : RTL + STY $00 - LDA SprItemMWPlayer, X : STA !MULTIWORLD_ITEM_PLAYER_ID : BNE .receive + LDA SprItemMWPlayer, X : STA !MULTIWORLD_ITEM_PLAYER_ID + STA !MULTIWORLD_SPRITEITEM_PLAYER_ID : BNE .receive PHX LDA $040C : CMP #$FF : BNE + LDA $00 : CMP.b #$AF : BNE .skip @@ -696,6 +697,7 @@ KeyGet: .skip PLX .receive JSL $0791b3 ; Player_HaltDashAttackLong + TYA : JSL.l AttemptItemSubstitution : JSL.l ResolveLootIDLong : TAY JSL.l Link_ReceiveItem PLA : DEC : RTL diff --git a/newitems.asm b/newitems.asm index e5c0db4..3b6ec53 100644 --- a/newitems.asm +++ b/newitems.asm @@ -692,20 +692,15 @@ ResolveReceipt: PHA : PHX PHK : PLB JSL.l PreItemGet - LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE + - LDA.w ItemReceiptID - .get_item + LDA.l !MULTIWORLD_ITEM_PLAYER_ID : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID + LDA.w ItemReceiptID : STA.l !MULTIWORLD_ITEM_ID JSL.l AttemptItemSubstitution JSR.w HandleBowTracking - + - LDA.w ItemReceiptID - STA.l !MULTIWORLD_ITEM_ID JSR.w ResolveLootID - .have_item STA.w ItemReceiptID LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE + - LDA.w ItemReceiptID - JSR IncrementItemCounters + LDA.w ItemReceiptID + JSR IncrementItemCounters + PLX : PLA RTS diff --git a/shopkeeper.asm b/shopkeeper.asm index 7b9fea2..76e5680 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -464,10 +464,13 @@ Shopkeeper_BuyItem: LDA.l EnableShopItemCount, X : STA.l ShopEnableCount ; If so, store the permission to count the item here. +++ PLX - LDA.l ShopInventory, X : TAY : JSL.l Link_ReceiveItem + LDA.l ShopInventory, X + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + TAY + JSL.l Link_ReceiveItem LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X LDA.b #0 : STA.l ShopEnableCount - TXA : LSR #2 : TAX LDA.l ShopType : BIT.b #$80 : BNE + LDA ShopkeeperRefill : BNE +++