diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 47ac75a..3f8eaf5 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -59,7 +59,6 @@ incsrc vanillalabels.asm ;org $208000 ; bank #$20 org $A08000 ; bank #$A0 -incsrc newitems.asm ; LEAVE THIS AS FIRST incsrc itemdowngrade.asm incsrc bugfixes.asm incsrc darkworldspawn.asm @@ -67,7 +66,6 @@ incsrc lampmantlecone.asm incsrc floodgatesoftlock.asm incsrc heartpieces.asm incsrc npcitems.asm -incsrc utilities.asm incsrc hextodec.asm incsrc flipperkill.asm incsrc pendantcrystalhud.asm @@ -163,7 +161,8 @@ warnpc $A58000 org $A28000 incsrc decompresseditemgraphics.asm - +incsrc newitems.asm +incsrc utilities.asm org $A38000 incsrc stats/main.asm diff --git a/decompresseditemgraphics.asm b/decompresseditemgraphics.asm index 9e5986c..841b14e 100644 --- a/decompresseditemgraphics.asm +++ b/decompresseditemgraphics.asm @@ -61,17 +61,20 @@ TransferRupeesProperly: ;=================================================================================================== TransferItemReceiptToBuffer_using_ReceiptID: - PHP - PHB + PHP : PHB REP #$30 - PHX - PHY + PHX : PHY ++ AND.w #$00FF - ASL - TAX + ASL : TAX + + LDA.l BusyItem : BNE + + LDA.l StandingItemGraphicsOffsets,X + BRA .have_address ++ LDA.l ItemReceiptGraphicsOffsets,X +.have_address BMI TransferItemReceiptToBuffer_using_ExplicitBufferAddress .rom_address @@ -525,21 +528,21 @@ Unrolled3BPPConvert: ;=================================================================================================== ItemReceiptGraphicsOffsets: - dw $0860 ; 00 - Fighter sword - dw BigDecompressionBuffer+$11C0 ; 01 - Master sword - dw BigDecompressionBuffer+$11C0 ; 02 - Tempered sword - dw BigDecompressionBuffer+$11C0 ; 03 - Butter sword - dw BigDecompressionBuffer+$09E0 ; 04 - Fighter shield - dw BigDecompressionBuffer+$1940 ; 05 - Fire shield - dw BigDecompressionBuffer+$0C80 ; 06 - Mirror shield - dw BigDecompressionBuffer+$1C80 ; 07 - Fire rod - dw BigDecompressionBuffer+$1C80 ; 08 - Ice rod + dw $0860 ; 00 - Fighter Sword and Shield + dw BigDecompressionBuffer+$11C0 ; 01 - Master Sword + dw BigDecompressionBuffer+$11C0 ; 01 - Tempered Sword + dw BigDecompressionBuffer+$11C0 ; 03 - Butter Sword + dw BigDecompressionBuffer+$09E0 ; 04 - Fighter Shield + dw BigDecompressionBuffer+$1940 ; 05 - Fire Shield + dw BigDecompressionBuffer+$0C80 ; 06 - Mirror Shield + dw BigDecompressionBuffer+$1C80 ; 07 - Fire Rod + dw BigDecompressionBuffer+$1C80 ; 08 - Ice Rod dw BigDecompressionBuffer+$1CA0 ; 09 - Hammer dw BigDecompressionBuffer+$1C60 ; 0A - Hookshot dw BigDecompressionBuffer+$1C00 ; 0B - Bow dw BigDecompressionBuffer+$1DE0 ; 0C - Boomerang dw BigDecompressionBuffer+$1CC0 ; 0D - Powder - dw BigDecompressionBuffer+$09A0 ; 0E - Bottle refill (bee) + dw BigDecompressionBuffer+$09A0 ; 0E - Bottle Refill (bee) dw BigDecompressionBuffer+$1440 ; 0F - Bombos dw BigDecompressionBuffer+$1400 ; 10 - Ether dw BigDecompressionBuffer+$1480 ; 11 - Quake @@ -548,7 +551,7 @@ ItemReceiptGraphicsOffsets: dw BigDecompressionBuffer+$0C40 ; 14 - Flute dw BigDecompressionBuffer+$1C40 ; 15 - Somaria dw BigDecompressionBuffer+$14C0 ; 16 - Bottle - dw BigDecompressionBuffer+$0C00 ; 17 - Heart piece + dw BigDecompressionBuffer+$0C00 ; 17 - Heartpiece dw BigDecompressionBuffer+$1C40 ; 18 - Byrna dw BigDecompressionBuffer+$1100 ; 19 - Cape dw BigDecompressionBuffer+$1040 ; 1A - Mirror @@ -559,11 +562,11 @@ ItemReceiptGraphicsOffsets: dw BigDecompressionBuffer+$1180 ; 1F - Pearl dw BigDecompressionBuffer+$08A0 ; 20 - Crystal dw BigDecompressionBuffer+$0860 ; 21 - Net - dw BigDecompressionBuffer+$1900 ; 22 - Blue mail - dw BigDecompressionBuffer+$1900 ; 23 - Red mail - dw BigDecompressionBuffer+$1DC0 ; 24 - Small key + dw BigDecompressionBuffer+$1900 ; 22 - Blue Mail + dw BigDecompressionBuffer+$1900 ; 23 - Red Mail + dw BigDecompressionBuffer+$1DC0 ; 24 - Small Key dw BigDecompressionBuffer+$1140 ; 25 - Compbutt - dw BigDecompressionBuffer+$18C0 ; 26 - Heart container from 4/4 + dw BigDecompressionBuffer+$18C0 ; 26 - Heart Container from 4/4 dw BigDecompressionBuffer+$1080 ; 27 - Bomb dw BigDecompressionBuffer+$1840 ; 28 - 3 bombs dw BigDecompressionBuffer+$1540 ; 29 - Mushroom @@ -615,12 +618,12 @@ ItemReceiptGraphicsOffsets: dw $0 ; 55 - Programmable item 1 dw $0 ; 56 - Programmable item 2 dw $0 ; 57 - Programmable item 3 - dw $0 ; 58 - Upgrade-only silver arrows + dw $05E0 ; 58 - Upgrade-only silver arrows dw $0 ; 59 - Rupoor dw $0020 ; 5A - Nothing - dw $0 ; 5B - Red clock - dw $0 ; 5C - Blue clock - dw $0 ; 5D - Green clock + dw $0DE0 ; 5B - Red clock + dw $0DE0 ; 5C - Blue clock + dw $0DE0 ; 5D - Green clock dw $0 ; 5E - Progressive sword dw $0 ; 5F - Progressive shield dw $0 ; 60 - Progressive armor @@ -629,16 +632,16 @@ ItemReceiptGraphicsOffsets: dw $0 ; 63 - RNG pool item (multi) dw $0 ; 64 - Progressive bow dw $0 ; 65 - Progressive bow - dw $0 ; 66 - - dw $0 ; 67 - - dw $0 ; 68 - - dw $0 ; 69 - + dw $0 ; 66 - + dw $0 ; 67 - + dw $0 ; 68 - + dw $0 ; 69 - dw $0060 ; 6A - Triforce - dw $0 ; 6B - Power star - dw $0 ; 6C - + dw $11E0 ; 6B - Power star + dw $0 ; 6C - dw $0 ; 6D - Server request item dw $0 ; 6E - Server request item (dungeon drop) - dw $0 ; 6F - + dw $0 ; 6F - dw BigDecompressionBuffer+$1580 ; 70 - Map of Light World dw BigDecompressionBuffer+$1580 ; 71 - Map of Dark World @@ -708,85 +711,354 @@ ItemReceiptGraphicsOffsets: dw $0 ; AE - Reserved dw BigDecompressionBuffer+$1DC0 ; AF - Generic small key - dw $0 ; B0 - - dw $0 ; B1 - - dw $0 ; B2 - - dw $0 ; B3 - - dw $0 ; B4 - - dw $0 ; B5 - - dw $0 ; B6 - - dw $0 ; B7 - - dw $0 ; B8 - - dw $0 ; B9 - - dw $0 ; BA - - dw $0 ; BB - - dw $0 ; BC - - dw $0 ; BD - - dw $0 ; BE - - dw $0 ; BF - - dw $0 ; C0 - - dw $0 ; C1 - - dw $0 ; C2 - - dw $0 ; C3 - - dw $0 ; C4 - - dw $0 ; C5 - - dw $0 ; C6 - - dw $0 ; C7 - - dw $0 ; C8 - - dw $0 ; C9 - - dw $0 ; CA - - dw $0 ; CB - - dw $0 ; CC - - dw $0 ; CD - - dw $0 ; CE - - dw $0 ; CF - - dw $0 ; D0 - - dw $0 ; D1 - - dw $0 ; D2 - - dw $0 ; D3 - - dw $0 ; D4 - - dw $0 ; D5 - - dw $0 ; D6 - - dw $0 ; D7 - - dw $0 ; D8 - - dw $0 ; D9 - - dw $0 ; DA - - dw $0 ; DB - - dw $0 ; DC - - dw $0 ; DD - - dw $0 ; DE - - dw $0 ; DF - - dw $0 ; E0 - - dw $0 ; E1 - - dw $0 ; E2 - - dw $0 ; E3 - - dw $0 ; E4 - - dw $0 ; E5 - - dw $0 ; E6 - - dw $0 ; E7 - - dw $0 ; E8 - - dw $0 ; E9 - - dw $0 ; EA - - dw $0 ; EB - - dw $0 ; EC - - dw $0 ; ED - - dw $0 ; EE - - dw $0 ; EF - - dw $0 ; F0 - - dw $0 ; F1 - - dw $0 ; F2 - - dw $0 ; F3 - - dw $0 ; F4 - - dw $0 ; F5 - - dw $0 ; F6 - - dw $0 ; F7 - - dw $0 ; F8 - - dw $0 ; F9 - - dw $0 ; FA - - dw $0 ; FB - - dw $0 ; FC - - dw $0 ; FD - + dw $0 ; B0 - + dw $0 ; B1 - + dw $0 ; B2 - + dw $0 ; B3 - + dw $0 ; B4 - + dw $0 ; B5 - + dw $0 ; B6 - + dw $0 ; B7 - + dw $0 ; B8 - + dw $0 ; B9 - + dw $0 ; BA - + dw $0 ; BB - + dw $0 ; BC - + dw $0 ; BD - + dw $0 ; BE - + dw $0 ; BF - + dw $0 ; C0 - + dw $0 ; C1 - + dw $0 ; C2 - + dw $0 ; C3 - + dw $0 ; C4 - + dw $0 ; C5 - + dw $0 ; C6 - + dw $0 ; C7 - + dw $0 ; C8 - + dw $0 ; C9 - + dw $0 ; CA - + dw $0 ; CB - + dw $0 ; CC - + dw $0 ; CD - + dw $0 ; CE - + dw $0 ; CF - + dw $0 ; D0 - + dw $0 ; D1 - + dw $0 ; D2 - + dw $0 ; D3 - + dw $0 ; D4 - + dw $0 ; D5 - + dw $0 ; D6 - + dw $0 ; D7 - + dw $0 ; D8 - + dw $0 ; D9 - + dw $0 ; DA - + dw $0 ; DB - + dw $0 ; DC - + dw $0 ; DD - + dw $0 ; DE - + dw $0 ; DF - + dw $0 ; E0 - + dw $0 ; E1 - + dw $0 ; E2 - + dw $0 ; E3 - + dw $0 ; E4 - + dw $0 ; E5 - + dw $0 ; E6 - + dw $0 ; E7 - + dw $0 ; E8 - + dw $0 ; E9 - + dw $0 ; EA - + dw $0 ; EB - + dw $0 ; EC - + dw $0 ; ED - + dw $0 ; EE - + dw $0 ; EF - + dw $0 ; F0 - + dw $0 ; F1 - + dw $0 ; F2 - + dw $0 ; F3 - + dw $0 ; F4 - + dw $0 ; F5 - + dw $0 ; F6 - + dw $0 ; F7 - + dw $0 ; F8 - + dw $0 ; F9 - + dw $0 ; FA - + dw $0 ; FB - + dw $0 ; FC - + dw $0 ; FD - dw $0 ; FE - Server request (async) - dw $0 ; FF - + dw $0 ; FF - ;=================================================================================================== +; The table below is for "standing" items, either in heart piece locations, boss heart locations +; or shops etc. Generally we do not and shouldn't use different gfx for this purpose, so this is +; mostly a copy of the previous table. However some items, such as swords, use a separate sprite +; for receipt and non-receipt drawing. +;=================================================================================================== +StandingItemGraphicsOffsets: + dw $0860 ; 00 - Fighter Sword and Shield + dw $00E0 ; 01 - Master Sword + dw $0120 ; 02 - Tempered Sword + dw $0160 ; 03 - Butter Sword + dw BigDecompressionBuffer+$09E0 ; 04 - Fighter Shield + dw BigDecompressionBuffer+$1940 ; 05 - Fire Shield + dw BigDecompressionBuffer+$0C80 ; 06 - Mirror Shield + dw BigDecompressionBuffer+$1C80 ; 07 - Fire Rod + dw BigDecompressionBuffer+$1C80 ; 08 - Ice Rod + dw BigDecompressionBuffer+$1CA0 ; 09 - Hammer + dw BigDecompressionBuffer+$1C60 ; 0A - Hookshot + dw BigDecompressionBuffer+$1C00 ; 0B - Bow + dw BigDecompressionBuffer+$1DE0 ; 0C - Boomerang + dw BigDecompressionBuffer+$1CC0 ; 0D - Powder + dw BigDecompressionBuffer+$09A0 ; 0E - Bottle Refill (bee) + dw BigDecompressionBuffer+$1440 ; 0F - Bombos + dw BigDecompressionBuffer+$1400 ; 10 - Ether + dw BigDecompressionBuffer+$1480 ; 11 - Quake + dw BigDecompressionBuffer+$10C0 ; 12 - Lamp + dw BigDecompressionBuffer+$11E0 ; 13 - Shovel + dw BigDecompressionBuffer+$0C40 ; 14 - Flute + dw BigDecompressionBuffer+$1C40 ; 15 - Somaria + dw BigDecompressionBuffer+$14C0 ; 16 - Bottle + dw BigDecompressionBuffer+$0C00 ; 17 - Heartpiece + dw BigDecompressionBuffer+$1C40 ; 18 - Byrna + dw BigDecompressionBuffer+$1100 ; 19 - Cape + dw BigDecompressionBuffer+$1040 ; 1A - Mirror + dw BigDecompressionBuffer+$1D40 ; 1B - Glove + dw BigDecompressionBuffer+$1D40 ; 1C - Mitts + dw BigDecompressionBuffer+$1D80 ; 1D - Book + dw BigDecompressionBuffer+$1000 ; 1E - Flippers + dw BigDecompressionBuffer+$1180 ; 1F - Pearl + dw BigDecompressionBuffer+$08A0 ; 20 - Crystal + dw BigDecompressionBuffer+$0860 ; 21 - Net + dw BigDecompressionBuffer+$1900 ; 22 - Blue Mail + dw BigDecompressionBuffer+$1900 ; 23 - Red Mail + dw BigDecompressionBuffer+$1DC0 ; 24 - Small Key + dw BigDecompressionBuffer+$1140 ; 25 - Compbutt + dw BigDecompressionBuffer+$18C0 ; 26 - Heart Container from 4/4 + dw BigDecompressionBuffer+$1080 ; 27 - Bomb + dw BigDecompressionBuffer+$1840 ; 28 - 3 bombs + dw BigDecompressionBuffer+$1540 ; 29 - Mushroom + dw BigDecompressionBuffer+$1DE0 ; 2A - Red boomerang + dw BigDecompressionBuffer+$1500 ; 2B - Full bottle (red) + dw BigDecompressionBuffer+$1500 ; 2C - Full bottle (green) + dw BigDecompressionBuffer+$1500 ; 2D - Full bottle (blue) + dw BigDecompressionBuffer+$1500 ; 2E - Potion refill (red) + dw BigDecompressionBuffer+$1500 ; 2F - Potion refill (green) + dw BigDecompressionBuffer+$1500 ; 30 - Potion refill (blue) + dw BigDecompressionBuffer+$1D00 ; 31 - 10 bombs + dw BigDecompressionBuffer+$15C0 ; 32 - Big key + dw BigDecompressionBuffer+$1580 ; 33 - Map + dw BigDecompressionBuffer+$0800 ; 34 - 1 rupee + dw BigDecompressionBuffer+$0800 ; 35 - 5 rupees + dw BigDecompressionBuffer+$0800 ; 36 - 20 rupees + dw BigDecompressionBuffer+$0080 ; 37 - Green pendant + dw BigDecompressionBuffer+$0080 ; 38 - Blue pendant + dw BigDecompressionBuffer+$0080 ; 39 - Red pendant + dw BigDecompressionBuffer+$0920 ; 3A - Tossed bow + dw BigDecompressionBuffer+$08E0 ; 3B - Silvers + dw BigDecompressionBuffer+$09A0 ; 3C - Full bottle (bee) + dw BigDecompressionBuffer+$0960 ; 3D - Full bottle (fairy) + dw BigDecompressionBuffer+$18C0 ; 3E - Boss heart + dw BigDecompressionBuffer+$18C0 ; 3F - Sanc heart + dw BigDecompressionBuffer+$0D20 ; 40 - 100 rupees + dw BigDecompressionBuffer+$0D60 ; 41 - 50 rupees + dw BigDecompressionBuffer+$0CC0 ; 42 - Heart + dw BigDecompressionBuffer+$0DD0 ; 43 - Arrow + dw BigDecompressionBuffer+$1880 ; 44 - 10 arrows + dw BigDecompressionBuffer+$0CE0 ; 45 - Small magic + dw BigDecompressionBuffer+$0DA0 ; 46 - 300 rupees + dw BigDecompressionBuffer+$0000 ; 47 - 20 rupees green + dw BigDecompressionBuffer+$09A0 ; 48 - Full bottle (good bee) + dw BigDecompressionBuffer+$1C20 ; 49 - Tossed fighter sword + dw BigDecompressionBuffer+$09A0 ; 4A - Bottle refill (good bee) + dw BigDecompressionBuffer+$0040 ; 4B - Boots + + ; Rando items + dw $04A0 ; 4C - Bomb capacity (50) + dw $05A0 ; 4D - Arrow capacity (70) + dw $01A0 ; 4E - 1/2 magic + dw $01E0 ; 4F - 1/4 magic + dw $00E0 ; 50 - Safe master sword + dw $0420 ; 51 - Bomb capacity (+5) + dw $0460 ; 52 - Bomb capacity (+10) + dw $0520 ; 53 - Arrow capacity (+5) + dw $0560 ; 54 - Arrow capacity (+10) + dw $0 ; 55 - Programmable item 1 + dw $0 ; 56 - Programmable item 2 + dw $0 ; 57 - Programmable item 3 + dw $05E0 ; 58 - Upgrade-only silver arrows + dw $0 ; 59 - Rupoor + dw $0020 ; 5A - Nothing + dw $0DE0 ; 5B - Red clock + dw $0DE0 ; 5C - Blue clock + dw $0DE0 ; 5D - Green clock + dw $0 ; 5E - Progressive sword + dw $0 ; 5F - Progressive shield + dw $0 ; 60 - Progressive armor + dw $0 ; 61 - Progressive glove + dw $0 ; 62 - RNG pool item (single) + dw $0 ; 63 - RNG pool item (multi) + dw $0 ; 64 - Progressive bow + dw $0 ; 65 - Progressive bow + dw $0 ; 66 - + dw $0 ; 67 - + dw $0 ; 68 - + dw $0 ; 69 - + dw $0060 ; 6A - Triforce + dw $11E0 ; 6B - Power star + dw $0 ; 6C - + dw $0 ; 6D - Server request item + dw $0 ; 6E - Server request item (dungeon drop) + dw $0 ; 6F - + + dw BigDecompressionBuffer+$1580 ; 70 - Map of Light World + dw BigDecompressionBuffer+$1580 ; 71 - Map of Dark World + dw BigDecompressionBuffer+$1580 ; 72 - Map of Ganon's Tower + dw BigDecompressionBuffer+$1580 ; 73 - Map of Turtle Rock + dw BigDecompressionBuffer+$1580 ; 74 - Map of Thieves' Town + dw BigDecompressionBuffer+$1580 ; 75 - Map of Tower of Hera + dw BigDecompressionBuffer+$1580 ; 76 - Map of Ice Palace + dw BigDecompressionBuffer+$1580 ; 77 - Map of Skull Woods + dw BigDecompressionBuffer+$1580 ; 78 - Map of Misery Mire + dw BigDecompressionBuffer+$1580 ; 79 - Map of Dark Palace + dw BigDecompressionBuffer+$1580 ; 7A - Map of Swamp Palace + dw BigDecompressionBuffer+$1580 ; 7B - Map of Agahnim's Tower + dw BigDecompressionBuffer+$1580 ; 7C - Map of Desert Palace + dw BigDecompressionBuffer+$1580 ; 7D - Map of Eastern Palace + dw BigDecompressionBuffer+$1580 ; 7E - Map of Hyrule Castle + dw BigDecompressionBuffer+$1580 ; 7F - Map of Sewers + + dw BigDecompressionBuffer+$1140 ; 80 - Compass of Light World + dw BigDecompressionBuffer+$1140 ; 81 - Compass of Dark World + dw BigDecompressionBuffer+$1140 ; 82 - Compass of Ganon's Tower + dw BigDecompressionBuffer+$1140 ; 83 - Compass of Turtle Rock + dw BigDecompressionBuffer+$1140 ; 84 - Compass of Thieves' Town + dw BigDecompressionBuffer+$1140 ; 85 - Compass of Tower of Hera + dw BigDecompressionBuffer+$1140 ; 86 - Compass of Ice Palace + dw BigDecompressionBuffer+$1140 ; 87 - Compass of Skull Woods + dw BigDecompressionBuffer+$1140 ; 88 - Compass of Misery Mire + dw BigDecompressionBuffer+$1140 ; 89 - Compass of Dark Palace + dw BigDecompressionBuffer+$1140 ; 8A - Compass of Swamp Palace + dw BigDecompressionBuffer+$1140 ; 8B - Compass of Agahnim's Tower + dw BigDecompressionBuffer+$1140 ; 8C - Compass of Desert Palace + dw BigDecompressionBuffer+$1140 ; 8D - Compass of Eastern Palace + dw BigDecompressionBuffer+$1140 ; 8E - Compass of Hyrule Castle + dw BigDecompressionBuffer+$1140 ; 8F - Compass of Sewers + dw $0 ; 90 - Skull key + dw $0 ; 91 - Reserved + + dw BigDecompressionBuffer+$15C0 ; 92 - Big key of Ganon's Tower + dw BigDecompressionBuffer+$15C0 ; 93 - Big key of Turtle Rock + dw BigDecompressionBuffer+$15C0 ; 94 - Big key of Thieves' Town + dw BigDecompressionBuffer+$15C0 ; 95 - Big key of Tower of Hera + dw BigDecompressionBuffer+$15C0 ; 96 - Big key of Ice Palace + dw BigDecompressionBuffer+$15C0 ; 97 - Big key of Skull Woods + dw BigDecompressionBuffer+$15C0 ; 98 - Big key of Misery Mire + dw BigDecompressionBuffer+$15C0 ; 99 - Big key of Dark Palace + dw BigDecompressionBuffer+$15C0 ; 9A - Big key of Swamp Palace + dw BigDecompressionBuffer+$15C0 ; 9B - Big key of Agahnim's Tower + dw BigDecompressionBuffer+$15C0 ; 9C - Big key of Desert Palace + dw BigDecompressionBuffer+$15C0 ; 9D - Big key of Eastern Palace + dw BigDecompressionBuffer+$15C0 ; 9E - Big key of Hyrule Castle + dw BigDecompressionBuffer+$15C0 ; 9F - Big key of Sewers + + dw BigDecompressionBuffer+$1DC0 ; A0 - Small key of Sewers + dw BigDecompressionBuffer+$1DC0 ; A1 - Small key of Hyrule Castle + dw BigDecompressionBuffer+$1DC0 ; A2 - Small key of Eastern Palace + dw BigDecompressionBuffer+$1DC0 ; A3 - Small key of Desert Palace + dw BigDecompressionBuffer+$1DC0 ; A4 - Small key of Agahnim's Tower + dw BigDecompressionBuffer+$1DC0 ; A5 - Small key of Swamp Palace + dw BigDecompressionBuffer+$1DC0 ; A6 - Small key of Dark Palace + dw BigDecompressionBuffer+$1DC0 ; A7 - Small key of Misery Mire + dw BigDecompressionBuffer+$1DC0 ; A8 - Small key of Skull Woods + dw BigDecompressionBuffer+$1DC0 ; A9 - Small key of Ice Palace + dw BigDecompressionBuffer+$1DC0 ; AA - Small key of Tower of Hera + dw BigDecompressionBuffer+$1DC0 ; AB - Small key of Thieves' Town + dw BigDecompressionBuffer+$1DC0 ; AC - Small key of Turtle Rock + dw BigDecompressionBuffer+$1DC0 ; AD - Small key of Ganon's Tower + dw $0 ; AE - Reserved + dw BigDecompressionBuffer+$1DC0 ; AF - Generic small key + + dw $0 ; B0 - + dw $0 ; B1 - + dw $0 ; B2 - + dw $0 ; B3 - + dw $0 ; B4 - + dw $0 ; B5 - + dw $0 ; B6 - + dw $0 ; B7 - + dw $0 ; B8 - + dw $0 ; B9 - + dw $0 ; BA - + dw $0 ; BB - + dw $0 ; BC - + dw $0 ; BD - + dw $0 ; BE - + dw $0 ; BF - + dw $0 ; C0 - + dw $0 ; C1 - + dw $0 ; C2 - + dw $0 ; C3 - + dw $0 ; C4 - + dw $0 ; C5 - + dw $0 ; C6 - + dw $0 ; C7 - + dw $0 ; C8 - + dw $0 ; C9 - + dw $0 ; CA - + dw $0 ; CB - + dw $0 ; CC - + dw $0 ; CD - + dw $0 ; CE - + dw $0 ; CF - + dw $0 ; D0 - + dw $0 ; D1 - + dw $0 ; D2 - + dw $0 ; D3 - + dw $0 ; D4 - + dw $0 ; D5 - + dw $0 ; D6 - + dw $0 ; D7 - + dw $0 ; D8 - + dw $0 ; D9 - + dw $0 ; DA - + dw $0 ; DB - + dw $0 ; DC - + dw $0 ; DD - + dw $0 ; DE - + dw $0 ; DF - + dw $0 ; E0 - + dw $0 ; E1 - + dw $0 ; E2 - + dw $0 ; E3 - + dw $0 ; E4 - + dw $0 ; E5 - + dw $0 ; E6 - + dw $0 ; E7 - + dw $0 ; E8 - + dw $0 ; E9 - + dw $0 ; EA - + dw $0 ; EB - + dw $0 ; EC - + dw $0 ; ED - + dw $0 ; EE - + dw $0 ; EF - + dw $0 ; F0 - + dw $0 ; F1 - + dw $0 ; F2 - + dw $0 ; F3 - + dw $0 ; F4 - + dw $0 ; F5 - + dw $0 ; F6 - + dw $0 ; F7 - + dw $0 ; F8 - + dw $0 ; F9 - + dw $0 ; FA - + dw $0 ; FB - + dw $0 ; FC - + dw $0 ; FD - + dw $0 ; FE - Server request (async) + dw $0 ; FF - diff --git a/fileselect.asm b/fileselect.asm index dc7361f..97511e0 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -557,30 +557,30 @@ FileSelectItems: ;-------------------------------------------------------------------------------- FileSelectDrawHudBar: - LDA.w #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10) - LDA.l DisplayRupeesSRAM - JSL.l HexToDec - LDA.l HexToDecDigit2 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9) - LDA.l HexToDecDigit3 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10) - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) + LDA.w #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10) + LDA.l DisplayRupeesSRAM + JSL.l HUDHex4Digit_Long + LDA.b Scrap04 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9) + LDA.b Scrap05 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10) + LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) + LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) - LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) - LDA.l BombsEquipmentSRAM : AND.w #$00FF - JSL.l HexToDec - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15) + LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) + LDA.l BombsEquipmentSRAM : AND.w #$00FF + JSL.l HUDHex2Digit_Long + TYA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14) + TXA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15) - LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ + - LDA.w #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17) - BRA ++ - + - LDA.w #$0289|!FS_COLOR_BROWN : %fs_draw16x8(0,17) - ++ - LDA.l CurrentArrowsSRAM : AND.w #$00FF - JSL.l HexToDec - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18) + LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ + + LDA.w #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17) + BRA ++ + + + LDA.w #$0289|!FS_COLOR_BROWN : %fs_draw16x8(0,17) + ++ + LDA.l CurrentArrowsSRAM : AND.w #$00FF + JSL.l HUDHex2Digit_Long + TYA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17) + TXA : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18) RTS ;-------------------------------------------------------------------------------- AltBufferTable: diff --git a/heartpieces.asm b/heartpieces.asm index 79924b2..d591acb 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -12,7 +12,6 @@ HeartPieceGet: .skipLoad - STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters @@ -21,6 +20,8 @@ HeartPieceGet: .notHeart .giveItem JSL.l $0791B3 ; Player_HaltDashAttackLong + STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message + JSL.l Link_ReceiveItem CLC ; return false JMP .done ; finished @@ -41,7 +42,6 @@ HeartContainerGet: ; if for any reason the item value is 0 reload it, just in case JSL.l LoadHeartContainerRoomValue : TAY + - BRA HeartPieceGet_skipLoad ;-------------------------------------------------------------------------------- DrawHeartPieceGFX: diff --git a/hooks.asm b/hooks.asm index 73f18a9..1cc5625 100755 --- a/hooks.asm +++ b/hooks.asm @@ -883,7 +883,8 @@ org $00D557 ; 5557 - Bank00.asm:3486 (LDA $00 : ADC $D469, X) JSL.l GetAnimatedSpriteBufferPointer : NOP org $0799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem) -JSL.l AddReceivedItemExpanded +JSL.l AddReceivedItemLong +;JSL.l AddReceivedItemExpanded org $098611 ; 48611 - ancilla_init.asm:720 (LDA .item_target_addr+0, X) LDA.w ItemReceipts_target+0, X @@ -900,7 +901,7 @@ org $098635 ; 48635 - ancilla_init.asm:727 (LDA .item_values, Y) LDA.w ItemReceipts_value, Y org $0986AA ; 486AA - ancilla_init.asm:848 (LDA .item_masks, X) -LDA.w AddReceivedItemExpanded_item_masks, X +LDA.w DungeonItemMasks, X org $098769 ; 48769 - ancilla_init.asm:1005 (LDA .item_graphics_indices, Y) LDA.w ItemReceipts_graphics, Y @@ -927,8 +928,8 @@ LDA.l ItemReceipts_width, X org $08C6F9 ; 446F9 - ancilla_receive_item.asm:570 (LDA AddReceiveItem.properties, X) JSL CheckReceivedItemPropertiesBeforeLoad -org $08C70F ; 4470F - ancilla_receive_item.asm : 582 - (LDA.b #$00 : STA ($92), Y) -JSL.l LoadNarrowObject +;org $08C70F ; 4470F - ancilla_receive_item.asm : 582 - (LDA.b #$00 : STA ($92), Y) +;JSL.l LoadNarrowObject org $0985ED ; 485ED - ancilla_init.asm:693 (LDA $02E9 : CMP.b #$01) JSL.l AddReceivedItemExpandedGetItem : NOP @@ -1949,6 +1950,7 @@ JSL.l DrawHeartPieceGFX ;-------------------------------------------------------------------------------- org $05F08A ; <- 2F08A - sprite_heart_upgrades.asm : 324 - (LDA $7EF36B : INC A : AND.b #$03 : STA $7EF36B : BNE .got_4_piecese) item determination JSL.l HeartPieceGet +JSL.l DynamicDrawCleanup JSL.l IsMedallion BCS + : BRA Sprite_EB_HeartPiece_handle_flags : + ; Don't change OW flags if we're STZ.w SpriteAITable, X : RTS ; getting a tablet item @@ -2518,7 +2520,3 @@ org $098C85 : JSL TransferItemReceiptToBuffer_using_GraphicsID ; gt cutscene org $099BBE : JSL TransferItemReceiptToBuffer_using_GraphicsID - - - - diff --git a/newhud.asm b/newhud.asm index 9e60f59..6b93f81 100644 --- a/newhud.asm +++ b/newhud.asm @@ -257,19 +257,24 @@ NewHUD_DrawMagicMeter: TAY LDA.b FrameCounter - AND.b #$0C + REP #$30 + AND.w #$000C LSR + BRA .recolor .set_index ; this branch is always 0000 when taken + REP #$30 + TDC + .recolor TAX LDA.l MagicMeterColorMasks,X TYX - TAY : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$046 - TYA : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$086 - TYA : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$0C6 - TYA : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$106 + TAY : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.l HUDTileMapBuffer+$046 + TYA : AND.l DrawMagicMeter_mp_tilemap+2,X : STA.l HUDTileMapBuffer+$086 + TYA : AND.l DrawMagicMeter_mp_tilemap+4,X : STA.l HUDTileMapBuffer+$0C6 + TYA : AND.l DrawMagicMeter_mp_tilemap+6,X : STA.l HUDTileMapBuffer+$106 ;=================================================================================================== @@ -338,3 +343,13 @@ HUDHex4Digit: RTS ;=================================================================================================== + +HUDHex2Digit_Long: + JSR HUDHex2Digit + REP #$20 +RTL + +HUDHex4Digit_Long: + JSR HUDHex4Digit + REP #$20 +RTL diff --git a/newitems.asm b/newitems.asm index 498bd15..338c09a 100755 --- a/newitems.asm +++ b/newitems.asm @@ -39,6 +39,7 @@ ; #$80 - Compasses ; #$90 - Big Keys ; #$A0 - Small Keys +; #$B0-B6 - Crystals ; #$FE - Server Request (Asynchronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- @@ -48,6 +49,7 @@ ; 0xF1 - freestanding heart 2 / boss heart / npc ; 0xF3 - tablet/pedestal ;-------------------------------------------------------------------------------- +;-------------------------------------------------------------------------------- GetAnimatedSpriteGfxFile: CMP.b #$0C : BNE + LDY.b #$5C : JML GetAnimatedSpriteGfxFile_return @@ -70,13 +72,13 @@ GetAnimatedSpriteGfxFile: + LDY.b #$32 JML GetAnimatedSpriteGfxFile_return -;-------------------------------------------------------------------------------- + GetAnimatedSpriteBufferPointer_table: ; Original data: dw $09C0, $0030, $0060, $0090, $00C0, $0300, $0318, $0330 dw $0348, $0360, $0378, $0390, $0930, $03F0, $0420, $0450 -dw $0468, $0600, $0630, $0660, $0690, $06C0, $06F0, $0720 +dw $0468, $0600, $0630, $0660, $0690, $06C0, $06F0, $0720 ; disassembly (incorrectly?) says this is $0270 dw $0750, $0768, $0900, $0930, $0960, $0990, $09F0, $0000 dw $00F0, $0A20, $0A50, $0660, $0600, $0618, $0630, $0648 @@ -86,7 +88,7 @@ dw $03C0, $0990, $09A8, $09C0, $09D8, $0A08, $0A38, $0600 dw $0630 ; New data: dw $0600, $0630, $0660, $0690 ; 50 Bombs / 70 Arrows / Half Magic / Quarter Magic -dw $06C0, $06F0, $0720 ; +5/+10 Bomb Arrows +dw $06C0, $06F0, $8520 ; +5/+10 Bomb Arrows ;#$4x dw $0750 ; +10 Arrows @@ -103,7 +105,7 @@ GetAnimatedSpriteBufferPointer: LDA.b Scrap00 : ADC.l GetAnimatedSpriteBufferPointer_table, X ;PLB RTL -;-------------------------------------------------------------------------------- + macro ProgrammableItemLogic(index) LDA.l ProgrammableItemLogicPointer_ : BNE ?jump LDA.l ProgrammableItemLogicPointer_+1 : BNE ?jump @@ -164,214 +166,225 @@ ProcessEventItems: PLA : STA.b Scrap00 RTS ;-------------------------------------------------------------------------------- +AddReceivedItemLong: + JSR ResolveReceipt + PHB : PHK +JML AddReceivedItem+2 + AddReceivedItemExpandedGetItem: PHX LDA.w ItemReceiptID ; check inventory + ;JSR ResolveReceipt JSL.l FreeDungeonItemNotice - CMP.b #$0B : BNE + ; Bow - LDA.l BowTracking : AND.b #$40 : BEQ ++ + JSR ItemBehavior + + PLX + LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over +RTL + + +ItemBehavior: + REP #$30 + AND #$00FF : ASL : TAX + LDA.l ItemReceipts_behavior, X : STA.w ScratchBufferV + SEP #$30 + JMP.w (ScratchBufferV) + + .skip + RTS + .bow + LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE ++ LDA.b #03 : STA.l BowEquipment ; set bow to silver ++ - JMP .done - + CMP.b #$3B : BNE + ; Silver Bow + RTS + .bow_and_arrows + LDA.l BowTracking : ORA.l ScratchBufferV+6 : STA.l BowTracking + BIT.b #$40 : BEQ + + LDA.l SilverArrowsUseRestriction : BNE + + LDA.b #03 : STA.l BowEquipment ; set bow to silver + + + RTS + .silver_bow + LDA.l BowTracking : ORA.l ScratchBufferV+6 : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE .noequip LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip - LDA.l ArrowsFiller : BNE ++ ; check arrows - LDA.b #$03 : BRA +++ ; bow without arrow - ++ + LDA.l ArrowsFiller : BNE + ; check arrows + LDA.b #$03 : BRA ++ ; bow without arrow + + LDA.b #$04 ; bow with arrow - +++ + ++ STA.l BowEquipment .noequip LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking ; mark silver bow on y-toggle - JMP .done - + CMP.b #$4C : BNE + ; 50 bombs + RTS + .bombs_50 LDA.b #50 : STA.l BombCapacity ; upgrade bombs LDA.b #50 : STA.l BombsFiller ; fill bombs - JMP .done - + CMP.b #$4D : BNE + ; 70 arrows + RTS + .arrows_70 LDA.b #70 : STA.l ArrowCapacity ; upgrade arrows LDA.b #70 : STA.l ArrowsFiller ; fill arrows - JMP .done - + CMP.b #$4E : BNE + ; 1/2 magic - LDA.l MagicConsumption : CMP.b #$02 : !BGE ++ + RTS + .magic_2 + LDA.l MagicConsumption : CMP.b #$02 : !BGE + INC : STA.l MagicConsumption ; upgrade magic - ++ + + LDA.b #$80 : STA.l MagicFiller ; fill magic - JMP .done - + CMP.b #$4F : BNE + ; 1/4 magic + RTS + .magic_4 LDA.b #$02 : STA.l MagicConsumption ; upgrade magic LDA.b #$80 : STA.l MagicFiller ; fill magic - JMP .done - + CMP.b #$50 : BNE + ; Master Sword (Safe) + RTS + .master_sword_safe LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword - LDA.b #$02 : STA.l SwordEquipment ; set master sword - JMP .done - + CMP.b #$51 : BNE + ; +5 Bombs + LDA.b #$02 : STA.l SwordEquipment ; set master sword + + + RTS + .bombs_5 LDA.l BombCapacity : !ADD.b #$05 : STA.l BombCapacity ; upgrade bombs +5 LDA.l Upgrade5BombsRefill : STA.l BombsFiller ; fill bombs - JMP .done - + CMP.b #$52 : BNE + ; +10 Bombs + RTS + .bombs_10 LDA.l BombCapacity : !ADD.b #$0A : STA.l BombCapacity ; upgrade bombs +10 LDA.l Upgrade10BombsRefill : STA.l BombsFiller ; fill bombs - JMP .done - + CMP.b #$53 : BNE + ; +5 Arrows + RTS + .arrows_5 LDA.l ArrowCapacity : !ADD.b #$05 : STA.l ArrowCapacity ; upgrade arrows +5 LDA.l Upgrade5ArrowsRefill : STA.l ArrowsFiller ; fill arrows - JMP .done - + CMP.b #$54 : BNE + ; +10 Arrows + RTS + .arrows_10 LDA.l ArrowCapacity : !ADD.b #$0A : STA.l ArrowCapacity ; upgrade arrows +10 LDA.l Upgrade10ArrowsRefill : STA.l ArrowsFiller ; fill arrows - JMP .done - + CMP.b #$55 : BNE + ; Programmable Object 1 + RTS + .programmable_1 %ProgrammableItemLogic(1) - JMP .done - + CMP.b #$56 : BNE + ; Programmable Object 2 + RTS + .programmable_2 %ProgrammableItemLogic(2) - JMP .done - + CMP.b #$57 : BNE + ; Programmable Object 3 + RTS + .programmable_3 %ProgrammableItemLogic(3) - JMP .done - + CMP.b #$58 : BNE + ; Upgrade-Only Sivler Arrows - LDA.l SilverArrowsUseRestriction : BNE +++ - LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ +++ - LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE ++ + RTS + .silver_arrows + LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking + LDA.l SilverArrowsUseRestriction : BNE ++ + LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++ + LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE + !ADD.b #$02 : STA.l BowEquipment ; switch to silver bow - ++ - +++ - LDA.l ArrowMode : BEQ ++ - LDA.b #$01 : STA.l ArrowsFiller + + ++ - + CMP.b #$59 : BNE + ; 1 Rupoor + LDA.l ArrowMode : BEQ + + LDA.b #$01 : STA.l ArrowsFiller + + + RTS + .rupoor REP #$20 : LDA.l CurrentRupees : !SUB RupoorDeduction : STA.l CurrentRupees : SEP #$20 ; Take 1 rupee - JMP .done - + CMP.b #$5A : BNE + ; Null Item - JMP .done - + CMP.b #$5B : BNE + ; Red Clock + RTS + .null + RTS + .red_clock REP #$20 ; set 16-bit accumulator LDA.l ChallengeTimer : !ADD.l RedClockAmount : STA.l ChallengeTimer LDA.l ChallengeTimer+2 : ADC.l RedClockAmount+2 : STA.l ChallengeTimer+2 SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$5C : BNE + ; Blue Clock + RTS + .blue_clock REP #$20 ; set 16-bit accumulator LDA.l ChallengeTimer : !ADD.l BlueClockAmount : STA.l ChallengeTimer LDA.l ChallengeTimer+2 : ADC.l BlueClockAmount+2 : STA.l ChallengeTimer+2 SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$5D : BNE + ; Green Clock + RTS + .green_clock REP #$20 ; set 16-bit accumulator LDA.l ChallengeTimer : !ADD.l GreenClockAmount : STA.l ChallengeTimer LDA.l ChallengeTimer+2 : ADC.l GreenClockAmount+2 : STA.l ChallengeTimer+2 SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$5E : BNE + ; Progressive Sword - JMP .done - + CMP.b #$5F : BNE + ; Progressive Shield - JMP .done - + CMP.b #$60 : BNE + ; Progressive Armor - JMP .done - + CMP.b #$61 : BNE + ; Progressive Lifting Glove - JMP .done - + CMP.b #$62 : BNE + ; RNG Pool Item (Single) - JMP .done - + CMP.b #$63 : BNE + ; RNG Pool Item (Multi) - JMP .done - + CMP.b #$64 : BNE + ; Progressive Bow - JMP .done - + CMP.b #$65 : BNE + ; Progressive Bow - JMP .done - + CMP.b #$6A : BNE + ; Goal Collectable (Single/Triforce) + RTS + .triforce JSL.l ActivateGoal - JMP .done - + CMP.b #$6B : BNE + ; Goal Collectable (Multi/Power Star) - BRA .multi_collect - + CMP.b #$6C : BNE + ; Goal Collectable (Multi/Power Star) Alternate Graphic - .multi_collect + RTS + .goal_item REP #$20 ; set 16-bit accumulator - LDA.l GoalItemRequirement : BEQ ++ + LDA.l GoalItemRequirement : BEQ + LDA.l GoalCounter : INC : STA.l GoalCounter - CMP.w GoalItemRequirement : !BLT ++ - LDA.l TurnInGoalItems : AND.w #$00FF : BNE ++ + CMP.w GoalItemRequirement : !BLT + + LDA.l TurnInGoalItems : AND.w #$00FF : BNE + JSL.l ActivateGoal - ++ + + SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$6D : BNE + ; Server Request F0 + RTS + .request_F0 JSL.l ItemGetServiceRequest_F0 - JMP .done - + CMP.b #$6E : BNE + ; Server Request F1 + RTS + .request_F1 JSL.l ItemGetServiceRequest_F1 - JMP .done - + CMP.b #$6F : BNE + ; Server Request F2 + RTS + .request_F2 JSL.l ItemGetServiceRequest_F2 - JMP .done - ;+ CMP.b #$FE : BNE + ; Server Request (Null Chest) - ; JSL.l ItemGetServiceRequest - ; JMP .done - + CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map - AND.b #$0F : CMP.b #$08 : !BGE ++ + RTS + .request_async + ; JSL.l ItemGetServiceRequest + RTS + .free_map + AND.b #$0F : CMP.b #$08 : !BGE + %ValueShift() ORA.l MapField : STA.l MapField ; Map 1 - JMP .done - ++ + RTS + + !SUB #$08 %ValueShift() - BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA.l MapField+1 : STA.l MapField+1 ; Map 2 - JMP .done - + CMP.b #$80 : !BLT + : CMP.b #$90 : !BGE + ; Free Compass + RTS + .hc_map + LDA.b #$C0 : ORA.l MapField+1 : STA.l MapField+1 + RTS + .free_compass AND.b #$0F : CMP.b #$08 : !BGE ++ %ValueShift() ORA.l CompassField : STA.l CompassField ; Compass 1 - JMP .done + RTS ++ !SUB #$08 %ValueShift() - BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA.l CompassField+1 : STA.l CompassField+1 ; Compass 2 - JMP .done - + CMP.b #$90 : !BLT + : CMP.b #$A0 : !BGE + ; Free Big Key + RTS + .hc_compass + LDA.b #$C0 : ORA.l CompassField+1 : STA.l CompassField+1 + RTS + .free_bigkey AND.b #$0F : CMP.b #$08 : !BGE ++ %ValueShift() ORA.l BigKeyField : STA.l BigKeyField ; Big Key 1 - JMP .done + RTS ++ !SUB #$08 %ValueShift() - BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both ORA.l BigKeyField+1 : STA.l BigKeyField+1 ; Big Key 2 - JMP .done - + CMP.b #$A0 : !BLT + : CMP.b #$B0 : !BGE + ; Free Small Key - AND.b #$0F : TAX - LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X ; Increment Key Count - - CPX.b #$00 : BNE ++ - STA.l HyruleCastleKeys ; copy HC to sewers - ++ : CPX.b #$01 : BNE ++ - STA.l SewerKeys ; copy sewers to HC - ++ - - LDA.l GenericKeys : BEQ + - .generic + RTS + .hc_bigkey + LDA.b #$C0 : ORA.l BigKeyField+1 : STA.l BigKeyField+1 + RTS + .free_smallkey + AND.b #$0F : TAX + LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X ; Increment Key Count + RTS + .hc_smallkey + LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys + LDA.l SewerKeys : INC : STA.l SewerKeys + RTS + .generic_smallkey + LDA.l GenericKeys : BEQ .normal LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys - JMP .done - .normal - TXA : ASL : CMP.w DungeonID : BNE ++ - LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys - ++ - JMP .done - + - .done - PLX - LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over -RTL -; #$70 - Maps -; #$80 - Compasses -; #$90 - Big Keys -; #$A0 - Small Keys + RTS + .normal + LDA.w DungeonID : CMP.b #$FF : BEQ .done + LSR : TAX + LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X + .done + RTS + ;-------------------------------------------------------------------------------- ;2B:Bottle Already Filled w/ Red Potion ;2C:Bottle Already Filled w/ Green Potion @@ -379,114 +392,93 @@ RTL ;3C:Bottle Already Filled w/ Bee ;3D:Bottle Already Filled w/ Fairy ;48:Bottle Already Filled w/ Gold Bee -AddReceivedItemExpanded: -{ - PHA : PHX - JSL.l PreItemGet +ResolveReceipt: + PHA : PHX + PHK : PLB + JSL.l PreItemGet + LDA.w ItemReceiptID ; Item Value + .get_item + JSR AttemptItemSubstitution + LDX.b #ItemReceipts>>16 : STX.w ScratchBufferV+2 + REP #$30 + AND.w #$00FF : ASL : TAX + LDA.w ItemReceipts_resolution, X + STA.w ScratchBufferV + SEP #$30 + JMP.w (ScratchBufferV) + .have_item - LDA.w ItemReceiptID ; Item Value - JSR AttemptItemSubstitution - STA.w ItemReceiptID + JSR IncrementItemCounters + STA.w ItemReceiptID + PLX : PLA + RTS + ;PHB : PHK ; we're skipping the corresponding instructions to grab the data bank + ;JML.l AddReceivedItem+2 +.items + .skip + LDA.w ItemReceiptID + JMP.w .have_item + .bottles + JSR.w CountBottles : CMP.l BottleLimit : !BLT + + LDA.l BottleLimitReplacement + JMP.w .get_item + + + LDA.w ItemReceiptID + JMP.w .have_item + .magic + LDA.l MagicConsumption : BEQ + + LDA.b #$4F : JMP.w .have_item + + : LDA.b #$4E + JMP.w .have_item + .swords + LDA.l HighestSword : CMP.l ProgressiveSwordLimit : BCC + + LDA.l ProgressiveSwordReplacement : JMP.w .get_item + + + ADC.b #$43 : JMP.w .have_item + .shields + LDA.l HighestShield : CMP.l ProgressiveShieldLimit : BCC + + LDA.l ProgressiveShieldReplacement : JMP.w .get_item + + + ADC.b #$04 : JMP.w .have_item + .armor + LDA.l HighestMail : CMP.l ProgressiveArmorLimit : BCC + + LDA.l ProgressiveArmorReplacement : JMP.w .get_item + + + ADC.b #$22 : JMP.w .have_item + .gloves + LDA.l GloveEquipment : BNE + ; No Lift + LDA.b #$1B : JMP.w .have_item + + : LDA.b #$1C : JMP.w .have_item ; Everything Else + .progressive_bow + LDA.b #$80 : STA.l ScratchBufferV+6 + BRA .both_bows + .progressive_bow_2 + LDA.b #$20 : STA.l ScratchBufferV+6 + .both_bows + LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + + LDA.l ProgressiveBowReplacement : JMP.w .get_item + + : CMP.b #$00 : BNE + ; No Bow + LDA.b #$3A : JMP.w .have_item + + : LDA.b #$3B : JMP.w .have_item ; Any Bow + .null_chest + ; JSL ChestItemServiceRequest + JMP.w .have_item + .rng_single + JSL.l GetRNGItemSingle : STA.w ScratchBufferV+6 + XBA : JSR.w MarkRNGItemSingle + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in + LDA.w ScratchBufferV+6 : JMP.w .get_item + .rng_multi + JSL.l GetRNGItemMulti : STA.w ScratchBufferV+6 + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in + LDA.w ScratchBufferV+6 : JMP.w .get_item - JSR IncrementItemCounters - CMP.b #$16 : BNE ++ ; Bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$2B : BNE ++ ; Red Potion w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$2C : BNE ++ ; Green Potion w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$2D : BNE ++ ; Blue Potion w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$3C : BNE ++ ; Bee w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$3D : BNE ++ ; Fairy w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$48 : BNE ++ ; Gold Bee w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$4E : BNE ++ ; Progressive Magic - LDA.l MagicConsumption : BEQ +++ - LDA.b #$4F : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$5E : BNE ++ ; Progressive Sword - LDA.l HighestSword : CMP.l ProgressiveSwordLimit : !BLT + - LDA.l ProgressiveSwordReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Sword - LDA.b #$49 : STA.w ItemReceiptID : JMP .done - + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$50 : STA.w ItemReceiptID : JMP .done - + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$02 : STA.w ItemReceiptID : JMP .done - + ; Everything Else - LDA.b #$03 : STA.w ItemReceiptID : JMP .done - ++ : CMP.b #$5F : BNE ++ ; Progressive Shield - LDA.l HighestShield : CMP.l ProgressiveShieldLimit : !BLT + - LDA.l ProgressiveShieldReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Shield - LDA.b #$04 : STA.w ItemReceiptID : JMP .done - + : CMP.b #$01 : BNE + ; Fighter Shield - LDA.b #$05 : STA.w ItemReceiptID : JMP .done - + ; Everything Else - LDA.b #$06 : STA.w ItemReceiptID : JMP .done - ++ : CMP.b #$60 : BNE ++ ; Progressive Armor - LDA.l HighestMail : CMP.l ProgressiveArmorLimit : !BLT + - LDA.l ProgressiveArmorReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Armor - LDA.b #$22 : STA.w ItemReceiptID : JMP .done - + ; Everything Else - LDA.b #$23 : STA.w ItemReceiptID : JMP .done - ++ : CMP.b #$61 : BNE ++ ; Progressive Lifting Glove - LDA.l GloveEquipment : BNE + ; No Lift - LDA.b #$1B : STA.w ItemReceiptID : BRA .done - + ; Everything Else - LDA.b #$1C : STA.w ItemReceiptID : BRA .done - ++ : CMP.b #$64 : BNE ++ : -- ; Progressive Bow - LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Bow - LDA.b #$3A : STA.w ItemReceiptID : BRA .done - + ; Any Bow - LDA.b #$3B : STA.w ItemReceiptID : BRA .done - ++ : CMP.b #$65 : BNE ++ ; Progressive Bow 2 - LDA.l BowTracking : ORA.b #$20 : STA.l BowTracking - BRA -- - ; ++ : CMP.b #$FE : BNE ++ ; Server Request (Null Chest) - ; JSL ChestItemServiceRequest - ; BRA .done - ++ : CMP.b #$62 : BNE ++ ; RNG Item (Single) - JSL.l GetRNGItemSingle : STA.w ItemReceiptID - XBA : JSR.w MarkRNGItemSingle - LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - BRA .done - ++ : CMP.b #$63 : BNE ++ ; RNG Item (Multi) - JSL.l GetRNGItemMulti : STA.w ItemReceiptID - LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - BRA .done - ++ - .done - PLX : PLA - - PHB : PHK ; we're skipping the corresponding instructions to grab the data bank - JML.l AddReceivedItem+2 -} ;-------------------------------------------------------------------------------- ;DATA AddReceivedItemExpanded { -.item_masks ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc +ItemMasks: + ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc ; sewers and castle get 2 bits active so that they can share their items elegantly dw $C000, $C000, $2000, $1000, $0800, $0400, $0200, $0100 dw $0080, $0040, $0020, $0010, $0008, $0004, $4B8B, $20AB ; last two can be re-used @@ -510,287 +502,292 @@ AddReceivedItemExpanded: } ItemReceipts: - .offset_y : fillbyte $00 : fill 256 - .offset_x : fillbyte $00 : fill 256 - .graphics : fillbyte $00 : fill 256 ; item_graphics_indices - .width : fillbyte $00 : fill 256 ; wide_item_flag - .palette : fillbyte $00 : fill 256 ; properties - .target : fillword $0000 : fill 256*2 ; item_target_addr - .value : fillbyte $00 : fill 256 ; item_values + .offset_y : fillbyte $00 : fill 256 + .offset_x : fillbyte $00 : fill 256 + .graphics : fillbyte $00 : fill 256 ; item_graphics_indices + .width : fillbyte $00 : fill 256 ; wide_item_flag + .palette : fillbyte $00 : fill 256 ; properties + .target : fillword $0000 : fill 256*2 ; item_target_addr + .value : fillbyte $00 : fill 256 ; item_values + .pal_override : fillbyte $00 : fill 256 ; PaletteOverride + .behavior : fillword $0000 : fill 256*2 ; ItemBehavior + .resolution : fillword $0000 : fill 256*2 ; ReceiptResolution -macro ReceiptProps(id, y, x, gfx, width, pal, sram, value) +macro ReceiptProps(id, y, x, gfx, width, pal, sram, value, pal_override, behavior, res) pushpc - org ItemReceipts_offset_y+ : db - org ItemReceipts_offset_x+ : db - org ItemReceipts_graphics+ : db - org ItemReceipts_width+ : db - org ItemReceipts_palette+ : db - org ItemReceipts_target++ : dw - org ItemReceipts_value+ : db + org ItemReceipts_offset_y+ : db + org ItemReceipts_offset_x+ : db + org ItemReceipts_graphics+ : db + org ItemReceipts_width+ : db + org ItemReceipts_palette+ : db + org ItemReceipts_target++ : dw + org ItemReceipts_value+ : db + org ItemReceipts_pal_override+ : db + org ItemReceipts_behavior++ : dw ItemBehavior_ + org ItemReceipts_resolution++ : dw ResolveReceipt_ pullpc endmacro -%ReceiptProps($00, -5, 0, $06, 2, $02, $F359, $01) ; 00 - Fighter sword -%ReceiptProps($01, -5, 4, $18, 0, $FF, $F359, $02) ; 01 - Master sword - TODO gfx value? -%ReceiptProps($02, -5, 4, $18, 0, $05, $F359, $03) ; 02 - Tempered sword - TODO gfx value? -%ReceiptProps($03, -5, 4, $18, 0, $05, $F359, $04) ; 03 - Butter sword - TODO gfx value? -%ReceiptProps($04, -5, 4, $2D, 0, $05, $F35A, $01) ; 04 - Fighter shield -%ReceiptProps($05, -4, 0, $20, 2, $05, $F35A, $02) ; 05 - Fire shield -%ReceiptProps($06, -4, 0, $2E, 2, $05, $F35A, $03) ; 06 - Mirror shield -%ReceiptProps($07, -5, 4, $09, 0, $01, $F345, $01) ; 07 - Fire rod -%ReceiptProps($08, -5, 4, $09, 0, $02, $F346, $01) ; 08 - Ice rod -%ReceiptProps($09, -4, 4, $0A, 0, $01, $F34B, $01) ; 09 - Hammer -%ReceiptProps($0A, -4, 4, $08, 0, $01, $F342, $01) ; 0A - Hookshot -%ReceiptProps($0B, -4, 4, $05, 0, $01, $F340, $01) ; 0B - Bow -%ReceiptProps($0C, -2, 5, $10, 0, $02, $F341, $01) ; 0C - Boomerang -%ReceiptProps($0D, -4, 0, $0B, 2, $02, $F344, $02) ; 0D - Powder -%ReceiptProps($0E, -4, 0, $2C, 2, $02, $F35C, $FF) ; 0E - Bottle refill (bee) -%ReceiptProps($0F, -4, 0, $1B, 2, $04, $F347, $01) ; 0F - Bombos -%ReceiptProps($10, -4, 0, $1A, 2, $04, $F348, $01) ; 10 - Ether -%ReceiptProps($11, -4, 0, $1C, 2, $04, $F349, $01) ; 11 - Quake -%ReceiptProps($12, -4, 0, $14, 2, $01, $F34A, $01) ; 12 - Lamp -%ReceiptProps($13, -4, 4, $19, 0, $01, $F34C, $01) ; 13 - Shovel -%ReceiptProps($14, -4, 0, $0C, 2, $02, $F34C, $02) ; 14 - Flute -%ReceiptProps($15, -4, 4, $07, 0, $01, $F350, $01) ; 15 - Somaria -%ReceiptProps($16, -4, 0, $1D, 2, $01, $F35C, $FF) ; 16 - Bottle -%ReceiptProps($17, -4, 0, $2F, 2, $01, $F36B, $FF) ; 17 - Heart piece -%ReceiptProps($18, -4, 4, $07, 0, $02, $F351, $01) ; 18 - Byrna -%ReceiptProps($19, -4, 0, $15, 2, $01, $F352, $01) ; 19 - Cape -%ReceiptProps($1A, -4, 0, $12, 2, $02, $F353, $02) ; 1A - Mirror -%ReceiptProps($1B, -4, 0, $0D, 2, $01, $F354, $01) ; 1B - Glove -%ReceiptProps($1C, -4, 0, $0D, 2, $04, $F354, $02) ; 1C - Mitts -%ReceiptProps($1D, -4, 0, $0E, 2, $04, $F34E, $01) ; 1D - Book -%ReceiptProps($1E, -4, 0, $11, 2, $02, $F356, $01) ; 1E - Flippers -%ReceiptProps($1F, -4, 0, $17, 2, $01, $F357, $01) ; 1F - Pearl -%ReceiptProps($20, -4, 0, $28, 2, $06, $F37A, $FF) ; 20 - Crystal -%ReceiptProps($21, -4, 0, $27, 2, $01, $F34D, $01) ; 21 - Net -%ReceiptProps($22, -4, 0, $04, 2, $02, $F35B, $FF) ; 22 - Blue mail -%ReceiptProps($23, -5, 0, $04, 2, $01, $F35B, $02) ; 23 - Red mail -%ReceiptProps($24, -4, 4, $0F, 0, $02, $F36F, $FF) ; 24 - Small key -%ReceiptProps($25, -4, 0, $16, 2, $02, $F364, $FF) ; 25 - Compbutt -%ReceiptProps($26, -4, 0, $03, 2, $01, $F36C, $FF) ; 26 - Heart container from 4/4 -%ReceiptProps($27, -4, 0, $13, 2, $02, $F375, $FF) ; 27 - Bomb -%ReceiptProps($28, -4, 0, $01, 2, $02, $F375, $FF) ; 28 - 3 bombs -%ReceiptProps($29, -4, 0, $1E, 2, $04, $F344, $FF) ; 29 - Mushroom -%ReceiptProps($2A, -2, 5, $10, 0, $01, $F341, $02) ; 2A - Red boomerang -%ReceiptProps($2B, -4, 0, $00, 2, $01, $F35C, $FF) ; 2B - Full bottle (red) -%ReceiptProps($2C, -4, 0, $00, 2, $04, $F35C, $FF) ; 2C - Full bottle (green) -%ReceiptProps($2D, -4, 0, $00, 2, $02, $F35C, $FF) ; 2D - Full bottle (blue) -%ReceiptProps($2E, -4, 0, $00, 2, $01, $F36D, $FF) ; 2E - Potion refill (red) -%ReceiptProps($2F, -4, 0, $00, 2, $04, $F36E, $FF) ; 2F - Potion refill (green) -%ReceiptProps($30, -4, 0, $00, 2, $02, $F36E, $FF) ; 30 - Potion refill (blue) -%ReceiptProps($31, -4, 0, $30, 2, $02, $F375, $FF) ; 31 - 10 bombs -%ReceiptProps($32, -4, 0, $22, 2, $04, $F366, $FF) ; 32 - Big key -%ReceiptProps($33, -4, 0, $21, 2, $04, $F368, $FF) ; 33 - Map -%ReceiptProps($34, -2, 4, $24, 0, $04, $F360, $FF) ; 34 - 1 rupee -%ReceiptProps($35, -2, 4, $24, 0, $02, $F360, $FB) ; 35 - 5 rupees -%ReceiptProps($36, -2, 4, $24, 0, $01, $F360, $EC) ; 36 - 20 rupees -%ReceiptProps($37, -4, 0, $23, 2, $04, $F374, $FF) ; 37 - Green pendant -%ReceiptProps($38, -4, 0, $23, 2, $01, $F374, $FF) ; 38 - Blue pendant -%ReceiptProps($39, -4, 0, $23, 2, $02, $F374, $FF) ; 39 - Red pendant -%ReceiptProps($3A, -4, 0, $29, 2, $02, $F340, $01) ; 3A - Tossed bow -%ReceiptProps($3B, -4, 0, $2A, 2, $01, $F340, $03) ; 3B - Silvers -%ReceiptProps($3C, -4, 0, $2C, 2, $02, $F35C, $FF) ; 3C - Full bottle (bee) -%ReceiptProps($3D, -4, 0, $2B, 2, $02, $F35C, $FF) ; 3D - Full bottle (fairy) -%ReceiptProps($3E, -4, 0, $03, 2, $01, $F36C, $FF) ; 3E - Boss heart -%ReceiptProps($3F, -4, 0, $03, 2, $01, $F36C, $FF) ; 3F - Sanc heart -%ReceiptProps($40, -4, 0, $34, 2, $04, $F360, $9C) ; 40 - 100 rupees -%ReceiptProps($41, -4, 0, $35, 2, $04, $F360, $CE) ; 41 - 50 rupees -%ReceiptProps($42, -2, 4, $31, 0, $01, $F372, $FF) ; 42 - Heart -%ReceiptProps($43, -2, 4, $33, 0, $02, $F376, $01) ; 43 - Arrow -%ReceiptProps($44, -4, 0, $02, 2, $02, $F376, $0A) ; 44 - 10 arrows -%ReceiptProps($45, -2, 4, $32, 0, $04, $F373, $FF) ; 45 - Small magic -%ReceiptProps($46, -4, 0, $36, 2, $04, $F360, $FF) ; 46 - 300 rupees -%ReceiptProps($47, -4, 0, $37, 2, $04, $F360, $FF) ; 47 - 20 rupees green -%ReceiptProps($48, -4, 0, $2C, 2, $02, $F35C, $FF) ; 48 - Full bottle (good bee) -%ReceiptProps($49, -5, 4, $06, 0, $05, $F359, $01) ; 49 - Tossed fighter sword -%ReceiptProps($4A, -4, 0, $0C, 2, $02, $F34C, $03) ; 4A - Bottle refill (good bee) -%ReceiptProps($4B, -4, 0, $38, 2, $01, $F355, $01) ; 4B - Boots -%ReceiptProps($4C, -4, 0, $39, 2, $04, $F375, $32) ; 4C - Bomb capacity (50) -%ReceiptProps($4D, -4, 0, $3A, 2, $04, $F376, $46) ; 4D - Arrow capacity (70) -%ReceiptProps($4E, -4, 0, $3B, 2, $F9, $F373, $80) ; 4E - 1/2 magic -%ReceiptProps($4F, -4, 0, $3C, 2, $04, $F373, $80) ; 4F - 1/4 magic -%ReceiptProps($50, -5, 4, $18, 0, $05, $F359, $02) ; 50 - Safe master sword - TODO gfx value -%ReceiptProps($51, -4, 0, $3D, 2, $04, $F375, $FF) ; 51 - Bomb capacity (+5) -%ReceiptProps($52, -4, 0, $3E, 2, $04, $F375, $FF) ; 52 - Bomb capacity (+10) -%ReceiptProps($53, -4, 0, $3F, 2, $04, $F376, $FF) ; 53 - Arrow capacity (+5) -%ReceiptProps($54, -4, 0, $40, 2, $04, $F376, $FF) ; 54 - Arrow capacity (+10) -%ReceiptProps($55, -4, 0, $00, 2, $04, $F41A, $FF) ; 55 - Programmable item 1 -%ReceiptProps($56, -4, 0, $00, 2, $04, $F41C, $FF) ; 56 - Programmable item 2 -%ReceiptProps($57, -4, 0, $00, 2, $04, $F41E, $FF) ; 57 - Programmable item 3 -%ReceiptProps($58, -4, 0, $41, 2, $01, $F340, $FF) ; 58 - Upgrade-only silver arrows -%ReceiptProps($59, -4, 4, $24, 0, $03, $F360, $FF) ; 59 - Rupoor -%ReceiptProps($5A, -4, 0, $47, 2, $01, $F36A, $FF) ; 5A - Nothing -%ReceiptProps($5B, -4, 0, $48, 2, $01, $F454, $FF) ; 5B - Red clock -%ReceiptProps($5C, -4, 0, $48, 2, $02, $F454, $FF) ; 5C - Blue clock -%ReceiptProps($5D, -4, 0, $48, 2, $04, $F454, $FF) ; 5D - Green clock -%ReceiptProps($5E, -4, 0, $FE, 2, $FF, $F359, $FF) ; 5E - Progressive sword -%ReceiptProps($5F, -4, 0, $FF, 2, $FF, $F35A, $FF) ; 5F - Progressive shield -%ReceiptProps($60, -4, 0, $FD, 2, $FF, $F35B, $FF) ; 60 - Progressive armor -%ReceiptProps($61, -4, 0, $0D, 2, $FF, $F354, $FF) ; 61 - Progressive glove -%ReceiptProps($62, -4, 0, $FF, 2, $FF, $F36A, $FF) ; 62 - RNG pool item (single) -%ReceiptProps($63, -4, 0, $FF, 2, $FF, $F36A, $FF) ; 63 - RNG pool item (multi) -%ReceiptProps($64, -4, 0, $FF, 2, $00, $F340, $FF) ; 64 - Progressive bow -%ReceiptProps($65, -4, 0, $FF, 2, $00, $F340, $FF) ; 65 - Progressive bow -%ReceiptProps($66, -4, 0, $FF, 2, $00, $F36A, $FF) ; 66 - -%ReceiptProps($67, -4, 0, $FF, 2, $00, $F36A, $FF) ; 67 - -%ReceiptProps($68, -4, 0, $FF, 2, $00, $F36A, $FF) ; 68 - -%ReceiptProps($69, -4, 0, $FF, 2, $00, $F36A, $FF) ; 69 - -%ReceiptProps($6A, -4, 0, $49, 2, $04, $F36A, $FF) ; 6A - Triforce -%ReceiptProps($6B, -4, 0, $4A, 2, $04, $F36A, $FF) ; 6B - Power star -%ReceiptProps($6C, -4, 0, $49, 2, $04, $F36A, $FF) ; 6C - -%ReceiptProps($6D, -4, 0, $FF, 2, $00, $F36A, $FF) ; 6D - Server request item -%ReceiptProps($6E, -4, 0, $FF, 2, $00, $F36A, $FF) ; 6E - Server request item (dungeon drop) -%ReceiptProps($6F, -4, 0, $FF, 2, $00, $F36A, $FF) ; 6F - -%ReceiptProps($70, -4, 0, $21, 2, $04, $F36A, $FF) ; 70 - Map of Light World -%ReceiptProps($71, -4, 0, $21, 2, $04, $F36A, $FF) ; 71 - Map of Dark World -%ReceiptProps($72, -4, 0, $21, 2, $04, $F36A, $FF) ; 72 - Map of Ganon's Tower -%ReceiptProps($73, -4, 0, $21, 2, $04, $F36A, $FF) ; 73 - Map of Turtle Rock -%ReceiptProps($74, -4, 0, $21, 2, $04, $F36A, $FF) ; 74 - Map of Thieves' Town -%ReceiptProps($75, -4, 0, $21, 2, $04, $F36A, $FF) ; 75 - Map of Tower of Hera -%ReceiptProps($76, -4, 0, $21, 2, $04, $F36A, $FF) ; 76 - Map of Ice Palace -%ReceiptProps($77, -4, 0, $21, 2, $04, $F36A, $FF) ; 77 - Map of Skull Woods -%ReceiptProps($78, -4, 0, $21, 2, $04, $F36A, $FF) ; 78 - Map of Misery Mire -%ReceiptProps($79, -4, 0, $21, 2, $04, $F36A, $FF) ; 79 - Map of Dark Palace -%ReceiptProps($7A, -4, 0, $21, 2, $04, $F36A, $FF) ; 7A - Map of Swamp Palace -%ReceiptProps($7B, -4, 0, $21, 2, $04, $F36A, $FF) ; 7B - Map of Agahnim's Tower -%ReceiptProps($7C, -4, 0, $21, 2, $04, $F36A, $FF) ; 7C - Map of Desert Palace -%ReceiptProps($7D, -4, 0, $21, 2, $04, $F36A, $FF) ; 7D - Map of Eastern Palace -%ReceiptProps($7E, -4, 0, $21, 2, $04, $F36A, $FF) ; 7E - Map of Hyrule Castle -%ReceiptProps($7F, -4, 0, $21, 2, $04, $F36A, $FF) ; 7F - Map of Sewers -%ReceiptProps($80, -4, 0, $16, 2, $02, $F36A, $FF) ; 80 - Compass of Light World -%ReceiptProps($81, -4, 0, $16, 2, $02, $F36A, $FF) ; 81 - Compass of Dark World -%ReceiptProps($82, -4, 0, $16, 2, $02, $F36A, $FF) ; 82 - Compass of Ganon's Tower -%ReceiptProps($83, -4, 0, $16, 2, $02, $F36A, $FF) ; 83 - Compass of Turtle Rock -%ReceiptProps($84, -4, 0, $16, 2, $02, $F36A, $FF) ; 84 - Compass of Thieves' Town -%ReceiptProps($85, -4, 0, $16, 2, $02, $F36A, $FF) ; 85 - Compass of Tower of Hera -%ReceiptProps($86, -4, 0, $16, 2, $02, $F36A, $FF) ; 86 - Compass of Ice Palace -%ReceiptProps($87, -4, 0, $16, 2, $02, $F36A, $FF) ; 87 - Compass of Skull Woods -%ReceiptProps($88, -4, 0, $16, 2, $02, $F36A, $FF) ; 88 - Compass of Misery Mire -%ReceiptProps($89, -4, 0, $16, 2, $02, $F36A, $FF) ; 89 - Compass of Dark Palace -%ReceiptProps($8A, -4, 0, $16, 2, $02, $F36A, $FF) ; 8A - Compass of Swamp Palace -%ReceiptProps($8B, -4, 0, $16, 2, $02, $F36A, $FF) ; 8B - Compass of Agahnim's Tower -%ReceiptProps($8C, -4, 0, $16, 2, $02, $F36A, $FF) ; 8C - Compass of Desert Palace -%ReceiptProps($8D, -4, 0, $16, 2, $02, $F36A, $FF) ; 8D - Compass of Eastern Palace -%ReceiptProps($8E, -4, 0, $16, 2, $02, $F36A, $FF) ; 8E - Compass of Hyrule Castle -%ReceiptProps($8F, -4, 0, $16, 2, $02, $F36A, $FF) ; 8F - Compass of Sewers -%ReceiptProps($90, -4, 0, $22, 2, $04, $F36A, $FF) ; 90 - Skull key -%ReceiptProps($91, -4, 0, $22, 2, $04, $F36A, $FF) ; 91 - Reserved -%ReceiptProps($92, -4, 0, $22, 2, $04, $F36A, $FF) ; 92 - Big key of Ganon's Tower -%ReceiptProps($93, -4, 0, $22, 2, $04, $F36A, $FF) ; 93 - Big key of Turtle Rock -%ReceiptProps($94, -4, 0, $22, 2, $04, $F36A, $FF) ; 94 - Big key of Thieves' Town -%ReceiptProps($95, -4, 0, $22, 2, $04, $F36A, $FF) ; 95 - Big key of Tower of Hera -%ReceiptProps($96, -4, 0, $22, 2, $04, $F36A, $FF) ; 96 - Big key of Ice Palace -%ReceiptProps($97, -4, 0, $22, 2, $04, $F36A, $FF) ; 97 - Big key of Skull Woods -%ReceiptProps($98, -4, 0, $22, 2, $04, $F36A, $FF) ; 98 - Big key of Misery Mire -%ReceiptProps($99, -4, 0, $22, 2, $04, $F36A, $FF) ; 99 - Big key of Dark Palace -%ReceiptProps($9A, -4, 0, $22, 2, $04, $F36A, $FF) ; 9A - Big key of Swamp Palace -%ReceiptProps($9B, -4, 0, $22, 2, $04, $F36A, $FF) ; 9B - Big key of Agahnim's Tower -%ReceiptProps($9C, -4, 0, $22, 2, $04, $F36A, $FF) ; 9C - Big key of Desert Palace -%ReceiptProps($9D, -4, 0, $22, 2, $04, $F36A, $FF) ; 9D - Big key of Eastern Palace -%ReceiptProps($9E, -4, 0, $22, 2, $04, $F36A, $FF) ; 9E - Big key of Hyrule Castle -%ReceiptProps($9F, -4, 0, $22, 2, $04, $F36A, $FF) ; 9F - Big key of Sewers -%ReceiptProps($A0, -4, 4, $0F, 0, $04, $F36A, $FF) ; A0 - Small key of Sewers -%ReceiptProps($A1, -4, 4, $0F, 0, $04, $F36A, $FF) ; A1 - Small key of Hyrule Castle -%ReceiptProps($A2, -4, 4, $0F, 0, $04, $F36A, $FF) ; A2 - Small key of Eastern Palace -%ReceiptProps($A3, -4, 4, $0F, 0, $04, $F36A, $FF) ; A3 - Small key of Desert Palace -%ReceiptProps($A4, -4, 4, $0F, 0, $04, $F36A, $FF) ; A4 - Small key of Agahnim's Tower -%ReceiptProps($A5, -4, 4, $0F, 0, $04, $F36A, $FF) ; A5 - Small key of Swamp Palace -%ReceiptProps($A6, -4, 4, $0F, 0, $04, $F36A, $FF) ; A6 - Small key of Dark Palace -%ReceiptProps($A7, -4, 4, $0F, 0, $04, $F36A, $FF) ; A7 - Small key of Misery Mire -%ReceiptProps($A8, -4, 4, $0F, 0, $04, $F36A, $FF) ; A8 - Small key of Skull Woods -%ReceiptProps($A9, -4, 4, $0F, 0, $04, $F36A, $FF) ; A9 - Small key of Ice Palace -%ReceiptProps($AA, -4, 4, $0F, 0, $04, $F36A, $FF) ; AA - Small key of Tower of Hera -%ReceiptProps($AB, -4, 4, $0F, 0, $04, $F36A, $FF) ; AB - Small key of Thieves' Town -%ReceiptProps($AC, -4, 4, $0F, 0, $04, $F36A, $FF) ; AC - Small key of Turtle Rock -%ReceiptProps($AD, -4, 4, $0F, 0, $04, $F36A, $FF) ; AD - Small key of Ganon's Tower -%ReceiptProps($AE, -4, 4, $0F, 0, $04, $F36A, $FF) ; AE - Reserved -%ReceiptProps($AF, -4, 4, $0F, 0, $04, $F36A, $FF) ; AF - Generic small key -%ReceiptProps($B0, -4, 0, $49, 2, $04, $F36A, $FF) ; B0 - -%ReceiptProps($B1, -4, 0, $49, 2, $04, $F36A, $FF) ; B1 - -%ReceiptProps($B2, -4, 0, $49, 2, $04, $F36A, $FF) ; B2 - -%ReceiptProps($B3, -4, 0, $49, 2, $04, $F36A, $FF) ; B3 - -%ReceiptProps($B4, -4, 0, $49, 2, $04, $F36A, $FF) ; B4 - -%ReceiptProps($B5, -4, 0, $49, 2, $04, $F36A, $FF) ; B5 - -%ReceiptProps($B6, -4, 0, $49, 2, $04, $F36A, $FF) ; B6 - -%ReceiptProps($B7, -4, 0, $49, 2, $04, $F36A, $FF) ; B7 - -%ReceiptProps($B8, -4, 0, $49, 2, $04, $F36A, $FF) ; B8 - -%ReceiptProps($B9, -4, 0, $49, 2, $04, $F36A, $FF) ; B9 - -%ReceiptProps($BA, -4, 0, $49, 2, $04, $F36A, $FF) ; BA - -%ReceiptProps($BB, -4, 0, $49, 2, $04, $F36A, $FF) ; BB - -%ReceiptProps($BC, -4, 0, $49, 2, $04, $F36A, $FF) ; BC - -%ReceiptProps($BD, -4, 0, $49, 2, $04, $F36A, $FF) ; BD - -%ReceiptProps($BE, -4, 0, $49, 2, $04, $F36A, $FF) ; BE - -%ReceiptProps($BF, -4, 0, $49, 2, $04, $F36A, $FF) ; BF - -%ReceiptProps($C0, -4, 0, $49, 2, $04, $F36A, $FF) ; C0 - -%ReceiptProps($C1, -4, 0, $49, 2, $04, $F36A, $FF) ; C1 - -%ReceiptProps($C2, -4, 0, $49, 2, $04, $F36A, $FF) ; C2 - -%ReceiptProps($C3, -4, 0, $49, 2, $04, $F36A, $FF) ; C3 - -%ReceiptProps($C4, -4, 0, $49, 2, $04, $F36A, $FF) ; C4 - -%ReceiptProps($C5, -4, 0, $49, 2, $04, $F36A, $FF) ; C5 - -%ReceiptProps($C6, -4, 0, $49, 2, $04, $F36A, $FF) ; C6 - -%ReceiptProps($C7, -4, 0, $49, 2, $04, $F36A, $FF) ; C7 - -%ReceiptProps($C8, -4, 0, $49, 2, $04, $F36A, $FF) ; C8 - -%ReceiptProps($C9, -4, 0, $49, 2, $04, $F36A, $FF) ; C9 - -%ReceiptProps($CA, -4, 0, $49, 2, $04, $F36A, $FF) ; CA - -%ReceiptProps($CB, -4, 0, $49, 2, $04, $F36A, $FF) ; CB - -%ReceiptProps($CC, -4, 0, $49, 2, $04, $F36A, $FF) ; CC - -%ReceiptProps($CD, -4, 0, $49, 2, $04, $F36A, $FF) ; CD - -%ReceiptProps($CE, -4, 0, $49, 2, $04, $F36A, $FF) ; CE - -%ReceiptProps($CF, -4, 0, $49, 2, $04, $F36A, $FF) ; CF - -%ReceiptProps($D0, -4, 0, $49, 2, $04, $F36A, $FF) ; D0 - -%ReceiptProps($D1, -4, 0, $49, 2, $04, $F36A, $FF) ; D1 - -%ReceiptProps($D2, -4, 0, $49, 2, $04, $F36A, $FF) ; D2 - -%ReceiptProps($D3, -4, 0, $49, 2, $04, $F36A, $FF) ; D3 - -%ReceiptProps($D4, -4, 0, $49, 2, $04, $F36A, $FF) ; D4 - -%ReceiptProps($D5, -4, 0, $49, 2, $04, $F36A, $FF) ; D5 - -%ReceiptProps($D6, -4, 0, $49, 2, $04, $F36A, $FF) ; D6 - -%ReceiptProps($D7, -4, 0, $49, 2, $04, $F36A, $FF) ; D7 - -%ReceiptProps($D8, -4, 0, $49, 2, $04, $F36A, $FF) ; D8 - -%ReceiptProps($D9, -4, 0, $49, 2, $04, $F36A, $FF) ; D9 - -%ReceiptProps($DA, -4, 0, $49, 2, $04, $F36A, $FF) ; DA - -%ReceiptProps($DB, -4, 0, $49, 2, $04, $F36A, $FF) ; DB - -%ReceiptProps($DC, -4, 0, $49, 2, $04, $F36A, $FF) ; DC - -%ReceiptProps($DD, -4, 0, $49, 2, $04, $F36A, $FF) ; DD - -%ReceiptProps($DE, -4, 0, $49, 2, $04, $F36A, $FF) ; DE - -%ReceiptProps($DF, -4, 0, $49, 2, $04, $F36A, $FF) ; DF - -%ReceiptProps($E0, -4, 0, $49, 2, $04, $F36A, $FF) ; E0 - -%ReceiptProps($E1, -4, 0, $49, 2, $04, $F36A, $FF) ; E1 - -%ReceiptProps($E2, -4, 0, $49, 2, $04, $F36A, $FF) ; E2 - -%ReceiptProps($E3, -4, 0, $49, 2, $04, $F36A, $FF) ; E3 - -%ReceiptProps($E4, -4, 0, $49, 2, $04, $F36A, $FF) ; E4 - -%ReceiptProps($E5, -4, 0, $49, 2, $04, $F36A, $FF) ; E5 - -%ReceiptProps($E6, -4, 0, $49, 2, $04, $F36A, $FF) ; E6 - -%ReceiptProps($E7, -4, 0, $49, 2, $04, $F36A, $FF) ; E7 - -%ReceiptProps($E8, -4, 0, $49, 2, $04, $F36A, $FF) ; E8 - -%ReceiptProps($E9, -4, 0, $49, 2, $04, $F36A, $FF) ; E9 - -%ReceiptProps($EA, -4, 0, $49, 2, $04, $F36A, $FF) ; EA - -%ReceiptProps($EB, -4, 0, $49, 2, $04, $F36A, $FF) ; EB - -%ReceiptProps($EC, -4, 0, $49, 2, $04, $F36A, $FF) ; EC - -%ReceiptProps($ED, -4, 0, $49, 2, $04, $F36A, $FF) ; ED - -%ReceiptProps($EE, -4, 0, $49, 2, $04, $F36A, $FF) ; EE - -%ReceiptProps($EF, -4, 0, $49, 2, $04, $F36A, $FF) ; EF - -%ReceiptProps($F0, -4, 0, $49, 2, $04, $F36A, $FF) ; F0 - -%ReceiptProps($F1, -4, 0, $49, 2, $04, $F36A, $FF) ; F1 - -%ReceiptProps($F2, -4, 0, $49, 2, $04, $F36A, $FF) ; F2 - -%ReceiptProps($F3, -4, 0, $49, 2, $04, $F36A, $FF) ; F3 - -%ReceiptProps($F4, -4, 0, $49, 2, $04, $F36A, $FF) ; F4 - -%ReceiptProps($F5, -4, 0, $49, 2, $04, $F36A, $FF) ; F5 - -%ReceiptProps($F6, -4, 0, $49, 2, $04, $F36A, $FF) ; F6 - -%ReceiptProps($F7, -4, 0, $49, 2, $04, $F36A, $FF) ; F7 - -%ReceiptProps($F8, -4, 0, $49, 2, $04, $F36A, $FF) ; F8 - -%ReceiptProps($F9, -4, 0, $49, 2, $04, $F36A, $FF) ; F9 - -%ReceiptProps($FA, -4, 0, $49, 2, $04, $F36A, $FF) ; FA - -%ReceiptProps($FB, -4, 0, $49, 2, $04, $F36A, $FF) ; FB - -%ReceiptProps($FC, -4, 0, $49, 2, $04, $F36A, $FF) ; FC - -%ReceiptProps($FD, -4, 0, $49, 2, $04, $F36A, $FF) ; FD - -%ReceiptProps($FE, -4, 0, $49, 2, $04, $F36A, $FF) ; FE - Server request (async) -%ReceiptProps($FF, -4, 0, $49, 2, $04, $F36A, $FF) ; FF - - +%ReceiptProps($00, -5, 0, $06, 2, $02, $F359, $01, $00, skip, skip) ; 00 - Fighter sword & Shield +%ReceiptProps($01, -5, 4, $18, 0, $FF, $F359, $02, $00, skip, skip) ; 01 - Master sword - TODO gfx value? +%ReceiptProps($02, -5, 4, $18, 0, $05, $F359, $03, $00, skip, skip) ; 02 - Tempered sword - TODO gfx value? +%ReceiptProps($03, -5, 4, $18, 0, $05, $F359, $04, $00, skip, skip) ; 03 - Butter sword - TODO gfx value? +%ReceiptProps($04, -5, 4, $2D, 0, $05, $F35A, $01, $01, skip, skip) ; 04 - Fighter shield +%ReceiptProps($05, -4, 0, $20, 2, $05, $F35A, $02, $01, skip, skip) ; 05 - Fire shield +%ReceiptProps($06, -4, 0, $2E, 2, $05, $F35A, $03, $01, skip, skip) ; 06 - Mirror shield +%ReceiptProps($07, -5, 4, $09, 0, $01, $F345, $01, $00, skip, skip) ; 07 - Fire rod +%ReceiptProps($08, -5, 4, $09, 0, $02, $F346, $01, $00, skip, skip) ; 08 - Ice rod +%ReceiptProps($09, -4, 4, $0A, 0, $01, $F34B, $01, $00, skip, skip) ; 09 - Hammer +%ReceiptProps($0A, -4, 4, $08, 0, $01, $F342, $01, $00, skip, skip) ; 0A - Hookshot +%ReceiptProps($0B, -4, 4, $05, 0, $01, $F340, $01, $00, bow, skip) ; 0B - Bow +%ReceiptProps($0C, -2, 5, $10, 0, $02, $F341, $01, $00, skip, skip) ; 0C - Blue Boomerang +%ReceiptProps($0D, -4, 0, $0B, 2, $02, $F344, $02, $00, skip, skip) ; 0D - Powder +%ReceiptProps($0E, -4, 0, $2C, 2, $02, $F35C, $FF, $00, skip, skip) ; 0E - Bottle refill (bee) +%ReceiptProps($0F, -4, 0, $1B, 2, $04, $F347, $01, $00, skip, skip) ; 0F - Bombos +%ReceiptProps($10, -4, 0, $1A, 2, $04, $F348, $01, $00, skip, skip) ; 10 - Ether +%ReceiptProps($11, -4, 0, $1C, 2, $04, $F349, $01, $00, skip, skip) ; 11 - Quake +%ReceiptProps($12, -4, 0, $14, 2, $01, $F34A, $01, $00, skip, skip) ; 12 - Lamp +%ReceiptProps($13, -4, 4, $19, 0, $01, $F34C, $01, $00, skip, skip) ; 13 - Shovel +%ReceiptProps($14, -4, 0, $0C, 2, $02, $F34C, $02, $00, skip, skip) ; 14 - Flute +%ReceiptProps($15, -4, 4, $07, 0, $01, $F350, $01, $00, skip, skip) ; 15 - Somaria +%ReceiptProps($16, -4, 0, $1D, 2, $01, $F35C, $FF, $00, skip, bottles) ; 16 - Bottle +%ReceiptProps($17, -4, 0, $2F, 2, $01, $F36B, $FF, $00, skip, skip) ; 17 - Heart piece +%ReceiptProps($18, -4, 4, $07, 0, $02, $F351, $01, $00, skip, skip) ; 18 - Byrna +%ReceiptProps($19, -4, 0, $15, 2, $01, $F352, $01, $00, skip, skip) ; 19 - Cape +%ReceiptProps($1A, -4, 0, $12, 2, $02, $F353, $02, $00, skip, skip) ; 1A - Mirror +%ReceiptProps($1B, -4, 0, $0D, 2, $01, $F354, $01, $00, skip, skip) ; 1B - Glove +%ReceiptProps($1C, -4, 0, $0D, 2, $04, $F354, $02, $00, skip, skip) ; 1C - Mitts +%ReceiptProps($1D, -4, 0, $0E, 2, $04, $F34E, $01, $00, skip, skip) ; 1D - Book +%ReceiptProps($1E, -4, 0, $11, 2, $02, $F356, $01, $00, skip, skip) ; 1E - Flippers +%ReceiptProps($1F, -4, 0, $17, 2, $01, $F357, $01, $00, skip, skip) ; 1F - Pearl +%ReceiptProps($20, -4, 0, $28, 2, $06, $F37A, $FF, $01, skip, skip) ; 20 - Crystal +%ReceiptProps($21, -4, 0, $27, 2, $01, $F34D, $01, $00, skip, skip) ; 21 - Net +%ReceiptProps($22, -4, 0, $04, 2, $02, $F35B, $FF, $00, skip, skip) ; 22 - Blue mail +%ReceiptProps($23, -5, 0, $04, 2, $01, $F35B, $02, $00, skip, skip) ; 23 - Red mail +%ReceiptProps($24, -4, 4, $0F, 0, $02, $F36F, $FF, $00, skip, skip) ; 24 - Small key +%ReceiptProps($25, -4, 0, $16, 2, $02, $F364, $FF, $00, skip, skip) ; 25 - Compass +%ReceiptProps($26, -4, 0, $03, 2, $01, $F36C, $FF, $00, skip, skip) ; 26 - Heart container from 4/4 +%ReceiptProps($27, -4, 0, $13, 2, $02, $F375, $FF, $00, skip, skip) ; 27 - Bomb +%ReceiptProps($28, -4, 0, $01, 2, $02, $F375, $FF, $00, skip, skip) ; 28 - 3 bombs +%ReceiptProps($29, -4, 0, $1E, 2, $04, $F344, $FF, $00, skip, skip) ; 29 - Mushroom +%ReceiptProps($2A, -2, 5, $10, 0, $01, $F341, $02, $00, skip, skip) ; 2A - Red boomerang +%ReceiptProps($2B, -4, 0, $00, 2, $01, $F35C, $FF, $00, skip, bottles) ; 2B - Full bottle (red) +%ReceiptProps($2C, -4, 0, $00, 2, $04, $F35C, $FF, $00, skip, bottles) ; 2C - Full bottle (green) +%ReceiptProps($2D, -4, 0, $00, 2, $02, $F35C, $FF, $00, skip, bottles) ; 2D - Full bottle (blue) +%ReceiptProps($2E, -4, 0, $00, 2, $01, $F36D, $FF, $00, skip, bottles) ; 2E - Potion refill (red) +%ReceiptProps($2F, -4, 0, $00, 2, $04, $F36E, $FF, $00, skip, bottles) ; 2F - Potion refill (green) +%ReceiptProps($30, -4, 0, $00, 2, $02, $F36E, $FF, $00, skip, bottles) ; 30 - Potion refill (blue) +%ReceiptProps($31, -4, 0, $30, 2, $02, $F375, $FF, $00, skip, skip) ; 31 - 10 bombs +%ReceiptProps($32, -4, 0, $22, 2, $04, $F366, $FF, $00, skip, skip) ; 32 - Big key +%ReceiptProps($33, -4, 0, $21, 2, $04, $F368, $FF, $00, skip, skip) ; 33 - Map +%ReceiptProps($34, -2, 4, $24, 0, $04, $F360, $FF, $00, skip, skip) ; 34 - 1 rupee +%ReceiptProps($35, -2, 4, $24, 0, $02, $F360, $FB, $00, skip, skip) ; 35 - 5 rupees +%ReceiptProps($36, -2, 4, $24, 0, $01, $F360, $EC, $00, skip, skip) ; 36 - 20 rupees +%ReceiptProps($37, -4, 0, $23, 2, $04, $F374, $FF, $00, skip, skip) ; 37 - Green pendant +%ReceiptProps($38, -4, 0, $23, 2, $01, $F374, $FF, $00, skip, skip) ; 38 - Blue pendant +%ReceiptProps($39, -4, 0, $23, 2, $02, $F374, $FF, $00, skip, skip) ; 39 - Red pendant +%ReceiptProps($3A, -4, 0, $29, 2, $02, $F340, $01, $00, bow_and_arrows, skip) ; 3A - Bow And Arrows +%ReceiptProps($3B, -4, 0, $2A, 2, $01, $F340, $03, $00, silver_bow, skip) ; 3B - Silver Bow +%ReceiptProps($3C, -4, 0, $2C, 2, $02, $F35C, $FF, $00, skip, skip) ; 3C - Full bottle (bee) +%ReceiptProps($3D, -4, 0, $2B, 2, $02, $F35C, $FF, $00, skip, skip) ; 3D - Full bottle (fairy) +%ReceiptProps($3E, -4, 0, $03, 2, $01, $F36C, $FF, $00, skip, skip) ; 3E - Boss heart +%ReceiptProps($3F, -4, 0, $03, 2, $01, $F36C, $FF, $00, skip, skip) ; 3F - Sanc heart +%ReceiptProps($40, -4, 0, $34, 2, $04, $F360, $9C, $00, skip, skip) ; 40 - 100 rupees +%ReceiptProps($41, -4, 0, $35, 2, $04, $F360, $CE, $00, skip, skip) ; 41 - 50 rupees +%ReceiptProps($42, -2, 4, $31, 0, $01, $F372, $FF, $00, skip, skip) ; 42 - Heart +%ReceiptProps($43, -2, 4, $33, 0, $02, $F376, $01, $00, skip, skip) ; 43 - Arrow +%ReceiptProps($44, -4, 0, $02, 2, $02, $F376, $0A, $00, skip, skip) ; 44 - 10 arrows +%ReceiptProps($45, -2, 4, $32, 0, $04, $F373, $FF, $00, skip, skip) ; 45 - Small magic +%ReceiptProps($46, -4, 0, $36, 2, $04, $F360, $FF, $00, skip, skip) ; 46 - 300 rupees +%ReceiptProps($47, -4, 0, $37, 2, $04, $F360, $FF, $00, skip, skip) ; 47 - 20 rupees green +%ReceiptProps($48, -4, 0, $2C, 2, $02, $F35C, $FF, $00, skip, skip) ; 48 - Full bottle (good bee) +%ReceiptProps($49, -5, 4, $06, 0, $05, $F359, $01, $00, skip, skip) ; 49 - Tossed fighter sword +%ReceiptProps($4A, -4, 0, $0C, 2, $02, $F34C, $03, $00, skip, skip) ; 4A - Active Flute +%ReceiptProps($4B, -4, 0, $38, 2, $01, $F355, $01, $00, skip, skip) ; 4B - Boots +%ReceiptProps($4C, -4, 0, $39, 2, $04, $F375, $32, $00, bombs_50, skip) ; 4C - Bomb capacity (50) +%ReceiptProps($4D, -4, 0, $3A, 2, $04, $F376, $46, $00, arrows_70, skip) ; 4D - Arrow capacity (70) +%ReceiptProps($4E, -4, 0, $3B, 2, $04, $F373, $80, $00, magic_2, magic) ; 4E - 1/2 magic +%ReceiptProps($4F, -4, 0, $3C, 2, $04, $F373, $80, $00, magic_4, magic) ; 4F - 1/4 magic +%ReceiptProps($50, -5, 4, $18, 0, $05, $F359, $02, $00, master_sword_safe, skip) ; 50 - Safe master sword - TODO gfx value +%ReceiptProps($51, -4, 0, $39, 2, $04, $F375, $FF, $00, bombs_5, skip) ; 51 - Bomb capacity (+5) +%ReceiptProps($52, -4, 0, $3E, 2, $04, $F375, $FF, $00, bombs_10, skip) ; 52 - Bomb capacity (+10) +%ReceiptProps($53, -4, 0, $3F, 2, $04, $F376, $FF, $00, arrows_5, skip) ; 53 - Arrow capacity (+5) +%ReceiptProps($54, -4, 0, $40, 2, $04, $F376, $FF, $00, arrows_10, skip) ; 54 - Arrow capacity (+10) +%ReceiptProps($55, -4, 0, $00, 2, $04, $F41A, $FF, $00, programmable_1, skip) ; 55 - Programmable item 1 +%ReceiptProps($56, -4, 0, $00, 2, $04, $F41C, $FF, $00, programmable_2, skip) ; 56 - Programmable item 2 +%ReceiptProps($57, -4, 0, $00, 2, $04, $F41E, $FF, $00, programmable_3, skip) ; 57 - Programmable item 3 +%ReceiptProps($58, -4, 0, $41, 2, $01, $F340, $FF, $00, silver_arrows, skip) ; 58 - Upgrade-only Silver Arrows +%ReceiptProps($59, -4, 4, $24, 0, $03, $F360, $FF, $00, rupoor, skip) ; 59 - Rupoor +%ReceiptProps($5A, -4, 0, $47, 2, $01, $F36A, $FF, $00, skip, skip) ; 5A - Nothing +%ReceiptProps($5B, -4, 0, $4B, 2, $01, $F454, $FF, $00, red_clock, skip) ; 5B - Red clock +%ReceiptProps($5C, -4, 0, $4B, 2, $02, $F454, $FF, $00, blue_clock, skip) ; 5C - Blue clock +%ReceiptProps($5D, -4, 0, $4B, 2, $04, $F454, $FF, $00, green_clock, skip) ; 5D - Green clock +%ReceiptProps($5E, -4, 0, $FE, 2, $FF, $F359, $FF, $00, skip, swords) ; 5E - Progressive sword +%ReceiptProps($5F, -4, 0, $FF, 2, $FF, $F35A, $FF, $01, skip, shields) ; 5F - Progressive shield +%ReceiptProps($60, -4, 0, $FD, 2, $FF, $F35B, $FF, $00, skip, armor) ; 60 - Progressive armor +%ReceiptProps($61, -4, 0, $0D, 2, $FF, $F354, $FF, $00, skip, gloves) ; 61 - Progressive glove +%ReceiptProps($62, -4, 0, $FF, 2, $FF, $F36A, $FF, $00, skip, rng_single) ; 62 - RNG pool item (single) +%ReceiptProps($63, -4, 0, $FF, 2, $FF, $F36A, $FF, $00, skip, rng_multi) ; 63 - RNG pool item (multi) +%ReceiptProps($64, -4, 0, $FF, 2, $00, $F340, $FF, $00, skip, progressive_bow) ; 64 - Progressive bow +%ReceiptProps($65, -4, 0, $FF, 2, $00, $F340, $FF, $00, skip, progressive_bow_2) ; 65 - Progressive bow +%ReceiptProps($66, -4, 0, $FF, 2, $00, $F36A, $FF, $00, skip, skip) ; 66 - +%ReceiptProps($67, -4, 0, $FF, 2, $00, $F36A, $FF, $00, skip, skip) ; 67 - +%ReceiptProps($68, -4, 0, $FF, 2, $00, $F36A, $FF, $00, skip, skip) ; 68 - +%ReceiptProps($69, -4, 0, $FF, 2, $00, $F36A, $FF, $00, skip, skip) ; 69 - +%ReceiptProps($6A, -4, 0, $49, 2, $04, $F36A, $FF, $00, triforce, skip) ; 6A - Triforce +%ReceiptProps($6B, -4, 0, $50, 2, $04, $F36A, $FF, $00, goal_item, skip) ; 6B - Power star +%ReceiptProps($6C, -4, 0, $49, 2, $04, $F36A, $FF, $00, goal_item, skip) ; 6C - Triforce Piece +%ReceiptProps($6D, -4, 0, $FF, 2, $00, $F36A, $FF, $00, request_F0, skip) ; 6D - Server request item +%ReceiptProps($6E, -4, 0, $FF, 2, $00, $F36A, $FF, $00, request_F1, skip) ; 6E - Server request item (dungeon drop) +%ReceiptProps($6F, -4, 0, $FF, 2, $00, $F36A, $FF, $00, request_F2, skip) ; 6F - +%ReceiptProps($70, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 70 - Map of Light World +%ReceiptProps($71, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 71 - Map of Dark World +%ReceiptProps($72, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 72 - Map of Ganon's Tower +%ReceiptProps($73, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 73 - Map of Turtle Rock +%ReceiptProps($74, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 74 - Map of Thieves' Town +%ReceiptProps($75, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 75 - Map of Tower of Hera +%ReceiptProps($76, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 76 - Map of Ice Palace +%ReceiptProps($77, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 77 - Map of Skull Woods +%ReceiptProps($78, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 78 - Map of Misery Mire +%ReceiptProps($79, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 79 - Map of Dark Palace +%ReceiptProps($7A, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 7A - Map of Swamp Palace +%ReceiptProps($7B, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 7B - Map of Agahnim's Tower +%ReceiptProps($7C, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 7C - Map of Desert Palace +%ReceiptProps($7D, -4, 0, $21, 2, $04, $F36A, $FF, $00, free_map, skip) ; 7D - Map of Eastern Palace +%ReceiptProps($7E, -4, 0, $21, 2, $04, $F36A, $FF, $00, hc_map, skip) ; 7E - Map of Hyrule Castle +%ReceiptProps($7F, -4, 0, $21, 2, $04, $F36A, $FF, $00, hc_map, skip) ; 7F - Map of Sewers +%ReceiptProps($80, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 80 - Compass of Light World +%ReceiptProps($81, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 81 - Compass of Dark World +%ReceiptProps($82, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 82 - Compass of Ganon's Tower +%ReceiptProps($83, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 83 - Compass of Turtle Rock +%ReceiptProps($84, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 84 - Compass of Thieves' Town +%ReceiptProps($85, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 85 - Compass of Tower of Hera +%ReceiptProps($86, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 86 - Compass of Ice Palace +%ReceiptProps($87, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 87 - Compass of Skull Woods +%ReceiptProps($88, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 88 - Compass of Misery Mire +%ReceiptProps($89, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 89 - Compass of Dark Palace +%ReceiptProps($8A, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 8A - Compass of Swamp Palace +%ReceiptProps($8B, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 8B - Compass of Agahnim's Tower +%ReceiptProps($8C, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 8C - Compass of Desert Palace +%ReceiptProps($8D, -4, 0, $16, 2, $02, $F36A, $FF, $00, free_compass, skip) ; 8D - Compass of Eastern Palace +%ReceiptProps($8E, -4, 0, $16, 2, $02, $F36A, $FF, $00, hc_compass, skip) ; 8E - Compass of Hyrule Castle +%ReceiptProps($8F, -4, 0, $16, 2, $02, $F36A, $FF, $00, hc_compass, skip) ; 8F - Compass of Sewers +%ReceiptProps($90, -4, 0, $22, 2, $04, $F36A, $FF, $00, skip, skip) ; 90 - Skull key +%ReceiptProps($91, -4, 0, $22, 2, $04, $F36A, $FF, $00, skip, skip) ; 91 - Reserved +%ReceiptProps($92, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 92 - Big key of Ganon's Tower +%ReceiptProps($93, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 93 - Big key of Turtle Rock +%ReceiptProps($94, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 94 - Big key of Thieves' Town +%ReceiptProps($95, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 95 - Big key of Tower of Hera +%ReceiptProps($96, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 96 - Big key of Ice Palace +%ReceiptProps($97, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 97 - Big key of Skull Woods +%ReceiptProps($98, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 98 - Big key of Misery Mire +%ReceiptProps($99, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 99 - Big key of Dark Palace +%ReceiptProps($9A, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 9A - Big key of Swamp Palace +%ReceiptProps($9B, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 9B - Big key of Agahnim's Tower +%ReceiptProps($9C, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 9C - Big key of Desert Palace +%ReceiptProps($9D, -4, 0, $22, 2, $04, $F36A, $FF, $00, free_bigkey, skip) ; 9D - Big key of Eastern Palace +%ReceiptProps($9E, -4, 0, $22, 2, $04, $F36A, $FF, $00, hc_bigkey, skip) ; 9E - Big key of Hyrule Castle +%ReceiptProps($9F, -4, 0, $22, 2, $04, $F36A, $FF, $00, hc_bigkey, skip) ; 9F - Big key of Sewers +%ReceiptProps($A0, -4, 4, $0F, 0, $04, $F36A, $FF, $00, hc_smallkey, skip) ; A0 - Small key of Sewers +%ReceiptProps($A1, -4, 4, $0F, 0, $04, $F36A, $FF, $00, hc_smallkey, skip) ; A1 - Small key of Hyrule Castle +%ReceiptProps($A2, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A2 - Small key of Eastern Palace +%ReceiptProps($A3, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A3 - Small key of Desert Palace +%ReceiptProps($A4, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A4 - Small key of Agahnim's Tower +%ReceiptProps($A5, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A5 - Small key of Swamp Palace +%ReceiptProps($A6, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A6 - Small key of Dark Palace +%ReceiptProps($A7, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A7 - Small key of Misery Mire +%ReceiptProps($A8, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A8 - Small key of Skull Woods +%ReceiptProps($A9, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; A9 - Small key of Ice Palace +%ReceiptProps($AA, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; AA - Small key of Tower of Hera +%ReceiptProps($AB, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; AB - Small key of Thieves' Town +%ReceiptProps($AC, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; AC - Small key of Turtle Rock +%ReceiptProps($AD, -4, 4, $0F, 0, $04, $F36A, $FF, $00, free_smallkey, skip) ; AD - Small key of Ganon's Tower +%ReceiptProps($AE, -4, 4, $0F, 0, $04, $F36A, $FF, $00, skip, skip) ; AE - Reserved +%ReceiptProps($AF, -4, 4, $0F, 0, $04, $F36A, $FF, $00, generic_smallkey, skip) ; AF - Generic small key +%ReceiptProps($B0, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B0 - +%ReceiptProps($B1, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B1 - +%ReceiptProps($B2, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B2 - +%ReceiptProps($B3, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B3 - +%ReceiptProps($B4, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B4 - +%ReceiptProps($B5, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B5 - +%ReceiptProps($B6, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B6 - +%ReceiptProps($B7, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B7 - +%ReceiptProps($B8, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B8 - +%ReceiptProps($B9, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; B9 - +%ReceiptProps($BA, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; BA - +%ReceiptProps($BB, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; BB - +%ReceiptProps($BC, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; BC - +%ReceiptProps($BD, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; BD - +%ReceiptProps($BE, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; BE - +%ReceiptProps($BF, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; BF - +%ReceiptProps($C0, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C0 - +%ReceiptProps($C1, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C1 - +%ReceiptProps($C2, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C2 - +%ReceiptProps($C3, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C3 - +%ReceiptProps($C4, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C4 - +%ReceiptProps($C5, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C5 - +%ReceiptProps($C6, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C6 - +%ReceiptProps($C7, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C7 - +%ReceiptProps($C8, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C8 - +%ReceiptProps($C9, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; C9 - +%ReceiptProps($CA, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; CA - +%ReceiptProps($CB, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; CB - +%ReceiptProps($CC, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; CC - +%ReceiptProps($CD, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; CD - +%ReceiptProps($CE, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; CE - +%ReceiptProps($CF, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; CF - +%ReceiptProps($D0, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D0 - +%ReceiptProps($D1, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D1 - +%ReceiptProps($D2, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D2 - +%ReceiptProps($D3, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D3 - +%ReceiptProps($D4, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D4 - +%ReceiptProps($D5, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D5 - +%ReceiptProps($D6, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D6 - +%ReceiptProps($D7, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D7 - +%ReceiptProps($D8, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D8 - +%ReceiptProps($D9, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; D9 - +%ReceiptProps($DA, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; DA - +%ReceiptProps($DB, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; DB - +%ReceiptProps($DC, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; DC - +%ReceiptProps($DD, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; DD - +%ReceiptProps($DE, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; DE - +%ReceiptProps($DF, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; DF - +%ReceiptProps($E0, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E0 - +%ReceiptProps($E1, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E1 - +%ReceiptProps($E2, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E2 - +%ReceiptProps($E3, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E3 - +%ReceiptProps($E4, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E4 - +%ReceiptProps($E5, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E5 - +%ReceiptProps($E6, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E6 - +%ReceiptProps($E7, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E7 - +%ReceiptProps($E8, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E8 - +%ReceiptProps($E9, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; E9 - +%ReceiptProps($EA, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; EA - +%ReceiptProps($EB, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; EB - +%ReceiptProps($EC, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; EC - +%ReceiptProps($ED, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; ED - +%ReceiptProps($EE, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; EE - +%ReceiptProps($EF, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; EF - +%ReceiptProps($F0, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F0 - +%ReceiptProps($F1, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F1 - +%ReceiptProps($F2, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F2 - +%ReceiptProps($F3, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F3 - +%ReceiptProps($F4, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F4 - +%ReceiptProps($F5, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F5 - +%ReceiptProps($F6, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F6 - +%ReceiptProps($F7, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F7 - +%ReceiptProps($F8, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F8 - +%ReceiptProps($F9, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; F9 - +%ReceiptProps($FA, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; FA - +%ReceiptProps($FB, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; FB - +%ReceiptProps($FC, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; FC - +%ReceiptProps($FD, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; FD - +%ReceiptProps($FE, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; FE - Server request (async) +%ReceiptProps($FF, -4, 0, $49, 2, $04, $F36A, $FF, $00, skip, skip) ; FF - ;-------------------------------------------------------------------------------- BottleListExpanded: @@ -1017,11 +1014,11 @@ RTS CountBottles: PHX LDX.b #$00 - LDA.l BottleContentsOne : BEQ ++ : INX - ++ : LDA.l BottleContentsTwo : BEQ ++ : INX - ++ : LDA.l BottleContentsThree : BEQ ++ : INX - ++ : LDA.l BottleContentsFour : BEQ ++ : INX - ++ + LDA.l BottleContentsOne : BEQ + : INX + + : LDA.l BottleContentsTwo : BEQ + : INX + + : LDA.l BottleContentsThree : BEQ + : INX + + : LDA.l BottleContentsFour : BEQ + : INX + + TXA PLX RTS diff --git a/ram.asm b/ram.asm index 571fb58..d801c3a 100644 --- a/ram.asm +++ b/ram.asm @@ -264,6 +264,9 @@ TileMapTile32 = $7E0698 ; Tilemap location of new tile32 objects, such SkipOAM = $7E0710 ; Set to skip OAM updates. High byte written $FF with exploding walls OWScreenSize = $7E0712 ; Flags overworld screen size. ; +OAMBuffer = $7E0800 ; Main OAM buffer sent to OAM. $200 bytes. +OAMBuffer2 = $7E0A00 ; + ; OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc. ; ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers @@ -737,6 +740,8 @@ endmacro %assertRAM(TileMapTile32, $7E0698) %assertRAM(SkipOAM, $7E0710) %assertRAM(OWScreenSize, $7E0712) +%assertRAM(OAMBuffer, $7E0800) +%assertRAM(OAMBuffer2, $7E0A00) %assertRAM(OWTransitionFlag, $7E0ABF) %assertRAM(TreePullKills, $7E0CFB) %assertRAM(TreePullHits, $7E0CFC) diff --git a/tablets.asm b/tablets.asm index c0a159b..fa41579 100644 --- a/tablets.asm +++ b/tablets.asm @@ -33,8 +33,6 @@ SpawnTabletItem: PHA JSL.l PrepDynamicTile - JSL.l GetSpriteID - LDA.b #$EB STA.l MiniGameTime JSL Sprite_SpawnDynamically diff --git a/utilities.asm b/utilities.asm index 69a9412..dff2d7b 100644 --- a/utilities.asm +++ b/utilities.asm @@ -480,9 +480,8 @@ RTL PrepDynamicTile: PHA : PHX : PHY JSR.w LoadDynamicTileOAMTable - JSL.l GetSpriteID ; convert loot id to sprite id - ;JSL.l GetAnimatedSpriteTile_variable - JSL TransferItemReceiptToBuffer_using_GraphicsID + JSL TransferItemReceiptToBuffer_using_ReceiptID + SEP #$30 PLY : PLX : PLA RTL ;-------------------------------------------------------------------------------- @@ -799,3 +798,21 @@ RTL ;This feature makes it easy to draw the same tile repeatedly. If this bit is set, the length bits should be set to 2 times the number of copies of the tile to upload. (Without subtracting 1!) ;It is followed by a single tile (word). Combining this this with the D bit makes it easy to draw large horizontal or vertical runs of a tile without using much space. Geat for erasing or drawing horizontal or verical box edges. ;================================================================================ + + +DynamicDrawCleanup: + PHA + REP #$20 + LDA.w #$F000 + STA.w OAMBuffer + STA.w OAMBuffer+$04 + STA.w OAMBuffer+$08 + STA.w OAMBuffer+$0C + STZ.w OAMBuffer+$02 + STZ.w OAMBuffer+$06 + STZ.w OAMBuffer+$0A + STZ.w OAMBuffer+$0E + SEP #$20 + PLA +RTL +