From 5a3277dbaf864c1f9d511dd1ca68afbc705d4e2e Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sat, 2 Sep 2023 12:51:35 -0500 Subject: [PATCH] Generalize item-on-B approach --- LTTP_RND_GeneralBugfixes.asm | 1 + hooks.asm | 35 +++++++------ inventory.asm | 29 ++++++++--- item_on_b.asm | 98 ++++++++++++++++++++++++++++++++++++ retro.asm | 5 ++ special_weapons.asm | 43 ++-------------- sram.asm | 3 +- stats/credits.asm | 43 ---------------- stats/statConfig.asm | 12 +++-- tables.asm | 15 ++++-- 10 files changed, 168 insertions(+), 116 deletions(-) create mode 100644 item_on_b.asm diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 79ded1a..92a5857 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -158,6 +158,7 @@ incsrc msu.asm incsrc dungeonmap.asm incsrc special_weapons.asm incsrc variable_ganon_vulnerability.asm +incsrc item_on_b.asm incsrc hextodec.asm if !FEATURE_NEW_TEXT incsrc textrenderer.asm diff --git a/hooks.asm b/hooks.asm index 3752dfe..ce34df7 100644 --- a/hooks.asm +++ b/hooks.asm @@ -2487,10 +2487,6 @@ org $8DE4BF ; equipment.asm@1247 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs : JSL DrawBombInMenu BRA + : NOP #13 : + ;-------------------------------------------------------------------------------- -org $8DE5A0 ; bank_0D@15415 (LDA $7EF34D : AND.w #$00FF : STA.b $02 : ...) -JSL DrawBugNetInMenu -BRA + : NOP #8 : + -;-------------------------------------------------------------------------------- org $8DFB6A ; headsup_display@727 (CPX #$0004 : BNE .bombsNotEquipped : LDA #$0001) JSL DrawBombInYBox BRA + : NOP #2 : + @@ -2524,15 +2520,8 @@ db $B2, $24, $B3, $24, $C2, $24, $C2, $64 db $B2, $28, $B3, $28, $C2, $28, $C2, $68 db $B2, $28, $B3, $28, $C2, $28, $C2, $68 -; bugnet icon with B -; $8DFCB1 -db $40, $3C, $41, $3C, $42, $28, $3F, $3D - warnpc $8DFC51+197 ; we only filled in 197 NOPs so don't overwrite past that ;-------------------------------------------------------------------------------- -org $879CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A) -JSL CheckDetonateBomb -;-------------------------------------------------------------------------------- org $1EDCF8 ; bank_1E.asm@16086 (LDX $0202 : ...) JSL SetBeeType BRA + : NOP #15 : + @@ -2549,11 +2538,12 @@ NOP #48 skip 11 .bee_valid_target ;-------------------------------------------------------------------------------- -org $87F888 ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however. -Link_UseBugNetLong: -JSR Link_UseBugNet : RTL -Link_UseHammerLong: -JSR Link_UseHammer : RTL +org $87F889 ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however. +Link_UseItemLong: +PER .done-1 +JMP.w ($0000) +.done +RTL warnpc $87F890 ;-------------------------------------------------------------------------------- org $86F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10) @@ -2592,6 +2582,19 @@ NOP org $86ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2) JSL StoreSwordDamage +;================================================================================ +; Item-On-B +;-------------------------------------------------------------------------------- +org $8DEB3C +JSL DrawBIndicator : BRA + : NOP #3 : + +;-------------------------------------------------------------------------------- +org $879CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A : ...) +JSL UseItem +BCC + : RTS : + +JSR $9C56 +NOP #1 +;-------------------------------------------------------------------------------- + ;================================================================================ ; Text Renderer ;-------------------------------------------------------------------------------- diff --git a/inventory.asm b/inventory.asm index 27139cb..36ac42a 100644 --- a/inventory.asm +++ b/inventory.asm @@ -7,7 +7,8 @@ ;-------------------------------------------------------------------------------- ProcessMenuButtons: LDA.b Joy1A_New : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button - BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button + BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button + BIT.b #$80 : BNE .b_pressed ; check for P1 B-button LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held .sel_unheld LDA.l HudFlag : AND.b #$60 : BEQ + @@ -29,6 +30,25 @@ RTL STA.l HudFlag JSL.l MaybePlaySelectSFX JSL.l ResetEquipment +RTL + .b_pressed + PHX + LDA.l AllowedItemOnB : BEQ .b_error + CMP.b #$FF : BEQ .skip_allow_check + CMP.w ItemCursor : BNE .b_error + .skip_allow_check + LDA.w ItemCursor : TAX + LDA.l ValidItemOnB, X : BNE .b_error + TXA : CMP.l ItemOnB : BNE .set_b + LDA.b #$00 + .set_b + STA.l ItemOnB + BRA .b_done + .b_error + LDA.b #$3C : STA.w SFX2 ; error sound + .b_done + PLX + SEC RTL .y_pressed ; Note: used as entry point by quickswap code. Must preserve X. LDA.b #$10 : STA.w MenuBlink @@ -84,11 +104,6 @@ RTL STA.l FluteEquipment ; store set item LDA.b #$20 : STA.w SFX3 ; menu select sound BRA .captured - + CMP.b #$0E : BNE + ; bugnet - LDA.l SpecialWeapons : CMP.b #$08 : BNE .error - LDA.l InventoryTracking+1 : EOR.b #$80 : STA.l InventoryTracking+1 - LDA.b #$20 : STA.w SFX3 ; menu select sound - BRA .captured + CMP.b #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : + CLC @@ -397,8 +412,6 @@ AddYMarker: LDA.l InventoryTracking : BIT.w #$04 : BEQ .drawNormal ; make sure we have shovel AND.w #$03 : BNE .drawYBubble ; make sure we have one of the flutes BRA .drawNormal - + CMP.w #$000E : BNE + ; bugnet - LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0008 : BEQ .drawYBubble : BRA .drawNormal + CMP.w #$10 : BEQ .drawJarMarker .drawNormal diff --git a/item_on_b.asm b/item_on_b.asm new file mode 100644 index 0000000..b84a107 --- /dev/null +++ b/item_on_b.asm @@ -0,0 +1,98 @@ +;-------------------------------------------------------------------------------- +ItemMenuLocations: + dw $11C8 ; Bow + dw $11CE ; Boomerang + dw $11D4 ; Hookshot + dw $11DA ; Bombs + dw $11E0 ; Powder / Mushroom + dw $1288 ; Fire Rod + dw $128E ; Ice Rod + dw $1294 ; Bombos + dw $129A ; Ether + dw $12A0 ; Quake + dw $1348 ; Lamp + dw $134E ; Hammer + dw $1354 ; Flute / Shovel + dw $135A ; Bug Net + dw $1360 ; Book + dw $1408 ; Bottles + dw $140E ; Somaria + dw $1414 ; Byrna + dw $141A ; Cape + dw $1420 ; Mirror + +DrawBIndicator: + LDA.l ItemOnB : AND.w #$00FF : BEQ .done + DEC : ASL : TAX + LDA.l ItemMenuLocations, X : TAX + LDA.w #$3D3F + STA.w $0042, X + +.done ; what we wrote over + LDA.w $0202 + AND.w #$00FF + DEC + ASL + TAX + RTL +;-------------------------------------------------------------------------------- +ItemHandlerLocs: + dw $A003 ; Bow + dw $A0B8 ; Boomerang + dw $AB23 ; Hookshot + dw $A139 ; Bombs + dw $FFFF ; Powder / Mushroom + dw $9EEC ; Fire Rod + dw $9EEC ; Ice Rod + dw $A55E ; Bombos + dw $A489 ; Ether + dw $A640 ; Quake + dw $A246 ; Lamp + dw $9F82 ; Hammer + dw $FFFF ; Flute / Shovel + dw $AFEE ; Bug Net + dw $A46E ; Book + dw $FFFF ; Bottles + dw $AEBB ; Somaria + dw $FFFF ; Byrna + dw $FFFF ; Cape + dw $A913 ; Mirror +ValidItemOnB: + db $FF + db $00, $00, $00, $00, $FF + db $00, $00, $00, $00, $00 + db $00, $00, $FF, $00, $00 + db $FF, $00, $FF, $FF, $00 + +UseItem: + JSL CheckDetonateBomb : BCS .normal + + LDA.l ItemOnB : BEQ .normal + TAX + LDA.b $6C : BNE .prevent_swing + CPX.b #$11 : BNE .not_somaria + LDA.w $02F5 : BNE .prevent_swing + .not_somaria + LDA.l ValidItemOnB, X : BNE .normal + LDA.b $3A : ORA.b #$40 : STA.b $3A + LDA.l $8DFA35, X : STA.w $0304 + CPX.b #$06 : BEQ .fire_rod + CPX.b #$07 : BNE .not_rod + .ice_rod + LDA.b #$02 : STA.w $0307 + BRA .not_rod + .fire_rod + LDA.b #$01 : STA.w $0307 + .not_rod + TXA : DEC : ASL : TAX + LDA.l ItemHandlerLocs+1, X : STA.b $01 + LDA.l ItemHandlerLocs, X : STA.b $00 + JSL Link_UseItemLong + .prevent_swing + SEC + RTL + .normal + LDA.b #$80 : TSB.b $3A + LDA.b #$01 : TSB.b $50 + CLC + RTL diff --git a/retro.asm b/retro.asm index 170723a..a2b4c29 100644 --- a/retro.asm +++ b/retro.asm @@ -18,6 +18,11 @@ StoreBombCount: PLA : LDA.b #$01 : RTL .finite PLA : STA.l BombsEquipment + BNE .done + LDA.l ItemOnB : CMP #$04 : BNE .done + LDA.b #$00 : STA.l ItemOnB +.done +LDA.l BombsEquipment RTL SearchForEquippedItem: LDA.l InfiniteBombs : BEQ + diff --git a/special_weapons.asm b/special_weapons.asm index 618bdc0..175a4f3 100644 --- a/special_weapons.asm +++ b/special_weapons.asm @@ -378,23 +378,6 @@ DrawBombInMenu: .done RTL ;-------------------------------------------------------------------------------- -DrawBugNetInMenu: - LDA.l BugNetEquipment : AND.w #$00FF : BEQ .noNet - LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0008 : BNE .normal - LDA.l InventoryTracking : AND.w #$8000 : BNE .normal - LDA.w #$0000 : STA $02 - LDA.w #$FCB1 : STA $04 - BRA .done -.normal - LDA.w #$0001 : STA $02 - LDA.w #$F751 : STA $04 - BRA .done -.noNet - LDA.w #$0000 : STA $02 - LDA.w #$F751 : STA $04 -.done - RTL -;-------------------------------------------------------------------------------- DrawSwordInMenu: LDA SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .specialSword CMP.w #$0003 : BEQ .specialSword @@ -471,7 +454,9 @@ BeeDamageClass: db $FF, $01, $01, $FF, $FF ;-------------------------------------------------------------------------------- CheckDetonateBomb: - LDA.l SpecialWeapons : CMP.b #$01 : BNE .not_bomb_mode + LDA.l SpecialWeapons : CMP.b #$01 : BEQ .detonate_bombs + CMP.b #$06 : BEQ .release_bee + CLC : RTL .detonate_bombs LDX.b #09 .check_ancilla @@ -484,24 +469,6 @@ CheckDetonateBomb: DEX BPL .check_ancilla JMP .done -.not_bomb_mode - LDA.l SpecialWeapons : CMP.b #$06 : BEQ .release_bee - CMP.b #$07 : BEQ .hammer - CMP.b #$08 : BEQ .net - BRA .done -.hammer - LDA.l HammerEquipment : BEQ .done - LDA.b $3A : ORA.b #$40 : STA.b $3A - LDA.b #$04 : STA.w $0304 - JSL Link_UseHammerLong - RTL -.net - LDA.l BugNetEquipment : BEQ .done - LDA.l InventoryTracking+1 : BIT.b #$80 : BNE .done - LDA.b $3A : ORA.b #$40 : STA.b $3A - LDA.b #$07 : STA.w $0304 - JSL Link_UseBugNetLong - RTL .release_bee LDX.w $0202 LDA.l BeeDamageClass, X : CMP.b #$FF : BEQ .nope @@ -525,9 +492,7 @@ CheckDetonateBomb: ORA.w $0CF8 STA.w $012E .done - ; what we wrote over - LDA.b #$80 - TSB.b $3A + SEC RTL ;-------------------------------------------------------------------------------- SetBeeType: diff --git a/sram.asm b/sram.asm index 24d304f..b66ea6b 100644 --- a/sram.asm +++ b/sram.asm @@ -188,7 +188,8 @@ ItemLimitCounts: skip 16 ; Keeps track of limited non-progressive items s ; See: ItemSubstitutionRules in tables.asm ; Right now this is only used for three items but extra space is ; reserved -skip 37 ; Unused +skip 36 ; Unused +ItemOnB: skip 1 ; same table as $0202; $01 = arrows .. $14 = mirror ProgressIndicator: skip 1 ; $00 = Pre-Uncle | $01 = Post-Uncle item | $02 = Zelda Rescued ; $03 = Agahnim 1 defeated ; $04 and above don't do anything. $00-$02 used in standard mode diff --git a/stats/credits.asm b/stats/credits.asm index cfeb5c7..e8f07a7 100644 --- a/stats/credits.asm +++ b/stats/credits.asm @@ -758,46 +758,3 @@ endif %emptyline() %emptyline() %emptyline() - -;--------------------------------------------------------------------------------------------------- - -!FIRST_SWORD_X = 19 -!FIRST_SWORD_Y = 310 -!PEGASUS_BOOTS_X = 19 -!PEGASUS_BOOTS_Y = 313 -!FLUTE_X = 19 -!FLUTE_Y = 316 -!MIRROR_X = 19 -!MIRROR_Y = 319 -!SWORDLESS_X = 23 -!SWORDLESS_Y = 327 -!FIGHTERS_SWORD_X = 23 -!FIGHTERS_SWORD_Y = 330 -!MASTER_SWORD_X = 23 -!MASTER_SWORD_Y = 333 -!TEMPERED_SWORD_X = 23 -!TEMPERED_SWORD_Y = 336 -!GOLD_SWORD_X = 23 -!GOLD_SWORD_Y = 339 -!DAMAGETAKEN_X = 26 -!DAMAGETAKEN_Y = 346 -!MAGICUSED_X = 26 -!MAGICUSED_Y = 349 -!BONKS_X = 26 -!BONKS_Y = 352 -!BOMBS_X = 26 -!BOMBS_Y = 355 -!SAVE_AND_QUITS_X = 26 -!SAVE_AND_QUITS_Y = 358 -!DEATHS_X = 26 -!DEATHS_Y = 361 -!FAERIE_REVIVALS_X = 26 -!FAERIE_REVIVALS_Y = 364 -!TOTAL_MENU_TIME_X = 19 -!TOTAL_MENU_TIME_Y = 367 -!TOTAL_LAG_TIME_X = 19 -!TOTAL_LAG_TIME_Y = 370 -!COLLECTION_RATE_X = 22 -!COLLECTION_RATE_Y = 380 -!TOTAL_TIME_X = 19 -!TOTAL_TIME_Y = 383 diff --git a/stats/statConfig.asm b/stats/statConfig.asm index 68dbeec..4b5e247 100755 --- a/stats/statConfig.asm +++ b/stats/statConfig.asm @@ -22,16 +22,18 @@ !MAGICUSED_Y = 349 !BONKS_X = 26 !BONKS_Y = 352 +!BOMBS_X = 26 +!BOMBS_Y = 355 !SAVE_AND_QUITS_X = 26 -!SAVE_AND_QUITS_Y = 355 +!SAVE_AND_QUITS_Y = 358 !DEATHS_X = 26 -!DEATHS_Y = 358 +!DEATHS_Y = 361 !FAERIE_REVIVALS_X = 26 -!FAERIE_REVIVALS_Y = 361 +!FAERIE_REVIVALS_Y = 364 !TOTAL_MENU_TIME_X = 19 -!TOTAL_MENU_TIME_Y = 364 +!TOTAL_MENU_TIME_Y = 367 !TOTAL_LAG_TIME_X = 19 -!TOTAL_LAG_TIME_Y = 367 +!TOTAL_LAG_TIME_Y = 370 !COLLECTION_RATE_X = 22 !COLLECTION_RATE_Y = 380 !TOTAL_TIME_X = 19 diff --git a/tables.asm b/tables.asm index 1ec6baf..575366d 100644 --- a/tables.asm +++ b/tables.asm @@ -92,19 +92,26 @@ SmithSword: db $02 ; #$02 = Tempered Sword (default) ;-------------------------------------------------------------------------------- -; 0x18002B- 0x18002C (Unused) +; 0x18002B (Unused) ;-------------------------------------------------------------------------------- -org $30802D ; PC 0x18003D +org $30802C ; PC 0x18002C +AllowedItemOnB: +db #$00 +; $00 = None (default) +; $01 - $20 = Only selected item +; $FF = Any valid +;-------------------------------------------------------------------------------- +org $30802D ; PC 0x18002D ChallengeModes: ; ---- ---i ; i: Permanent Ice Physics db #$00 ; #$00 = Default behavior; ;-------------------------------------------------------------------------------- -org $30802E ; PC 0x18003E +org $30802E ; PC 0x18002E GanonVulnerabilityItem: db #$00 ; #$00 = Default behavior (silver arrows) ;-------------------------------------------------------------------------------- -org $30802F ; PC 0x18003F +org $30802F ; PC 0x18002F SpecialWeapons: db #$00 ; $00 = Off (default)