diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index b8e23f3..7f80e37 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -209,6 +209,7 @@ incsrc gk/gloom.asm incsrc gk/special_weapons.asm incsrc gk/variable_ganon_vulnerability.asm incsrc gk/pseudoflute.asm +incsrc gk/fast_junk.asm incsrc gk/dungeon_maps.asm print "End of B9: ", pc diff --git a/bugfixes.asm b/bugfixes.asm index 82d1b39..687351e 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -278,76 +278,3 @@ ParadoxCaveGfxFix: LDX.w #$00C0 : STX.w DAS0L BRA .uploadLine ;-------------------------------------------------------------------------------- -SetItemRiseTimer: - LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest - LDA.b #$38 : STA.w AncillaTimer, X - RTL - - .not_from_chest - JSL ItemIsJunk - BEQ .default - - .junk - LDA.l JunkItemTimer : AND.b #$3F : STA.w AncillaTimer, X - RTL - - .default - TYA : STA.w AncillaTimer, X ; What we wrote over - RTL -;-------------------------------------------------------------------------------- -ItemIsJunk: - PHX - LDA.l JunkItemTimer : BIT.b #$3F : BEQ .not_junk - BIT.b #$80 : BNE .check - LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .check - LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .check - BRA .not_junk - -.check - LDA.l JunkItemTimer : AND.b #$40 - BEQ + - LDA.b #JunkItems_triforce_end-JunkItems_end - + - CLC : ADC.b #JunkItems_end-JunkItems-1 - LDA.w AncillaGet, X - TAX - - - CMP.l JunkItems, X : BEQ .junk - DEX : BPL - -.not_junk - PLX - LDA.b #$00 - RTL -.junk - PLX - LDA.b #$01 - RTL -RTL - -JunkItems: - db $27 ; Bomb - db $28 ; 3 bombs - db $31 ; 10 bombs - db $34 ; 1 rupee - db $35 ; 5 rupees - db $36 ; 20 rupees - db $40 ; 100 rupees - db $41 ; 50 rupees - db $42 ; Heart - db $43 ; Arrow - db $44 ; 10 arrows - db $45 ; Small magic - db $46 ; 300 rupees - db $47 ; 20 rupees green - db $59 ; Rupoor - db $D1 ; Apples - db $D2 ; Fairy - db $D3 ; Chicken - db $D4 ; Big Magic - db $D5 ; 5 Arrows - db $D6 ; Good Bee -.end - db $6B ; Power Star - db $6C ; Triforce Piece -.triforce_end -;-------------------------------------------------------------------------------- diff --git a/gk/data/junk_items.asm b/gk/data/junk_items.asm new file mode 100644 index 0000000..87eb7df --- /dev/null +++ b/gk/data/junk_items.asm @@ -0,0 +1,261 @@ +db $00 ; 00 - Fighter Sword and Shield +db $00 ; 01 - Master Sword +db $00 ; 02 - Tempered Sword +db $00 ; 03 - Butter Sword +db $00 ; 04 - Fighter Shield +db $00 ; 05 - Fire Shield +db $00 ; 06 - Mirror Shield +db $00 ; 07 - Fire Rod +db $00 ; 08 - Ice Rod +db $00 ; 09 - Hammer +db $00 ; 0A - Hookshot +db $00 ; 0B - Bow +db $00 ; 0C - Boomerang +db $00 ; 0D - Powder +db $00 ; 0E - Bottle Refill (bee) +db $00 ; 0F - Bombos +db $00 ; 10 - Ether +db $00 ; 11 - Quake +db $00 ; 12 - Lamp +db $00 ; 13 - Shovel +db $00 ; 14 - Flute +db $00 ; 15 - Somaria +db $00 ; 16 - Bottle +db $00 ; 17 - Heartpiece +db $00 ; 18 - Byrna +db $00 ; 19 - Cape +db $00 ; 1A - Mirror +db $00 ; 1B - Glove +db $00 ; 1C - Mitts +db $00 ; 1D - Book +db $00 ; 1E - Flippers +db $00 ; 1F - Pearl +db $00 ; 20 - Crystal +db $00 ; 21 - Net +db $00 ; 22 - Blue Mail +db $00 ; 23 - Red Mail +db $00 ; 24 - Small Key +db $00 ; 25 - Compass +db $00 ; 26 - Heart Container from 4/4 +db $01 ; 27 - Bomb +db $01 ; 28 - 3 bombs +db $00 ; 29 - Mushroom +db $00 ; 2A - Red boomerang +db $00 ; 2B - Full bottle (red) +db $00 ; 2C - Full bottle (green) +db $00 ; 2D - Full bottle (blue) +db $00 ; 2E - Potion refill (red) +db $00 ; 2F - Potion refill (green) +db $00 ; 30 - Potion refill (blue) +db $01 ; 31 - 10 bombs +db $00 ; 32 - Big key +db $00 ; 33 - Map +db $01 ; 34 - 1 rupee +db $01 ; 35 - 5 rupees +db $01 ; 36 - 20 rupees +db $00 ; 37 - Green pendant +db $00 ; 38 - Blue pendant +db $00 ; 39 - Red pendant +db $00 ; 3A - Tossed bow +db $00 ; 3B - Silvers +db $00 ; 3C - Full bottle (bee) +db $00 ; 3D - Full bottle (fairy) +db $00 ; 3E - Boss heart +db $00 ; 3F - Sanc heart +db $01 ; 40 - 100 rupees +db $01 ; 41 - 50 rupees +db $01 ; 42 - Heart +db $01 ; 43 - Arrow +db $01 ; 44 - 10 arrows +db $01 ; 45 - Small magic +db $01 ; 46 - 300 rupees +db $01 ; 47 - 20 rupees green +db $00 ; 48 - Full bottle (good bee) +db $00 ; 49 - Tossed fighter sword +db $00 ; 4A - Active Flute +db $00 ; 4B - Boots + +db $00 ; 4C - Bomb capacity (50) +db $00 ; 4D - Arrow capacity (70) +db $00 ; 4E - 1/2 magic +db $00 ; 4F - 1/4 magic +db $00 ; 50 - Safe master sword +db $00 ; 51 - Bomb capacity (+5) +db $00 ; 52 - Bomb capacity (+10) +db $00 ; 53 - Arrow capacity (+5) +db $00 ; 54 - Arrow capacity (+10) +db $00 ; 55 - Programmable item 1 +db $00 ; 56 - Programmable item 2 +db $00 ; 57 - Programmable item 3 +db $00 ; 58 - Upgrade-only silver arrows +db $01 ; 59 - Rupoor +db $01 ; 5A - Nothing +db $00 ; 5B - Red clock +db $00 ; 5C - Blue clock +db $00 ; 5D - Green clock +db $00 ; 5E - Progressive sword +db $00 ; 5F - Progressive shield +db $00 ; 60 - Progressive armor +db $00 ; 61 - Progressive glove +db $00 ; 62 - RNG pool item (single) +db $00 ; 63 - RNG pool item (multi) +db $00 ; 64 - Progressive bow +db $00 ; 65 - Progressive bow +db $00 ; 66 - +db $00 ; 67 - +db $00 ; 68 - +db $00 ; 69 - +db $00 ; 6A - Triforce +db $01 ; 6B - Power star +db $01 ; 6C - Triforce Piece +db $00 ; 6D - Server request item +db $00 ; 6E - Server request item (dungeon drop) +db $00 ; 6F - + +db $00 ; 70 - Map of Light World +db $00 ; 71 - Map of Dark World +db $00 ; 72 - Map of Ganon's Tower +db $00 ; 73 - Map of Turtle Rock +db $00 ; 74 - Map of Thieves' Town +db $00 ; 75 - Map of Tower of Hera +db $00 ; 76 - Map of Ice Palace +db $00 ; 77 - Map of Skull Woods +db $00 ; 78 - Map of Misery Mire +db $00 ; 79 - Map of Dark Palace +db $00 ; 7A - Map of Swamp Palace +db $00 ; 7B - Map of Agahnim's Tower +db $00 ; 7C - Map of Desert Palace +db $00 ; 7D - Map of Eastern Palace +db $00 ; 7E - Map of Hyrule Castle +db $00 ; 7F - Map of Sewers + +db $00 ; 80 - Compass of Light World +db $00 ; 81 - Compass of Dark World +db $00 ; 82 - Compass of Ganon's Tower +db $00 ; 83 - Compass of Turtle Rock +db $00 ; 84 - Compass of Thieves' Town +db $00 ; 85 - Compass of Tower of Hera +db $00 ; 86 - Compass of Ice Palace +db $00 ; 87 - Compass of Skull Woods +db $00 ; 88 - Compass of Misery Mire +db $00 ; 89 - Compass of Dark Palace +db $00 ; 8A - Compass of Swamp Palace +db $00 ; 8B - Compass of Agahnim's Tower +db $00 ; 8C - Compass of Desert Palace +db $00 ; 8D - Compass of Eastern Palace +db $00 ; 8E - Compass of Hyrule Castle +db $00 ; 8F - Compass of Sewers + +db $00 ; 90 - Skull key +db $00 ; 91 - Reserved +db $00 ; 92 - Big key of Ganon's Tower +db $00 ; 93 - Big key of Turtle Rock +db $00 ; 94 - Big key of Thieves' Town +db $00 ; 95 - Big key of Tower of Hera +db $00 ; 96 - Big key of Ice Palace +db $00 ; 97 - Big key of Skull Woods +db $00 ; 98 - Big key of Misery Mire +db $00 ; 99 - Big key of Dark Palace +db $00 ; 9A - Big key of Swamp Palace +db $00 ; 9B - Big key of Agahnim's Tower +db $00 ; 9C - Big key of Desert Palace +db $00 ; 9D - Big key of Eastern Palace +db $00 ; 9E - Big key of Hyrule Castle +db $00 ; 9F - Big key of Sewers + +db $00 ; A0 - Small key of Sewers +db $00 ; A1 - Small key of Hyrule Castle +db $00 ; A2 - Small key of Eastern Palace +db $00 ; A3 - Small key of Desert Palace +db $00 ; A4 - Small key of Agahnim's Tower +db $00 ; A5 - Small key of Swamp Palace +db $00 ; A6 - Small key of Dark Palace +db $00 ; A7 - Small key of Misery Mire +db $00 ; A8 - Small key of Skull Woods +db $00 ; A9 - Small key of Ice Palace +db $00 ; AA - Small key of Tower of Hera +db $00 ; AB - Small key of Thieves' Town +db $00 ; AC - Small key of Turtle Rock +db $00 ; AD - Small key of Ganon's Tower +db $00 ; AE - Reserved +db $00 ; AF - Generic small key +db $00 ; B0 - Crystal 6 +db $00 ; B1 - Crystal 1 +db $00 ; B2 - Crystal 5 +db $00 ; B3 - Crystal 7 +db $00 ; B4 - Crystal 2 +db $00 ; B5 - Crystal 4 +db $00 ; B6 - Crystal 3 +db $00 ; B7 - Reserved +db $00 ; B8 - +db $00 ; B9 - +db $00 ; BA - +db $00 ; BB - +db $00 ; BC - +db $00 ; BD - +db $00 ; BE - +db $00 ; BF - +db $00 ; C0 - +db $00 ; C1 - +db $00 ; C2 - +db $00 ; C3 - +db $00 ; C4 - +db $00 ; C5 - +db $00 ; C6 - +db $00 ; C7 - +db $00 ; C8 - +db $00 ; C9 - +db $00 ; CA - +db $00 ; CB - +db $00 ; CC - +db $00 ; CD - +db $00 ; CE - +db $00 ; CF - +db $01 ; D0 - Bee trap +db $01 ; D1 - Apples +db $01 ; D2 - Fairy +db $01 ; D3 - Chicken +db $01 ; D4 - Big Magic +db $01 ; D5 - 5 Arrows +db $01 ; D6 - Good Bee +db $00 ; D7 - +db $00 ; D8 - +db $00 ; D9 - +db $00 ; DA - +db $00 ; DB - +db $00 ; DC - +db $00 ; DD - +db $00 ; DE - +db $00 ; DF - +db $00 ; E0 - +db $00 ; E1 - +db $00 ; E2 - +db $00 ; E3 - +db $00 ; E4 - +db $00 ; E5 - +db $00 ; E6 - +db $00 ; E7 - +db $00 ; E8 - +db $00 ; E9 - +db $00 ; EA - +db $00 ; EB - +db $00 ; EC - +db $00 ; ED - +db $00 ; EE - +db $00 ; EF - +db $00 ; F0 - +db $00 ; F1 - +db $00 ; F2 - +db $00 ; F3 - +db $00 ; F4 - +db $00 ; F5 - +db $00 ; F6 - +db $00 ; F7 - +db $00 ; F8 - +db $00 ; F9 - +db $00 ; FA - +db $00 ; FB - +db $00 ; FC - +db $00 ; FD - +db $00 ; FE - Server request (async) +db $00 ; FF - diff --git a/gk/dungeon_map_hooks.asm b/gk/dungeon_map_hooks.asm index 79e47da..01dd5de 100644 --- a/gk/dungeon_map_hooks.asm +++ b/gk/dungeon_map_hooks.asm @@ -172,13 +172,11 @@ org $8AE21C ;-------------------------------------------------------------------------------- org $8AE3D7 LDA.l DRMode - BEQ .normal - - JSL DrawWackyDoorRandoStuff - JMP.w $8AE422 - NOP - - .normal + BEQ + + JSL DrawWackyDoorRandoStuff + JMP.w $8AE422 + NOP + + warnpc $8AE3EB org $8AE439 diff --git a/gk/fast_junk.asm b/gk/fast_junk.asm new file mode 100644 index 0000000..c9597c4 --- /dev/null +++ b/gk/fast_junk.asm @@ -0,0 +1,67 @@ +;-------------------------------------------------------------------------------- +SetItemRiseTimer: + LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest + LDA.b #$38 : STA.w AncillaTimer, X + RTL + + .not_from_chest + JSL ItemIsJunk + BEQ .default + + .junk + LDA.l JunkItemTimer : AND.b #$3F : STA.w AncillaTimer, X + RTL + + .default + TYA : STA.w AncillaTimer, X ; What we wrote over + RTL +;-------------------------------------------------------------------------------- +ItemIsJunk: + PHX + LDA.l JunkItemTimer : BIT.b #$3F : BEQ .not_junk + BIT.b #$80 : BNE .check + LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .check + LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .check + BRA .not_junk + +.check + LDA.w AncillaGet, X + TAX + LDA.l JunkTable, X + PLX + CMP.b #$00 + RTL + +.not_junk + PLX + LDA.b #$00 + RTL + +;-------------------------------------------------------------------------------- +; A = item id being collected +ItemGetAlternateSFX: + PEA.w $C567 ; SNES to RTS to in bank 08 + LDA.w AncillaGet, X : CMP.b #$4A : BNE + + ; collecting pre-activated flute + LDA.b #$13 : JML Ancilla_SFX2_Near + + + JSL ItemIsJunk : BEQ .normal + LDA.b #$3B : JML Ancilla_SFX3_Near + .normal + LDA.b #$0F : JML Ancilla_SFX3_Near +;-------------------------------------------------------------------------------- +; A = item id being collected +ItemGetOverworldAlternateSFX: + CPY.b #$4A : BNE + + ; pre-activated flute + JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2 + RTL + + + JSL ItemIsJunk : BEQ .normal + .junk + JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3 + RTL + .normal + JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3 + RTL +;-------------------------------------------------------------------------------- diff --git a/gk/settings.asm b/gk/settings.asm index b0c87d1..a55f911 100644 --- a/gk/settings.asm +++ b/gk/settings.asm @@ -147,8 +147,12 @@ dw $25A4, $25A4 ; Reserved ; $B9FB40 -warnpc $B9FF00 +warnpc $B9FE00 +org $B9FE00 +JunkTable: +incsrc data/junk_items.asm +warnpc $B9FF00 org $B9FF00 ; $00 - do not show anything ; $01 - show presence of supertile as dark square diff --git a/inventory.asm b/inventory.asm index dbf1310..fcbed68 100644 --- a/inventory.asm +++ b/inventory.asm @@ -792,45 +792,13 @@ RTL } ;-------------------------------------------------------------------------------- MaybePlaySelectSFX: - LDA.w DungeonID : BMI .not_dungeon - .play - LDA.b #$20 : STA.w SFX3 ; menu select sound - RTL - .not_dungeon - LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play - BIT.b #$0C : BEQ .dont_play - BRA .play - .dont_play -RTL -;-------------------------------------------------------------------------------- -; A = item id being collected -ItemGetAlternateSFX: -PEA.w $C567 ; SNES to RTS to in bank 08 -LDA.w AncillaGet, X : CMP.b #$4A : BNE + - ; collecting pre-activated flute - LDA.b #$13 : JML Ancilla_SFX2_Near -+ ; not pre-activated flute - JSL.l ItemIsJunk : BEQ .normal - -.junk -LDA.b #$3B : JML Ancilla_SFX3_Near ; what we wrote over - -.normal -LDA.b #$0F : JML Ancilla_SFX3_Near ; what we wrote over - -; A = item id being collected -ItemGetOverworldAlternateSFX: -CPY.b #$4A : BNE + - JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2 + LDA.w DungeonID : BMI .not_dungeon +.play + LDA.b #$20 : STA.w SFX3 ; menu select sound RTL -+ ; normal itemget sfx - JSL.l ItemIsJunk : BEQ .normal - -.junk -JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3 +.not_dungeon + LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play + BIT.b #$0C : BEQ .dont_play + BRA .play +.dont_play RTL - -.normal -JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3 ; what we wrote over -RTL -;-------------------------------------------------------------------------------- diff --git a/tables.asm b/tables.asm index 72012fe..ec695e5 100644 --- a/tables.asm +++ b/tables.asm @@ -464,10 +464,9 @@ db $00 ; #$00 = Original Behavior (default) - #$01 = Book can flip crystal switc ; 0x1800A7 - 0x1800AE (unused) ;-------------------------------------------------------------------------------- ; 0x1800AF -; mtff ffff +; m-ff ffff ; ; m - 0 = only shorten timer on multiworld items, 1 = shorten all items -; t - 0 = triforce pieces considered important, 1 = triforce pieces considered junk ; f - number of frames to show items ;-------------------------------------------------------------------------------- org $B080AF ; PC 0x1800AF