From 2cead7ae9227ad96149b6caa9d28782ab009de69 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Sat, 2 Sep 2023 15:55:37 -0400 Subject: [PATCH 1/5] Fix Active flute standing item gfx Move setting dungeon completed to prize pickup (or after aga1/aga2) Fix some inverted tiles Remove text-related conditional assembly Make InventoryTable_properties 16 bits wide Fix expanded save slot writing to cart SRAM Fix HUD resetting with red potion --- LTTP_RND_GeneralBugfixes.asm | 41 ++- build.sh | 2 +- build_linux.sh | 2 +- dungeondrops.asm | 59 ++-- events.asm | 32 ++- goalitem.asm | 15 - hooks.asm | 33 +-- inventory.asm | 65 +++-- invertedmaps.asm | 1 + itemdatatables.asm | 537 ++++++++++++++++++----------------- itemtext.asm | 68 ++--- itemtext_lower.asm | 147 ---------- newitems.asm | 2 - save.asm | 4 +- stats.asm | 3 + tables.asm | 4 +- 16 files changed, 428 insertions(+), 587 deletions(-) delete mode 100644 itemtext_lower.asm diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 2182470..5addd08 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -50,7 +50,6 @@ dw !ROM_VERSION_HIGH function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<0)) ; Feature flags, run asar with -DFEATURE_X=1 to enable -!FEATURE_NEW_TEXT ?= 0 ;================================================================================ @@ -157,9 +156,7 @@ incsrc fastcredits.asm incsrc msu.asm incsrc dungeonmap.asm incsrc hextodec.asm -if !FEATURE_NEW_TEXT - incsrc textrenderer.asm -endif +incsrc textrenderer.asm warnpc $A58000 org $A28000 @@ -256,30 +253,24 @@ org $B39600 BossMapIconGFX: incbin "data/bossicons.4bpp" -if !FEATURE_NEW_TEXT - org $B39C00 - NewFont: - incbin "data/newfont.bin" - NewFontInverted: - incbin "data/newfont_inverted.bin" - SmallCharacters: - incbin "data/smallchars.2bpp" - org $8CD7DF - incsrc data/playernamecharmap.asm - org $8CE73D - incbin data/playernamestripes_1.bin - org $8CE911 - incbin data/playernamestripes_2.bin - incsrc data/kanjireplacements.asm ; Overwrites text gfx data and masks in bank $8E -endif +org $B39C00 +NewFont: +incbin "data/newfont.bin" +NewFontInverted: +incbin "data/newfont_inverted.bin" +SmallCharacters: +incbin "data/smallchars.2bpp" +org $8CD7DF +incsrc data/playernamecharmap.asm +org $8CE73D +incbin data/playernamestripes_1.bin +org $8CE911 +incbin data/playernamestripes_2.bin +incsrc data/kanjireplacements.asm ; Overwrites text gfx data and masks in bank $8E org $B28000 Extra_Text_Table: -if !FEATURE_NEW_TEXT - incsrc itemtext_lower.asm -else - incsrc itemtext.asm -endif +incsrc itemtext.asm incsrc externalhooks.asm ;================================================================================ diff --git a/build.sh b/build.sh index ad48bc9..501d94f 100755 --- a/build.sh +++ b/build.sh @@ -2,4 +2,4 @@ rm ../working.sfc cp ../alttp.sfc ../working.sfc -./bin/macos/asar -DFEATURE_NEW_TEXT=1 LTTP_RND_GeneralBugfixes.asm ../working.sfc +./bin/macos/asar LTTP_RND_GeneralBugfixes.asm ../working.sfc diff --git a/build_linux.sh b/build_linux.sh index b8d596b..7c3af51 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -2,4 +2,4 @@ rm ../working.sfc cp ../alttp.sfc ../working.sfc -./bin/linux/asar -DFEATURE_NEW_TEXT=1 LTTP_RND_GeneralBugfixes.asm ../working.sfc +./bin/linux/asar LTTP_RND_GeneralBugfixes.asm ../working.sfc diff --git a/dungeondrops.asm b/dungeondrops.asm index 48d3535..765aad8 100644 --- a/dungeondrops.asm +++ b/dungeondrops.asm @@ -103,15 +103,19 @@ SetCutsceneFlag: LDA.w DungeonID : BMI .no_cutscene LDA.w RoomItemsTaken : BIT #$80 : BNE .dungeon_prize .no_cutscene + SEP #$30 PLX CLC RTL .dungeon_prize - LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ .no_cutscene - LDA.w ItemReceiptID : TAX - LDA.l InventoryTable_properties,X : BPL .no_cutscene + LDA.w ItemReceiptMethod : CMP.b #$03 : BCC .no_cutscene + JSR.w SetDungeonCompleted + LDA.w ItemReceiptID + REP #$30 + AND.w #$00FF : ASL : TAX + LDA.l InventoryTable_properties,X : BIT.w #$0080 : BEQ .no_cutscene + SEP #$31 PLX - SEC RTL AnimatePrizeCutscene: @@ -186,36 +190,20 @@ CheckDungeonCompletion: SEP #$20 RTL -MaybeOpenDoor: - ;LDA.w ItemReceiptID : TAX - LDA.w DungeonID : LSR : TAX - LDA.l DungeonPrizeReceiptID,X : TAX - LDA.l InventoryTable_properties,X : BMI .no_open - REP #$20 - LDX.w DungeonID - LDA.l DungeonMask,X : AND.l DungeonsCompleted - SEP #$20 - SEC - RTL - .no_open - REP #$20 - LDX.w DungeonID - LDA.l DungeonMask,X : AND.l DungeonsCompleted - SEP #$20 - CLC -RTL - PendantMusicCheck: ; In: A - Item receipt ID PHX TAY LDA.w ItemReceiptMethod : CMP.b #$03 : BNE .dont_wait - TYX - LDA.l InventoryTable_properties,X : BMI .dont_wait + TYA + REP #$30 + AND.w #$00FF : ASL : TAX + LDA.l InventoryTable_properties,X : BIT.w #$0080 : BNE .dont_wait + SEP #$31 PLX - SEC RTL .dont_wait + SEP #$30 PLX CLC RTL @@ -273,8 +261,8 @@ PrepPrizeOAMCoordinates: CLC : ADC.w #$0008 : STA.b Scrap08 LDA.b Scrap02 : STA.b Scrap0A .wide - PLY : PLX SEP #$20 + PLY : PLX RTL PrepPrizeShadow: @@ -307,14 +295,16 @@ RTL CrystalOrPendantBehavior: ; Out: c - Crystal Behavior if set, pendant if unset PHA : PHX - LDA.w AncillaGet,X : TAX - LDA.l InventoryTable_properties,X : BMI .crystal_behavior + LDA.w AncillaGet,X + REP #$31 + AND.w #$00FF : ASL : TAX + LDA.l InventoryTable_properties,X : BIT.w #$0080 : BNE .crystal_behavior + SEP #$30 PLX : PLA - CLC RTS .crystal_behavior + SEP #$31 PLX : PLA - SEC RTS CheckDungeonWorld: @@ -326,3 +316,10 @@ CheckDungeonWorld: SEP #$02 RTL +SetDungeonCompleted: + LDX.w DungeonID : BMI + + REP #$20 + LDA.l DungeonItemMasks, X : ORA.l DungeonsCompleted : STA.l DungeonsCompleted + SEP #$20 + + +RTS diff --git a/events.asm b/events.asm index 9587aa4..0a783f2 100644 --- a/events.asm +++ b/events.asm @@ -27,20 +27,6 @@ RTL ;-------------------------------------------------------------------------------- OnDungeonBossExit: JSL.l StatTransitionCounter - LDX.w DungeonID : BMI + - LDA.w RoomIndex : CMP.b #$0D : BEQ .aga2 - LDA.w RoomIndex : CMP.b #$20 : BEQ .aga - .set_completed - REP #$20 - LDA.l DungeonItemMasks, X : ORA.l DungeonsCompleted : STA.l DungeonsCompleted - SEP #$20 - + -RTL - .aga2 - CPX.b #$1A : BEQ .set_completed -RTL - .aga - CPX.b #$08 : BEQ .set_completed RTL ;-------------------------------------------------------------------------------- OnPlayerDead: @@ -100,10 +86,28 @@ OnUncleItemGet: + RTL ;-------------------------------------------------------------------------------- +OnAga1Defeated: + STA.l ProgressIndicator ; vanilla game state stuff we overwrote + LDA.l GanonVulnerableMode + CMP.b #$06 : BNE + + .light_speed + REP #$20 + LDA.w #$0019 : STA.b GameMode + SEP #$20 + + + LDA.b #$08 : CMP.w DungeonID : BNE + + ORA.l DungeonsCompleted+1 : STA.l DungeonsCompleted+1 + + +.exit +RTL +;-------------------------------------------------------------------------------- OnAga2Defeated: JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first LDA.b #$FF : STA.w DungeonID LDA.b #$01 : STA.l Aga2Duck + LDA.w DungeonID : CMP.b #$1A : BNE + + LDA.l DungeonsCompleted : ORA.b #$04 : STA.l DungeonsCompleted + + JML.l IncrementAgahnim2Sword ;-------------------------------------------------------------------------------- OnFileCreation: diff --git a/goalitem.asm b/goalitem.asm index dc0c7af..a786b61 100644 --- a/goalitem.asm +++ b/goalitem.asm @@ -186,21 +186,6 @@ CheckAgaForPed: CLC ; skip the RNG check RTL -;--------------------------------------------------------------------------------------------------- - -KillGanon: - STA.l ProgressIndicator ; vanilla game state stuff we overwrote - - LDA.l GanonVulnerableMode - CMP.b #$06 : BNE .exit - -.light_speed - REP #$20 - LDA.w #$0019 : STA.b GameMode - SEP #$20 -.exit - RTL - ;--------------------------------------------------------------------------------------------------- CheckForCrystalBossesDefeated: PHB : PHX : PHY diff --git a/hooks.asm b/hooks.asm index c4a45b2..ff23d62 100644 --- a/hooks.asm +++ b/hooks.asm @@ -525,10 +525,6 @@ JSL AgahnimAsksAboutPed org $9ED6E8 JSL CheckAgaForPed : NOP -; kill ganon when aga dies in light speed -org $80F970 -JSL KillGanon - ;================================================================================ ; Zelda Sprite Fixes ;-------------------------------------------------------------------------------- @@ -699,6 +695,8 @@ JSL GetItemDamageValue ;================================================================================ ; Misc Stats ;-------------------------------------------------------------------------------- +org $80F970 +JSL OnAga1Defeated org $829E2E ; <- 11E2E - module_ganon_emerges.asm : 59 (JSL Dungeon_SaveRoomDataWRAM.justKeys) JSL OnAga2Defeated ;-------------------------------------------------------------------------------- @@ -1413,6 +1411,7 @@ NOP #3 ; Not sure why this is here ;-------------------------------------------------------------------------------- org $87A205 : JSL.l RebuildHUD_update_long org $8AEF62 : JSL.l RebuildHUD_update_long +org $87A1A4 : JSL.l RebuildHUD_update_long org $87A1CF : JSL.l RebuildHUD_update_long org $87A235 : JSL.l RebuildHUD_update_long ;-------------------------------------------------------------------------------- @@ -2446,20 +2445,18 @@ JSL FixJingleGlitch ;================================================================================ ; Text Renderer ;-------------------------------------------------------------------------------- -if !FEATURE_NEW_TEXT - org $8EF51B : JML RenderCharExtended - org $8EF520 : RenderCharExtended_returnOriginal: - org $8EF567 : RenderCharExtended_returnUncompressed: - org $8EF356 : JSL RenderCharLookupWidth - org $8EF3BA : JSL RenderCharLookupWidth - org $8EF48E : JML RenderCharLookupWidthDraw - org $8EF499 : RenderCharLookupWidthDraw_return: - org $8EF6AA : JML RenderCharToMapExtended - org $8EF6C2 : RenderCharToMapExtended_return: - org $8EFA50 : JSL RenderCharSetColorExtended - org $8EEE5D : JSL RenderCharSetColorExtended_init - org $8EF285 : JSL RenderCharSetColorExtended_close : NOP -endif +org $8EF51B : JML RenderCharExtended +org $8EF520 : RenderCharExtended_returnOriginal: +org $8EF567 : RenderCharExtended_returnUncompressed: +org $8EF356 : JSL RenderCharLookupWidth +org $8EF3BA : JSL RenderCharLookupWidth +org $8EF48E : JML RenderCharLookupWidthDraw +org $8EF499 : RenderCharLookupWidthDraw_return: +org $8EF6AA : JML RenderCharToMapExtended +org $8EF6C2 : RenderCharToMapExtended_return: +org $8EFA50 : JSL RenderCharSetColorExtended +org $8EEE5D : JSL RenderCharSetColorExtended_init +org $8EF285 : JSL RenderCharSetColorExtended_close : NOP ;================================================================================ ; VRAM diff --git a/inventory.asm b/inventory.asm index 9f8b93f..b7330ba 100644 --- a/inventory.asm +++ b/inventory.asm @@ -148,35 +148,40 @@ AddInventory: PHK : PLB LDA.b #$7E : STA.b Scrap0D LDA.l StatsLocked : BNE .done - LDA.w InventoryTable_properties,Y : BIT #$01 : BEQ .done - JSR.w ShopCheck : BCS .done - JSR.w DungeonIncrement : BCS .done - JSR.w IncrementByOne - JSR.w StampItem + REP #$30 + TYA : AND.w #$00FF : ASL : TAX SEP #$20 - JSR.w IncrementYAItems - REP #$20 - LDA.l TotalItemCounter : INC : TAY - LDA.l BootsEquipment : BNE + - TYA : STA.l PreBootsLocations - + - LDA.l MirrorEquipment : BNE + - TYA : STA.l PreMirrorLocations - + - LDA.l FluteEquipment : BNE + - TYA : STA.l PreFluteLocations - + - TYA - STA.l TotalItemCounter + LDA.w InventoryTable_properties,X : BIT.b #$01 : BEQ .done + JSR.w ShopCheck : BCS .done + JSR.w DungeonIncrement : BCS .done + JSR.w IncrementByOne + JSR.w StampItem + SEP #$20 + JSR.w IncrementYAItems + REP #$20 + LDA.l TotalItemCounter : INC : TAY + LDA.l BootsEquipment : BNE + + TYA : STA.l PreBootsLocations + + + LDA.l MirrorEquipment : BNE + + TYA : STA.l PreMirrorLocations + + + LDA.l FluteEquipment : BNE + + TYA : STA.l PreFluteLocations + + + TYA + STA.l TotalItemCounter .done + SEP #$30 PLB : PLP : PLY : PLX : PLA RTL ShopCheck: +; In: X - Receipt ID << 1 ; TODO: If we write all shops, we can use the ShopPurchase flag instead of this LDA.b IndoorsFlag : BEQ .count LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ .count - LDA.w InventoryTable_properties,Y : BIT.b #$02 : BNE .count + LDA.w InventoryTable_properties,X : BIT.b #$02 : BNE .count REP #$20 LDA.b RoomIndex CMP.w #274 : BEQ .nocount ; dark world death mountain shop, ornamental shield shop @@ -197,40 +202,47 @@ RTS RTS DungeonIncrement: - LDA.w InventoryTable_properties,Y : BIT.b #$40 : BEQ + +; In: X - Receipt ID << 1 + PHX + LDA.w InventoryTable_properties,X : BIT.b #$40 : BEQ + JSL.l CountChestKeyLong + LDA.b IndoorsFlag : BEQ .done LDA.w DungeonID : BMI .done CMP.l BallNChainDungeon : BNE + - CPY.b #$32 : BEQ .ballchain_bigkey + CPY.w #$0032 : BEQ .ballchain_bigkey + CMP.b #$04 : BCS + LDA.l SewersLocations : INC : STA.l SewersLocations : STA.l HCLocations BRA .done + - LSR : TAX : LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X - CPX.b #$0D : BNE + + LSR : TAX + LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X + CPX.w #$000D : BNE + LDA.l BigKeyField : BIT.b #$04 : BNE ++ LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations ++ + .done + PLX CLC RTS .ballchain_bigkey LDA.l BigKeysBigChests CLC : ADC.b #$10 STA.l BigKeysBigChests + PLX SEC RTS StampItem: REP #$30 - TYA : ASL : TAX LDA.w InventoryTable_stamp,X : BEQ .skip STA.b Scrap0B LDA.b [Scrap0B] : BNE .skip + INC.b Scrap0B : INC.b Scrap0B + LDA.b [Scrap0B] : BNE .skip + DEC.b Scrap0B : DEC.b Scrap0B LDA.l NMIFrames : STA.b [Scrap0B] INC.b Scrap0B : INC.b Scrap0B LDA.l NMIFrames+2 : STA.b [Scrap0B] @@ -238,7 +250,7 @@ StampItem: RTS IncrementYAItems: - LDA.w InventoryTable_properties,Y + LDA.w InventoryTable_properties,X BIT.b #$10 : BNE .bomb_check BIT.b #$20 : BNE .bow_check BIT.b #$04 : BEQ .not_y @@ -267,7 +279,6 @@ RTS IncrementByOne: REP #$20 - TYA : ASL : TAX LDA.w InventoryTable_stat,X : BEQ .skip STA.b Scrap0B SEP #$21 diff --git a/invertedmaps.asm b/invertedmaps.asm index 1501335..6814c19 100644 --- a/invertedmaps.asm +++ b/invertedmaps.asm @@ -1150,6 +1150,7 @@ OverworldMapChangePointers: dw $2C18, $2C98 dw $2D0A, $2D0C, $2D10, $2D14 dw $2D16, $2D8A, $2D8C, $2D8E + dw $2C94, $2C92, $2B8E dw $2D94|!OWW_STOP dw !OWW_ArbTileCopy diff --git a/itemdatatables.asm b/itemdatatables.asm index b83d5d2..a7c54a2 100644 --- a/itemdatatables.asm +++ b/itemdatatables.asm @@ -85,19 +85,20 @@ ; InventoryTable ;------------------------------------------------------------------------------ ; .properties [0x01] - $A2C000 (0x114000 PC) -; • p k w o a y s t +; • - - - - - - - - p k w o a y s t ; t = Count for total item counter | s = Count for total in shops ; y = Y item | a = A item ; o = Bomb item | w = Bow item ; k = Chest Key | p = Crystal prize behavior (sparkle, etc) if set -; .stat [0x02] - $A2C100 (0x114100 PC) -; • Pointer to address in bank $7E. Increments byte by one if stats not locked. -; .stamp [0x02] - $A2C300 (0x114300 PC) +; .stamp [0x02] - $A2C200 (0x114200 PC) ; • Pointer to address in bank $7E. Stamps 32-bit frame time if stats not locked. +; .stat [0x02] - $A2C400 (0x114400 PC) +; • Pointer to address in bank $7E. Increments byte by one if stats not locked. ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ -; ItemReceiptGraphicsOffsets & StandingItemGraphicsOffsets +; ItemReceiptGraphicsOffsets - $22C600 (0x114600) +; StandingItemGraphicsOffsets - $22C800 (0x114800) ;------------------------------------------------------------------------------ ; Each receipt ID has one word-length entry. Decompressed vanilla item graphics ; are located starting at BigDecompressionBuffer. The graphics routines use the @@ -672,280 +673,280 @@ endmacro %SpriteProps($FF, 2, 2, $04, $04, $0000) ; FF - ;------------------------------------------------------------------------------ -; Properties: p k w o a y s t +; Properties: - - - - - - - - p k w o a y s t ; t = Count for total item counter | s = Count for total in shops ; y = Y item | a = A item ; o = Bomb item | w = Bow item ; k = Chest Key | p = Crystal prize behavior (sparkle, etc) if set InventoryTable: - .properties : fillbyte $00 : fill 256 ; See above + .properties : fillword $0000 : fill 256*2 ; See above .stamp : fillword $0000 : fill 256*2 ; Address to stamp with 32-bit time (bank $7E) .stat : fillword $0000 : fill 256*2 ; Address to increment by one (bank $7E) macro InventoryItem(id, props, stamp, stat) pushpc - org InventoryTable_properties+ : db - org InventoryTable_stamp++ : dw - org InventoryTable_stat++ : dw + org InventoryTable_properties++ : dw + org InventoryTable_stamp++ : dw + org InventoryTable_stat++ : dw pullpc endmacro -%InventoryItem($00, $81, SwordTime, $0000) ; 00 - Fighter sword & Shield -%InventoryItem($01, $81, SwordTime, $0000) ; 01 - Master sword -%InventoryItem($02, $01, SwordTime, $0000) ; 02 - Tempered sword -%InventoryItem($03, $81, SwordTime, $0000) ; 03 - Butter sword -%InventoryItem($04, $81, $0000, $0000) ; 04 - Fighter shield -%InventoryItem($05, $81, $0000, $0000) ; 05 - Fire shield -%InventoryItem($06, $81, $0000, $0000) ; 06 - Mirror shield -%InventoryItem($07, $85, $0000, $0000) ; 07 - Fire rod -%InventoryItem($08, $85, $0000, $0000) ; 08 - Ice rod -%InventoryItem($09, $85, $0000, $0000) ; 09 - Hammer -%InventoryItem($0A, $85, $0000, $0000) ; 0A - Hookshot -%InventoryItem($0B, $85, $0000, $0000) ; 0B - Bow -%InventoryItem($0C, $85, $0000, $0000) ; 0C - Blue Boomerang -%InventoryItem($0D, $85, $0000, $0000) ; 0D - Powder -%InventoryItem($0E, $81, $0000, $0000) ; 0E - Bottle refill (bee) -%InventoryItem($0F, $85, $0000, $0000) ; 0F - Bombos -%InventoryItem($10, $85, $0000, $0000) ; 10 - Ether -%InventoryItem($11, $85, $0000, $0000) ; 11 - Quake -%InventoryItem($12, $85, $0000, $0000) ; 12 - Lamp -%InventoryItem($13, $85, $0000, $0000) ; 13 - Shovel -%InventoryItem($14, $85, FluteTime, $0000) ; 14 - Flute (inactive) -%InventoryItem($15, $85, $0000, $0000) ; 15 - Somaria -%InventoryItem($16, $85, $0000, $0000) ; 16 - Bottle -%InventoryItem($17, $01, $0000, HeartPieceCounter) ; 17 - Heart piece -%InventoryItem($18, $85, $0000, $0000) ; 18 - Byrna -%InventoryItem($19, $85, $0000, $0000) ; 19 - Cape -%InventoryItem($1A, $85, MirrorTime, $0000) ; 1A - Mirror -%InventoryItem($1B, $89, $0000, $0000) ; 1B - Glove -%InventoryItem($1C, $89, $0000, $0000) ; 1C - Mitts -%InventoryItem($1D, $85, $0000, $0000) ; 1D - Book -%InventoryItem($1E, $89, $0000, $0000) ; 1E - Flippers -%InventoryItem($1F, $81, $0000, $0000) ; 1F - Pearl -%InventoryItem($20, $80, $0000, $0000) ; 20 - Crystal -%InventoryItem($21, $85, $0000, $0000) ; 21 - Net -%InventoryItem($22, $81, $0000, $0000) ; 22 - Blue mail -%InventoryItem($23, $81, $0000, $0000) ; 23 - Red mail -%InventoryItem($24, $41, $0000, SmallKeyCounter) ; 24 - Small key -%InventoryItem($25, $01, $0000, $0000) ; 25 - Compass -%InventoryItem($26, $00, $0000, $0000) ; 26 - Heart container from 4/4 -%InventoryItem($27, $15, $0000, $0000) ; 27 - Bomb -%InventoryItem($28, $15, $0000, $0000) ; 28 - 3 bombs -%InventoryItem($29, $85, $0000, $0000) ; 29 - Mushroom -%InventoryItem($2A, $05, $0000, $0000) ; 2A - Red boomerang -%InventoryItem($2B, $85, $0000, $0000) ; 2B - Full bottle (red) -%InventoryItem($2C, $85, $0000, $0000) ; 2C - Full bottle (green) -%InventoryItem($2D, $85, $0000, $0000) ; 2D - Full bottle (blue) -%InventoryItem($2E, $80, $0000, $0000) ; 2E - Potion refill (red) -%InventoryItem($2F, $80, $0000, $0000) ; 2F - Potion refill (green) -%InventoryItem($30, $80, $0000, $0000) ; 30 - Potion refill (blue) -%InventoryItem($31, $11, $0000, $0000) ; 31 - 10 bombs -%InventoryItem($32, $01, $0000, $0000) ; 32 - Big key -%InventoryItem($33, $01, $0000, $0000) ; 33 - Map -%InventoryItem($34, $01, $0000, $0000) ; 34 - 1 rupee -%InventoryItem($35, $01, $0000, $0000) ; 35 - 5 rupees -%InventoryItem($36, $01, $0000, $0000) ; 36 - 20 rupees -%InventoryItem($37, $00, $0000, $0000) ; 37 - Green pendant -%InventoryItem($38, $00, $0000, $0000) ; 38 - Red pendant -%InventoryItem($39, $00, $0000, $0000) ; 39 - Blue pendant -%InventoryItem($3A, $A5, $0000, $0000) ; 3A - Bow And Arrows -%InventoryItem($3B, $A5, $0000, $0000) ; 3B - Silver Bow -%InventoryItem($3C, $85, $0000, $0000) ; 3C - Full bottle (bee) -%InventoryItem($3D, $85, $0000, $0000) ; 3D - Full bottle (fairy) -%InventoryItem($3E, $01, $0000, HeartContainerCounter) ; 3E - Boss heart -%InventoryItem($3F, $81, $0000, HeartContainerCounter) ; 3F - Sanc heart -%InventoryItem($40, $01, $0000, $0000) ; 40 - 100 rupees -%InventoryItem($41, $01, $0000, $0000) ; 41 - 50 rupees -%InventoryItem($42, $01, $0000, $0000) ; 42 - Heart -%InventoryItem($43, $01, $0000, $0000) ; 43 - Arrow -%InventoryItem($44, $01, $0000, $0000) ; 44 - 10 arrows -%InventoryItem($45, $01, $0000, $0000) ; 45 - Small magic -%InventoryItem($46, $01, $0000, $0000) ; 46 - 300 rupees -%InventoryItem($47, $01, $0000, $0000) ; 47 - 20 rupees green -%InventoryItem($48, $85, $0000, $0000) ; 48 - Full bottle (good bee) -%InventoryItem($49, $81, $0000, $0000) ; 49 - Tossed fighter sword -%InventoryItem($4A, $85, FluteTime, $0000) ; 4A - Active Flute -%InventoryItem($4B, $89, BootsTime, $0000) ; 4B - Boots -%InventoryItem($4C, $15, $0000, CapacityUpgrades) ; 4C - Bomb capacity (50) -%InventoryItem($4D, $01, $0000, CapacityUpgrades) ; 4D - Arrow capacity (70) -%InventoryItem($4E, $81, $0000, CapacityUpgrades) ; 4E - 1/2 magic -%InventoryItem($4F, $81, $0000, CapacityUpgrades) ; 4F - 1/4 magic -%InventoryItem($50, $81, SwordTime, $0000) ; 50 - Master Sword (safe) -%InventoryItem($51, $15, $0000, CapacityUpgrades) ; 51 - Bomb capacity (+5) -%InventoryItem($52, $15, $0000, CapacityUpgrades) ; 52 - Bomb capacity (+10) -%InventoryItem($53, $01, $0000, CapacityUpgrades) ; 53 - Arrow capacity (+5) -%InventoryItem($54, $01, $0000, CapacityUpgrades) ; 54 - Arrow capacity (+10) -%InventoryItem($55, $01, $0000, $0000) ; 55 - Programmable item 1 -%InventoryItem($56, $01, $0000, $0000) ; 56 - Programmable item 2 -%InventoryItem($57, $01, $0000, $0000) ; 57 - Programmable item 3 -%InventoryItem($58, $81, $0000, $0000) ; 58 - Upgrade-only Silver Arrows -%InventoryItem($59, $01, $0000, $0000) ; 59 - Rupoor -%InventoryItem($5A, $01, $0000, $0000) ; 5A - Nothing -%InventoryItem($5B, $81, $0000, $0000) ; 5B - Red clock -%InventoryItem($5C, $81, $0000, $0000) ; 5C - Blue clock -%InventoryItem($5D, $81, $0000, $0000) ; 5D - Green clock -%InventoryItem($5E, $81, $0000, $0000) ; 5E - Progressive sword -%InventoryItem($5F, $81, $0000, $0000) ; 5F - Progressive shield -%InventoryItem($60, $81, $0000, $0000) ; 60 - Progressive armor -%InventoryItem($61, $89, $0000, $0000) ; 61 - Progressive glove -%InventoryItem($62, $01, $0000, $0000) ; 62 - RNG pool item (single) -%InventoryItem($63, $01, $0000, $0000) ; 63 - RNG pool item (multi) -%InventoryItem($64, $A5, $0000, $0000) ; 64 - Progressive bow -%InventoryItem($65, $A5, $0000, $0000) ; 65 - Progressive bow -%InventoryItem($66, $01, $0000, $0000) ; 66 - -%InventoryItem($67, $01, $0000, $0000) ; 67 - -%InventoryItem($68, $01, $0000, $0000) ; 68 - -%InventoryItem($69, $01, $0000, $0000) ; 69 - -%InventoryItem($6A, $81, $0000, $0000) ; 6A - Triforce -%InventoryItem($6B, $81, $0000, $0000) ; 6B - Power star -%InventoryItem($6C, $81, $0000, $0000) ; 6C - Triforce Piece -%InventoryItem($6D, $01, $0000, $0000) ; 6D - Server request item -%InventoryItem($6E, $01, $0000, $0000) ; 6E - Server request item (dungeon drop) -%InventoryItem($6F, $01, $0000, $0000) ; 6F - -%InventoryItem($70, $01, $0000, $0000) ; 70 - Map of Light World -%InventoryItem($71, $01, $0000, $0000) ; 71 - Map of Dark World -%InventoryItem($72, $01, $0000, $0000) ; 72 - Map of Ganon's Tower -%InventoryItem($73, $01, $0000, $0000) ; 73 - Map of Turtle Rock -%InventoryItem($74, $01, $0000, $0000) ; 74 - Map of Thieves' Town -%InventoryItem($75, $01, $0000, $0000) ; 75 - Map of Tower of Hera -%InventoryItem($76, $01, $0000, $0000) ; 76 - Map of Ice Palace -%InventoryItem($77, $01, $0000, $0000) ; 77 - Map of Skull Woods -%InventoryItem($78, $01, $0000, $0000) ; 78 - Map of Misery Mire -%InventoryItem($79, $01, $0000, $0000) ; 79 - Map of Dark Palace -%InventoryItem($7A, $01, $0000, $0000) ; 7A - Map of Swamp Palace -%InventoryItem($7B, $01, $0000, $0000) ; 7B - Map of Agahnim's Tower -%InventoryItem($7C, $01, $0000, $0000) ; 7C - Map of Desert Palace -%InventoryItem($7D, $01, $0000, $0000) ; 7D - Map of Eastern Palace -%InventoryItem($7E, $01, $0000, $0000) ; 7E - Map of Hyrule Castle -%InventoryItem($7F, $01, $0000, $0000) ; 7F - Map of Sewers -%InventoryItem($80, $01, $0000, $0000) ; 80 - Compass of Light World -%InventoryItem($81, $01, $0000, $0000) ; 81 - Compass of Dark World -%InventoryItem($82, $01, $0000, $0000) ; 82 - Compass of Ganon's Tower -%InventoryItem($83, $01, $0000, $0000) ; 83 - Compass of Turtle Rock -%InventoryItem($84, $01, $0000, $0000) ; 84 - Compass of Thieves' Town -%InventoryItem($85, $01, $0000, $0000) ; 85 - Compass of Tower of Hera -%InventoryItem($86, $01, $0000, $0000) ; 86 - Compass of Ice Palace -%InventoryItem($87, $01, $0000, $0000) ; 87 - Compass of Skull Woods -%InventoryItem($88, $01, $0000, $0000) ; 88 - Compass of Misery Mire -%InventoryItem($89, $01, $0000, $0000) ; 89 - Compass of Dark Palace -%InventoryItem($8A, $01, $0000, $0000) ; 8A - Compass of Swamp Palace -%InventoryItem($8B, $01, $0000, $0000) ; 8B - Compass of Agahnim's Tower -%InventoryItem($8C, $01, $0000, $0000) ; 8C - Compass of Desert Palace -%InventoryItem($8D, $01, $0000, $0000) ; 8D - Compass of Eastern Palace -%InventoryItem($8E, $01, $0000, $0000) ; 8E - Compass of Hyrule Castle -%InventoryItem($8F, $01, $0000, $0000) ; 8F - Compass of Sewers -%InventoryItem($90, $81, $0000, $0000) ; 90 - Skull key -%InventoryItem($91, $01, $0000, $0000) ; 91 - Reserved -%InventoryItem($92, $01, $0000, $0000) ; 92 - Big key of Ganon's Tower -%InventoryItem($93, $01, $0000, $0000) ; 93 - Big key of Turtle Rock -%InventoryItem($94, $01, $0000, $0000) ; 94 - Big key of Thieves' Town -%InventoryItem($95, $01, $0000, $0000) ; 95 - Big key of Tower of Hera -%InventoryItem($96, $01, $0000, $0000) ; 96 - Big key of Ice Palace -%InventoryItem($97, $01, $0000, $0000) ; 97 - Big key of Skull Woods -%InventoryItem($98, $01, $0000, $0000) ; 98 - Big key of Misery Mire -%InventoryItem($99, $01, $0000, $0000) ; 99 - Big key of Dark Palace -%InventoryItem($9A, $01, $0000, $0000) ; 9A - Big key of Swamp Palace -%InventoryItem($9B, $01, $0000, $0000) ; 9B - Big key of Agahnim's Tower -%InventoryItem($9C, $01, $0000, $0000) ; 9C - Big key of Desert Palace -%InventoryItem($9D, $01, $0000, $0000) ; 9D - Big key of Eastern Palace -%InventoryItem($9E, $01, $0000, $0000) ; 9E - Big key of Hyrule Castle -%InventoryItem($9F, $01, $0000, $0000) ; 9F - Big key of Sewers -%InventoryItem($A0, $41, $0000, SmallKeyCounter) ; A0 - Small key of Sewers -%InventoryItem($A1, $41, $0000, SmallKeyCounter) ; A1 - Small key of Hyrule Castle -%InventoryItem($A2, $41, $0000, SmallKeyCounter) ; A2 - Small key of Eastern Palace -%InventoryItem($A3, $41, $0000, SmallKeyCounter) ; A3 - Small key of Desert Palace -%InventoryItem($A4, $41, $0000, SmallKeyCounter) ; A4 - Small key of Agahnim's Tower -%InventoryItem($A5, $41, $0000, SmallKeyCounter) ; A5 - Small key of Swamp Palace -%InventoryItem($A6, $41, $0000, SmallKeyCounter) ; A6 - Small key of Dark Palace -%InventoryItem($A7, $41, $0000, SmallKeyCounter) ; A7 - Small key of Misery Mire -%InventoryItem($A8, $41, $0000, SmallKeyCounter) ; A8 - Small key of Skull Woods -%InventoryItem($A9, $41, $0000, SmallKeyCounter) ; A9 - Small key of Ice Palace -%InventoryItem($AA, $41, $0000, SmallKeyCounter) ; AA - Small key of Tower of Hera -%InventoryItem($AB, $41, $0000, SmallKeyCounter) ; AB - Small key of Thieves' Town -%InventoryItem($AC, $41, $0000, SmallKeyCounter) ; AC - Small key of Turtle Rock -%InventoryItem($AD, $41, $0000, SmallKeyCounter) ; AD - Small key of Ganon's Tower -%InventoryItem($AE, $01, $0000, $0000) ; AE - Reserved -%InventoryItem($AF, $01, $0000, SmallKeyCounter) ; AF - Generic small key -%InventoryItem($B0, $81, $0000, $0000) ; B0 - Crystal 6 -%InventoryItem($B1, $81, $0000, $0000) ; B1 - Crystal 1 -%InventoryItem($B2, $81, $0000, $0000) ; B2 - Crystal 5 -%InventoryItem($B3, $81, $0000, $0000) ; B3 - Crystal 7 -%InventoryItem($B4, $81, $0000, $0000) ; B4 - Crystal 2 -%InventoryItem($B5, $81, $0000, $0000) ; B5 - Crystal 4 -%InventoryItem($B6, $81, $0000, $0000) ; B6 - Crystal 3 -%InventoryItem($B7, $01, $0000, $0000) ; B7 - Reserved -%InventoryItem($B8, $01, $0000, $0000) ; B8 - -%InventoryItem($B9, $01, $0000, $0000) ; B9 - -%InventoryItem($BA, $01, $0000, $0000) ; BA - -%InventoryItem($BB, $01, $0000, $0000) ; BB - -%InventoryItem($BC, $01, $0000, $0000) ; BC - -%InventoryItem($BD, $01, $0000, $0000) ; BD - -%InventoryItem($BE, $01, $0000, $0000) ; BE - -%InventoryItem($BF, $01, $0000, $0000) ; BF - -%InventoryItem($C0, $01, $0000, $0000) ; C0 - -%InventoryItem($C1, $01, $0000, $0000) ; C1 - -%InventoryItem($C2, $01, $0000, $0000) ; C2 - -%InventoryItem($C3, $01, $0000, $0000) ; C3 - -%InventoryItem($C4, $01, $0000, $0000) ; C4 - -%InventoryItem($C5, $01, $0000, $0000) ; C5 - -%InventoryItem($C6, $01, $0000, $0000) ; C6 - -%InventoryItem($C7, $01, $0000, $0000) ; C7 - -%InventoryItem($C8, $01, $0000, $0000) ; C8 - -%InventoryItem($C9, $01, $0000, $0000) ; C9 - -%InventoryItem($CA, $01, $0000, $0000) ; CA - -%InventoryItem($CB, $01, $0000, $0000) ; CB - -%InventoryItem($CC, $01, $0000, $0000) ; CC - -%InventoryItem($CD, $01, $0000, $0000) ; CD - -%InventoryItem($CE, $01, $0000, $0000) ; CE - -%InventoryItem($CF, $01, $0000, $0000) ; CF - -%InventoryItem($D0, $01, $0000, $0000) ; D0 - -%InventoryItem($D1, $01, $0000, $0000) ; D1 - -%InventoryItem($D2, $01, $0000, $0000) ; D2 - -%InventoryItem($D3, $01, $0000, $0000) ; D3 - -%InventoryItem($D4, $01, $0000, $0000) ; D4 - -%InventoryItem($D5, $01, $0000, $0000) ; D5 - -%InventoryItem($D6, $01, $0000, $0000) ; D6 - -%InventoryItem($D7, $01, $0000, $0000) ; D7 - -%InventoryItem($D8, $01, $0000, $0000) ; D8 - -%InventoryItem($D9, $01, $0000, $0000) ; D9 - -%InventoryItem($DA, $01, $0000, $0000) ; DA - -%InventoryItem($DB, $01, $0000, $0000) ; DB - -%InventoryItem($DC, $01, $0000, $0000) ; DC - -%InventoryItem($DD, $01, $0000, $0000) ; DD - -%InventoryItem($DE, $01, $0000, $0000) ; DE - -%InventoryItem($DF, $01, $0000, $0000) ; DF - -%InventoryItem($E0, $01, $0000, $0000) ; E0 - -%InventoryItem($E1, $01, $0000, $0000) ; E1 - -%InventoryItem($E2, $01, $0000, $0000) ; E2 - -%InventoryItem($E3, $01, $0000, $0000) ; E3 - -%InventoryItem($E4, $01, $0000, $0000) ; E4 - -%InventoryItem($E5, $01, $0000, $0000) ; E5 - -%InventoryItem($E6, $01, $0000, $0000) ; E6 - -%InventoryItem($E7, $01, $0000, $0000) ; E7 - -%InventoryItem($E8, $01, $0000, $0000) ; E8 - -%InventoryItem($E9, $01, $0000, $0000) ; E9 - -%InventoryItem($EA, $01, $0000, $0000) ; EA - -%InventoryItem($EB, $01, $0000, $0000) ; EB - -%InventoryItem($EC, $01, $0000, $0000) ; EC - -%InventoryItem($ED, $01, $0000, $0000) ; ED - -%InventoryItem($EE, $01, $0000, $0000) ; EE - -%InventoryItem($EF, $01, $0000, $0000) ; EF - -%InventoryItem($F0, $01, $0000, $0000) ; F0 - -%InventoryItem($F1, $01, $0000, $0000) ; F1 - -%InventoryItem($F2, $01, $0000, $0000) ; F2 - -%InventoryItem($F3, $01, $0000, $0000) ; F3 - -%InventoryItem($F4, $01, $0000, $0000) ; F4 - -%InventoryItem($F5, $01, $0000, $0000) ; F5 - -%InventoryItem($F6, $01, $0000, $0000) ; F6 - -%InventoryItem($F7, $01, $0000, $0000) ; F7 - -%InventoryItem($F8, $01, $0000, $0000) ; F8 - -%InventoryItem($F9, $01, $0000, $0000) ; F9 - -%InventoryItem($FA, $01, $0000, $0000) ; FA - -%InventoryItem($FB, $01, $0000, $0000) ; FB - -%InventoryItem($FC, $01, $0000, $0000) ; FC - -%InventoryItem($FD, $01, $0000, $0000) ; FD - -%InventoryItem($FE, $01, $0000, $0000) ; FE - Server request (async) -%InventoryItem($FF, $01, $0000, $0000) ; FF - +%InventoryItem($00, $0081, SwordTime, $0000) ; 00 - Fighter sword & Shield +%InventoryItem($01, $0081, SwordTime, $0000) ; 01 - Master sword +%InventoryItem($02, $0001, SwordTime, $0000) ; 02 - Tempered sword +%InventoryItem($03, $0081, SwordTime, $0000) ; 03 - Butter sword +%InventoryItem($04, $0081, $0000, $0000) ; 04 - Fighter shield +%InventoryItem($05, $0081, $0000, $0000) ; 05 - Fire shield +%InventoryItem($06, $0081, $0000, $0000) ; 06 - Mirror shield +%InventoryItem($07, $0085, $0000, $0000) ; 07 - Fire rod +%InventoryItem($08, $0085, $0000, $0000) ; 08 - Ice rod +%InventoryItem($09, $0085, $0000, $0000) ; 09 - Hammer +%InventoryItem($0A, $0085, $0000, $0000) ; 0A - Hookshot +%InventoryItem($0B, $0085, $0000, $0000) ; 0B - Bow +%InventoryItem($0C, $0085, $0000, $0000) ; 0C - Blue Boomerang +%InventoryItem($0D, $0085, $0000, $0000) ; 0D - Powder +%InventoryItem($0E, $0081, $0000, $0000) ; 0E - Bottle refill (bee) +%InventoryItem($0F, $0085, $0000, $0000) ; 0F - Bombos +%InventoryItem($10, $0085, $0000, $0000) ; 10 - Ether +%InventoryItem($11, $0085, $0000, $0000) ; 11 - Quake +%InventoryItem($12, $0085, $0000, $0000) ; 12 - Lamp +%InventoryItem($13, $0085, $0000, $0000) ; 13 - Shovel +%InventoryItem($14, $0085, FluteTime, $0000) ; 14 - Flute (inactive) +%InventoryItem($15, $0085, $0000, $0000) ; 15 - Somaria +%InventoryItem($16, $0085, $0000, $0000) ; 16 - Bottle +%InventoryItem($17, $0001, $0000, HeartPieceCounter) ; 17 - Heart piece +%InventoryItem($18, $0085, $0000, $0000) ; 18 - Byrna +%InventoryItem($19, $0085, $0000, $0000) ; 19 - Cape +%InventoryItem($1A, $0085, MirrorTime, $0000) ; 1A - Mirror +%InventoryItem($1B, $0089, $0000, $0000) ; 1B - Glove +%InventoryItem($1C, $0089, $0000, $0000) ; 1C - Mitts +%InventoryItem($1D, $0085, $0000, $0000) ; 1D - Book +%InventoryItem($1E, $0089, $0000, $0000) ; 1E - Flippers +%InventoryItem($1F, $0081, $0000, $0000) ; 1F - Pearl +%InventoryItem($20, $0080, $0000, $0000) ; 20 - Crystal +%InventoryItem($21, $0085, $0000, $0000) ; 21 - Net +%InventoryItem($22, $0081, $0000, $0000) ; 22 - Blue mail +%InventoryItem($23, $0081, $0000, $0000) ; 23 - Red mail +%InventoryItem($24, $0041, $0000, SmallKeyCounter) ; 24 - Small key +%InventoryItem($25, $0001, $0000, $0000) ; 25 - Compass +%InventoryItem($26, $0000, $0000, $0000) ; 26 - Heart container from 4/4 +%InventoryItem($27, $0015, $0000, $0000) ; 27 - Bomb +%InventoryItem($28, $0015, $0000, $0000) ; 28 - 3 bombs +%InventoryItem($29, $0085, $0000, $0000) ; 29 - Mushroom +%InventoryItem($2A, $0005, $0000, $0000) ; 2A - Red boomerang +%InventoryItem($2B, $0085, $0000, $0000) ; 2B - Full bottle (red) +%InventoryItem($2C, $0085, $0000, $0000) ; 2C - Full bottle (green) +%InventoryItem($2D, $0085, $0000, $0000) ; 2D - Full bottle (blue) +%InventoryItem($2E, $0080, $0000, $0000) ; 2E - Potion refill (red) +%InventoryItem($2F, $0080, $0000, $0000) ; 2F - Potion refill (green) +%InventoryItem($30, $0080, $0000, $0000) ; 30 - Potion refill (blue) +%InventoryItem($31, $0011, $0000, $0000) ; 31 - 10 bombs +%InventoryItem($32, $0001, $0000, $0000) ; 32 - Big key +%InventoryItem($33, $0001, $0000, $0000) ; 33 - Map +%InventoryItem($34, $0001, $0000, $0000) ; 34 - 1 rupee +%InventoryItem($35, $0001, $0000, $0000) ; 35 - 5 rupees +%InventoryItem($36, $0001, $0000, $0000) ; 36 - 20 rupees +%InventoryItem($37, $0000, $0000, $0000) ; 37 - Green pendant +%InventoryItem($38, $0000, $0000, $0000) ; 38 - Red pendant +%InventoryItem($39, $0000, $0000, $0000) ; 39 - Blue pendant +%InventoryItem($3A, $00A5, $0000, $0000) ; 3A - Bow And Arrows +%InventoryItem($3B, $00A5, $0000, $0000) ; 3B - Silver Bow +%InventoryItem($3C, $0085, $0000, $0000) ; 3C - Full bottle (bee) +%InventoryItem($3D, $0085, $0000, $0000) ; 3D - Full bottle (fairy) +%InventoryItem($3E, $0001, $0000, HeartContainerCounter) ; 3E - Boss heart +%InventoryItem($3F, $0081, $0000, HeartContainerCounter) ; 3F - Sanc heart +%InventoryItem($40, $0001, $0000, $0000) ; 40 - 100 rupees +%InventoryItem($41, $0001, $0000, $0000) ; 41 - 50 rupees +%InventoryItem($42, $0001, $0000, $0000) ; 42 - Heart +%InventoryItem($43, $0001, $0000, $0000) ; 43 - Arrow +%InventoryItem($44, $0001, $0000, $0000) ; 44 - 10 arrows +%InventoryItem($45, $0001, $0000, $0000) ; 45 - Small magic +%InventoryItem($46, $0001, $0000, $0000) ; 46 - 300 rupees +%InventoryItem($47, $0001, $0000, $0000) ; 47 - 20 rupees green +%InventoryItem($48, $0085, $0000, $0000) ; 48 - Full bottle (good bee) +%InventoryItem($49, $0081, $0000, $0000) ; 49 - Tossed fighter sword +%InventoryItem($4A, $0085, FluteTime, $0000) ; 4A - Active Flute +%InventoryItem($4B, $0089, BootsTime, $0000) ; 4B - Boots +%InventoryItem($4C, $0015, $0000, CapacityUpgrades) ; 4C - Bomb capacity (50) +%InventoryItem($4D, $0001, $0000, CapacityUpgrades) ; 4D - Arrow capacity (70) +%InventoryItem($4E, $0081, $0000, CapacityUpgrades) ; 4E - 1/2 magic +%InventoryItem($4F, $0081, $0000, CapacityUpgrades) ; 4F - 1/4 magic +%InventoryItem($50, $0081, SwordTime, $0000) ; 50 - Master Sword (safe) +%InventoryItem($51, $0015, $0000, CapacityUpgrades) ; 51 - Bomb capacity (+5) +%InventoryItem($52, $0015, $0000, CapacityUpgrades) ; 52 - Bomb capacity (+10) +%InventoryItem($53, $0001, $0000, CapacityUpgrades) ; 53 - Arrow capacity (+5) +%InventoryItem($54, $0001, $0000, CapacityUpgrades) ; 54 - Arrow capacity (+10) +%InventoryItem($55, $0001, $0000, $0000) ; 55 - Programmable item 1 +%InventoryItem($56, $0001, $0000, $0000) ; 56 - Programmable item 2 +%InventoryItem($57, $0001, $0000, $0000) ; 57 - Programmable item 3 +%InventoryItem($58, $0081, $0000, $0000) ; 58 - Upgrade-only Silver Arrows +%InventoryItem($59, $0001, $0000, $0000) ; 59 - Rupoor +%InventoryItem($5A, $0001, $0000, $0000) ; 5A - Nothing +%InventoryItem($5B, $0081, $0000, $0000) ; 5B - Red clock +%InventoryItem($5C, $0081, $0000, $0000) ; 5C - Blue clock +%InventoryItem($5D, $0081, $0000, $0000) ; 5D - Green clock +%InventoryItem($5E, $0081, $0000, $0000) ; 5E - Progressive sword +%InventoryItem($5F, $0081, $0000, $0000) ; 5F - Progressive shield +%InventoryItem($60, $0081, $0000, $0000) ; 60 - Progressive armor +%InventoryItem($61, $0089, $0000, $0000) ; 61 - Progressive glove +%InventoryItem($62, $0001, $0000, $0000) ; 62 - RNG pool item (single) +%InventoryItem($63, $0001, $0000, $0000) ; 63 - RNG pool item (multi) +%InventoryItem($64, $00A5, $0000, $0000) ; 64 - Progressive bow +%InventoryItem($65, $00A5, $0000, $0000) ; 65 - Progressive bow +%InventoryItem($66, $0001, $0000, $0000) ; 66 - +%InventoryItem($67, $0001, $0000, $0000) ; 67 - +%InventoryItem($68, $0001, $0000, $0000) ; 68 - +%InventoryItem($69, $0001, $0000, $0000) ; 69 - +%InventoryItem($6A, $0081, $0000, $0000) ; 6A - Triforce +%InventoryItem($6B, $0081, $0000, $0000) ; 6B - Power star +%InventoryItem($6C, $0081, $0000, $0000) ; 6C - Triforce Piece +%InventoryItem($6D, $0001, $0000, $0000) ; 6D - Server request item +%InventoryItem($6E, $0001, $0000, $0000) ; 6E - Server request item (dungeon drop) +%InventoryItem($6F, $0001, $0000, $0000) ; 6F - +%InventoryItem($70, $0001, $0000, $0000) ; 70 - Map of Light World +%InventoryItem($71, $0001, $0000, $0000) ; 71 - Map of Dark World +%InventoryItem($72, $0001, $0000, $0000) ; 72 - Map of Ganon's Tower +%InventoryItem($73, $0001, $0000, $0000) ; 73 - Map of Turtle Rock +%InventoryItem($74, $0001, $0000, $0000) ; 74 - Map of Thieves' Town +%InventoryItem($75, $0001, $0000, $0000) ; 75 - Map of Tower of Hera +%InventoryItem($76, $0001, $0000, $0000) ; 76 - Map of Ice Palace +%InventoryItem($77, $0001, $0000, $0000) ; 77 - Map of Skull Woods +%InventoryItem($78, $0001, $0000, $0000) ; 78 - Map of Misery Mire +%InventoryItem($79, $0001, $0000, $0000) ; 79 - Map of Dark Palace +%InventoryItem($7A, $0001, $0000, $0000) ; 7A - Map of Swamp Palace +%InventoryItem($7B, $0001, $0000, $0000) ; 7B - Map of Agahnim's Tower +%InventoryItem($7C, $0001, $0000, $0000) ; 7C - Map of Desert Palace +%InventoryItem($7D, $0001, $0000, $0000) ; 7D - Map of Eastern Palace +%InventoryItem($7E, $0001, $0000, $0000) ; 7E - Map of Hyrule Castle +%InventoryItem($7F, $0001, $0000, $0000) ; 7F - Map of Sewers +%InventoryItem($80, $0001, $0000, $0000) ; 80 - Compass of Light World +%InventoryItem($81, $0001, $0000, $0000) ; 81 - Compass of Dark World +%InventoryItem($82, $0001, $0000, $0000) ; 82 - Compass of Ganon's Tower +%InventoryItem($83, $0001, $0000, $0000) ; 83 - Compass of Turtle Rock +%InventoryItem($84, $0001, $0000, $0000) ; 84 - Compass of Thieves' Town +%InventoryItem($85, $0001, $0000, $0000) ; 85 - Compass of Tower of Hera +%InventoryItem($86, $0001, $0000, $0000) ; 86 - Compass of Ice Palace +%InventoryItem($87, $0001, $0000, $0000) ; 87 - Compass of Skull Woods +%InventoryItem($88, $0001, $0000, $0000) ; 88 - Compass of Misery Mire +%InventoryItem($89, $0001, $0000, $0000) ; 89 - Compass of Dark Palace +%InventoryItem($8A, $0001, $0000, $0000) ; 8A - Compass of Swamp Palace +%InventoryItem($8B, $0001, $0000, $0000) ; 8B - Compass of Agahnim's Tower +%InventoryItem($8C, $0001, $0000, $0000) ; 8C - Compass of Desert Palace +%InventoryItem($8D, $0001, $0000, $0000) ; 8D - Compass of Eastern Palace +%InventoryItem($8E, $0001, $0000, $0000) ; 8E - Compass of Hyrule Castle +%InventoryItem($8F, $0001, $0000, $0000) ; 8F - Compass of Sewers +%InventoryItem($90, $0081, $0000, $0000) ; 90 - Skull key +%InventoryItem($91, $0001, $0000, $0000) ; 91 - Reserved +%InventoryItem($92, $0001, $0000, $0000) ; 92 - Big key of Ganon's Tower +%InventoryItem($93, $0001, $0000, $0000) ; 93 - Big key of Turtle Rock +%InventoryItem($94, $0001, $0000, $0000) ; 94 - Big key of Thieves' Town +%InventoryItem($95, $0001, $0000, $0000) ; 95 - Big key of Tower of Hera +%InventoryItem($96, $0001, $0000, $0000) ; 96 - Big key of Ice Palace +%InventoryItem($97, $0001, $0000, $0000) ; 97 - Big key of Skull Woods +%InventoryItem($98, $0001, $0000, $0000) ; 98 - Big key of Misery Mire +%InventoryItem($99, $0001, $0000, $0000) ; 99 - Big key of Dark Palace +%InventoryItem($9A, $0001, $0000, $0000) ; 9A - Big key of Swamp Palace +%InventoryItem($9B, $0001, $0000, $0000) ; 9B - Big key of Agahnim's Tower +%InventoryItem($9C, $0001, $0000, $0000) ; 9C - Big key of Desert Palace +%InventoryItem($9D, $0001, $0000, $0000) ; 9D - Big key of Eastern Palace +%InventoryItem($9E, $0001, $0000, $0000) ; 9E - Big key of Hyrule Castle +%InventoryItem($9F, $0001, $0000, $0000) ; 9F - Big key of Sewers +%InventoryItem($A0, $0041, $0000, SmallKeyCounter) ; A0 - Small key of Sewers +%InventoryItem($A1, $0041, $0000, SmallKeyCounter) ; A1 - Small key of Hyrule Castle +%InventoryItem($A2, $0041, $0000, SmallKeyCounter) ; A2 - Small key of Eastern Palace +%InventoryItem($A3, $0041, $0000, SmallKeyCounter) ; A3 - Small key of Desert Palace +%InventoryItem($A4, $0041, $0000, SmallKeyCounter) ; A4 - Small key of Agahnim's Tower +%InventoryItem($A5, $0041, $0000, SmallKeyCounter) ; A5 - Small key of Swamp Palace +%InventoryItem($A6, $0041, $0000, SmallKeyCounter) ; A6 - Small key of Dark Palace +%InventoryItem($A7, $0041, $0000, SmallKeyCounter) ; A7 - Small key of Misery Mire +%InventoryItem($A8, $0041, $0000, SmallKeyCounter) ; A8 - Small key of Skull Woods +%InventoryItem($A9, $0041, $0000, SmallKeyCounter) ; A9 - Small key of Ice Palace +%InventoryItem($AA, $0041, $0000, SmallKeyCounter) ; AA - Small key of Tower of Hera +%InventoryItem($AB, $0041, $0000, SmallKeyCounter) ; AB - Small key of Thieves' Town +%InventoryItem($AC, $0041, $0000, SmallKeyCounter) ; AC - Small key of Turtle Rock +%InventoryItem($AD, $0041, $0000, SmallKeyCounter) ; AD - Small key of Ganon's Tower +%InventoryItem($AE, $0001, $0000, $0000) ; AE - Reserved +%InventoryItem($AF, $0001, $0000, SmallKeyCounter) ; AF - Generic small key +%InventoryItem($B0, $0080, $0000, $0000) ; B0 - Crystal 6 +%InventoryItem($B1, $0080, $0000, $0000) ; B1 - Crystal 1 +%InventoryItem($B2, $0080, $0000, $0000) ; B2 - Crystal 5 +%InventoryItem($B3, $0080, $0000, $0000) ; B3 - Crystal 7 +%InventoryItem($B4, $0080, $0000, $0000) ; B4 - Crystal 2 +%InventoryItem($B5, $0080, $0000, $0000) ; B5 - Crystal 4 +%InventoryItem($B6, $0080, $0000, $0000) ; B6 - Crystal 3 +%InventoryItem($B7, $0000, $0000, $0000) ; B7 - Reserved +%InventoryItem($B8, $0001, $0000, $0000) ; B8 - +%InventoryItem($B9, $0001, $0000, $0000) ; B9 - +%InventoryItem($BA, $0001, $0000, $0000) ; BA - +%InventoryItem($BB, $0001, $0000, $0000) ; BB - +%InventoryItem($BC, $0001, $0000, $0000) ; BC - +%InventoryItem($BD, $0001, $0000, $0000) ; BD - +%InventoryItem($BE, $0001, $0000, $0000) ; BE - +%InventoryItem($BF, $0001, $0000, $0000) ; BF - +%InventoryItem($C0, $0001, $0000, $0000) ; C0 - +%InventoryItem($C1, $0001, $0000, $0000) ; C1 - +%InventoryItem($C2, $0001, $0000, $0000) ; C2 - +%InventoryItem($C3, $0001, $0000, $0000) ; C3 - +%InventoryItem($C4, $0001, $0000, $0000) ; C4 - +%InventoryItem($C5, $0001, $0000, $0000) ; C5 - +%InventoryItem($C6, $0001, $0000, $0000) ; C6 - +%InventoryItem($C7, $0001, $0000, $0000) ; C7 - +%InventoryItem($C8, $0001, $0000, $0000) ; C8 - +%InventoryItem($C9, $0001, $0000, $0000) ; C9 - +%InventoryItem($CA, $0001, $0000, $0000) ; CA - +%InventoryItem($CB, $0001, $0000, $0000) ; CB - +%InventoryItem($CC, $0001, $0000, $0000) ; CC - +%InventoryItem($CD, $0001, $0000, $0000) ; CD - +%InventoryItem($CE, $0001, $0000, $0000) ; CE - +%InventoryItem($CF, $0001, $0000, $0000) ; CF - +%InventoryItem($D0, $0001, $0000, $0000) ; D0 - +%InventoryItem($D1, $0001, $0000, $0000) ; D1 - +%InventoryItem($D2, $0001, $0000, $0000) ; D2 - +%InventoryItem($D3, $0001, $0000, $0000) ; D3 - +%InventoryItem($D4, $0001, $0000, $0000) ; D4 - +%InventoryItem($D5, $0001, $0000, $0000) ; D5 - +%InventoryItem($D6, $0001, $0000, $0000) ; D6 - +%InventoryItem($D7, $0001, $0000, $0000) ; D7 - +%InventoryItem($D8, $0001, $0000, $0000) ; D8 - +%InventoryItem($D9, $0001, $0000, $0000) ; D9 - +%InventoryItem($DA, $0001, $0000, $0000) ; DA - +%InventoryItem($DB, $0001, $0000, $0000) ; DB - +%InventoryItem($DC, $0001, $0000, $0000) ; DC - +%InventoryItem($DD, $0001, $0000, $0000) ; DD - +%InventoryItem($DE, $0001, $0000, $0000) ; DE - +%InventoryItem($DF, $0001, $0000, $0000) ; DF - +%InventoryItem($E0, $0001, $0000, $0000) ; E0 - +%InventoryItem($E1, $0001, $0000, $0000) ; E1 - +%InventoryItem($E2, $0001, $0000, $0000) ; E2 - +%InventoryItem($E3, $0001, $0000, $0000) ; E3 - +%InventoryItem($E4, $0001, $0000, $0000) ; E4 - +%InventoryItem($E5, $0001, $0000, $0000) ; E5 - +%InventoryItem($E6, $0001, $0000, $0000) ; E6 - +%InventoryItem($E7, $0001, $0000, $0000) ; E7 - +%InventoryItem($E8, $0001, $0000, $0000) ; E8 - +%InventoryItem($E9, $0001, $0000, $0000) ; E9 - +%InventoryItem($EA, $0001, $0000, $0000) ; EA - +%InventoryItem($EB, $0001, $0000, $0000) ; EB - +%InventoryItem($EC, $0001, $0000, $0000) ; EC - +%InventoryItem($ED, $0001, $0000, $0000) ; ED - +%InventoryItem($EE, $0001, $0000, $0000) ; EE - +%InventoryItem($EF, $0001, $0000, $0000) ; EF - +%InventoryItem($F0, $0001, $0000, $0000) ; F0 - +%InventoryItem($F1, $0001, $0000, $0000) ; F1 - +%InventoryItem($F2, $0001, $0000, $0000) ; F2 - +%InventoryItem($F3, $0001, $0000, $0000) ; F3 - +%InventoryItem($F4, $0001, $0000, $0000) ; F4 - +%InventoryItem($F5, $0001, $0000, $0000) ; F5 - +%InventoryItem($F6, $0001, $0000, $0000) ; F6 - +%InventoryItem($F7, $0001, $0000, $0000) ; F7 - +%InventoryItem($F8, $0001, $0000, $0000) ; F8 - +%InventoryItem($F9, $0001, $0000, $0000) ; F9 - +%InventoryItem($FA, $0001, $0000, $0000) ; FA - +%InventoryItem($FB, $0001, $0000, $0000) ; FB - +%InventoryItem($FC, $0001, $0000, $0000) ; FC - +%InventoryItem($FD, $0001, $0000, $0000) ; FD - +%InventoryItem($FE, $0001, $0000, $0000) ; FE - Server request (async) +%InventoryItem($FF, $0001, $0000, $0000) ; FF - ItemReceiptGraphicsOffsets: dw $0860 ; 00 - Fighter Sword and Shield @@ -1022,7 +1023,7 @@ ItemReceiptGraphicsOffsets: 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+$0C40 ; 4A - Active Flute dw BigDecompressionBuffer+$0040 ; 4B - Boots ; Rando items @@ -1292,7 +1293,7 @@ StandingItemGraphicsOffsets: dw BigDecompressionBuffer+$0000 ; 47 - 20 rupees green dw BigDecompressionBuffer+$09A0 ; 48 - Full bottle (good bee) dw $00A0 ; 49 - Tossed fighter sword - dw BigDecompressionBuffer+$09A0 ; 4A - Bottle refill (good bee) + dw BigDecompressionBuffer+$0C40 ; 4A - Active Flute dw BigDecompressionBuffer+$0040 ; 4B - Boots ; Rando items diff --git a/itemtext.asm b/itemtext.asm index ec81834..d4061f7 100644 --- a/itemtext.asm +++ b/itemtext.asm @@ -2,146 +2,146 @@ org $B28000 ; You have found ; the map of Notice_MapOf: - db $74, $00, $C2, $00, $B8, $00, $BE, $00, $FF, $00, $B1, $00, $AA, $00, $BF, $00, $AE, $00, $FF, $00, $AF, $00, $B8, $00, $BE, $00, $B7, $00, $AD - db $75, $00, $BD, $00, $B1, $00, $AE, $00, $FF, $00, $B6, $00, $AA, $00, $B9, $00, $FF, $00, $B8, $00, $AF + db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 + db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $DC, $00, $D0, $00, $DF, $00, $FF, $00, $DE, $00, $D5 dw #$7F7F ; You have found ; the compass of Notice_CompassOf: - db $74, $00, $C2, $00, $B8, $00, $BE, $00, $FF, $00, $B1, $00, $AA, $00, $BF, $00, $AE, $00, $FF, $00, $AF, $00, $B8, $00, $BE, $00, $B7, $00, $AD - db $75, $00, $BD, $00, $B1, $00, $AE, $00, $FF, $00, $AC, $00, $B8, $00, $B6, $00, $B9, $00, $AA, $00, $BC, $00, $BC, $00, $FF, $00, $B8, $00, $AF + db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 + db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D2, $00, $DE, $00, $DC, $00, $DF, $00, $D0, $00, $E2, $00, $E2, $00, $FF, $00, $DE, $00, $D5 dw #$7F7F ; Oh look! it's ; the big key of Notice_BigKeyOf: - db $74, $00, $B8, $00, $B1, $00, $FF, $00, $B5, $00, $B8, $00, $B8, $00, $B4, $00, $C7, $00, $FF, $00, $B2, $00, $BD, $00, $D8, $00, $BC - db $75, $00, $BD, $00, $B1, $00, $AE, $00, $FF, $00, $AB, $00, $B2, $00, $B0, $00, $FF, $00, $B4, $00, $AE, $00, $C2, $00, $FF, $00, $B8, $00, $AF + db $74, $00, $B8, $00, $D7, $00, $FF, $00, $DB, $00, $DE, $00, $DE, $00, $DA, $00, $C7, $00, $FF, $00, $D8, $00, $E3, $00, $9D, $00, $E2 + db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D1, $00, $D8, $00, $D6, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $DE, $00, $D5 dw #$7F7F ; this is a ; small key to Notice_SmallKeyOf: - db $74, $00, $BD, $00, $B1, $00, $B2, $00, $BC, $00, $FF, $00, $B2, $00, $BC, $00, $FF, $00, $AA - db $75, $00, $BC, $00, $B6, $00, $AA, $00, $B5, $00, $B5, $00, $FF, $00, $B4, $00, $AE, $00, $C2, $00, $FF, $00, $BD, $00, $B8 + db $74, $00, $BD, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D8, $00, $E2, $00, $FF, $00, $D0 + db $75, $00, $E2, $00, $DC, $00, $D0, $00, $DB, $00, $DB, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $E3, $00, $DE dw #$7F7F -; +; You picked up Notice_Crystal: - db $74, $00, $C2, $00, $B8, $00, $BE, $00, $FF, $00, $B9, $00, $B2, $00, $AC, $00, $B4, $00, $AE, $00, $AD, $00, $FF, $00, $BE, $00, $B9 + db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $DF, $00, $D8, $00, $D2, $00, $DA, $00, $D4, $00, $D3, $00, $FF, $00, $E4, $00, $DF dw $7F7F ; light world Notice_LightWorld: - db $76, $00, $B5, $00, $B2, $00, $B0, $00, $B1, $00, $BD, $00, $FF, $00, $C0, $00, $B8, $00, $BB, $00, $B5, $00, $AD + db $76, $00, $B5, $00, $D8, $00, $D6, $00, $D7, $00, $E3, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 dw #$7F7F ; dark world Notice_DarkWorld: - db $76, $00, $AD, $00, $AA, $00, $BB, $00, $B4, $00, $FF, $00, $C0, $00, $B8, $00, $BB, $00, $B5, $00, $AD + db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 dw #$7F7F ; Ganons Tower Notice_GTower: - db $76, $00, $B0, $00, $AA, $00, $B7, $00, $B8, $00, $B7, $00, $BC, $00, $FF, $00, $BD, $00, $B8, $00, $C0, $00, $AE, $00, $BB + db $76, $00, $B0, $00, $D0, $00, $DD, $00, $DE, $00, $DD, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 dw #$7F7F ; Turtle Rock Notice_TRock: - db $76, $00, $BD, $00, $BE, $00, $BB, $00, $BD, $00, $B5, $00, $AE, $00, $FF, $00, $BB, $00, $B8, $00, $AC, $00, $B4 + db $76, $00, $BD, $00, $E4, $00, $E1, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BB, $00, $DE, $00, $D2, $00, $DA dw #$7F7F ; Thieves Town Notice_Thieves: - db $76, $00, $BD, $00, $B1, $00, $B2, $00, $AE, $00, $BF, $00, $AE, $00, $BC, $00, $FF, $00, $BD, $00, $B8, $00, $C0, $00, $B7 + db $76, $00, $BD, $00, $D7, $00, $D8, $00, $D4, $00, $E5, $00, $D4, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $DD dw #$7F7F ; Tower of Hera Notice_Hera: - db $76, $00, $BD, $00, $B8, $00, $C0, $00, $AE, $00, $BB, $00, $FF, $00, $B8, $00, $AF, $00, $FF, $00, $B1, $00, $AE, $00, $BB, $00, $AA + db $76, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1, $00, $FF, $00, $DE, $00, $D5, $00, $FF, $00, $B1, $00, $D4, $00, $E1, $00, $D0 dw #$7F7F ; Ice Palace Notice_Ice: - db $76, $00, $B2, $00, $AC, $00, $AE, $00, $FF, $00, $B9, $00, $AA, $00, $B5, $00, $AA, $00, $AC, $00, $AE + db $76, $00, $B2, $00, $D2, $00, $D4, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 dw #$7F7F ; Skull Woods Notice_Skull: - db $76, $00, $BC, $00, $B4, $00, $BE, $00, $B5, $00, $B5, $00, $FF, $00, $C0, $00, $B8, $00, $B8, $00, $AD, $00, $BC + db $76, $00, $BC, $00, $DA, $00, $E4, $00, $DB, $00, $DB, $00, $FF, $00, $C0, $00, $DE, $00, $DE, $00, $D3, $00, $E2 dw #$7F7F ; Misery Mire Notice_Mire: - db $76, $00, $B6, $00, $B2, $00, $BC, $00, $AE, $00, $BB, $00, $C2, $00, $FF, $00, $B6, $00, $B2, $00, $BB, $00, $AE + db $76, $00, $B6, $00, $D8, $00, $E2, $00, $D4, $00, $E1, $00, $E8, $00, $FF, $00, $B6, $00, $D8, $00, $E1, $00, $D4 dw #$7F7F ; Dark Palace Notice_PoD: - db $76, $00, $AD, $00, $AA, $00, $BB, $00, $B4, $00, $FF, $00, $B9, $00, $AA, $00, $B5, $00, $AA, $00, $AC, $00, $AE + db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 dw #$7F7F ; Swamp Palace Notice_Swamp: - db $76, $00, $BC, $00, $C0, $00, $AA, $00, $B6, $00, $B9, $00, $FF, $00, $B9, $00, $AA, $00, $B5, $00, $AA, $00, $AC, $00, $AE + db $76, $00, $BC, $00, $E6, $00, $D0, $00, $DC, $00, $DF, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 dw #$7F7F ; Castle Tower Notice_AgaTower: - db $76, $00, $AC, $00, $AA, $00, $BC, $00, $BD, $00, $B5, $00, $AE, $00, $FF, $00, $BD, $00, $B8, $00, $C0, $00, $AE, $00, $BB + db $76, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 dw #$7F7F ; Desert Palace Notice_Desert: - db $76, $00, $AD, $00, $AE, $00, $BC, $00, $AE, $00, $BB, $00, $BD, $00, $FF, $00, $B9, $00, $AA, $00, $B5, $00, $AA, $00, $AC, $00, $AE + db $76, $00, $AD, $00, $D4, $00, $E2, $00, $D4, $00, $E1, $00, $E3, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 dw #$7F7F ; Eastern Palace Notice_Eastern: - db $76, $00, $AE, $00, $AA, $00, $BC, $00, $BD, $00, $AE, $00, $BB, $00, $B7, $00, $FF, $00, $B9, $00, $AA, $00, $B5, $00, $AA, $00, $AC, $00, $AE + db $76, $00, $AE, $00, $D0, $00, $E2, $00, $E3, $00, $D4, $00, $E1, $00, $DD, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 dw #$7F7F ; Hyrule Castle Notice_Castle: - db $76, $00, $B1, $00, $C2, $00, $BB, $00, $BE, $00, $B5, $00, $AE, $00, $FF, $00, $AC, $00, $AA, $00, $BC, $00, $BD, $00, $B5, $00, $AE + db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 dw #$7F7F ; Hyrule Castle Notice_Sewers: - db $76, $00, $B1, $00, $C2, $00, $BB, $00, $BE, $00, $B5, $00, $AE, $00, $FF, $00, $AC, $00, $AA, $00, $BC, $00, $BD, $00, $B5, $00, $AE + db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 dw #$7F7F ; This Dungeon Notice_Self: - db $76, $00, $BD, $00, $B1, $00, $B2, $00, $BC, $00, $FF, $00, $AD, $00, $BE, $00, $B7, $00, $B0, $00, $AE, $00, $B8, $00, $B7 + db $76, $00, $E3, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D3, $00, $E4, $00, $DD, $00, $D6, $00, $D4, $00, $DE, $00, $Dd dw #$7F7F ; Crystal numbers Notice_One: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $B8, $00, $B7, $00, $AE + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $DE, $00, $DD, $00, $D4 dw #$7F7F Notice_Two: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BD, $00, $C0, $00, $B8 + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $E6, $00, $DE dw #$7F7F Notice_Three: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BD, $00, $B1, $00, $BB, $00, $AE, $00, $AE + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $D7, $00, $E1, $00, $D4, $00, $D4 dw #$7F7F Notice_Four: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $AF, $00, $B8, $00, $BE, $00, $BB + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $E1 dw #$7F7F Notice_Five: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $AF, $00, $B2, $00, $BF, $00, $AE + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $D8, $00, $E5, $00, $D4 dw #$7F7F Notice_Six: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BC, $00, $B2, $00, $C1 + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D8, $00, $E7 dw #$7F7F Notice_Seven: - db $75, $00, $AC, $00, $BB, $00, $C2, $00, $BC, $00, $BD, $00, $AA, $00, $B5, $00, $FF, $00, $BC, $00, $AE, $00, $BF, $00, $AE, $00, $B7 + db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D4, $00, $E5, $00, $D4, $00, $DD dw #$7F7F diff --git a/itemtext_lower.asm b/itemtext_lower.asm deleted file mode 100644 index d4061f7..0000000 --- a/itemtext_lower.asm +++ /dev/null @@ -1,147 +0,0 @@ -org $B28000 -; You have found -; the map of -Notice_MapOf: - db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 - db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $DC, $00, $D0, $00, $DF, $00, $FF, $00, $DE, $00, $D5 - dw #$7F7F - -; You have found -; the compass of -Notice_CompassOf: - db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 - db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D2, $00, $DE, $00, $DC, $00, $DF, $00, $D0, $00, $E2, $00, $E2, $00, $FF, $00, $DE, $00, $D5 - dw #$7F7F - -; Oh look! it's -; the big key of -Notice_BigKeyOf: - db $74, $00, $B8, $00, $D7, $00, $FF, $00, $DB, $00, $DE, $00, $DE, $00, $DA, $00, $C7, $00, $FF, $00, $D8, $00, $E3, $00, $9D, $00, $E2 - db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D1, $00, $D8, $00, $D6, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $DE, $00, $D5 - dw #$7F7F - -; this is a -; small key to -Notice_SmallKeyOf: - db $74, $00, $BD, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D8, $00, $E2, $00, $FF, $00, $D0 - db $75, $00, $E2, $00, $DC, $00, $D0, $00, $DB, $00, $DB, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $E3, $00, $DE - dw #$7F7F - -; You picked up -Notice_Crystal: - db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $DF, $00, $D8, $00, $D2, $00, $DA, $00, $D4, $00, $D3, $00, $FF, $00, $E4, $00, $DF - dw $7F7F - -; light world -Notice_LightWorld: - db $76, $00, $B5, $00, $D8, $00, $D6, $00, $D7, $00, $E3, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 - dw #$7F7F - -; dark world -Notice_DarkWorld: - db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 - dw #$7F7F - -; Ganons Tower -Notice_GTower: - db $76, $00, $B0, $00, $D0, $00, $DD, $00, $DE, $00, $DD, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 - dw #$7F7F - -; Turtle Rock -Notice_TRock: - db $76, $00, $BD, $00, $E4, $00, $E1, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BB, $00, $DE, $00, $D2, $00, $DA - dw #$7F7F - -; Thieves Town -Notice_Thieves: - db $76, $00, $BD, $00, $D7, $00, $D8, $00, $D4, $00, $E5, $00, $D4, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $DD - dw #$7F7F - -; Tower of Hera -Notice_Hera: - db $76, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1, $00, $FF, $00, $DE, $00, $D5, $00, $FF, $00, $B1, $00, $D4, $00, $E1, $00, $D0 - dw #$7F7F - -; Ice Palace -Notice_Ice: - db $76, $00, $B2, $00, $D2, $00, $D4, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F - -; Skull Woods -Notice_Skull: - db $76, $00, $BC, $00, $DA, $00, $E4, $00, $DB, $00, $DB, $00, $FF, $00, $C0, $00, $DE, $00, $DE, $00, $D3, $00, $E2 - dw #$7F7F - -; Misery Mire -Notice_Mire: - db $76, $00, $B6, $00, $D8, $00, $E2, $00, $D4, $00, $E1, $00, $E8, $00, $FF, $00, $B6, $00, $D8, $00, $E1, $00, $D4 - dw #$7F7F - -; Dark Palace -Notice_PoD: - db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F - -; Swamp Palace -Notice_Swamp: - db $76, $00, $BC, $00, $E6, $00, $D0, $00, $DC, $00, $DF, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F - -; Castle Tower -Notice_AgaTower: - db $76, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 - dw #$7F7F - -; Desert Palace -Notice_Desert: - db $76, $00, $AD, $00, $D4, $00, $E2, $00, $D4, $00, $E1, $00, $E3, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F - -; Eastern Palace -Notice_Eastern: - db $76, $00, $AE, $00, $D0, $00, $E2, $00, $E3, $00, $D4, $00, $E1, $00, $DD, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F - -; Hyrule Castle -Notice_Castle: - db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 - dw #$7F7F - -; Hyrule Castle -Notice_Sewers: - db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 - dw #$7F7F - -; This Dungeon -Notice_Self: - db $76, $00, $E3, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D3, $00, $E4, $00, $DD, $00, $D6, $00, $D4, $00, $DE, $00, $Dd - dw #$7F7F - -; Crystal numbers -Notice_One: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $DE, $00, $DD, $00, $D4 - dw #$7F7F - -Notice_Two: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $E6, $00, $DE - dw #$7F7F - -Notice_Three: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $D7, $00, $E1, $00, $D4, $00, $D4 - dw #$7F7F - -Notice_Four: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $E1 - dw #$7F7F - -Notice_Five: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $D8, $00, $E5, $00, $D4 - dw #$7F7F - -Notice_Six: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D8, $00, $E7 - dw #$7F7F - -Notice_Seven: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D4, $00, $E5, $00, $D4, $00, $DD - dw #$7F7F diff --git a/newitems.asm b/newitems.asm index 6fe11d5..5b12930 100644 --- a/newitems.asm +++ b/newitems.asm @@ -208,7 +208,6 @@ ItemBehavior: JSR .increment_shield RTS ..shop_shield - TYX LDA.l InventoryTable_properties,X : BIT.b #$02 : BNE - RTS @@ -220,7 +219,6 @@ ItemBehavior: JSR .increment_shield RTS ..shop_shield - TYX LDA.l InventoryTable_properties,X : BIT.b #$02 : BNE - RTS diff --git a/save.asm b/save.asm index c68c084..bec2edb 100644 --- a/save.asm +++ b/save.asm @@ -173,8 +173,8 @@ RTL CopyExtendedWRAMSaveFileToSRAM: PHB LDA.w #$0FFF - LDX.w #ExtendedSaveDataSRAM - LDY.w #ExtendedSaveDataWRAM + LDX.w #ExtendedSaveDataWRAM + LDY.w #ExtendedSaveDataSRAM MVN CartridgeSRAM>>16, ExtendedSaveDataWRAM>>16 PLB TDC diff --git a/stats.asm b/stats.asm index 69598c6..d3fbaca 100644 --- a/stats.asm +++ b/stats.asm @@ -117,7 +117,10 @@ DecrementSmallKeys: RTL ;-------------------------------------------------------------------------------- CountChestKeyLong: + PHP + SEP #$30 JSR.w CountChestKey + PLP RTL ;-------------------------------------------------------------------------------- CountChestKey: diff --git a/tables.asm b/tables.asm index a7dfdd4..ccddf77 100644 --- a/tables.asm +++ b/tables.asm @@ -643,14 +643,14 @@ DungeonPrizeReceiptID: db $00 ; Sewers db $00 ; Hyrule Castle db $37 ; Eastern Palace - db $38 ; Desert Palace + db $39 ; Desert Palace db $00 ; Agahnim's Tower db $20 ; Swamp Palace db $20 ; Palace of Darkness db $20 ; Misery Mire db $20 ; Skull Woods db $20 ; Ice Palace - db $39 ; Tower of Hera + db $38 ; Tower of Hera db $20 ; Thieves' Town db $20 ; Turtle Rock ;Ether/Nothing: $00 From 73b2a180ba3cc906c75e62852aaf3dc1d30ee245 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Sat, 2 Sep 2023 22:57:50 -0400 Subject: [PATCH 2/5] Fix AddInventory/stats tracking with 16 bit item properties --- events.asm | 2 +- inventory.asm | 59 ++++++++++++++++++++++++------------------- newitems.asm | 28 ++++++++++++-------- pendantcrystalhud.asm | 31 ++++++++++------------- stats.asm | 4 +-- 5 files changed, 67 insertions(+), 57 deletions(-) diff --git a/events.asm b/events.asm index 0a783f2..5ed8efc 100644 --- a/events.asm +++ b/events.asm @@ -103,11 +103,11 @@ RTL ;-------------------------------------------------------------------------------- OnAga2Defeated: JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first - LDA.b #$FF : STA.w DungeonID LDA.b #$01 : STA.l Aga2Duck LDA.w DungeonID : CMP.b #$1A : BNE + LDA.l DungeonsCompleted : ORA.b #$04 : STA.l DungeonsCompleted + + LDA.b #$FF : STA.w DungeonID JML.l IncrementAgahnim2Sword ;-------------------------------------------------------------------------------- OnFileCreation: diff --git a/inventory.asm b/inventory.asm index b7330ba..cf660f8 100644 --- a/inventory.asm +++ b/inventory.asm @@ -147,16 +147,17 @@ AddInventory: PHA : PHX : PHY : PHP : PHB PHK : PLB LDA.b #$7E : STA.b Scrap0D + LDA.l StatsLocked : BNE .done REP #$30 TYA : AND.w #$00FF : ASL : TAX SEP #$20 + LDA.w InventoryTable_properties,X : BIT.b #$01 : BEQ .done JSR.w ShopCheck : BCS .done JSR.w DungeonIncrement : BCS .done JSR.w IncrementByOne JSR.w StampItem - SEP #$20 JSR.w IncrementYAItems REP #$20 LDA.l TotalItemCounter : INC : TAY @@ -179,6 +180,7 @@ RTL ShopCheck: ; In: X - Receipt ID << 1 ; TODO: If we write all shops, we can use the ShopPurchase flag instead of this + PHX LDA.b IndoorsFlag : BEQ .count LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ .count LDA.w InventoryTable_properties,X : BIT.b #$02 : BNE .count @@ -196,9 +198,11 @@ ShopCheck: SEP #$20 .count CLC + PLX RTS .nocount SEP #$21 + PLX RTS DungeonIncrement: @@ -207,10 +211,11 @@ DungeonIncrement: LDA.w InventoryTable_properties,X : BIT.b #$40 : BEQ + JSL.l CountChestKeyLong + + SEP #$10 LDA.b IndoorsFlag : BEQ .done LDA.w DungeonID : BMI .done CMP.l BallNChainDungeon : BNE + - CPY.w #$0032 : BEQ .ballchain_bigkey + CPY.b #$32 : BEQ .ballchain_bigkey + CMP.b #$04 : BCS + LDA.l SewersLocations : INC : STA.l SewersLocations : STA.l HCLocations @@ -218,19 +223,17 @@ DungeonIncrement: + LSR : TAX LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X - CPX.w #$000D : BNE + + CPX.b #$0D : BNE + LDA.l BigKeyField : BIT.b #$04 : BNE ++ LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations ++ + .done + REP #$11 PLX - CLC RTS .ballchain_bigkey - LDA.l BigKeysBigChests - CLC : ADC.b #$10 - STA.l BigKeysBigChests + REP #$10 PLX SEC RTS @@ -247,37 +250,40 @@ StampItem: INC.b Scrap0B : INC.b Scrap0B LDA.l NMIFrames+2 : STA.b [Scrap0B] .skip + SEP #$20 RTS IncrementYAItems: - LDA.w InventoryTable_properties,X - BIT.b #$10 : BNE .bomb_check - BIT.b #$20 : BNE .bow_check - BIT.b #$04 : BEQ .not_y - .y_item - LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter - BRA .done - .not_y - BIT.b #$08 : BEQ .done - .a_item - LDA.l YAItemCounter : INC : AND.b #$07 : TAX - LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter - TXA : ORA.l YAItemCounter : STA.l YAItemCounter + PHX + LDA.w InventoryTable_properties,X + BIT.b #$10 : BNE .bomb_check + BIT.b #$20 : BNE .bow_check + BIT.b #$04 : BEQ .not_y + .y_item + LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter + BRA .done + .not_y + BIT.b #$08 : BEQ .done + .a_item + LDA.l YAItemCounter : INC : AND.b #$07 : TAX + LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter + TXA : ORA.l YAItemCounter : STA.l YAItemCounter .done + PLX RTS .bow_check LDA.l BowEquipment : BNE + BRA .y_item - + -RTS .bomb_check - LDA.l InventoryTracking+1 : BIT.b #$02 : BNE + - ORA.b #$02 : STA.l InventoryTracking+1 - BRA .y_item - + + LDA.l InventoryTracking+1 : BIT.b #$02 : BNE + + ORA.b #$02 : STA.l InventoryTracking+1 + BRA .y_item + + + PLX RTS IncrementByOne: + PHX REP #$20 LDA.w InventoryTable_stat,X : BEQ .skip STA.b Scrap0B @@ -285,6 +291,7 @@ IncrementByOne: LDA.b #$00 : ADC.b [Scrap0B] : STA.b [Scrap0B] .skip SEP #$20 + PLX RTS IncrementBossSword: diff --git a/newitems.asm b/newitems.asm index 5b12930..84079ff 100644 --- a/newitems.asm +++ b/newitems.asm @@ -604,25 +604,31 @@ ItemBehavior: .increment_bigkey SEP #$20 - LDA.l BigKeysBigChests - CLC : ADC.b #$10 - STA.l BigKeysBigChests + LDA.l StatsLocked : BNE + + LDA.l BigKeysBigChests + CLC : ADC.b #$10 + STA.l BigKeysBigChests + + RTS .increment_map SEP #$20 - LDA.l MapsCompasses - CLC : ADC.b #$10 - STA.l MapsCompasses - JSL.l MaybeFlagMapTotalPickup + LDA.l StatsLocked : BNE + + LDA.l MapsCompasses + CLC : ADC.b #$10 + STA.l MapsCompasses + JSL.l MaybeFlagMapTotalPickup + + RTS .increment_compass SEP #$20 - LDA.l MapsCompasses : INC : AND.b #$0F : TAX - LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses - TXA : ORA.l MapsCompasses : STA.l MapsCompasses - JSL MaybeFlagCompassTotalPickup + LDA.l StatsLocked : BNE + + LDA.l MapsCompasses : INC : AND.b #$0F : TAX + LDA.l MapsCompasses : AND.b #$F0 : STA.l MapsCompasses + TXA : ORA.l MapsCompasses : STA.l MapsCompasses + JSL MaybeFlagCompassTotalPickup + + RTS .pendant diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index 2365290..30ed118 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -127,23 +127,20 @@ ShowDungeonItems: RTL ;-------------------------------------------------------------------------------- UpdateKeys: - PHX : PHP - SEP #$30 ; set 8-bit accumulator & index registers - LDA.w DungeonID : CMP.b #$1F : !BLT .skip - - LSR : TAX ; get dungeon index and store to X - - LDA.l CurrentSmallKeys ; load current key count - STA.l DungeonKeys, X ; save to main counts - - CPX.b #$00 : BNE + - STA.l HyruleCastleKeys ; copy HC to sewers - + : CPX.b #$01 : BNE + - STA.l SewerKeys ; copy sewers to HC - + - .skip - JSL.l PostItemGet - PLP : PLX + PHX : PHP + SEP #$30 + LDA.l GenericKeys : BNE .skip + LDA.w DungeonID : CMP.b #$1F : BCS .skip + LSR : TAX + LDA.l CurrentSmallKeys + CPX.b #$02 : BCC .castle_sewers + STA.l DungeonKeys, X + BRA .skip + .castle_sewers + STA.l HyruleCastleKeys : STA.l SewerKeys + .skip + JSL.l PostItemGet + PLP : PLX RTL ;$37C = Sewer Passage ;$37D = Hyrule Castle diff --git a/stats.asm b/stats.asm index d3fbaca..dd56e4f 100644 --- a/stats.asm +++ b/stats.asm @@ -117,10 +117,10 @@ DecrementSmallKeys: RTL ;-------------------------------------------------------------------------------- CountChestKeyLong: - PHP + PHX : PHP SEP #$30 JSR.w CountChestKey - PLP + PLP : PLX RTL ;-------------------------------------------------------------------------------- CountChestKey: From 9800a861893ff6347f5b3811b2e3a700a3ed35f2 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Sun, 3 Sep 2023 15:39:53 -0400 Subject: [PATCH 3/5] Palette fix for GT Torch/Hera cage items that load new palette --- utilities.asm | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/utilities.asm b/utilities.asm index a4063aa..5356f81 100644 --- a/utilities.asm +++ b/utilities.asm @@ -366,7 +366,7 @@ LoadItemPalette: TXA : ASL : TAX LDA.l SpriteProperties_palette_addr,X : STA.b Scrap0A LDY.w #$000E - JSR.w GTTorchCheck : BCS .aux + JSR.w AuxPaletteCheck : BCS .aux LDA.w TransparencyFlag : BNE .SP05 - LDA.b [Scrap0A], Y @@ -424,18 +424,23 @@ ItemReceiptWidthCheck: LDA.l SpriteProperties_standing_width, X RTL -GTTorchCheck: +AuxPaletteCheck: +; Out: c - write to aux palette buffer if set, main buffer if unset. +; +; We have to put an item's palette in the aux buffer in rooms where standing +; item gfx are loaded in the middle of a fade-in/out such as the spiral staircase +; fade for GT torch room and the Hera cage. PHX SEP #$30 - LDA.w RoomIndex : CMP.b #$8C : BNE .done - LDX.w CurrentSpriteSlot - LDA.w SpriteTypeTable,X : CMP.b #$3B : BNE .done; Bonk Item - SEC - REP #$30 - PLX - RTS - .done - CLC + LDA.w ItemReceiptMethod : BNE .main_buffer ; Never use aux if we're actually receiving an item + LDA.w RoomIndex : CMP.b #$8C : BEQ .aux_buffer ; GT torch/Hope room + LDA.w RoomIndex : CMP.b #$87 : BEQ .aux_buffer ; Hera cage/basement + .main_buffer + REP #$31 + PLX + RTS + .aux_buffer + SEC REP #$30 PLX RTS From 4ec523c8b33e3f5a43e94a683f556d0e456ece9a Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Mon, 4 Sep 2023 13:28:51 -0400 Subject: [PATCH 4/5] Fix HUD heart colors on credits end screen Small fix for counting menu HUD keys for "this dungeon" --- fileselect.asm | 6 +++--- newitems.asm | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/fileselect.asm b/fileselect.asm index 217e427..b67f37b 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -862,13 +862,13 @@ DrawPlayerFile_credits: LDA.l EquipmentSRAM+$2C : AND.w #$00FF : LSR #3 : STA.b Scrap02 %fs_LDY_screenpos(0,20) - LDA.w #$02CF|!FS_COLOR_RED + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_file_select,X + ORA.w #$02CF LDX.w #$000A .nextHeart - STA.w $0000, Y - INY #2 : DEX : BNE + PHA TYA : !ADD.w #$40-$14 : TAY diff --git a/newitems.asm b/newitems.asm index 84079ff..3158415 100644 --- a/newitems.asm +++ b/newitems.asm @@ -552,8 +552,7 @@ ItemBehavior: RTS .same_dungeon SEP #$20 - LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys - LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys : STA.l DungeonKeys,X RTS .same_dungeon_hc From f778674b83733d2fbfec055e107af957b2e8cc64 Mon Sep 17 00:00:00 2001 From: cassidoxa Date: Mon, 4 Sep 2023 22:29:50 -0400 Subject: [PATCH 5/5] Rework bow tracking to assign tracking bits to non-chest sprites Fix small key palettes to be consistent with vanilla colors --- events.asm | 6 ++++- itemdatatables.asm | 32 +++++++++++++------------- newitems.asm | 57 +++++++++++++++++++++++++++++++--------------- ram.asm | 3 ++- 4 files changed, 62 insertions(+), 36 deletions(-) diff --git a/events.asm b/events.asm index 5ed8efc..c23e480 100644 --- a/events.asm +++ b/events.asm @@ -245,7 +245,11 @@ PreItemGet: RTL ;-------------------------------------------------------------------------------- PostItemGet: - + STZ.w ShopPurchaseFlag + LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ + + LDX.w CurrentSpriteSlot + STZ.w SpriteMetaData,X + + RTL ;-------------------------------------------------------------------------------- PostItemAnimation: diff --git a/itemdatatables.asm b/itemdatatables.asm index a7c54a2..a9f7b45 100644 --- a/itemdatatables.asm +++ b/itemdatatables.asm @@ -451,7 +451,7 @@ endmacro %SpriteProps($21, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 21 - Net %SpriteProps($22, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 22 - Blue mail %SpriteProps($23, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 23 - Red mail -%SpriteProps($24, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; 24 - Small key +%SpriteProps($24, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; 24 - Small key %SpriteProps($25, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 25 - Compass %SpriteProps($26, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 26 - Heart container from 4/4 %SpriteProps($27, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 27 - Bomb @@ -575,22 +575,22 @@ endmacro %SpriteProps($9D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 9D - Big key of Eastern Palace %SpriteProps($9E, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 9E - Big key of Hyrule Castle %SpriteProps($9F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 9F - Big key of Sewers -%SpriteProps($A0, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A0 - Small key of Sewers -%SpriteProps($A1, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A1 - Small key of Hyrule Castle -%SpriteProps($A2, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A2 - Small key of Eastern Palace -%SpriteProps($A3, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A3 - Small key of Desert Palace -%SpriteProps($A4, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A4 - Small key of Agahnim's Tower -%SpriteProps($A5, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A5 - Small key of Swamp Palace -%SpriteProps($A6, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A6 - Small key of Dark Palace -%SpriteProps($A7, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A7 - Small key of Misery Mire -%SpriteProps($A8, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A8 - Small key of Skull Woods -%SpriteProps($A9, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; A9 - Small key of Ice Palace -%SpriteProps($AA, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; AA - Small key of Tower of Hera -%SpriteProps($AB, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; AB - Small key of Thieves' Town -%SpriteProps($AC, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; AC - Small key of Turtle Rock -%SpriteProps($AD, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; AD - Small key of Ganon's Tower +%SpriteProps($A0, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A0 - Small key of Sewers +%SpriteProps($A1, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A1 - Small key of Hyrule Castle +%SpriteProps($A2, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A2 - Small key of Eastern Palace +%SpriteProps($A3, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A3 - Small key of Desert Palace +%SpriteProps($A4, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A4 - Small key of Agahnim's Tower +%SpriteProps($A5, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A5 - Small key of Swamp Palace +%SpriteProps($A6, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A6 - Small key of Dark Palace +%SpriteProps($A7, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A7 - Small key of Misery Mire +%SpriteProps($A8, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A8 - Small key of Skull Woods +%SpriteProps($A9, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; A9 - Small key of Ice Palace +%SpriteProps($AA, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AA - Small key of Tower of Hera +%SpriteProps($AB, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AB - Small key of Thieves' Town +%SpriteProps($AC, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AC - Small key of Turtle Rock +%SpriteProps($AD, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AD - Small key of Ganon's Tower %SpriteProps($AE, 2, 2, $02, $02, $0000) ; AE - Reserved -%SpriteProps($AF, 0, 0, $04, $04, PalettesVanilla_blue_ice+$0E) ; AF - Generic small key +%SpriteProps($AF, 0, 0, $02, $04, PalettesVanilla_blue_ice+$0E) ; AF - Generic small key %SpriteProps($B0, 2, 2, $80, $80, PalettesCustom_crystal) ; B0 - Crystal 6 %SpriteProps($B1, 2, 2, $80, $80, PalettesCustom_crystal) ; B1 - Crystal 1 %SpriteProps($B2, 2, 2, $80, $80, PalettesCustom_crystal) ; B2 - Crystal 5 diff --git a/newitems.asm b/newitems.asm index 3158415..5bd3b6b 100644 --- a/newitems.asm +++ b/newitems.asm @@ -131,7 +131,6 @@ AddReceivedItemExpandedGetItem: SEP #$30 PLB : PLX - STZ.w ShopPurchaseFlag LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over RTL @@ -272,13 +271,11 @@ ItemBehavior: RTS .bow - LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking BIT #$40 : BNE .silversbow LDA.b #$01 : STA.l BowEquipment RTS .silversbow - LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE + LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking LDA.b #03 : STA.l BowEquipment ; set bow to silver @@ -322,7 +319,6 @@ ItemBehavior: JMP.w .increment_map .bow_and_arrows - LDA.b #$80 : ORA.l BowTracking : STA.l BowTracking LDA.l BowTracking : BIT.b #$40 : BEQ .no_silvers LDA.l SilverArrowsUseRestriction : BNE .no_silvers LDA.l CurrentArrows : BEQ + @@ -342,7 +338,6 @@ ItemBehavior: RTS .silver_bow - LDA.b #$80 : ORA.l BowTracking : STA.l BowTracking LDA.l SilverArrowsUseRestriction : BNE .noequip LDA.b #$40 : ORA.l BowTracking : STA.l BowTracking LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip @@ -719,7 +714,7 @@ ResolveLootID: .magic SEP #$20 LDA.l MagicConsumption : TAX - LDA.w ResolveLootID_magic_ids,X + LDA.w .magic_ids,X JMP.w .have_item ..ids db $4E, $4F, $4F @@ -732,7 +727,7 @@ ResolveLootID: JMP.w .get_item + TAX - LDA.w ResolveLootID_prog_sword_ids,X + LDA.w .prog_sword_ids,X JMP.w .have_item ..ids db $49, $50, $02, $03, $03 @@ -745,7 +740,7 @@ ResolveLootID: JMP.w .get_item + TAX - LDA.w ResolveLootID_shields_ids,X + LDA.w .shields_ids,X JMP.w .have_item ..ids db $04, $05, $06, $06 @@ -758,7 +753,7 @@ ResolveLootID: JMP.w .get_item + TAX - LDA.w ResolveLootID_armor_ids,X + LDA.w .armor_ids,X JMP.w .have_item ..ids db $22, $23, $23 @@ -767,29 +762,39 @@ ResolveLootID: .gloves SEP #$20 LDA.l GloveEquipment : TAX - LDA.w ResolveLootID_gloves_ids,X + LDA.w .gloves_ids,X JMP.w .have_item ..ids db $1B, $1C, $1C .progressive_bow - SEP #$20 + ; For non-chest progressive bows we assign the tracking bits to SpriteMetaData,X + ; (where X is that sprite's slot) so the bit can be set on pickup. + SEP #$30 LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : BCC + LDA.l ProgressiveBowReplacement JMP.w .get_item + + LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ + + LDX.w CurrentSpriteSlot + LDA.b #$10 : STA.w SpriteMetaData,X + + LDA.l BowEquipment : TAX - LDA.w ResolveLootID_bows_ids,X + LDA.w .bows_ids,X JMP.w .get_item .progressive_bow_2 - SEP #$20 + SEP #$30 LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : BCC + LDA.l ProgressiveBowReplacement JMP.w .get_item + + LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ + + LDX.w CurrentSpriteSlot + LDA.b #$20 : STA.w SpriteMetaData,X + + LDA.l BowEquipment : TAX - LDA.w ResolveLootID_bows_ids,X + LDA.w .bows_ids,X JMP.w .get_item .bows @@ -845,17 +850,33 @@ PotionListExpanded: ;-------------------------------------------------------------------------------- HandleBowTracking: ; In: A - Item Receipt ID + PHA CMP.b #$64 : BEQ .prog_one CMP.b #$65 : BEQ .prog_two + CMP.b #$0B : BEQ .vanilla_bow + CMP.b #$3A : BEQ .vanilla_bow + CMP.b #$3B : BEQ .vanilla_bow + PLA RTS .prog_one - LDA.b #$90 + LDA.b #$10 BRA .done .prog_two - LDA.b #$A0 + LDA.b #$20 + BRA .done + .vanilla_bow + ; A non-chest progressive bow will always have been resolved to a vanilla bow ID + ; at this point. + LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ + + LDX.w CurrentSpriteSlot + LDA.w SpriteMetaData,X : BEQ + + BRA .done + + + LDA.b #$00 .done - ORA.l BowTracking : STA.l BowTracking - LDA.w ItemReceiptID + ORA.b #$80 : ORA.l BowTracking + STA.l BowTracking + PLA RTS ;-------------------------------------------------------------------------------- ;Return BowEquipment but also draw silver arrows if you have the upgrade even if you don't have the bow diff --git a/ram.asm b/ram.asm index bd89cbf..e68c886 100644 --- a/ram.asm +++ b/ram.asm @@ -193,7 +193,8 @@ ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt. ItemStackPtr = $7E0226 ; Pointer into Item GFX and VRAM target queues. Word length. ; If not zero, pointer should always be left pointing at the ; next available slot in the stack during the frame. -SpriteID = $7E0230 ; 0x0A bytes. Receipt ID for main loop sprite we're handling. +SpriteID = $7E0230 ; 0x10 bytes. Receipt ID for main loop sprite we're handling. +SpriteMetaData = $7E0240 ; 0x10 bytes. Sprite metadata. Used for prog bow tracking. AncillaVelocityZ = $7E0294 ; 0x0A bytes AncillaZCoord = $7E029E ; 0x0A bytes ;