diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 9b94ef2..9cef859 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -68,6 +68,7 @@ incsrc floodgatesoftlock.asm incsrc heartpieces.asm incsrc npcitems.asm incsrc utilities.asm +incsrc hextodec.asm incsrc flipperkill.asm incsrc pendantcrystalhud.asm incsrc potions.asm @@ -162,6 +163,8 @@ endif warnpc $A58000 org $A28000 +incsrc decompresseditemgraphics.asm + org $A38000 incsrc stats/main.asm @@ -198,9 +201,7 @@ incbin "data/c2807_v4.gfx" warnpc $31A800 org $31A800 -GFX_New_Items: -incbin "data/newitems.gfx" -;incbin eventitems.gfx ; *EVENT* + warnpc $31B000 org $31B000 @@ -320,18 +321,11 @@ db GFX_HUD_Items>>8 org $00D25A ; 0x525A - HUD Items L db GFX_HUD_Items -; this used to be a pointer to a dummy file -org $00D065 ; 005065 - New Items H -db GFX_New_Items>>16 -org $00D144 ; 005114 - New Items M -db GFX_New_Items>>8 -org $00D223 ; 005223 - New Items L -db GFX_New_Items - org $00D09D ; 0x509D - HUD Main H db GFX_HUD_Main>>16 org $00D17C ; 0x517C - HUD Main M db GFX_HUD_Main>>8 org $00D25B ; 0x525B - HUD Main L db GFX_HUD_Main + ;================================================================================ diff --git a/darkroomitems.asm b/darkroomitems.asm index 41be787..00e02c4 100644 --- a/darkroomitems.asm +++ b/darkroomitems.asm @@ -2,12 +2,12 @@ CheckReceivedItemPropertiesBeforeLoad: LDA.b RoomIndex : BEQ .normalCode LDA.l RoomFade : BNE .lightOff .normalCode - LDA.l AddReceivedItemExpanded_properties, X ;Restore Rando Code + LDA.l ItemReceipts_palette, X ;Restore Rando Code RTL .lightOff PHX : PHY : PHB - LDA.l AddReceivedItemExpanded_properties, X ; get palette + LDA.l ItemReceipts_palette, X ; get palette REP #$30 AND.w #$0007 ; mask out palette diff --git a/data/customitems.4bpp b/data/customitems.4bpp new file mode 100644 index 0000000..033364a Binary files /dev/null and b/data/customitems.4bpp differ diff --git a/data/customitems.png b/data/customitems.png new file mode 100644 index 0000000..f2fcafb Binary files /dev/null and b/data/customitems.png differ diff --git a/decompresseditemgraphics.asm b/decompresseditemgraphics.asm new file mode 100644 index 0000000..6c4889c --- /dev/null +++ b/decompresseditemgraphics.asm @@ -0,0 +1,771 @@ +;=================================================================================================== +; Up here at the top of ROM for easy viewing +;=================================================================================================== +ItemReceiptGraphicsROM: + ; we need some empty space here so that 0000 can mean nothing + fillbyte $00 : fill 32 + incbin "data/customitems.4bpp" + +;=================================================================================================== +; Get the item's graphic from WRAM/ROM +; Bit 7 set indicates an explicit WRAM address +; Bit 7 reset indicates an offset into the ROM buffer +;=================================================================================================== +;--------------------------------------------------------------------------------------------------- +; Enters with A for parameter +;--------------------------------------------------------------------------------------------------- +TransferItemReceiptToBuffer_using_GraphicsID: + PHP + PHB + + REP #$30 + PHX + PHY + + SEP #$30 + LDX.b #$00 + +.find_reverse + CMP.l ItemReceipts_graphics,X + BEQ .found + + INX + BNE .find_reverse + +.found + TXA + REP #$30 + BRA ++ + +;--------------------------------------------------------------------------------------------------- + +TransferItemReceiptToBuffer_using_ReceiptID: + PHP + PHB + + REP #$30 + PHX + PHY + +++ AND.w #$00FF + ASL + TAX + LDA.l ItemReceiptGraphicsOffsets,X + BMI .wram_buffer + +.rom_address + ADC.w #ItemReceiptGraphicsROM + PHK + BRA .continue + +.wram_buffer + PEA.w $7F7F + PLB + +.continue + PLB + TAY + LDX.w #62 + +.next_write + LDA.w $003E,Y + STA.l ItemGetGFX+$00,X + + LDA.w $023E,Y + STA.l ItemGetGFX+$40,X + + DEY + DEY + DEX + DEX + BPL .next_write + + + REP #$30 + PLY + PLX + PLB + PLP + RTL + +;=================================================================================================== + +TransferItemReceiptToVRAM: + REP #$21 + SEP #$10 + + LDA.w ItemGFXPtr + BEQ .exit + BMI .wram_address + +.rom_address + ADC.w #ItemReceiptGraphicsROM + + LDX.b #ItemReceiptGraphicsROM>>16 + +.set_address + STA.w $4202 + ADC.w #$0200 + STA.w $4212 + + STX.w $4304 + STX.w $4314 + + LDX.b #$80 + STX.w $2115 + + LDA.w #$1801 + STA.w $4300 + STA.w $4310 + + LDA.w #$0040 + STA.w $4305 + STA.w $4315 + + LDA.w ItemGFXTgt + STA.w $2116 + + LDX.b #$01 + STX.w $420B + + ADC.w #$0100 + STA.w $2116 + + INX + STX.w $420B + + STZ.w ItemGFXPtr + +.exit + RTL + +.wram_address + LDX.b #$7F + BRA .set_address + +;=================================================================================================== +; Decompress everything at the start of the game +;=================================================================================================== +DecompBufferOffset = $18 +DecompTestByte = $04 +DecompCommand = $02 +DecompSize = $00 +DecompTileCount = $1A +DecompSaveY = $1A +Decomp3BPPScratch = $20 + +;=================================================================================================== + +DecompressAllItemGraphics: + PHP + PHB + PHD + + REP #$38 + + ; Stack change for safety + TSX + + LDA.w #$1400 + TCS + + PHX + + ; direct page change for speed + LDA.w #$1200 + TCD + + STZ.b DecompBufferOffset + + SEP #$34 + + STA.l $4200 ; already 0 from the LDA above + + LDX.b #$5D+$73 : JSR FastSpriteDecomp + LDX.b #$5C+$73 : JSR FastSpriteDecomp + LDX.b #$5B+$73 : JSR FastSpriteDecomp + LDX.b #$5A+$73 : JSR FastSpriteDecomp + + REP #$30 + PLX + TXS + + SEP #$20 + + LDA.b #$81 + STA.l $4200 + + + PLD + PLB + PLP + + RTL + +;=================================================================================================== +; I normally hate macros like this... but I don't feel like constantly rewriting this +;=================================================================================================== +macro GetNextByte() + LDA.w $0000,Y + INY + BNE ?++ + + ; Y pulls more than it needs, but that's fine + ; the high byte should only be affected if we somehow have FF as our bank + ; and if that happens, we have other problems + PHB + PLY + INY + PHY + PLB + + LDY.w #$8000 + +?++ +endmacro + +;=================================================================================================== +; There's no long vanilla routine, and we're going to make heavy use of this +; so might as well rewrite it to be fast +;=================================================================================================== +FastSpriteDecomp: + SEP #$30 + + LDA.l $00CFC0,X : PHA : PLB ; bank + LDA.l $00D09F,X : XBA ; high + LDA.l $00D17E,X ; low + + REP #$10 + + TAY + + LDX.w #$0000 + +.next_command + %GetNextByte() + + CMP.b #$FF + BNE .continue + +;--------------------------------------------------------------------------------------------------- + + JMP Unrolled3BPPConvert + +;--------------------------------------------------------------------------------------------------- + +.continue + CMP.b #$E0 + BCS .expanded + + STA.b DecompTestByte + + REP #$20 + + AND.w #$001F + + BRA .normal + +;--------------------------------------------------------------------------------------------------- +; Putting some commands up here for branch distance +;--------------------------------------------------------------------------------------------------- +.nonrepeating + %GetNextByte() + STA.l DecompBuffer2,X + + INX + + DEC.b DecompSize+0 + BNE .nonrepeating + + DEC.b DecompSize+1 + BPL .nonrepeating + + BRA .next_command + +;--------------------------------------------------------------------------------------------------- + +.repeating + %GetNextByte() + + STY.b DecompSaveY + + LDY.b DecompSize + +.next_repeating + STA.l DecompBuffer2,X + + INX + DEY + BNE .next_repeating + + LDY.b DecompSaveY + BRA .next_command + +;--------------------------------------------------------------------------------------------------- +; Rest of command handling +;--------------------------------------------------------------------------------------------------- +.expanded + STA.b DecompCommand + + ASL + ASL + ASL + AND.b #$E0 + STA.b DecompTestByte + + LDA.b DecompCommand + AND.b #$03 + XBA + + %GetNextByte() + + REP #$20 + +;--------------------------------------------------------------------------------------------------- + +.normal + INC + STA.b DecompSize + + SEP #$20 + + LDA.b DecompTestByte + + AND.b #$E0 + BEQ .nonrepeating + BMI .copy + + ASL + BPL .repeating + + ASL + BPL .repeating_word + +;--------------------------------------------------------------------------------------------------- + +.incremental + %GetNextByte() + + STY.b DecompSaveY + + LDY.b DecompSize + +.next_incremental + STA.l DecompBuffer2,X + + INC + INX + + DEY + BNE .next_incremental + + LDY.b DecompSaveY + JMP .next_command + +;--------------------------------------------------------------------------------------------------- + +.repeating_word + JSR .get_next_word + REP #$20 + + STY.b DecompSaveY + + LDY.b DecompSize + +.next_word + STA.l DecompBuffer2,X + + INX + DEY + BEQ .done_restore_y + + INX + DEY + BNE .next_word + +.done_restore_y + SEP #$20 + + LDY.b DecompSaveY + + JMP .next_command + +;--------------------------------------------------------------------------------------------------- + +.copy + JSR .get_next_word + + STY.b DecompSaveY + + TAY + + PHB + LDA.b #$7F + PHA + PLB + +.next_copy + LDA.w DecompBuffer2,Y + STA.w DecompBuffer2,X + + INX + INY + + DEC.b DecompSize+0 + BNE .next_copy + + DEC.b DecompSize+1 + BPL .next_copy + + PLB + + LDY.b DecompSaveY + + JMP .next_command + +;--------------------------------------------------------------------------------------------------- +; These are only used once per command, so I'm fine with letting them be a JSR I guess +;--------------------------------------------------------------------------------------------------- +.get_next_word + %GetNextByte() + XBA + + %GetNextByte() + XBA + + RTS + +;=================================================================================================== +; More macros, because lazy +;=================================================================================================== + +macro DoPlanesA(offset) + LDA.w DecompBuffer2++,Y + STA.w BigDecompressionBuffer++,X + + ORA.w DecompBuffer2++-1,Y + AND.w #$FF00 + STA.b Decomp3BPPScratch + + LDA.w DecompBuffer2+$10+,Y + AND.w #$00FF + TSB.b Decomp3BPPScratch + + XBA + ORA.b Decomp3BPPScratch + STA.w BigDecompressionBuffer+$10++,X + +endmacro + +;=================================================================================================== + +Unrolled3BPPConvert: + LDA.b #$7F + PHA + PLB + + REP #$21 + + LDY.w #$0000 + LDX.b DecompBufferOffset + +.next_3bpp_tile + %DoPlanesA(0) ; 8 times + %DoPlanesA(1) + %DoPlanesA(2) + %DoPlanesA(3) + %DoPlanesA(4) + %DoPlanesA(5) + %DoPlanesA(6) + %DoPlanesA(7) + + ; carry will always be clear + ; don't worry + TXA + ADC.w #32 + TAX + + ; just trust me + TYA + ADC.w #24 + TAY + + CMP.w #24*64 + BCS .done + + JMP .next_3bpp_tile + +.done + STX.b DecompBufferOffset + SEP #$30 + + RTS + +;=================================================================================================== + +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 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 - Heart piece + 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 $0 ; 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 $0 ; 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 $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 $0 ; 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/hextodec.asm b/hextodec.asm new file mode 100644 index 0000000..a45a540 --- /dev/null +++ b/hextodec.asm @@ -0,0 +1,215 @@ +;=================================================================================================== +; New file because of the enormous table +;=================================================================================================== +;-------------------------------------------------------------------------------- +; HexToDec +; in: A(w) - Word to Convert +; out: HexToDecDigit1 - HexToDecDigit5 (high - low) +;-------------------------------------------------------------------------------- +HexToDec: + PHP + REP #$30 + PHX + PHA + + CMP.w #1000 + BCS .over_1000 + + ASL + TAX + + LDA.l FastHexTable,X + + SEP #$20 + + AND.b #$0F + STA.l HexToDecDigit5 + + LDA.l FastHexTable,X + LSR + LSR + LSR + LSR + STA.l HexToDecDigit4 + + XBA + AND.b #$0F + STA.l HexToDecDigit3 + + REP #$20 + + LDA.l #$0000 + STA.l HexToDecDigit1 + + PLA + PLX + PLP + RTL + +;--------------------------------------------------------------------------------------------------- + +.over_1000 + ; get remainder mod100 + STA.l $4204 + + SEP #$20 + LDA.b #100 + STA.l $4206 + + PHD + PLD + REP #$20 + XBA + LDA.l $4216 + AND.w #$7F + ASL + TAX + + SEP #$20 + LDA.l FastHexTable,X + AND.b #$0F + STA.l HexToDecDigit5 + + LDA.l FastHexTable,X + AND.b #$F0 + LSR + LSR + LSR + LSR + STA.l HexToDecDigit4 + + REP #$20 + + LDA.l $4214 + ASL + TAX + + LDA.l FastHexTable,X + + SEP #$20 + + AND.b #$0F + STA.l HexToDecDigit3 + + LDA.l FastHexTable,X + LSR + LSR + LSR + LSR + STA.l HexToDecDigit2 + + XBA + AND.b #$0F + STA.l HexToDecDigit1 + + REP #$20 + PLA + PLX + PLP + RTL + +;=================================================================================================== + +FastHexTable: + dw $000, $001, $002, $003, $004, $005, $006, $007, $008, $009 + dw $010, $011, $012, $013, $014, $015, $016, $017, $018, $019 + dw $020, $021, $022, $023, $024, $025, $026, $027, $028, $029 + dw $030, $031, $032, $033, $034, $035, $036, $037, $038, $039 + dw $040, $041, $042, $043, $044, $045, $046, $047, $048, $049 + dw $050, $051, $052, $053, $054, $055, $056, $057, $058, $059 + dw $060, $061, $062, $063, $064, $065, $066, $067, $068, $069 + dw $070, $071, $072, $073, $074, $075, $076, $077, $078, $079 + dw $080, $081, $082, $083, $084, $085, $086, $087, $088, $089 + dw $090, $091, $092, $093, $094, $095, $096, $097, $098, $099 + dw $100, $101, $102, $103, $104, $105, $106, $107, $108, $109 + dw $110, $111, $112, $113, $114, $115, $116, $117, $118, $119 + dw $120, $121, $122, $123, $124, $125, $126, $127, $128, $129 + dw $130, $131, $132, $133, $134, $135, $136, $137, $138, $139 + dw $140, $141, $142, $143, $144, $145, $146, $147, $148, $149 + dw $150, $151, $152, $153, $154, $155, $156, $157, $158, $159 + dw $160, $161, $162, $163, $164, $165, $166, $167, $168, $169 + dw $170, $171, $172, $173, $174, $175, $176, $177, $178, $179 + dw $180, $181, $182, $183, $184, $185, $186, $187, $188, $189 + dw $190, $191, $192, $193, $194, $195, $196, $197, $198, $199 + dw $200, $201, $202, $203, $204, $205, $206, $207, $208, $209 + dw $210, $211, $212, $213, $214, $215, $216, $217, $218, $219 + dw $220, $221, $222, $223, $224, $225, $226, $227, $228, $229 + dw $230, $231, $232, $233, $234, $235, $236, $237, $238, $239 + dw $240, $241, $242, $243, $244, $245, $246, $247, $248, $249 + dw $250, $251, $252, $253, $254, $255, $256, $257, $258, $259 + dw $260, $261, $262, $263, $264, $265, $266, $267, $268, $269 + dw $270, $271, $272, $273, $274, $275, $276, $277, $278, $279 + dw $280, $281, $282, $283, $284, $285, $286, $287, $288, $289 + dw $290, $291, $292, $293, $294, $295, $296, $297, $298, $299 + dw $300, $301, $302, $303, $304, $305, $306, $307, $308, $309 + dw $310, $311, $312, $313, $314, $315, $316, $317, $318, $319 + dw $320, $321, $322, $323, $324, $325, $326, $327, $328, $329 + dw $330, $331, $332, $333, $334, $335, $336, $337, $338, $339 + dw $340, $341, $342, $343, $344, $345, $346, $347, $348, $349 + dw $350, $351, $352, $353, $354, $355, $356, $357, $358, $359 + dw $360, $361, $362, $363, $364, $365, $366, $367, $368, $369 + dw $370, $371, $372, $373, $374, $375, $376, $377, $378, $379 + dw $380, $381, $382, $383, $384, $385, $386, $387, $388, $389 + dw $390, $391, $392, $393, $394, $395, $396, $397, $398, $399 + dw $400, $401, $402, $403, $404, $405, $406, $407, $408, $409 + dw $410, $411, $412, $413, $414, $415, $416, $417, $418, $419 + dw $420, $421, $422, $423, $424, $425, $426, $427, $428, $429 + dw $430, $431, $432, $433, $434, $435, $436, $437, $438, $439 + dw $440, $441, $442, $443, $444, $445, $446, $447, $448, $449 + dw $450, $451, $452, $453, $454, $455, $456, $457, $458, $459 + dw $460, $461, $462, $463, $464, $465, $466, $467, $468, $469 + dw $470, $471, $472, $473, $474, $475, $476, $477, $478, $479 + dw $480, $481, $482, $483, $484, $485, $486, $487, $488, $489 + dw $490, $491, $492, $493, $494, $495, $496, $497, $498, $499 + dw $500, $501, $502, $503, $504, $505, $506, $507, $508, $509 + dw $510, $511, $512, $513, $514, $515, $516, $517, $518, $519 + dw $520, $521, $522, $523, $524, $525, $526, $527, $528, $529 + dw $530, $531, $532, $533, $534, $535, $536, $537, $538, $539 + dw $540, $541, $542, $543, $544, $545, $546, $547, $548, $549 + dw $550, $551, $552, $553, $554, $555, $556, $557, $558, $559 + dw $560, $561, $562, $563, $564, $565, $566, $567, $568, $569 + dw $570, $571, $572, $573, $574, $575, $576, $577, $578, $579 + dw $580, $581, $582, $583, $584, $585, $586, $587, $588, $589 + dw $590, $591, $592, $593, $594, $595, $596, $597, $598, $599 + dw $600, $601, $602, $603, $604, $605, $606, $607, $608, $609 + dw $610, $611, $612, $613, $614, $615, $616, $617, $618, $619 + dw $620, $621, $622, $623, $624, $625, $626, $627, $628, $629 + dw $630, $631, $632, $633, $634, $635, $636, $637, $638, $639 + dw $640, $641, $642, $643, $644, $645, $646, $647, $648, $649 + dw $650, $651, $652, $653, $654, $655, $656, $657, $658, $659 + dw $660, $661, $662, $663, $664, $665, $666, $667, $668, $669 + dw $670, $671, $672, $673, $674, $675, $676, $677, $678, $679 + dw $680, $681, $682, $683, $684, $685, $686, $687, $688, $689 + dw $690, $691, $692, $693, $694, $695, $696, $697, $698, $699 + dw $700, $701, $702, $703, $704, $705, $706, $707, $708, $709 + dw $710, $711, $712, $713, $714, $715, $716, $717, $718, $719 + dw $720, $721, $722, $723, $724, $725, $726, $727, $728, $729 + dw $730, $731, $732, $733, $734, $735, $736, $737, $738, $739 + dw $740, $741, $742, $743, $744, $745, $746, $747, $748, $749 + dw $750, $751, $752, $753, $754, $755, $756, $757, $758, $759 + dw $760, $761, $762, $763, $764, $765, $766, $767, $768, $769 + dw $770, $771, $772, $773, $774, $775, $776, $777, $778, $779 + dw $780, $781, $782, $783, $784, $785, $786, $787, $788, $789 + dw $790, $791, $792, $793, $794, $795, $796, $797, $798, $799 + dw $800, $801, $802, $803, $804, $805, $806, $807, $808, $809 + dw $810, $811, $812, $813, $814, $815, $816, $817, $818, $819 + dw $820, $821, $822, $823, $824, $825, $826, $827, $828, $829 + dw $830, $831, $832, $833, $834, $835, $836, $837, $838, $839 + dw $840, $841, $842, $843, $844, $845, $846, $847, $848, $849 + dw $850, $851, $852, $853, $854, $855, $856, $857, $858, $859 + dw $860, $861, $862, $863, $864, $865, $866, $867, $868, $869 + dw $870, $871, $872, $873, $874, $875, $876, $877, $878, $879 + dw $880, $881, $882, $883, $884, $885, $886, $887, $888, $889 + dw $890, $891, $892, $893, $894, $895, $896, $897, $898, $899 + dw $900, $901, $902, $903, $904, $905, $906, $907, $908, $909 + dw $910, $911, $912, $913, $914, $915, $916, $917, $918, $919 + dw $920, $921, $922, $923, $924, $925, $926, $927, $928, $929 + dw $930, $931, $932, $933, $934, $935, $936, $937, $938, $939 + dw $940, $941, $942, $943, $944, $945, $946, $947, $948, $949 + dw $950, $951, $952, $953, $954, $955, $956, $957, $958, $959 + dw $960, $961, $962, $963, $964, $965, $966, $967, $968, $969 + dw $970, $971, $972, $973, $974, $975, $976, $977, $978, $979 + dw $980, $981, $982, $983, $984, $985, $986, $987, $988, $989 + dw $990, $991, $992, $993, $994, $995, $996, $997, $998, $999 + +;=================================================================================================== \ No newline at end of file diff --git a/hooks.asm b/hooks.asm index 36ea38a..aa2990f 100755 --- a/hooks.asm +++ b/hooks.asm @@ -624,13 +624,13 @@ JSL.l EndingSequenceTableLookupOverride : NOP #2 ;================================================================================ ; Master Sword Overlay Fix ;-------------------------------------------------------------------------------- -org $0987b2 ; <- ancilla_init.asm : 1051 (LDA.b #$09) +org $0987B2 ; <- ancilla_init.asm : 1051 (LDA.b #$09) JSL.l PedestalPullOverlayFix -org $0987b8 ; <- ancilla_init.asm : 1055 (STA $039F, X) +org $0987B8 ; <- ancilla_init.asm : 1055 (STA $039F, X) NOP #3 -org $0987df ; <- ancilla_init.asm : 1077 (STA $039F, X) +org $0987DF ; <- ancilla_init.asm : 1077 (STA $039F, X) NOP #3 ;-------------------------------------------------------------------------------- @@ -886,43 +886,47 @@ org $0799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem) JSL.l AddReceivedItemExpanded org $098611 ; 48611 - ancilla_init.asm:720 (LDA .item_target_addr+0, X) -LDA.w AddReceivedItemExpanded_item_target_addr+0, X +LDA.w ItemReceipts_target+0, X org $098616 ; 48616 - ancilla_init.asm:721 (LDA .item_target_addr+1, X) -LDA.w AddReceivedItemExpanded_item_target_addr+1, X +LDA.w ItemReceipts_target+1, X org $09861F ; 4861F - ancilla_init.asm:724 (LDA .item_values, Y) -LDA.w AddReceivedItemExpanded_item_values, Y +LDA.w ItemReceipts_value, Y org $098627 ; 48627 - ancilla_init.asm:731 (LDA .item_target_addr+0, X) -LDA.w AddReceivedItemExpanded_item_target_addr+0, X +LDA.w ItemReceipts_target+0, X org $09862C ; 4862C - ancilla_init.asm:722 (LDA .item_target_addr+1, X) -LDA.w AddReceivedItemExpanded_item_target_addr+1, X +LDA.w ItemReceipts_target+1, X org $098635 ; 48635 - ancilla_init.asm:727 (LDA .item_values, Y) -LDA.w AddReceivedItemExpanded_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 org $098769 ; 48769 - ancilla_init.asm:1005 (LDA .item_graphics_indices, Y) -LDA.w AddReceivedItemExpanded_item_graphics_indices, Y +LDA.w ItemReceipts_graphics, Y + +org $09878C +JSL TransferItemReceiptToBuffer_using_GraphicsID + org $09884D ; 4884D - ancilla_init.asm:1137 (LDA $836C, Y) -LDA.w AddReceivedItemExpanded_y_offsets, Y +LDA.w ItemReceipts_offset_y, Y org $09885B ; 4885B - ancilla_init.asm:1139 (LDA .x_offsets, X) - I think the disassembly is wrong here, should have been LDA .x_offsets, Y -LDA.w AddReceivedItemExpanded_x_offsets, Y +LDA.w ItemReceipts_offset_x, Y org $0988B7 ; 488B7 - ancilla_init.asm:1199 (LDA .wide_item_flag, Y) -LDA.w AddReceivedItemExpanded_wide_item_flag, Y +LDA.w ItemReceipts_width, Y org $0988EF ; 488EF - ancilla_init.asm:1248 (LDA $836C, Y) -LDA.w AddReceivedItemExpanded_y_offsets, Y +LDA.w ItemReceipts_offset_y, Y org $098908 ; 48908 - ancilla_init.asm:1258 (LDA .x_offsets, Y) -LDA.w AddReceivedItemExpanded_x_offsets, Y +LDA.w ItemReceipts_offset_x, Y org $08C6C8 ; 446C8 - ancilla_receive_item.asm:538 (LDA AddReceiveItem.properties, X) JSL CheckReceivedItemPropertiesBeforeLoad org $08C6DE ; 446DE - ancilla_receive_item.asm:550 (LDA .wide_item_flag, X) -LDA.l AddReceivedItemExpanded_wide_item_flag, X +LDA.l ItemReceipts_width, X org $08C6F9 ; 446F9 - ancilla_receive_item.asm:570 (LDA AddReceiveItem.properties, X) JSL CheckReceivedItemPropertiesBeforeLoad diff --git a/init.asm b/init.asm index 0f1d33a..3a1edbf 100644 --- a/init.asm +++ b/init.asm @@ -67,6 +67,8 @@ Init_PostRAMClear: JSL MSUInit JSL InitRNGPointerTable - JSL InitCompassTotalsRAM + JSL InitCompassTotalsRAM + JSL DecompressAllItemGraphics + JML $00D463 ; The original target of the jump table that we hijacked diff --git a/newhud.asm b/newhud.asm index 68a0b12..17e7e0e 100644 --- a/newhud.asm +++ b/newhud.asm @@ -9,8 +9,8 @@ NewDrawHud: LDA.l BombsEquipment ; bombs JSR HudHexToDec2Digit ;requires 8 bit registers! REP #$20 - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDBombCount ; Draw bombs 10 digit - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDBombCount+2 ; Draw bombs 1 digit + LDX.b Scrap06 : TXA : ORA.w #$2490 : STA.l HUDBombCount ; Draw bombs 10 digit + LDX.b Scrap07 : TXA : ORA.w #$2490 : STA.l HUDBombCount+2 ; Draw bombs 1 digit BRA + .infinite_bombs @@ -25,10 +25,10 @@ NewDrawHud: LDA.l DisplayRupees ; Drawing bombs (above) always ends with 16-bit A, so, no need to REP here JSR HudHexToDec4Digit - LDX.b Scrap04 : TXA : ORA.w #$2400 : STA.l HUDRupees ; 1000s - LDX.b Scrap05 : TXA : ORA.w #$2400 : STA.l HUDRupees+2 ; 100s - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDRupees+4 ; 10s - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDRupees+6 ; 1s + LDX.b Scrap04 : TXA : ORA.w #$2490 : STA.l HUDRupees ; 1000s + LDX.b Scrap05 : TXA : ORA.w #$2490 : STA.l HUDRupees+2 ; 100s + LDX.b Scrap06 : TXA : ORA.w #$2490 : STA.l HUDRupees+4 ; 10s + LDX.b Scrap07 : TXA : ORA.w #$2490 : STA.l HUDRupees+6 ; 1s ;================================================================================ ; Draw arrow count @@ -41,8 +41,8 @@ NewDrawHud: LDA.l CurrentArrows ; arrows JSR HudHexToDec2Digit REP #$20 - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDArrowCount ; Draw arrows 10 digit - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDArrowCount+2 ; Draw arrows 1 digit + LDX.b Scrap06 : TXA : ORA.w #$2490 : STA.l HUDArrowCount ; Draw arrows 10 digit + LDX.b Scrap07 : TXA : ORA.w #$2490 : STA.l HUDArrowCount+2 ; Draw arrows 1 digit BRA + .infinite_arrows @@ -63,17 +63,17 @@ NewDrawHud: LDA.l GoalItemIcon : STA.l HUDGoalIndicator ; draw star icon - LDX.b Scrap05 : TXA : ORA.w #$2400 : STA.l HUDGoalIndicator+2 ; draw 100's digit - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDGoalIndicator+4 ; draw 10's digit - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDGoalIndicator+6 ; draw 1's digit + LDX.b Scrap05 : TXA : ORA.w #$2490 : STA.l HUDGoalIndicator+2 ; draw 100's digit + LDX.b Scrap06 : TXA : ORA.w #$2490 : STA.l HUDGoalIndicator+4 ; draw 10's digit + LDX.b Scrap07 : TXA : ORA.w #$2490 : STA.l HUDGoalIndicator+6 ; draw 1's digit LDA.l GoalItemRequirement : CMP.w #$FFFF : BEQ .skip LDA.l GoalItemRequirement JSR HudHexToDec4Digit LDA.w #$2830 : STA.l HUDGoalIndicator+8 ; draw slash - LDX.b Scrap05 : TXA : ORA.w #$2400 : STA.l HUDGoalIndicator+10 ; draw 100's digit - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDGoalIndicator+12 ; draw 10's digit - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDGoalIndicator+14 ; draw 1's digit + LDX.b Scrap05 : TXA : ORA.w #$2490 : STA.l HUDGoalIndicator+10 ; draw 100's digit + LDX.b Scrap06 : TXA : ORA.w #$2490 : STA.l HUDGoalIndicator+12 ; draw 10's digit + LDX.b Scrap07 : TXA : ORA.w #$2490 : STA.l HUDGoalIndicator+14 ; draw 1's digit BRA .done .skip LDA.w #$207F ; transparent tile @@ -98,13 +98,13 @@ NewDrawHud: JSR HudHexToDec2Digit : REP #$20 ; if 10s digit is 0, draw transparent tile instead of 0 - LDX.b Scrap06 : TXA : CPX.b #$90 : BNE + + LDX.b Scrap06 : TXA : BNE + LDA.w #$007F + - ORA.w #$2400 : STA.l HUDKeyDigits + ORA.w #$2490 : STA.l HUDKeyDigits ; 1s digit - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDKeyDigits+2 + LDX.b Scrap07 : TXA : ORA.w #$2490 : STA.l HUDKeyDigits+2 BRA .done_keys .not_in_dungeon @@ -215,31 +215,16 @@ RTL ; out: $04 - $07 (high - low) ;================================================================================ HudHexToDec4Digit: - LDY.b #$90 - - - CMP.w #1000 : !BLT + - INY - SBC.w #1000 : BRA - - + - STY.b Scrap04 : LDY.b #$90 ; Store 1000s digit & reset Y - - - CMP.w #100 : !BLT + - INY - SBC.w #100 : BRA - - + - STY.b Scrap05 : LDY.b #$90 ; Store 100s digit & reset Y - - - CMP.w #10 : !BLT + - INY - SBC.w #10 : BRA - - + - STY.b Scrap06 : LDY.b #$90 ; Store 10s digit & reset Y - CMP.w #1 : !BLT + - - - INY - DEC : BNE - - + - STY.b Scrap07 ; Store 1s digit + JSL HexToDec + + REP #$20 + + LDA.l HexToDecDigit2 + STA.b Scrap04 + + LDA.l HexToDecDigit4 + STA.b Scrap06 + RTS ;================================================================================ @@ -248,17 +233,27 @@ RTS ; out: $06 - $07 (high - low) ;================================================================================ HudHexToDec2Digit: - LDY.b #$90 - - - CMP.b #10 : !BLT + - INY - SBC.b #10 : BRA - - + - STY.b Scrap06 : LDY.b #$90 ; Store 10s digit and reset Y - CMP.b #1 : !BLT + - - - INY - DEC : BNE - - + - STY.b Scrap07 ; Store 1s digit -RTS + PHP + + REP #$30 + PHX + + AND.w #$00FF + ASL + TAX + + SEP #$20 + LDA.l FastHexTable,X + AND.b #$0F + STA.b Scrap07 + + LDA.l FastHexTable,X + LSR + LSR + LSR + LSR + STA.b Scrap06 + + PLX + PLP + RTS diff --git a/newitems.asm b/newitems.asm index 6d53808..498bd15 100755 --- a/newitems.asm +++ b/newitems.asm @@ -39,7 +39,7 @@ ; #$80 - Compasses ; #$90 - Big Keys ; #$A0 - Small Keys -; #$FE - Server Request (Asychronous Chest) +; #$FE - Server Request (Asynchronous Chest) ; #$FF - Null Chest ;-------------------------------------------------------------------------------- ; Service Indexes @@ -76,7 +76,7 @@ GetAnimatedSpriteBufferPointer_table: 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 ; disassembly (incorrectly?) says this is $0270 +dw $0468, $0600, $0630, $0660, $0690, $06C0, $06F0, $0720 dw $0750, $0768, $0900, $0930, $0960, $0990, $09F0, $0000 dw $00F0, $0A20, $0A50, $0660, $0600, $0618, $0630, $0648 @@ -486,313 +486,6 @@ AddReceivedItemExpanded: ;-------------------------------------------------------------------------------- ;DATA AddReceivedItemExpanded { -; This is a temporary measure for Fish to have consistent addresses -org $A08800 - -.y_offsets - db -5, -5, -5, -5, -5, -4, -4, -5 - db -5, -4, -4, -4, -2, -4, -4, -4 - - db -4, -4, -4, -4, -4, -4, -4, -4 - db -4, -4, -4, -4, -4, -4, -4, -4 - - db -4, -4, -4, -5, -4, -4, -4, -4 - db -4, -4, -2, -4, -4, -4, -4, -4 - - db -4, -4, -4, -4, -2, -2, -2, -4 - db -4, -4, -4, -4, -4, -4, -4, -4 - - db -4, -4, -2, -2, -4, -2, -4, -4 - db -4, -5, -4, -4 - ;new - db -4, -4, -4, -4 - db -5 ; Master Sword (Safe) - db -4, -4, -4, -4 ; +5/+10 Bomb Arrows - db -4, -4, -4 ; 3x Programmable Item - db -4 ; Upgrade-Only Sivler Arrows - db -4 ; 1 Rupoor - db -4 ; Null Item - db -4, -4, -4 ; Red, Blue & Green Clocks - db -4, -4, -4, -4 ; Progressive Sword, Shield, Armor & Gloves - db -4, -4 ; RNG Single & Multi - db -4, -4 ; Progressive Bow x2 - db -4, -4, -4, -4 ; Unused - db -4, -4, -4 ; Goal Item Single, Multi & Alt Multi - db -4, -4, -4 ; Unused - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Map - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Compass - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Big Key - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Free Small Key - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused - db -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4 ; Unused - -.x_offsets - db 4, 4, 4, 4, 4, 0, 0, 4 - db 4, 4, 4, 4, 5, 0, 0, 0 - - db 0, 0, 0, 4, 0, 4, 0, 0 - db 4, 0, 0, 0, 0, 0, 0, 0 - - db 0, 0, 0, 0, 4, 0, 0, 0 - db 0, 0, 5, 0, 0, 0, 0, 0 - - db 0, 0, 0, 0, 4, 4, 4, 0 - db 0, 0, 0, 0, 0, 0, 0, 0 - - db 0, 0, 4, 4, 0, 4, 0, 0 - db 0, 4, 0, 0 - ;new - db 0, 0, 0, 0 - db 4 ; Master Sword (Safe) - db 0, 0, 0, 0 ; +5/+10 Bomb Arrows - db 0, 0, 0 ; 3x Programmable Item - db 0 ; Upgrade-Only Sivler Arrows - db 4 ; 1 Rupoor - db 0 ; Null Item - db 0, 0, 0 ; Red, Blue & Green Clocks - db 0, 0, 0, 0 ; Progressive Sword, Shield, Armor & Gloves - db 0, 0 ; RNG Single & Multi - db 0, 0 ; Progressive Bow x2 - db 0, 0, 0, 0 ; Unused - db 0, 0, 0 ; Goal Item Single, Multi & Alt Multi - db 0, 0, 0 ; Unused - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Free Map - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Free Compass - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Free Big Key - ;db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; *EVENT* - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; Unused - -.item_graphics_indices - db $06, $18, $18, $18, $2D, $20, $2E, $09 - db $09, $0A, $08, $05, $10, $0B, $2C, $1B - - db $1A, $1C, $14, $19, $0C, $07, $1D, $2F - db $07, $15, $12, $0D, $0D, $0E, $11, $17 - - db $28, $27, $04, $04, $0F, $16, $03, $13 - db $01, $1E, $10, $00, $00, $00, $00, $00 - - db $00, $30, $22, $21, $24, $24, $24, $23 - db $23, $23, $29, $2A, $2C, $2B, $03, $03 - - db $34, $35, $31, $33, $02, $32, $36, $37 - db $2C, $06, $0C, $38 - ;new - db $39, $3A, $3B, $3C - ;5x - db $18 ; Master Sword (Safe) - db $3D, $3E, $3F, $40 ; +5/+10 Bomb Arrows - db $00, $00, $00 ; 3x Programmable Item - db $41 ; Upgrade-Only Sivler Arrows - db $24 ; 1 Rupoor - db $47 ; Null Item - db $48, $48, $48 ; Red, Blue & Green Clocks - db $FF, $FF, $04, $0D ; Progressive Sword, Shield, Armor & Gloves - db $FF, $FF ; RNG Single & Multi - db $FF, $FF ; Progressive Bow x2 - db $FF, $FF, $FF, $FF ; Unused - db $49, $4A, $49 ; Goal Item Single, Multi & Alt Multi - db $FF, $FF, $FF ; Unused - db $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21 ; Free Map - db $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16 ; Free Compass - db $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22 ; Free Big Key - db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F ; Free Small Key - ;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT* - ;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT* - ;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT* - ;db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; *EVENT* - - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - -.wide_item_flag - db $00, $00, $00, $00, $00, $02, $02, $00 - db $00, $00, $00, $00, $00, $02, $02, $02 - - db $02, $02, $02, $00, $02, $00, $02, $02 - db $00, $02, $02, $02, $02, $02, $02, $02 - - db $02, $02, $02, $02, $00, $02, $02, $02 - db $02, $02, $00, $02, $02, $02, $02, $02 - - db $02, $02, $02, $02, $00, $00, $00, $02 - db $02, $02, $02, $02, $02, $02, $02, $02 - - db $02, $02, $00, $00, $02, $00, $02, $02 - db $02, $00, $02, $02 - ;new - db $02, $02, $02, $02 - db $00 ; Master Sword (Safe) - db $02, $02, $02, $02 ; +5/+10 Bomb Arrows - db $02, $02, $02 ; 3x Programmable Item - db $02 ; Upgrade-Only Sivler Arrows - db $00 ; 1 Rupoor - db $02 ; Null Item - db $02, $02, $02 ; Red, Blue & Green Clocks - db $02, $02, $02, $02 ; Progressive Sword, Shield, Armor & Gloves - db $02, $02 ; RNG Single & Multi - db $02, $02 ; Progressive Bow x2 - db $02, $02, $02, $02 ; Unused - db $02, $02, $02 ; Goal Item Single, Multi & Alt Multi - db $02, $02, $02 ; Unused - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Free Map - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Free Compass - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Free Big Key - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; Free Small Key - - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 ; Unused - -.properties - db 5, -1, 5, 5, 5, 5, 5, 1 - db 2, 1, 1, 1, 2, 2, 2, 4 - - db 4, 4, 1, 1, 2, 1, 1, 1 - db 2, 1, 2, 1, 4, 4, 2, 1 - - db 6, 1, 2, 1, 2, 2, 1, 2 - db 2, 4, 1, 1, 4, 2, 1, 4 - - db 2, 2, 4, 4, 4, 2, 1, 4 - db 1, 2, 2, 1, 2, 2, 1, 1 - - db 4, 4, 1, 2, 2, 4, 4, 4 - db 2, 5, 2, 1 - ;new - db 4, 4, 4, 4 - db 5 ; Master Sword (Safe) - db 4, 4, 4, 4 ; +5/+10 Bomb Arrows - db 4, 4, 4 ; 3x Programmable Item - db 1 ; Upgrade-Only Sivler Arrows - db 3 ; 1 Rupoor - db 1 ; Null Item - db 1, 2, 4 ; Red, Blue & Green Clocks - db $FF, $FF, $FF, $FF ; Progressive Sword, Shield, Armor & Gloves - db $FF, $FF ; RNG Single & Multi - db 0, 0 ; Progressive Bow - db 0, 0, 0, 0 ; Unused - db 4, 4, 4 ; Goal Item Single, Multi & Alt Multi - db 0, 0, 0 ; Unused - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Map - db 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ; Free Compass - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Big Key - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Free Small Key - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused - db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ; Unused - -; \item Target SRAM addresses for items you receive -.item_target_addr - dw $F359, $F359, $F359, $F359, $F35A, $F35A, $F35A, $F345 - dw $F346, $F34B, $F342, $F340, $F341, $F344, $F35C, $F347 - - dw $F348, $F349, $F34A, $F34C, $F34C, $F350, $F35C, $F36B - dw $F351, $F352, $F353, $F354, $F354, $F34E, $F356, $F357 - - dw $F37A, $F34D, $F35B, $F35B, $F36F, $F364, $F36C, $F375 - dw $F375, $F344, $F341, $F35C, $F35C, $F35C, $F36D, $F36E - - dw $F36E, $F375, $F366, $F368, $F360, $F360, $F360, $F374 - dw $F374, $F374, $F340, $F340, $F35C, $F35C, $F36C, $F36C - - dw $F360, $F360, $F372, $F376, $F376, $F373, $F360, $F360 - dw $F35C, $F359, $F34C, $F355 - ;new - dw $F375, $F376, $F373, $F373 - dw $F359 ; Master Sword (Safe) - dw $F375, $F375, $F376, $F376 ; +5/+10 Bomb Arrows - dw $F41A, $F41C, $F41E ; 3x Programmable Item - dw $F340 ; Upgrade-Only Silver Arrows - dw $F360 ; 1 Rupoor - dw $F36A ; Null Item - dw $F454, $F454, $F454 ; Red, Blue & Green Clocks - dw $F359, $F35A, $F35B, $F354 ; Progressive Sword, Shield, Armor & Gloves - dw $F36A, $F36A ; RNG Single & Multi - dw $F340, $F340 ; Progressive Bow x2 - dw $F36A, $F36A, $F36A, $F36A ; Unused - dw $F36A, $F36A, $F36A ; Goal Item Single, Multi & Alt Multi - dw $F36A, $F36A, $F36A ; Unused - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Map - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Compass - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Big Key - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Free Small Key - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused - dw $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A, $F36A ; Unused -} - -; DATA Values to write to the above SRAM locations. -{ -.item_values - db $01, $02, $03, $04, $01, $02, $03, $01 - db $01, $01, $01, $01, $01, $02, $FF, $01 - - db $01, $01, $01, $01, $02, $01, $FF, $FF - db $01, $01, $02, $01, $02, $01, $01, $01 - - db $FF, $01, $FF, $02, $FF, $FF, $FF, $FF - db $FF, $FF, $02, $FF, $FF, $FF, $FF, $FF - - db $FF, $FF, $FF, $FF, $FF, $FB, $EC, $FF - db $FF, $FF, $01, $03, $FF, $FF, $FF, $FF - - db $9C, $CE, $FF, $01, $0A, $FF, $FF, $FF - db $FF, $01, $03, $01 - ;new - db $32, $46, $80, $80 - db $02 ; Master Sword (Safe) - db $FF, $FF, $FF, $FF ; +5/+10 Bomb Arrows - db $FF, $FF, $FF ; 3x Programmable Item - db $FF ; Upgrade-Only Sivler Arrows - db $FF ; 1 Rupoor - db $FF ; Null Item - db $FF, $FF, $FF ; Red, Blue & Green Clocks - db $FF, $FF, $FF, $FF ; Progressive Sword, Shield, Armor & Gloves - db $FF, $FF ; RNG Single & Multi - db $FF, $FF ; Progressive Bow - db $FF, $FF, $FF, $FF ; Unused - db $FF, $FF, $FF ; Goal Item Single, Multi & Alt Multi - db $FF, $FF, $FF ; Unused - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Map - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Compass - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Big Key - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Free Small Key - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; Unused - - ;0x00 - Sewer Passage - ;0x02 - Hyrule Castle - ;0x04 - Eastern Palace - ;0x06 - Desert Palace - ;0x08 - Hyrule Castle 2 - ;0x0A - Swamp Palace - ;0x0C - Dark Palace - ;0x0E - Misery Mire - ;0x10 - Skull Woods - ;0x12 - Ice Palace - ;0x14 - Tower of Hera - ;0x16 - Gargoyle's Domain - ;0x18 - Turtle Rock - ;0x1A - Ganon's Tower - .item_masks ; 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 @@ -815,6 +508,290 @@ org $A08800 dw $3EC0, $0AD0, $082C, $1003, $A905, $8D02, $0309, $20C0 dw $44D0 } + +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 + + +macro ReceiptProps(id, y, x, gfx, width, pal, sram, value) + 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 + + 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 - + + ;-------------------------------------------------------------------------------- BottleListExpanded: db $16, $2B, $2C, $2D, $3D, $3C, $48 @@ -1021,14 +998,14 @@ AttemptItemSubstitution: - LDA.l ItemSubstitutionRules, X CMP.b #$FF : BEQ .exit - CMP.b 1,s : BNE .noMatch + CMP.b 1,S : BNE .noMatch .match PHX TXA : LSR #2 : TAX LDA.l ItemLimitCounts, X PLX CMP.l ItemSubstitutionRules+1, X : !BLT + - LDA.l ItemSubstitutionRules+2, X : STA.b 1,s + LDA.l ItemSubstitutionRules+2, X : STA.b 1,S +: BEQ .exit .noMatch INX #4 diff --git a/npcitems.asm b/npcitems.asm index 96c8d43..06b4aab 100644 --- a/npcitems.asm +++ b/npcitems.asm @@ -51,19 +51,21 @@ ItemCheck_TreeKid: RTL ItemCheck_TreeKid2: - LDA.l NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 + LDA.l NpcFlags : AND.b #$08 : CMP.b #$08 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 RTL ItemCheck_TreeKid3: JSL $0DD030 ; FluteAardvark_Draw - thing we wrote over LDA.l NpcFlags : AND.b #$08 - BEQ .normal - BRA .done + BNE .done + LDA.b #$05 - .normal + +.normal LDA.w SpriteActivity, X - .done -RTL + +.done + RTL ItemCheck_Sahasrala: LDA.l NpcFlags : AND.b #$10 @@ -74,7 +76,7 @@ ItemCheck_Library: RTL ItemCheck_Mushroom: - LDA.l NpcFlags+1 : ROL #4 ; does the same thing as below + LDA.l NpcFlags+1 : AND.b #$10 : CMP.b #$10 ; does the same thing as below RTL ItemCheck_Powder: diff --git a/ram.asm b/ram.asm index 64a6ec3..571fb58 100644 --- a/ram.asm +++ b/ram.asm @@ -186,6 +186,8 @@ RaceGameFlag = $7E021B ; ; MessageJunk = $7E0223 ; Zeroed but never used (?) ; +CoolScratch = $7E0224 ; 0x5C bytes of free ram + ; ItemReceiptID = $7E02D8 ; ItemReceiptPose = $7E02DA ; $00 = No pose | $01 = One hand up | $02 = Two hands up ; @@ -264,6 +266,12 @@ OWScreenSize = $7E0712 ; Flags overworld screen size. ; OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc. ; +ItemGFXPtr = $7E0AFA ; Pointer for item receipt graphics transfers + ; $0000 - no transfer, do nothing + ; bit 7 reset - offset into ROM table + ; bit 7 set - explicit bank7 address +ItemGFXTgt = $7E0AFC ; target VRAM address + ; ArcVariable = $7E0B08 ; Arc variable. Word length. OverlordXLow = $7E0B08 ; $08 bytes. OverlordXHigh = $7E0B10 ; $08 bytes. @@ -381,6 +389,8 @@ ScratchBufferV = $7E1EB0 ; Volatile scratch buffer. Can clobber at will TileUploadBuffer = $7EA180 ; 0x300 bytes ; +ItemGetGFX = $7EBD40 ; Item receipt graphics location + ; RoomFade = $7EC005 ; Flags fade to black on room transitions. Word length. FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length. FadeDirection = $7EC009 ; Word length @@ -445,6 +455,9 @@ BigRAM = $7EC900 ; Big buffer of free ram (0x1F00) ;-------------------------------------------------------------------------------- DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes. +DecompBuffer2 = $7F4000 ; Another buffer + + base $7F5000 RedrawFlag: skip 1 ; skip 2 ; Unused @@ -554,6 +567,9 @@ DialogBuffer: skip $100 ; Dialog Buffer PrivateBlockWRAM = $7F7700 ; Reserved for 3rd party use. $500 bytes. ; See also: $200 bytes at PrivateBlockPersistent, copied to SRAM. BigDecompressionBuffer = $7F8000 ; Reserved for large gfx decompression buffer. $5000 bytes. + ; KEEP THIS AT $8000+ + ; its location at an address with bit 7 set is used for detecting + ; ROM location versus RAM locations ; MiniGameTime = $7FFE00 ; Time spent in mini game. 32-bits. MiniGameTimeFinal = $7FFE04 ; Final mini game time. 32 bits. diff --git a/tables.asm b/tables.asm index 8fbc02b..2b47cd7 100644 --- a/tables.asm +++ b/tables.asm @@ -1061,13 +1061,22 @@ org $308358 AllowAccidentalMajorGlitch: db $00 ;-------------------------------------------------------------------------------- -; GFX pointer (0x180359 - 0x18035B) +; GFX pointers (0x180359 - 0x18035B) ; For 3rd party sprite stuff ;-------------------------------------------------------------------------------- org $308359 dl GfxPalettes + +org $30835C +dl ItemReceiptGraphicsOffsets + +org $30835F +dl ItemReceiptGraphicsOffsets + +; reserving up to 7F for more pointers as needed + ;================================================================================ -; 0x18035C - 0x1814FF (unused) +; 0x180380 - 0x1814FF (unused) ;================================================================================ ; $309500 (0x181500) - $309FFF (0x181FFF) original 0x39C bytes ; Replacement Ending Sequence Text Data @@ -1430,14 +1439,14 @@ db $04 ;org $06B2AA ; <- 332AA sprite_smithy_bros.asm : 152 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) ;JSL Sprite_ShowMessageFromPlayerContact ; Inverted uses Sprite_ShowMessageFromPlayerContact ;;--------------------------------------------------------------------------------- -org $00886e ; <- Bank00.asm : 1050 (LDA Overworld_TileAttr, X) +org $00886E ; <- Bank00.asm : 1050 (LDA Overworld_TileAttr, X) LDA.l Overworld_TileAttr, X ; use "JML InvertedTileAttributeLookup" for inverted Overworld_GetTileAttrAtLocation_continue: ;================================================================================ org $0DDBEC ; <- 6DBEC -dw #10000 ; Rupee Limit +1 +dw 10000 ; Rupee Limit +1 org $0DDBF1 ; <- 6DBF1 -dw #9999 ; Rupee Limit +dw 9999 ; Rupee Limit ;================================================================================ ;2B:Bottle Already Filled w/ Red Potion ;2C:Bottle Already Filled w/ Green Potion diff --git a/tablets.asm b/tablets.asm index 818d3c8..c0a159b 100644 --- a/tablets.asm +++ b/tablets.asm @@ -92,7 +92,7 @@ IsMedallion: RTL ;-------------------------------------------------------------------------------- LoadNarrowObject: - LDA.l AddReceivedItemExpanded_wide_item_flag, X : STA.b ($92), Y ; AddReceiveItem.wide_item_flag? + LDA.l ItemReceipts_width, X : STA.b ($92), Y ; AddReceiveItem.wide_item_flag? RTL ;-------------------------------------------------------------------------------- CheckTabletItem: diff --git a/utilities.asm b/utilities.asm index 82f1076..69a9412 100644 --- a/utilities.asm +++ b/utilities.asm @@ -35,120 +35,134 @@ GetSpriteID: .normal PHX - PHB : PHK : PLB - ;-------- - TAX : LDA.l .gfxSlots, X ; look up item gfx - PLB : PLX - CMP.b #$F8 : !BGE .specialHandling -RTL - .specialHandling - CMP.b #$F9 : BNE ++ ; Progressive Magic - LDA.l MagicConsumption : BNE +++ - LDA.b #$3B : RTL ; Half Magic - +++ - LDA.b #$3C : RTL ; Quarter Magic - ++ CMP.b #$FA : BNE ++ ; RNG Item (Single) - JSL.l GetRNGItemSingle : JMP GetSpriteID - ++ CMP.b #$FB : BNE ++ ; RNG Item (Multi) - JSL.l GetRNGItemMulti : JMP GetSpriteID - ++ CMP.b #$FD : BNE ++ ; Progressive Armor - LDA.l ArmorEquipment : CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit - LDA.l ProgressiveArmorReplacement - JMP GetSpriteID - + - LDA.b #$04 : RTL - ++ CMP.b #$FE : BNE ++ ; Progressive Sword - LDA.l HighestSword - CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit - LDA.l ProgressiveSwordReplacement - JMP GetSpriteID - + : CMP.b #$00 : BNE + ; No Sword - LDA.b #$43 : RTL - + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$44 : RTL - + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$45 : RTL - + ; CMP.b #$03 : BNE + ; Tempered Sword - LDA.b #$46 : RTL - + - ++ : CMP.b #$FF : BNE ++ ; Progressive Shield - LDA.l HighestShield - CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit - LDA.l ProgressiveShieldReplacement - JMP GetSpriteID - + : CMP.b #$00 : BNE + ; No Shield - LDA.b #$2D : RTL - + : CMP.b #$01 : BNE + ; Fighter Shield - LDA.b #$20 : RTL - + ; Everything Else - LDA.b #$2E : RTL - ++ : CMP.b #$F8 : BNE ++ ; Progressive Bow - LDA.l BowEquipment : INC : LSR - CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement - JMP GetSpriteID - + : CMP.b #$00 : BNE + ; No Bow - LDA.b #$29 : RTL - + ; Any Bow - LDA.b #$2A : RTL - ++ + TAX : LDA.l ItemReceipts_graphics, X ; look up item gfx + PLX + CMP.b #$F8 : !BGE .special_handling RTL -;DATA - Loot Identifier to Sprite ID -{ - .gfxSlots - db $06, $44, $45, $46, $2D, $20, $2E, $09 - db $09, $0A, $08, $05, $10, $0B, $2C, $1B +;--------------------------------------------------------------------------------------------------- - db $1A, $1C, $14, $19, $0C, $07, $1D, $2F - db $07, $15, $12, $0D, $0D, $0E, $11, $17 +.special_handling + PHX + AND.b #$07 + ASL + TAX - db $28, $27, $04, $04, $0F, $16, $03, $13 - db $01, $1E, $10, $00, $00, $00, $00, $00 + REP #$20 + LDA.l .handlers,X - db $00, $30, $22, $21, $24, $24, $24, $23 - db $23, $23, $29, $2A, $2C, $2B, $03, $03 + PLX + PHA - db $34, $35, $31, $33, $02, $32, $36, $37 - db $2C, $43, $0C, $38, $39, $3A, $F9, $3C - ; db $2C, $06, $0C, $38, $FF, $FF, $FF, $FF + SEP #$20 + RTS - ;5x - db $44 ; Safe Master Sword - db $3D, $3E, $3F, $40 ; Bomb & Arrow +5/+10 - db $2C, $00, $00 ; 3x Programmable Item - db $41 ; Upgrade-Only Silver Arrows - db $24 ; 1 Rupoor - db $47 ; Null Item - db $48, $48, $48 ; Red, Blue & Green Clocks - db $FE, $FF ; Progressive Sword & Shield +.handlers + dw .handler_F8-1 + dw .handler_F9-1 + dw .handler_FA-1 + dw .handler_FB-1 + dw .handler_FC-1 + dw .handler_FD-1 + dw .handler_FE-1 + dw .handler_FF-1 - ;6x - db $FD, $0D ; Progressive Armor & Gloves - db $FA, $FB ; RNG Single & Multi - db $F8, $F8 ; Progressive Bow x2 - db $FF, $FF, $FF, $FF ; Unused - db $49, $4A, $49 ; Goal Item Single, Multi & Alt Multi - db $39, $39, $39 ; Server Request F0, F1, F2 +;--------------------------------------------------------------------------------------------------- - ;7x - db $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21, $21 ; Free Map +.handler_F8 + LDA.l BowEquipment + INC + LSR + CMP.l ProgressiveBowLimit + BCC ++ - ;8x - db $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16 ; Free Compass + LDA.l ProgressiveBowReplacement + JMP GetSpriteID - ;9x - db $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22 ; Free Big Key +++ CMP.b #$00 + LDA.b #$29 + ADC.b #$00 + RTL - ;Ax - db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F ; Free Small Key +;--------------------------------------------------------------------------------------------------- + +.handler_F9 + LDA.l MagicConsumption + CMP.b #$00 + LDA.b #$3B + ADC.b #$00 + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FA + JSL GetRNGItemSingle + JMP GetSpriteID + +;--------------------------------------------------------------------------------------------------- + +.handler_FB + JSL GetRNGItemMulti + JMP GetSpriteID + +;--------------------------------------------------------------------------------------------------- + +.handler_FC + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FD + LDA.l ArmorEquipment + CMP.l ProgressiveArmorLimit + BCC ++ + + LDA.l ProgressiveArmorReplacement + JMP GetSpriteID + +++ LDA.b #$04 + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FE + LDA.l HighestSword + CMP.l ProgressiveSwordLimit + BCC ++ + + LDA.l ProgressiveSwordReplacement + JMP GetSpriteID + + ; 00 => 43 + ; 01 => 44 + ; 02 => 45 + ; 03 => 46 +++ ADC.b #$43 + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FF + LDA.l HighestShield + CMP.l ProgressiveShieldLimit + BCC ++ + + LDA.l ProgressiveShieldReplacement + JMP GetSpriteID + +++ CMP.b #$01 ; no shield + BEQ .fighter_shield ; if exactly 1 + + ; if 0 => 2D (carry is clear) + ; all others are 2E (carry set for +1) + LDA.b #$2D + ADC.b #$00 + RTL + +.fighter_shield + LDA.b #$20 + RTL - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Unused - db $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49, $49 ; Reserved -} ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- @@ -173,67 +187,159 @@ GetSpritePalette: + PLA : .notBottle PHX - PHB : PHK : PLB - ;-------- TAX : LDA.l GfxPalettes, X ; look up item gfx - PLB : PLX - CMP.b #$F8 : !BGE .specialHandling -RTL - .specialHandling - CMP.b #$FD : BNE ++ ; Progressive Sword - LDA.l HighestSword - CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit - LDA.l ProgressiveSwordReplacement - JMP GetSpritePalette - + : CMP.b #$00 : BNE + ; No Sword - LDA.b #$04 : RTL - + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$04 : RTL - + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$02 : RTL - + ; Everything Else - LDA.b #$08 : RTL - ++ : CMP.b #$FE : BNE ++ ; Progressive Shield - LDA.l HighestShield - CMP.l ProgressiveShieldLimit : !BLT + ; Progressive Shield Limit - LDA.l ProgressiveShieldReplacement - JMP GetSpritePalette - + : CMP.b #$00 : BNE + ; No Shield - LDA.b #$04 : RTL - + : CMP.b #$01 : BNE + ; Fighter Shield - LDA.b #$02 : RTL - + ; Everything Else - LDA.b #$08 : RTL - ++ : CMP.b #$FF : BNE ++ ; Progressive Armor - LDA.l HighestMail - CMP.l ProgressiveArmorLimit : !BLT + ; Progressive Armor Limit - LDA.l ProgressiveArmorReplacement - JMP GetSpritePalette - + : CMP.b #$00 : BNE + ; Green Tunic - LDA.b #$04 : RTL - + ; Everything Else - LDA.b #$02 : RTL - ++ : CMP.b #$FC : BNE ++ ; Progressive Gloves - LDA.l GloveEquipment : BNE + ; No Gloves - LDA.b #$02 : RTL - + ; Everything Else - LDA.b #$08 : RTL - ++ : CMP.b #$F8 : BNE ++ ; Progressive Bow - LDA.l BowEquipment : INC : LSR - CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement - JMP GetSpritePalette - + : CMP.b #$00 : BNE + ; No Bow - LDA.b #$08 : RTL - + ; Any Bow - LDA.b #$02 : RTL - ++ : CMP.b #$FA : BNE ++ ; RNG Item (Single) - JSL.l GetRNGItemSingle : JMP GetSpritePalette - ++ : CMP.b #$FB : BNE ++ ; RNG Item (Multi) - JSL.l GetRNGItemMulti : JMP GetSpritePalette - ++ + PLX + CMP.b #$F8 : !BGE .special_handling RTL +;--------------------------------------------------------------------------------------------------- + +.special_handling + PHX + AND.b #$07 + ASL + TAX + + REP #$20 + LDA.l .handlers,X + + PLX + PHA + + SEP #$20 + RTS + +.handlers + dw .handler_F8-1 + dw .handler_F9-1 + dw .handler_FA-1 + dw .handler_FB-1 + dw .handler_FC-1 + dw .handler_FD-1 + dw .handler_FE-1 + dw .handler_FF-1 + +;--------------------------------------------------------------------------------------------------- + +.handler_F8 + LDA.l BowEquipment + INC + LSR + CMP.l ProgressiveBowLimit + BCC ++ + + LDA.l ProgressiveBowReplacement + JMP GetSpritePalette + +++ CMP.b #$00 + BNE ++ + + LDA.b #$08 + RTL + +++ LDA.b #$02 + RTL + + LDA.b #$29 + ADC.b #$00 + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_F9 + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FA + JSL GetRNGItemSingle + JMP GetSpritePalette +;--------------------------------------------------------------------------------------------------- + +.handler_FB + JSL GetRNGItemMulti + JMP GetSpritePalette + +;--------------------------------------------------------------------------------------------------- + +.handler_FC + LDA.l GloveEquipment + BNE ++ + + LDA.b #$02 + RTL + +++ LDA.b #$08 + RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FD + LDA.l HighestSword + CMP.l ProgressiveSwordLimit + BCC ++ + + LDA.l ProgressiveSwordReplacement + JMP GetSpritePalette + + ; 00 => 04 + ; 01 => 04 + ; 02 => 02 + ; 03 => 08 +++ CMP.b #$02 + BEQ ++ ; 2 exits with 2 + + LDA.b #$04 + BCC ++ ; 0 or 1 get 4 + + ; everything else is 8 + ASL + +++ RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FE + LDA.l HighestShield + CMP.l ProgressiveShieldLimit + BCC ++ + + LDA.l ProgressiveShieldReplacement + JMP GetSpritePalette + + ; 0 => 4 + ; 1 => 2 + ; 2 => 8 +++ CMP.b #$01 ; no shield + BEQ .fighter_shield ; if exactly 1, ASL for 2 + + LDA.b #$04 ; load 4 for 0 + BCC ++ ; exit if < 1, otherwise, ASL for 8 + +.fighter_shield + ASL +++ RTL + +;--------------------------------------------------------------------------------------------------- + +.handler_FF + LDA.l ArmorEquipment + CMP.l ProgressiveArmorLimit + BCC ++ + + LDA.l ProgressiveArmorReplacement + JMP GetSpritePalette + +++ CMP.b #$01 ; carry set means nonzero + LDA.b #$02 + BCS ++ ; nonzero gets 2 + + ASL ; ASL for 4 if zero + +++ RTL + +;--------------------------------------------------------------------------------------------------- + ;DATA - Loot Identifier to Sprite Palette { GfxPalettes: @@ -375,7 +481,8 @@ PrepDynamicTile: PHA : PHX : PHY JSR.w LoadDynamicTileOAMTable JSL.l GetSpriteID ; convert loot id to sprite id - JSL.l GetAnimatedSpriteTile_variable + ;JSL.l GetAnimatedSpriteTile_variable + JSL TransferItemReceiptToBuffer_using_GraphicsID PLY : PLX : PLA RTL ;-------------------------------------------------------------------------------- @@ -501,13 +608,13 @@ RTL ; out: Carry - 1 = On Screen, 0 = Off Screen ;-------------------------------------------------------------------------------- Sprite_IsOnscreen: - JSR _Sprite_IsOnscreen_DoWork + JSR .check_sprite BCS + REP #$20 LDA.b BG2H : PHA : !SUB.w #$0F : STA.b BG2H LDA.b BG2V : PHA : !SUB.w #$0F : STA.b BG2V SEP #$20 - JSR _Sprite_IsOnscreen_DoWork + JSR .check_sprite REP #$20 PLA : STA.b BG2V PLA : STA.b BG2H @@ -515,7 +622,7 @@ Sprite_IsOnscreen: + RTL -_Sprite_IsOnscreen_DoWork: +.check_sprite LDA.w SpritePosXLow, X : CMP.b BG2H LDA.w SpritePosXHigh, X : SBC.b BG2H+1 : BNE .offscreen @@ -558,44 +665,12 @@ RTL SkipDrawEOR: LDA.l SpriteSkipEOR : BEQ .normal LDA.w #$0000 : STA.l SpriteSkipEOR - LDA.w Scrap04 : AND.w #$F0FF : STA.w Scrap04 + LDA.w #$0F00 : TRB.b Scrap04 .normal LDA.b ($08), Y : EOR.w Scrap04 ; thing we wrote over RTL ;-------------------------------------------------------------------------------- -;-------------------------------------------------------------------------------- -; HexToDec -; in: A(w) - Word to Convert -; out: HexToDecDigit1 - HexToDecDigit5 (high - low) -;-------------------------------------------------------------------------------- -HexToDec: - PHA - PHA - LDA.w #$9090 - STA.b Scrap04 : STA.b Scrap06 ; temporarily store our decimal values here for speed - PLA - - - CMP.w #1000 : !BLT + - INC.b Scrap04 - !SUB.w #1000 : BRA - - + - - CMP.w #100 : !BLT + - INC.b Scrap05 - !SUB.w #100 : BRA - - + - - CMP.w #10 : !BLT + - INC.b Scrap06 - !SUB.w #10 : BRA - - + - - CMP.w #1 : !BLT + - INC.b Scrap07 - !SUB.w #1 : BRA - - + - LDA.b Scrap04 : STA.l HexToDecDigit2 ; move to digit storage - LDA.b Scrap06 : STA.l HexToDecDigit4 - PLA -RTL ;-------------------------------------------------------------------------------- ; CountBits