diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 46c6b36..d45980b 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -213,6 +213,7 @@ incsrc gk/variable_ganon_vulnerability.asm incsrc gk/pseudoflute.asm incsrc gk/fast_junk.asm incsrc gk/dungeon_maps.asm +incsrc pikit.asm print "End of B9: ", pc warnpc $B9EE00 diff --git a/decryption.asm b/decryption.asm index b3b3eb2..4eb7538 100644 --- a/decryption.asm +++ b/decryption.asm @@ -72,16 +72,20 @@ JML Dungeon_OpenKeyedObject_nextChest TXA : LSR JSL RetrieveValueFromEncryptedTable + JSL ShieldCheck STA.b Scrap0C PLA : STA.b Scrap02 : PLA : STA.b Scrap00 LDA.l ChestData, X : ASL A : BCC .smallChest -JML Dungeon_OpenKeyedObject_bigChest ;(bank01.asm line #13783) + JSL ShieldCheck : BCC .couldntFindChest + JML Dungeon_OpenKeyedObject_bigChest ;(bank01.asm line #13783) .smallChest -JML Dungeon_OpenKeyedObject_smallChest + JSL ShieldCheck : BCC .couldntFindChest + JML Dungeon_OpenKeyedObject_smallChest + .couldntFindChest -JML Dungeon_OpenKeyedObject_couldntFindChest + JML Dungeon_OpenKeyedObject_couldntFindChest ;-------------------------------------------------------------------------------- diff --git a/hooks.asm b/hooks.asm index 82ab111..e811a7f 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2828,3 +2828,23 @@ org $8DFB63 ; bank_0D.asm@18092 (LDA.l $7EF33F, X : AND.w #$00FF) JSL CheckFluteInHUD NOP #3 ;-------------------------------------------------------------------------------- + + +;================================================================================ +; Pikit Nonsense +;-------------------------------------------------------------------------------- +org $81EC39 +JSL SmallChest_ShieldCheck +BCC Dungeon_OpenKeyedObject_couldntFindChest+1 + +org $81EC17 +JSL BigChest_ShieldCheck +BCC Dungeon_OpenKeyedObject_couldntFindChest +NOP #2 + +org $9E8D6F +JML PikitSteal + +org $9E8CF2 +JSL PikitDigest +NOP #2 diff --git a/newitems.asm b/newitems.asm index e7c44ab..4fa0990 100755 --- a/newitems.asm +++ b/newitems.asm @@ -1159,12 +1159,12 @@ JML StatsFinalPrep ;-------------------------------------------------------------------------------- ChestPrep: LDA.b #$01 : STA.w ItemReceiptMethod - JSL IncrementChestCounter + JSL IncrementChestCounter LDA.l ServerRequestMode : BEQ + JSL ChestItemServiceRequest RTL + - LDY.b Scrap0C ; get item value + LDY.b Scrap0C ; get item value SEC RTL diff --git a/pikit.asm b/pikit.asm new file mode 100644 index 0000000..9e41cec --- /dev/null +++ b/pikit.asm @@ -0,0 +1,368 @@ +pushpc +org $89EB7A +db $AA ; replace uncle with pikit + +org $80DCCE +db $1B ; load sprite sheet for pikit in link's house + +org $8A8029 +db $C8, $B6, $22 ; 0x022: Rail ↔ | { 31, 0B } | Size: 01 +db $C8, $CA, $22 ; 0x022: Rail ↔ | { 31, 0B } | Size: 01 +db $C8, $B6, $69 ; 0x069: Rail ↕ | { 3A, 0B } | Size: 01 +db $DC, $B6, $69 ; 0x069: Rail ↕ | { 3A, 0B } | Size: 01 +pullpc + +BigChest_ShieldCheck: + JSL ShieldCheck + BCC .no_open + LDA.l BigKeyField + AND.l BitMasks, X +.no_open + RTL + +SmallChest_ShieldCheck: + JSL ShieldCheck + BCC .no_open + LDA.w DungeonID + ORA.w RoomFlagMask, Y +.no_open + RTL + +ShieldCheck: + PHX + LDA.b $0C + AND.w #$00FF + TAX + LDA.l PikitItemList, X + AND.w #$00FF + BNE .replace + PLX + SEC + RTL + +.replace + LDA.l ShieldEquipment + AND.w #$00FF + BNE .already_have_shield + TXA + STA.l PikitItem + LDA.w #$0004 + STA.b $0C + PLX + SEC + RTL + +.already_have_shield + SEP #$20 + LDA.b #$3C + STA.w $012E + REP #$20 + + PLX + CLC + RTL + +PikitSteal: + LDA.l ShieldEquipment + BNE .has_shield + JSL GetRandomInt + JML $9E8D73 + +.has_shield + LDA.b #$04 + STA.w $0ED0, X + STA.w $0E90, X + LDA.b #$01 + STA.w $0E30, X + + STZ.w $012E + + JML $9E8DC3 + +PikitDigest: + LDA.w $0ED0, X + CMP.b #$04 + BNE + + + STZ.w $0E90, X + + LDA.l PikitItem + CMP.b #$04 + BEQ + + + TAY + STZ.w ItemReceiptMethod + JSL Link_ReceiveItem + + LDA.b #$04 + STA.l PikitItem ++ + + ; what we wrote over + STZ.w $0DA0, X + STZ.w $0ED0, X + + RTL + +PikitItemList: +db $01 ; 00 - Fighter Sword and Shield +db $01 ; 01 - Master Sword +db $01 ; 02 - Tempered Sword +db $01 ; 03 - Butter Sword +db $00 ; 04 - Fighter Shield +db $00 ; 05 - Fire Shield +db $00 ; 06 - Mirror Shield +db $01 ; 07 - Fire Rod +db $01 ; 08 - Ice Rod +db $01 ; 09 - Hammer +db $01 ; 0A - Hookshot +db $01 ; 0B - Bow +db $01 ; 0C - Boomerang +db $01 ; 0D - Powder +db $00 ; 0E - Bottle Refill (bee) +db $01 ; 0F - Bombos +db $01 ; 10 - Ether +db $01 ; 11 - Quake +db $01 ; 12 - Lamp +db $01 ; 13 - Shovel +db $01 ; 14 - Flute +db $01 ; 15 - Somaria +db $01 ; 16 - Bottle +db $00 ; 17 - Heartpiece +db $01 ; 18 - Byrna +db $01 ; 19 - Cape +db $01 ; 1A - Mirror +db $01 ; 1B - Glove +db $01 ; 1C - Mitts +db $01 ; 1D - Book +db $01 ; 1E - Flippers +db $01 ; 1F - Pearl +db $00 ; 20 - Crystal +db $01 ; 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 $00 ; 27 - Bomb +db $00 ; 28 - 3 bombs +db $01 ; 29 - Mushroom +db $01 ; 2A - Red boomerang +db $01 ; 2B - Full bottle (red) +db $01 ; 2C - Full bottle (green) +db $01 ; 2D - Full bottle (blue) +db $00 ; 2E - Potion refill (red) +db $00 ; 2F - Potion refill (green) +db $00 ; 30 - Potion refill (blue) +db $00 ; 31 - 10 bombs +db $00 ; 32 - Big key +db $00 ; 33 - Map +db $00 ; 34 - 1 rupee +db $00 ; 35 - 5 rupees +db $00 ; 36 - 20 rupees +db $00 ; 37 - Green pendant +db $00 ; 38 - Blue pendant +db $00 ; 39 - Red pendant +db $01 ; 3A - Tossed bow +db $01 ; 3B - Silvers +db $01 ; 3C - Full bottle (bee) +db $01 ; 3D - Full bottle (fairy) +db $00 ; 3E - Boss heart +db $00 ; 3F - Sanc heart +db $00 ; 40 - 100 rupees +db $00 ; 41 - 50 rupees +db $00 ; 42 - Heart +db $00 ; 43 - Arrow +db $00 ; 44 - 10 arrows +db $00 ; 45 - Small magic +db $00 ; 46 - 300 rupees +db $00 ; 47 - 20 rupees green +db $01 ; 48 - Full bottle (good bee) +db $01 ; 49 - Tossed fighter sword +db $01 ; 4A - Active Flute +db $01 ; 4B - Boots + +db $00 ; 4C - Bomb capacity (50) +db $00 ; 4D - Arrow capacity (70) +db $01 ; 4E - 1/2 magic +db $01 ; 4F - 1/4 magic +db $01 ; 50 - Safe master sword +db $00 ; 51 - Bomb capacity (+5) +db $01 ; 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 $01 ; 58 - Upgrade-only silver arrows +db $00 ; 59 - Rupoor +db $00 ; 5A - Nothing +db $00 ; 5B - Red clock +db $00 ; 5C - Blue clock +db $00 ; 5D - Green clock +db $01 ; 5E - Progressive sword +db $00 ; 5F - Progressive shield +db $00 ; 60 - Progressive armor +db $01 ; 61 - Progressive glove +db $00 ; 62 - RNG pool item (single) +db $00 ; 63 - RNG pool item (multi) +db $01 ; 64 - Progressive bow +db $01 ; 65 - Progressive bow +db $00 ; 66 - +db $00 ; 67 - +db $00 ; 68 - +db $00 ; 69 - +db $00 ; 6A - Triforce +db $00 ; 6B - Power star +db $00 ; 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 $00 ; D0 - Bee trap +db $00 ; D1 - Apples +db $00 ; D2 - Fairy +db $00 ; D3 - Chicken +db $00 ; D4 - Big Magic +db $00 ; D5 - 5 Arrows +db $00 ; 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/sram.asm b/sram.asm index b6bb73d..69e6aa9 100644 --- a/sram.asm +++ b/sram.asm @@ -251,7 +251,7 @@ NpcFlags: skip 2 ; l - c s t k z o (bitfield) ; b = Magic Bat | p = Potion Shop (Powder) | m = Lost Woods (Mushroom) ; f = Fairy (unused) | s = Smith | b = Bombos Tablet ; e = Ether Tablet -skip 2 ; Unused +PikitItem: skip 2 ; Item stored in shield player is carrying MapOverlay: skip 2 ; Used to reveal dungeon prizes on the map in modes where maps, ; Saha, and the bomb shop guy reveal dungeon prizes (bitfield) ; \ - - g r t h i s diff --git a/vanillalabels.asm b/vanillalabels.asm index b7c0c61..aa91412 100644 --- a/vanillalabels.asm +++ b/vanillalabels.asm @@ -273,6 +273,7 @@ PalettesVanilla_spraux09 = $9BD47E ; Misc. Data ;=================================================================================================== DungeonMask = $8098C0 +RoomFlagMask = $809900 GFXSheetPointers_background_bank = $80CFC0 GFXSheetPointers_background_high = $80D09F GFXSheetPointers_background_low = $80D17E