diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index ea21b89..79ded1a 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -3,34 +3,40 @@ ;================================================================================ lorom +;=================================================================================================== + +; THIS NEEDS TO BE THE FIRST INCLUDE BECAUSE IT CHANGES THINGS EVERYWHERE +; If this were to be included later, it would almost certainly overwrite other changes +incsrc "fastrom.asm" + ;================================================================================ -;org $00FFC0 ; <- 7FC0 - Bank00.asm : 9173 (db "THE LEGEND OF ZELDA " ; 21 bytes) -;db #$23, $4E +;org $80FFC0 ; <- 7FC0 - Bank00.asm : 9173 (db "THE LEGEND OF ZELDA " ; 21 bytes) +;db $23, $4E -org $00FFD5 ; <- 7FD5 - Bank00.asm : 9175 (db $20 ; rom layout) -db #$30 ; set fast lorom +org $80FFD5 ; <- 7FD5 - Bank00.asm : 9175 (db $20 ; rom layout) +db $30 ; set fast lorom -;org $00FFD6 ; <- 7FD6 - Bank00.asm : 9176 (db $02 ; cartridge type) -;db #$55 ; enable S-RTC +;org $80FFD6 ; <- 7FD6 - Bank00.asm : 9176 (db $02 ; cartridge type) +;db $55 ; enable S-RTC -org $00FFD7 ; <- 7FD7 - Bank00.asm : 9177 (db $0A ; rom size) -db #$0B ; mark rom as 16mbit +org $80FFD7 ; <- 7FD7 - Bank00.asm : 9177 (db $0A ; rom size) +db $0B ; mark rom as 16mbit -org $00FFD8 ; <- 7FD8 - Bank00.asm : 9178 (db $03 ; ram size (sram size)) -db #$05 ; mark sram as 32k +org $80FFD8 ; <- 7FD8 - Bank00.asm : 9178 (db $03 ; ram size (sram size)) +db $05 ; mark sram as 32k -org $3FFFFF ; <- 1FFFFF -db #$00 ; expand file to 2mb +org $BFFFFF ; <- 1FFFFF +db $00 ; expand file to 2mb -org $1FFFF8 ; <- FFFF8 timestamp rom -db #$20, #$19, #$08, #$31 ; year/month/day +org $9FFFF8 ; <- FFFF8 timestamp rom +db $20, $19, $08, $31 ; year/month/day ;================================================================================ !ROM_VERSION_LOW ?= 1 ; ROM version (two 16-bit integers) -!ROM_VERSION_HIGH ?= 2 ; +!ROM_VERSION_HIGH ?= 4 ; -org $00FFE0 ; Unused hardware vector +org $80FFE0 ; Unused hardware vector RomVersion: dw !ROM_VERSION_LOW dw !ROM_VERSION_HIGH @@ -43,8 +49,8 @@ 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 +; Feature flags, run asar with -DFEATURE_X=0 to disable +!FEATURE_NEW_TEXT ?= 1 ;================================================================================ @@ -56,10 +62,9 @@ incsrc ram.asm incsrc sram.asm incsrc registers.asm incsrc vanillalabels.asm +incsrc overworldmap.asm ; Overwrites some code in bank $8A -;org $208000 ; bank #$20 -org $A08000 ; bank #$A0 -incsrc newitems.asm ; LEAVE THIS AS FIRST +org $A08000 ; bank $20 incsrc itemdowngrade.asm incsrc bugfixes.asm incsrc darkworldspawn.asm @@ -67,7 +72,6 @@ incsrc lampmantlecone.asm incsrc floodgatesoftlock.asm incsrc heartpieces.asm incsrc npcitems.asm -incsrc utilities.asm incsrc flipperkill.asm incsrc pendantcrystalhud.asm incsrc potions.asm @@ -78,7 +82,6 @@ incsrc tablets.asm incsrc fairyfixes.asm incsrc rngfixes.asm incsrc medallions.asm -incsrc inventory.asm incsrc zelda.asm incsrc maidencrystals.asm incsrc flute.asm @@ -98,9 +101,9 @@ incsrc roomloading.asm incsrc icepalacegraphics.asm warnpc $A18000 -org $1C8000 ; text tables for translation +org $9C8000 ; text tables for translation incbin "data/i18n_en.bin" -warnpc $1CF356 +warnpc $9CF356 org $A18000 ; static mapping area incsrc framehook.asm @@ -111,7 +114,7 @@ incsrc hud.asm warnpc $A18800 org $A18800 ; static mapping area -incsrc zsnes.asm + warnpc $A19000 org $A1A000 ; static mapping area. Referenced by front end. Do not move. @@ -131,7 +134,6 @@ incsrc glitched.asm incsrc hardmode.asm incsrc goalitem.asm incsrc quickswap.asm -incsrc endingsequence.asm incsrc cuccostorm.asm incsrc retro.asm incsrc controllerjank.asm @@ -144,7 +146,6 @@ incsrc hashalphabet.asm incsrc inverted.asm incsrc invertedmaps.asm incsrc newhud.asm -incsrc compasses.asm incsrc save.asm incsrc password.asm incsrc enemy_adjustments.asm @@ -152,121 +153,139 @@ incsrc hudtext.asm incsrc servicerequest.asm incsrc elder.asm incsrc toast.asm -incsrc darkroomitems.asm incsrc fastcredits.asm incsrc msu.asm incsrc dungeonmap.asm incsrc special_weapons.asm incsrc variable_ganon_vulnerability.asm +incsrc hextodec.asm if !FEATURE_NEW_TEXT - incsrc textrenderer.asm + incsrc textrenderer.asm endif warnpc $A58000 org $A28000 +ItemReceiptGraphicsROM: +; we need some empty space here so that 0000 can mean nothing +fillbyte $00 : fill 32 +incbin "data/customitems.4bpp" +warnpc $A2B000 +org $A2B000 +incsrc itemdatatables.asm ; Statically mapped +incsrc decompresseditemgraphics.asm +incsrc newitems.asm +incsrc utilities.asm +incsrc inventory.asm org $A38000 +incsrc stats/credits.asm ; Statically mapped incsrc stats/main.asm +incsrc stats/statConfig.asm +FontTable: +incsrc stats/fonttable.asm -org $308000 ; bank #$30 +org $B08000 ; bank $30 incsrc tables.asm -org $348000 +org $B48000 incsrc spc.asm -org $318000 ; bank #$31 +org $B18000 ; bank $31 GFX_Mire_Bombos: incbin "data/99ff1_bombos.gfx" -warnpc $318800 +warnpc $B18800 -org $318800 +org $B18800 GFX_Mire_Quake: incbin "data/99ff1_quake.gfx" -warnpc $319000 +warnpc $B19000 -org $319000 +org $B19000 GFX_TRock_Bombos: incbin "data/a6fc4_bombos.gfx" -warnpc $319800 +warnpc $B19800 -org $319800 +org $B19800 GFX_TRock_Ether: incbin "data/a6fc4_ether.gfx" -warnpc $31A000 +warnpc $B1A000 -org $31A000 +org $B1A000 GFX_HUD_Items: incbin "data/c2807_v4.gfx" -warnpc $31A800 +warnpc $B1A800 -org $31A800 -GFX_New_Items: -incbin "data/newitems.gfx" -;incbin eventitems.gfx ; *EVENT* -warnpc $31B000 +org $B1A800 -org $31B000 +warnpc $B1B000 + +org $B1B000 GFX_HUD_Main: incbin "data/c2e3e.gfx" -warnpc $31B800 +warnpc $B1B800 -org $31C000 +org $B1C000 IcePalaceFloorGfx: incbin "data/ice_palace_floor.bin" -warnpc $31C801 +warnpc $B1C801 -org $31C800 +org $B1C800 Damage_Table: incbin "data/damage_table.bin" -warnpc $31D001 +warnpc $B1D001 -org $31D000 +org $B1D000 FileSelectNewGraphics: incbin "data/fileselectgfx.2bpp" -warnpc $31E001 +warnpc $B1E001 -org $31E000 +org $B1E000 InvertedCastleHole: ;address used by front end. DO NOT MOVE! incbin "data/sheet73.gfx" -warnpc $31E501 +warnpc $B1E501 -org $31E800 +org $B1E800 Damage_Table_Bombs: incbin damage_table_sword_bombs.bin -warnpc $31F000 +warnpc $B1F000 -org $31F000 +org $B1F000 Damage_Table_Pseudo: incbin damage_table_pseudo_sword.bin -warnpc $31F800 +warnpc $B1F800 -org $338000 +org $B38000 GFX_HUD_Palette: incbin "data/hudpalette.pal" -warnpc $338041 +warnpc $B38041 -org $339000 +org $B39000 +ExpandedTrinexx: incbin "data/sheet178.gfx" -warnpc $339600 +warnpc $B39600 -org $339600 +org $B39600 BossMapIconGFX: incbin "data/bossicons.4bpp" if !FEATURE_NEW_TEXT - org $339C00 - NewFont: - incbin "data/newfont.bin" - NewFontInverted: - incbin "data/newfont_inverted.bin" - - org $0CD7DF - incbin "data/text_unscramble1.bin" - org $0CE4D5 - incbin "data/text_unscramble2.bin" + 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 $328000 +org $B28000 Extra_Text_Table: if !FEATURE_NEW_TEXT incsrc itemtext_lower.asm @@ -276,9 +295,13 @@ endif incsrc externalhooks.asm ;================================================================================ -org $119100 ; PC 0x89100 +org $919100 ; PC 0x89100 incbin "data/map_icons.gfx" -warnpc $119401 +warnpc $919401 +;================================================================================ +org $9BB1E0 +incsrc custompalettes.asm +warnpc $9BB880 ;================================================================================ org $AF8000 ; PC 0x178000 Static_RNG: ; each line below is 512 bytes of rng @@ -329,25 +352,18 @@ warnpc $B08000 ;$70:6000 (8K) Scratch buffers ;================================================================================ -org $00D09C ; 0x509C - HUD Items H +org $80D09C ; 0x509C - HUD Items H db GFX_HUD_Items>>16 -org $00D17B ; 0x517B - HUD Items M +org $80D17B ; 0x517B - HUD Items M db GFX_HUD_Items>>8 -org $00D25A ; 0x525A - HUD Items L +org $80D25A ; 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 +org $80D09D ; 0x509D - HUD Main H db GFX_HUD_Main>>16 -org $00D17C ; 0x517C - HUD Main M +org $80D17C ; 0x517C - HUD Main M db GFX_HUD_Main>>8 -org $00D25B ; 0x525B - HUD Main L +org $80D25B ; 0x525B - HUD Main L db GFX_HUD_Main + ;================================================================================ diff --git a/accessibility.asm b/accessibility.asm index d02de7e..32ecb34 100644 --- a/accessibility.asm +++ b/accessibility.asm @@ -153,7 +153,7 @@ RestoreBgEther: INX #2 : CPX.b #$10 : BNE - BRA ++ ++ -JML $02FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs +JML $82FF51 ; Bank0E.asm : 3936 vanilla restore routine after loop which RTLs ;================================================================================ DDMConditionalLightning: LDA.l DisableFlashing @@ -161,7 +161,7 @@ DDMConditionalLightning: BNE + LDA.w Scrap LDX.b #$02 - JML $07FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00 + JML $87FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00 + LDA.b Scrap00 : LDX.b #$02 : LDY.b #$00 - @@ -172,7 +172,7 @@ DDMConditionalLightning: LDA.w $F523, Y : LDA.l PaletteBuffer+$F0, X INY #2 INX #2 : CPX.b #$10 : BNE - - JML $07FAAC ; Bank0E.asm : 4754 both branches converge here + JML $87FAAC ; Bank0E.asm : 4754 both branches converge here ;================================================================================ ConditionalGTFlash: LDA.l DisableFlashing : REP #$20 : BNE + @@ -222,17 +222,17 @@ LoadElectroPalette: LDA.w #$0404 : STA.b Scrap0E LDA.w #$001B : STA.b Scrap02 SEP #$10 - LDX.b Scrap0C : LDA.l $1BEBB4, X : AND.w #$00FF : ADC.w #$D630 + LDX.b Scrap0C : LDA.l $9BEBB4, X : AND.w #$00FF : ADC.w #$D630 REP #$10 : LDX.w #$01B2 : LDY.w #$0002 JSR ConditionalLoadGearPalette SEP #$10 LDX.b Scrap0D - LDA.l $1BEBC1, X : AND.w #$00FF : ADC.w #$D648 + LDA.l $9BEBC1, X : AND.w #$00FF : ADC.w #$D648 REP #$10 : LDX.w #$01B8 : LDY.w #$0003 JSR ConditionalLoadGearPalette SEP #$10 LDX.b Scrap0E - LDA.l $1BEC06, X : AND.w #$00FF : ASL A : ADC.w #$D308 + LDA.l $9BEC06, X : AND.w #$00FF : ASL A : ADC.w #$D308 REP #$10 : LDX.w #$01E2 : LDY.w #$000E JSR ConditionalLoadGearPalette SEP #$30 diff --git a/bookofmudora.asm b/bookofmudora.asm index 399b98a..21f79a3 100644 --- a/bookofmudora.asm +++ b/bookofmudora.asm @@ -3,19 +3,21 @@ ;-------------------------------------------------------------------------------- LoadLibraryItemGFX: %GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues) - STA.w SpriteItemType, X ; Store item type - JSL.l PrepDynamicTile + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID, X + JSL.l PrepDynamicTile_loot_resolved RTL ;-------------------------------------------------------------------------------- DrawLibraryItemGFX: PHA - LDA.w SpriteItemType, X ; Retrieve stored item type + LDA.w SpriteID, X JSL.l DrawDynamicTile PLA RTL ;-------------------------------------------------------------------------------- SetLibraryItem: - LDY.w SpriteItemType, X ; Retrieve stored item type + LDY.w SpriteID, X JSL.l ItemSet_Library ; contains thing we wrote over RTL ;-------------------------------------------------------------------------------- @@ -29,17 +31,27 @@ LoadBonkItemGFX: LoadBonkItemGFX_inner: LDA.b #$00 : STA.l RedrawFlag JSR LoadBonkItem + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteItemType, X + STA.w SpriteID, X JSL.l PrepDynamicTile + PHA : PHX + LDA.w SpriteID,X : TAX + LDA.l SpriteProperties_standing_width,X : BNE + + LDA.b #$00 : STA.l SpriteOAM : STA.l SpriteOAM+8 + + + PLX : PLA RTL ;-------------------------------------------------------------------------------- DrawBonkItemGFX: PHA - LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready + LDA.l RedrawFlag : BEQ .skipInit JSL.l LoadBonkItemGFX_inner BRA .done ; don't draw on the init frame .skipInit - JSR LoadBonkItem + LDA.w SpriteID,X JSL.l DrawDynamicTileNoShadow .done diff --git a/bugfixes.asm b/bugfixes.asm index e8a6b88..f4c15dc 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -64,7 +64,7 @@ FixBunnyOnExitToLightWorld: STZ.b LinkState ; set player mode to Normal STZ.w BunnyFlag : STZ.b BunnyFlagDP ; return player graphics to normal + -RTS +RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- @@ -245,3 +245,10 @@ ParadoxCaveGfxFix: LDX.w #$00C0 : STX.w DAS0L BRA .uploadLine ;-------------------------------------------------------------------------------- +SetItemRiseTimer: + LDA.w ItemReceiptMethod : CMP #$01 : BNE .not_from_chest + LDA.b #$38 : STA.w AncillaTimer, X + RTL + .not_from_chest + TYA : STA.w AncillaTimer, X ; What we wrote over +RTL diff --git a/compasses.asm b/compasses.asm deleted file mode 100644 index 221aa54..0000000 --- a/compasses.asm +++ /dev/null @@ -1,82 +0,0 @@ -DrawDungeonItemCounts: - LDX.b IndoorsFlag : BNE + : RTL : + ; Skip if outdoors - ; extra hard safeties for getting dungeon ID to prevent crashes - PHA - LDA.w DungeonID : AND.w #$00FE : TAX ; force dungeon ID to be multiple of 2 - PLA - CPX.b #$1B : BCS .done ; Skip if not in a valid dungeon ID - - JSR.w DrawCompassCounts - JSR.w DrawMapCounts - .done -RTL - -DrawCompassCounts: - PHX - LDA.l CompassMode : AND.w #$00FF : BEQ .done - BIT.w #$0002 : BNE + ; if CompassMode==2, we don't check for the compass - LDA.l CompassField : AND.l DungeonItemMasks, X ; Load compass values to A, mask with dungeon item masks - BEQ .done ; skip if we don't have compass - + - TXA : LSR : TAX - LDA.l CompassTotalsWRAM, X : AND.w #$00FF - SEP #$20 - JSR HudHexToDec2Digit - REP #$20 - PHX - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$9A - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$9C - PLX - LDA.l DungeonLocationsChecked, X : AND.w #$00FF - SEP #$20 - JSR HudHexToDec2Digit - REP #$20 - LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$94 ; Draw the item count - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$96 - LDA.w #$2830 : STA.l HUDTileMapBuffer+$98 ; draw the slash - .done - PLX -RTS - -DrawMapCounts: - PHX - LDA.l MapHUDMode : AND.w #$00FF : BEQ .done - BIT.w #$0002 : BNE + ; if MapHUDMode==2, we don't check for map - LDA.l MapField : AND.l DungeonItemMasks, X ; Load map values to A, mask with dungeon item masks - BEQ .done ; skip if we don't have map - + - TXA : LSR : TAX - LDA.l MapTotalsWRAM, X : AND.w #$00FF - SEP #$20 - JSR HudHexToDec2Digit - REP #$20 - PHX - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$A6 - PLX - LDA.l DungeonCollectedKeys, X : AND.w #$00FF - SEP #$20 - JSR HudHexToDec2Digit - REP #$20 - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$A2 - LDA.w #$2830 : STA.l HUDTileMapBuffer+$A4 ; draw the slash - .done - PLX -RTS - -DungeonItemMasks: ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc - dw $C000, $C000, $2000, $1000, $0800, $0400, $0200, $0100 - dw $0080, $0040, $0020, $0010, $0008, $0004 -;-------------------------------------------------------------------------------- -InitDungeonCounts: - LDX.b #$0F - - - LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X - DEX - BPL - - LDX.b #$0F - - - LDA.l ChestKeys, X : STA.l MapTotalsWRAM, X - DEX - BPL - -RTL - diff --git a/controllerjank.asm b/controllerjank.asm index 5ff3da7..b243d3c 100644 --- a/controllerjank.asm +++ b/controllerjank.asm @@ -119,5 +119,5 @@ HandleOneMindController: .no_onemind STZ.b NMIDoneFlag - JML $008034 ; reset frame loop + JML $808034 ; reset frame loop diff --git a/custompalettes.asm b/custompalettes.asm new file mode 100644 index 0000000..50a51cb --- /dev/null +++ b/custompalettes.asm @@ -0,0 +1,19 @@ +PalettesCustom: +.master_sword +dw $0000, $7E4E, $6FF4, $1CF5, $7FFF, $1CE7, $7A10, $64A5 +.tempered_sword +dw $7FFF, $093B, $169F, $7E8D, $7FFF, $1CE7, $7A10, $64A5 +.golden_sword +dw $0000, $033F, $7FFF, $2640, $7FFF, $1CE7, $7A10, $64A5 +.golden_bombs +dw $0000, $7FFF, $27FF, $02BC, $4F5F, $1CE7, $2E9C, $14B6 +.fighter_shield +dw $0000, $7FFF, $27FF, $5E2D, $7FFF, $1CE7, $7A10, $64A5 +.red_shield +dw $0000, $7FFF, $27FF, $5E2D, $4F5F, $1CE7, $2E9C, $14B6 +.mirror_shield +dw $0000, $7E4E, $6F44, $1CF5, $7399, $1CE7, $02F9, $0233 +.crystal +dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672 +.off_black +dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5 diff --git a/darkroomitems.asm b/darkroomitems.asm deleted file mode 100644 index 51352bc..0000000 --- a/darkroomitems.asm +++ /dev/null @@ -1,27 +0,0 @@ -CheckReceivedItemPropertiesBeforeLoad: - LDA.b RoomIndex : BEQ .normalCode - LDA.l RoomFade : BNE .lightOff -.normalCode - LDA.l AddReceivedItemExpanded_properties, X ;Restore Rando Code - RTL - -.lightOff - PHX : PHY : PHB - JSL LoadReceivedItemExpandedProperties ; get palette - - REP #$30 - AND.w #$0007 ; mask out palette - ASL #5 ; multiply by 32 - ADC.w #$C610 ; offset to latter half - - TAX ; give to destination - LDY.w #$C610 ; target palette SP0 colors 8-F - - LDA.w #$000F ; 16 bytes - MVN $7E, $7E ; move palette - - SEP #$30 - PLB : PLY : PLX - INC.b NMICGRAM - LDA.b #$00 - RTL diff --git a/data/creditscharmapbighi.txt b/data/creditscharmapbighi.txt index e7f81bc..4ace488 100644 --- a/data/creditscharmapbighi.txt +++ b/data/creditscharmapbighi.txt @@ -35,8 +35,45 @@ W=73 X=74 Y=75 Z=76 -'=77 -.=A0 -/=A2 -:=A3 -_=A6 \ No newline at end of file +a=A0 +b=A1 +c=A2 +d=A3 +e=A4 +f=A5 +g=A6 +h=A7 +i=A8 +j=A9 +k=AA +l=AB +m=AC +n=AD +o=AE +p=AF +q=B0 +r=B1 +s=B2 +t=B3 +u=B4 +v=B5 +w=B6 +x=B7 +y=B8 +z=B9 +'=D9 +"=DA +/=DB +.=DC +:=DD +_=DE +^=DF +&=E0 +#=E1 +@=E2 +>=E3 +?=E4 +!=E5 +~=E6 +,=E7 +-=E8 diff --git a/data/creditscharmapbiglo.txt b/data/creditscharmapbiglo.txt index 6e70494..1d9fc90 100644 --- a/data/creditscharmapbiglo.txt +++ b/data/creditscharmapbiglo.txt @@ -35,8 +35,45 @@ W=99 X=9A Y=9B Z=9C -'=9d -.=C0 -/=C2 -:=C3 -_=C6 \ No newline at end of file +a=BB +b=BC +c=BD +d=BE +e=BF +f=C0 +g=C1 +h=C2 +i=C3 +j=C4 +k=C5 +l=C6 +m=C7 +n=C8 +o=C9 +p=CA +q=CB +r=CC +s=CD +t=CE +u=CF +v=D0 +w=D1 +x=D2 +y=D3 +z=D4 +'=EC +"=ED +/=EE +.=EF +:=F0 +_=F1 +^=F2 +&=F3 +#=F4 +@=F5 +>=F6 +?=F7 +!=F8 +~=F9 +,=FA +-=FB diff --git a/data/creditscharmapsmall_green.txt b/data/creditscharmapsmall_green.txt index e86db3d..34d1d8e 100644 --- a/data/creditscharmapsmall_green.txt +++ b/data/creditscharmapsmall_green.txt @@ -24,4 +24,5 @@ V=4D W=4E X=4F Y=50 -Z=51 \ No newline at end of file +Z=51 +.=52 diff --git a/data/creditscharmapsmall_yellow.txt b/data/creditscharmapsmall_yellow.txt index ee3714d..c1c047c 100644 --- a/data/creditscharmapsmall_yellow.txt +++ b/data/creditscharmapsmall_yellow.txt @@ -24,4 +24,8 @@ V=2F W=30 X=31 Y=32 -Z=33 \ No newline at end of file +Z=33 +,=34 +'=35 +-=36 +.=37 diff --git a/data/customitems.4bpp b/data/customitems.4bpp new file mode 100644 index 0000000..f7584f1 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..93adf4c Binary files /dev/null and b/data/customitems.png differ diff --git a/data/fileselectgfx.png b/data/fileselectgfx.png index 67228d7..c762d70 100644 Binary files a/data/fileselectgfx.png and b/data/fileselectgfx.png differ diff --git a/data/i18n_en.bin b/data/i18n_en.bin index fbd7ded..e134789 100644 Binary files a/data/i18n_en.bin and b/data/i18n_en.bin differ diff --git a/data/kanjireplacements.asm b/data/kanjireplacements.asm new file mode 100644 index 0000000..feeccf4 --- /dev/null +++ b/data/kanjireplacements.asm @@ -0,0 +1,55 @@ +; Kanji replacement characters + +org $8E9AC9 +;.charDD ; 𓄿 +db $FB, $8C, $73, $CB, $30, $4B, $30, $54 +db $2B, $5B, $24, $2D, $12, $13, $61, $1E +db $36, $09, $1B, $04, $14, $0B, $15, $0A +db $15, $0A, $21, $1E, $1E, $48, $30, $38 +;.charDE ; ☥ +db $1E, $33, $0C, $2D, $12, $2D, $12, $2D +db $12, $F3, $0C, $01, $01, $BF, $40, $C0 +db $3F, $BF, $40, $F2, $0C, $12, $0C, $12 +db $0C, $12, $0C, $1E, $50, $A0, $F0 +;.charDF ; ≈ +db $01, $3B, $6E, $11, $C4, $3B, $91, $6E +db $BB, $44, $26, $18, $3C, $E7, $3B, $6E +db $11, $C4, $3B, $91, $6E, $BB, $44, $EE +db $98, $60, $F0 +;.charE0 ; 🡅 +db $0C, $12, $0C, $21, $1E, $40, $3F, $80 +db $7F, $02, $01, $01, $E1, $1E, $21, $1E +db $21, $1E, $21, $1E, $21, $1E, $21, $1E +db $21, $1E, $3F, $80, $80 +;.charE1 ; 🡇 +db $3F, $21, $1E, $21, $1E, $21, $1E, $21 +db $1E, $21, $1E, $21, $1E, $E1, $1E, $80 +db $7F, $40, $3F, $21, $1E, $12, $0C, $0C +db $28, $10, $30 +;.charE2 ; 🡆 +db $18, $14, $08, $12, $0C, $F1, $0E, $80 +db $7F, $01, $80, $7F, $80, $7F, $80, $7F +db $F1, $0E, $12, $0C, $14, $08, $18, $20 +db $C0, $C0 +;.charE3 ; 🡄 +db $06, $0A, $04, $12, $0C, $23, $1C, $40 +db $3F, $02, $01, $03, $80, $7F, $80, $7F +db $40, $3F, $23, $1C, $12, $0C, $0A, $04 +db $06, $10, $E0, $F0 + + +org $8EBD94 +;.charDD ; 𓄿 +db $BF, $FE, $3F, $FF, $B8 ; 10111111 11111110 00111111 11111111 10111000 +;.charDE ; ☥ +db $BF, $FA, $3F, $FF, $B8 ; 10111111 11111010 00111111 11111111 10111000 +;.charDF ; ≈ +db $AF, $FE, $2B, $FE, $38 ; 10101111 11111110 00101011 11111110 00111000 +;.charE0 ; 🡅 +db $2F, $FE, $3F, $FF, $A8 ; 00101111 11111110 00111111 11111111 10101000 +;.charE1 ; 🡇 +db $2F, $F0, $3F, $FF, $B8 ; 00101111 11110000 00111111 11111111 10111000 +;.charE2 ; 🡆 +db $2F, $F8, $3F, $FE, $38 ; 00101111 11111000 00111111 11111110 00111000 +;.charE3 ; 🡄 +db $2F, $FE, $3F, $FE, $38 ; 00101111 11111110 00111111 11111110 00111000 diff --git a/data/newfont.bin b/data/newfont.bin index ee9a452..8d6cba4 100644 Binary files a/data/newfont.bin and b/data/newfont.bin differ diff --git a/data/newfont_inverted.bin b/data/newfont_inverted.bin index 13323ee..0b78c5c 100644 Binary files a/data/newfont_inverted.bin and b/data/newfont_inverted.bin differ diff --git a/data/playernamecharmap.asm b/data/playernamecharmap.asm new file mode 100644 index 0000000..f26c390 --- /dev/null +++ b/data/playernamecharmap.asm @@ -0,0 +1,59 @@ +db $00, $01, $02, $03, $04, $CC, $CC ; あ い う え お ⎵ ⎵ +db $15, $16, $17, $1D, $1E, $CC ; が ぎ ぐ げ ご ⎵ +db $50, $51, $52, $53, $54, $CC, $CC ; ア イ ウ エ オ ⎵ ⎵ +db $D0, $D1, $D2, $D3, $D4, $CC ; a b c d e ⎵ +db $AA, $AB, $AC, $AD, $CC, $CC ; A B C D ⎵ ⎵ + +db $08, $09, $0A, $0B, $0C, $CC, $CC ; か き く け こ ⎵ ⎵ +db $1F, $25, $26, $27, $2D, $CC ; ざ じ ず ぜ ぞ ⎵ +db $58, $59, $5A, $5B, $5C, $CC, $CC ; カ キ ク ケ コ ⎵ ⎵ +db $D5, $D6, $D7, $D8, $D9, $CC ; ザ ジ ズ ゼ ゾ ⎵ +db $AE, $AF, $B0, $B1, $CC, $CC ; E F G H ⎵ ⎵ + +db $10, $11, $12, $13, $14, $CC, $CC ; さ し す せ そ ⎵ ⎵ +db $2E, $2F, $35, $36, $37, $CC ; だ ぢ づ で ど ⎵ +db $60, $61, $62, $63, $64, $CC, $CC ; サ シ ス セ ソ ⎵ ⎵ +db $DA, $DB, $DC, $DD, $DE, $CC ; ダ ヂ ヅ デ ド ⎵ +db $B2, $B3, $B4, $B5, $CC, $CC ; I J K L ⎵ ⎵ + +db $18, $19, $1A, $1B, $1C, $CC, $CC ; た ち つ て と ⎵ ⎵ +db $3D, $3E, $3F, $40, $41, $CC ; ば び ぶ べ ぼ ⎵ +db $68, $69, $6A, $6B, $6C, $CC, $CC ; タ チ ツ テ ト ⎵ ⎵ +db $DF, $E0, $E1, $E2, $E3, $CC ; バ ビ ブ ベ ボ ⎵ +db $B6, $B7, $B8, $B9, $CC, $CC ; M N O P ⎵ ⎵ + +db $20, $21, $22, $23, $24, $CC, $CC ; な に ぬ ね の ⎵ ⎵ +db $42, $43, $44, $45, $46, $CC ; ぱ ぴ ぷ ぺ ぽ ⎵ +db $70, $71, $72, $73, $74, $CC, $CC ; ナ ニ ヌ ネ ノ ⎵ ⎵ +db $E4, $E5, $E6, $E7, $E8, $CC ; パ ピ プ ペ ポ ⎵ +db $BA, $BB, $BC, $BD, $CC, $CC ; Q R S T ⎵ ⎵ + +db $28, $29, $2A, $2B, $2C, $CC, $CC ; は ひ ふ へ ほ ⎵ ⎵ +db $65, $66, $67, $6D, $6E, $CC +db $78, $79, $7A, $7B, $7C, $CC, $CC ; ハ ヒ フ ヘ ホ ⎵ ⎵ +db $E9, $EA, $EB, $EC, $C6, $CC ; ァ ィ ゥ ェ ォ ⎵ +db $BE, $BF, $C0, $C1, $CC, $CC ; U V W X ⎵ ⎵ + +db $30, $31, $32, $33, $34, $CC, $CC ; ま み む め も ⎵ ⎵ +db $6F, $75, $76, $77, $7D, $CC ; ザ ジ ズ ゼ ゾ ⎵ +db $80, $81, $82, $83, $84, $CC, $CC ; マ ミ ム メ モ ⎵ ⎵ +db $CC, $CC, $CC, $CC, $9A, $CC ; ャ ュ ョ ⎵ ッ ⎵ +db $C2, $C3, $C9, $CE, $CC, $CC ; Y Z - 〜 ⎵ ⎵ + +db $05, $CC, $06, $CC, $07, $CC, $CC ; や ⎵ ゆ ⎵ よ ⎵ ⎵ +db $7E, $7F, $85, $86, $87, $CC ; ダ ヂ ヅ デ ド ⎵ +db $55, $CC, $56, $CC, $57, $CC, $CC ; ヤ ⎵ ユ ⎵ ヨ ⎵ ⎵ +db $A0, $A1, $A2, $A3, $A4, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵ +db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵ + +db $38, $39, $3A, $3B, $3C, $CC, $CC ; ら り る れ ろ ⎵ ⎵ +db $8D, $8E, $8F, $90, $91, $CC ; バ ビ ブ ベ ボ ⎵ +db $88, $89, $8A, $8B, $8C, $CC, $CC ; ラ リ ル レ ロ ⎵ ⎵ +db $A5, $A6, $A7, $A8, $A9, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵ +db $CA, $CB, $CD, $CD, $CC, $CC ; 🡄 🡆 END ⎵ ⎵ + +db $0D, $0E, $0F, $CC, $C9, $CC, $CC ; わ を ん ⎵ - ⎵ ⎵ +db $92, $93, $94, $95, $96, $CC ; パ ピ プ ペ ポ ⎵ +db $5D, $5E, $5F, $CC, $C9, $CC, $CC ; ワ ヲ ン ⎵ - ⎵ ⎵ +db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵ +db $CC, $CC, $CC, $CC, $CC, $CC ; ⎵ ⎵ ⎵ ⎵ ⎵ ⎵ diff --git a/data/playernamecharmap.bin b/data/playernamecharmap.bin new file mode 100644 index 0000000..dc8fdfd Binary files /dev/null and b/data/playernamecharmap.bin differ diff --git a/data/playernamestripes_1.bin b/data/playernamestripes_1.bin new file mode 100644 index 0000000..c151bcd Binary files /dev/null and b/data/playernamestripes_1.bin differ diff --git a/data/playernamestripes_2.asm b/data/playernamestripes_2.asm new file mode 100644 index 0000000..8ba38bf --- /dev/null +++ b/data/playernamestripes_2.asm @@ -0,0 +1,72 @@ +dw $E164, $3900 ; VRAM $C9C2 | 58 bytes | Horizontal +dw $1CA2, $0188, $1CA3, $0188, $1CA4, $0188, $0188, $0188 +dw $0188, $0188, $1DA0, $0188, $1DA1, $0188, $1DA2, $0188 +dw $1DA3, $0188, $1DA4, $0188, $0188, $0188, $1D4A, $0188 +dw $1D4B, $0188, $1D4C, $0188, $1D4D + +dw $0165, $3900 ; VRAM $CA02 | 58 bytes | Horizontal +dw $1CB2, $0188, $1CB3, $0188, $1CB4, $0188, $0188, $0188 +dw $0188, $0188, $1DB0, $0188, $1DB1, $0188, $1DB2, $0188 +dw $1DB3, $0188, $1DB4, $0188, $0188, $0188, $1D5A, $0188 +dw $1D5B, $0188, $1D5C, $0188, $1D5D + +dw $2165, $3900 ; VRAM $CA42 | 58 bytes | Horizontal +dw $1CAA, $0188, $1CAB, $0188, $1CAC, $0188, $0188, $0188 +dw $0188, $0188, $1DA5, $0188, $1DA6, $0188, $1DA7, $0188 +dw $1DA8, $0188, $1DA9, $0188, $0188, $0188, $1D4E, $0188 +dw $1D4F, $0188, $1D60, $0188, $1D61 + +dw $4165, $3900 ; VRAM $CA82 | 58 bytes | Horizontal +dw $1CBA, $0188, $1CBB, $0188, $1CBC, $0188, $0188, $0188 +dw $0188, $0188, $1DB5, $0188, $1DB6, $0188, $1DB7, $0188 +dw $1DB8, $0188, $1DB9, $0188, $0188, $0188, $1D5E, $0188 +dw $1D5F, $0188, $1D70, $0188, $1D71 + +dw $6165, $3900 ; VRAM $CAC2 | 58 bytes | Horizontal +dw $1CC2, $0188, $1CC3, $0188, $1CC4, $0188, $0188, $0188 +dw $0188, $0188, $1DAA, $0188, $1DAB, $0188, $1DAC, $0188 +dw $1DAD, $0188, $1DAE, $0188, $0188, $0188, $1D62, $0188 +dw $1D63, $0188, $1D64, $0188, $1D65 + +dw $8165, $3900 ; VRAM $CB02 | 58 bytes | Horizontal +dw $1CD2, $0188, $1CD3, $0188, $1CD4, $0188, $0188, $0188 +dw $0188, $0188, $1DBA, $0188, $1DBB, $0188, $1DBC, $0188 +dw $1DBD, $0188, $1DBE, $0188, $0188, $0188, $1D72, $0188 +dw $1D73, $0188, $1D74, $0188, $1D75 + +dw $A165, $3900 ; VRAM $CB42 | 58 bytes | Horizontal +dw $1CCA, $0188, $1CCB, $0188, $1CCC, $0188, $0188, $0188 +dw $0188, $0188, $1DAF, $0188, $1DC0, $0188, $1DC1, $0188 +dw $1DC2, $0188, $1DC3, $0188, $0188, $0188, $1D66, $0188 +dw $1D67, $0188, $1D68, $0188, $1D69 + +dw $C165, $3900 ; VRAM $CB82 | 58 bytes | Horizontal +dw $1CDA, $0188, $1CDB, $0188, $1CDC, $0188, $0188, $0188 +dw $0188, $0188, $1DBF, $0188, $1DD0, $0188, $1DD1, $0188 +dw $1DD2, $0188, $1DD3, $0188, $0188, $0188, $1D76, $0188 +dw $1D77, $0188, $1D78, $0188, $1D79 + +dw $E165, $3900 ; VRAM $CBC2 | 58 bytes | Horizontal +dw $1CE2, $0188, $1CE3, $0188, $1CE4, $0188, $0188, $0188 +dw $0188, $0188, $1DC4, $0188, $1DC5, $0188, $1DC6, $0188 +dw $1DC7, $0188, $1DC8, $0188, $0188, $0188, $1D6A, $0188 +dw $1D6B, $0188, $1D6C, $0188, $1D6D + +dw $0166, $3900 ; VRAM $CC02 | 58 bytes | Horizontal +dw $1CF2, $0188, $1CF3, $0188, $1CF4, $0188, $0188, $0188 +dw $0188, $0188, $1DD4, $0188, $1DD5, $0188, $1DD6, $0188 +dw $1DD7, $0188, $1DD8, $0188, $0188, $0188, $1D7A, $0188 +dw $1D7B, $0188, $1D7C, $0188, $1D7D + +; dw $2166, $3900 ; VRAM $CC42 | 58 bytes | Horizontal +; dw $1CEA, $0188, $1CEB, $0188, $1CEC, $0188, $0188, $0188 +; dw $0188, $0188, $1DC9, $0188, $1DCA, $0188, $1DCB, $0188 +; dw $1DCC, $0188, $1D86, $0188, $0188, $0188, $1D6E, $0188 +; dw $1D6F, $0188, $1D80, $0188, $1D81 +; +; dw $4166, $3900 ; VRAM $CC82 | 58 bytes | Horizontal +; dw $1CFA, $0188, $1CFB, $0188, $1CFC, $0188, $0188, $0188 +; dw $0188, $0188, $1DD9, $0188, $1DDA, $0188, $1DDB, $0188 +; dw $1DDC, $0188, $1D96, $0188, $0188, $0188, $1D7E, $0188 +; dw $1D7F, $0188, $1D90, $0188, $1D91 + diff --git a/data/playernamestripes_2.bin b/data/playernamestripes_2.bin new file mode 100644 index 0000000..0443104 Binary files /dev/null and b/data/playernamestripes_2.bin differ diff --git a/data/playernamestripes_3.asm b/data/playernamestripes_3.asm new file mode 100644 index 0000000..00436f0 --- /dev/null +++ b/data/playernamestripes_3.asm @@ -0,0 +1,72 @@ +dw $E164, $3900 ; VRAM $C9C2 | 58 bytes | Horizontal +dw $1CA2, $0188, $1CA3, $0188, $1CA4, $0188, $0188, $0188 +dw $0188, $0188, $1DA0, $0188, $1DA1, $0188, $1DA2, $0188 +dw $1DA3, $0188, $1DA4, $0188, $0188, $0188, $1D4A, $0188 +dw $1D4B, $0188, $1D4C, $0188, $1D4D + +dw $0165, $3900 ; VRAM $CA02 | 58 bytes | Horizontal +dw $1CB2, $0188, $1CB3, $0188, $1CB4, $0188, $0188, $0188 +dw $0188, $0188, $1DB0, $0188, $1DB1, $0188, $1DB2, $0188 +dw $1DB3, $0188, $1DB4, $0188, $0188, $0188, $1D5A, $0188 +dw $1D5B, $0188, $1D5C, $0188, $1D5D + +dw $2165, $3900 ; VRAM $CA42 | 58 bytes | Horizontal +dw $1CAA, $0188, $1CAB, $0188, $1CAC, $0188, $0188, $0188 +dw $0188, $0188, $1DA5, $0188, $1DA6, $0188, $1DA7, $0188 +dw $1DA8, $0188, $1DA9, $0188, $0188, $0188, $1D4E, $0188 +dw $1D4F, $0188, $1D60, $0188, $1D61 + +dw $4165, $3900 ; VRAM $CA82 | 58 bytes | Horizontal +dw $1CBA, $0188, $1CBB, $0188, $1CBC, $0188, $0188, $0188 +dw $0188, $0188, $1DB5, $0188, $1DB6, $0188, $1DB7, $0188 +dw $1DB8, $0188, $1DB9, $0188, $0188, $0188, $1D5E, $0188 +dw $1D5F, $0188, $1D70, $0188, $1D71 + +dw $6165, $3900 ; VRAM $CAC2 | 58 bytes | Horizontal +dw $1CC2, $0188, $1CC3, $0188, $1CC4, $0188, $0188, $0188 +dw $0188, $0188, $1DAA, $0188, $1DAB, $0188, $1DAC, $0188 +dw $1DAD, $0188, $1DAE, $0188, $0188, $0188, $1D62, $0188 +dw $1D63, $0188, $1D64, $0188, $1D65 + +dw $8165, $3900 ; VRAM $CB02 | 58 bytes | Horizontal +dw $1CD2, $0188, $1CD3, $0188, $1CD4, $0188, $0188, $0188 +dw $0188, $0188, $1DBA, $0188, $1DBB, $0188, $1DBC, $0188 +dw $1DBD, $0188, $1DBE, $0188, $0188, $0188, $1D72, $0188 +dw $1D73, $0188, $1D74, $0188, $1D75 + +dw $A165, $3900 ; VRAM $CB42 | 58 bytes | Horizontal +dw $1CCA, $0188, $1CCB, $0188, $1CCC, $0188, $0188, $0188 +dw $0188, $0188, $1DAF, $0188, $1DC0, $0188, $1DC1, $0188 +dw $1DC2, $0188, $1DC3, $0188, $0188, $0188, $1D66, $0188 +dw $1D67, $0188, $1D68, $0188, $1D69 + +dw $C165, $3900 ; VRAM $CB82 | 58 bytes | Horizontal +dw $1CDA, $0188, $1CDB, $0188, $1CDC, $0188, $0188, $0188 +dw $0188, $0188, $1DBF, $0188, $1DD0, $0188, $1DD1, $0188 +dw $1DD2, $0188, $1DD3, $0188, $0188, $0188, $1D76, $0188 +dw $1D77, $0188, $1D78, $0188, $1D79 + +dw $E165, $3900 ; VRAM $CBC2 | 58 bytes | Horizontal +dw $1CE2, $0188, $1CE3, $0188, $1CE4, $0188, $0188, $0188 +dw $0188, $0188, $1DC4, $0188, $1DC5, $0188, $1DC6, $0188 +dw $1DC7, $0188, $1DC8, $0188, $0188, $0188, $1D6A, $0188 +dw $1D6B, $0188, $1D6C, $0188, $1D6D + +dw $0166, $3900 ; VRAM $CC02 | 58 bytes | Horizontal +dw $1CF2, $0188, $1CF3, $0188, $1CF4, $0188, $0188, $0188 +dw $0188, $0188, $1DD4, $0188, $1DD5, $0188, $1DD6, $0188 +dw $1DD7, $0188, $1DD8, $0188, $0188, $0188, $1D7A, $0188 +dw $1D7B, $0188, $1D7C, $0188, $1D7D + +dw $2166, $3900 ; VRAM $CC42 | 58 bytes | Horizontal +dw $1CEA, $0188, $1CEB, $0188, $1CEC, $0188, $0188, $0188 +dw $0188, $0188, $1DC9, $0188, $1DCA, $0188, $1DCB, $0188 +dw $1DCC, $0188, $1D86, $0188, $0188, $0188, $1D6E, $0188 +dw $1D6F, $0188, $1D80, $0188, $1D81 + +dw $4166, $3900 ; VRAM $CC82 | 58 bytes | Horizontal +dw $1CFA, $0188, $1CFB, $0188, $1CFC, $0188, $0188, $0188 +dw $0188, $0188, $1DD9, $0188, $1DDA, $0188, $1DDB, $0188 +dw $1DDC, $0188, $1D96, $0188, $0188, $0188, $1D7E, $0188 +dw $1D7F, $0188, $1D90, $0188, $1D91 + diff --git a/data/playernamestripes_4.asm b/data/playernamestripes_4.asm new file mode 100644 index 0000000..a53fbde --- /dev/null +++ b/data/playernamestripes_4.asm @@ -0,0 +1,25 @@ +dw $2362, $3900 ; VRAM $C446 | 58 bytes | Horizontal +dw $1C48, $0188, $1C49, $0188, $1C4A, $0188, $1C4B, $0188 +dw $1C4C, $0188, $0188, $0188, $0188, $0188, $1CC5, $0188 +dw $1CC6, $0188, $1CC7, $0188, $1CCD, $0188, $1CCE, $0188 +dw $0188, $0188, $1CE8, $0188, $1CE9 + +dw $4362, $3900 ; VRAM $C486 | 58 bytes | Horizontal +dw $1C58, $0188, $1C59, $0188, $1C5A, $0188, $1C5B, $0188 +dw $1C5C, $0188, $0188, $0188, $0188, $0188, $1CD5, $0188 +dw $1CD6, $0188, $1CD7, $0188, $1CDD, $0188, $1CDE, $0188 +dw $0188, $0188, $1CF8, $0188, $1CF9 + +dw $6362, $3900 ; VRAM $C4C6 | 58 bytes | Horizontal +dw $1C60, $0188, $1C61, $0188, $1C62, $0188, $1C63, $0188 +dw $1C64, $0188, $0188, $0188, $0188, $0188, $1CCF, $0188 +dw $1CE5, $0188, $1CE6, $0188, $1CE7, $0188, $1CED, $0188 +dw $0188, $0188, $1D00, $0188, $1D01 + + +dw $8362, $3900 ; VRAM $C506 | 58 bytes | Horizontal +dw $1C70, $0188, $1C71, $0188, $1C72, $0188, $1C73, $0188 +dw $1C74, $0188, $0188, $0188, $0188, $0188, $1CDF, $0188 +dw $1CF5, $0188, $1CF6, $0188, $1CF7, $0188, $1CFD, $0188 +dw $0188, $0188, $1D10, $0188, $1D11 + diff --git a/data/smallchars.2bpp b/data/smallchars.2bpp new file mode 100644 index 0000000..8cda2ee Binary files /dev/null and b/data/smallchars.2bpp differ diff --git a/data/text_unscramble1.bin b/data/text_unscramble1.bin deleted file mode 100644 index 161009c..0000000 Binary files a/data/text_unscramble1.bin and /dev/null differ diff --git a/data/text_unscramble2.bin b/data/text_unscramble2.bin deleted file mode 100644 index dc4632b..0000000 Binary files a/data/text_unscramble2.bin and /dev/null differ diff --git a/decompresseditemgraphics.asm b/decompresseditemgraphics.asm new file mode 100644 index 0000000..374f148 --- /dev/null +++ b/decompresseditemgraphics.asm @@ -0,0 +1,539 @@ +;=================================================================================================== +; 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 ++ + +;=================================================================================================== + +TransferRupeesProperly: + PHP + PHB + + REP #$31 + PHX + PHY + + AND.w #$00FF + SBC.w #$0023 + + XBA + LSR + LSR + LSR + ADC.w #BigDecompressionBuffer+$800 + + BRA TransferItemReceiptToBuffer_using_ExplicitBufferAddress + +;=================================================================================================== + +TransferItemReceiptToBuffer_using_ReceiptID: + PHP : PHB + + REP #$30 + PHX : PHY + +++ AND.w #$00FF + ASL : TAX + + LDA.l BusyItem : BNE + + LDA.l StandingItemGraphicsOffsets,X + BRA .have_address ++ + LDA.l ItemReceiptGraphicsOffsets,X +.have_address + BMI TransferItemReceiptToBuffer_using_ExplicitBufferAddress + +.rom_address + ADC.w #ItemReceiptGraphicsROM + PHK + BRA .continue + +#TransferItemReceiptToBuffer_using_ExplicitBufferAddress: + 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 + +;=================================================================================================== + +TransferItemToVRAM: + 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 $4302 + ADC.w #$0200 + STA.w $4312 + + 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 ItemGFXTarget + STA.w $2116 + + LDX.b #$01 + STX.w $420B + + ADC.w #$0100 + STA.w $2116 + + INX + STX.w $420B + + STZ.w ItemGFXPtr + STZ.w ItemGFXTarget + +.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 $80CFC0,X : PHA : PLB ; bank + LDA.l $80D09F,X : XBA ; high + LDA.l $80D17E,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 + REP #$21 + TYA + ADC.b DecompSize + ORA.w #$8000 + STA.b DecompSize + + SEP #$20 + +.next_nonrepeating + %GetNextByte() + + STA.l DecompBuffer2,X + + INX + + CPY.b DecompSize + BNE .next_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 + 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 + DEY + +.next_word + STA.l DecompBuffer2,X + + INX + INX + + DEY + DEY + BPL .next_word + + INY + BEQ .not_too_far + + DEX + +.not_too_far + SEP #$20 + + LDY.b DecompSaveY + + JMP .next_command + +;--------------------------------------------------------------------------------------------------- + +.copy + JSR .get_next_word + + STY.b DecompSaveY + + TAY + + LDA.b DecompSize + BNE ++ + + DEC.b DecompSize+1 + +++ 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 + +;=================================================================================================== + + diff --git a/dialog.asm b/dialog.asm index 99f25e7..5ee4ec4 100644 --- a/dialog.asm +++ b/dialog.asm @@ -114,26 +114,45 @@ FreeDungeonItemNotice: + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) - BRA .dungeon + JMP .dungeon + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ %CopyDialog(Notice_SmallKeyOf) LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys BRA .dungeon - + + + : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal + LDA.w ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal # + CMP.b #$B7 : !BGE + + %CopyDialog(Notice_Crystal) + JMP .crystal + + JMP .skip ; it's not something we are going to give a notice for .dungeon LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.w ScratchBufferV - AND.b #$0F ; looking at low bits only + AND.b #$0F STA.w ScratchBufferNV+1 LDA.w ScratchBufferNV : BEQ + LDA.w ScratchBufferNV LDA.b #$0F : !SUB.w ScratchBufferNV+1 : STA.w ScratchBufferNV+1 ; flip the values for small keys + LDA.w ScratchBufferNV+1 + ASL : TAX + REP #$20 + LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers + CMP.w DungeonID : BNE + + BRA .self_notice + .hc_sewers + LDA.w DungeonID : CMP.w #$0003 : BCS + + .self_notice + SEP #$20 + %CopyDialog(Notice_Self) + JMP.w .done + + + SEP #$20 + LDA.w ScratchBufferNV+1 CMP.b #$00 : BNE + ; ...light world %CopyDialog(Notice_LightWorld) : JMP .done + : CMP.b #$01 : BNE + ; ...dark world @@ -161,12 +180,34 @@ FreeDungeonItemNotice: + : CMP.b #$0C : BNE + ; ...desert palace %CopyDialog(Notice_Desert) : JMP .done + : CMP.b #$0D : BNE + ; ...eastern palace - %CopyDialog(Notice_Eastern) : BRA .done + %CopyDialog(Notice_Eastern) : JMP .done + : CMP.b #$0E : BNE + ; ...hyrule castle - %CopyDialog(Notice_Castle) : BRA .done + %CopyDialog(Notice_Castle) : JMP .done + : CMP.b #$0F : BNE + ; ...sewers %CopyDialog(Notice_Sewers) + + JMP .done + + .crystal + LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer + LDA.w ScratchBufferV + AND.b #$0F ; looking at low bits only + CMP.b #$00 : BNE + + %CopyDialog(Notice_Six) : JMP .done + + : CMP.b #$01 : BNE + + %CopyDialog(Notice_One) : JMP .done + + : CMP.b #$02 : BNE + + %CopyDialog(Notice_Five) : JMP .done + + : CMP.b #$03 : BNE + + %CopyDialog(Notice_Seven) : JMP .done + + : CMP.b #$04 : BNE + + %CopyDialog(Notice_Two) : JMP .done + + : CMP.b #$05 : BNE + + %CopyDialog(Notice_Four) : JMP .done + + : CMP.b #$06 : BNE + + %CopyDialog(Notice_Three) : JMP .done + + + .done STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer @@ -360,7 +401,7 @@ RTL ;--------------------------------------------------------------------------------------------------- AgahnimAsksAboutPed: - LDA.l InvincibleGanon + LDA.l GanonVulnerableMode CMP.b #$06 : BNE .vanilla LDA.l OverworldEventDataWRAM+$80 ; check ped flag @@ -371,7 +412,7 @@ AgahnimAsksAboutPed: STA.w TextID .vanilla - JML $05FA8E ; Sprite_ShowMessageMinimal + JML $85FA8E ; Sprite_ShowMessageMinimal ;-------------------------------------------------------------------------------- Main_ShowTextMessage_Alt: ; Are we in text mode? If so then end the routine. @@ -422,24 +463,24 @@ Main_ShowTextMessage_Alt_already_in_text_mode: RTL CalculateSignIndex: - ; for the big 1024x1024 screens we are calculating link's effective - ; screen area, as though the screen was 4 different 512x512 screens. - ; And we do this in a way that will likely give the right value even - ; with major glitches. +; for the big 1024x1024 screens we are calculating link's effective +; screen area, as though the screen was 4 different 512x512 screens. +; And we do this in a way that will likely give the right value even +; with major glitches. - LDA.b OverworldIndex : ASL A : TAY ;what we wrote over +LDA.b OverworldIndex : ASL A : TAY ;what we wrote over - LDA.w OWScreenSize : BEQ .done ; If a small map, we can skip these calculations. +LDA.w OWScreenSize : BEQ .done ; If a small map, we can skip these calculations. - LDA.b LinkPosY+1 : AND.w #$0002 : ASL #2 : EOR.b OverworldIndex : AND.w #$0008 : BEQ + - TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen. - + +LDA.b LinkPosY+1 : AND.w #$0002 : ASL #2 : EOR.b OverworldIndex : AND.w #$0008 : BEQ + +TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen. ++ - LDA.b LinkPosX+1 : AND.w #$0002 : LSR : EOR.b OverworldIndex : AND.w #$0001 : BEQ + - TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen. - + - ; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash: - TYA : AND.w #$00FF : TAY +LDA.b LinkPosX+1 : AND.w #$0002 : LSR : EOR.b OverworldIndex : AND.w #$0001 : BEQ + +TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen. ++ +; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash: +TYA : AND.w #$00FF : TAY .done RTL @@ -463,7 +504,7 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_Alt: ; Make sure that the sprite is facing towards the player, otherwise ; talking can't happen. (What sprites actually use this???) - LDA.l $05E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other + LDA.l $85E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other PHY @@ -471,10 +512,10 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_Alt: LDY.w TextID+1 ; Check what room we're in so we know which npc we're talking to - LDA.b RoomIndex - CMP.b #$05 : BEQ .SahasrahlaDialogs - CMP.b #$1C : BEQ .BombShopGuyDialog - BRA .SayNothing + LDA.b RoomIndex + CMP.b #$05 : BEQ .SahasrahlaDialogs + CMP.b #$1C : BEQ .BombShopGuyDialog + BRA .SayNothing .SahasrahlaDialogs REP #$20 : LDA.l MapReveal_Sahasrahla : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20 @@ -520,7 +561,7 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage: ; Make sure that the sprite is facing towards the player, otherwise ; talking can't happen. (What sprites actually use this???) - LDA.l $05E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other + LDA.l $85E1A3, X : PLX : CMP.b LinkDirection : BNE .not_facing_each_other PLA : XBA : PLA diff --git a/doorframefixes.asm b/doorframefixes.asm index 4e73ab2..1c7648a 100644 --- a/doorframefixes.asm +++ b/doorframefixes.asm @@ -8,7 +8,7 @@ StoreLastOverworldDoorID: TXA : INC STA.l PreviousOverworldDoor - LDA.l $1BBB73, X : STA.w EntranceIndex + LDA.l $9BBB73, X : STA.w EntranceIndex RTL ;-------------------------------------------------------------------------------- diff --git a/dungeondrops.asm b/dungeondrops.asm index aaeb8f7..6abf178 100644 --- a/dungeondrops.asm +++ b/dungeondrops.asm @@ -1,9 +1,326 @@ ;================================================================================ ; Dungeon & Boss Drop Fixes ;-------------------------------------------------------------------------------- -DropSafeDungeon: - LDA.w DungeonID : CMP.b #$08 : BEQ + - LDA.l $01C6FC, X : JML Sprite_SpawnFallingItem - + +SpawnDungeonPrize: + PHX : PHB + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w ItemReceiptID + TAX + LDA.b #$29 : LDY.b #$06 + + JSL.l AddAncillaLong + BCS .failed_spawn + LDA.w ItemReceiptID + STA.w AncillaGet,X : STA.w SpriteID,X + JSR.w AddDungeonPrizeAncilla + .failed_spawn + PLB : PLX +RTL + +AddDungeonPrizeAncilla: + LDY.w ItemReceiptID + STZ.w AncillaVelocityY,X + STZ.w AncillaVelocityX,X + STZ.w AncillaGeneral,X + STZ.w $0385,X + STZ.w $0C54,X + + LDA.b #$D0 : STA.w AncillaVelocityZ,X + LDA.b #$80 : STA.w AncillaZCoord,X + LDA.b #$09 : STA.w AncillaTimer,X + LDA.b #$00 : STA.w $0394,X + LDA.w AncillaGet,X : STA.w ItemReceiptID + LDA.w DungeonID : CMP.b #$14 : BNE .not_hera + LDA.b LinkAbsoluteY+1 : AND.b #$FE + INC A + STA.b Scrap01 + STZ.b Scrap00 + LDA.b LinkAbsoluteX+1 : AND.b #$FE + INC A + STA.b Scrap03 + STZ.b Scrap02 + BRA .set_coords_exit + .not_hera + TYA : ASL : TAY + REP #$20 + LDA.w #$0078 + CLC : ADC.b BG2V + STA.b Scrap00 + LDA.w #$0078 + CLC : ADC.b BG2H + STA.b Scrap02 + SEP #$20 + + .set_coords_exit + LDA.b Scrap00 : STA.w AncillaCoordYLow,X + LDA.b Scrap01 : STA.w AncillaCoordYHigh,X + LDA.b Scrap02 : STA.w AncillaCoordXLow,X + LDA.b Scrap03 : STA.w AncillaCoordXHigh,X +RTS + +PrepPrizeTile: + PHA : PHX : PHY + LDA.w AncillaGet, X + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID,X + JSL.l TransferItemReceiptToBuffer_using_ReceiptID + PLY : PLX : PLA +RTL + +SetItemPose: + PHA + LDA.w DungeonID : BMI .one_handed + LDA.w RoomItemsTaken : BIT.b #$80 : BNE + + .one_handed + PLA + JML $8799F2 + + + JSR.w CrystalOrPendantBehavior : BCC .one_handed + .two_handed + PLA +JML $8799EE ; cool pose + +SetPrizeCoords: + PHX : PHY + STZ.b Scrap03 + LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ + + .regular_coords + PLY : PLX + LDY.w AncillaGet,X + RTL + + + JSR.w CrystalOrPendantBehavior : BCC .regular_coords + PLY : PLX + LDY.b #$20 ; Treat as crystal +RTL + +SetCutsceneFlag: +; Out: c - Cutscene flag $02 if set, $01 if unset. + PHX + LDY.b #$01 ; wrote over + LDA.w DungeonID : BMI .no_cutscene + LDA.w RoomItemsTaken : BIT #$80 : BNE .dungeon_prize + .no_cutscene + PLX + CLC + RTL + .dungeon_prize + LDA.w ItemReceiptID : TAX + LDA.l InventoryTable_properties,X : BPL .no_cutscene + PLX + SEC +RTL + +AnimatePrizeCutscene: + LDA.w ItemReceiptMethod : CMP.b #$03 : BNE + + JSR.w CrystalOrPendantBehavior : BCC + + LDA.w DungeonID : BMI + + LDA.w RoomItemsTaken : BIT #$80 : BEQ + + SEC + RTL + + + CLC +RTL + +PrizeDropSparkle: + LDA.w AncillaID,X : CMP.b #$29 : BNE .no_sparkle + JSR.w CrystalOrPendantBehavior : BCC .no_sparkle + SEC + RTL + .no_sparkle + CLC +RTL + +HandleDropSFX: + LDA.w RoomItemsTaken : BIT #$80 : BEQ .no_sound + JSR.w CrystalOrPendantBehavior : BCC .no_sound + SEC + RTL + .no_sound + CLC +RTL + +HandleCrystalsField: + TAX + LDA.w ItemReceiptID : CMP.b #$20 : BNE .not_crystal + TXA + STA.l CrystalsField + RTL + .not_crystal +RTL + +MaybeKeepLootID: + PHA + LDA.w DungeonID : BMI .no_prize + LDA.w RoomItemsTaken : BIT #$80 : BNE .prize + .no_prize + STZ.w ItemReceiptID + STZ.w ItemReceiptPose + PLA + RTL + .prize + STZ.w ItemReceiptPose + PLA +RTL + +CheckSpawnPrize: +; In: A - DungeonID +; Out: c - Spawn prize if set + REP #$20 + LDX.w DungeonID + LDA.l DungeonItemMasks,X : AND.l DungeonsCompleted : BEQ .spawn + SEP #$20 + CLC + RTL + .spawn + SEP #$21 +RTL + +CheckDungeonCompletion: + LDX.w DungeonID + REP #$20 + LDA.l DungeonItemMasks,X : AND.l DungeonsCompleted + 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 + PLX + SEC + RTL + .dont_wait + PLX + CLC +RTL + +PrepPrizeOAMCoordinates: + PHX : PHY + LDY.w AncillaLayer,X + + LDA.w $F67F,Y : STA.b $65 + STZ.b $64 + + LDA.w AncillaCoordYLow,X : STA.b Scrap00 + LDA.w AncillaCoordYHigh,X : STA.b Scrap01 + LDA.w AncillaCoordXLow,X : STA.b Scrap02 + LDA.w AncillaCoordXHigh,X : STA.b Scrap03 + + REP #$20 + LDA.b Scrap00 + SEC : SBC.w $0122 + STA.b Scrap00 + + LDA.b Scrap02 + SEC : SBC.w $011E + STA.b Scrap02 + STA.b Scrap04 + + REP #$20 + LDA.w $029E,X + AND.w #$00FF + STA.b $72 + + LDA.b $00 + STA.b $06 + SEC + SBC.b $72 + STA.b $00 + + SEP #$20 + TXY + LDA.w AncillaGet,X : TAX + LDA.l SpriteProperties_chest_width,X : BNE .wide + TYX + LDA.w AncillaID,X : CMP.b #$3E : BEQ .rising_crystal + REP #$20 + LDA.b Scrap00 + CLC : ADC.w #$0008 + STA.b Scrap08 + LDA.b Scrap02 + CLC : ADC.w #$0004 + STA.b Scrap02 : STA.b Scrap0A + BRA .wide + .rising_crystal + REP #$20 + LDA.b Scrap00 + CLC : ADC.w #$0008 : STA.b Scrap08 + LDA.b Scrap02 : STA.b Scrap0A + .wide + PLY : PLX + SEP #$20 +RTL + +PrepPrizeShadow: + PHX + LDA.w ItemReceiptID : TAX + LDA.l SpriteProperties_standing_width,X : BNE .wide + LDA.b Scrap02 + SEC : SBC.b #$04 + STA.b Scrap02 + .wide + LDA.b #$20 : STA.b Scrap04 ; What we wrote over + PLX +RTL + +CheckPoseItemCoordinates: + PHX + LDA.w ItemReceiptPose : BEQ .done + BIT.b #$02 : BEQ .done + LDA.w AncillaGet,X : TAX + LDA.l SpriteProperties_chest_width,X : BNE .done + LDA.b Scrap02 + CLC : ADC.b #$04 + STA.b Scrap02 + .done + PLX + LDA.w AncillaGet,X + TAX +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 + PLX : PLA + CLC + RTS + .crystal_behavior + PLX : PLA + SEC +RTS + +CheckDungeonWorld: +; Maintain vanilla door opening behavior with dungeon prizes + TXA : CMP.b #$05 : BCS .dark_world + REP #$02 + RTL + .dark_world + SEP #$02 RTL -;-------------------------------------------------------------------------------- diff --git a/elder.asm b/elder.asm index f66817d..e35598a 100644 --- a/elder.asm +++ b/elder.asm @@ -2,7 +2,7 @@ NewElderCode: { LDA.b OverworldIndex : CMP.b #$1B : BEQ .newCodeContinue ;Restore Jump we can keep the RTL so JML -JML $05F0CD +JML $85F0CD .newCodeContinue PHB : PHK : PLB LDA.b #$07 : STA.w SpriteOAMProp, X ; Palette @@ -42,7 +42,7 @@ RTL { REP #$20 LDA.l GoalItemRequirement : BEQ .despawn - LDA.l InvincibleGanon : AND.w #$00FF : CMP.w #$0005 : BEQ .despawn + LDA.l GanonVulnerableMode : AND.w #$00FF : CMP.w #$0005 : BEQ .despawn LDA.l TurnInGoalItems : AND.w #$00FF : BNE + .despawn SEP #$20 diff --git a/endingsequence.asm b/endingsequence.asm deleted file mode 100644 index 83f506b..0000000 --- a/endingsequence.asm +++ /dev/null @@ -1,22 +0,0 @@ -;================================================================================ -; Dialog Pointer Override -;-------------------------------------------------------------------------------- -EndingSequenceTableOverride: - PHY - PHX - TYX - LDA.l EndingSequenceText, X - PLX - STA.w $1008, X - PLY -RTL -;-------------------------------------------------------------------------------- -EndingSequenceTableLookupOverride: - PHY - PHX - TYX - LDA.l EndingSequenceText, X : AND.w #$00FF - PLX - PLY -RTL -;-------------------------------------------------------------------------------- diff --git a/enemy_adjustments.asm b/enemy_adjustments.asm index ee33204..f126791 100644 --- a/enemy_adjustments.asm +++ b/enemy_adjustments.asm @@ -20,7 +20,7 @@ RTL RTL ;-------------------------------------------------------------------------------- NewFireBarDamage: - LDA.w $00EE : CMP.w SpriteLayer, X : BNE .NotSameLayer + LDA.b LinkLayer : CMP.w SpriteLayer, X : BNE .NotSameLayer JSL Sprite_AttemptDamageToPlayerPlusRecoilLong RTL .NotSameLayer diff --git a/entrances.asm b/entrances.asm index f269178..cdbf7a8 100644 --- a/entrances.asm +++ b/entrances.asm @@ -14,7 +14,7 @@ LockAgahnimDoors: JSR.w LockAgahnimDoorsCore : BEQ .unlock PHX : PHY SEP #$30 - JSL.l CheckEnoughCrystalsForTower + JSL.l CheckTowerOpen REP #$30 PLY : PLX !BGE .crystalOrUnlock @@ -29,7 +29,7 @@ LockAgahnimDoors: LDA.w #$0001 : RTL ;Keep the door locked ++ SEP #$30 - JSL $099B6F ;Add tower break seal + JSL $899B6F ;Add tower break seal REP #$30 LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy RTL @@ -142,11 +142,11 @@ JML.l AllowStartFromExitReturn .doStart - LDA.l $028481, X ;Module_LocationMenu_starting_points + LDA.l $828481, X ;Module_LocationMenu_starting_points ASL : TAX - LDA.l $02D8D2, X : STA.b RoomIndex - LDA.l $02D8D3, X : STA.b RoomIndex+1 + LDA.l $82D8D2, X : STA.b RoomIndex + LDA.l $82D8D3, X : STA.b RoomIndex+1 ; Go to pre-overworld mode LDA.b #$08 : STA.b GameMode @@ -155,6 +155,7 @@ JML.l AllowStartFromExitReturn STZ.b SubSubModule STZ.w DeathReloadFlag STZ.w RespawnFlag + INC.w UpdateHUD JSL Equipment_SearchForEquippedItemLong JSL HUD_RebuildLong2 @@ -165,9 +166,9 @@ RTL CheckHole: LDX.w #$0024 .nextHoleClassic - LDA.b Scrap00 : CMP.l $1BB800, X + LDA.b Scrap00 : CMP.l $9BB800, X BNE .wrongMap16Classic - LDA.b OverworldIndex : CMP.l $1BB826, X + LDA.b OverworldIndex : CMP.l $9BB826, X BEQ .matchedHoleClassic .wrongMap16Classic DEX #2 : BPL .nextHoleClassic diff --git a/events.asm b/events.asm index 3fa3da2..21d31ac 100644 --- a/events.asm +++ b/events.asm @@ -3,8 +3,13 @@ OnPrepFileSelect: LDA.b #$06 : STA.b NMISTRIPES ; thing we wrote over RTL + + PHA : PHX + REP #$10 JSL.l LoadAlphabetTilemap - JML.l LoadFullItemTiles + JSL.l LoadFullItemTiles + SEP #$10 + PLX : PLA +RTL ;-------------------------------------------------------------------------------- OnDrawHud: JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter @@ -17,6 +22,25 @@ JML.l ReturnFromOnDrawHud OnDungeonEntrance: STA.l PegColor ; thing we wrote over JSL MaybeFlagDungeonTotalsEntrance + INC.w UpdateHUD +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: @@ -29,16 +53,17 @@ RTL ;-------------------------------------------------------------------------------- OnDungeonExit: PHA : PHP - SEP #$20 ; set 8-bit accumulator - JSL.l SQEGFix + SEP #$20 ; set 8-bit accumulator + JSL.l SQEGFix PLP : PLA STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over PHA : PHP - JSL.l HUD_RebuildLong - JSL.l FloodGateResetInner - JSL.l SetSilverBowMode + INC.w UpdateHUD + JSL.l HUD_RebuildLong + JSL.l FloodGateResetInner + JSL.l SetSilverBowMode PLP : PLA RTL ;-------------------------------------------------------------------------------- @@ -77,25 +102,24 @@ 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 JML.l IncrementAgahnim2Sword ;-------------------------------------------------------------------------------- OnFileCreation: - ; Copy initial SRAM state from ROM to cart SRAM - ; If the inital SRAM table is move these addresses must be changed PHB - LDA.w #$03D7 ; \ - LDX.w #$B000 ; | Copies from beginning of inital sram table up to file name - LDY.w #$0000 ; | (exclusively) - MVN !SRAMBank, !SRAMTableBank ; / - ; Skip file name and validity value - LDA.w #$010C ; \ - LDX.w #$B3E3 ; | Rando-Specific Assignments & Game Stats block - LDY.w #$03E3 ; | - MVN !SRAMBank, !SRAMTableBank ; / + LDA.w #$03D7 + LDX.w #$B000 + LDY.w #$0000 + MVN CartridgeSRAM>>16, InitSRAMTable>>16 + ; Skip file name and validity value + LDA.w #$010C + LDX.w #$B3E3 + LDY.w #$03E3 + MVN CartridgeSRAM>>16, InitSRAMTable>>16 PLB - ; resolve instant post-aga if standard + ; Resolve instant post-aga if standard SEP #$20 LDA.l InitProgressIndicator : BIT #$80 : BEQ + LDA.b #$00 : STA.l ProgressIndicatorSRAM ; set post-aga after zelda rescue @@ -103,13 +127,13 @@ OnFileCreation: + REP #$20 - ; Set validity value and do some cleanup. Jump to checksum. + ; Set validity value and do some cleanup. Jump to checksum done. LDA.w #$55AA : STA.l FileValiditySRAM - JSL.l WriteNewFileChecksum + JSL.l WriteSaveChecksumAndBackup STZ.b Scrap00 STZ.b Scrap01 -JML.l InitializeSaveFile_done +JML.l InitializeSaveFile_checksum_done ;-------------------------------------------------------------------------------- OnFileLoad: REP #$10 ; set 16 bit index registers @@ -198,6 +222,7 @@ OnOWTransition: PHP SEP #$20 ; set 8-bit accumulator LDA.b #$FF : STA.l RNGLockIn ; clear lock-in + INC.w UpdateHUD PLP RTL ;-------------------------------------------------------------------------------- @@ -216,23 +241,47 @@ PreItemGet: RTL ;-------------------------------------------------------------------------------- PostItemGet: - RTL ;-------------------------------------------------------------------------------- PostItemAnimation: + PHB LDA.b #$00 : STA.l BusyItem ; mark item as finished - LDA.l TextBoxDefer : BEQ + - STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer - JSL.l Main_ShowTextMessage_Alt - LDA.b #$00 : STA.l TextBoxDefer + STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer + JSL.l Main_ShowTextMessage_Alt + LDA.b #$00 : STA.l TextBoxDefer + - LDA.w ItemReceiptMethod : CMP.b #$01 : BNE + - LDA.b LinkDirection : BEQ + - JSL.l IncrementChestTurnCounter + LDA.b LinkDirection : BEQ + + JSL.l IncrementChestTurnCounter + + REP #$20 + PEA.w $7E00 + PLB : PLB + LDA.w TransparencyFlag : BNE .SP05 + LDA.l PalettesCustom_off_black+$00 : STA.w PaletteBuffer+$0170 : STA.w PaletteBufferAux+$0170 + LDA.l PalettesCustom_off_black+$02 : STA.w PaletteBuffer+$0172 : STA.w PaletteBufferAux+$0172 + STA.w PaletteBuffer+$0174 : STA.w PaletteBufferAux+$0174 + STA.w PaletteBuffer+$0176 : STA.w PaletteBufferAux+$0176 + STA.w PaletteBuffer+$0178 : STA.w PaletteBufferAux+$0178 + STA.w PaletteBuffer+$017A : STA.w PaletteBufferAux+$017A + STA.w PaletteBuffer+$017C : STA.w PaletteBufferAux+$017C + STA.w PaletteBuffer+$017E : STA.w PaletteBufferAux+$017E + BRA .done + .SP05 + LDA.l PalettesCustom_off_black+$00 : STA.w PaletteBuffer+$01B0 : STA.w PaletteBufferAux+$01B0 + LDA.l PalettesCustom_off_black+$02 : STA.w PaletteBuffer+$01B2 : STA.w PaletteBufferAux+$01B2 + STA.w PaletteBuffer+$01B4 : STA.w PaletteBufferAux+$01B4 + STA.w PaletteBuffer+$01B6 : STA.w PaletteBufferAux+$01B6 + STA.w PaletteBuffer+$01B8 : STA.w PaletteBufferAux+$01B8 + STA.w PaletteBuffer+$01BA : STA.w PaletteBufferAux+$01BA + STA.w PaletteBuffer+$01BC : STA.w PaletteBufferAux+$01BC + STA.w PaletteBuffer+$01BE : STA.w PaletteBufferAux+$01BE + .done + INC.b NMICGRAM + SEP #$20 STZ.w ItemReceiptMethod : LDA.w AncillaGet, X ; thing we wrote over to get here + PLB RTL ;-------------------------------------------------------------------------------- diff --git a/externalhooks.asm b/externalhooks.asm index c3f751e..aec6a49 100644 --- a/externalhooks.asm +++ b/externalhooks.asm @@ -1,4 +1,4 @@ -org $298000 ; 0x148000 +org $A98000 ; 0x148000 Ext_OnFileCreate: ;x RTL : RTL : RTL : RTL : RTL Ext_OnFileLoad: ;x immediately after load diff --git a/failure.asm b/failure.asm index d5e07b8..6a6776a 100644 --- a/failure.asm +++ b/failure.asm @@ -1,3 +1,18 @@ +CheckZSNES: + SEP #$28 + LDA.b #$FF + CLC + ADC.b #$FF + CMP.b #$64 + REP #$28 + BEQ .zsnes + LDA.w #$01FF : TCS ; thing we wrote over - initialize stack + JML ReturnCheckZSNES +.zsnes + JML DontUseZSNES + +;=================================================================================================== + pushtable table "data/bsodencode.txt" diff --git a/fastcredits.asm b/fastcredits.asm index 4d39a83..f2db46f 100644 --- a/fastcredits.asm +++ b/fastcredits.asm @@ -1,21 +1,51 @@ +FastCreditsActive = $50 + +;=================================================================================================== + + +FlagFastCredits: + LDA.b #$40 + TRB.b FastCreditsActive + + AND.b Joy1B_All + TSB.b FastCreditsActive + + LDA.b #$20 + AND.b Joy1A_New + EOR.b FastCreditsActive + STA.b FastCreditsActive + + LDA.b FastCreditsActive + AND.b #$60 + BEQ .slow + + LDA.b #$01 + TSB.b FastCreditsActive + +.slow + LDA.b $11 + ASL + TAX + + RTL + ;=================================================================================================== FastCreditsCutsceneTimer: - BIT.b Joy1B_All-1 : BVC .slow - - LDA.w #$0001 : STA.b $50 - LDA.b ScrapBufferBD+$0B - CLC - ADC.w #$0004 + INC + + JSR IsFastCredits + BCC .slow + + INC + INC + INC + AND.w #$FFFE - STA.b ScrapBufferBD+$0B - SEP #$20 - RTL - .slow - INC.b ScrapBufferBD+$0B + STA.b ScrapBufferBD+$0B SEP #$20 RTL @@ -49,18 +79,20 @@ FastCreditsCutsceneScrollY: FastCreditsCutsceneScroll: LDA.w $00E2,Y - CMP.l $0EC308,X ; compare to target + CMP.l $8EC308,X ; compare to target ROL.b Scrap00 ; put carry in here - LDA.l $0EC348,X ; get movement + LDA.l $8EC348,X ; get movement BPL ++ ; if positive, leave saved carry alone INC.b Scrap00 ; otherwise, flip it ++ ROR.b Scrap00 ; recover carry BCC ++ ; scroll if carry not set + LDA.w #$0000 -++ BIT.b Joy1B_All-1 : BVC .slow ; check for X held +++ JSR IsFastCredits + BCC .slow AND.w #$FFFF ; get sign of A BPL .positive @@ -77,16 +109,9 @@ FastCreditsCutsceneScroll: ASL ASL - - .slow RTS - - - - - FastCreditsCutsceneUnderworldX: JSR FastCreditsCutsceneScrollX CLC @@ -106,19 +131,27 @@ FastCreditsCutsceneUnderworldY: FastTextScroll: - LDA.b FrameCounter - BIT.b Joy1B_All-1 : BVC .slow + LDA.b FrameCounter + SEP #$10 + JSR IsFastCredits + BCC .slow AND.w #$0000 + REP #$10 RTL .slow AND.w #$0003 + REP #$10 RTL DumbFlagForMSU: STA.l CurrentWorld - STZ.b $50 + STZ.b FastCreditsActive RTL +IsFastCredits: + LDY.b FastCreditsActive + CPY.b #$20 + RTS diff --git a/fastrom.asm b/fastrom.asm new file mode 100644 index 0000000..ee2510f --- /dev/null +++ b/fastrom.asm @@ -0,0 +1,6591 @@ +;=================================================================================================== + +; this guy here is removed to make space for a small rewrite +; org $0CC2A8 : db $8C +; because fast rom is just too fast! and the title card relies on lag for timing + +org $8CC2A5 +TitleCardFix: + ; thankfully, the title screen song ends instead of loops + ; so we'll just wait for it to end + LDA.w $2140 + BNE .exit + + LDA.b #$14 + STA.b $10 + + STZ.b $11 + STZ.b $22 + +.exit + JML $8CC3D2 + +warnpc $8CC2B6 + +;=================================================================================================== +; THESE MOTHERFUCKERS +; This routine relies on a PLB followed by a BMI to clear the N flag +; which means it doesn't work properly in fastrom. +; There is no way to fix this in vanilla space without affecting other stuff +; so it stays in slow rom. +; That is its punishment. +;=================================================================================================== +; These are the vanilla values, but they're explicitly set for reference +org $01DB3A : db $06 +org $07C1CB : db $06 +org $1BBF13 : db $06 +org $1BC1CB : db $06 + +;=================================================================================================== + +; Similar problem, except in vanilla the PLB causes the branch to always fail +; so I'll just make it always fail here too +org $1D875C + BRA ++ : ++ + +;=================================================================================================== +; MVNs (annoying to parse from the disassembly) +;=================================================================================================== +org $06BB6A : db $86 +org $09F809 : db $89 +org $09F861 : db $89 +org $09F862 : db $89 +org $0DFA9E : db $8D + +;=================================================================================================== + +org $008059 : db $80 +org $008099 : db $8C +org $00809A : db $8C +org $00809B : db $8C +org $00809C : db $8C +org $00809D : db $8C +org $00809E : db $82 +org $00809F : db $82 +org $0080A0 : db $82 +org $0080A1 : db $82 +org $0080A2 : db $82 +org $0080A3 : db $82 +org $0080A4 : db $82 +org $0080A5 : db $82 +org $0080A6 : db $82 +org $0080A7 : db $80 +org $0080A8 : db $82 +org $0080A9 : db $82 +org $0080AA : db $82 +org $0080AB : db $89 +org $0080AC : db $82 +org $0080AD : db $8C +org $0080AE : db $82 +org $0080AF : db $82 +org $0080B0 : db $89 +org $0080B1 : db $82 +org $0080B2 : db $82 +org $0080B3 : db $8E +org $0080B4 : db $82 +org $008867 : db $8F +org $008871 : db $8F +org $00890A : db $99 +org $00891C : db $9A +org $00892E : db $9B +org $00893A : db $9A +org $008957 : db $80 +org $008A02 : db $90 +org $008E58 : db $8A +org $00938F : db $8C +org $009391 : db $8C +org $009392 : db $8C +org $009393 : db $8C +org $009394 : db $8C +org $009395 : db $98 +org $00CFC0 : db $91 +org $00CFC1 : db $91 +org $00CFC2 : db $91 +org $00CFC3 : db $91 +org $00CFC4 : db $91 +org $00CFC5 : db $91 +org $00CFC6 : db $91 +org $00CFC7 : db $91 +org $00CFC8 : db $91 +org $00CFC9 : db $91 +org $00CFCA : db $91 +org $00CFCB : db $91 +org $00CFCC : db $91 +org $00CFCD : db $91 +org $00CFCE : db $91 +org $00CFCF : db $91 +org $00CFD0 : db $91 +org $00CFD1 : db $92 +org $00CFD2 : db $92 +org $00CFD3 : db $92 +org $00CFD4 : db $92 +org $00CFD5 : db $92 +org $00CFD6 : db $92 +org $00CFD7 : db $92 +org $00CFD8 : db $92 +org $00CFD9 : db $92 +org $00CFDA : db $92 +org $00CFDB : db $92 +org $00CFDC : db $92 +org $00CFDD : db $92 +org $00CFDE : db $92 +org $00CFDF : db $92 +org $00CFE0 : db $92 +org $00CFE1 : db $92 +org $00CFE2 : db $92 +org $00CFE3 : db $92 +org $00CFE4 : db $92 +org $00CFE5 : db $92 +org $00CFE6 : db $92 +org $00CFE7 : db $92 +org $00CFE8 : db $92 +org $00CFE9 : db $92 +org $00CFEA : db $92 +org $00CFEB : db $92 +org $00CFEC : db $93 +org $00CFED : db $93 +org $00CFEE : db $93 +org $00CFEF : db $93 +org $00CFF0 : db $93 +org $00CFF1 : db $93 +org $00CFF2 : db $93 +org $00CFF3 : db $93 +org $00CFF4 : db $93 +org $00CFF5 : db $93 +org $00CFF6 : db $93 +org $00CFF7 : db $93 +org $00CFF8 : db $93 +org $00CFF9 : db $93 +org $00CFFA : db $93 +org $00CFFB : db $93 +org $00CFFC : db $93 +org $00CFFD : db $93 +org $00CFFE : db $93 +org $00CFFF : db $93 +org $00D000 : db $93 +org $00D001 : db $93 +org $00D002 : db $93 +org $00D003 : db $93 +org $00D004 : db $93 +org $00D005 : db $93 +org $00D006 : db $93 +org $00D007 : db $93 +org $00D008 : db $94 +org $00D009 : db $94 +org $00D00A : db $94 +org $00D00B : db $94 +org $00D00C : db $94 +org $00D00D : db $94 +org $00D00E : db $94 +org $00D00F : db $94 +org $00D010 : db $94 +org $00D011 : db $94 +org $00D012 : db $94 +org $00D013 : db $94 +org $00D014 : db $94 +org $00D015 : db $94 +org $00D016 : db $94 +org $00D017 : db $94 +org $00D018 : db $94 +org $00D019 : db $94 +org $00D01A : db $94 +org $00D01B : db $94 +org $00D01C : db $94 +org $00D01D : db $94 +org $00D01E : db $94 +org $00D01F : db $94 +org $00D020 : db $94 +org $00D021 : db $94 +org $00D022 : db $94 +org $00D023 : db $94 +org $00D024 : db $94 +org $00D025 : db $94 +org $00D026 : db $94 +org $00D027 : db $94 +org $00D028 : db $94 +org $00D029 : db $94 +org $00D02A : db $94 +org $00D02B : db $94 +org $00D02C : db $94 +org $00D02D : db $94 +org $00D02E : db $94 +org $00D02F : db $94 +org $00D030 : db $94 +org $00D031 : db $98 +org $00D032 : db $98 +org $00D033 : db $90 +org $00D034 : db $90 +org $00D035 : db $90 +org $00D036 : db $91 +org $00D037 : db $91 +org $00D038 : db $91 +org $00D039 : db $91 +org $00D03A : db $91 +org $00D03B : db $91 +org $00D03C : db $91 +org $00D03D : db $91 +org $00D03E : db $91 +org $00D03F : db $94 +org $00D040 : db $94 +org $00D041 : db $95 +org $00D042 : db $95 +org $00D043 : db $95 +org $00D044 : db $95 +org $00D045 : db $95 +org $00D046 : db $95 +org $00D047 : db $95 +org $00D048 : db $95 +org $00D049 : db $95 +org $00D04A : db $95 +org $00D04B : db $95 +org $00D04C : db $95 +org $00D04D : db $95 +org $00D04E : db $95 +org $00D04F : db $95 +org $00D050 : db $95 +org $00D051 : db $95 +org $00D052 : db $95 +org $00D053 : db $95 +org $00D054 : db $95 +org $00D055 : db $95 +org $00D056 : db $95 +org $00D057 : db $95 +org $00D058 : db $95 +org $00D059 : db $95 +org $00D05A : db $96 +org $00D05B : db $96 +org $00D05C : db $96 +org $00D05D : db $96 +org $00D05E : db $96 +org $00D05F : db $96 +org $00D060 : db $96 +org $00D061 : db $96 +org $00D062 : db $96 +org $00D063 : db $96 +org $00D064 : db $96 +org $00D065 : db $96 +org $00D066 : db $96 +org $00D067 : db $96 +org $00D068 : db $96 +org $00D069 : db $96 +org $00D06A : db $96 +org $00D06B : db $96 +org $00D06C : db $96 +org $00D06D : db $96 +org $00D06E : db $96 +org $00D06F : db $96 +org $00D070 : db $96 +org $00D071 : db $96 +org $00D072 : db $96 +org $00D073 : db $96 +org $00D074 : db $96 +org $00D075 : db $96 +org $00D076 : db $97 +org $00D077 : db $97 +org $00D078 : db $97 +org $00D079 : db $97 +org $00D07A : db $97 +org $00D07B : db $97 +org $00D07C : db $97 +org $00D07D : db $97 +org $00D07E : db $97 +org $00D07F : db $97 +org $00D080 : db $97 +org $00D081 : db $97 +org $00D082 : db $97 +org $00D083 : db $97 +org $00D084 : db $97 +org $00D085 : db $97 +org $00D086 : db $97 +org $00D087 : db $97 +org $00D088 : db $97 +org $00D089 : db $97 +org $00D08A : db $97 +org $00D08B : db $97 +org $00D08C : db $97 +org $00D08D : db $97 +org $00D08E : db $97 +org $00D08F : db $97 +org $00D090 : db $97 +org $00D091 : db $98 +org $00D092 : db $98 +org $00D093 : db $98 +org $00D094 : db $98 +org $00D095 : db $98 +org $00D096 : db $98 +org $00D097 : db $98 +org $00D098 : db $98 +org $00D099 : db $98 +org $00D09A : db $98 +org $00D09B : db $98 +org $00D09C : db $98 +org $00D09D : db $98 +org $00D09E : db $98 +org $00D49B : db $80 +org $00D8B0 : db $80 +org $00D8B9 : db $80 +org $00D8BF : db $80 +org $00D8E3 : db $82 +org $00D8E8 : db $82 +org $00D8F6 : db $82 +org $00D8FE : db $82 +org $00D92C : db $80 +org $00D9C0 : db $80 +org $00D9C6 : db $80 +org $00D9FF : db $80 +org $00DA05 : db $80 +org $00DA72 : db $80 +org $00DA78 : db $80 +org $00DAD7 : db $80 +org $00DB95 : db $87 +org $00DF49 : db $80 +org $00DF52 : db $80 +org $00E3DA : db $98 +org $00E45B : db $9B +org $00E468 : db $9B +org $00EBA8 : db $80 +org $00EC40 : db $80 +org $00EC61 : db $80 +org $00ECB0 : db $80 +org $00ECD1 : db $80 +org $00ED13 : db $80 +org $00ED61 : db $80 +org $00EEDE : db $80 +org $00EF81 : db $80 +org $00F2B4 : db $80 +org $00F2EC : db $80 +org $00F3E5 : db $80 +org $00F423 : db $89 +org $00F5C9 : db $80 +org $00F5DD : db $80 +org $00F5E2 : db $80 +org $00F5E7 : db $80 +org $00F5F0 : db $80 +org $00F5F6 : db $80 +org $00F5FB : db $80 +org $00F612 : db $80 +org $00F626 : db $80 +org $00F62B : db $80 +org $00F630 : db $80 +org $00F639 : db $80 +org $00F63F : db $80 +org $00F644 : db $80 +org $00F818 : db $81 +org $00F82D : db $86 +org $00F831 : db $8D +org $00F839 : db $82 +org $00F83D : db $8D +org $00F847 : db $80 +org $00F84D : db $80 +org $00F88E : db $80 +org $00F88F : db $8D +org $00F890 : db $8E +org $00F891 : db $8A +org $00F892 : db $80 +org $00F893 : db $80 +org $00F894 : db $80 +org $00F895 : db $8A +org $00F896 : db $80 +org $00F897 : db $80 +org $00F898 : db $8A +org $00F899 : db $80 +org $00F89F : db $80 +org $00F8A5 : db $80 +org $00F8AB : db $80 +org $00F8B6 : db $80 +org $00F8B9 : db $82 +org $00F8B9 : db $82 +org $00F8BC : db $80 +org $00F8BC : db $80 +org $00F8BF : db $80 +org $00F8BF : db $80 +org $00F8C2 : db $80 +org $00F8C2 : db $80 +org $00F8C5 : db $80 +org $00F8C5 : db $80 +org $00F8C9 : db $87 +org $00F8E3 : db $80 +org $00F8E7 : db $87 +org $00F8EE : db $80 +org $00F8F1 : db $82 +org $00F8F1 : db $82 +org $00F8F4 : db $80 +org $00F8F4 : db $80 +org $00F8F7 : db $82 +org $00F8F7 : db $82 +org $00F8FA : db $82 +org $00F8FA : db $82 +org $00F8FE : db $8D +org $00F914 : db $8D +org $00F91B : db $8D +org $00F925 : db $8D +org $00F948 : db $80 +org $00F94C : db $82 +org $00F958 : db $82 +org $00F961 : db $80 +org $00F967 : db $80 +org $00F98B : db $80 +org $00F98F : db $89 +org $00FA01 : db $87 +org $00FA05 : db $8E +org $00FE67 : db $80 +org $00FF32 : db $80 +org $00FF95 : db $8B +org $018748 : db $9F +org $01874E : db $9F +org $018829 : db $84 +org $01882F : db $84 +org $018841 : db $9F +org $018847 : db $9F +org $018857 : db $81 +org $01886C : db $81 +org $018932 : db $81 +org $018976 : db $81 +org $01897C : db $81 +org $0189AB : db $81 +org $0189B1 : db $81 +org $0189CF : db $81 +org $0189D5 : db $81 +org $0189E2 : db $81 +org $0189E8 : db $81 +org $018A09 : db $81 +org $019C25 : db $84 +org $01B5AC : db $81 +org $01B5D1 : db $81 +org $01B5DF : db $84 +org $01B5E7 : db $84 +org $01B628 : db $8C +org $01B62F : db $8C +org $01B636 : db $8C +org $01B63D : db $8C +org $01B6C8 : db $9F +org $01B6CE : db $9F +org $01B7FA : db $9F +org $01B800 : db $9F +org $01B853 : db $84 +org $01B859 : db $84 +org $01B8DE : db $81 +org $01C228 : db $81 +org $01C3AA : db $82 +org $01C3C3 : db $82 +org $01C3C9 : db $82 +org $01C414 : db $87 +org $01C41F : db $87 +org $01C470 : db $89 +org $01C49B : db $89 +org $01C4CA : db $89 +org $01C4D6 : db $89 +org $01C4DE : db $89 +org $01C625 : db $81 +org $01C6BA : db $81 +org $01C6C6 : db $81 +org $01C6F8 : db $89 +org $01C741 : db $81 +org $01C745 : db $85 +org $01C75F : db $82 +org $01C765 : db $80 +org $01C7B2 : db $89 +org $01C973 : db $81 +org $01C97A : db $81 +org $01CAB1 : db $80 +org $01CAD2 : db $80 +org $01CB3E : db $80 +org $01CB67 : db $80 +org $01CBAD : db $84 +org $01CC57 : db $80 +org $01CE91 : db $81 +org $01CF3E : db $9C +org $01CF87 : db $81 +org $01CFA8 : db $89 +org $01CFE8 : db $87 +org $01D00A : db $81 +org $01D157 : db $81 +org $01D1DB : db $8D +org $01D1FB : db $9B +org $01D2DD : db $81 +org $01D738 : db $82 +org $01D754 : db $81 +org $01D763 : db $81 +org $01D7AE : db $81 +org $01D7DD : db $81 +org $01D7ED : db $87 +org $01D80A : db $87 +org $01D9F8 : db $81 +org $01DA0B : db $81 +org $01DA58 : db $81 +org $01DB3E : db $89 +org $01E6C2 : db $81 +org $01E6C6 : db $81 +org $01E751 : db $80 +org $01E758 : db $80 +org $01E75F : db $80 +org $01E766 : db $80 +org $01E7AE : db $80 +org $01E7FA : db $81 +org $01E8BD : db $80 +org $01EB66 : db $80 +org $01EB9F : db $9C +org $01EBFB : db $81 +org $01EC0A : db $81 +org $01EC10 : db $81 +org $01EC34 : db $9C +org $01ECE9 : db $82 +org $01ED78 : db $82 +org $01ED9D : db $9C +org $01EE97 : db $8D +org $01EEC2 : db $81 +org $01EEF8 : db $8D +org $01EF00 : db $8D +org $01EF0A : db $81 +org $01EF6E : db $81 +org $01EF79 : db $81 +org $01EF85 : db $80 +org $01EF8F : db $80 +org $01F047 : db $80 +org $01F1A6 : db $81 +org $01F1B1 : db $81 +org $01F1DD : db $80 +org $01F1FB : db $81 +org $01F206 : db $81 +org $01F228 : db $81 +org $01F233 : db $80 +org $01F2FF : db $80 +org $01F34A : db $81 +org $01F3AE : db $80 +org $01F3D7 : db $80 +org $01F402 : db $80 +org $01F453 : db $8D +org $01F476 : db $82 +org $01F497 : db $82 +org $01F4AD : db $80 +org $01F50D : db $82 +org $01F60D : db $81 +org $01F8F5 : db $81 +org $01FF27 : db $82 +org $02801A : db $80 +org $028025 : db $8E +org $028029 : db $9C +org $028049 : db $80 +org $028062 : db $80 +org $02806B : db $80 +org $02806F : db $80 +org $028073 : db $8F +org $028077 : db $80 +org $02807B : db $80 +org $02807F : db $87 +org $028083 : db $80 +org $0280AF : db $8D +org $0280B3 : db $8D +org $0280B7 : db $8D +org $028105 : db $9C +org $028125 : db $8D +org $028129 : db $8D +org $02812D : db $8D +org $02816D : db $8D +org $02817A : db $8F +org $028181 : db $82 +org $028186 : db $80 +org $02818A : db $81 +org $028193 : db $80 +org $0281A6 : db $82 +org $0281DB : db $82 +org $028207 : db $82 +org $02820F : db $81 +org $028231 : db $9C +org $028249 : db $8A +org $028251 : db $89 +org $028255 : db $89 +org $028259 : db $89 +org $028287 : db $87 +org $0282DB : db $82 +org $0282F3 : db $8D +org $02838F : db $80 +org $028393 : db $80 +org $0283A2 : db $80 +org $0283A6 : db $8C +org $0283AA : db $8C +org $0283BC : db $8B +org $0283C6 : db $89 +org $0283D2 : db $80 +org $0283DB : db $89 +org $0283E5 : db $89 +org $02842D : db $82 +org $028461 : db $80 +org $028487 : db $8E +org $028491 : db $80 +org $028495 : db $80 +org $0284A1 : db $82 +org $0284AB : db $82 +org $028505 : db $80 +org $028509 : db $80 +org $028515 : db $82 +org $028547 : db $80 +org $02854F : db $82 +org $028556 : db $82 +org $02855B : db $80 +org $028567 : db $80 +org $02856B : db $8C +org $028574 : db $9B +org $02857C : db $8E +org $028580 : db $80 +org $028587 : db $8B +org $028591 : db $8C +org $0285AD : db $8E +org $0285B8 : db $8E +org $0285D4 : db $80 +org $0285E0 : db $80 +org $0285E4 : db $8C +org $0285ED : db $9B +org $028602 : db $80 +org $028606 : db $80 +org $02860E : db $82 +org $028626 : db $82 +org $02862B : db $80 +org $028633 : db $82 +org $02863A : db $82 +org $028641 : db $8C +org $028648 : db $8C +org $028654 : db $80 +org $02866C : db $8E +org $0286A9 : db $8A +org $0286B7 : db $81 +org $0286BF : db $80 +org $0286CA : db $81 +org $0286D2 : db $81 +org $0286DB : db $81 +org $0286E6 : db $80 +org $02873F : db $87 +org $028743 : db $86 +org $028757 : db $8D +org $02875B : db $8D +org $02875F : db $8A +org $0287A9 : db $87 +org $0287B5 : db $82 +org $0287D3 : db $80 +org $0287D6 : db $82 +org $0287D6 : db $82 +org $0287D9 : db $82 +org $0287D9 : db $82 +org $0287DC : db $82 +org $0287DC : db $82 +org $0287DF : db $82 +org $0287DF : db $82 +org $02883F : db $9C +org $02884C : db $87 +org $02888F : db $87 +org $0288A5 : db $81 +org $0288E3 : db $80 +org $0288ED : db $80 +org $028941 : db $80 +org $028945 : db $81 +org $028949 : db $87 +org $028960 : db $81 +org $028964 : db $80 +org $028968 : db $80 +org $02897C : db $89 +org $028998 : db $82 +org $02899C : db $80 +org $0289A3 : db $80 +org $0289B4 : db $80 +org $0289B8 : db $80 +org $0289C9 : db $80 +org $0289CD : db $80 +org $0289EE : db $80 +org $0289F9 : db $82 +org $028A0D : db $8D +org $028A11 : db $89 +org $028A4F : db $82 +org $028A81 : db $82 +org $028A89 : db $81 +org $028AA1 : db $80 +org $028AAB : db $80 +org $028AF4 : db $82 +org $028AFC : db $89 +org $028B0A : db $81 +org $028B0F : db $81 +org $028B14 : db $81 +org $028B1F : db $81 +org $028B29 : db $80 +org $028B4A : db $87 +org $028B51 : db $87 +org $028B57 : db $80 +org $028BEA : db $81 +org $028BEE : db $80 +org $028BF2 : db $80 +org $028BF6 : db $8F +org $028BFF : db $89 +org $028C06 : db $80 +org $028C10 : db $80 +org $028C15 : db $80 +org $028C19 : db $89 +org $028C23 : db $82 +org $028C2C : db $82 +org $028D14 : db $80 +org $028D32 : db $80 +org $028D36 : db $81 +org $028D3A : db $81 +org $028D40 : db $80 +org $028D88 : db $82 +org $028D91 : db $82 +org $028D9F : db $80 +org $028DA6 : db $80 +org $028DD8 : db $82 +org $028DE5 : db $87 +org $028DFA : db $80 +org $028E0C : db $80 +org $028E21 : db $87 +org $028E25 : db $87 +org $028E2C : db $87 +org $028E32 : db $80 +org $028E88 : db $82 +org $028E9D : db $87 +org $028EA1 : db $87 +org $028EA8 : db $87 +org $028EAE : db $80 +org $028F0F : db $82 +org $028F14 : db $81 +org $028F19 : db $80 +org $028F1D : db $81 +org $028F32 : db $82 +org $028F39 : db $80 +org $028F3C : db $81 +org $028F3C : db $81 +org $028F3F : db $81 +org $028F3F : db $81 +org $028F42 : db $81 +org $028F42 : db $81 +org $028F45 : db $81 +org $028F45 : db $81 +org $028F48 : db $81 +org $028F48 : db $81 +org $028F4B : db $81 +org $028F4B : db $81 +org $028F4F : db $81 +org $028F54 : db $81 +org $028F5F : db $80 +org $028F63 : db $81 +org $028F67 : db $87 +org $028F6D : db $80 +org $028F99 : db $80 +org $028F9D : db $80 +org $028FA1 : db $81 +org $028FAD : db $80 +org $028FB7 : db $80 +org $028FFF : db $81 +org $029027 : db $82 +org $029030 : db $82 +org $029059 : db $8D +org $0290A0 : db $87 +org $0290BA : db $87 +org $0290C9 : db $81 +org $0290E5 : db $81 +org $0290EC : db $81 +org $029103 : db $81 +org $029145 : db $82 +org $02914E : db $82 +org $029184 : db $89 +org $0291AF : db $89 +org $029229 : db $87 +org $02922D : db $8D +org $029232 : db $80 +org $029239 : db $86 +org $02923D : db $80 +org $029262 : db $81 +org $02926C : db $80 +org $02928C : db $87 +org $029290 : db $87 +org $029296 : db $80 +org $0292F9 : db $80 +org $029308 : db $80 +org $02930C : db $81 +org $029310 : db $80 +org $029314 : db $80 +org $029318 : db $8F +org $02931C : db $82 +org $029320 : db $89 +org $029327 : db $80 +org $02932F : db $80 +org $02933B : db $89 +org $029345 : db $82 +org $029392 : db $81 +org $029399 : db $81 +org $0293DE : db $8D +org $0293E5 : db $80 +org $0293EB : db $80 +org $029418 : db $81 +org $029427 : db $80 +org $029537 : db $87 +org $02953E : db $89 +org $02957E : db $80 +org $029582 : db $81 +org $029588 : db $80 +org $0295B8 : db $81 +org $0295CC : db $82 +org $0295D5 : db $82 +org $0295E3 : db $80 +org $029614 : db $82 +org $0296A7 : db $81 +org $0296EE : db $81 +org $02970A : db $80 +org $029724 : db $80 +org $029786 : db $80 +org $02979B : db $82 +org $0297A1 : db $82 +org $0297E8 : db $89 +org $0297EC : db $9E +org $02980F : db $82 +org $029814 : db $81 +org $029822 : db $80 +org $029851 : db $80 +org $029880 : db $86 +org $02989E : db $87 +org $0298B8 : db $82 +org $0298C0 : db $87 +org $0298C4 : db $8D +org $0298D2 : db $9C +org $0298E3 : db $82 +org $02990A : db $8A +org $029910 : db $80 +org $029917 : db $80 +org $02993B : db $80 +org $02993F : db $87 +org $0299D5 : db $86 +org $0299E0 : db $8D +org $0299E4 : db $80 +org $029A02 : db $82 +org $029A1A : db $80 +org $029A38 : db $8D +org $029A83 : db $8F +org $029A8A : db $82 +org $029A8F : db $80 +org $029A93 : db $81 +org $029AA5 : db $80 +org $029AB1 : db $8D +org $029AC1 : db $82 +org $029AC9 : db $8D +org $029ACD : db $82 +org $029B00 : db $80 +org $029B1A : db $87 +org $029B4F : db $86 +org $029B53 : db $8D +org $029B57 : db $8D +org $029B60 : db $8D +org $029B8C : db $8D +org $029B9C : db $87 +org $029BA0 : db $89 +org $029BA4 : db $89 +org $029BAB : db $87 +org $029C0B : db $86 +org $029C0F : db $8D +org $029C28 : db $80 +org $029C2F : db $80 +org $029C56 : db $8B +org $029C97 : db $9C +org $029C9B : db $80 +org $029C9F : db $8D +org $029CC0 : db $8E +org $029CE2 : db $9C +org $029CF3 : db $8E +org $029D04 : db $80 +org $029D0D : db $80 +org $029D13 : db $80 +org $029D24 : db $82 +org $029D64 : db $80 +org $029D68 : db $89 +org $029D8B : db $86 +org $029D8F : db $8D +org $029DA7 : db $82 +org $029E09 : db $86 +org $029E25 : db $8D +org $029E29 : db $8A +org $029E2D : db $87 +org $029E31 : db $82 +org $029E3C : db $8A +org $029E58 : db $8A +org $029E60 : db $80 +org $029E67 : db $8D +org $029E78 : db $8A +org $029E85 : db $8A +org $029E9F : db $9A +org $029EC3 : db $8A +org $029F0F : db $87 +org $029F13 : db $87 +org $029F17 : db $8D +org $029F1B : db $87 +org $029F2F : db $80 +org $029F3C : db $80 +org $029F4D : db $80 +org $029F51 : db $82 +org $029F6E : db $80 +org $029F79 : db $8C +org $029FF5 : db $80 +org $029FFA : db $8C +org $02A008 : db $9C +org $02A00C : db $8E +org $02A01B : db $8C +org $02A01F : db $8E +org $02A031 : db $8C +org $02A04B : db $8C +org $02A04F : db $87 +org $02A05E : db $8C +org $02A066 : db $87 +org $02A06D : db $8C +org $02A071 : db $80 +org $02A0BD : db $82 +org $02A0E8 : db $82 +org $02A119 : db $82 +org $02A143 : db $9B +org $02A14B : db $82 +org $02A168 : db $9B +org $02A16C : db $9B +org $02A170 : db $9B +org $02A174 : db $9B +org $02A17B : db $80 +org $02A195 : db $80 +org $02A19A : db $80 +org $02A3AB : db $86 +org $02A3BF : db $8D +org $02A3C3 : db $8D +org $02A417 : db $82 +org $02A420 : db $82 +org $02A484 : db $9C +org $02A496 : db $9B +org $02A49C : db $87 +org $02A4A7 : db $8A +org $02A4C6 : db $80 +org $02A4D3 : db $9B +org $02A4D7 : db $87 +org $02A8DC : db $82 +org $02A90F : db $82 +org $02A928 : db $84 +org $02A92F : db $87 +org $02A94C : db $82 +org $02A960 : db $82 +org $02A99C : db $82 +org $02A9FE : db $80 +org $02AA02 : db $8C +org $02AA16 : db $80 +org $02AA27 : db $82 +org $02AA2E : db $82 +org $02AA45 : db $80 +org $02AA55 : db $82 +org $02AA5C : db $82 +org $02AA85 : db $84 +org $02AAB2 : db $80 +org $02AAB6 : db $80 +org $02AAD7 : db $80 +org $02AADC : db $87 +org $02AAE0 : db $80 +org $02AB0A : db $89 +org $02AB25 : db $8B +org $02AB3E : db $82 +org $02AB6E : db $82 +org $02AB8C : db $89 +org $02AB91 : db $87 +org $02ABC4 : db $87 +org $02ACAE : db $9B +org $02ACD8 : db $9B +org $02AD04 : db $9B +org $02AD30 : db $9B +org $02AD65 : db $80 +org $02ADB9 : db $80 +org $02ADEC : db $80 +org $02ADF8 : db $80 +org $02AE14 : db $80 +org $02AE30 : db $89 +org $02AE34 : db $89 +org $02B008 : db $80 +org $02B01A : db $80 +org $02B01E : db $8C +org $02B090 : db $80 +org $02B09A : db $80 +org $02B0BE : db $80 +org $02B0C2 : db $80 +org $02B123 : db $82 +org $02B12D : db $80 +org $02B130 : db $82 +org $02B130 : db $82 +org $02B133 : db $80 +org $02B133 : db $80 +org $02B136 : db $80 +org $02B136 : db $80 +org $02B139 : db $80 +org $02B139 : db $80 +org $02B13C : db $82 +org $02B13C : db $82 +org $02B15B : db $80 +org $02B17F : db $80 +org $02B1BC : db $80 +org $02B240 : db $82 +org $02B29C : db $82 +org $02B2DE : db $80 +org $02B2E2 : db $8C +org $02B2E6 : db $8C +org $02B2EA : db $8B +org $02B339 : db $89 +org $02B33D : db $89 +org $02B341 : db $87 +org $02B352 : db $89 +org $02B357 : db $87 +org $02B361 : db $80 +org $02B394 : db $80 +org $02B399 : db $80 +org $02B39E : db $80 +org $02B3A2 : db $80 +org $02B3A7 : db $80 +org $02B3B1 : db $80 +org $02B3C0 : db $82 +org $02B3C6 : db $82 +org $02B3D8 : db $8A +org $02B3F9 : db $9B +org $02B3FD : db $9B +org $02B401 : db $9B +org $02B405 : db $9B +org $02B409 : db $9B +org $02B415 : db $80 +org $02B419 : db $8C +org $02B41D : db $8C +org $02B421 : db $8B +org $02B425 : db $80 +org $02B43C : db $80 +org $02B45C : db $9B +org $02B465 : db $80 +org $02B6E9 : db $82 +org $02B6ED : db $82 +org $02B796 : db $82 +org $02B816 : db $82 +org $02B874 : db $82 +org $02BD8F : db $82 +org $02BD9F : db $80 +org $02BFF7 : db $89 +org $02C080 : db $82 +org $02C087 : db $82 +org $02C0A7 : db $80 +org $02C0AB : db $87 +org $02C0D2 : db $82 +org $02C0FB : db $82 +org $02C118 : db $82 +org $02C17D : db $87 +org $02C1AC : db $82 +org $02C1DE : db $87 +org $02C2C2 : db $80 +org $02C2CD : db $8C +org $02C2D1 : db $9B +org $02C2D5 : db $9B +org $02C2D9 : db $9B +org $02C2DD : db $9B +org $02C2E1 : db $9B +org $02C2E5 : db $9B +org $02C2E9 : db $9B +org $02C2F6 : db $81 +org $02C303 : db $80 +org $02C307 : db $80 +org $02C30B : db $80 +org $02C30F : db $80 +org $02C362 : db $8C +org $02C366 : db $9B +org $02C36A : db $9B +org $02C36E : db $9B +org $02C372 : db $9B +org $02C376 : db $9B +org $02C37A : db $9B +org $02C37E : db $9B +org $02C39A : db $8C +org $02C39E : db $9B +org $02C3A2 : db $9B +org $02C3A6 : db $9B +org $02C3AA : db $9B +org $02C3AE : db $9B +org $02C3B2 : db $9B +org $02C3B6 : db $9B +org $02C3BA : db $9B +org $02C3BE : db $9B +org $02C3C2 : db $9B +org $02C41A : db $9B +org $02C41E : db $9B +org $02C422 : db $9B +org $02C426 : db $9B +org $02C42A : db $9B +org $02C42E : db $9B +org $02C432 : db $9B +org $02C445 : db $9B +org $02C449 : db $9B +org $02C44D : db $9B +org $02C56F : db $82 +org $02C56F : db $82 +org $02D860 : db $84 +org $02D867 : db $84 +org $02D86E : db $84 +org $02D875 : db $84 +org $02D87C : db $84 +org $02D883 : db $84 +org $02D88A : db $84 +org $02E68F : db $82 +org $02E698 : db $82 +org $02E69F : db $82 +org $02E6A7 : db $82 +org $02E6AD : db $82 +org $02E6B1 : db $8C +org $02E6C4 : db $82 +org $02E6CB : db $82 +org $02E71E : db $8C +org $02E812 : db $80 +org $02E816 : db $8C +org $02E81A : db $8C +org $02E83C : db $87 +org $02EA36 : db $89 +org $02EA3A : db $89 +org $02EA4F : db $80 +org $02EA53 : db $8C +org $02EA57 : db $8C +org $02EA7A : db $82 +org $02EA99 : db $82 +org $02EACD : db $82 +org $02EC65 : db $84 +org $02EC76 : db $84 +org $02EC87 : db $84 +org $02ECB7 : db $87 +org $02ECCB : db $82 +org $02ED9C : db $82 +org $02F04F : db $82 +org $02F083 : db $82 +org $02F0C1 : db $82 +org $02F0FB : db $82 +org $02F12A : db $82 +org $02F18D : db $82 +org $02F198 : db $82 +org $02F1BD : db $8F +org $02F1C4 : db $8F +org $02F1CD : db $8F +org $02F1D4 : db $8F +org $02F1F4 : db $82 +org $02F25D : db $82 +org $02F26D : db $82 +org $02F285 : db $8F +org $02F28C : db $8F +org $02F295 : db $8F +org $02F29C : db $8F +org $02F304 : db $82 +org $02F30A : db $82 +org $02F32F : db $82 +org $02F335 : db $82 +org $02F412 : db $83 +org $02F419 : db $83 +org $02F420 : db $83 +org $02F427 : db $83 +org $02F42E : db $83 +org $02F440 : db $83 +org $02F452 : db $83 +org $02F459 : db $83 +org $02F460 : db $83 +org $02F467 : db $83 +org $02F46E : db $83 +org $02F480 : db $83 +org $02F492 : db $84 +org $02F499 : db $84 +org $02F4A0 : db $84 +org $02F4A7 : db $84 +org $02F4AE : db $84 +org $02F4C0 : db $84 +org $02F4D2 : db $84 +org $02F4D9 : db $84 +org $02F4E0 : db $84 +org $02F4E7 : db $84 +org $02F4EE : db $84 +org $02F500 : db $84 +org $02F54A : db $82 +org $02F550 : db $82 +org $02F575 : db $82 +org $02F57B : db $82 +org $02F6B3 : db $8B +org $02F6B3 : db $8B +org $02F6B6 : db $8B +org $02F6B6 : db $8B +org $02F6B9 : db $8B +org $02F6B9 : db $8B +org $02F6BC : db $8B +org $02F6BC : db $8B +org $02F6BF : db $8B +org $02F6BF : db $8B +org $02F6C2 : db $8B +org $02F6C2 : db $8B +org $02F6C5 : db $8B +org $02F6C5 : db $8B +org $02F6C8 : db $8B +org $02F6C8 : db $8B +org $02F6CB : db $8B +org $02F6CB : db $8B +org $02F6CE : db $8B +org $02F6CE : db $8B +org $02F6D1 : db $8B +org $02F6D1 : db $8B +org $02F6D4 : db $8B +org $02F6D4 : db $8B +org $02F6D7 : db $8B +org $02F6D7 : db $8B +org $02F6DA : db $8B +org $02F6DA : db $8B +org $02F6DD : db $8B +org $02F6DD : db $8B +org $02F6E0 : db $8B +org $02F6E0 : db $8B +org $02F6E3 : db $8B +org $02F6E3 : db $8B +org $02F6E6 : db $8B +org $02F6E6 : db $8B +org $02F6E9 : db $8B +org $02F6E9 : db $8B +org $02F6EC : db $8B +org $02F6EC : db $8B +org $02F6EF : db $8B +org $02F6EF : db $8B +org $02F6F2 : db $8B +org $02F6F2 : db $8B +org $02F6F5 : db $8B +org $02F6F5 : db $8B +org $02F6F8 : db $8B +org $02F6F8 : db $8B +org $02F6FB : db $8B +org $02F6FB : db $8B +org $02F6FE : db $8B +org $02F6FE : db $8B +org $02F701 : db $8B +org $02F701 : db $8B +org $02F704 : db $8B +org $02F704 : db $8B +org $02F707 : db $8B +org $02F707 : db $8B +org $02F70A : db $8B +org $02F70A : db $8B +org $02F70D : db $8B +org $02F70D : db $8B +org $02F710 : db $8B +org $02F710 : db $8B +org $02F713 : db $8B +org $02F713 : db $8B +org $02F716 : db $8B +org $02F716 : db $8B +org $02F719 : db $8B +org $02F719 : db $8B +org $02F71C : db $8B +org $02F71C : db $8B +org $02F71F : db $8B +org $02F71F : db $8B +org $02F722 : db $8C +org $02F722 : db $8C +org $02F725 : db $8B +org $02F725 : db $8B +org $02F728 : db $8B +org $02F728 : db $8B +org $02F72B : db $8B +org $02F72B : db $8B +org $02F72E : db $8B +org $02F72E : db $8B +org $02F731 : db $8C +org $02F731 : db $8C +org $02F734 : db $8C +org $02F734 : db $8C +org $02F737 : db $8C +org $02F737 : db $8C +org $02F73A : db $8B +org $02F73A : db $8B +org $02F73D : db $8C +org $02F73D : db $8C +org $02F740 : db $8C +org $02F740 : db $8C +org $02F743 : db $8B +org $02F743 : db $8B +org $02F746 : db $8B +org $02F746 : db $8B +org $02F749 : db $8B +org $02F749 : db $8B +org $02F74C : db $8C +org $02F74C : db $8C +org $02F74F : db $8C +org $02F74F : db $8C +org $02F752 : db $8B +org $02F752 : db $8B +org $02F755 : db $8B +org $02F755 : db $8B +org $02F758 : db $8C +org $02F758 : db $8C +org $02F75B : db $8B +org $02F75B : db $8B +org $02F75E : db $8B +org $02F75E : db $8B +org $02F761 : db $8B +org $02F761 : db $8B +org $02F764 : db $8C +org $02F764 : db $8C +org $02F767 : db $8C +org $02F767 : db $8C +org $02F76A : db $8B +org $02F76A : db $8B +org $02F76D : db $8B +org $02F76D : db $8B +org $02F770 : db $8C +org $02F770 : db $8C +org $02F773 : db $8B +org $02F773 : db $8B +org $02F776 : db $8B +org $02F776 : db $8B +org $02F779 : db $8B +org $02F779 : db $8B +org $02F77C : db $8B +org $02F77C : db $8B +org $02F77F : db $8B +org $02F77F : db $8B +org $02F782 : db $8B +org $02F782 : db $8B +org $02F785 : db $8B +org $02F785 : db $8B +org $02F788 : db $8B +org $02F788 : db $8B +org $02F78B : db $8B +org $02F78B : db $8B +org $02F78E : db $8B +org $02F78E : db $8B +org $02F791 : db $8B +org $02F791 : db $8B +org $02F794 : db $8B +org $02F794 : db $8B +org $02F797 : db $8B +org $02F797 : db $8B +org $02F79A : db $8B +org $02F79A : db $8B +org $02F79D : db $8B +org $02F79D : db $8B +org $02F7A0 : db $8B +org $02F7A0 : db $8B +org $02F7A3 : db $8B +org $02F7A3 : db $8B +org $02F7A6 : db $8B +org $02F7A6 : db $8B +org $02F7A9 : db $8B +org $02F7A9 : db $8B +org $02F7AC : db $8B +org $02F7AC : db $8B +org $02F7AF : db $8B +org $02F7AF : db $8B +org $02F7B2 : db $8B +org $02F7B2 : db $8B +org $02F7B5 : db $8B +org $02F7B5 : db $8B +org $02F7B8 : db $8B +org $02F7B8 : db $8B +org $02F7BB : db $8B +org $02F7BB : db $8B +org $02F7BE : db $8B +org $02F7BE : db $8B +org $02F7C1 : db $8B +org $02F7C1 : db $8B +org $02F7C4 : db $8B +org $02F7C4 : db $8B +org $02F7C7 : db $8B +org $02F7C7 : db $8B +org $02F7CA : db $8B +org $02F7CA : db $8B +org $02F7CD : db $8B +org $02F7CD : db $8B +org $02F7D0 : db $8B +org $02F7D0 : db $8B +org $02F7D3 : db $8B +org $02F7D3 : db $8B +org $02F7D6 : db $8B +org $02F7D6 : db $8B +org $02F7D9 : db $8C +org $02F7D9 : db $8C +org $02F7DC : db $8C +org $02F7DC : db $8C +org $02F7DF : db $8C +org $02F7DF : db $8C +org $02F7E2 : db $8C +org $02F7E2 : db $8C +org $02F7E5 : db $8C +org $02F7E5 : db $8C +org $02F7E8 : db $8C +org $02F7E8 : db $8C +org $02F7EB : db $8C +org $02F7EB : db $8C +org $02F7EE : db $8C +org $02F7EE : db $8C +org $02F7F1 : db $8C +org $02F7F1 : db $8C +org $02F7F4 : db $8C +org $02F7F4 : db $8C +org $02F7F7 : db $8C +org $02F7F7 : db $8C +org $02F7FA : db $8C +org $02F7FA : db $8C +org $02F7FD : db $8C +org $02F7FD : db $8C +org $02F800 : db $8C +org $02F800 : db $8C +org $02F803 : db $8C +org $02F803 : db $8C +org $02F806 : db $8C +org $02F806 : db $8C +org $02F809 : db $8C +org $02F809 : db $8C +org $02F80C : db $8C +org $02F80C : db $8C +org $02F80F : db $8C +org $02F80F : db $8C +org $02F812 : db $8C +org $02F812 : db $8C +org $02F815 : db $8C +org $02F815 : db $8C +org $02F818 : db $8C +org $02F818 : db $8C +org $02F81B : db $8C +org $02F81B : db $8C +org $02F81E : db $8C +org $02F81E : db $8C +org $02F821 : db $8C +org $02F821 : db $8C +org $02F824 : db $8C +org $02F824 : db $8C +org $02F827 : db $8C +org $02F827 : db $8C +org $02F82A : db $8C +org $02F82A : db $8C +org $02F82D : db $8C +org $02F82D : db $8C +org $02F830 : db $8C +org $02F830 : db $8C +org $02F833 : db $8C +org $02F833 : db $8C +org $02F836 : db $8C +org $02F836 : db $8C +org $02F839 : db $8C +org $02F839 : db $8C +org $02F83C : db $8B +org $02F83C : db $8B +org $02F83F : db $8B +org $02F83F : db $8B +org $02F842 : db $8B +org $02F842 : db $8B +org $02F845 : db $8B +org $02F845 : db $8B +org $02F848 : db $8B +org $02F848 : db $8B +org $02F84B : db $8C +org $02F84B : db $8C +org $02F84E : db $8C +org $02F84E : db $8C +org $02F851 : db $8C +org $02F851 : db $8C +org $02F854 : db $8B +org $02F854 : db $8B +org $02F857 : db $8B +org $02F857 : db $8B +org $02F85A : db $8B +org $02F85A : db $8B +org $02F85D : db $8B +org $02F85D : db $8B +org $02F860 : db $8B +org $02F860 : db $8B +org $02F863 : db $8B +org $02F863 : db $8B +org $02F866 : db $8B +org $02F866 : db $8B +org $02F869 : db $8B +org $02F869 : db $8B +org $02F86C : db $8C +org $02F86C : db $8C +org $02F86F : db $8C +org $02F86F : db $8C +org $02F872 : db $8C +org $02F872 : db $8C +org $02F875 : db $8C +org $02F875 : db $8C +org $02F878 : db $8C +org $02F878 : db $8C +org $02F87B : db $8B +org $02F87B : db $8B +org $02F87E : db $8B +org $02F87E : db $8B +org $02F881 : db $8B +org $02F881 : db $8B +org $02F884 : db $8B +org $02F884 : db $8B +org $02F887 : db $8C +org $02F887 : db $8C +org $02F88A : db $8C +org $02F88A : db $8C +org $02F88D : db $8C +org $02F88D : db $8C +org $02F890 : db $8C +org $02F890 : db $8C +org $02F893 : db $8B +org $02F893 : db $8B +org $02F896 : db $8B +org $02F896 : db $8B +org $02F899 : db $8B +org $02F899 : db $8B +org $02F89C : db $8B +org $02F89C : db $8B +org $02F89F : db $8B +org $02F89F : db $8B +org $02F8A2 : db $8B +org $02F8A2 : db $8B +org $02F8A5 : db $8B +org $02F8A5 : db $8B +org $02F8A8 : db $8B +org $02F8A8 : db $8B +org $02F8AB : db $8B +org $02F8AB : db $8B +org $02F8AE : db $8B +org $02F8AE : db $8B +org $02F8B1 : db $8B +org $02F8B1 : db $8B +org $02F8B4 : db $8B +org $02F8B4 : db $8B +org $02F8B7 : db $8B +org $02F8B7 : db $8B +org $02F8BA : db $8B +org $02F8BA : db $8B +org $02F8BD : db $8B +org $02F8BD : db $8B +org $02F8C0 : db $8B +org $02F8C0 : db $8B +org $02F8C3 : db $8B +org $02F8C3 : db $8B +org $02F8C6 : db $8B +org $02F8C6 : db $8B +org $02F8C9 : db $8B +org $02F8C9 : db $8B +org $02F8CC : db $8B +org $02F8CC : db $8B +org $02F8CF : db $8B +org $02F8CF : db $8B +org $02F8D2 : db $8B +org $02F8D2 : db $8B +org $02F8D5 : db $8B +org $02F8D5 : db $8B +org $02F8D8 : db $8B +org $02F8D8 : db $8B +org $02F8DB : db $8B +org $02F8DB : db $8B +org $02F8DE : db $8B +org $02F8DE : db $8B +org $02F8E1 : db $8B +org $02F8E1 : db $8B +org $02F8E4 : db $8B +org $02F8E4 : db $8B +org $02F8E7 : db $8B +org $02F8E7 : db $8B +org $02F8EA : db $8B +org $02F8EA : db $8B +org $02F8ED : db $8B +org $02F8ED : db $8B +org $02F8F0 : db $8B +org $02F8F0 : db $8B +org $02F8F3 : db $8B +org $02F8F3 : db $8B +org $02F8F6 : db $8B +org $02F8F6 : db $8B +org $02F8F9 : db $8B +org $02F8F9 : db $8B +org $02F8FC : db $8B +org $02F8FC : db $8B +org $02F8FF : db $8B +org $02F8FF : db $8B +org $02F902 : db $8C +org $02F902 : db $8C +org $02F905 : db $8B +org $02F905 : db $8B +org $02F908 : db $8B +org $02F908 : db $8B +org $02F90B : db $8B +org $02F90B : db $8B +org $02F90E : db $8B +org $02F90E : db $8B +org $02F911 : db $8C +org $02F911 : db $8C +org $02F914 : db $8C +org $02F914 : db $8C +org $02F917 : db $8C +org $02F917 : db $8C +org $02F91A : db $8B +org $02F91A : db $8B +org $02F91D : db $8C +org $02F91D : db $8C +org $02F920 : db $8C +org $02F920 : db $8C +org $02F923 : db $8B +org $02F923 : db $8B +org $02F926 : db $8B +org $02F926 : db $8B +org $02F929 : db $8B +org $02F929 : db $8B +org $02F92C : db $8C +org $02F92C : db $8C +org $02F92F : db $8C +org $02F92F : db $8C +org $02F932 : db $8B +org $02F932 : db $8B +org $02F935 : db $8B +org $02F935 : db $8B +org $02F938 : db $8C +org $02F938 : db $8C +org $02F93B : db $8B +org $02F93B : db $8B +org $02F93E : db $8B +org $02F93E : db $8B +org $02F941 : db $8B +org $02F941 : db $8B +org $02F944 : db $8C +org $02F944 : db $8C +org $02F947 : db $8C +org $02F947 : db $8C +org $02F94A : db $8B +org $02F94A : db $8B +org $02F94D : db $8B +org $02F94D : db $8B +org $02F950 : db $8C +org $02F950 : db $8C +org $02F953 : db $8B +org $02F953 : db $8B +org $02F956 : db $8B +org $02F956 : db $8B +org $02F959 : db $8B +org $02F959 : db $8B +org $02F95C : db $8B +org $02F95C : db $8B +org $02F95F : db $8B +org $02F95F : db $8B +org $02F962 : db $8B +org $02F962 : db $8B +org $02F965 : db $8B +org $02F965 : db $8B +org $02F968 : db $8B +org $02F968 : db $8B +org $02F96B : db $8B +org $02F96B : db $8B +org $02F96E : db $8B +org $02F96E : db $8B +org $02F971 : db $8B +org $02F971 : db $8B +org $02F974 : db $8B +org $02F974 : db $8B +org $02F977 : db $8B +org $02F977 : db $8B +org $02F97A : db $8B +org $02F97A : db $8B +org $02F97D : db $8B +org $02F97D : db $8B +org $02F980 : db $8B +org $02F980 : db $8B +org $02F983 : db $8B +org $02F983 : db $8B +org $02F986 : db $8B +org $02F986 : db $8B +org $02F989 : db $8B +org $02F989 : db $8B +org $02F98C : db $8B +org $02F98C : db $8B +org $02F98F : db $8B +org $02F98F : db $8B +org $02F992 : db $8B +org $02F992 : db $8B +org $02F995 : db $8B +org $02F995 : db $8B +org $02F998 : db $8B +org $02F998 : db $8B +org $02F99B : db $8B +org $02F99B : db $8B +org $02F99E : db $8B +org $02F99E : db $8B +org $02F9A1 : db $8B +org $02F9A1 : db $8B +org $02F9A4 : db $8B +org $02F9A4 : db $8B +org $02F9A7 : db $8B +org $02F9A7 : db $8B +org $02F9AA : db $8B +org $02F9AA : db $8B +org $02F9AD : db $8B +org $02F9AD : db $8B +org $02F9B0 : db $8B +org $02F9B0 : db $8B +org $02F9B3 : db $8B +org $02F9B3 : db $8B +org $02F9B6 : db $8B +org $02F9B6 : db $8B +org $02F9B9 : db $8C +org $02F9B9 : db $8C +org $02F9BC : db $8C +org $02F9BC : db $8C +org $02F9BF : db $8C +org $02F9BF : db $8C +org $02F9C2 : db $8C +org $02F9C2 : db $8C +org $02F9C5 : db $8C +org $02F9C5 : db $8C +org $02F9C8 : db $8C +org $02F9C8 : db $8C +org $02F9CB : db $8C +org $02F9CB : db $8C +org $02F9CE : db $8C +org $02F9CE : db $8C +org $02F9D1 : db $8C +org $02F9D1 : db $8C +org $02F9D4 : db $8C +org $02F9D4 : db $8C +org $02F9D7 : db $8C +org $02F9D7 : db $8C +org $02F9DA : db $8C +org $02F9DA : db $8C +org $02F9DD : db $8C +org $02F9DD : db $8C +org $02F9E0 : db $8C +org $02F9E0 : db $8C +org $02F9E3 : db $8C +org $02F9E3 : db $8C +org $02F9E6 : db $8C +org $02F9E6 : db $8C +org $02F9E9 : db $8C +org $02F9E9 : db $8C +org $02F9EC : db $8C +org $02F9EC : db $8C +org $02F9EF : db $8C +org $02F9EF : db $8C +org $02F9F2 : db $8C +org $02F9F2 : db $8C +org $02F9F5 : db $8C +org $02F9F5 : db $8C +org $02F9F8 : db $8C +org $02F9F8 : db $8C +org $02F9FB : db $8C +org $02F9FB : db $8C +org $02F9FE : db $8C +org $02F9FE : db $8C +org $02FA01 : db $8C +org $02FA01 : db $8C +org $02FA04 : db $8C +org $02FA04 : db $8C +org $02FA07 : db $8C +org $02FA07 : db $8C +org $02FA0A : db $8C +org $02FA0A : db $8C +org $02FA0D : db $8C +org $02FA0D : db $8C +org $02FA10 : db $8C +org $02FA10 : db $8C +org $02FA13 : db $8C +org $02FA13 : db $8C +org $02FA16 : db $8C +org $02FA16 : db $8C +org $02FA19 : db $8C +org $02FA19 : db $8C +org $02FA1C : db $8B +org $02FA1C : db $8B +org $02FA1F : db $8B +org $02FA1F : db $8B +org $02FA22 : db $8B +org $02FA22 : db $8B +org $02FA25 : db $8B +org $02FA25 : db $8B +org $02FA28 : db $8B +org $02FA28 : db $8B +org $02FA2B : db $8C +org $02FA2B : db $8C +org $02FA2E : db $8C +org $02FA2E : db $8C +org $02FA31 : db $8C +org $02FA31 : db $8C +org $02FA34 : db $8B +org $02FA34 : db $8B +org $02FA37 : db $8B +org $02FA37 : db $8B +org $02FA3A : db $8B +org $02FA3A : db $8B +org $02FA3D : db $8B +org $02FA3D : db $8B +org $02FA40 : db $8B +org $02FA40 : db $8B +org $02FA43 : db $8B +org $02FA43 : db $8B +org $02FA46 : db $8B +org $02FA46 : db $8B +org $02FA49 : db $8B +org $02FA49 : db $8B +org $02FA4C : db $8C +org $02FA4C : db $8C +org $02FA4F : db $8C +org $02FA4F : db $8C +org $02FA52 : db $8C +org $02FA52 : db $8C +org $02FA55 : db $8C +org $02FA55 : db $8C +org $02FA58 : db $8C +org $02FA58 : db $8C +org $02FA5B : db $8B +org $02FA5B : db $8B +org $02FA5E : db $8B +org $02FA5E : db $8B +org $02FA61 : db $8B +org $02FA61 : db $8B +org $02FA64 : db $8B +org $02FA64 : db $8B +org $02FA67 : db $8C +org $02FA67 : db $8C +org $02FA6A : db $8C +org $02FA6A : db $8C +org $02FA6D : db $8C +org $02FA6D : db $8C +org $02FA70 : db $8C +org $02FA70 : db $8C +org $02FA8C : db $8F +org $02FA9D : db $8F +org $02FB4B : db $82 +org $02FB5A : db $82 +org $02FBEA : db $84 +org $02FD98 : db $9B +org $02FDA1 : db $9B +org $02FDBB : db $9B +org $02FDD5 : db $9B +org $03E9FE : db $85 +org $03EA11 : db $86 +org $03EA15 : db $86 +org $03EA19 : db $86 +org $03EA57 : db $83 +org $03EB0B : db $86 +org $03EB23 : db $86 +org $03EB79 : db $8D +org $03EB88 : db $85 +org $04E7C4 : db $84 +org $04E837 : db $82 +org $04E848 : db $87 +org $04E84C : db $80 +org $04E868 : db $87 +org $04E891 : db $8F +org $04E8A3 : db $84 +org $04E8AB : db $84 +org $04E8B1 : db $84 +org $04E8B9 : db $84 +org $04E92B : db $8F +org $04E93D : db $84 +org $04E945 : db $84 +org $04E94D : db $84 +org $04E9A2 : db $84 +org $04E9A2 : db $84 +org $04E9A5 : db $84 +org $04E9A5 : db $84 +org $04E9A8 : db $84 +org $04E9A8 : db $84 +org $04E9AB : db $84 +org $04E9AB : db $84 +org $04E9AE : db $84 +org $04E9AE : db $84 +org $04E9B1 : db $84 +org $04E9B1 : db $84 +org $04E9B4 : db $84 +org $04E9B4 : db $84 +org $04E9B7 : db $84 +org $04E9B7 : db $84 +org $04E9BA : db $84 +org $04E9BA : db $84 +org $04E9BD : db $84 +org $04E9BD : db $84 +org $04E9C0 : db $84 +org $04E9C0 : db $84 +org $04E9C3 : db $84 +org $04E9C3 : db $84 +org $04E9C6 : db $84 +org $04E9C6 : db $84 +org $04E9C9 : db $84 +org $04E9C9 : db $84 +org $04E9CC : db $84 +org $04E9CC : db $84 +org $04E9CF : db $84 +org $04E9CF : db $84 +org $04E9D2 : db $84 +org $04E9D2 : db $84 +org $04E9D5 : db $84 +org $04E9D5 : db $84 +org $04E9D8 : db $84 +org $04E9D8 : db $84 +org $04EC11 : db $84 +org $04EC11 : db $84 +org $04EC14 : db $84 +org $04EC14 : db $84 +org $04EC17 : db $84 +org $04EC17 : db $84 +org $04EC1A : db $84 +org $04EC1A : db $84 +org $04EC1D : db $84 +org $04EC1D : db $84 +org $04EC20 : db $84 +org $04EC20 : db $84 +org $04EC23 : db $84 +org $04EC23 : db $84 +org $04EC26 : db $84 +org $04EC26 : db $84 +org $058013 : db $8D +org $05801A : db $85 +org $058020 : db $85 +org $058026 : db $8D +org $05802D : db $85 +org $058033 : db $85 +org $058082 : db $9D +org $0580AE : db $86 +org $0580F9 : db $9D +org $058101 : db $8D +org $0581B0 : db $8D +org $0581EB : db $8D +org $05820C : db $80 +org $058222 : db $8D +org $05822E : db $86 +org $058234 : db $9C +org $05823A : db $87 +org $058249 : db $8D +org $05828B : db $86 +org $0582C8 : db $85 +org $0582E3 : db $9C +org $058301 : db $8D +org $058371 : db $86 +org $058416 : db $86 +org $058462 : db $86 +org $05852B : db $86 +org $05854B : db $8D +org $058579 : db $86 +org $05857F : db $87 +org $058590 : db $86 +org $0585D5 : db $80 +org $058759 : db $80 +org $0587B5 : db $8D +org $0588CB : db $80 +org $0588FB : db $80 +org $05890B : db $87 +org $058911 : db $86 +org $0589B7 : db $87 +org $058A99 : db $8D +org $058AB4 : db $85 +org $058ABB : db $9D +org $058ABF : db $89 +org $058AD5 : db $9D +org $058AD9 : db $89 +org $058AED : db $86 +org $058B25 : db $9D +org $058B69 : db $9D +org $058BC6 : db $9D +org $058C23 : db $9D +org $058C80 : db $9D +org $058CD9 : db $9D +org $058D2E : db $8D +org $058D32 : db $86 +org $058D39 : db $80 +org $058DD6 : db $86 +org $058F6F : db $86 +org $058F89 : db $8D +org $058FCE : db $9D +org $058FD6 : db $8D +org $059006 : db $86 +org $059079 : db $8D +org $059083 : db $8D +org $0591AF : db $86 +org $05921B : db $86 +org $059228 : db $8D +org $059236 : db $9D +org $05923C : db $89 +org $059342 : db $86 +org $0593B4 : db $86 +org $059425 : db $86 +org $059435 : db $80 +org $05947F : db $86 +org $0594D1 : db $8D +org $05956B : db $86 +org $059576 : db $86 +org $05957D : db $9C +org $059581 : db $87 +org $0595B1 : db $86 +org $05965B : db $8D +org $059690 : db $8D +org $059694 : db $86 +org $05969B : db $89 +org $05969F : db $86 +org $0596DD : db $86 +org $059714 : db $86 +org $05971A : db $86 +org $059723 : db $8D +org $05972D : db $86 +org $059765 : db $8D +org $05977F : db $8D +org $059799 : db $86 +org $05980A : db $8D +org $059967 : db $80 +org $05999F : db $87 +org $0599CC : db $89 +org $059A80 : db $85 +org $059ACD : db $9D +org $059AEC : db $89 +org $059B45 : db $8D +org $059B50 : db $9D +org $059B97 : db $8D +org $059CFB : db $86 +org $059D0E : db $8D +org $059D76 : db $80 +org $059D82 : db $86 +org $059DB7 : db $8D +org $059E2F : db $86 +org $059E49 : db $89 +org $059E4F : db $8D +org $059E69 : db $86 +org $059EC4 : db $86 +org $059EDA : db $86 +org $059FAA : db $86 +org $059FE8 : db $85 +org $05A075 : db $89 +org $05A07D : db $9D +org $05A081 : db $89 +org $05A0C8 : db $8D +org $05A123 : db $86 +org $05A127 : db $86 +org $05A12D : db $9C +org $05A131 : db $87 +org $05A148 : db $86 +org $05A18D : db $9D +org $05A1A8 : db $86 +org $05A285 : db $86 +org $05A37D : db $85 +org $05A38C : db $85 +org $05A3A5 : db $86 +org $05A3B2 : db $80 +org $05A3D4 : db $8D +org $05A3EE : db $9A +org $05A3F7 : db $8D +org $05A404 : db $8D +org $05A4BC : db $86 +org $05A4FD : db $8D +org $05A50A : db $8D +org $05A526 : db $89 +org $05A534 : db $89 +org $05A53C : db $9D +org $05A540 : db $89 +org $05A58B : db $9D +org $05A5CD : db $8D +org $05A66C : db $9D +org $05A7C1 : db $8D +org $05A7C9 : db $8D +org $05A825 : db $8D +org $05A8C7 : db $86 +org $05A8E7 : db $8D +org $05A926 : db $8D +org $05A98A : db $86 +org $05A9EE : db $8D +org $05AA96 : db $86 +org $05AACC : db $8D +org $05AB2F : db $8D +org $05AB57 : db $86 +org $05AB69 : db $85 +org $05AB8C : db $86 +org $05AB92 : db $8D +org $05AB96 : db $86 +org $05AB9A : db $86 +org $05AC88 : db $9D +org $05AC90 : db $8D +org $05AF92 : db $86 +org $05AFAB : db $87 +org $05AFB1 : db $86 +org $05B030 : db $86 +org $05B054 : db $86 +org $05B0AA : db $86 +org $05B12C : db $8D +org $05B4C0 : db $83 +org $05B4CD : db $83 +org $05B5B8 : db $86 +org $05B650 : db $86 +org $05B79A : db $8D +org $05B7A0 : db $86 +org $05B7A6 : db $9C +org $05B7AA : db $87 +org $05B7DD : db $86 +org $05B808 : db $86 +org $05B849 : db $8D +org $05B857 : db $8D +org $05B890 : db $86 +org $05B8B1 : db $86 +org $05B8BD : db $86 +org $05B951 : db $86 +org $05BAD6 : db $8D +org $05BB70 : db $9D +org $05BB8B : db $86 +org $05BCD1 : db $8D +org $05BD35 : db $8D +org $05BE08 : db $86 +org $05BE3C : db $86 +org $05BE72 : db $86 +org $05BE77 : db $86 +org $05BE89 : db $86 +org $05BEC6 : db $86 +org $05BEE3 : db $86 +org $05BF09 : db $8D +org $05BF41 : db $86 +org $05BF4F : db $86 +org $05BFC6 : db $9D +org $05BFF6 : db $86 +org $05C038 : db $8D +org $05C067 : db $86 +org $05C153 : db $86 +org $05C1C2 : db $8D +org $05C262 : db $86 +org $05C266 : db $86 +org $05C309 : db $8D +org $05C318 : db $8D +org $05C511 : db $8D +org $05C526 : db $86 +org $05C534 : db $85 +org $05C619 : db $9D +org $05C69C : db $86 +org $05CBEC : db $86 +org $05CBF9 : db $86 +org $05CC15 : db $86 +org $05CC4F : db $8D +org $05CC71 : db $86 +org $05CC7E : db $86 +org $05CC9A : db $86 +org $05CE82 : db $8D +org $05CE91 : db $8D +org $05CFDD : db $86 +org $05D0CA : db $9D +org $05D0D2 : db $8D +org $05D165 : db $86 +org $05D226 : db $86 +org $05D257 : db $9D +org $05D25D : db $89 +org $05D546 : db $9D +org $05D578 : db $86 +org $05D594 : db $85 +org $05D5A3 : db $85 +org $05D6BA : db $86 +org $05D746 : db $86 +org $05D750 : db $87 +org $05D7A9 : db $8D +org $05D7FF : db $86 +org $05D854 : db $86 +org $05D85E : db $86 +org $05D959 : db $86 +org $05D997 : db $86 +org $05D99C : db $86 +org $05D9A6 : db $87 +org $05DA18 : db $8D +org $05DB2F : db $9D +org $05DB94 : db $80 +org $05DBA9 : db $86 +org $05DBAF : db $9C +org $05DBB5 : db $87 +org $05DBCC : db $80 +org $05DBDE : db $80 +org $05DBEE : db $80 +org $05DC3E : db $8D +org $05DC9C : db $8D +org $05DCEE : db $8D +org $05DCF5 : db $9E +org $05DCF9 : db $85 +org $05DD03 : db $80 +org $05DD18 : db $80 +org $05DD26 : db $85 +org $05DD5D : db $8D +org $05DD69 : db $80 +org $05DD86 : db $85 +org $05DDAE : db $85 +org $05DDD5 : db $85 +org $05DE14 : db $85 +org $05DE2F : db $8D +org $05DE39 : db $80 +org $05DE47 : db $80 +org $05DE6D : db $85 +org $05DEA1 : db $85 +org $05DF1F : db $80 +org $05DF29 : db $86 +org $05DF2F : db $87 +org $05DF37 : db $85 +org $05DF4C : db $87 +org $05DFE8 : db $86 +org $05E01C : db $85 +org $05E033 : db $85 +org $05E042 : db $85 +org $05E04C : db $85 +org $05E050 : db $9E +org $05E05E : db $80 +org $05E073 : db $8D +org $05E0BE : db $8D +org $05E19D : db $85 +org $05E1A1 : db $86 +org $05E1B0 : db $86 +org $05E1B6 : db $87 +org $05E1D0 : db $85 +org $05E1E0 : db $85 +org $05E1F9 : db $86 +org $05E20B : db $85 +org $05E236 : db $9C +org $05E23C : db $87 +org $05E258 : db $86 +org $05E25F : db $87 +org $05E265 : db $86 +org $05E286 : db $9D +org $05E28A : db $85 +org $05E297 : db $86 +org $05E29E : db $87 +org $05E2A4 : db $86 +org $05E2C4 : db $8D +org $05E2C9 : db $9B +org $05E39D : db $85 +org $05E3A1 : db $86 +org $05E3B8 : db $9E +org $05E3CA : db $85 +org $05E3ED : db $85 +org $05E3F1 : db $86 +org $05E40D : db $86 +org $05E414 : db $9C +org $05E41A : db $87 +org $05E427 : db $8D +org $05E444 : db $87 +org $05E44E : db $80 +org $05E45E : db $87 +org $05E471 : db $80 +org $05E48B : db $85 +org $05E4A5 : db $85 +org $05E4B0 : db $86 +org $05E4CD : db $85 +org $05E4F5 : db $8D +org $05E4FE : db $85 +org $05E504 : db $8D +org $05E563 : db $86 +org $05E629 : db $86 +org $05E63B : db $86 +org $05E6B2 : db $9A +org $05E6BE : db $9A +org $05E6D0 : db $85 +org $05E6E1 : db $85 +org $05E6EB : db $86 +org $05E6F1 : db $85 +org $05E6FD : db $80 +org $05E779 : db $85 +org $05E788 : db $89 +org $05E7EE : db $9B +org $05E814 : db $86 +org $05E87E : db $9B +org $05E8BB : db $85 +org $05E8BF : db $9E +org $05E8D4 : db $86 +org $05E8EC : db $80 +org $05E8FA : db $85 +org $05E907 : db $86 +org $05E90D : db $87 +org $05E99F : db $85 +org $05E9AF : db $9A +org $05EA6B : db $85 +org $05EA6F : db $86 +org $05EA89 : db $86 +org $05EA8D : db $9E +org $05EA91 : db $87 +org $05EA98 : db $8D +org $05EAB3 : db $80 +org $05EAC5 : db $85 +org $05EAE6 : db $85 +org $05EB06 : db $85 +org $05EB12 : db $85 +org $05EB20 : db $87 +org $05EB4C : db $85 +org $05EB58 : db $85 +org $05EB6B : db $9A +org $05EB7F : db $86 +org $05EBC1 : db $85 +org $05EBC5 : db $86 +org $05EBF5 : db $80 +org $05EC51 : db $9D +org $05ECA1 : db $8D +org $05ECA8 : db $9E +org $05ECAC : db $85 +org $05ECB8 : db $80 +org $05ECCE : db $80 +org $05ECDC : db $86 +org $05ED09 : db $85 +org $05ED2A : db $85 +org $05ED38 : db $85 +org $05ED4F : db $80 +org $05ED5A : db $82 +org $05ED5E : db $89 +org $05ED6F : db $80 +org $05EDCB : db $85 +org $05EDDE : db $80 +org $05EDE9 : db $80 +org $05EDFC : db $85 +org $05EE3B : db $85 +org $05EE7B : db $86 +org $05EE7F : db $87 +org $05EE85 : db $86 +org $05EE94 : db $87 +org $05EECC : db $85 +org $05EED4 : db $86 +org $05EEF7 : db $85 +org $05EF60 : db $80 +org $05EF65 : db $86 +org $05EF78 : db $85 +org $05EF7C : db $86 +org $05EFB7 : db $9D +org $05EFBB : db $87 +org $05EFC2 : db $86 +org $05EFD1 : db $87 +org $05EFE8 : db $87 +org $05EFF1 : db $87 +org $05F033 : db $86 +org $05F03A : db $87 +org $05F086 : db $86 +org $05F09B : db $87 +org $05F0A4 : db $87 +org $05F0AD : db $8D +org $05F0BF : db $85 +org $05F0DE : db $9E +org $05F0E5 : db $80 +org $05F101 : db $85 +org $05F115 : db $85 +org $05F125 : db $85 +org $05F135 : db $85 +org $05F13F : db $85 +org $05F153 : db $80 +org $05F16F : db $85 +org $05F193 : db $85 +org $05F1AB : db $85 +org $05F1BF : db $85 +org $05F1D1 : db $85 +org $05F1DB : db $85 +org $05F1F0 : db $85 +org $05F203 : db $87 +org $05F215 : db $85 +org $05F254 : db $85 +org $05F258 : db $86 +org $05F2A4 : db $80 +org $05F2B5 : db $8D +org $05F2DB : db $9D +org $05F2E1 : db $8D +org $05F2E7 : db $8D +org $05F305 : db $89 +org $05F30F : db $8D +org $05F321 : db $86 +org $05F327 : db $9C +org $05F32D : db $87 +org $05F334 : db $87 +org $05F33E : db $80 +org $05F3B0 : db $87 +org $05F3C2 : db $85 +org $05F41A : db $87 +org $05F42C : db $85 +org $05F47A : db $9E +org $05F481 : db $80 +org $05F499 : db $85 +org $05F4B2 : db $85 +org $05F4BC : db $85 +org $05F4D0 : db $85 +org $05F4D9 : db $85 +org $05F4E2 : db $85 +org $05F51F : db $85 +org $05F562 : db $9D +org $05F593 : db $9D +org $05F5C4 : db $9D +org $05F5F5 : db $9D +org $05F639 : db $80 +org $05F64D : db $9E +org $05F651 : db $86 +org $05F65C : db $87 +org $05F665 : db $87 +org $05F68C : db $85 +org $05F697 : db $9E +org $05F6A9 : db $85 +org $05F6B3 : db $86 +org $05F6CA : db $9E +org $05F6D2 : db $8D +org $05F6F0 : db $87 +org $05F6F9 : db $85 +org $05F729 : db $85 +org $05F734 : db $9E +org $05F746 : db $85 +org $05F750 : db $86 +org $05F767 : db $9E +org $05F76F : db $8D +org $05F78D : db $87 +org $05F796 : db $85 +org $05F7CE : db $85 +org $05F7D9 : db $9E +org $05F7EB : db $85 +org $05F7F5 : db $86 +org $05F80C : db $9E +org $05F814 : db $8D +org $05F832 : db $87 +org $05F83B : db $85 +org $05F845 : db $85 +org $05F84B : db $8D +org $05F87E : db $85 +org $05F896 : db $85 +org $05F89D : db $9E +org $05F8A1 : db $87 +org $05F8EA : db $85 +org $05F8F8 : db $85 +org $05F938 : db $85 +org $05F93C : db $86 +org $05F942 : db $86 +org $05F947 : db $86 +org $05F94C : db $86 +org $05FA53 : db $86 +org $05FA74 : db $86 +org $05FA83 : db $9C +org $05FAC6 : db $9B +org $05FADA : db $9E +org $05FAE4 : db $86 +org $05FAF4 : db $80 +org $05FB0A : db $86 +org $05FB1D : db $89 +org $05FB23 : db $8D +org $05FB73 : db $85 +org $05FBB7 : db $89 +org $05FBC5 : db $85 +org $05FBCA : db $82 +org $05FBDA : db $8D +org $05FBE7 : db $89 +org $05FBFD : db $80 +org $05FC07 : db $86 +org $05FC0E : db $86 +org $05FC3E : db $8D +org $05FC45 : db $80 +org $05FC9C : db $8D +org $05FCA1 : db $86 +org $05FCA8 : db $86 +org $05FCD8 : db $8D +org $05FCDF : db $80 +org $05FD3E : db $87 +org $05FD47 : db $87 +org $05FD60 : db $86 +org $05FD67 : db $9C +org $05FD6D : db $87 +org $05FD91 : db $80 +org $05FEF5 : db $86 +org $05FF37 : db $86 +org $05FF3E : db $9D +org $05FF5C : db $89 +org $05FF6F : db $9E +org $05FF73 : db $85 +org $05FF8C : db $85 +org $05FF9D : db $85 +org $05FFF9 : db $85 +org $05FFFD : db $86 +org $06805C : db $8D +org $06806B : db $9D +org $068071 : db $89 +org $06813B : db $86 +org $06814F : db $8D +org $068183 : db $8D +org $0681E1 : db $9A +org $06826B : db $8D +org $06827C : db $8D +org $06828D : db $9D +org $06833E : db $89 +org $068364 : db $89 +org $068368 : db $89 +org $068397 : db $88 +org $06839B : db $89 +org $0683AD : db $89 +org $0683B8 : db $9D +org $0683C5 : db $83 +org $06840A : db $8D +org $068410 : db $8D +org $068416 : db $8D +org $068478 : db $85 +org $0684F3 : db $80 +org $068539 : db $89 +org $068541 : db $9D +org $068546 : db $9D +org $06854B : db $89 +org $0685AD : db $8D +org $06864B : db $85 +org $068650 : db $8D +org $06865A : db $80 +org $068857 : db $85 +org $068871 : db $85 +org $0688C3 : db $9D +org $0688CD : db $9D +org $0688D5 : db $9D +org $0688EC : db $8D +org $068949 : db $9D +org $06895F : db $9D +org $0689BC : db $80 +org $0689C0 : db $89 +org $0689D0 : db $9D +org $0689E1 : db $9D +org $068A21 : db $9D +org $068A4E : db $9E +org $068A97 : db $8D +org $068ACE : db $8D +org $068B00 : db $9E +org $068B40 : db $8D +org $068B59 : db $9D +org $068B5F : db $89 +org $068B7E : db $8D +org $068B9F : db $85 +org $068BBC : db $9A +org $068C16 : db $80 +org $068C38 : db $9E +org $068C40 : db $9E +org $068C48 : db $9E +org $068C51 : db $9E +org $068C59 : db $9E +org $068C61 : db $9E +org $068C80 : db $9E +org $068C88 : db $9E +org $068C90 : db $9E +org $068D1E : db $80 +org $068DCB : db $9D +org $068ECB : db $8D +org $068F37 : db $8D +org $068F8A : db $8D +org $068F9A : db $9D +org $068FA2 : db $85 +org $069063 : db $9D +org $069069 : db $9D +org $069166 : db $8D +org $0691B9 : db $9E +org $0691C7 : db $9D +org $0691D2 : db $9E +org $069207 : db $8D +org $06921B : db $9E +org $069252 : db $9E +org $069264 : db $80 +org $069473 : db $9D +org $069478 : db $9D +org $06947D : db $9D +org $0694D3 : db $8D +org $0694DC : db $9C +org $0694E0 : db $87 +org $069500 : db $80 +org $06952E : db $8D +org $06954C : db $8D +org $069617 : db $80 +org $06962D : db $8D +org $06964F : db $8D +org $069681 : db $9D +org $069687 : db $89 +org $06968B : db $86 +org $069717 : db $80 +org $069731 : db $8D +org $06973F : db $8D +org $069773 : db $8D +org $069812 : db $9D +org $069844 : db $8D +org $069860 : db $80 +org $069881 : db $8D +org $06988B : db $8D +org $06989C : db $8D +org $0698C8 : db $9D +org $069903 : db $80 +org $069916 : db $8D +org $069975 : db $8D +org $0699F7 : db $9D +org $069BE4 : db $85 +org $069C4D : db $80 +org $069C71 : db $8D +org $069CA1 : db $8D +org $069E22 : db $85 +org $069E46 : db $80 +org $069E58 : db $8D +org $069F08 : db $85 +org $069F30 : db $80 +org $069F68 : db $9D +org $069F6E : db $86 +org $069FCB : db $8D +org $06A001 : db $8D +org $06A011 : db $8D +org $06A216 : db $85 +org $06A2D7 : db $8D +org $06A33B : db $8D +org $06A34C : db $8D +org $06A35F : db $9D +org $06A365 : db $89 +org $06A3FC : db $85 +org $06A50F : db $85 +org $06A516 : db $9D +org $06A545 : db $9D +org $06A5EE : db $8D +org $06A68E : db $8D +org $06A697 : db $85 +org $06A69E : db $85 +org $06A6A6 : db $8D +org $06A735 : db $86 +org $06A740 : db $8D +org $06A759 : db $86 +org $06A767 : db $86 +org $06A7C9 : db $86 +org $06A7EB : db $9D +org $06A7F5 : db $8D +org $06A800 : db $8D +org $06A859 : db $8D +org $06A85E : db $9A +org $06A8E0 : db $86 +org $06A908 : db $9D +org $06A90E : db $89 +org $06A961 : db $8D +org $06A9CC : db $9D +org $06A9D5 : db $89 +org $06AA0A : db $8D +org $06ABDC : db $8D +org $06AC5B : db $9D +org $06AD53 : db $86 +org $06AD80 : db $9E +org $06AD97 : db $80 +org $06ADA8 : db $80 +org $06ADB6 : db $85 +org $06ADD8 : db $85 +org $06ADE4 : db $85 +org $06ADEF : db $80 +org $06AE0D : db $85 +org $06AE18 : db $80 +org $06AE37 : db $85 +org $06AE52 : db $8D +org $06AE61 : db $85 +org $06AE8F : db $80 +org $06AEAE : db $85 +org $06AF3F : db $85 +org $06AF49 : db $80 +org $06AF54 : db $80 +org $06AF63 : db $8D +org $06AF92 : db $80 +org $06AFE9 : db $82 +org $06AFF8 : db $8D +org $06B004 : db $80 +org $06B014 : db $80 +org $06B018 : db $82 +org $06B04B : db $8D +org $06B055 : db $80 +org $06B06B : db $80 +org $06B07B : db $85 +org $06B089 : db $85 +org $06B097 : db $85 +org $06B0B2 : db $85 +org $06B0BE : db $85 +org $06B0CC : db $87 +org $06B102 : db $8D +org $06B1B2 : db $9D +org $06B1FC : db $80 +org $06B211 : db $80 +org $06B260 : db $9E +org $06B268 : db $85 +org $06B285 : db $9E +org $06B2AD : db $85 +org $06B2BE : db $80 +org $06B2C2 : db $89 +org $06B335 : db $85 +org $06B352 : db $85 +org $06B3CB : db $8D +org $06B3D2 : db $80 +org $06B402 : db $85 +org $06B41B : db $85 +org $06B42C : db $85 +org $06B43B : db $85 +org $06B473 : db $85 +org $06B47F : db $85 +org $06B498 : db $85 +org $06B4A4 : db $85 +org $06B4B0 : db $85 +org $06B4C1 : db $85 +org $06B4DA : db $85 +org $06B4F6 : db $85 +org $06B525 : db $85 +org $06B53B : db $85 +org $06B54E : db $85 +org $06B564 : db $87 +org $06B577 : db $9D +org $06B5AC : db $85 +org $06B5B3 : db $9D +org $06B699 : db $85 +org $06B6DA : db $9D +org $06B739 : db $8D +org $06B750 : db $85 +org $06B7AE : db $86 +org $06B7BF : db $8D +org $06B7C7 : db $86 +org $06B901 : db $9C +org $06B907 : db $87 +org $06B918 : db $8D +org $06B922 : db $9E +org $06B952 : db $8D +org $06B957 : db $8D +org $06B961 : db $80 +org $06B96D : db $87 +org $06B997 : db $85 +org $06B9C9 : db $85 +org $06B9D7 : db $87 +org $06B9EC : db $85 +org $06BA12 : db $80 +org $06BA33 : db $8D +org $06BA55 : db $8D +org $06BA68 : db $8D +org $06BCAC : db $9C +org $06BCB2 : db $87 +org $06BCBD : db $9E +org $06BCC4 : db $80 +org $06BCD8 : db $85 +org $06BCF1 : db $86 +org $06BD16 : db $80 +org $06BD1A : db $89 +org $06BD2B : db $87 +org $06BD3B : db $85 +org $06BD47 : db $85 +org $06BD60 : db $85 +org $06BD6F : db $87 +org $06BD8B : db $85 +org $06BD99 : db $85 +org $06BDA2 : db $85 +org $06BDC5 : db $85 +org $06BDCF : db $80 +org $06BDDB : db $83 +org $06BDEC : db $9C +org $06BDF2 : db $87 +org $06BDF9 : db $80 +org $06BE62 : db $85 +org $06BE84 : db $87 +org $06BEAA : db $9D +org $06BEB0 : db $89 +org $06BEC1 : db $8D +org $06BEFA : db $9D +org $06BF00 : db $89 +org $06BF58 : db $9D +org $06BFBC : db $9D +org $06BFC2 : db $89 +org $06BFEB : db $85 +org $06BFF0 : db $85 +org $06BFF5 : db $85 +org $06BFFA : db $9E +org $06BFFF : db $9D +org $06C004 : db $9E +org $06C009 : db $85 +org $06C00E : db $85 +org $06C013 : db $9E +org $06C018 : db $85 +org $06C01D : db $85 +org $06C022 : db $85 +org $06C027 : db $85 +org $06C02C : db $85 +org $06C031 : db $85 +org $06C036 : db $85 +org $06C03B : db $85 +org $06C040 : db $85 +org $06C045 : db $9A +org $06C04A : db $85 +org $06C04F : db $85 +org $06C054 : db $85 +org $06C059 : db $85 +org $06C05E : db $85 +org $06C063 : db $85 +org $06C068 : db $85 +org $06C06D : db $85 +org $06C072 : db $85 +org $06C077 : db $85 +org $06C07C : db $85 +org $06C081 : db $85 +org $06C086 : db $85 +org $06C08B : db $85 +org $06C090 : db $85 +org $06C095 : db $85 +org $06C09A : db $85 +org $06C09F : db $85 +org $06C0A4 : db $85 +org $06C0A9 : db $85 +org $06C0AE : db $85 +org $06C0B3 : db $85 +org $06C0B8 : db $86 +org $06C0BD : db $8D +org $06C0C2 : db $8D +org $06C0C7 : db $8D +org $06C0CC : db $8D +org $06C0D1 : db $8D +org $06C0D6 : db $8D +org $06C0DB : db $8D +org $06C0E0 : db $9D +org $06C13D : db $87 +org $06C15C : db $9C +org $06C16E : db $8D +org $06C178 : db $9C +org $06C234 : db $86 +org $06C27D : db $85 +org $06C34A : db $9D +org $06C351 : db $8D +org $06C368 : db $8D +org $06C3AE : db $8D +org $06C437 : db $80 +org $06C45A : db $80 +org $06C4E1 : db $89 +org $06C4F1 : db $89 +org $06C503 : db $85 +org $06C510 : db $87 +org $06C51A : db $85 +org $06C523 : db $87 +org $06C527 : db $89 +org $06C55B : db $85 +org $06C56E : db $85 +org $06C5D4 : db $89 +org $06C617 : db $85 +org $06C628 : db $9D +org $06C662 : db $82 +org $06C666 : db $80 +org $06C677 : db $80 +org $06C689 : db $85 +org $06C68E : db $82 +org $06C6BD : db $8D +org $06C6CD : db $85 +org $06C6D6 : db $85 +org $06C6E1 : db $82 +org $06C6F9 : db $80 +org $06C71A : db $80 +org $06C71E : db $82 +org $06C740 : db $8D +org $06C750 : db $85 +org $06C759 : db $85 +org $06C772 : db $85 +org $06C786 : db $8D +org $06C79F : db $85 +org $06C7B4 : db $87 +org $06C7BE : db $85 +org $06C7C7 : db $87 +org $06C7DA : db $85 +org $06C7EB : db $85 +org $06C82D : db $89 +org $06C831 : db $8D +org $06C84E : db $9D +org $06C888 : db $82 +org $06C88C : db $80 +org $06C89D : db $80 +org $06C8AF : db $85 +org $06C8B4 : db $82 +org $06C924 : db $85 +org $06C94F : db $85 +org $06C958 : db $85 +org $06C974 : db $82 +org $06C98C : db $80 +org $06C9B0 : db $80 +org $06C9B4 : db $82 +org $06C9C3 : db $87 +org $06C9E3 : db $85 +org $06C9F7 : db $85 +org $06CA0F : db $85 +org $06CBA8 : db $85 +org $06CC29 : db $8D +org $06CCA0 : db $8D +org $06CF09 : db $80 +org $06CF99 : db $86 +org $06CFBE : db $80 +org $06CFD0 : db $86 +org $06CFE2 : db $85 +org $06CFEA : db $9E +org $06CFF4 : db $9E +org $06D002 : db $8D +org $06D00F : db $85 +org $06D04C : db $9E +org $06D055 : db $9E +org $06D0B1 : db $9E +org $06D0ED : db $8D +org $06D12B : db $86 +org $06D154 : db $8D +org $06D159 : db $80 +org $06D189 : db $87 +org $06D1AB : db $89 +org $06D1B2 : db $8D +org $06D259 : db $8D +org $06D420 : db $8D +org $06D4DA : db $8D +org $06D4E0 : db $9D +org $06D5DA : db $8D +org $06D81B : db $8D +org $06D825 : db $9D +org $06D82B : db $89 +org $06D8B9 : db $9A +org $06D911 : db $8D +org $06DDCE : db $8D +org $06DFAE : db $8D +org $06DFCC : db $8D +org $06E046 : db $8D +org $06E054 : db $8D +org $06E0C3 : db $8D +org $06E0D8 : db $9D +org $06E0DE : db $89 +org $06E0F5 : db $8D +org $06E0FF : db $8D +org $06E115 : db $8D +org $06E1F6 : db $86 +org $06E219 : db $86 +org $06E25F : db $8D +org $06E291 : db $9D +org $06E297 : db $89 +org $06E2BF : db $9E +org $06E2F3 : db $8D +org $06E304 : db $8D +org $06E315 : db $9E +org $06E496 : db $89 +org $06E5AC : db $9D +org $06E7B6 : db $8D +org $06E81D : db $9D +org $06E848 : db $86 +org $06E8D3 : db $80 +org $06EBB4 : db $8D +org $06EBC1 : db $8D +org $06EC07 : db $86 +org $06EC60 : db $86 +org $06EC7F : db $86 +org $06ECC8 : db $86 +org $06ECFB : db $86 +org $06ED29 : db $8D +org $06ED73 : db $86 +org $06EDC9 : db $8D +org $06EDD7 : db $8D +org $06EDDB : db $85 +org $06EDE4 : db $8D +org $06EDF1 : db $86 +org $06EE60 : db $8D +org $06EE6B : db $8D +org $06EE72 : db $86 +org $06EE9F : db $8D +org $06EEE7 : db $8D +org $06EF2F : db $8D +org $06EFA6 : db $8D +org $06EFF5 : db $89 +org $06F067 : db $89 +org $06F098 : db $8D +org $06F0D7 : db $89 +org $06F1B2 : db $8D +org $06F1B6 : db $86 +org $06F1C3 : db $8D +org $06F289 : db $8D +org $06F317 : db $8D +org $06F365 : db $8D +org $06F45D : db $8D +org $06F6C9 : db $8D +org $06F6DA : db $8D +org $06F8A0 : db $8D +org $06F8A6 : db $8D +org $06F9BB : db $8D +org $06F9F6 : db $8D +org $06FA35 : db $89 +org $06FA3D : db $85 +org $06FA41 : db $89 +org $06FBFB : db $89 +org $06FC20 : db $8D +org $06FC3F : db $86 +org $06FC4B : db $8D +org $06FD39 : db $85 +org $06FF76 : db $89 +org $06FFD0 : db $86 +org $07803C : db $8D +org $07815B : db $87 +org $0782BB : db $87 +org $0782C2 : db $87 +org $0782FE : db $87 +org $078320 : db $89 +org $07834A : db $82 +org $07836E : db $89 +org $078380 : db $87 +org $07838C : db $82 +org $0783DE : db $87 +org $0783F0 : db $82 +org $07846C : db $87 +org $078473 : db $87 +org $07854C : db $87 +org $0785A2 : db $89 +org $0785D1 : db $89 +org $07862D : db $89 +org $078659 : db $88 +org $078698 : db $88 +org $0786A8 : db $88 +org $0786EC : db $89 +org $078797 : db $89 +org $0787D4 : db $89 +org $0787E5 : db $81 +org $07883E : db $87 +org $0788FF : db $87 +org $07898D : db $87 +org $078A19 : db $87 +org $078A5A : db $89 +org $078B1E : db $87 +org $078C4C : db $87 +org $078DCD : db $87 +org $078EDD : db $87 +org $078F2A : db $89 +org $078F50 : db $89 +org $07905F : db $89 +org $079090 : db $87 +org $0790B7 : db $87 +org $0790ED : db $89 +org $079149 : db $87 +org $079150 : db $87 +org $07918D : db $87 +org $0791FD : db $87 +org $079205 : db $89 +org $079209 : db $86 +org $079411 : db $87 +org $079418 : db $87 +org $07941F : db $87 +org $079496 : db $82 +org $0794A4 : db $80 +org $0794D9 : db $81 +org $0794DE : db $9B +org $0794EE : db $81 +org $0794F5 : db $81 +org $07951D : db $8D +org $07954D : db $87 +org $0795AC : db $89 +org $0795F7 : db $87 +org $079603 : db $89 +org $07973A : db $87 +org $079766 : db $87 +org $07976D : db $87 +org $079841 : db $87 +org $079962 : db $81 +org $079979 : db $82 +org $07997F : db $82 +org $07999B : db $81 +org $0799FA : db $89 +org $079A11 : db $8D +org $079A41 : db $89 +org $079A5F : db $89 +org $079C8F : db $9C +org $079C93 : db $8D +org $079D2F : db $89 +org $079DD1 : db $89 +org $079E35 : db $9C +org $079E4C : db $89 +org $079E83 : db $8D +org $079E92 : db $8D +org $079E9C : db $8D +org $079EA2 : db $8D +org $079EC4 : db $8D +org $079ECF : db $8D +org $079ED5 : db $8D +org $079F5D : db $89 +org $079F66 : db $88 +org $079FC5 : db $89 +org $079FD4 : db $9A +org $07A052 : db $89 +org $07A07C : db $8D +org $07A0D7 : db $89 +org $07A146 : db $89 +org $07A1A7 : db $8D +org $07A1D2 : db $8D +org $07A208 : db $8D +org $07A211 : db $9E +org $07A220 : db $8D +org $07A229 : db $9E +org $07A238 : db $8D +org $07A25A : db $89 +org $07A25E : db $81 +org $07A266 : db $89 +org $07A2E6 : db $89 +org $07A37C : db $89 +org $07A390 : db $89 +org $07A3A1 : db $89 +org $07A3AA : db $9D +org $07A43E : db $89 +org $07A44A : db $89 +org $07A45E : db $89 +org $07A552 : db $89 +org $07A634 : db $88 +org $07A6F0 : db $87 +org $07A763 : db $89 +org $07A772 : db $89 +org $07A86E : db $87 +org $07A8E5 : db $89 +org $07A928 : db $9C +org $07A95E : db $82 +org $07A99D : db $87 +org $07A9F8 : db $81 +org $07AA08 : db $87 +org $07AAE3 : db $80 +org $07AAEB : db $89 +org $07AAF9 : db $89 +org $07AB53 : db $89 +org $07ACB7 : db $82 +org $07ACD4 : db $87 +org $07ACDC : db $89 +org $07AD35 : db $87 +org $07ADF1 : db $89 +org $07AE37 : db $89 +org $07AEDA : db $88 +org $07AF47 : db $89 +org $07B0CF : db $9C +org $07B137 : db $81 +org $07B13D : db $9B +org $07B154 : db $86 +org $07B230 : db $81 +org $07B236 : db $9B +org $07B248 : db $86 +org $07B3D5 : db $87 +org $07B491 : db $89 +org $07B4D3 : db $87 +org $07B50D : db $9C +org $07B571 : db $81 +org $07B58C : db $89 +org $07B592 : db $89 +org $07B5A2 : db $87 +org $07BB0B : db $81 +org $07BB91 : db $81 +org $07BC0B : db $81 +org $07BC26 : db $87 +org $07BC5E : db $89 +org $07BF14 : db $87 +org $07BF8A : db $89 +org $07C110 : db $89 +org $07C1A0 : db $9B +org $07C1A9 : db $9B +org $07C39F : db $87 +org $07C565 : db $87 +org $07C61E : db $81 +org $07C6A4 : db $81 +org $07C6BF : db $87 +org $07C6FD : db $89 +org $07C946 : db $87 +org $07C9C6 : db $89 +org $07D11F : db $82 +org $07D282 : db $87 +org $07D299 : db $87 +org $07D3D5 : db $81 +org $07DC16 : db $80 +org $07DC36 : db $9B +org $07E8E4 : db $87 +org $07E8E8 : db $87 +org $07E981 : db $82 +org $07E992 : db $82 +org $07E9A9 : db $82 +org $07E9BA : db $82 +org $07E9D6 : db $82 +org $07E9DC : db $82 +org $07E9E6 : db $82 +org $07E9EC : db $82 +org $07E9F2 : db $82 +org $07EA06 : db $87 +org $07EBAA : db $80 +org $07F0C8 : db $8D +org $07F15A : db $87 +org $07F199 : db $87 +org $07F2ED : db $87 +org $07F2F1 : db $87 +org $07F31D : db $82 +org $07F329 : db $89 +org $07F3B9 : db $87 +org $07F3BD : db $87 +org $07F402 : db $87 +org $07F406 : db $87 +org $07F4F5 : db $81 +org $07F8EF : db $80 +org $08801B : db $8D +org $08803B : db $8D +org $0880BA : db $9C +org $0880C8 : db $87 +org $088109 : db $89 +org $0881DC : db $9C +org $088223 : db $9C +org $088275 : db $83 +org $0882D9 : db $86 +org $0882DE : db $86 +org $08830C : db $86 +org $088351 : db $8D +org $088357 : db $8D +org $08835D : db $8D +org $08846E : db $8D +org $088474 : db $8D +org $08847A : db $8D +org $088753 : db $81 +org $0887E6 : db $89 +org $088A52 : db $80 +org $088A5C : db $86 +org $088A8A : db $86 +org $088C94 : db $80 +org $088C9E : db $86 +org $088CB8 : db $86 +org $088DB7 : db $86 +org $088DBD : db $86 +org $088DDB : db $9D +org $088E63 : db $86 +org $088FAF : db $8D +org $088FB5 : db $8D +org $088FBB : db $8D +org $088FFC : db $88 +org $089043 : db $88 +org $089178 : db $89 +org $0891A0 : db $86 +org $0891EC : db $89 +org $089796 : db $81 +org $08989E : db $86 +org $0898CA : db $83 +org $08A188 : db $89 +org $08A4FD : db $88 +org $08A663 : db $89 +org $08A7AE : db $8D +org $08A7B4 : db $8D +org $08A870 : db $81 +org $08AA8C : db $8D +org $08AA92 : db $8D +org $08AAEC : db $82 +org $08AAF0 : db $82 +org $08AAF8 : db $82 +org $08AAFC : db $82 +org $08AC0C : db $86 +org $08AD08 : db $82 +org $08AD0C : db $82 +org $08B233 : db $89 +org $08B2A5 : db $86 +org $08B4A3 : db $9C +org $08B4AB : db $9C +org $08B4D4 : db $89 +org $08B6BC : db $86 +org $08B6C0 : db $86 +org $08BB9C : db $86 +org $08BBA2 : db $86 +org $08BBCC : db $85 +org $08BBD9 : db $86 +org $08BBFC : db $9C +org $08BCBE : db $89 +org $08BE24 : db $87 +org $08BED6 : db $89 +org $08C053 : db $8D +org $08C05B : db $8D +org $08C45E : db $89 +org $08C475 : db $87 +org $08C503 : db $9B +org $08C52E : db $80 +org $08C556 : db $89 +org $08C601 : db $9C +org $08C6A3 : db $80 +org $08C6CB : db $89 +org $08C6E1 : db $89 +org $08C6FC : db $89 +org $08CAEC : db $80 +org $08CB1F : db $9B +org $08CB6D : db $87 +org $08CC6B : db $82 +org $08CCC1 : db $89 +org $08CD3D : db $9C +org $08CDFD : db $9B +org $08CF0A : db $8D +org $08D01E : db $87 +org $08D0B8 : db $9B +org $08D0C0 : db $89 +org $08D419 : db $82 +org $08D41F : db $82 +org $08D55A : db $8D +org $08D804 : db $9C +org $08D9A1 : db $88 +org $08DA0A : db $88 +org $08DD94 : db $88 +org $08DDEC : db $9C +org $08DDFA : db $9C +org $08DEF1 : db $87 +org $08DF62 : db $89 +org $08E0B5 : db $89 +org $08E115 : db $89 +org $08E170 : db $87 +org $08E209 : db $89 +org $08E258 : db $86 +org $08E25E : db $86 +org $08E2BB : db $86 +org $08E2D4 : db $86 +org $08E448 : db $89 +org $08E880 : db $87 +org $08E902 : db $9C +org $08EABD : db $9D +org $08EBB9 : db $9C +org $08EBC2 : db $9C +org $08EBCE : db $9C +org $08EBD5 : db $9C +org $08EE05 : db $82 +org $08EE24 : db $8D +org $08F285 : db $81 +org $08F363 : db $8D +org $08F402 : db $8D +org $08F408 : db $8D +org $08F640 : db $89 +org $08F647 : db $9C +org $08F924 : db $8D +org $08F92A : db $8D +org $08FA6C : db $82 +org $08FA82 : db $82 +org $08FAF4 : db $9C +org $08FB00 : db $9C +org $08FB15 : db $9C +org $08FB21 : db $9C +org $08FB45 : db $8D +org $08FB4F : db $8D +org $08FB54 : db $8D +org $09809E : db $88 +org $09813D : db $8D +org $098151 : db $88 +org $09816E : db $89 +org $0981A2 : db $8D +org $0982FF : db $89 +org $09834F : db $8D +org $09835A : db $8D +org $098363 : db $89 +org $098661 : db $9B +org $0986FD : db $89 +org $098701 : db $8D +org $09874C : db $8D +org $09875D : db $8D +org $098781 : db $80 +org $098785 : db $9B +org $09878F : db $80 +org $0987A2 : db $80 +org $0987A6 : db $9B +org $0987DA : db $89 +org $098877 : db $8D +org $09889D : db $8D +org $0988A8 : db $8D +org $098A2C : db $8D +org $098A46 : db $80 +org $098A50 : db $80 +org $098A5A : db $80 +org $098AE1 : db $8D +org $098AF1 : db $80 +org $098BD5 : db $80 +org $098C70 : db $88 +org $098C88 : db $80 +org $098DE1 : db $87 +org $098DFF : db $88 +org $098E9E : db $88 +org $098EA6 : db $88 +org $098F3D : db $8D +org $0990A8 : db $8D +org $099105 : db $8D +org $099110 : db $8D +org $09915E : db $8D +org $099169 : db $8D +org $0991CD : db $8D +org $099222 : db $8D +org $099303 : db $88 +org $099308 : db $88 +org $09933A : db $88 +org $099366 : db $8D +org $09976A : db $8D +org $0997F1 : db $8D +org $09985C : db $87 +org $099862 : db $8D +org $09989A : db $89 +org $0998D9 : db $88 +org $0998F3 : db $8D +org $099A83 : db $8D +org $099A9A : db $82 +org $099AC6 : db $8D +org $099B90 : db $89 +org $099BC1 : db $80 +org $099BCF : db $9B +org $099C64 : db $88 +org $099CD2 : db $9C +org $099CF7 : db $88 +org $099D82 : db $88 +org $099DFE : db $88 +org $099E6A : db $88 +org $099F79 : db $88 +org $099FE9 : db $87 +org $09A00E : db $9C +org $09A1C8 : db $9E +org $09A1EF : db $89 +org $09A212 : db $9D +org $09A2B3 : db $89 +org $09A2EB : db $89 +org $09A42E : db $89 +org $09A680 : db $9E +org $09A686 : db $9C +org $09A6A0 : db $9E +org $09A6B5 : db $9E +org $09AD29 : db $88 +org $09AD4B : db $8D +org $09AE07 : db $8D +org $09AE0B : db $88 +org $09AE16 : db $88 +org $09AE45 : db $9D +org $09AE63 : db $8D +org $09AE83 : db $9D +org $09AE89 : db $89 +org $09AE99 : db $8D +org $09AEAB : db $89 +org $09AEAF : db $89 +org $09AEB3 : db $89 +org $09AEB9 : db $9D +org $09AEC1 : db $8D +org $09AEC5 : db $89 +org $09AF1D : db $89 +org $09AF24 : db $89 +org $09AFA5 : db $9D +org $09B071 : db $9D +org $09B0F3 : db $8D +org $09B101 : db $8D +org $09B10F : db $8D +org $09B204 : db $8D +org $09B381 : db $81 +org $09B65A : db $81 +org $09B73F : db $9D +org $09B745 : db $8D +org $09B7DF : db $9D +org $09B838 : db $9D +org $09B8F8 : db $86 +org $09B90F : db $9D +org $09B916 : db $8D +org $09B963 : db $8D +org $09B9A7 : db $9D +org $09BA5B : db $9D +org $09BAC7 : db $8D +org $09BAF2 : db $9D +org $09BC4B : db $8D +org $09BC98 : db $9D +org $09BCBB : db $8D +org $09BCF3 : db $9D +org $09BD36 : db $8D +org $09BD60 : db $8D +org $09BD71 : db $8D +org $09BDC7 : db $9D +org $09BE04 : db $8D +org $09BE47 : db $9D +org $09BE90 : db $9D +org $09BED2 : db $86 +org $09BF2F : db $8D +org $09BF9D : db $8D +org $09BFB4 : db $9D +org $09C013 : db $8D +org $09C039 : db $9D +org $09C123 : db $89 +org $09C360 : db $8D +org $09C451 : db $89 +org $09C49C : db $89 +org $09C4A0 : db $89 +org $09EDC8 : db $89 +org $09EDED : db $85 +org $09EE2D : db $89 +org $09EE3F : db $80 +org $09EE56 : db $9D +org $09EE5A : db $89 +org $09EEBC : db $86 +org $09EEDE : db $8D +org $09EEE9 : db $9D +org $09EF04 : db $8D +org $09EF26 : db $8D +org $09F2A0 : db $8D +org $09F330 : db $8A +org $09F342 : db $8E +org $09F346 : db $80 +org $09F353 : db $80 +org $09F36A : db $80 +org $09F3A4 : db $80 +org $09F3DC : db $9C +org $09F3E5 : db $80 +org $09F433 : db $8E +org $09F453 : db $80 +org $09F468 : db $80 +org $09F479 : db $9B +org $09F481 : db $9C +org $09F486 : db $88 +org $09F48B : db $88 +org $09F49A : db $8E +org $09F4CC : db $88 +org $09F51B : db $82 +org $09F51F : db $82 +org $09F537 : db $82 +org $09F543 : db $8B +org $09F569 : db $89 +org $09F58B : db $89 +org $09F5DE : db $80 +org $09F5F4 : db $80 +org $09F5FF : db $8C +org $09F60A : db $80 +org $09F614 : db $8C +org $09F66B : db $80 +org $09F6A4 : db $89 +org $09F6B4 : db $88 +org $09F714 : db $88 +org $09F718 : db $8D +org $09F727 : db $80 +org $09F72F : db $81 +org $09F735 : db $80 +org $09F742 : db $80 +org $09F762 : db $8B +org $09F7A6 : db $86 +org $09F7AA : db $8D +org $09F81C : db $89 +org $09F81C : db $89 +org $09F828 : db $89 +org $09FA90 : db $89 +org $09FAC6 : db $89 +org $09FAD5 : db $89 +org $09FAE6 : db $89 +org $09FB22 : db $89 +org $09FCB9 : db $89 +org $09FCBF : db $89 +org $09FDEF : db $89 +org $09FE2C : db $89 +org $09FE74 : db $89 +org $09FEE9 : db $80 +org $09FEEF : db $80 +org $09FEF8 : db $80 +org $09FF0F : db $80 +org $09FF16 : db $80 +org $09FF57 : db $80 +org $09FF5D : db $80 +org $09FF66 : db $80 +org $09FF7D : db $80 +org $09FF84 : db $80 +org $0AB756 : db $80 +org $0AB771 : db $8A +org $0AB83B : db $8A +org $0AB846 : db $8A +org $0AB851 : db $8A +org $0AB85C : db $8A +org $0AB86E : db $8A +org $0AB887 : db $8A +org $0AB892 : db $8A +org $0AB89D : db $8A +org $0AB8A8 : db $8A +org $0AB8BA : db $8A +org $0AB910 : db $82 +org $0AB914 : db $82 +org $0AB92C : db $80 +org $0AB930 : db $8B +org $0AB93A : db $80 +org $0AB943 : db $82 +org $0AB97A : db $82 +org $0AB9A9 : db $89 +org $0AB9AD : db $86 +org $0AB9B5 : db $80 +org $0AB9D4 : db $80 +org $0ABA5B : db $80 +org $0ABA61 : db $8A +org $0ABA89 : db $82 +org $0ABAA7 : db $8A +org $0ABAC1 : db $80 +org $0ABB13 : db $8A +org $0ABB4F : db $8A +org $0ABBC3 : db $8A +org $0ABBCA : db $8A +org $0ABBE5 : db $8A +org $0ABBEC : db $8A +org $0ABBFC : db $80 +org $0ABC59 : db $8A +org $0ABC7C : db $80 +org $0ABD25 : db $8A +org $0ABD66 : db $8A +org $0ABD6E : db $8A +org $0ABD7D : db $8A +org $0ABDA1 : db $8A +org $0ABDA9 : db $8A +org $0AC006 : db $8A +org $0AC040 : db $8A +org $0AC04A : db $8A +org $0AC052 : db $8A +org $0AC05A : db $8A +org $0AC062 : db $8A +org $0AC082 : db $8A +org $0AC08A : db $8A +org $0AC09C : db $8A +org $0AC0C1 : db $8A +org $0AC0CB : db $8A +org $0AC0D3 : db $8A +org $0AC0DB : db $8A +org $0AC0E3 : db $8A +org $0AC101 : db $8A +org $0AC109 : db $8A +org $0AC11B : db $8A +org $0AC140 : db $8A +org $0AC14A : db $8A +org $0AC152 : db $8A +org $0AC15A : db $8A +org $0AC162 : db $8A +org $0AC182 : db $8A +org $0AC18A : db $8A +org $0AC19C : db $8A +org $0AC1BC : db $8A +org $0AC1C6 : db $8A +org $0AC1CE : db $8A +org $0AC1D6 : db $8A +org $0AC1DE : db $8A +org $0AC1FE : db $8A +org $0AC206 : db $8A +org $0AC218 : db $8A +org $0AC238 : db $8A +org $0AC242 : db $8A +org $0AC24A : db $8A +org $0AC252 : db $8A +org $0AC25A : db $8A +org $0AC27A : db $8A +org $0AC282 : db $8A +org $0AC294 : db $8A +org $0AC2B4 : db $8A +org $0AC2BE : db $8A +org $0AC2C6 : db $8A +org $0AC2CE : db $8A +org $0AC2D6 : db $8A +org $0AC2F6 : db $8A +org $0AC2FE : db $8A +org $0AC310 : db $8A +org $0AC330 : db $8A +org $0AC33A : db $8A +org $0AC342 : db $8A +org $0AC34A : db $8A +org $0AC352 : db $8A +org $0AC372 : db $8A +org $0AC37A : db $8A +org $0AC38C : db $8A +org $0AC3D1 : db $8A +org $0AC46A : db $8A +org $0AC541 : db $8A +org $0AE0C6 : db $80 +org $0AE0C9 : db $98 +org $0AE0C9 : db $98 +org $0AE0CC : db $8A +org $0AE0CC : db $8A +org $0AE0CF : db $98 +org $0AE0CF : db $98 +org $0AE0D2 : db $8A +org $0AE0D2 : db $8A +org $0AE0D5 : db $8A +org $0AE0D5 : db $8A +org $0AE0D8 : db $98 +org $0AE0D8 : db $98 +org $0AE0DB : db $8A +org $0AE0DB : db $8A +org $0AE0DE : db $8A +org $0AE0DE : db $8A +org $0AE0E1 : db $98 +org $0AE0E1 : db $98 +org $0AE13B : db $80 +org $0AE13F : db $80 +org $0AE148 : db $9B +org $0AE14C : db $9B +org $0AE155 : db $9B +org $0AE159 : db $82 +org $0AE967 : db $8A +org $0AE977 : db $8A +org $0AE98C : db $8A +org $0AEF34 : db $80 +org $0AEF5B : db $80 +org $0AEF65 : db $8D +org $0AEF6F : db $80 +org $0AEF73 : db $80 +org $0AEF77 : db $80 +org $0AEF7B : db $80 +org $0AEFCD : db $82 +org $0AEFDC : db $80 +org $0BFFAB : db $82 +org $0BFFAF : db $82 +org $0BFFB3 : db $89 +org $0BFFF1 : db $89 +org $0BFFF5 : db $87 +org $0CC118 : db $80 +org $0CC11B : db $8C +org $0CC11B : db $8C +org $0CC11E : db $8C +org $0CC11E : db $8C +org $0CC121 : db $8C +org $0CC121 : db $8C +org $0CC124 : db $8C +org $0CC124 : db $8C +org $0CC127 : db $8C +org $0CC127 : db $8C +org $0CC12A : db $8C +org $0CC12A : db $8C +org $0CC12D : db $8C +org $0CC12D : db $8C +org $0CC130 : db $8C +org $0CC130 : db $8C +org $0CC133 : db $8C +org $0CC133 : db $8C +org $0CC136 : db $8C +org $0CC136 : db $8C +org $0CC13F : db $80 +org $0CC143 : db $82 +org $0CC18A : db $80 +org $0CC18D : db $8C +org $0CC18D : db $8C +org $0CC190 : db $8C +org $0CC190 : db $8C +org $0CC193 : db $8C +org $0CC193 : db $8C +org $0CC196 : db $8C +org $0CC196 : db $8C +org $0CC199 : db $8C +org $0CC199 : db $8C +org $0CC19C : db $8C +org $0CC19C : db $8C +org $0CC19F : db $8C +org $0CC19F : db $8C +org $0CC1A2 : db $8C +org $0CC1A2 : db $8C +org $0CC1A5 : db $82 +org $0CC1A5 : db $82 +org $0CC1A8 : db $8E +org $0CC1A8 : db $8E +org $0CC1AB : db $80 +org $0CC1AB : db $80 +org $0CC1AE : db $80 +org $0CC1AE : db $80 +org $0CC20B : db $80 +org $0CC20F : db $80 +org $0CC22C : db $80 +org $0CC230 : db $80 +org $0CC236 : db $80 +org $0CC26E : db $8C +org $0CC277 : db $80 +org $0CC293 : db $8C +org $0CC2CB : db $8C +org $0CC30A : db $80 +org $0CC338 : db $89 +org $0CC390 : db $8C +org $0CC398 : db $8C +org $0CC3A0 : db $8C +org $0CC3A8 : db $8C +org $0CC3B0 : db $8C +org $0CC3B8 : db $8C +org $0CC3C0 : db $8C +org $0CC3C8 : db $8C +org $0CC41C : db $80 +org $0CC50A : db $80 +org $0CC518 : db $80 +org $0CC52F : db $80 +org $0CC58B : db $80 +org $0CC94B : db $80 +org $0CC978 : db $80 +org $0CC9CD : db $80 +org $0CCA7E : db $8C +org $0CCA86 : db $8C +org $0CCB11 : db $80 +org $0CCC79 : db $80 +org $0CCC7C : db $8C +org $0CCC7C : db $8C +org $0CCC7F : db $8C +org $0CCC7F : db $8C +org $0CCC82 : db $8C +org $0CCC82 : db $8C +org $0CCC85 : db $8C +org $0CCC85 : db $8C +org $0CCC88 : db $8C +org $0CCC88 : db $8C +org $0CCC8C : db $80 +org $0CCCA5 : db $9B +org $0CCCA9 : db $9B +org $0CCCB2 : db $9B +org $0CCCC3 : db $80 +org $0CCCC7 : db $80 +org $0CCCCB : db $80 +org $0CCCD5 : db $80 +org $0CCD5A : db $82 +org $0CCDA0 : db $80 +org $0CCDA4 : db $80 +org $0CCDA8 : db $9B +org $0CCDCC : db $8C +org $0CCDF8 : db $80 +org $0CCE7D : db $80 +org $0CCF52 : db $80 +org $0CCF55 : db $8C +org $0CCF55 : db $8C +org $0CCF58 : db $8C +org $0CCF58 : db $8C +org $0CCF5B : db $8C +org $0CCF5B : db $8C +org $0CCF5E : db $8C +org $0CCF5E : db $8C +org $0CCF61 : db $8C +org $0CCF61 : db $8C +org $0CD050 : db $80 +org $0CD1C2 : db $80 +org $0CD2B3 : db $80 +org $0CD2BA : db $80 +org $0CD364 : db $80 +org $0CD367 : db $8C +org $0CD367 : db $8C +org $0CD36A : db $8C +org $0CD36A : db $8C +org $0CD36D : db $8C +org $0CD36D : db $8C +org $0CD370 : db $8C +org $0CD370 : db $8C +org $0CD3B0 : db $80 +org $0CD4CD : db $80 +org $0CD5A6 : db $80 +org $0CD75A : db $80 +org $0CD75D : db $8C +org $0CD75D : db $8C +org $0CD760 : db $8C +org $0CD760 : db $8C +org $0CD763 : db $8C +org $0CD763 : db $8C +org $0CD767 : db $8C +org $0CD792 : db $80 +org $0CD9E5 : db $8C +org $0CDA0E : db $8C +org $0CDA2C : db $8C +org $0CDA7C : db $8C +org $0CDAC2 : db $8C +org $0CDAD0 : db $8C +org $0CDB42 : db $84 +org $0CDB54 : db $80 +org $0CDB81 : db $80 +org $0CDC0E : db $8C +org $0CDC12 : db $8C +org $0CDC18 : db $8C +org $0CDC4B : db $8C +org $0CDC4F : db $8C +org $0CDC55 : db $8C +org $0CDC61 : db $8C +org $0CDC6A : db $8C +org $0CED64 : db $80 +org $0CED7D : db $80 +org $0CED81 : db $80 +org $0CED8D : db $9B +org $0CED96 : db $9B +org $0CED9A : db $9B +org $0CEE3B : db $80 +org $0CEE3F : db $80 +org $0CEE7E : db $8A +org $0CEEC1 : db $80 +org $0CEED1 : db $82 +org $0CEEF7 : db $82 +org $0CEF53 : db $82 +org $0CEF79 : db $82 +org $0CEFC1 : db $82 +org $0CEFE6 : db $82 +org $0CEFEE : db $82 +org $0CF03A : db $8A +org $0CF041 : db $8C +org $0CF045 : db $82 +org $0CF049 : db $8E +org $0CF0A5 : db $8E +org $0CF0F2 : db $80 +org $0CF0FD : db $80 +org $0CF166 : db $8C +org $0CF16C : db $8C +org $0CF172 : db $8C +org $0CF178 : db $8C +org $0CF17E : db $8C +org $0CF18A : db $8C +org $0CF19E : db $8C +org $0CF1A8 : db $8C +org $0CF1FE : db $8C +org $0CF216 : db $8C +org $0CF21C : db $8C +org $0CF222 : db $8C +org $0CF235 : db $8C +org $0CF240 : db $8D +org $0CF244 : db $9D +org $0CF337 : db $8C +org $0CF33D : db $8C +org $0CF37E : db $9D +org $0CF3AE : db $8C +org $0CF3B4 : db $8C +org $0CF3BA : db $8C +org $0CF3C0 : db $8C +org $0CF3C7 : db $8D +org $0CF3CB : db $9D +org $0CF410 : db $8C +org $0CF440 : db $8C +org $0CF45D : db $8C +org $0CF486 : db $8C +org $0CF4FB : db $8C +org $0CF501 : db $8C +org $0CF517 : db $8C +org $0CF602 : db $8C +org $0CF608 : db $8C +org $0CF60E : db $8C +org $0CF614 : db $8C +org $0CF61F : db $8C +org $0CF629 : db $8C +org $0CF652 : db $80 +org $0CF662 : db $8A +org $0CF678 : db $8E +org $0CF694 : db $8C +org $0CF69A : db $8C +org $0CF69E : db $8C +org $0CF6C6 : db $8E +org $0CF6DC : db $8A +org $0CF6EC : db $8A +org $0CF954 : db $8C +org $0CF95B : db $8C +org $0CF962 : db $8C +org $0CF969 : db $8C +org $0CF9ED : db $8C +org $0CF9ED : db $8C +org $0CF9F3 : db $8C +org $0CFF21 : db $8C +org $0CFF2A : db $8C +org $0CFF33 : db $8C +org $0CFF40 : db $8C +org $0CFF49 : db $8C +org $0CFF52 : db $9B +org $0CFF56 : db $9B +org $0CFF5A : db $9B +org $0CFF5E : db $9B +org $0CFF62 : db $9B +org $0DA32A : db $87 +org $0DB81B : db $8D +org $0DBB9D : db $8D +org $0DBBC5 : db $8D +org $0DBBDD : db $8D +org $0DBD3D : db $85 +org $0DBD43 : db $86 +org $0DBE25 : db $85 +org $0DBE83 : db $85 +org $0DBFC6 : db $85 +org $0DC0C5 : db $85 +org $0DC0F0 : db $86 +org $0DC21A : db $86 +org $0DC240 : db $85 +org $0DC267 : db $86 +org $0DC2BD : db $85 +org $0DC2CC : db $8D +org $0DC2DF : db $80 +org $0DC2EF : db $9E +org $0DC2F3 : db $85 +org $0DC2FE : db $85 +org $0DC316 : db $86 +org $0DC329 : db $86 +org $0DC32D : db $9D +org $0DC334 : db $9E +org $0DC33C : db $85 +org $0DC34C : db $9E +org $0DC372 : db $85 +org $0DC37D : db $85 +org $0DC38F : db $86 +org $0DC399 : db $85 +org $0DC3AA : db $85 +org $0DC3FB : db $85 +org $0DC3FF : db $86 +org $0DC49F : db $85 +org $0DC4A3 : db $86 +org $0DC4BA : db $85 +org $0DC4BE : db $9E +org $0DC505 : db $85 +org $0DC509 : db $86 +org $0DC52C : db $9C +org $0DC532 : db $87 +org $0DC537 : db $87 +org $0DC571 : db $85 +org $0DC6DC : db $85 +org $0DC6F3 : db $85 +org $0DC6F7 : db $9E +org $0DC754 : db $85 +org $0DC758 : db $86 +org $0DC768 : db $80 +org $0DC773 : db $86 +org $0DC77A : db $9C +org $0DC780 : db $87 +org $0DC795 : db $80 +org $0DC7A0 : db $80 +org $0DC7BF : db $8D +org $0DC7E5 : db $85 +org $0DC7EE : db $85 +org $0DC949 : db $85 +org $0DC994 : db $80 +org $0DC9AB : db $8D +org $0DC9D1 : db $85 +org $0DC9DA : db $85 +org $0DCA6C : db $85 +org $0DCB18 : db $85 +org $0DCB1F : db $9D +org $0DCB4F : db $9A +org $0DCB56 : db $85 +org $0DCB5A : db $86 +org $0DCB67 : db $80 +org $0DCB7C : db $85 +org $0DCBA8 : db $85 +org $0DCBD5 : db $8D +org $0DCBE5 : db $8D +org $0DCBEC : db $85 +org $0DCBF3 : db $9E +org $0DCC09 : db $80 +org $0DCC1B : db $85 +org $0DCC8A : db $85 +org $0DCCB3 : db $85 +org $0DCCCD : db $85 +org $0DCCDC : db $85 +org $0DCCEB : db $85 +org $0DCCFC : db $85 +org $0DCD0D : db $85 +org $0DCDB8 : db $85 +org $0DCDBC : db $86 +org $0DCE7E : db $85 +org $0DCF42 : db $85 +org $0DCF46 : db $86 +org $0DCFD1 : db $8D +org $0DCFED : db $85 +org $0DD04D : db $85 +org $0DD12F : db $85 +org $0DD1F0 : db $85 +org $0DD389 : db $8D +org $0DD3CB : db $85 +org $0DD3D8 : db $86 +org $0DD48C : db $85 +org $0DD577 : db $85 +org $0DD57B : db $86 +org $0DD61E : db $85 +org $0DD67A : db $86 +org $0DD711 : db $85 +org $0DD71F : db $86 +org $0DD7FD : db $86 +org $0DD85F : db $8D +org $0DD89D : db $86 +org $0DD985 : db $86 +org $0DD9F3 : db $85 +org $0DD9FE : db $8D +org $0DDA06 : db $9D +org $0DDA51 : db $86 +org $0DDABA : db $86 +org $0DDABE : db $86 +org $0DDB04 : db $86 +org $0DDC74 : db $8D +org $0DDD3F : db $80 +org $0DDFB5 : db $8D +org $0DDFDC : db $8D +org $0DEEBF : db $80 +org $0DF18A : db $8D +org $0DF194 : db $8D +org $0DF19B : db $8D +org $0DFBBF : db $8D +org $0DFBEB : db $8D +org $0EC2BC : db $82 +org $0EC2C4 : db $82 +org $0EC2F1 : db $8D +org $0EC3CD : db $82 +org $0EC9EA : db $9D +org $0ECDC0 : db $9D +org $0ECDD0 : db $8D +org $0ECDD9 : db $86 +org $0ECDF4 : db $86 +org $0ECDFD : db $86 +org $0ECE06 : db $8D +org $0ECE0D : db $86 +org $0ECE16 : db $8D +org $0ECE1D : db $86 +org $0ECFB2 : db $9D +org $0ED037 : db $8D +org $0ED03B : db $86 +org $0ED0CA : db $8D +org $0ED0CE : db $86 +org $0ED0DC : db $86 +org $0ED0E6 : db $8D +org $0ED0ED : db $86 +org $0ED0F1 : db $86 +org $0ED13B : db $8D +org $0ED13F : db $86 +org $0ED16B : db $85 +org $0ED193 : db $8D +org $0ED1C0 : db $86 +org $0ED1C4 : db $86 +org $0ED415 : db $8D +org $0ED41E : db $86 +org $0ED430 : db $86 +org $0ED44B : db $9D +org $0ED457 : db $8D +org $0ED460 : db $86 +org $0ED480 : db $86 +org $0ED4F5 : db $9D +org $0ED6AA : db $9D +org $0ED85B : db $9D +org $0ED88B : db $9D +org $0ED8CC : db $9D +org $0EE648 : db $80 +org $0EE64C : db $80 +org $0EE650 : db $8E +org $0EE654 : db $80 +org $0EE658 : db $82 +org $0EE65C : db $8C +org $0EE66A : db $9B +org $0EE6A6 : db $89 +org $0EE6B4 : db $80 +org $0EE715 : db $8E +org $0EE72A : db $8E +org $0EE72A : db $8E +org $0EE770 : db $8C +org $0EED6E : db $8C +org $0EEDA0 : db $80 +org $0EEDB2 : db $80 +org $0EEDBD : db $80 +org $0EEDE0 : db $8E +org $0EEE1E : db $80 +org $0EEE5C : db $80 +org $0EEE60 : db $80 +org $0EEF84 : db $80 +org $0EEFF3 : db $80 +org $0EF0FE : db $80 +org $0EF14E : db $80 +org $0EF21F : db $80 +org $0EF297 : db $80 +org $0EF52F : db $8E +org $0EF536 : db $8E +org $0EF53D : db $8E +org $0EF6F1 : db $80 +org $0EF802 : db $8D +org $0EF808 : db $8D +org $0EFA7D : db $80 +org $0EFCC3 : db $8E +org $0EFCCA : db $8E +org $0EFCD1 : db $8E +org $0FFD31 : db $8F +org $0FFD39 : db $8F +org $0FFD41 : db $8F +org $0FFD49 : db $8F +org $0FFD51 : db $8F +org $0FFD59 : db $8F +org $18BC1D : db $80 +org $18BCFE : db $80 +org $18BD3C : db $80 +org $1AF5B3 : db $80 +org $1AF5BE : db $86 +org $1AF5CB : db $89 +org $1AF5D2 : db $89 +org $1AF5E2 : db $9D +org $1AF624 : db $8D +org $1AF634 : db $80 +org $1AF691 : db $8D +org $1AF6E6 : db $9B +org $1AF6FA : db $9D +org $1AF7FF : db $89 +org $1AF85A : db $85 +org $1AF94D : db $85 +org $1AF951 : db $86 +org $1AF99B : db $9D +org $1AF9A1 : db $89 +org $1AF9CB : db $9A +org $1AF9D2 : db $9A +org $1AF9D9 : db $8D +org $1AFA02 : db $9A +org $1AFA0A : db $86 +org $1AFA5B : db $85 +org $1AFA7A : db $8D +org $1AFB2A : db $85 +org $1AFBE1 : db $8D +org $1AFC42 : db $86 +org $1AFC48 : db $9C +org $1AFC4C : db $87 +org $1AFC99 : db $9D +org $1AFCB8 : db $8D +org $1AFCBC : db $86 +org $1AFCEB : db $86 +org $1AFDD9 : db $85 +org $1AFE90 : db $8D +org $1AFE9B : db $9D +org $1AFEA1 : db $89 +org $1AFEDB : db $9A +org $1AFEF3 : db $85 +org $1AFF52 : db $9A +org $1AFF5B : db $9A +org $1AFFA8 : db $85 +org $1AFFB8 : db $9E +org $1AFFC3 : db $9A +org $1AFFD3 : db $9A +org $1AFFDD : db $9A +org $1AFFED : db $9A +org $1BBC2F : db $8F +org $1BBC4E : db $8F +org $1BBC6A : db $9B +org $1BBC78 : db $9B +org $1BBCC4 : db $8F +org $1BBCCD : db $8F +org $1BBCDB : db $9B +org $1BBCE3 : db $9B +org $1BBD03 : db $9C +org $1BBD13 : db $9B +org $1BBD1C : db $9B +org $1BBD62 : db $9B +org $1BBD81 : db $81 +org $1BBDE2 : db $84 +org $1BBECA : db $84 +org $1BBECE : db $9B +org $1BBEF8 : db $8F +org $1BBF00 : db $8F +org $1BBF17 : db $89 +org $1BBF25 : db $8F +org $1BBF2D : db $8F +org $1BBF70 : db $87 +org $1BBF88 : db $87 +org $1BC019 : db $84 +org $1BC01D : db $9B +org $1BC043 : db $8F +org $1BC051 : db $8F +org $1BC0AB : db $9B +org $1BC0E5 : db $9B +org $1BC0EE : db $9B +org $1BC0F4 : db $82 +org $1BC1AB : db $84 +org $1BC1B2 : db $9B +org $1BC1EB : db $84 +org $1BC1F2 : db $9B +org $1BC1FD : db $84 +org $1BC204 : db $9B +org $1BC22E : db $82 +org $1BC241 : db $9B +org $1BC252 : db $9B +org $1BC26F : db $9B +org $1BC2B2 : db $9B +org $1BC8BB : db $9B +org $1BC8BF : db $9B +org $1BC930 : db $9B +org $1BC95A : db $9B +org $1BC966 : db $9B +org $1BC974 : db $9B +org $1BC9B5 : db $8F +org $1BC9BC : db $8F +org $1BC9C3 : db $8F +org $1BC9CA : db $8F +org $1BCA42 : db $8F +org $1BCA49 : db $8F +org $1BCA50 : db $8F +org $1BCA57 : db $8F +org $1BCAAE : db $84 +org $1BCAB2 : db $9B +org $1BCB05 : db $9B +org $1BCB41 : db $9B +org $1BCB5D : db $9B +org $1BCB82 : db $9B +org $1BCBC4 : db $9B +org $1BCC05 : db $9B +org $1BCC3E : db $9B +org $1BCC64 : db $9B +org $1BCCA3 : db $9B +org $1BCCE6 : db $81 +org $1BCCED : db $81 +org $1BCD6E : db $9B +org $1BCDBF : db $9B +org $1BCDED : db $9B +org $1BCE34 : db $81 +org $1BCE3B : db $81 +org $1BCE59 : db $81 +org $1BCF06 : db $80 +org $1BCF6B : db $9B +org $1BCFEF : db $84 +org $1BCFF4 : db $84 +org $1BD033 : db $9B +org $1BD078 : db $9B +org $1BD0A9 : db $9B +org $1BD0F4 : db $9B +org $1BD11D : db $9B +org $1BD13D : db $9B +org $1BD163 : db $9B +org $1BD183 : db $9B +org $1BD1BA : db $9B +org $1BEC7F : db $9B +org $1BECAE : db $9B +org $1BECD2 : db $9B +org $1BECF1 : db $9B +org $1BED10 : db $9B +org $1BED36 : db $9B +org $1BED57 : db $9B +org $1BED7A : db $9B +org $1BEDA2 : db $9B +org $1BEDC5 : db $9B +org $1BEE06 : db $9B +org $1BEE2C : db $9B +org $1BEE5A : db $9B +org $1BEE7C : db $9B +org $1BEEB0 : db $9B +org $1BEED1 : db $9B +org $1BEEF5 : db $9B +org $1BEF19 : db $9B +org $1BEF37 : db $9B +org $1BEF52 : db $9B +org $1BEF7E : db $9B +org $1BEF98 : db $9B +org $1BF0C7 : db $9B +org $1BF0F3 : db $9B +org $1CF38F : db $9C +org $1CF3AF : db $9C +org $1CF533 : db $87 +org $1CF643 : db $89 +org $1CF6C1 : db $89 +org $1CF6F6 : db $8D +org $1CF77B : db $8D +org $1CF787 : db $88 +org $1CF78D : db $88 +org $1CF804 : db $88 +org $1CF808 : db $88 +org $1CF80D : db $88 +org $1CF86F : db $88 +org $1CF873 : db $88 +org $1CF878 : db $88 +org $1CF90F : db $88 +org $1CF994 : db $8D +org $1CFA53 : db $87 +org $1CFA82 : db $8D +org $1CFD4C : db $87 +org $1CFD8A : db $89 +org $1D804C : db $9D +org $1D8087 : db $86 +org $1D8097 : db $86 +org $1D80A2 : db $83 +org $1D80B2 : db $86 +org $1D80EA : db $8D +org $1D8111 : db $8D +org $1D8127 : db $85 +org $1D813A : db $8D +org $1D814A : db $80 +org $1D8157 : db $86 +org $1D815D : db $9C +org $1D8161 : db $87 +org $1D8171 : db $8D +org $1D81BE : db $86 +org $1D822A : db $85 +org $1D8233 : db $86 +org $1D8261 : db $80 +org $1D827C : db $86 +org $1D828E : db $9E +org $1D82D0 : db $9D +org $1D82D6 : db $89 +org $1D82FA : db $86 +org $1D8339 : db $86 +org $1D8362 : db $8D +org $1D836D : db $8D +org $1D8481 : db $86 +org $1D84A8 : db $85 +org $1D84EB : db $85 +org $1D84EF : db $86 +org $1D854C : db $85 +org $1D85AE : db $9D +org $1D85B4 : db $89 +org $1D85E8 : db $86 +org $1D8603 : db $9D +org $1D8637 : db $86 +org $1D8653 : db $86 +org $1D8662 : db $85 +org $1D8668 : db $8D +org $1D8683 : db $80 +org $1D8716 : db $86 +org $1D8748 : db $8D +org $1D875B : db $9E +org $1D889F : db $86 +org $1D88A6 : db $9D +org $1D88AA : db $89 +org $1D896A : db $8D +org $1D8989 : db $86 +org $1D8AB4 : db $8D +org $1D8AE3 : db $86 +org $1D8B45 : db $86 +org $1D8B60 : db $86 +org $1D8B70 : db $86 +org $1D8BE0 : db $86 +org $1D8BE7 : db $80 +org $1D8C84 : db $86 +org $1D8C8A : db $8D +org $1D8DDF : db $83 +org $1D8DF2 : db $83 +org $1D8E83 : db $9D +org $1D8E89 : db $89 +org $1D8F1A : db $81 +org $1D8F22 : db $81 +org $1D8F61 : db $80 +org $1D9085 : db $85 +org $1D90B9 : db $8D +org $1D916C : db $9D +org $1D9174 : db $8D +org $1D9178 : db $89 +org $1D91B2 : db $86 +org $1D91E6 : db $8D +org $1D92EF : db $85 +org $1D9371 : db $9D +org $1D93A1 : db $86 +org $1D93A5 : db $9D +org $1D948B : db $8D +org $1D94B8 : db $8D +org $1D9564 : db $86 +org $1D958C : db $9D +org $1D9592 : db $89 +org $1D9BA4 : db $86 +org $1D9C1A : db $86 +org $1D9C78 : db $86 +org $1D9CC0 : db $86 +org $1D9CE2 : db $80 +org $1D9D21 : db $8D +org $1D9E30 : db $86 +org $1D9E6A : db $8D +org $1D9EAF : db $9D +org $1D9EB5 : db $89 +org $1D9F22 : db $8D +org $1D9F75 : db $9D +org $1D9F8B : db $86 +org $1DA030 : db $86 +org $1DA062 : db $8D +org $1DA123 : db $86 +org $1DA186 : db $86 +org $1DA1F2 : db $9D +org $1DA1F8 : db $89 +org $1DA27C : db $86 +org $1DA290 : db $86 +org $1DA334 : db $89 +org $1DA348 : db $8D +org $1DA3C3 : db $80 +org $1DA3F2 : db $8D +org $1DA4A7 : db $8D +org $1DA4AF : db $8D +org $1DA4EF : db $85 +org $1DA503 : db $9D +org $1DA600 : db $85 +org $1DA76A : db $9D +org $1DA770 : db $8D +org $1DA779 : db $89 +org $1DAD1F : db $80 +org $1DADC2 : db $9D +org $1DAE06 : db $9D +org $1DAE13 : db $8D +org $1DAE60 : db $80 +org $1DAE84 : db $86 +org $1DAEB5 : db $86 +org $1DAF00 : db $86 +org $1DB05F : db $86 +org $1DB0AC : db $86 +org $1DB0F4 : db $9D +org $1DB166 : db $8D +org $1DB16F : db $8D +org $1DB189 : db $8D +org $1DB1AA : db $9D +org $1DB240 : db $80 +org $1DB261 : db $8D +org $1DB290 : db $8D +org $1DB2DA : db $86 +org $1DB367 : db $8D +org $1DB37C : db $86 +org $1DB434 : db $86 +org $1DB771 : db $86 +org $1DB920 : db $80 +org $1DB967 : db $80 +org $1DB96E : db $80 +org $1DB97C : db $80 +org $1DB983 : db $80 +org $1DB9B3 : db $8D +org $1DB9CF : db $8D +org $1DBA60 : db $8D +org $1DBAB4 : db $8D +org $1DBAC6 : db $8D +org $1DBAD3 : db $9E +org $1DBAFD : db $9D +org $1DBB03 : db $89 +org $1DBB14 : db $8D +org $1DBB1A : db $9D +org $1DBB20 : db $89 +org $1DBB26 : db $8D +org $1DBB6B : db $9D +org $1DBB8B : db $86 +org $1DBBC9 : db $83 +org $1DBBDC : db $83 +org $1DBC8A : db $86 +org $1DBD2B : db $86 +org $1DBD74 : db $8D +org $1DBDC9 : db $86 +org $1DBDE5 : db $8D +org $1DBE4A : db $9D +org $1DBEA1 : db $9D +org $1DBEBE : db $86 +org $1DBF03 : db $80 +org $1DBF46 : db $8D +org $1DBF5D : db $8D +org $1DBF67 : db $86 +org $1DBF6D : db $8D +org $1DBF72 : db $8D +org $1DBF7D : db $8D +org $1DBFD1 : db $86 +org $1DC1A9 : db $86 +org $1DC214 : db $86 +org $1DC218 : db $86 +org $1DC288 : db $80 +org $1DC2C7 : db $80 +org $1DC30E : db $86 +org $1DC343 : db $8D +org $1DC362 : db $8D +org $1DC36D : db $8D +org $1DC393 : db $8D +org $1DC410 : db $86 +org $1DC41F : db $86 +org $1DC435 : db $8D +org $1DC43C : db $80 +org $1DC44D : db $86 +org $1DC454 : db $86 +org $1DC4F4 : db $80 +org $1DC519 : db $87 +org $1DC52A : db $85 +org $1DC535 : db $9D +org $1DC539 : db $89 +org $1DC5EC : db $86 +org $1DC623 : db $8D +org $1DC638 : db $8D +org $1DC64D : db $9E +org $1DC657 : db $86 +org $1DC67E : db $8D +org $1DC698 : db $8D +org $1DC6E8 : db $9D +org $1DC6EE : db $89 +org $1DC714 : db $80 +org $1DC7E9 : db $86 +org $1DC7EE : db $86 +org $1DC80B : db $8D +org $1DC824 : db $8D +org $1DC842 : db $8D +org $1DC86C : db $86 +org $1DC87C : db $8D +org $1DC8DB : db $9D +org $1DC8E5 : db $86 +org $1DC905 : db $80 +org $1DC98A : db $86 +org $1DC9CA : db $86 +org $1DCA1E : db $86 +org $1DCA6C : db $86 +org $1DCAE4 : db $86 +org $1DCAE8 : db $8D +org $1DCAF5 : db $86 +org $1DCAFD : db $86 +org $1DCB1E : db $8D +org $1DCB38 : db $8D +org $1DCB65 : db $9D +org $1DCCD8 : db $86 +org $1DCCE9 : db $86 +org $1DCD54 : db $86 +org $1DCD5B : db $80 +org $1DCD87 : db $9D +org $1DCD8D : db $89 +org $1DCDC8 : db $8D +org $1DCE3F : db $8D +org $1DCE4F : db $86 +org $1DCF8F : db $86 +org $1DCFD9 : db $86 +org $1DD017 : db $86 +org $1DD06D : db $8D +org $1DD086 : db $8D +org $1DD1A6 : db $9D +org $1DD1FA : db $86 +org $1DD214 : db $9D +org $1DD220 : db $89 +org $1DD23A : db $80 +org $1DD276 : db $80 +org $1DD29C : db $85 +org $1DD361 : db $85 +org $1DD390 : db $9D +org $1DD39F : db $9D +org $1DD3A5 : db $89 +org $1DD3C7 : db $89 +org $1DD48B : db $86 +org $1DD51B : db $8D +org $1DD5BC : db $8D +org $1DD5EE : db $8D +org $1DD6B6 : db $8D +org $1DD761 : db $86 +org $1DD77C : db $8D +org $1DD798 : db $86 +org $1DD79E : db $87 +org $1DD7A4 : db $86 +org $1DD7BB : db $8D +org $1DD7F0 : db $8D +org $1DD7F7 : db $80 +org $1DD81A : db $8D +org $1DD824 : db $8D +org $1DD835 : db $8D +org $1DD85E : db $86 +org $1DD862 : db $9D +org $1DD8F0 : db $86 +org $1DD911 : db $9D +org $1DDAB4 : db $86 +org $1DDAF8 : db $86 +org $1DDC2F : db $8D +org $1DDC35 : db $9D +org $1DDC97 : db $80 +org $1DDCAE : db $8D +org $1DDCDE : db $86 +org $1DDD79 : db $86 +org $1DDD90 : db $86 +org $1DDDA3 : db $80 +org $1DDDE1 : db $8D +org $1DDDFB : db $86 +org $1DDE26 : db $86 +org $1DDE71 : db $86 +org $1DDEDA : db $9D +org $1DDEED : db $8D +org $1DDF3B : db $8D +org $1DDF5C : db $85 +org $1DDF64 : db $86 +org $1DDF74 : db $87 +org $1DDF80 : db $8D +org $1DDF84 : db $86 +org $1DDFDD : db $80 +org $1DE115 : db $85 +org $1DE125 : db $8D +org $1DE132 : db $8D +org $1DE149 : db $9D +org $1DE14F : db $89 +org $1DE153 : db $86 +org $1DE171 : db $9D +org $1DE177 : db $89 +org $1DE18E : db $8D +org $1DE1A6 : db $80 +org $1DE1AF : db $9D +org $1DE1B5 : db $89 +org $1DE1CC : db $8D +org $1DE1E9 : db $80 +org $1DE1F2 : db $9D +org $1DE1F8 : db $89 +org $1DE212 : db $8D +org $1DE221 : db $9D +org $1DE227 : db $89 +org $1DE417 : db $86 +org $1DE449 : db $8D +org $1DE4E4 : db $80 +org $1DE572 : db $9D +org $1DE5C2 : db $86 +org $1DE5C8 : db $8D +org $1DE5E7 : db $8D +org $1DE61A : db $9D +org $1DE625 : db $89 +org $1DE629 : db $8D +org $1DE761 : db $9D +org $1DE797 : db $86 +org $1DE7A7 : db $86 +org $1DE7AB : db $86 +org $1DE7FC : db $86 +org $1DE84D : db $86 +org $1DE896 : db $86 +org $1DE89B : db $86 +org $1DE8A0 : db $86 +org $1DE9B0 : db $86 +org $1DE9C7 : db $82 +org $1DE9D0 : db $82 +org $1DE9D6 : db $82 +org $1DEAFD : db $86 +org $1DEB9E : db $86 +org $1DEBE8 : db $85 +org $1DEC01 : db $80 +org $1DED13 : db $83 +org $1DED26 : db $83 +org $1DEE5C : db $86 +org $1DEED8 : db $8D +org $1DEEE4 : db $8D +org $1DEEED : db $9D +org $1DEEF3 : db $89 +org $1DEF42 : db $8D +org $1DEF50 : db $9D +org $1DEF56 : db $89 +org $1DEFA3 : db $80 +org $1DEFBC : db $86 +org $1DEFDE : db $8D +org $1DEFF1 : db $86 +org $1DF05C : db $8D +org $1DF083 : db $86 +org $1DF094 : db $86 +org $1DF275 : db $86 +org $1DF27C : db $9D +org $1DF3EC : db $86 +org $1DF3FF : db $85 +org $1DF423 : db $8D +org $1DF429 : db $9D +org $1DF42F : db $89 +org $1DF437 : db $86 +org $1DF5CE : db $86 +org $1DF6A6 : db $8D +org $1DF825 : db $86 +org $1DF951 : db $80 +org $1DF965 : db $80 +org $1DF974 : db $86 +org $1DF97A : db $87 +org $1DF984 : db $86 +org $1DF992 : db $8D +org $1DFA24 : db $85 +org $1DFA49 : db $85 +org $1DFA53 : db $9D +org $1DFA59 : db $86 +org $1DFA5D : db $89 +org $1DFAF9 : db $85 +org $1DFB0D : db $86 +org $1DFB38 : db $86 +org $1DFB91 : db $9D +org $1DFB9D : db $9D +org $1DFBA9 : db $9D +org $1DFBFD : db $9D +org $1DFC05 : db $8D +org $1DFC09 : db $89 +org $1DFC41 : db $9E +org $1DFC4E : db $80 +org $1DFC79 : db $85 +org $1DFC87 : db $85 +org $1DFCA9 : db $85 +org $1DFCCB : db $9C +org $1DFCDB : db $85 +org $1DFD49 : db $85 +org $1DFD6A : db $8D +org $1DFD71 : db $80 +org $1DFDA1 : db $8D +org $1DFDAF : db $9D +org $1DFE01 : db $8D +org $1DFE68 : db $85 +org $1DFE6C : db $86 +org $1DFF44 : db $85 +org $1DFF58 : db $85 +org $1DFF6A : db $86 +org $1DFF79 : db $9E +org $1DFF8A : db $9E +org $1DFFB6 : db $86 +org $1DFFF5 : db $86 +org $1E804C : db $86 +org $1E8108 : db $9D +org $1E8148 : db $86 +org $1E8183 : db $80 +org $1E81AC : db $8D +org $1E8265 : db $8D +org $1E8274 : db $8D +org $1E82A6 : db $9E +org $1E82F3 : db $8D +org $1E8320 : db $8D +org $1E839C : db $86 +org $1E83AA : db $86 +org $1E83B2 : db $86 +org $1E83C2 : db $86 +org $1E83E9 : db $8D +org $1E8416 : db $86 +org $1E84A8 : db $8D +org $1E84AF : db $9D +org $1E851C : db $9D +org $1E8522 : db $89 +org $1E85C4 : db $86 +org $1E86E8 : db $86 +org $1E8713 : db $86 +org $1E87F3 : db $85 +org $1E8897 : db $86 +org $1E88CE : db $8D +org $1E8988 : db $83 +org $1E899B : db $83 +org $1E8A78 : db $86 +org $1E8A80 : db $86 +org $1E8AA2 : db $8D +org $1E8AA6 : db $86 +org $1E8B31 : db $86 +org $1E8BD1 : db $80 +org $1E8BFB : db $8D +org $1E8C0E : db $8D +org $1E8C59 : db $86 +org $1E8C5D : db $9D +org $1E8D69 : db $8D +org $1E8D72 : db $8D +org $1E8DD0 : db $8D +org $1E8DE2 : db $80 +org $1E8DEA : db $86 +org $1E8E12 : db $8D +org $1E8E17 : db $8D +org $1E8E27 : db $86 +org $1E8E4A : db $8D +org $1E8EAA : db $86 +org $1E8ECB : db $80 +org $1E8F1D : db $8D +org $1E8F86 : db $9D +org $1E8F8E : db $8D +org $1E8FFE : db $86 +org $1E9097 : db $8D +org $1E909B : db $85 +org $1E90AF : db $86 +org $1E911C : db $86 +org $1E9137 : db $8D +org $1E914E : db $8D +org $1E9190 : db $8D +org $1E91C3 : db $86 +org $1E9205 : db $8D +org $1E920E : db $8D +org $1E9224 : db $80 +org $1E9233 : db $8D +org $1E9294 : db $8D +org $1E92E2 : db $9E +org $1E92EC : db $9D +org $1E92F4 : db $8D +org $1E92F8 : db $89 +org $1E937E : db $9D +org $1E9389 : db $89 +org $1E9391 : db $86 +org $1E93C1 : db $8D +org $1E947B : db $9C +org $1E947F : db $87 +org $1E9483 : db $86 +org $1E94CC : db $80 +org $1E94EF : db $9D +org $1E9515 : db $8D +org $1E951B : db $8D +org $1E9555 : db $86 +org $1E9559 : db $9D +org $1E9566 : db $80 +org $1E957D : db $8D +org $1E95F3 : db $8D +org $1E95FE : db $8D +org $1E9619 : db $86 +org $1E9668 : db $9D +org $1E966E : db $89 +org $1E96CC : db $8D +org $1E96E8 : db $8D +org $1E9740 : db $86 +org $1E97B8 : db $8D +org $1E97D4 : db $8D +org $1E97D8 : db $8D +org $1E97E7 : db $9D +org $1E97ED : db $89 +org $1E9820 : db $8D +org $1E9850 : db $80 +org $1E989A : db $81 +org $1E98D8 : db $86 +org $1E98ED : db $8D +org $1E9906 : db $9E +org $1E994B : db $89 +org $1E9967 : db $80 +org $1E9A69 : db $86 +org $1E9A7E : db $86 +org $1E9A85 : db $80 +org $1E9B18 : db $86 +org $1E9B25 : db $80 +org $1E9BC6 : db $86 +org $1E9BE6 : db $86 +org $1E9C6E : db $8D +org $1E9C78 : db $80 +org $1E9D23 : db $8D +org $1E9D59 : db $86 +org $1E9D5F : db $8D +org $1E9D71 : db $80 +org $1E9E06 : db $8D +org $1E9E1A : db $9D +org $1E9E22 : db $8D +org $1E9E83 : db $86 +org $1E9E9A : db $80 +org $1E9EB0 : db $8D +org $1E9FA2 : db $8D +org $1E9FBF : db $8D +org $1E9FD0 : db $8D +org $1E9FE1 : db $9E +org $1EA171 : db $86 +org $1EA1E1 : db $80 +org $1EA283 : db $8D +org $1EA29B : db $8D +org $1EA2B3 : db $9E +org $1EA460 : db $86 +org $1EA465 : db $86 +org $1EA472 : db $86 +org $1EA485 : db $8D +org $1EA555 : db $80 +org $1EA5DD : db $9D +org $1EA646 : db $8D +org $1EA75B : db $80 +org $1EA801 : db $9E +org $1EA827 : db $9D +org $1EA82D : db $89 +org $1EA836 : db $8D +org $1EA876 : db $8D +org $1EA8A1 : db $8D +org $1EA8AD : db $8D +org $1EA978 : db $86 +org $1EA97D : db $86 +org $1EA992 : db $86 +org $1EA998 : db $87 +org $1EA9A3 : db $86 +org $1EA9C8 : db $87 +org $1EA9CF : db $8D +org $1EAA2E : db $86 +org $1EAA44 : db $8D +org $1EAAAF : db $86 +org $1EAAE3 : db $80 +org $1EAB25 : db $8D +org $1EAB72 : db $8D +org $1EAC0B : db $86 +org $1EAC18 : db $8D +org $1EAC9E : db $8D +org $1EACBF : db $8D +org $1EAE44 : db $86 +org $1EAF09 : db $8B +org $1EAF0D : db $87 +org $1EAF13 : db $86 +org $1EAF1A : db $80 +org $1EAF7A : db $8D +org $1EAFFA : db $9D +org $1EB021 : db $8D +org $1EB03C : db $86 +org $1EB046 : db $80 +org $1EB0BB : db $86 +org $1EB0C1 : db $8D +org $1EB102 : db $86 +org $1EB14B : db $86 +org $1EB14F : db $8D +org $1EB18D : db $8D +org $1EB198 : db $8D +org $1EB1D6 : db $8D +org $1EB1FF : db $86 +org $1EB20C : db $86 +org $1EB26C : db $86 +org $1EB27E : db $86 +org $1EB28B : db $80 +org $1EB2A9 : db $8D +org $1EB3BD : db $86 +org $1EB3C4 : db $86 +org $1EB4B7 : db $80 +org $1EB50B : db $85 +org $1EB519 : db $8D +org $1EB52A : db $8D +org $1EB53A : db $86 +org $1EB546 : db $8D +org $1EB5CD : db $89 +org $1EB5F2 : db $8D +org $1EB5FA : db $8D +org $1EB609 : db $86 +org $1EB660 : db $8D +org $1EB770 : db $83 +org $1EB783 : db $83 +org $1EB8A3 : db $9D +org $1EB8AC : db $83 +org $1EB8C9 : db $86 +org $1EB947 : db $86 +org $1EB968 : db $86 +org $1EB9B5 : db $80 +org $1EB9EE : db $8D +org $1EBB3A : db $86 +org $1EBB3F : db $86 +org $1EBBCE : db $80 +org $1EBBF1 : db $81 +org $1EBC2E : db $8D +org $1EBC5B : db $86 +org $1EBC82 : db $8D +org $1EBCE0 : db $86 +org $1EBCEA : db $86 +org $1EBD1B : db $8D +org $1EBD22 : db $8D +org $1EBD26 : db $86 +org $1EBDB3 : db $86 +org $1EBE11 : db $81 +org $1EBE85 : db $9A +org $1EBEC9 : db $80 +org $1EBF50 : db $8D +org $1EBF63 : db $8D +org $1EBF72 : db $86 +org $1EBFAB : db $8D +org $1EBFC1 : db $8D +org $1EBFDE : db $8D +org $1EBFE9 : db $9D +org $1EBFEF : db $89 +org $1EC091 : db $9D +org $1EC098 : db $8D +org $1EC0D9 : db $86 +org $1EC100 : db $86 +org $1EC113 : db $80 +org $1EC128 : db $8D +org $1EC19A : db $8D +org $1EC224 : db $9D +org $1EC264 : db $86 +org $1EC268 : db $86 +org $1EC276 : db $86 +org $1EC2AC : db $8D +org $1EC2D1 : db $86 +org $1EC2F2 : db $9E +org $1EC3A4 : db $8D +org $1EC3E8 : db $80 +org $1EC55F : db $86 +org $1EC57F : db $9D +org $1EC585 : db $89 +org $1EC592 : db $86 +org $1EC68A : db $86 +org $1EC7A0 : db $9D +org $1EC7B3 : db $9E +org $1EC855 : db $80 +org $1EC89F : db $8D +org $1ECAEC : db $86 +org $1ECB35 : db $9D +org $1ECB42 : db $9E +org $1ECB4B : db $9E +org $1ECB55 : db $9E +org $1ECB5E : db $9E +org $1ECB65 : db $9E +org $1ECB6C : db $9E +org $1ECB73 : db $9E +org $1ECB7A : db $9E +org $1ECB94 : db $9D +org $1ECBD8 : db $89 +org $1ECC07 : db $86 +org $1ECC38 : db $80 +org $1ECC67 : db $8D +org $1ECCEF : db $82 +org $1ECCF3 : db $80 +org $1ECCFA : db $9E +org $1ECD02 : db $9E +org $1ECD0A : db $9E +org $1ECD12 : db $9E +org $1ECD1A : db $9E +org $1ECD22 : db $9E +org $1ECD2A : db $9E +org $1ECD32 : db $9E +org $1ECD51 : db $9D +org $1ECD7C : db $89 +org $1ECD9F : db $80 +org $1ECE1F : db $8D +org $1ECE4A : db $80 +org $1ECE8A : db $9C +org $1ECE9B : db $80 +org $1ECEFD : db $85 +org $1ECF19 : db $85 +org $1ECF30 : db $85 +org $1ECF3B : db $80 +org $1ED00A : db $85 +org $1ED088 : db $83 +org $1ED095 : db $83 +org $1ED176 : db $86 +org $1ED1B9 : db $86 +org $1ED1CE : db $86 +org $1ED216 : db $8D +org $1ED2AA : db $86 +org $1ED2DD : db $86 +org $1ED2FE : db $86 +org $1ED352 : db $80 +org $1ED37C : db $80 +org $1ED395 : db $80 +org $1ED3C9 : db $8D +org $1ED3F3 : db $9D +org $1ED445 : db $86 +org $1ED456 : db $9D +org $1ED46A : db $85 +org $1ED498 : db $9D +org $1ED4C0 : db $9D +org $1ED4C4 : db $89 +org $1ED502 : db $85 +org $1ED56D : db $8D +org $1ED582 : db $80 +org $1ED5A7 : db $86 +org $1ED5C6 : db $86 +org $1ED641 : db $8D +org $1ED697 : db $8D +org $1ED69E : db $9D +org $1ED6A2 : db $9D +org $1ED6A9 : db $9D +org $1ED6B1 : db $8D +org $1ED6F2 : db $8D +org $1ED760 : db $86 +org $1ED9CA : db $86 +org $1ED9D6 : db $86 +org $1ED9E4 : db $8D +org $1ED9EA : db $8D +org $1EDA4B : db $86 +org $1EDA71 : db $86 +org $1EDAB2 : db $86 +org $1EDAB7 : db $86 +org $1EDAC6 : db $86 +org $1EDADF : db $86 +org $1EDAEF : db $8D +org $1EDAF9 : db $8D +org $1EDAFF : db $8D +org $1EDB05 : db $86 +org $1EDB28 : db $9D +org $1EDB2E : db $89 +org $1EDB58 : db $86 +org $1EDB5E : db $86 +org $1EDB95 : db $8D +org $1EDBA8 : db $9D +org $1EDC5B : db $80 +org $1EDC8E : db $9D +org $1EDC94 : db $89 +org $1EDCB0 : db $8D +org $1EDCBD : db $8D +org $1EDCD1 : db $9D +org $1EDD13 : db $8D +org $1EDD20 : db $8D +org $1EDD45 : db $86 +org $1EDD57 : db $85 +org $1EDD72 : db $86 +org $1EDD7C : db $85 +org $1EDD9A : db $8D +org $1EDDAF : db $8D +org $1EDDC6 : db $86 +org $1EDDF9 : db $9E +org $1EDE0F : db $8D +org $1EDE1C : db $85 +org $1EDE63 : db $80 +org $1EDE8F : db $9D +org $1EDE95 : db $89 +org $1EDEB1 : db $8D +org $1EDEBE : db $8D +org $1EDED7 : db $86 +org $1EDEF5 : db $85 +org $1EDF0F : db $86 +org $1EDF19 : db $85 +org $1EDF34 : db $8D +org $1EDF49 : db $8D +org $1EDF67 : db $86 +org $1EDFF5 : db $8D +org $1EDFFA : db $8D +org $1EE011 : db $8D +org $1EE034 : db $8D +org $1EE041 : db $86 +org $1EE04D : db $87 +org $1EE066 : db $86 +org $1EE097 : db $85 +org $1EE0A0 : db $86 +org $1EE0C8 : db $87 +org $1EE0D5 : db $85 +org $1EE0DA : db $86 +org $1EE0EA : db $85 +org $1EE104 : db $80 +org $1EE109 : db $89 +org $1EE111 : db $80 +org $1EE156 : db $8D +org $1EE161 : db $8D +org $1EE184 : db $85 +org $1EE188 : db $9E +org $1EE193 : db $9E +org $1EE1A2 : db $8D +org $1EE1C3 : db $85 +org $1EE1D1 : db $85 +org $1EE1E2 : db $9E +org $1EE1FB : db $80 +org $1EE200 : db $89 +org $1EE20B : db $85 +org $1EE219 : db $8D +org $1EE21D : db $86 +org $1EE255 : db $9D +org $1EE2DD : db $85 +org $1EE2E1 : db $86 +org $1EE2EF : db $80 +org $1EE341 : db $8D +org $1EE35E : db $86 +org $1EE3D7 : db $80 +org $1EE3E9 : db $85 +org $1EE403 : db $85 +org $1EE417 : db $85 +org $1EE445 : db $86 +org $1EE484 : db $86 +org $1EE4AC : db $86 +org $1EE4BC : db $80 +org $1EE4C0 : db $89 +org $1EE4E0 : db $80 +org $1EE4FE : db $85 +org $1EE50F : db $85 +org $1EE526 : db $85 +org $1EE54D : db $8D +org $1EE5BC : db $8D +org $1EE5D7 : db $86 +org $1EE645 : db $8D +org $1EE663 : db $8D +org $1EE67A : db $9D +org $1EE88A : db $86 +org $1EE8AE : db $86 +org $1EE8B3 : db $8D +org $1EE8BA : db $85 +org $1EE8D0 : db $85 +org $1EE8E4 : db $80 +org $1EE8E9 : db $89 +org $1EE91F : db $80 +org $1EE92F : db $80 +org $1EE938 : db $9D +org $1EE98F : db $9D +org $1EE999 : db $80 +org $1EE9A6 : db $80 +org $1EE9AE : db $85 +org $1EE9BF : db $85 +org $1EE9D5 : db $89 +org $1EE9E2 : db $82 +org $1EE9ED : db $80 +org $1EEA01 : db $87 +org $1EEA83 : db $86 +org $1EEAB0 : db $9E +org $1EEADA : db $85 +org $1EEAE4 : db $8D +org $1EEAF6 : db $80 +org $1EEB0F : db $85 +org $1EEB33 : db $80 +org $1EEB3D : db $86 +org $1EEB41 : db $86 +org $1EEBC7 : db $8D +org $1EEBD1 : db $8D +org $1EEBDD : db $86 +org $1EEC74 : db $86 +org $1EECA5 : db $80 +org $1EECDA : db $86 +org $1EED3B : db $8D +org $1EEDB6 : db $85 +org $1EEDBA : db $86 +org $1EEDC1 : db $8D +org $1EEDC8 : db $9D +org $1EEDCE : db $89 +org $1EEDFA : db $85 +org $1EEE37 : db $85 +org $1EEE5D : db $86 +org $1EEEB7 : db $8D +org $1EEEC9 : db $86 +org $1EEED0 : db $86 +org $1EEEE9 : db $80 +org $1EEF0E : db $86 +org $1EEF12 : db $86 +org $1EEF2C : db $9E +org $1EEF3C : db $85 +org $1EEF4C : db $85 +org $1EEF7F : db $85 +org $1EEF87 : db $86 +org $1EEF8B : db $86 +org $1EEF92 : db $9E +org $1EEFAC : db $80 +org $1EEFC2 : db $85 +org $1EEFE3 : db $85 +org $1EEFEF : db $85 +org $1EF000 : db $85 +org $1EF009 : db $85 +org $1EF026 : db $86 +org $1EF02A : db $9D +org $1EF035 : db $9E +org $1EF03C : db $80 +org $1EF04A : db $85 +org $1EF07B : db $8D +org $1EF082 : db $9E +org $1EF089 : db $80 +org $1EF09F : db $85 +org $1EF0C0 : db $85 +org $1EF0CC : db $85 +org $1EF0E5 : db $85 +org $1EF0F0 : db $9E +org $1EF0F7 : db $80 +org $1EF10D : db $85 +org $1EF12E : db $85 +org $1EF13A : db $85 +org $1EF14C : db $9E +org $1EF160 : db $85 +org $1EF16B : db $9E +org $1EF174 : db $9E +org $1EF190 : db $85 +org $1EF19C : db $85 +org $1EF1B0 : db $9D +org $1EF1C2 : db $9E +org $1EF1CB : db $9E +org $1EF1EF : db $9E +org $1EF21C : db $85 +org $1EF22D : db $9E +org $1EF26A : db $86 +org $1EF27A : db $9E +org $1EF2AC : db $9E +org $1EF2BB : db $8D +org $1EF2DC : db $85 +org $1EF2ED : db $9E +org $1EF2FC : db $8D +org $1EF31F : db $9E +org $1EF328 : db $9E +org $1EF344 : db $85 +org $1EF361 : db $87 +org $1EF378 : db $85 +org $1EF37C : db $9C +org $1EF383 : db $8D +org $1EF38C : db $86 +org $1EF4E5 : db $85 +org $1EF4F1 : db $86 +org $1EF500 : db $9C +org $1EF506 : db $87 +org $1EF519 : db $8D +org $1EF52E : db $9D +org $1EF534 : db $89 +org $1EF54C : db $8D +org $1EF556 : db $8D +org $1EF562 : db $86 +org $1EF580 : db $86 +org $1EF596 : db $8D +org $1EF5FA : db $9A +org $1EF601 : db $9E +org $1EF605 : db $8D +org $1EF61F : db $85 +org $1EF6CE : db $80 +org $1EF6D9 : db $89 +org $1EF71D : db $86 +org $1EF728 : db $87 +org $1EF7CF : db $86 +org $1EF859 : db $8D +org $1EF882 : db $80 +org $1EFB7B : db $80 +org $1EFBBC : db $86 +org $1EFBC3 : db $87 +org $1EFBD2 : db $87 +org $1EFC37 : db $8D +org $1EFCBC : db $87 +org $1EFCC0 : db $87 +org $1EFCC4 : db $87 +org $1EFCFB : db $87 +org $1EFCFF : db $87 +org $1EFD03 : db $87 +org $1EFD81 : db $8D +org $1EFD8B : db $8D +org $1EFD97 : db $86 +org $1EFDF6 : db $8D +org $1EFE2C : db $9D +org $1EFE60 : db $86 +org $1EFE65 : db $86 +org $1EFE6A : db $86 +org $1EFF7B : db $86 +org $1EFFC0 : db $85 +org $1EFFC4 : db $86 +org $1EFFD0 : db $8D +org $1F8002 : db $8A +org $1F8002 : db $8A +org $1F8005 : db $8A +org $1F8005 : db $8A +org $1F8008 : db $8A +org $1F8008 : db $8A +org $1F800B : db $8A +org $1F800B : db $8A +org $1F800E : db $9F +org $1F800E : db $9F +org $1F8011 : db $9F +org $1F8011 : db $9F +org $1F8014 : db $9F +org $1F8014 : db $9F +org $1F8017 : db $9F +org $1F8017 : db $9F +org $1F801A : db $8A +org $1F801A : db $8A +org $1F801D : db $9F +org $1F801D : db $9F +org $1F8020 : db $9F +org $1F8020 : db $9F +org $1F8023 : db $9F +org $1F8023 : db $9F +org $1F8026 : db $9F +org $1F8026 : db $9F +org $1F8029 : db $9F +org $1F8029 : db $9F +org $1F802C : db $9F +org $1F802C : db $9F +org $1F802F : db $9F +org $1F802F : db $9F +org $1F8032 : db $8A +org $1F8032 : db $8A +org $1F8035 : db $8A +org $1F8035 : db $8A +org $1F8038 : db $8A +org $1F8038 : db $8A +org $1F803B : db $9F +org $1F803B : db $9F +org $1F803E : db $9F +org $1F803E : db $9F +org $1F8041 : db $9F +org $1F8041 : db $9F +org $1F8044 : db $9F +org $1F8044 : db $9F +org $1F8047 : db $9F +org $1F8047 : db $9F +org $1F804A : db $8A +org $1F804A : db $8A +org $1F804D : db $9F +org $1F804D : db $9F +org $1F8050 : db $9F +org $1F8050 : db $9F +org $1F8053 : db $9F +org $1F8053 : db $9F +org $1F8056 : db $9F +org $1F8056 : db $9F +org $1F8059 : db $9F +org $1F8059 : db $9F +org $1F805C : db $9F +org $1F805C : db $9F +org $1F805F : db $9F +org $1F805F : db $9F +org $1F8062 : db $9F +org $1F8062 : db $9F +org $1F8065 : db $8A +org $1F8065 : db $8A +org $1F8068 : db $8A +org $1F8068 : db $8A +org $1F806B : db $9F +org $1F806B : db $9F +org $1F806E : db $9F +org $1F806E : db $9F +org $1F8071 : db $9F +org $1F8071 : db $9F +org $1F8074 : db $9F +org $1F8074 : db $9F +org $1F8077 : db $9F +org $1F8077 : db $9F +org $1F807A : db $9F +org $1F807A : db $9F +org $1F807D : db $9F +org $1F807D : db $9F +org $1F8080 : db $9F +org $1F8080 : db $9F +org $1F8083 : db $9F +org $1F8083 : db $9F +org $1F8086 : db $8A +org $1F8086 : db $8A +org $1F8089 : db $9F +org $1F8089 : db $9F +org $1F808C : db $9F +org $1F808C : db $9F +org $1F808F : db $8A +org $1F808F : db $8A +org $1F8092 : db $9F +org $1F8092 : db $9F +org $1F8095 : db $9F +org $1F8095 : db $9F +org $1F8098 : db $8A +org $1F8098 : db $8A +org $1F809B : db $9F +org $1F809B : db $9F +org $1F809E : db $9F +org $1F809E : db $9F +org $1F80A1 : db $9F +org $1F80A1 : db $9F +org $1F80A4 : db $9F +org $1F80A4 : db $9F +org $1F80A7 : db $9F +org $1F80A7 : db $9F +org $1F80AA : db $9F +org $1F80AA : db $9F +org $1F80AD : db $9F +org $1F80AD : db $9F +org $1F80B0 : db $9F +org $1F80B0 : db $9F +org $1F80B3 : db $9F +org $1F80B3 : db $9F +org $1F80B6 : db $8A +org $1F80B6 : db $8A +org $1F80B9 : db $9F +org $1F80B9 : db $9F +org $1F80BC : db $9F +org $1F80BC : db $9F +org $1F80BF : db $9F +org $1F80BF : db $9F +org $1F80C2 : db $9F +org $1F80C2 : db $9F +org $1F80C5 : db $8A +org $1F80C5 : db $8A +org $1F80C8 : db $8A +org $1F80C8 : db $8A +org $1F80CB : db $9F +org $1F80CB : db $9F +org $1F80CE : db $9F +org $1F80CE : db $9F +org $1F80D1 : db $9F +org $1F80D1 : db $9F +org $1F80D4 : db $9F +org $1F80D4 : db $9F +org $1F80D7 : db $9F +org $1F80D7 : db $9F +org $1F80DA : db $9F +org $1F80DA : db $9F +org $1F80DD : db $9F +org $1F80DD : db $9F +org $1F80E0 : db $9F +org $1F80E0 : db $9F +org $1F80E3 : db $9F +org $1F80E3 : db $9F +org $1F80E6 : db $9F +org $1F80E6 : db $9F +org $1F80E9 : db $9F +org $1F80E9 : db $9F +org $1F80EC : db $9F +org $1F80EC : db $9F +org $1F80EF : db $9F +org $1F80EF : db $9F +org $1F80F2 : db $8A +org $1F80F2 : db $8A +org $1F80F5 : db $8A +org $1F80F5 : db $8A +org $1F80F8 : db $8A +org $1F80F8 : db $8A +org $1F80FB : db $9F +org $1F80FB : db $9F +org $1F80FE : db $9F +org $1F80FE : db $9F +org $1F8101 : db $8A +org $1F8101 : db $8A +org $1F8104 : db $9F +org $1F8104 : db $9F +org $1F8107 : db $9F +org $1F8107 : db $9F +org $1F810A : db $9F +org $1F810A : db $9F +org $1F810D : db $9F +org $1F810D : db $9F +org $1F8110 : db $9F +org $1F8110 : db $9F +org $1F8113 : db $9F +org $1F8113 : db $9F +org $1F8116 : db $9F +org $1F8116 : db $9F +org $1F8119 : db $9F +org $1F8119 : db $9F +org $1F811C : db $9F +org $1F811C : db $9F +org $1F811F : db $9F +org $1F811F : db $9F +org $1F8122 : db $8A +org $1F8122 : db $8A +org $1F8125 : db $8A +org $1F8125 : db $8A +org $1F8128 : db $8A +org $1F8128 : db $8A +org $1F812B : db $9F +org $1F812B : db $9F +org $1F812E : db $9F +org $1F812E : db $9F +org $1F8131 : db $9F +org $1F8131 : db $9F +org $1F8134 : db $9F +org $1F8134 : db $9F +org $1F8137 : db $9F +org $1F8137 : db $9F +org $1F813A : db $9F +org $1F813A : db $9F +org $1F813D : db $9F +org $1F813D : db $9F +org $1F8140 : db $9F +org $1F8140 : db $9F +org $1F8143 : db $9F +org $1F8143 : db $9F +org $1F8146 : db $9F +org $1F8146 : db $9F +org $1F8149 : db $9F +org $1F8149 : db $9F +org $1F814C : db $9F +org $1F814C : db $9F +org $1F814F : db $9F +org $1F814F : db $9F +org $1F8152 : db $8A +org $1F8152 : db $8A +org $1F8155 : db $8A +org $1F8155 : db $8A +org $1F8158 : db $8A +org $1F8158 : db $8A +org $1F815B : db $9F +org $1F815B : db $9F +org $1F815E : db $9F +org $1F815E : db $9F +org $1F8161 : db $9F +org $1F8161 : db $9F +org $1F8164 : db $9F +org $1F8164 : db $9F +org $1F8167 : db $9F +org $1F8167 : db $9F +org $1F816A : db $9F +org $1F816A : db $9F +org $1F816D : db $9F +org $1F816D : db $9F +org $1F8170 : db $9F +org $1F8170 : db $9F +org $1F8173 : db $9F +org $1F8173 : db $9F +org $1F8176 : db $9F +org $1F8176 : db $9F +org $1F8179 : db $9F +org $1F8179 : db $9F +org $1F817C : db $9F +org $1F817C : db $9F +org $1F817F : db $9F +org $1F817F : db $9F +org $1F8182 : db $8A +org $1F8182 : db $8A +org $1F8185 : db $8A +org $1F8185 : db $8A +org $1F8188 : db $8A +org $1F8188 : db $8A +org $1F818B : db $9F +org $1F818B : db $9F +org $1F818E : db $9F +org $1F818E : db $9F +org $1F8191 : db $9F +org $1F8191 : db $9F +org $1F8194 : db $9F +org $1F8194 : db $9F +org $1F8197 : db $9F +org $1F8197 : db $9F +org $1F819A : db $9F +org $1F819A : db $9F +org $1F819D : db $8A +org $1F819D : db $8A +org $1F81A0 : db $9F +org $1F81A0 : db $9F +org $1F81A3 : db $9F +org $1F81A3 : db $9F +org $1F81A6 : db $9F +org $1F81A6 : db $9F +org $1F81A9 : db $9F +org $1F81A9 : db $9F +org $1F81AC : db $9F +org $1F81AC : db $9F +org $1F81AF : db $9F +org $1F81AF : db $9F +org $1F81B2 : db $9F +org $1F81B2 : db $9F +org $1F81B5 : db $9F +org $1F81B5 : db $9F +org $1F81B8 : db $9F +org $1F81B8 : db $9F +org $1F81BB : db $9F +org $1F81BB : db $9F +org $1F81BE : db $9F +org $1F81BE : db $9F +org $1F81C1 : db $9F +org $1F81C1 : db $9F +org $1F81C4 : db $9F +org $1F81C4 : db $9F +org $1F81C7 : db $9F +org $1F81C7 : db $9F +org $1F81CA : db $9F +org $1F81CA : db $9F +org $1F81CD : db $8A +org $1F81CD : db $8A +org $1F81D0 : db $9F +org $1F81D0 : db $9F +org $1F81D3 : db $9F +org $1F81D3 : db $9F +org $1F81D6 : db $9F +org $1F81D6 : db $9F +org $1F81D9 : db $9F +org $1F81D9 : db $9F +org $1F81DC : db $9F +org $1F81DC : db $9F +org $1F81DF : db $9F +org $1F81DF : db $9F +org $1F81E2 : db $9F +org $1F81E2 : db $9F +org $1F81E5 : db $9F +org $1F81E5 : db $9F +org $1F81E8 : db $9F +org $1F81E8 : db $9F +org $1F81EB : db $9F +org $1F81EB : db $9F +org $1F81EE : db $9F +org $1F81EE : db $9F +org $1F81F1 : db $9F +org $1F81F1 : db $9F +org $1F81F4 : db $9F +org $1F81F4 : db $9F +org $1F81F7 : db $9F +org $1F81F7 : db $9F +org $1F81FA : db $8A +org $1F81FA : db $8A +org $1F81FD : db $8A +org $1F81FD : db $8A +org $1F8200 : db $8A +org $1F8200 : db $8A +org $1F8203 : db $9F +org $1F8203 : db $9F +org $1F8206 : db $9F +org $1F8206 : db $9F +org $1F8209 : db $9F +org $1F8209 : db $9F +org $1F820C : db $9F +org $1F820C : db $9F +org $1F820F : db $9F +org $1F820F : db $9F +org $1F8212 : db $9F +org $1F8212 : db $9F +org $1F8215 : db $9F +org $1F8215 : db $9F +org $1F8218 : db $9F +org $1F8218 : db $9F +org $1F821B : db $9F +org $1F821B : db $9F +org $1F821E : db $9F +org $1F821E : db $9F +org $1F8221 : db $9F +org $1F8221 : db $9F +org $1F8224 : db $9F +org $1F8224 : db $9F +org $1F8227 : db $9F +org $1F8227 : db $9F +org $1F822A : db $8A +org $1F822A : db $8A +org $1F822D : db $8A +org $1F822D : db $8A +org $1F8230 : db $8A +org $1F8230 : db $8A +org $1F8233 : db $9F +org $1F8233 : db $9F +org $1F8236 : db $9F +org $1F8236 : db $9F +org $1F8239 : db $9F +org $1F8239 : db $9F +org $1F823C : db $9F +org $1F823C : db $9F +org $1F823F : db $9F +org $1F823F : db $9F +org $1F8242 : db $9F +org $1F8242 : db $9F +org $1F8245 : db $9F +org $1F8245 : db $9F +org $1F8248 : db $9F +org $1F8248 : db $9F +org $1F824B : db $9F +org $1F824B : db $9F +org $1F824E : db $9F +org $1F824E : db $9F +org $1F8251 : db $9F +org $1F8251 : db $9F +org $1F8254 : db $9F +org $1F8254 : db $9F +org $1F8257 : db $9F +org $1F8257 : db $9F +org $1F825A : db $8A +org $1F825A : db $8A +org $1F825D : db $8A +org $1F825D : db $8A +org $1F8260 : db $9F +org $1F8260 : db $9F +org $1F8263 : db $9F +org $1F8263 : db $9F +org $1F8266 : db $9F +org $1F8266 : db $9F +org $1F8269 : db $9F +org $1F8269 : db $9F +org $1F826C : db $9F +org $1F826C : db $9F +org $1F826F : db $9F +org $1F826F : db $9F +org $1F8272 : db $9F +org $1F8272 : db $9F +org $1F8275 : db $9F +org $1F8275 : db $9F +org $1F8278 : db $9F +org $1F8278 : db $9F +org $1F827B : db $9F +org $1F827B : db $9F +org $1F827E : db $9F +org $1F827E : db $9F +org $1F8281 : db $9F +org $1F8281 : db $9F +org $1F8284 : db $9F +org $1F8284 : db $9F +org $1F8287 : db $9F +org $1F8287 : db $9F +org $1F828A : db $8A +org $1F828A : db $8A +org $1F828D : db $8A +org $1F828D : db $8A +org $1F8290 : db $8A +org $1F8290 : db $8A +org $1F8293 : db $9F +org $1F8293 : db $9F +org $1F8296 : db $9F +org $1F8296 : db $9F +org $1F8299 : db $9F +org $1F8299 : db $9F +org $1F829C : db $9F +org $1F829C : db $9F +org $1F829F : db $8A +org $1F829F : db $8A +org $1F82A2 : db $9F +org $1F82A2 : db $9F +org $1F82A5 : db $8A +org $1F82A5 : db $8A +org $1F82A8 : db $8A +org $1F82A8 : db $8A +org $1F82AB : db $8A +org $1F82AB : db $8A +org $1F82AE : db $8A +org $1F82AE : db $8A +org $1F82B1 : db $8A +org $1F82B1 : db $8A +org $1F82B4 : db $8A +org $1F82B4 : db $8A +org $1F82B7 : db $8A +org $1F82B7 : db $8A +org $1F82BA : db $8A +org $1F82BA : db $8A +org $1F82BD : db $9F +org $1F82BD : db $9F +org $1F82C0 : db $8A +org $1F82C0 : db $8A +org $1F82C3 : db $8A +org $1F82C3 : db $8A +org $1F82C6 : db $9F +org $1F82C6 : db $9F +org $1F82C9 : db $8A +org $1F82C9 : db $8A +org $1F82CC : db $8A +org $1F82CC : db $8A +org $1F82CF : db $8A +org $1F82CF : db $8A +org $1F82D2 : db $8A +org $1F82D2 : db $8A +org $1F82D5 : db $8A +org $1F82D5 : db $8A +org $1F82D8 : db $8A +org $1F82D8 : db $8A +org $1F82DB : db $8A +org $1F82DB : db $8A +org $1F82DE : db $8A +org $1F82DE : db $8A +org $1F82E1 : db $8A +org $1F82E1 : db $8A +org $1F82E4 : db $9F +org $1F82E4 : db $9F +org $1F82E7 : db $9F +org $1F82E7 : db $9F +org $1F82EA : db $8A +org $1F82EA : db $8A +org $1F82ED : db $8A +org $1F82ED : db $8A +org $1F82F0 : db $8A +org $1F82F0 : db $8A +org $1F82F3 : db $8A +org $1F82F3 : db $8A +org $1F82F6 : db $9F +org $1F82F6 : db $9F +org $1F82F9 : db $8A +org $1F82F9 : db $8A +org $1F82FC : db $8A +org $1F82FC : db $8A +org $1F82FF : db $8A +org $1F82FF : db $8A +org $1F8302 : db $83 +org $1F8302 : db $83 +org $1F8305 : db $83 +org $1F8305 : db $83 +org $1F8308 : db $83 +org $1F8308 : db $83 +org $1F830B : db $83 +org $1F830B : db $83 +org $1F830E : db $8A +org $1F830E : db $8A +org $1F8311 : db $83 +org $1F8311 : db $83 +org $1F8314 : db $83 +org $1F8314 : db $83 +org $1F8317 : db $83 +org $1F8317 : db $83 +org $1F831A : db $83 +org $1F831A : db $83 +org $1F831D : db $83 +org $1F831D : db $83 +org $1F8320 : db $83 +org $1F8320 : db $83 +org $1F8323 : db $83 +org $1F8323 : db $83 +org $1F8326 : db $83 +org $1F8326 : db $83 +org $1F8329 : db $83 +org $1F8329 : db $83 +org $1F832C : db $83 +org $1F832C : db $83 +org $1F832F : db $83 +org $1F832F : db $83 +org $1F8332 : db $83 +org $1F8332 : db $83 +org $1F8335 : db $83 +org $1F8335 : db $83 +org $1F8338 : db $83 +org $1F8338 : db $83 +org $1F833B : db $83 +org $1F833B : db $83 +org $1F833E : db $83 +org $1F833E : db $83 +org $1F8341 : db $83 +org $1F8341 : db $83 +org $1F8344 : db $83 +org $1F8344 : db $83 +org $1F8347 : db $83 +org $1F8347 : db $83 +org $1F834A : db $83 +org $1F834A : db $83 +org $1F834D : db $83 +org $1F834D : db $83 +org $1F8350 : db $83 +org $1F8350 : db $83 +org $1F8353 : db $83 +org $1F8353 : db $83 +org $1F8356 : db $83 +org $1F8356 : db $83 +org $1F8359 : db $83 +org $1F8359 : db $83 +org $1F835C : db $83 +org $1F835C : db $83 +org $1F835F : db $83 +org $1F835F : db $83 +org $1F8362 : db $83 +org $1F8362 : db $83 +org $1F8365 : db $83 +org $1F8365 : db $83 +org $1F8368 : db $83 +org $1F8368 : db $83 +org $1F836B : db $8A +org $1F836B : db $8A +org $1F836E : db $8A +org $1F836E : db $8A +org $1F8371 : db $8A +org $1F8371 : db $8A +org $1F8374 : db $8A +org $1F8374 : db $8A +org $1F8377 : db $8A +org $1F8377 : db $8A +org $1F837A : db $9F +org $1F837A : db $9F +org $1F837D : db $9F +org $1F837D : db $9F +org $1F8380 : db $9F +org $1F8380 : db $9F +org $1F8383 : db $9F +org $1F8383 : db $9F +org $1F8386 : db $9F +org $1F8386 : db $9F +org $1F8389 : db $9F +org $1F8389 : db $9F +org $1F838C : db $9F +org $1F838C : db $9F +org $1F838F : db $9F +org $1F838F : db $9F +org $1F8392 : db $9F +org $1F8392 : db $9F +org $1F8395 : db $9F +org $1F8395 : db $9F +org $1F8398 : db $9F +org $1F8398 : db $9F +org $1F839B : db $9F +org $1F839B : db $9F +org $1F839E : db $9F +org $1F839E : db $9F +org $1F83A1 : db $9F +org $1F83A1 : db $9F +org $1F83A4 : db $9F +org $1F83A4 : db $9F +org $1F83A7 : db $9F +org $1F83A7 : db $9F +org $1F83AA : db $9F +org $1F83AA : db $9F +org $1F83AD : db $9F +org $1F83AD : db $9F +org $1F83B0 : db $9F +org $1F83B0 : db $9F +org $1F83B3 : db $9F +org $1F83B3 : db $9F +org $1F83B6 : db $9F +org $1F83B6 : db $9F +org $1F83B9 : db $9F +org $1F83B9 : db $9F +org $1F83BC : db $9F +org $1F83BC : db $9F +org $1F83BF : db $9F +org $1F83BF : db $9F +org $1F83C2 : db $8A +org $1F83C2 : db $8A +org $1F83C5 : db $8A +org $1F83C5 : db $8A +org $1F83C8 : db $8A +org $1F83C8 : db $8A +org $1F83CB : db $8A +org $1F83CB : db $8A +org $1F83CE : db $9F +org $1F83CE : db $9F +org $1F83D1 : db $9F +org $1F83D1 : db $9F +org $1F83D4 : db $9F +org $1F83D4 : db $9F +org $1F83D7 : db $9F +org $1F83D7 : db $9F +org $1F83DA : db $8A +org $1F83DA : db $8A +org $1F83DD : db $9F +org $1F83DD : db $9F +org $1F83E0 : db $9F +org $1F83E0 : db $9F +org $1F83E3 : db $9F +org $1F83E3 : db $9F +org $1F83E6 : db $9F +org $1F83E6 : db $9F +org $1F83E9 : db $9F +org $1F83E9 : db $9F +org $1F83EC : db $9F +org $1F83EC : db $9F +org $1F83EF : db $9F +org $1F83EF : db $9F +org $1F83F2 : db $8A +org $1F83F2 : db $8A +org $1F83F5 : db $8A +org $1F83F5 : db $8A +org $1F83F8 : db $8A +org $1F83F8 : db $8A +org $1F83FB : db $9F +org $1F83FB : db $9F +org $1F83FE : db $9F +org $1F83FE : db $9F +org $1F8401 : db $9F +org $1F8401 : db $9F +org $1F8404 : db $9F +org $1F8404 : db $9F +org $1F8407 : db $9F +org $1F8407 : db $9F +org $1F840A : db $8A +org $1F840A : db $8A +org $1F840D : db $9F +org $1F840D : db $9F +org $1F8410 : db $9F +org $1F8410 : db $9F +org $1F8413 : db $9F +org $1F8413 : db $9F +org $1F8416 : db $9F +org $1F8416 : db $9F +org $1F8419 : db $9F +org $1F8419 : db $9F +org $1F841C : db $9F +org $1F841C : db $9F +org $1F841F : db $9F +org $1F841F : db $9F +org $1F8422 : db $9F +org $1F8422 : db $9F +org $1F8425 : db $8A +org $1F8425 : db $8A +org $1F8428 : db $8A +org $1F8428 : db $8A +org $1F842B : db $9F +org $1F842B : db $9F +org $1F842E : db $9F +org $1F842E : db $9F +org $1F8431 : db $9F +org $1F8431 : db $9F +org $1F8434 : db $9F +org $1F8434 : db $9F +org $1F8437 : db $9F +org $1F8437 : db $9F +org $1F843A : db $9F +org $1F843A : db $9F +org $1F843D : db $9F +org $1F843D : db $9F +org $1F8440 : db $9F +org $1F8440 : db $9F +org $1F8443 : db $9F +org $1F8443 : db $9F +org $1F8446 : db $8A +org $1F8446 : db $8A +org $1F8449 : db $9F +org $1F8449 : db $9F +org $1F844C : db $9F +org $1F844C : db $9F +org $1F844F : db $8A +org $1F844F : db $8A +org $1F8452 : db $9F +org $1F8452 : db $9F +org $1F8455 : db $9F +org $1F8455 : db $9F +org $1F8458 : db $8A +org $1F8458 : db $8A +org $1F845B : db $9F +org $1F845B : db $9F +org $1F845E : db $9F +org $1F845E : db $9F +org $1F8461 : db $9F +org $1F8461 : db $9F +org $1F8464 : db $9F +org $1F8464 : db $9F +org $1F8467 : db $9F +org $1F8467 : db $9F +org $1F846A : db $9F +org $1F846A : db $9F +org $1F846D : db $9F +org $1F846D : db $9F +org $1F8470 : db $9F +org $1F8470 : db $9F +org $1F8473 : db $9F +org $1F8473 : db $9F +org $1F8476 : db $8A +org $1F8476 : db $8A +org $1F8479 : db $9F +org $1F8479 : db $9F +org $1F847C : db $9F +org $1F847C : db $9F +org $1F847F : db $9F +org $1F847F : db $9F +org $1F8482 : db $9F +org $1F8482 : db $9F +org $1F8485 : db $8A +org $1F8485 : db $8A +org $1F8488 : db $8A +org $1F8488 : db $8A +org $1F848B : db $9F +org $1F848B : db $9F +org $1F848E : db $9F +org $1F848E : db $9F +org $1F8491 : db $9F +org $1F8491 : db $9F +org $1F8494 : db $9F +org $1F8494 : db $9F +org $1F8497 : db $9F +org $1F8497 : db $9F +org $1F849A : db $9F +org $1F849A : db $9F +org $1F849D : db $9F +org $1F849D : db $9F +org $1F84A0 : db $9F +org $1F84A0 : db $9F +org $1F84A3 : db $9F +org $1F84A3 : db $9F +org $1F84A6 : db $9F +org $1F84A6 : db $9F +org $1F84A9 : db $9F +org $1F84A9 : db $9F +org $1F84AC : db $9F +org $1F84AC : db $9F +org $1F84AF : db $9F +org $1F84AF : db $9F +org $1F84B2 : db $8A +org $1F84B2 : db $8A +org $1F84B5 : db $8A +org $1F84B5 : db $8A +org $1F84B8 : db $8A +org $1F84B8 : db $8A +org $1F84BB : db $9F +org $1F84BB : db $9F +org $1F84BE : db $9F +org $1F84BE : db $9F +org $1F84C1 : db $8A +org $1F84C1 : db $8A +org $1F84C4 : db $9F +org $1F84C4 : db $9F +org $1F84C7 : db $9F +org $1F84C7 : db $9F +org $1F84CA : db $9F +org $1F84CA : db $9F +org $1F84CD : db $9F +org $1F84CD : db $9F +org $1F84D0 : db $9F +org $1F84D0 : db $9F +org $1F84D3 : db $9F +org $1F84D3 : db $9F +org $1F84D6 : db $9F +org $1F84D6 : db $9F +org $1F84D9 : db $9F +org $1F84D9 : db $9F +org $1F84DC : db $9F +org $1F84DC : db $9F +org $1F84DF : db $9F +org $1F84DF : db $9F +org $1F84E2 : db $8A +org $1F84E2 : db $8A +org $1F84E5 : db $8A +org $1F84E5 : db $8A +org $1F84E8 : db $8A +org $1F84E8 : db $8A +org $1F84EB : db $9F +org $1F84EB : db $9F +org $1F84EE : db $9F +org $1F84EE : db $9F +org $1F84F1 : db $9F +org $1F84F1 : db $9F +org $1F84F4 : db $9F +org $1F84F4 : db $9F +org $1F84F7 : db $9F +org $1F84F7 : db $9F +org $1F84FA : db $9F +org $1F84FA : db $9F +org $1F84FD : db $9F +org $1F84FD : db $9F +org $1F8500 : db $9F +org $1F8500 : db $9F +org $1F8503 : db $9F +org $1F8503 : db $9F +org $1F8506 : db $9F +org $1F8506 : db $9F +org $1F8509 : db $9F +org $1F8509 : db $9F +org $1F850C : db $9F +org $1F850C : db $9F +org $1F850F : db $9F +org $1F850F : db $9F +org $1F8512 : db $8A +org $1F8512 : db $8A +org $1F8515 : db $8A +org $1F8515 : db $8A +org $1F8518 : db $8A +org $1F8518 : db $8A +org $1F851B : db $9F +org $1F851B : db $9F +org $1F851E : db $9F +org $1F851E : db $9F +org $1F8521 : db $9F +org $1F8521 : db $9F +org $1F8524 : db $9F +org $1F8524 : db $9F +org $1F8527 : db $9F +org $1F8527 : db $9F +org $1F852A : db $9F +org $1F852A : db $9F +org $1F852D : db $9F +org $1F852D : db $9F +org $1F8530 : db $9F +org $1F8530 : db $9F +org $1F8533 : db $9F +org $1F8533 : db $9F +org $1F8536 : db $9F +org $1F8536 : db $9F +org $1F8539 : db $9F +org $1F8539 : db $9F +org $1F853C : db $9F +org $1F853C : db $9F +org $1F853F : db $9F +org $1F853F : db $9F +org $1F8542 : db $8A +org $1F8542 : db $8A +org $1F8545 : db $8A +org $1F8545 : db $8A +org $1F8548 : db $8A +org $1F8548 : db $8A +org $1F854B : db $9F +org $1F854B : db $9F +org $1F854E : db $9F +org $1F854E : db $9F +org $1F8551 : db $9F +org $1F8551 : db $9F +org $1F8554 : db $9F +org $1F8554 : db $9F +org $1F8557 : db $9F +org $1F8557 : db $9F +org $1F855A : db $9F +org $1F855A : db $9F +org $1F855D : db $8A +org $1F855D : db $8A +org $1F8560 : db $9F +org $1F8560 : db $9F +org $1F8563 : db $9F +org $1F8563 : db $9F +org $1F8566 : db $9F +org $1F8566 : db $9F +org $1F8569 : db $9F +org $1F8569 : db $9F +org $1F856C : db $9F +org $1F856C : db $9F +org $1F856F : db $9F +org $1F856F : db $9F +org $1F8572 : db $9F +org $1F8572 : db $9F +org $1F8575 : db $9F +org $1F8575 : db $9F +org $1F8578 : db $9F +org $1F8578 : db $9F +org $1F857B : db $9F +org $1F857B : db $9F +org $1F857E : db $9F +org $1F857E : db $9F +org $1F8581 : db $9F +org $1F8581 : db $9F +org $1F8584 : db $9F +org $1F8584 : db $9F +org $1F8587 : db $9F +org $1F8587 : db $9F +org $1F858A : db $9F +org $1F858A : db $9F +org $1F858D : db $8A +org $1F858D : db $8A +org $1F8590 : db $9F +org $1F8590 : db $9F +org $1F8593 : db $9F +org $1F8593 : db $9F +org $1F8596 : db $9F +org $1F8596 : db $9F +org $1F8599 : db $9F +org $1F8599 : db $9F +org $1F859C : db $9F +org $1F859C : db $9F +org $1F859F : db $9F +org $1F859F : db $9F +org $1F85A2 : db $9F +org $1F85A2 : db $9F +org $1F85A5 : db $9F +org $1F85A5 : db $9F +org $1F85A8 : db $9F +org $1F85A8 : db $9F +org $1F85AB : db $9F +org $1F85AB : db $9F +org $1F85AE : db $9F +org $1F85AE : db $9F +org $1F85B1 : db $9F +org $1F85B1 : db $9F +org $1F85B4 : db $9F +org $1F85B4 : db $9F +org $1F85B7 : db $9F +org $1F85B7 : db $9F +org $1F85BA : db $8A +org $1F85BA : db $8A +org $1F85BD : db $8A +org $1F85BD : db $8A +org $1F85C0 : db $8A +org $1F85C0 : db $8A +org $1F85C3 : db $9F +org $1F85C3 : db $9F +org $1F85C6 : db $9F +org $1F85C6 : db $9F +org $1F85C9 : db $9F +org $1F85C9 : db $9F +org $1F85CC : db $9F +org $1F85CC : db $9F +org $1F85CF : db $9F +org $1F85CF : db $9F +org $1F85D2 : db $9F +org $1F85D2 : db $9F +org $1F85D5 : db $9F +org $1F85D5 : db $9F +org $1F85D8 : db $9F +org $1F85D8 : db $9F +org $1F85DB : db $9F +org $1F85DB : db $9F +org $1F85DE : db $9F +org $1F85DE : db $9F +org $1F85E1 : db $9F +org $1F85E1 : db $9F +org $1F85E4 : db $9F +org $1F85E4 : db $9F +org $1F85E7 : db $9F +org $1F85E7 : db $9F +org $1F85EA : db $8A +org $1F85EA : db $8A +org $1F85ED : db $8A +org $1F85ED : db $8A +org $1F85F0 : db $8A +org $1F85F0 : db $8A +org $1F85F3 : db $9F +org $1F85F3 : db $9F +org $1F85F6 : db $9F +org $1F85F6 : db $9F +org $1F85F9 : db $9F +org $1F85F9 : db $9F +org $1F85FC : db $9F +org $1F85FC : db $9F +org $1F85FF : db $9F +org $1F85FF : db $9F +org $1F8602 : db $9F +org $1F8602 : db $9F +org $1F8605 : db $9F +org $1F8605 : db $9F +org $1F8608 : db $9F +org $1F8608 : db $9F +org $1F860B : db $9F +org $1F860B : db $9F +org $1F860E : db $9F +org $1F860E : db $9F +org $1F8611 : db $9F +org $1F8611 : db $9F +org $1F8614 : db $9F +org $1F8614 : db $9F +org $1F8617 : db $9F +org $1F8617 : db $9F +org $1F861A : db $8A +org $1F861A : db $8A +org $1F861D : db $8A +org $1F861D : db $8A +org $1F8620 : db $9F +org $1F8620 : db $9F +org $1F8623 : db $9F +org $1F8623 : db $9F +org $1F8626 : db $9F +org $1F8626 : db $9F +org $1F8629 : db $9F +org $1F8629 : db $9F +org $1F862C : db $9F +org $1F862C : db $9F +org $1F862F : db $9F +org $1F862F : db $9F +org $1F8632 : db $9F +org $1F8632 : db $9F +org $1F8635 : db $9F +org $1F8635 : db $9F +org $1F8638 : db $9F +org $1F8638 : db $9F +org $1F863B : db $9F +org $1F863B : db $9F +org $1F863E : db $9F +org $1F863E : db $9F +org $1F8641 : db $9F +org $1F8641 : db $9F +org $1F8644 : db $9F +org $1F8644 : db $9F +org $1F8647 : db $9F +org $1F8647 : db $9F +org $1F864A : db $8A +org $1F864A : db $8A +org $1F864D : db $8A +org $1F864D : db $8A +org $1F8650 : db $8A +org $1F8650 : db $8A +org $1F8653 : db $9F +org $1F8653 : db $9F +org $1F8656 : db $9F +org $1F8656 : db $9F +org $1F8659 : db $9F +org $1F8659 : db $9F +org $1F865C : db $9F +org $1F865C : db $9F +org $1F865F : db $8A +org $1F865F : db $8A +org $1F8662 : db $9F +org $1F8662 : db $9F +org $1F8665 : db $8A +org $1F8665 : db $8A +org $1F8668 : db $8A +org $1F8668 : db $8A +org $1F866B : db $8A +org $1F866B : db $8A +org $1F866E : db $8A +org $1F866E : db $8A +org $1F8671 : db $8A +org $1F8671 : db $8A +org $1F8674 : db $8A +org $1F8674 : db $8A +org $1F8677 : db $8A +org $1F8677 : db $8A +org $1F867A : db $8A +org $1F867A : db $8A +org $1F867D : db $9F +org $1F867D : db $9F +org $1F8680 : db $8A +org $1F8680 : db $8A +org $1F8683 : db $8A +org $1F8683 : db $8A +org $1F8686 : db $9F +org $1F8686 : db $9F +org $1F8689 : db $8A +org $1F8689 : db $8A +org $1F868C : db $8A +org $1F868C : db $8A +org $1F868F : db $8A +org $1F868F : db $8A +org $1F8692 : db $8A +org $1F8692 : db $8A +org $1F8695 : db $8A +org $1F8695 : db $8A +org $1F8698 : db $8A +org $1F8698 : db $8A +org $1F869B : db $8A +org $1F869B : db $8A +org $1F869E : db $8A +org $1F869E : db $8A +org $1F86A1 : db $8A +org $1F86A1 : db $8A +org $1F86A4 : db $9F +org $1F86A4 : db $9F +org $1F86A7 : db $9F +org $1F86A7 : db $9F +org $1F86AA : db $8A +org $1F86AA : db $8A +org $1F86AD : db $8A +org $1F86AD : db $8A +org $1F86B0 : db $8A +org $1F86B0 : db $8A +org $1F86B3 : db $8A +org $1F86B3 : db $8A +org $1F86B6 : db $9F +org $1F86B6 : db $9F +org $1F86B9 : db $8A +org $1F86B9 : db $8A +org $1F86BC : db $8A +org $1F86BC : db $8A +org $1F86BF : db $8A +org $1F86BF : db $8A +org $1F86C2 : db $83 +org $1F86C2 : db $83 +org $1F86C5 : db $83 +org $1F86C5 : db $83 +org $1F86C8 : db $83 +org $1F86C8 : db $83 +org $1F86CB : db $83 +org $1F86CB : db $83 +org $1F86CE : db $8A +org $1F86CE : db $8A +org $1F86D1 : db $83 +org $1F86D1 : db $83 +org $1F86D4 : db $83 +org $1F86D4 : db $83 +org $1F86D7 : db $83 +org $1F86D7 : db $83 +org $1F86DA : db $83 +org $1F86DA : db $83 +org $1F86DD : db $83 +org $1F86DD : db $83 +org $1F86E0 : db $83 +org $1F86E0 : db $83 +org $1F86E3 : db $83 +org $1F86E3 : db $83 +org $1F86E6 : db $83 +org $1F86E6 : db $83 +org $1F86E9 : db $83 +org $1F86E9 : db $83 +org $1F86EC : db $83 +org $1F86EC : db $83 +org $1F86EF : db $83 +org $1F86EF : db $83 +org $1F86F2 : db $83 +org $1F86F2 : db $83 +org $1F86F5 : db $83 +org $1F86F5 : db $83 +org $1F86F8 : db $83 +org $1F86F8 : db $83 +org $1F86FB : db $83 +org $1F86FB : db $83 +org $1F86FE : db $83 +org $1F86FE : db $83 +org $1F8701 : db $83 +org $1F8701 : db $83 +org $1F8704 : db $83 +org $1F8704 : db $83 +org $1F8707 : db $83 +org $1F8707 : db $83 +org $1F870A : db $83 +org $1F870A : db $83 +org $1F870D : db $83 +org $1F870D : db $83 +org $1F8710 : db $83 +org $1F8710 : db $83 +org $1F8713 : db $83 +org $1F8713 : db $83 +org $1F8716 : db $83 +org $1F8716 : db $83 +org $1F8719 : db $83 +org $1F8719 : db $83 +org $1F871C : db $83 +org $1F871C : db $83 +org $1F871F : db $83 +org $1F871F : db $83 +org $1F8722 : db $83 +org $1F8722 : db $83 +org $1F8725 : db $83 +org $1F8725 : db $83 +org $1F8728 : db $83 +org $1F8728 : db $83 +org $1F872B : db $8A +org $1F872B : db $8A +org $1F872E : db $8A +org $1F872E : db $8A +org $1F8731 : db $8A +org $1F8731 : db $8A +org $1F8734 : db $8A +org $1F8734 : db $8A +org $1F8737 : db $8A +org $1F8737 : db $8A +org $1F873A : db $9F +org $1F873A : db $9F +org $1F873D : db $9F +org $1F873D : db $9F +org $1F8740 : db $9F +org $1F8740 : db $9F +org $1F8743 : db $9F +org $1F8743 : db $9F +org $1F8746 : db $9F +org $1F8746 : db $9F +org $1F8749 : db $9F +org $1F8749 : db $9F +org $1F874C : db $9F +org $1F874C : db $9F +org $1F874F : db $9F +org $1F874F : db $9F +org $1F8752 : db $9F +org $1F8752 : db $9F +org $1F8755 : db $9F +org $1F8755 : db $9F +org $1F8758 : db $9F +org $1F8758 : db $9F +org $1F875B : db $9F +org $1F875B : db $9F +org $1F875E : db $9F +org $1F875E : db $9F +org $1F8761 : db $9F +org $1F8761 : db $9F +org $1F8764 : db $9F +org $1F8764 : db $9F +org $1F8767 : db $9F +org $1F8767 : db $9F +org $1F876A : db $9F +org $1F876A : db $9F +org $1F876D : db $9F +org $1F876D : db $9F +org $1F8770 : db $9F +org $1F8770 : db $9F +org $1F8773 : db $9F +org $1F8773 : db $9F +org $1F8776 : db $9F +org $1F8776 : db $9F +org $1F8779 : db $9F +org $1F8779 : db $9F +org $1F877C : db $9F +org $1F877C : db $9F +org $1F877F : db $9F +org $1F877F : db $9F + +;=================================================================================================== diff --git a/fileselect.asm b/fileselect.asm index a9c8b7c..43b0ef2 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -1,6 +1,4 @@ - ;FS prefix means file_select, since these defines and macros are specific to this screen - !FS_COLOR_BROWN = $0000 ;(only used for: Shovel, hammer, powder) !FS_COLOR_RED = $0400 !FS_COLOR_YELLOW = $0800 @@ -110,6 +108,7 @@ JMP DrawItem DrawPlayerFile: LDA.b FrameCounter : AND.w #$0001 : BNE .normal JSR DrawPlayerFileShared + INC.w SkipOAM ; Suppress animated tile updates for this frame ; re-enable Stripe Image format upload on this frame @@ -146,7 +145,7 @@ DrawPlayerFile: AND.w #$00FF BEQ .flashing - LDA.w #$26BE + LDA.w #$26FE BRA .draw_access_icon .flashing @@ -155,10 +154,8 @@ DrawPlayerFile: .draw_access_icon STA.w GFXStripes+$0412 - LDA.w #$FFFF STA.w GFXStripes+$0414 - BRA .done .normal STZ.w SkipOAM ; ensure core animated tile updates are not suppressed @@ -332,7 +329,7 @@ DrawPlayerFileShared: %fs_drawItemGray(3,26,FileSelectItems_fighters_sword) BRA ++ .bombSword - LDA.l $70038F : AND.w #$00FF : BNE + + LDA.l SpecialWeaponLevelSRAM : AND.w #$00FF : BNE + %fs_drawItemGray(3,26,FileSelectItems_fighters_bombs) BRA ++ + : DEC : BNE + @@ -381,23 +378,40 @@ DrawPlayerFileShared: ++ ; Heart Pieces + LDA.l HUDHeartColors_index : ASL : TAX LDA.l EquipmentSRAM+$2B : AND.w #$00FF : BNE + - %fs_drawItem(9,26,FileSelectItems_heart_piece_0_of_4) - BRA ++ + LDY.w #9*$20+26*2+$1004 + LDA.w #$02C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y + LDA.w #$42C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y + LDA.w #$02D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y + LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y + JMP ++ + : DEC : BNE + - %fs_drawItem(9,26,FileSelectItems_heart_piece_1_of_4) - BRA ++ + LDY.w #9*$20+26*2+$1004 + LDA.w #$02C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y + LDA.w #$42C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y + LDA.w #$02D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y + LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y + JMP ++ + : DEC : BNE + - %fs_drawItem(9,26,FileSelectItems_heart_piece_2_of_4) - BRA ++ + LDY.w #9*$20+26*2+$1004 + LDA.w #$02C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y + LDA.w #$42C0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y + LDA.w #$02D1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y + LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y + JMP ++ + - %fs_drawItem(9,26,FileSelectItems_heart_piece_3_of_4) + LDY.w #9*$20+26*2+$1004 + LDA.w #$02C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0000, Y + LDA.w #$42C1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0002, Y + LDA.w #$02D1 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0040, Y + LDA.w #$42D0 : ORA.l HUDHeartColors_masks_file_select,X : STA.w $0042, Y ++ - LDA.l EquipmentSRAM+$0108 : AND.w #$00FF + LDA.l EquipmentSRAM+$0130 : AND.w #$00FF JSL.l HexToDec - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,26) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,27) + LDA.l HexToDecDigit4 : AND.w #$00FF : ORA.w #!FS_COLOR_BW|$02E0 : %fs_draw8x8(11,26) + LDA.l HexToDecDigit5 : AND.w #$00FF : ORA.w #!FS_COLOR_BW|$02E0 : %fs_draw8x8(11,27) ; Boots %fs_drawItemBasic(EquipmentSRAM+$15,3,28,FileSelectItems_boots) @@ -443,52 +457,52 @@ DrawPlayerFileShared: ; Crystals LDA.l EquipmentSRAM+$3A : AND.w #$0002 : BEQ + - LDA.w #$0297|!FS_COLOR_BLUE + LDA.w #$02D7|!FS_COLOR_BLUE BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,18) LDA.l EquipmentSRAM+$3A : AND.w #$0010 : BEQ + - LDA.w #$0297|!FS_COLOR_BLUE + LDA.w #$02D7|!FS_COLOR_BLUE BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(12,19) LDA.l EquipmentSRAM+$3A : AND.w #$0040 : BEQ + - LDA.w #$0297|!FS_COLOR_BLUE + LDA.w #$02D7|!FS_COLOR_BLUE BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,20) LDA.l EquipmentSRAM+$3A : AND.w #$0020 : BEQ + - LDA.w #$0297|!FS_COLOR_BLUE + LDA.w #$02D7|!FS_COLOR_BLUE BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(12,21) LDA.l EquipmentSRAM+$3A : AND.w #$0004 : BEQ + - LDA.w #$0297|!FS_COLOR_RED + LDA.w #$02D7|!FS_COLOR_RED BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,22) LDA.l EquipmentSRAM+$3A : AND.w #$0001 : BEQ + - LDA.w #$0297|!FS_COLOR_RED + LDA.w #$02D7|!FS_COLOR_RED BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(12,23) LDA.l EquipmentSRAM+$3A : AND.w #$0008 : BEQ + - LDA.w #$0297|!FS_COLOR_BLUE + LDA.w #$02D7|!FS_COLOR_BLUE BRA ++ + - LDA.w #$0287|!FS_COLOR_GRAY + LDA.w #$02C7|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,24) @@ -498,260 +512,252 @@ RTS FileSelectItems: .empty_bow ;for an eventual update for retro mode - dw #$0201|!FS_COLOR_YELLOW, #$02B8|!FS_COLOR_YELLOW, #$02B7|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW + dw #$0241|!FS_COLOR_YELLOW, #$02F8|!FS_COLOR_YELLOW, #$02F7|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW .bow - dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW, #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW + dw #$0241|!FS_COLOR_YELLOW, #$0242|!FS_COLOR_YELLOW, #$0251|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW .silver_bow - dw #$0201|!FS_COLOR_YELLOW, #$0204|!FS_COLOR_YELLOW, #$0203|!FS_COLOR_RED, #$0212|!FS_COLOR_YELLOW + dw #$0241|!FS_COLOR_YELLOW, #$0244|!FS_COLOR_YELLOW, #$0243|!FS_COLOR_RED, #$0252|!FS_COLOR_YELLOW .regular_arrow ;for an eventual update for retro mode - dw #$0200|!FS_COLOR_YELLOW, #$02BA|!FS_COLOR_YELLOW, #$02B9|!FS_COLOR_RED, #$0200|!FS_COLOR_YELLOW + dw #$0240|!FS_COLOR_YELLOW, #$02FA|!FS_COLOR_YELLOW, #$02F9|!FS_COLOR_RED, #$0240|!FS_COLOR_YELLOW .silver_arrow - dw #$0200|!FS_COLOR_YELLOW, #$0214|!FS_COLOR_YELLOW, #$0213|!FS_COLOR_RED, #$0200|!FS_COLOR_YELLOW + dw #$0240|!FS_COLOR_YELLOW, #$0254|!FS_COLOR_YELLOW, #$0253|!FS_COLOR_RED, #$0240|!FS_COLOR_YELLOW .blue_boomerang - dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE + dw #$0245|!FS_COLOR_BLUE, #$0246|!FS_COLOR_BLUE, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_BLUE .red_boomerang - dw #$0205|!FS_COLOR_RED, #$0206|!FS_COLOR_RED, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_RED + dw #$0245|!FS_COLOR_RED, #$0246|!FS_COLOR_RED, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_RED .both_boomerang - dw #$02B6|!FS_COLOR_BLUE, #$02B6|!FS_COLOR_RED, #$02B6|!FS_COLOR_BLUE|!FS_VFLIP, #$02B6|!FS_COLOR_RED|!FS_VFLIP + dw #$02F6|!FS_COLOR_BLUE, #$02F6|!FS_COLOR_RED, #$02F6|!FS_COLOR_BLUE|!FS_VFLIP, #$02F6|!FS_COLOR_RED|!FS_VFLIP .hookshot - dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW + dw #$0240|!FS_COLOR_RED, #$0255|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0240|!FS_COLOR_BW .bombs - dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE|!FS_HFLIP + dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE|!FS_HFLIP .fire_rod - dw #$0220|!FS_COLOR_RED, #$0210|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0231|!FS_COLOR_RED + dw #$0260|!FS_COLOR_RED, #$0250|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0271|!FS_COLOR_RED .ice_rod - dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE, #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE + dw #$0260|!FS_COLOR_BLUE, #$0261|!FS_COLOR_BLUE, #$0270|!FS_COLOR_BLUE, #$0271|!FS_COLOR_BLUE .bombos - dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP + dw #$0247|!FS_COLOR_YELLOW, #$0257|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0257|!FS_COLOR_YELLOW, #$0247|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP .ether - dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP + dw #$0248|!FS_COLOR_YELLOW, #$0258|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0258|!FS_COLOR_YELLOW, #$0248|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP .quake - dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP + dw #$0249|!FS_COLOR_YELLOW, #$0259|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0259|!FS_COLOR_YELLOW, #$0249|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP .lamp - dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP, #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED + dw #$026C|!FS_COLOR_RED, #$026C|!FS_COLOR_RED|!FS_HFLIP, #$027C|!FS_COLOR_RED, #$027D|!FS_COLOR_RED .hammer - dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN, #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN + dw #$0262|!FS_COLOR_BROWN, #$0263|!FS_COLOR_BROWN, #$0272|!FS_COLOR_BROWN, #$0273|!FS_COLOR_BROWN .bugnet - dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW, #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW + dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_YELLOW, #$0279|!FS_COLOR_YELLOW .shovel - dw #$0224|!FS_COLOR_BROWN, #$0225|!FS_COLOR_BROWN, #$0234|!FS_COLOR_BROWN, #$0235|!FS_COLOR_BROWN + dw #$0264|!FS_COLOR_BROWN, #$0265|!FS_COLOR_BROWN, #$0274|!FS_COLOR_BROWN, #$0275|!FS_COLOR_BROWN .flute - dw #$0226|!FS_COLOR_BLUE, #$0227|!FS_COLOR_BLUE, #$0236|!FS_COLOR_BLUE, #$0237|!FS_COLOR_BLUE + dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE .book - dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN, #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN + dw #$026A|!FS_COLOR_GREEN, #$026B|!FS_COLOR_GREEN, #$027A|!FS_COLOR_GREEN, #$027B|!FS_COLOR_GREEN .redcane - dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED, #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED + dw #$025D|!FS_COLOR_RED, #$025E|!FS_COLOR_RED, #$026D|!FS_COLOR_RED, #$026E|!FS_COLOR_RED .bluecane - dw #$021D|!FS_COLOR_BLUE, #$021E|!FS_COLOR_BLUE, #$022D|!FS_COLOR_BLUE, #$022E|!FS_COLOR_BLUE + dw #$025D|!FS_COLOR_BLUE, #$025E|!FS_COLOR_BLUE, #$026D|!FS_COLOR_BLUE, #$026E|!FS_COLOR_BLUE .cape - dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED, #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED + dw #$0288|!FS_COLOR_RED, #$0289|!FS_COLOR_RED, #$0298|!FS_COLOR_RED, #$0299|!FS_COLOR_RED .mirror - dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE, #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE + dw #$028A|!FS_COLOR_BLUE, #$028B|!FS_COLOR_BLUE, #$029A|!FS_COLOR_BLUE, #$029B|!FS_COLOR_BLUE .flippers - dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE, #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE + dw #$024E|!FS_COLOR_BLUE, #$024F|!FS_COLOR_BLUE, #$025F|!FS_COLOR_BLUE|!FS_HFLIP, #$025F|!FS_COLOR_BLUE .boots - dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS, #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS + dw #$028C|!FS_COLOR_BOOTS, #$028D|!FS_COLOR_BOOTS, #$029C|!FS_COLOR_BOOTS, #$029D|!FS_COLOR_BOOTS .pearl - dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED, #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED + dw #$02A4|!FS_COLOR_RED, #$02A5|!FS_COLOR_RED, #$02B4|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED .no_pendant - dw #$0285|!FS_COLOR_GRAY, #$0286|!FS_COLOR_GRAY, #$02B2|!FS_COLOR_GRAY, #$0296|!FS_COLOR_GRAY + dw #$02C5|!FS_COLOR_GRAY, #$02C6|!FS_COLOR_GRAY, #$02F2|!FS_COLOR_GRAY, #$02D6|!FS_COLOR_GRAY .green_pendant - dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN, #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN + dw #$02C5|!FS_COLOR_GREEN, #$02C6|!FS_COLOR_GREEN, #$02D5|!FS_COLOR_GREEN, #$02D6|!FS_COLOR_GREEN .blue_pendant - dw #$0285|!FS_COLOR_BLUE, #$0286|!FS_COLOR_BLUE, #$0295|!FS_COLOR_BLUE, #$0296|!FS_COLOR_BLUE + dw #$02C5|!FS_COLOR_BLUE, #$02C6|!FS_COLOR_BLUE, #$02D5|!FS_COLOR_BLUE, #$02D6|!FS_COLOR_BLUE .red_pendant - dw #$0285|!FS_COLOR_RED, #$0286|!FS_COLOR_RED, #$0295|!FS_COLOR_RED, #$0296|!FS_COLOR_RED + dw #$02C5|!FS_COLOR_RED, #$02C6|!FS_COLOR_RED, #$02D5|!FS_COLOR_RED, #$02D6|!FS_COLOR_RED .gloves - dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN, #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN + dw #$028E|!FS_COLOR_BROWN, #$028F|!FS_COLOR_BROWN, #$029E|!FS_COLOR_BROWN, #$029F|!FS_COLOR_BROWN .mitts - dw #$0260|!FS_COLOR_YELLOW, #$0261|!FS_COLOR_YELLOW, #$0270|!FS_COLOR_YELLOW, #$0271|!FS_COLOR_YELLOW + dw #$02A0|!FS_COLOR_YELLOW, #$02A1|!FS_COLOR_YELLOW, #$02B0|!FS_COLOR_YELLOW, #$02B1|!FS_COLOR_YELLOW .mushroom - dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED, #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED + dw #$02A2|!FS_COLOR_RED, #$02A3|!FS_COLOR_RED, #$02B2|!FS_COLOR_RED, #$02B3|!FS_COLOR_RED .powder - dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN, #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN + dw #$024A|!FS_COLOR_BROWN, #$024B|!FS_COLOR_BROWN, #$025A|!FS_COLOR_BROWN, #$025B|!FS_COLOR_BROWN .fighters_sword - dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE + dw #$02A6|!FS_COLOR_BLUE, #$02A7|!FS_COLOR_BLUE, #$02B6|!FS_COLOR_BLUE, #$02B7|!FS_COLOR_BLUE .master_sword - dw #$0268|!FS_COLOR_BLUE, #$0269|!FS_COLOR_BLUE, #$0278|!FS_COLOR_RED, #$0279|!FS_COLOR_BLUE + dw #$02A8|!FS_COLOR_BLUE, #$02A9|!FS_COLOR_BLUE, #$02B8|!FS_COLOR_RED, #$02B9|!FS_COLOR_BLUE .tempered_sword - dw #$0268|!FS_COLOR_RED, #$0269|!FS_COLOR_RED, #$0278|!FS_COLOR_GREEN, #$026A|!FS_COLOR_RED + dw #$02A8|!FS_COLOR_RED, #$02A9|!FS_COLOR_RED, #$02B8|!FS_COLOR_GREEN, #$02AA|!FS_COLOR_RED .gold_sword - dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_BLUE, #$027A|!FS_COLOR_YELLOW + dw #$02A8|!FS_COLOR_YELLOW, #$02A9|!FS_COLOR_YELLOW, #$02B8|!FS_COLOR_BLUE, #$02BA|!FS_COLOR_YELLOW .fighters_shield - dw #$026B|!FS_COLOR_BLUE, #$026B|!FS_COLOR_BLUE|!FS_HFLIP, #$027B|!FS_COLOR_BLUE, #$027B|!FS_COLOR_BLUE|!FS_HFLIP + dw #$02AB|!FS_COLOR_BLUE, #$02AB|!FS_COLOR_BLUE|!FS_HFLIP, #$02BB|!FS_COLOR_BLUE, #$02BB|!FS_COLOR_BLUE|!FS_HFLIP .fire_shield - dw #$026C|!FS_COLOR_BOOTS, #$026C|!FS_COLOR_BOOTS|!FS_HFLIP, #$027C|!FS_COLOR_BOOTS, #$027C|!FS_COLOR_BOOTS|!FS_HFLIP + dw #$02AC|!FS_COLOR_BOOTS, #$02AC|!FS_COLOR_BOOTS|!FS_HFLIP, #$02BC|!FS_COLOR_BOOTS, #$02BC|!FS_COLOR_BOOTS|!FS_HFLIP .mirror_shield - dw #$026D|!FS_COLOR_YELLOW, #$026E|!FS_COLOR_YELLOW, #$027D|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW + dw #$02AD|!FS_COLOR_YELLOW, #$02AE|!FS_COLOR_YELLOW, #$02BD|!FS_COLOR_YELLOW, #$02BE|!FS_COLOR_YELLOW .green_mail - dw #$026F|!FS_COLOR_GREEN, #$026F|!FS_COLOR_GREEN|!FS_HFLIP, #$027F|!FS_COLOR_GREEN, #$02B3|!FS_COLOR_GREEN + dw #$02AF|!FS_COLOR_GREEN, #$02AF|!FS_COLOR_GREEN|!FS_HFLIP, #$02BF|!FS_COLOR_GREEN, #$02F3|!FS_COLOR_GREEN .blue_mail - dw #$026F|!FS_COLOR_BLUE, #$026F|!FS_COLOR_BLUE|!FS_HFLIP, #$027F|!FS_COLOR_BLUE, #$02B4|!FS_COLOR_BLUE + dw #$02AF|!FS_COLOR_BLUE, #$02AF|!FS_COLOR_BLUE|!FS_HFLIP, #$02BF|!FS_COLOR_BLUE, #$02F4|!FS_COLOR_BLUE .red_mail - dw #$026F|!FS_COLOR_RED, #$026F|!FS_COLOR_RED|!FS_HFLIP, #$027F|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED - - .heart_piece_0_of_4 - dw #$0280|!FS_COLOR_RED, #$0280|!FS_COLOR_RED|!FS_HFLIP, #$0290|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP - .heart_piece_1_of_4 - dw #$0281|!FS_COLOR_RED, #$0280|!FS_COLOR_RED|!FS_HFLIP, #$0290|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP - .heart_piece_2_of_4 - dw #$0281|!FS_COLOR_RED, #$0280|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP - .heart_piece_3_of_4 - dw #$0281|!FS_COLOR_RED, #$0281|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0290|!FS_COLOR_RED|!FS_HFLIP + dw #$02AF|!FS_COLOR_RED, #$02AF|!FS_COLOR_RED|!FS_HFLIP, #$02BF|!FS_COLOR_RED, #$02F5|!FS_COLOR_RED .empty_bottle - dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0250|!FS_COLOR_BW, #$0251|!FS_COLOR_BW + dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0290|!FS_COLOR_BW, #$0291|!FS_COLOR_BW .red_potion - dw #$0242|!FS_COLOR_RED, #$0242|!FS_COLOR_RED|!FS_HFLIP, #$0252|!FS_COLOR_RED, #$0243|!FS_COLOR_RED + dw #$0282|!FS_COLOR_RED, #$0282|!FS_COLOR_RED|!FS_HFLIP, #$0292|!FS_COLOR_RED, #$0283|!FS_COLOR_RED .green_potion - dw #$0242|!FS_COLOR_GREEN, #$0242|!FS_COLOR_GREEN|!FS_HFLIP, #$0252|!FS_COLOR_GREEN, #$0244|!FS_COLOR_GREEN + dw #$0282|!FS_COLOR_GREEN, #$0282|!FS_COLOR_GREEN|!FS_HFLIP, #$0292|!FS_COLOR_GREEN, #$0284|!FS_COLOR_GREEN .blue_potion - dw #$0242|!FS_COLOR_BLUE, #$0242|!FS_COLOR_BLUE|!FS_HFLIP, #$0252|!FS_COLOR_BLUE, #$0245|!FS_COLOR_BLUE + dw #$0282|!FS_COLOR_BLUE, #$0282|!FS_COLOR_BLUE|!FS_HFLIP, #$0292|!FS_COLOR_BLUE, #$0285|!FS_COLOR_BLUE .fairy_bottle - dw #$0247|!FS_COLOR_YELLOW|!FS_HFLIP, #$0247|!FS_COLOR_YELLOW, #$0256|!FS_COLOR_BLUE, #$0257|!FS_COLOR_BLUE + dw #$0287|!FS_COLOR_YELLOW|!FS_HFLIP, #$0287|!FS_COLOR_YELLOW, #$0296|!FS_COLOR_BLUE, #$0297|!FS_COLOR_BLUE .bee_bottle - dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0254|!FS_COLOR_YELLOW, #$0255|!FS_COLOR_YELLOW + dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0294|!FS_COLOR_YELLOW, #$0295|!FS_COLOR_YELLOW .good_bee_bottle - dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0254|!FS_COLOR_YELLOW, #$0246|!FS_COLOR_YELLOW + dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0294|!FS_COLOR_YELLOW, #$0286|!FS_COLOR_YELLOW .fighters_bombs - dw #$020C|!FS_COLOR_GREEN, #$020D|!FS_COLOR_GREEN, #$021C|!FS_COLOR_GREEN, #$02A1|!FS_COLOR_GREEN + dw #$024C|!FS_COLOR_GREEN, #$024D|!FS_COLOR_GREEN, #$025C|!FS_COLOR_GREEN, #$02E1|!FS_COLOR_GREEN .master_bombs - dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE, #$02A2|!FS_COLOR_BLUE + dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$02E2|!FS_COLOR_BLUE .tempered_bombs - dw #$020C|!FS_COLOR_RED, #$020D|!FS_COLOR_RED, #$021C|!FS_COLOR_RED, #$02A3|!FS_COLOR_RED + dw #$024C|!FS_COLOR_RED, #$024D|!FS_COLOR_RED, #$025C|!FS_COLOR_RED, #$02E3|!FS_COLOR_RED .gold_bombs - dw #$020C|!FS_COLOR_YELLOW, #$020D|!FS_COLOR_YELLOW, #$021C|!FS_COLOR_YELLOW, #$02A4|!FS_COLOR_YELLOW + dw #$024C|!FS_COLOR_YELLOW, #$024D|!FS_COLOR_YELLOW, #$025C|!FS_COLOR_YELLOW, #$02E4|!FS_COLOR_YELLOW .extra_gold_bombs - dw #$020C|!FS_COLOR_YELLOW, #$020D|!FS_COLOR_YELLOW, #$021C|!FS_COLOR_YELLOW, #$02A5|!FS_COLOR_YELLOW + dw #$024C|!FS_COLOR_YELLOW, #$024D|!FS_COLOR_YELLOW, #$025C|!FS_COLOR_YELLOW, #$02E5|!FS_COLOR_YELLOW ;-------------------------------------------------------------------------------- FileSelectDrawHudBar: - LDA.w #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10) + LDA.w #$02DB|!FS_COLOR_GREEN : %fs_draw16x8(0,10) LDA.l DisplayRupeesSRAM - JSL.l HexToDec - LDA.l HexToDecDigit2 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9) - LDA.l HexToDecDigit3 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10) - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) + JSL.l HUDHex4Digit_Long + LDA.b Scrap04 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,9) + LDA.b Scrap05 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,10) + LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,11) + LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,12) - LDA.l SpecialWeapons : AND.w #$00FF : CMP #$0001 : BEQ .colorBombs - LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) + LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BEQ .colorBombs + LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14) LDA.l BombsEquipmentSRAM : AND.w #$00FF - JSL.l HexToDec - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15) + JSL.l HUDHex2Digit_Long + TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,14) + TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,15) BRA ++ + .colorBombs - LDA.l $70038F : AND.w #$00FF : BNE + + LDA.l SpecialWeaponLevelSRAM : AND.w #$00FF : BNE + ; no bombs, draw no icon BRA ++ + : DEC : BNE + - LDA.w #$028B|!FS_COLOR_GREEN : %fs_draw16x8(0,14) + LDA.w #$02CB|!FS_COLOR_GREEN : %fs_draw16x8(0,14) BRA ++ + : DEC : BNE + - LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) + LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14) BRA ++ + : DEC : BNE + - LDA.w #$028B|!FS_COLOR_RED : %fs_draw16x8(0,14) + LDA.w #$02CB|!FS_COLOR_RED : %fs_draw16x8(0,14) BRA ++ + - LDA.w #$028B|!FS_COLOR_YELLOW : %fs_draw16x8(0,14) + LDA.w #$02CB|!FS_COLOR_YELLOW : %fs_draw16x8(0,14) ++ LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ + - LDA.w #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17) + LDA.w #$02D9|!FS_COLOR_RED : %fs_draw16x8(0,17) BRA ++ + - LDA.w #$0289|!FS_COLOR_BROWN : %fs_draw16x8(0,17) + LDA.w #$02C9|!FS_COLOR_BROWN : %fs_draw16x8(0,17) ++ LDA.l CurrentArrowsSRAM : AND.w #$00FF - JSL.l HexToDec - LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17) - LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18) + JSL.l HUDHex2Digit_Long + TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,17) + TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,18) RTS ;-------------------------------------------------------------------------------- AltBufferTable: - LDA.b #$02 : STA.w BG34NBA ; Have Screen 3 use same tile area as screens 1 -.noScreen3Change - REP #$20 - LDX.w #$0400 ; 14 rows with 64 bytes (30 tiles * 2 + 4 byte header) - ;fill with the blank character - LDA.w #$0188 - - - STA.w GFXStripes, X - DEX : DEX : BNE - + LDA.b #$02 : STA.w BG34NBA ; Have Screen 3 use same tile area as screens 1 + .noScreen3Change + REP #$20 + LDX.w #$0400 ; 14 rows with 64 bytes (30 tiles * 2 + 4 byte header) + ;fill with the blank character + LDA.w #$0188 + - + STA.w GFXStripes, X + DEX : DEX : BNE - - ; set vram offsets - LDA.w #$0161 : STA.w GFXStripes+$02 ;file 1 top row - LDA.w #$2161 : STA.w GFXStripes+$42 ;file 1 bottom row + ; set vram offsets + LDA.w #$0161 : STA.w GFXStripes+$02 ;file 1 top row + LDA.w #$2161 : STA.w GFXStripes+$42 ;file 1 bottom row - LDA.w #$4161 : STA.w GFXStripes+$82 ;gap row top - LDA.w #$6161 : STA.w GFXStripes+$C2 ;gap row bottom + LDA.w #$4161 : STA.w GFXStripes+$82 ;gap row top + LDA.w #$6161 : STA.w GFXStripes+$C2 ;gap row bottom - LDA.w #$8161 : STA.w GFXStripes+$0102 ;file 2 top row - LDA.w #$A161 : STA.w GFXStripes+$0142 ;file 2 bottom row + LDA.w #$8161 : STA.w GFXStripes+$0102 ;file 2 top row + LDA.w #$A161 : STA.w GFXStripes+$0142 ;file 2 bottom row - LDA.w #$C161 : STA.w GFXStripes+$0182 ;gap row top - LDA.w #$E161 : STA.w GFXStripes+$01C2 ;gap row bottom + LDA.w #$C161 : STA.w GFXStripes+$0182 ;gap row top + LDA.w #$E161 : STA.w GFXStripes+$01C2 ;gap row bottom - LDA.w #$0162 : STA.w GFXStripes+$0202 ;file 3 top row - LDA.w #$2162 : STA.w GFXStripes+$0242 ;file 3 bottom row + LDA.w #$0162 : STA.w GFXStripes+$0202 ;file 3 top row + LDA.w #$2162 : STA.w GFXStripes+$0242 ;file 3 bottom row - LDA.w #$4162 : STA.w GFXStripes+$0282 ;extra gap row top - LDA.w #$6162 : STA.w GFXStripes+$02C2 ;extra gap row bottom + LDA.w #$4162 : STA.w GFXStripes+$0282 ;extra gap row top + LDA.w #$6162 : STA.w GFXStripes+$02C2 ;extra gap row bottom - LDA.w #$8162 : STA.w GFXStripes+$0302 ;extra gap row top - LDA.w #$A162 : STA.w GFXStripes+$0342 ;extra gap row bottom + LDA.w #$8162 : STA.w GFXStripes+$0302 ;extra gap row top + LDA.w #$A162 : STA.w GFXStripes+$0342 ;extra gap row bottom - LDA.w #$C162 : STA.w GFXStripes+$0382 ;extra gap row top - LDA.w #$E162 : STA.w GFXStripes+$03C2 ;extra gap row bottom + LDA.w #$C162 : STA.w GFXStripes+$0382 ;extra gap row top + LDA.w #$E162 : STA.w GFXStripes+$03C2 ;extra gap row bottom - ; set lengths - LDA.w #$3B00 - STA.w GFXStripes+$04 ;file 1 top row - STA.w GFXStripes+$44 ;file 1 bottom row - STA.w GFXStripes+$84 ;gap row top - STA.w GFXStripes+$C4 ;gap row bottom - STA.w GFXStripes+$0104 ;file 2 top row - STA.w GFXStripes+$0144 ;file 2 bottom row - STA.w GFXStripes+$0184 ;gap row top - STA.w GFXStripes+$01C4 ;gap row bottom - STA.w GFXStripes+$0204 ;file 3 top row - STA.w GFXStripes+$0244 ;file 3 bottom row - STA.w GFXStripes+$0284 ;extra gap row top - STA.w GFXStripes+$02C4 ;extra gap row bottom - STA.w GFXStripes+$0304 ;extra gap row top - STA.w GFXStripes+$0344 ;extra gap row bottom - STA.w GFXStripes+$0384 ;extra gap row top - STA.w GFXStripes+$03C4 ;extra gap row bottom + ; set lengths + LDA.w #$3B00 + STA.w GFXStripes+$04 ;file 1 top row + STA.w GFXStripes+$44 ;file 1 bottom row + STA.w GFXStripes+$84 ;gap row top + STA.w GFXStripes+$C4 ;gap row bottom + STA.w GFXStripes+$0104 ;file 2 top row + STA.w GFXStripes+$0144 ;file 2 bottom row + STA.w GFXStripes+$0184 ;gap row top + STA.w GFXStripes+$01C4 ;gap row bottom + STA.w GFXStripes+$0204 ;file 3 top row + STA.w GFXStripes+$0244 ;file 3 bottom row + STA.w GFXStripes+$0284 ;extra gap row top + STA.w GFXStripes+$02C4 ;extra gap row bottom + STA.w GFXStripes+$0304 ;extra gap row top + STA.w GFXStripes+$0344 ;extra gap row bottom + STA.w GFXStripes+$0384 ;extra gap row top + STA.w GFXStripes+$03C4 ;extra gap row bottom - ; Set last packet marker - LDA.w #$00FF : STA.w GFXStripes+$0402 + ; Set last packet marker + LDA.w #$00FF : STA.w GFXStripes+$0402 - ; Draw Unlock option if applicable - LDA.b GameMode : AND.w #$00FF : CMP.w #$0001 : BNE + - LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE + - PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP - AND.w #$00FF : BNE + - LDA.w #!FSTILE_U_TOP : %fs_draw8x16(14,5) - LDA.w #!FSTILE_N_TOP : %fs_draw8x16(14,6) - LDA.w #!FSTILE_L_TOP : %fs_draw8x16(14,7) - LDA.w #!FSTILE_O_TOP : %fs_draw8x16(14,8) - LDA.w #!FSTILE_C_TOP : %fs_draw8x16(14,9) - LDA.w #!FSTILE_K_TOP : %fs_draw8x16(14,10) - + - SEP #$20 + ; Draw Unlock option if applicable + LDA.b GameMode : AND.w #$00FF : CMP.w #$0001 : BNE + + LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE + + PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP + AND.w #$00FF : BNE + + LDA.w #!FSTILE_U_TOP : %fs_draw8x16(14,5) + LDA.w #!FSTILE_N_TOP : %fs_draw8x16(14,6) + LDA.w #!FSTILE_L_TOP : %fs_draw8x16(14,7) + LDA.w #!FSTILE_O_TOP : %fs_draw8x16(14,8) + LDA.w #!FSTILE_C_TOP : %fs_draw8x16(14,9) + LDA.w #!FSTILE_K_TOP : %fs_draw8x16(14,10) + + + SEP #$20 RTL ;-------------------------------------------------------------------------------- @@ -759,31 +765,31 @@ AltBufferTable_credits: JSL AltBufferTable_noScreen3Change REP #$20 - LDA.w #$6168 : STA.w GFXStripes+$02 ;file 1 top row - LDA.w #$8168 : STA.w GFXStripes+$42 ;file 1 bottom row + LDA.w #$6168 : STA.w GFXStripes+$02 ;file 1 top row + LDA.w #$8168 : STA.w GFXStripes+$42 ;file 1 bottom row - LDA.w #$A168 : STA.w GFXStripes+$82 ;gap row top - LDA.w #$C168 : STA.w GFXStripes+$C2 ;gap row bottom + LDA.w #$A168 : STA.w GFXStripes+$82 ;gap row top + LDA.w #$C168 : STA.w GFXStripes+$C2 ;gap row bottom - LDA.w #$E168 : STA.w GFXStripes+$0102 ;file 2 top row - LDA.w #$0169 : STA.w GFXStripes+$0142 ;file 2 bottom row + LDA.w #$E168 : STA.w GFXStripes+$0102 ;file 2 top row + LDA.w #$0169 : STA.w GFXStripes+$0142 ;file 2 bottom row - LDA.w #$2169 : STA.w GFXStripes+$0182 ;gap row top - LDA.w #$4169 : STA.w GFXStripes+$01c2 ;gap row bottom + LDA.w #$2169 : STA.w GFXStripes+$0182 ;gap row top + LDA.w #$4169 : STA.w GFXStripes+$01c2 ;gap row bottom - LDA.w #$6169 : STA.w GFXStripes+$0202 ;file 3 top row - LDA.w #$8169 : STA.w GFXStripes+$0242 ;file 3 bottom row + LDA.w #$6169 : STA.w GFXStripes+$0202 ;file 3 top row + LDA.w #$8169 : STA.w GFXStripes+$0242 ;file 3 bottom row - LDA.w #$A169 : STA.w GFXStripes+$0282 ;extra gap row top - LDA.w #$C169 : STA.w GFXStripes+$02C2 ;extra gap row bottom + LDA.w #$A169 : STA.w GFXStripes+$0282 ;extra gap row top + LDA.w #$C169 : STA.w GFXStripes+$02C2 ;extra gap row bottom - LDA.w #$E169 : STA.w GFXStripes+$0302 ;extra gap row top - LDA.w #$016A : STA.w GFXStripes+$0342 ;extra gap row bottom + LDA.w #$E169 : STA.w GFXStripes+$0302 ;extra gap row top + LDA.w #$016A : STA.w GFXStripes+$0342 ;extra gap row bottom - LDA.w #$216A : STA.w GFXStripes+$0382 ;extra gap row top - LDA.w #$416A : STA.w GFXStripes+$03C2 ;extra gap row bottom + LDA.w #$216A : STA.w GFXStripes+$0382 ;extra gap row top + LDA.w #$416A : STA.w GFXStripes+$03C2 ;extra gap row bottom - SEP #$20 + SEP #$20 RTL ;-------------------------------------------------------------------------------- macro LayoutPriority(address) @@ -813,44 +819,61 @@ RTL ;-------------------------------------------------------------------------------- LoadFullItemTiles: - PHA : PHX - LDA.w DMAP0 : PHA ; preserve DMA parameters - LDA.w BBAD0 : PHA ; preserve DMA parameters - LDA.w A1T0L : PHA ; preserve DMA parameters - LDA.w A1T0H : PHA ; preserve DMA parameters - LDA.w A1B0 : PHA ; preserve DMA parameters - LDA.w DAS0L : PHA ; preserve DMA parameters - LDA.w DAS0H : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - LDA.b #$80 : STA.w VMAIN ; write read increment on $2119 - LDA.b #$01 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode - LDA.b #$18 : STA.w BBAD0 ; set bus B destination to VRAM register - - LDA.b #$00 : STA.w VMADDL ; write VRAM destination address - LDA.b #$30 : STA.w VMADDH ; write VRAM destination address - - LDA.b #$31 : STA.w A1B0 ; set bus A source bank - LDA.b #FileSelectNewGraphics : STA.w A1T0L ; set bus A source address to ROM - LDA.b #FileSelectNewGraphics>>8 : STA.w A1T0H ; set bus A source address to ROM - - LDA.w INIDISP : PHA : LDA.b #$80 : STA.w INIDISP ; save screen state & turn screen off - - STZ.w DAS0L : LDA.b #$10 : STA.w DAS0H ; set transfer size to 0x1000 - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - PLA : STA.w INIDISP ; put screen back however it was before - ;-------------------------------------------------------------------------------- - PLA : STA.w DAS0H ; restore DMA parameters - PLA : STA.w DAS0L ; restore DMA parameters - PLA : STA.w A1B0 ; restore DMA parameters - PLA : STA.w A1T0H ; restore DMA parameters - PLA : STA.w A1T0L ; restore DMA parameters - PLA : STA.w BBAD0 ; restore DMA parameters - PLA : STA.w DMAP0 ; restore DMA parameters - PLX : PLA + LDA.b #$80 : STA.w VMAIN + LDA.b #$01 : STA.w DMAP0 + LDA.b #$18 : STA.w BBAD0 + LDX.w #$3200 : STX.w VMADDL + LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0 + LDX.w #FileSelectNewGraphics : STX.w A1T0L + LDX.w #$0C00 : STX.w DAS0L + LDA.b #$01 : STA.w MDMAEN RTL ;-------------------------------------------------------------------------------- +; z colon @ +; length $340 +; target vram $6C00 +; NewFont+$400 +LoadLowerCaseLettersSymbols: + LDA.b #$80 : STA.w VMAIN + LDA.b #$01 : STA.w DMAP0 + LDA.b #$18 : STA.w BBAD0 + ; Lower case letters + LDA.b #NewFont>>16 : STA.w A1B0 + LDX.w #NewFont+$400 : STX.w A1T0L + LDX.w #$0400 : STX.w DAS0L + LDX.w #$2D00 : STX.w VMADDL + LDA.b #$01 : STA.w MDMAEN + + ; : @ # + LDA.b #NewFont>>16 : STA.w A1B0 + LDX.w #NewFont+$A80 : STX.w A1T0L + LDA.b #NewFont>>16 : STA.w A1B1 + LDX.w #NewFont+$B80 : STX.w A1T1L + LDX.w #$0030 : STX.w DAS0L : STX.w DAS1L + + LDX.w #$2E50 : STX.w VMADDL + LDA.b #$01 : STA.w MDMAEN + LDX.w #$2ED0 : STX.w VMADDL + LDA.b #$02 : STA.w MDMAEN +RTL +;-------------------------------------------------------------------------------- +LoadFileSelectVanillaItems: + REP #$10 + LDA.b #$80 : STA.w VMAIN + LDA.b #$01 : STA.w DMAP0 + LDA.b #$18 : STA.w BBAD0 + + ; Lower case letters + LDA.b #DecompBuffer2>>16 : STA.w A1B0 + LDX.w #DecompBuffer2 : STX.w A1T0L + LDX.w #$0600 : STX.w DAS0L + LDX.w #$2F00 : STX.w VMADDL + LDA.b #$01 : STA.w MDMAEN + + SEP #$10 +RTL +;-------------------------------------------------------------------------------- SetFileSelectPalette: LDA.b GameMode : CMP.b #$04 : BNE + ; load the vanilla file select screen BG3 palette for naming screen @@ -894,7 +917,7 @@ DrawPlayerFile_credits: LDA.l EquipmentSRAM+$2C : AND.w #$00FF : LSR #3 : STA.b Scrap02 %fs_LDY_screenpos(0,20) - LDA.w #$028F|!FS_COLOR_RED + LDA.w #$02CF|!FS_COLOR_RED LDX.w #$000A .nextHeart @@ -964,20 +987,20 @@ JML FSSelectFile_continue JML FSSelectFile_return ;-------------------------------------------------------------------------------- MaybeForceFileName: - LDA.l ForceFileName : BEQ + - REP #$20 - LDX.b #$FE - - - INX : INX - LDA.l StaticFileName, X : STA.l ExtendedFileNameSRAM, X - CPX.b #$16 : BEQ .done - CPX.b #$08 : BCS - - STA.l FileNameVanillaSRAM, X - BRA - - .done - SEP #$20 - JML.l InitializeSaveFile + LDA.l ForceFileName : BEQ + + REP #$20 + LDX.b #$FE + - + INX : INX + LDA.l StaticFileName, X : STA.l ExtendedFileNameSRAM, X + CPX.b #$16 : BEQ .done + CPX.b #$08 : BCS - + STA.l FileNameVanillaSRAM, X + BRA - + .done + SEP #$20 + JML.l InitializeSaveFile - + + + JML.l NameFile_MakeScreenVisible ;-------------------------------------------------------------------------------- diff --git a/flipperkill.asm b/flipperkill.asm index e32b5a5..d321c97 100644 --- a/flipperkill.asm +++ b/flipperkill.asm @@ -4,10 +4,10 @@ ; Written over and used by OnEnterWater hook. UnequipCapeQuiet: - LDA.b #$20 : STA.w PoofTimer - STZ.w NoDamage - STZ.b CapeOn - STZ.w LinkZap + LDA.b #$20 : STA.w PoofTimer + STZ.w NoDamage + STZ.b CapeOn + STZ.w LinkZap RTL protectff: @@ -43,7 +43,7 @@ protectff: BMI .special_overworld AND.b #$3F - CMP.l $02A4E3,X + CMP.l $82A4E3,X BEQ ++ .protect diff --git a/flute.asm b/flute.asm index 46b171e..f3cb71f 100644 --- a/flute.asm +++ b/flute.asm @@ -5,9 +5,6 @@ SpawnHauntedGroveItem: LDA.b OverworldIndex : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove LDA.b IndoorsFlag : BEQ + : RTL : + ; Skip if indoors - %GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues) - JSL.l PrepDynamicTile - LDA.b #$EB STA.l MiniGameTime JSL Sprite_SpawnDynamically diff --git a/framehook.asm b/framehook.asm index dc7751c..d52c636 100644 --- a/framehook.asm +++ b/framehook.asm @@ -2,7 +2,7 @@ ; Frame Hook ;-------------------------------------------------------------------------------- FrameHookAction: - JSL $0080B5 ; Module_MainRouting + JSL $8080B5 ; Module_MainRouting JSL CheckMusicLoadRequest PHP : REP #$30 : PHA SEP #$20 @@ -35,7 +35,31 @@ PostNMIHookAction: .return STZ.w NMIAux ; zero bank byte of NMI hook pointer + + JSR.w TransferItemGFX LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on JML.l PostNMIHookReturn ;-------------------------------------------------------------------------------- +TransferItemGFX: +; Only used for shops now but could be used for anything. We should look at how door rando does this +; and try to unify one approach. + REP #$30 + LDX.w ItemStackPtr : BEQ .done + TXA : BIT #$0040 : BNE .fail ; Crash if we have more than 16 queued (should never happen.) + DEX #2 + - + LDA.l ItemGFXStack,X : STA.w ItemGFXPtr + LDA.l ItemTargetStack,X : STA.w ItemGFXTarget + PHX + JSL.l TransferItemToVRAM + REP #$10 + PLX + DEX #2 + BPL - + + STZ.w ItemStackPtr + .done + SEP #$30 +RTS + .fail + BRK #$00 diff --git a/glitched.asm b/glitched.asm index 82eaf42..c0aae35 100644 --- a/glitched.asm +++ b/glitched.asm @@ -70,7 +70,7 @@ GetAgahnimLightning: ;1 = Forbid AllowJoypadInput: LDA.l PermitSQFromBosses : BEQ .fullCheck - LDA.w ItemsTaken : AND.b #$80 : BEQ .fullCheck + LDA.w RoomItemsTaken : AND.b #$80 : BEQ .fullCheck LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check RTL .fullCheck diff --git a/goalitem.asm b/goalitem.asm index 50f62cd..dc0c7af 100644 --- a/goalitem.asm +++ b/goalitem.asm @@ -15,7 +15,7 @@ RTL ;Carry set = ganon vulnerable CheckGanonVulnerability: PHX - LDA.l InvincibleGanon + LDA.l GanonVulnerableMode ASL TAX @@ -39,6 +39,8 @@ CheckGanonVulnerability: dw .crystals_and_bosses dw .bosses_only dw .all_dungeons_no_agahnim + dw .all_items + dw .completionist ; 00 = always vulnerable .vulnerable @@ -92,80 +94,114 @@ CheckGanonVulnerability: .bosses_only JMP CheckForCrystalBossesDefeated +; 09 = 100% item collection rate +.all_items + REP #$20 + LDA.l TotalItemCounter : CMP.l TotalItemCount + SEP #$20 + RTS + +; 0A = 100% item collection rate and all dungeons +.completionist + REP #$20 + LDA.l TotalItemCounter : CMP.l TotalItemCount + SEP #$20 + BCC .fail + BRA .all_dungeons + ;-------------------------------------------------------------------------------- GetRequiredCrystalsForTower: BEQ + : JSL.l BreakTowerSeal_ExecuteSparkles : + ; thing we wrote over - LDA.l NumberOfCrystalsRequiredForTower : CMP.b #$00 : BNE + : JML.l Ancilla_BreakTowerSeal_stop_spawning_sparkles : + - LDA.l NumberOfCrystalsRequiredForTower : CMP.b #$01 : BNE + : JML.l Ancilla_BreakTowerSeal_draw_single_crystal : + - LDA.l NumberOfCrystalsRequiredForTower : DEC #2 : TAX + LDA.l GanonsTowerOpenTarget : CMP.b #$00 : BNE + : JML.l Ancilla_BreakTowerSeal_stop_spawning_sparkles : + + LDA.l GanonsTowerOpenTarget : CMP.b #$01 : BNE + : JML.l Ancilla_BreakTowerSeal_draw_single_crystal : + + LDA.l GanonsTowerOpenTarget : DEC #2 : TAX JML.l GetRequiredCrystalsForTower_continue ;-------------------------------------------------------------------------------- GetRequiredCrystalsInX: - LDA.l NumberOfCrystalsRequiredForTower : CMP.b #$00 : BNE + + LDA.l GanonsTowerOpenTarget : CMP.b #$00 : BNE + TAX RTL + TXA -- CMP.l NumberOfCrystalsRequiredForTower : BCC + - SBC.l NumberOfCrystalsRequiredForTower ; carry guaranteed set +- CMP.l GanonsTowerOpenTarget : BCC + + SBC.l GanonsTowerOpenTarget ; carry guaranteed set BRA - - + INC : CMP.l NumberOfCrystalsRequiredForTower : BNE + + + INC : CMP.l GanonsTowerOpenTarget : BNE + LDA.b #$08 + : DEC : TAX RTL ;-------------------------------------------------------------------------------- CheckEnoughCrystalsForGanon: + REP #$20 LDA.l CrystalCounter - CMP.l NumberOfCrystalsRequiredForGanon + CMP.l GanonVulnerableTarget + SEP #$20 RTL ;-------------------------------------------------------------------------------- -CheckEnoughCrystalsForTower: - LDA.l CrystalCounter - CMP.l NumberOfCrystalsRequiredForTower +CheckTowerOpen: + LDA.l GanonsTowerOpenMode : ASL : TAX + JSR.w (.tower_open_modes,X) RTL + .tower_open_modes + dw .vanilla + dw .arbitrary_cmp + + .vanilla + LDA.l CrystalsField + AND.b #$7F : CMP.b #$7F + RTS + + .arbitrary_cmp + REP #$30 + LDA.l GanonsTowerOpenAddress : TAX + LDA.l $7E0000,X + CMP.l GanonsTowerOpenTarget + SEP #$30 + RTS ;--------------------------------------------------------------------------------------------------- CheckAgaForPed: - LDA.l InvincibleGanon - CMP.b #$06 : BNE .vanilla + REP #$20 + LDA.l GanonVulnerableMode + CMP.w #$0006 : BNE .vanilla .light_speed - LDA.l OverworldEventDataWRAM+$80 ; check ped flag - AND.b #$40 - BEQ .force_blue_ball + SEP #$20 + LDA.l OverworldEventDataWRAM+$80 ; check ped flag + AND.b #$40 + BEQ .force_blue_ball .vanilla ; run vanilla check for phase - LDA.w SpriteAux, X - CMP.b #$02 - RTL + SEP #$20 + LDA.w SpriteAux, X + CMP.b #$02 + RTL .force_blue_ball - LDA.b #$01 : STA.w SpriteAuxTable, Y - LDA.b #$20 : STA.w SpriteTimer, Y - CLC ; skip the RNG check - RTL + LDA.b #$01 : STA.w SpriteAuxTable, Y + LDA.b #$20 : STA.w SpriteTimer, Y + CLC ; skip the RNG check + RTL ;--------------------------------------------------------------------------------------------------- KillGanon: STA.l ProgressIndicator ; vanilla game state stuff we overwrote - LDA.l InvincibleGanon + LDA.l GanonVulnerableMode CMP.b #$06 : BNE .exit .light_speed - LDA.l OverworldEventDataWRAM+$5B : ORA.b #$20 : STA.l OverworldEventDataWRAM+$5B ; pyramid hole - LDA.b #$08 : STA.l RoomDataWRAM[$00].high ; kill ganon - LDA.b #$02 : STA.l MoonPearlEquipment ; pearl but invisible in menu - + REP #$20 + LDA.w #$0019 : STA.b GameMode + SEP #$20 .exit RTL ;--------------------------------------------------------------------------------------------------- - CheckForCrystalBossesDefeated: PHB : PHX : PHY @@ -203,8 +239,36 @@ CheckForCrystalBossesDefeated: SEP #$30 PLY : PLX : PLB - LDA.b Scrap00 : CMP.l NumberOfCrystalsRequiredForGanon + LDA.b Scrap00 : CMP.l GanonVulnerableTarget RTS +;--------------------------------------------------------------------------------------------------- +CheckPedestalPull: +; Out: c - Successful ped pull if set, do nothing if unset. + PHX + LDA.l PedCheckMode : ASL : TAX + JSR.w (.pedestal_modes,X) + PLX +RTL + .pedestal_modes + dw .vanilla + dw .arbitrary_cmp + + .vanilla + LDA.l PendantsField + AND.b #$07 : CMP.b #$07 : BNE ..nopull + SEC + RTS + ..nopull + CLC + RTS + + .arbitrary_cmp + REP #$30 + LDA.l PedPullAddress : TAX + LDA.l $7E0000,X + CMP.l PedPullTarget + SEP #$30 + RTS diff --git a/hashalphabet.asm b/hashalphabet.asm index 5e4c4e4..dd22373 100644 --- a/hashalphabet.asm +++ b/hashalphabet.asm @@ -69,110 +69,88 @@ RTL ; DMAAlphabetTilemap: ;-------------------------------------------------------------------------------- DMAAlphabetTilemap: - PHA : PHX - LDA.w DMAP0 : PHA ; preserve DMA parameters - LDA.w BBAD0 : PHA ; preserve DMA parameters - LDA.w A1T0L : PHA ; preserve DMA parameters - LDA.w A1T0H : PHA ; preserve DMA parameters - LDA.w A1B0 : PHA ; preserve DMA parameters - LDA.w DAS0L : PHA ; preserve DMA parameters - LDA.w DAS0H : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - LDA.b #$01 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode - LDA.b #$80 : STA.w VMAIN ; write read increment on $2119 - LDA.b #$18 : STA.w BBAD0 ; set bus B destination to VRAM register - - LDA.b #$60 : STA.w VMADDL ; write VRAM destination address - STA.w VMADDH ; write VRAM destination address - - LDA.b #BigRAM : STA.w A1T0L ; set bus A source address to WRAM - LDA.b #BigRAM>>8 : STA.w A1T0H ; set bus A source address to WRAM - LDA.b #BigRAM>>16 : STA.w A1B0 ; set bus A source bank - - LDA.b #$80 : STA.w DAS0L : STZ.w DAS0H ; set transfer size to 0x40 - - LDA.w INIDISP : PHA : LDA.b #$80 : STA.w INIDISP ; save screen state & turn screen off - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - PLA : STA.w INIDISP ; put screen back however it was before - ;-------------------------------------------------------------------------------- - PLA : STA.w DAS0H ; restore DMA parameters - PLA : STA.w DAS0L ; restore DMA parameters - PLA : STA.w A1B0 ; restore DMA parameters - PLA : STA.w A1T0H ; restore DMA parameters - PLA : STA.w A1T0L ; restore DMA parameters - PLA : STA.w BBAD0 ; restore DMA parameters - PLA : STA.w DMAP0 ; restore DMA parameters - PLX : PLA + PHA : PHX + REP #$10 + LDA.b #$01 : STA.w DMAP0 + LDA.b #$80 : STA.w VMAIN + LDA.b #$18 : STA.w BBAD0 + LDX.w #$6060 : STX.w VMADDL + LDA.b #BigRAM>>16 : STA.w A1B0 + LDX.w #BigRAM : STX.w A1T0L + LDX.w #$0080 : STX.w DAS0L + LDA.b #$01 : STA.w MDMAEN + SEP #$10 + PLX : PLA RTS ;-------------------------------------------------------------------------------- HashAlphabetTilesWithBlank: ;BLANK -dw #$0186|!FS_COLOR_BW, #$0186|!FS_COLOR_BW, #$0196|!FS_COLOR_BW, #$0196|!FS_COLOR_BW +dw #$0188, #$0188, #$0188, #$0188 HashAlphabetTiles: ;BOW -dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW, #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW +dw #$0241|!FS_COLOR_YELLOW, #$0242|!FS_COLOR_YELLOW, #$0251|!FS_COLOR_YELLOW, #$0252|!FS_COLOR_YELLOW ;BOOM -dw #$0205|!FS_COLOR_BLUE, #$0206|!FS_COLOR_BLUE, #$0200|!FS_COLOR_BW, #$0216|!FS_COLOR_BLUE +dw #$0245|!FS_COLOR_BLUE, #$0246|!FS_COLOR_BLUE, #$0240|!FS_COLOR_BW, #$0256|!FS_COLOR_BLUE ;HOOK -dw #$0200|!FS_COLOR_RED, #$0215|!FS_COLOR_RED, #$0230|!FS_COLOR_RED, #$0200|!FS_COLOR_BW +dw #$0240|!FS_COLOR_RED, #$0255|!FS_COLOR_RED, #$0270|!FS_COLOR_RED, #$0240|!FS_COLOR_BW ;BOMB -dw #$020C|!FS_COLOR_BLUE, #$020D|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE, #$021C|!FS_COLOR_BLUE|!FS_HFLIP +dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE|!FS_HFLIP ;SHROOM -dw #$0262|!FS_COLOR_RED, #$0263|!FS_COLOR_RED, #$0272|!FS_COLOR_RED, #$0273|!FS_COLOR_RED +dw #$02A2|!FS_COLOR_RED, #$02A3|!FS_COLOR_RED, #$02B2|!FS_COLOR_RED, #$02B3|!FS_COLOR_RED ;POWDER -dw #$020A|!FS_COLOR_BROWN, #$020B|!FS_COLOR_BROWN, #$021A|!FS_COLOR_BROWN, #$021B|!FS_COLOR_BROWN +dw #$024A|!FS_COLOR_BROWN, #$024B|!FS_COLOR_BROWN, #$025A|!FS_COLOR_BROWN, #$025B|!FS_COLOR_BROWN ;ROD -dw #$0220|!FS_COLOR_BLUE, #$0221|!FS_COLOR_BLUE, #$0230|!FS_COLOR_BLUE, #$0231|!FS_COLOR_BLUE +dw #$0260|!FS_COLOR_BLUE, #$0261|!FS_COLOR_BLUE, #$0270|!FS_COLOR_BLUE, #$0271|!FS_COLOR_BLUE ;PENDANT -dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN, #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN +dw #$02C5|!FS_COLOR_GREEN, #$02C6|!FS_COLOR_GREEN, #$02D5|!FS_COLOR_GREEN, #$02D6|!FS_COLOR_GREEN ;BOMBOS -dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP +dw #$0247|!FS_COLOR_YELLOW, #$0257|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0257|!FS_COLOR_YELLOW, #$0247|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;ETHER -dw #$0208|!FS_COLOR_YELLOW, #$0218|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0218|!FS_COLOR_YELLOW, #$0208|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP +dw #$0248|!FS_COLOR_YELLOW, #$0258|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0258|!FS_COLOR_YELLOW, #$0248|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;QUAKE -dw #$0209|!FS_COLOR_YELLOW, #$0219|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0219|!FS_COLOR_YELLOW, #$0209|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP +dw #$0249|!FS_COLOR_YELLOW, #$0259|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP, #$0259|!FS_COLOR_YELLOW, #$0249|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;LAMP -dw #$022C|!FS_COLOR_RED, #$022C|!FS_COLOR_RED|!FS_HFLIP, #$023C|!FS_COLOR_RED, #$023D|!FS_COLOR_RED +dw #$026C|!FS_COLOR_RED, #$026C|!FS_COLOR_RED|!FS_HFLIP, #$027C|!FS_COLOR_RED, #$027D|!FS_COLOR_RED ;HAMMER -dw #$0222|!FS_COLOR_BROWN, #$0223|!FS_COLOR_BROWN, #$0232|!FS_COLOR_BROWN, #$0233|!FS_COLOR_BROWN +dw #$0262|!FS_COLOR_BROWN, #$0263|!FS_COLOR_BROWN, #$0272|!FS_COLOR_BROWN, #$0273|!FS_COLOR_BROWN ;SHOVEL -dw #$0224|!FS_COLOR_BROWN, #$0225|!FS_COLOR_BROWN, #$0234|!FS_COLOR_BROWN, #$0235|!FS_COLOR_BROWN +dw #$0264|!FS_COLOR_BROWN, #$0265|!FS_COLOR_BROWN, #$0274|!FS_COLOR_BROWN, #$0275|!FS_COLOR_BROWN ;FLUTE -dw #$0226|!FS_COLOR_BLUE, #$0227|!FS_COLOR_BLUE, #$0236|!FS_COLOR_BLUE, #$0237|!FS_COLOR_BLUE +dw #$0266|!FS_COLOR_BLUE, #$0267|!FS_COLOR_BLUE, #$0276|!FS_COLOR_BLUE, #$0277|!FS_COLOR_BLUE ;NET -dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW, #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW +dw #$0268|!FS_COLOR_YELLOW, #$0269|!FS_COLOR_YELLOW, #$0278|!FS_COLOR_YELLOW, #$0279|!FS_COLOR_YELLOW ;BOOK -dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN, #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN +dw #$026A|!FS_COLOR_GREEN, #$026B|!FS_COLOR_GREEN, #$027A|!FS_COLOR_GREEN, #$027B|!FS_COLOR_GREEN ;BOTTLE -dw #$0240|!FS_COLOR_BW, #$0241|!FS_COLOR_BW, #$0250|!FS_COLOR_BW, #$0251|!FS_COLOR_BW +dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0290|!FS_COLOR_BW, #$0291|!FS_COLOR_BW ;POTION -dw #$0242|!FS_COLOR_GREEN, #$0242|!FS_COLOR_GREEN|!FS_HFLIP, #$0252|!FS_COLOR_GREEN, #$0253|!FS_COLOR_GREEN +dw #$0282|!FS_COLOR_GREEN, #$0282|!FS_COLOR_GREEN|!FS_HFLIP, #$0292|!FS_COLOR_GREEN, #$0293|!FS_COLOR_GREEN ;CANE -dw #$021D|!FS_COLOR_RED, #$021E|!FS_COLOR_RED, #$022D|!FS_COLOR_RED, #$022E|!FS_COLOR_RED +dw #$025D|!FS_COLOR_RED, #$025E|!FS_COLOR_RED, #$026D|!FS_COLOR_RED, #$026E|!FS_COLOR_RED ;CAPE -dw #$0248|!FS_COLOR_RED, #$0249|!FS_COLOR_RED, #$0258|!FS_COLOR_RED, #$0259|!FS_COLOR_RED +dw #$0288|!FS_COLOR_RED, #$0289|!FS_COLOR_RED, #$0298|!FS_COLOR_RED, #$0299|!FS_COLOR_RED ;MIRROR -dw #$024A|!FS_COLOR_BLUE, #$024B|!FS_COLOR_BLUE, #$025A|!FS_COLOR_BLUE, #$025B|!FS_COLOR_BLUE +dw #$028A|!FS_COLOR_BLUE, #$028B|!FS_COLOR_BLUE, #$029A|!FS_COLOR_BLUE, #$029B|!FS_COLOR_BLUE ;BOOTS -dw #$024C|!FS_COLOR_BOOTS, #$024D|!FS_COLOR_BOOTS, #$025C|!FS_COLOR_BOOTS, #$025D|!FS_COLOR_BOOTS +dw #$028C|!FS_COLOR_BOOTS, #$028D|!FS_COLOR_BOOTS, #$029C|!FS_COLOR_BOOTS, #$029D|!FS_COLOR_BOOTS ;GLOVES -dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN, #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN +dw #$028E|!FS_COLOR_BROWN, #$028F|!FS_COLOR_BROWN, #$029E|!FS_COLOR_BROWN, #$029F|!FS_COLOR_BROWN ;FLIPPERS -dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE, #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE +dw #$024E|!FS_COLOR_BLUE, #$024F|!FS_COLOR_BLUE, #$025F|!FS_COLOR_BLUE|!FS_HFLIP, #$025F|!FS_COLOR_BLUE ;PEARL -dw #$0264|!FS_COLOR_RED, #$0265|!FS_COLOR_RED, #$0274|!FS_COLOR_RED, #$0275|!FS_COLOR_RED +dw #$02A4|!FS_COLOR_RED, #$02A5|!FS_COLOR_RED, #$02B4|!FS_COLOR_RED, #$02B5|!FS_COLOR_RED ;SHIELD -dw #$026D|!FS_COLOR_YELLOW, #$026E|!FS_COLOR_YELLOW, #$027D|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW +dw #$02AD|!FS_COLOR_YELLOW, #$02AE|!FS_COLOR_YELLOW, #$02BD|!FS_COLOR_YELLOW, #$02BE|!FS_COLOR_YELLOW ;TUNIC -dw #$026F|!FS_COLOR_GREEN, #$026F|!FS_COLOR_GREEN|!FS_HFLIP, #$027F|!FS_COLOR_GREEN, #$027F|!FS_COLOR_GREEN|!FS_HFLIP +dw #$02AF|!FS_COLOR_GREEN, #$02AF|!FS_COLOR_GREEN|!FS_HFLIP, #$02BF|!FS_COLOR_GREEN, #$02BF|!FS_COLOR_GREEN|!FS_HFLIP ;HEART -dw #$0281|!FS_COLOR_RED, #$0281|!FS_COLOR_RED|!FS_HFLIP, #$0291|!FS_COLOR_RED, #$0291|!FS_COLOR_RED|!FS_HFLIP +dw #$02C1|!FS_COLOR_RED, #$02C1|!FS_COLOR_RED|!FS_HFLIP, #$02D1|!FS_COLOR_RED, #$02D1|!FS_COLOR_RED|!FS_HFLIP ;MAP -dw #$0282|!FS_COLOR_YELLOW, #$0283|!FS_COLOR_YELLOW, #$0292|!FS_COLOR_YELLOW, #$0293|!FS_COLOR_YELLOW +dw #$02C2|!FS_COLOR_YELLOW, #$02C3|!FS_COLOR_YELLOW, #$02D2|!FS_COLOR_YELLOW, #$02D3|!FS_COLOR_YELLOW ;COMPASS -dw #$0284|!FS_COLOR_RED, #$0284|!FS_COLOR_RED|!FS_HFLIP, #$0294|!FS_COLOR_RED, #$0294|!FS_COLOR_RED|!FS_HFLIP +dw #$02C4|!FS_COLOR_RED, #$02C4|!FS_COLOR_RED|!FS_HFLIP, #$02D4|!FS_COLOR_RED, #$02D4|!FS_COLOR_RED|!FS_HFLIP ;KEY -dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW, #$023E|!FS_COLOR_YELLOW, #$023F|!FS_COLOR_YELLOW +dw #$026F|!FS_COLOR_YELLOW|!FS_HFLIP, #$026F|!FS_COLOR_YELLOW, #$027E|!FS_COLOR_YELLOW, #$027F|!FS_COLOR_YELLOW ;-------------------------------------------------------------------------------- FileSelect_PlayerSelectText_Top: ;db $60, $62, $00, $37 diff --git a/hashalphabethooks.asm b/hashalphabethooks.asm index f2e094a..3838653 100644 --- a/hashalphabethooks.asm +++ b/hashalphabethooks.asm @@ -55,76 +55,76 @@ !FSTILE_Y_TOP = $1D82 !FSTILE_Y_BOTTOM = $1D92 ;-------------------------------------------------------------------------------- -org $0CDE60 ; <- 65E60 +org $8CDE60 ; <- 65E60 FileSelect_CopyFile_Top: db $62, $A5, $00, $15 dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE ;-------------------------------------------------------------------------------- -org $0CDE7A ; <- 65E7A +org $8CDE7A ; <- 65E7A FileSelect_CopyFile_Bottom: db $62, $C5, $00, $15 dw !FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE,!FSTILE_SPACE ;-------------------------------------------------------------------------------- -org $0CDE94 ; <- 65E94 +org $8CDE94 ; <- 65E94 FileSelect_KillFile_Top: db $63, $25, $00, $19 dw !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE -org $0CDEB2 ; <- 65EB2 +org $8CDEB2 ; <- 65EB2 FileSelect_KillFile_Bottom: db $63, $45, $00, $19 dw !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE ;CopyFile_Header: -org $0CE228 ; <- 66228 +org $8CE228 ; <- 66228 dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_O_TOP, !FSTILE_P_TOP, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP -org $0CE24A ; <- 6624A +org $8CE24A ; <- 6624A dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_O_BOTTOM, !FSTILE_P_BOTTOM, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM ;CopyFile_Which: -org $0CE2DB ; <- 662DB +org $8CE2DB ; <- 662DB dw $0D80, $0D61, $0D62, $0D4C, $0D61, $0D86, !FSTILE_SPACE -org $0CE2ED ; <- 662ED +org $8CE2ED ; <- 662ED dw $0D90, $0D71, $0D72, $0D5C, $0D71, $0D96, !FSTILE_SPACE ;CopyFile_Where: -org $0CE39C ; <- 6639C +org $8CE39C ; <- 6639C dw $0D80, $0D61, $0D4E, $0D6B, $0D4E, $0D86, !FSTILE_SPACE -org $0CE3AE ; <- 663AE +org $8CE3AE ; <- 663AE dw $0D90, $0D71, $0D5E, $0D7B, $0D5E, $0D96, !FSTILE_SPACE ;CopyFile_Execute: -org $0CD13A ; <- 6513A +org $8CD13A ; <- 6513A dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_O_TOP, !FSTILE_SPACE, !FSTILE_P_TOP, !FSTILE_SPACE, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_SPACE -org $0CD150 ; <- 65150 +org $8CD150 ; <- 65150 dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_O_BOTTOM, !FSTILE_SPACE, !FSTILE_P_BOTTOM, !FSTILE_SPACE, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE ;CopyFile_Cancel: -org $0CE29A ; <- 6629A +org $8CE29A ; <- 6629A dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_A_TOP, !FSTILE_SPACE, !FSTILE_N_TOP, !FSTILE_SPACE, !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -org $0CE2BA ; <- 662BA +org $8CE2BA ; <- 662BA dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_A_BOTTOM, !FSTILE_SPACE, !FSTILE_N_BOTTOM, !FSTILE_SPACE, !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Header: -org $0CE002 ; <- 66002 +org $8CE002 ; <- 66002 dw !FSTILE_BRACKET_OPEN_TOP, !FSTILE_SPACE, !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_F_TOP, !FSTILE_I_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_TOP, !FSTILE_SPACE, !FSTILE_SPACE -org $0CE028 ; <- 66028 +org $8CE028 ; <- 66028 dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_F_BOTTOM, !FSTILE_I_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_BRACKET_CLOSE_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Which: -org $0CE04E ; <- 6604E +org $8CE04E ; <- 6604E dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -org $0CE084 ; <- 66084 +org $8CE084 ; <- 66084 dw !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Execute: -org $0CD328 ; <- 65328 +org $8CD328 ; <- 65328 dw !FSTILE_D_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_E_TOP, !FSTILE_T_TOP, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -org $0CD344 ; <- 65344 +org $8CD344 ; <- 65344 dw !FSTILE_D_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_T_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Cancel: -org $0CE0BA ; <- 660BA +org $8CE0BA ; <- 660BA dw !FSTILE_C_TOP, !FSTILE_A_TOP, !FSTILE_N_TOP, !FSTILE_C_TOP, !FSTILE_E_TOP, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -org $0CE0DA ; <- 660DA +org $8CE0DA ; <- 660DA dw !FSTILE_C_BOTTOM, !FSTILE_A_BOTTOM, !FSTILE_N_BOTTOM, !FSTILE_C_BOTTOM, !FSTILE_E_BOTTOM, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE diff --git a/heartpieces.asm b/heartpieces.asm index 79924b2..c54f10c 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -3,31 +3,18 @@ ;-------------------------------------------------------------------------------- HeartPieceGet: PHX : PHY - LDY.w SpriteItemType, X ; load item value into Y register - BNE + - ; if for any reason the item value is 0 reload it, just in case - JSL.l LoadHeartPieceRoomValue : TAY - + + JSL.l LoadHeartPieceRoomValue + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + TAY JSL.l MaybeMarkDigSpotCollected - .skipLoad - + CPY.b #$26 : BNE .not_heart ; don't add a 1/4 heart if it's not a heart piece + LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter + .not_heart + JSL.l $8791B3 ; Player_HaltDashAttackLong STZ.w ItemReceiptMethod ; 0 = Receiving item from an NPC or message - - CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece - LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters - BRA .giveItem - - .notHeart - .giveItem - JSL.l $0791B3 ; Player_HaltDashAttackLong JSL.l Link_ReceiveItem - CLC ; return false - JMP .done ; finished - - .unfinished_heart - SEC ; return true - .done JSL MaybeUnlockTabletAnimation PLY : PLX @@ -35,42 +22,43 @@ RTL ;-------------------------------------------------------------------------------- HeartContainerGet: PHX : PHY - JSL.l AddInventory_incrementBossSwordLong - LDY.w SpriteItemType, X ; load item value into Y register - BNE + - ; if for any reason the item value is 0 reload it, just in case + JSL.l IncrementBossSword + LDY.w SpriteID, X : BNE + JSL.l LoadHeartContainerRoomValue : TAY + - BRA HeartPieceGet_skipLoad ;-------------------------------------------------------------------------------- DrawHeartPieceGFX: - PHP - JSL.l Sprite_IsOnscreen : BCC .offscreen - - PHA : PHY - LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready - JSL.l HeartPieceSpritePrep - JMP .done ; don't draw on the init frame - - .skipInit - LDA.w SpriteItemType, X ; Retrieve stored item type - - .skipLoad - - PHA - JSL.l IsNarrowSprite : BCC + - LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X - + - PLA - - JSL.l DrawDynamicTile - JSL.l Sprite_DrawShadowLong - - .done - PLY : PLA - .offscreen - PLP + PHP + JSL.l Sprite_IsOnscreen : BCC .offscreen + PHA : PHY + LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready + JSL.l HeartPieceSpritePrep + JMP .done ; don't draw on the init frame + .skipInit + LDA.w SpriteID, X ; Retrieve stored item type + .skipLoad + PHA : PHX + TAX + LDA.l SpriteProperties_standing_width,X : BNE + + PLX + LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X + PLA + JSL.l DrawDynamicTile + LDA.b Scrap00 + CLC : ADC.b #$04 + STA.b Scrap00 + JSL.l Sprite_DrawShadowLong + BRA .done + + + PLX + PLA + JSL.l DrawDynamicTile + JSL.l Sprite_DrawShadowLong + .done + PLY : PLA + .offscreen + PLP RTL ;-------------------------------------------------------------------------------- DrawHeartContainerGFX: @@ -83,37 +71,36 @@ DrawHeartContainerGFX: BRA DrawHeartPieceGFX_done ; don't draw on the init frame .skipInit - LDA.w SpriteItemType, X ; Retrieve stored item type + LDA.w SpriteID, X ; Retrieve stored item type BRA DrawHeartPieceGFX_skipLoad ;-------------------------------------------------------------------------------- HeartContainerSound: - CPY.b #$20 : BEQ + ; Skip for Crystal - CPY.b #$37 : BEQ + ; Skip for Pendants - CPY.b #$38 : BEQ + - CPY.b #$39 : BEQ + - JSL.l CheckIfBossRoom : BCC + ; Skip if not in a boss room - LDA.b #$2E - SEC - RTL + LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ + + JSL.l CheckIfBossRoom : BCC + ; Skip if not in a boss room + LDA.b #$2E + SEC + RTL + CLC RTL ;-------------------------------------------------------------------------------- NormalItemSkipSound: - LDA.w AncillaGet, X ; thing we wrote over - - CPY.b #$20 : BEQ + ; Skip for Crystal - CPY.b #$37 : BEQ + ; Skip for Pendants - CPY.b #$38 : BEQ + - CPY.b #$39 : BEQ + - - PHA - JSL.l CheckIfBossRoom - PLA +; Out: C - skip sounds if set + JSL.l CheckIfBossRoom : BCS .boss_room + TDC + CPY #$17 : BEQ .skip + CLC RTL - + - CLC + .boss_room + LDA.w ItemReceiptMethod : CMP.b #$03 : BEQ + + .skip + SEC + RTL + + + LDA.b #$20 + .dont_skip + CLC RTL ;-------------------------------------------------------------------------------- HeartPieceSpritePrep: @@ -125,9 +112,11 @@ HeartPieceSpritePrep: LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror LDA.b #$00 : STA.l RedrawFlag - JSL.l LoadHeartPieceRoomValue ; load item type - STA.w SpriteItemType, X ; Store item type - JSL.l PrepDynamicTile + JSL.l LoadHeartPieceRoomValue + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID, X + JSL.l PrepDynamicTile_loot_resolved .skip PLA @@ -138,8 +127,10 @@ HeartContainerSpritePrep: LDA.b #$00 : STA.l RedrawFlag JSL.l LoadHeartContainerRoomValue ; load item type - STA.w SpriteItemType, X ; Store item type - JSL.l PrepDynamicTile + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID, X + JSL.l PrepDynamicTile_loot_resolved PLA RTL @@ -155,7 +146,7 @@ LoadHeartPieceRoomValue: RTL ;-------------------------------------------------------------------------------- HPItemReset: - JSL $09AD58 ; GiveRupeeGift - thing we wrote over + JSL $89AD58 ; GiveRupeeGift - thing we wrote over PHA : LDA.b #$01 : STA.l RedrawFlag : PLA RTL ;-------------------------------------------------------------------------------- @@ -220,7 +211,10 @@ LoadIndoorValue: LDA.l StandingKey_Hera JMP .done + - LDA.w #$0017 ; default to a normal hp + PHX + LDX.w CurrentSpriteSlot ; If we're on a different screen ID via glitches load the sprite + LDA.w SpriteID,X ; we can see and are interacting with + PLX .done AND.w #$00FF ; the loads are words but the values are 1-byte so we need to clear the top half of the accumulator - no guarantee it was 8-bit before PLP @@ -283,7 +277,10 @@ LoadOutdoorValue: %GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues) JMP .done + - LDA.w #$0017 ; default to a normal hp + PHX + LDX.w CurrentSpriteSlot ; If we're on a different screen ID via glitches load the sprite + LDA.w SpriteID,X ; we can see and are interacting with. + PLX .done AND.w #$00FF ; the loads are words but the values are 1-byte so we need to clear the top half of the accumulator - no guarantee it was 8-bit before PLP @@ -378,9 +375,9 @@ RTL ;#13 - Ganon's Tower - Agahnim II ;#0 - Pyramid of Power - Ganon ;-------------------------------------------------------------------------------- -;JSL $06DD40 ; DashKey_Draw -;JSL $06DBF8 ; Sprite_PrepAndDrawSingleLargeLong -;JSL $06DC00 ; Sprite_PrepAndDrawSingleSmallLong ; draw first cell correctly -;JSL $00D51B ; GetAnimatedSpriteTile -;JSL $00D52D ; GetAnimatedSpriteTile.variable +;JSL $86DD40 ; DashKey_Draw +;JSL $86DBF8 ; Sprite_PrepAndDrawSingleLargeLong +;JSL $86DC00 ; Sprite_PrepAndDrawSingleSmallLong ; draw first cell correctly +;JSL $80D51B ; GetAnimatedSpriteTile +;JSL $80D52D ; GetAnimatedSpriteTile.variable ;================================================================================ 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 360a0ed..c681b66 100644 --- a/hooks.asm +++ b/hooks.asm @@ -1,40 +1,43 @@ ;================================================================================ ; Init Hook +; this needs to be a JML, otherwise we're not using fast ROM when we return ;-------------------------------------------------------------------------------- -org $00802F ; <- 2F - Bank00.asm : 45 -JSL.l Init_Primary +org $80802F +JML Init_Primary NOP -org $0CC1AC ; <- 63 D4 00 - Bank0C.asm:8 (dl Tagalong_LoadGfx) +ReturnFromInit: + +org $8CC1AC ; <- 63 D4 00 - Bank0C.asm:8 (dl Tagalong_LoadGfx) dl Init_PostRAMClear ;-------------------------------------------------------------------------------- ;================================================================================ ; Frame Hook ;-------------------------------------------------------------------------------- -org $008056 ; <- 56 - Bank00.asm : 77 -JSL.l FrameHookAction +org $808056 ; <- 56 - Bank00.asm : 77 +JSL FrameHookAction ;-------------------------------------------------------------------------------- -org $00805D +org $80805D JML HandleOneMindController ;================================================================================ ; NMI Hook ;-------------------------------------------------------------------------------- -org $0080CC ; <- CC - Bank00.asm : 164 (PHA : PHX : PHY : PHD : PHB) -JML.l NMIHookAction -org $0080D0 ; <- D0 - Bank00.asm : 164 (PHA : PHX : PHY : PHD : PHB) -NMIHookReturn: +org $8080CC ; <- CC - Bank00.asm : 164 (PHA : PHX : PHY : PHD : PHB) +JML NMIHookAction + +NMIHookReturn = $8080D0 ;-------------------------------------------------------------------------------- -org $00821B ; <- 21B - Bank00.asm : 329 (LDA $13 : STA $2100) -JML.l PostNMIHookAction : NOP +org $80821B ; <- 21B - Bank00.asm : 329 (LDA $13 : STA $2100) +JML PostNMIHookAction : NOP PostNMIHookReturn: ;-------------------------------------------------------------------------------- ;================================================================================ ; Anti-ZSNES Hook ;-------------------------------------------------------------------------------- -org $008023 ;<- 23 - Bank00.asm : 36 (LDA.w #$01FF : TCS) -JML.l CheckZSNES +org $808023 ;<- 23 - Bank00.asm : 36 (LDA.w #$01FF : TCS) +JML CheckZSNES ReturnCheckZSNES: ;-------------------------------------------------------------------------------- @@ -44,218 +47,233 @@ ReturnCheckZSNES: ; For maximum security of vanilla behavior, I am reserving this space ; that could otherwise be considered free ROM. ;-------------------------------------------------------------------------------- -org $0089C2 +org $8089C2 dw $FFFF, $FFFF, $FFFF, $FFFF dw $FFFF, $FFFF, $FFFF, $FFFF dw $FFFF, $FFFF, $FFFF, $FFFF +;=================================================================================================== +; fastrom interrupts +;=================================================================================================== +org $00FFEA : dw NMIBounce +org $00FFEE : dw IRQBounce + +org $8098AB +NMIBounce: JML.l $8080C9 +IRQBounce: JML.l $8082D8 +warnpc $8098C0 + ;================================================================================ ; BSOD for BRK and COP opcodes ;-------------------------------------------------------------------------------- -org $00FFB7 +org $80FFB7 SoftwareInterrupt: JML Crashed -org $00FFE4 +org $80FFE4 dw SoftwareInterrupt -org $00FFE6 +org $80FFE6 dw SoftwareInterrupt -org $00FFF4 +org $80FFF4 dw SoftwareInterrupt ;================================================================================ ; Dungeon Entrance Hook (works, but not needed at the moment) ;-------------------------------------------------------------------------------- -org $02D8C7 ; <- 158C7 - Bank02.asm : 10981 (STA $7EC172) -JSL.l OnDungeonEntrance +org $82D8C7 ; <- 158C7 - Bank02.asm : 10981 (STA $7EC172) +JSL OnDungeonEntrance ;-------------------------------------------------------------------------------- ;================================================================================ ; D-Pad Invert ;-------------------------------------------------------------------------------- -org $0083D1 ; <- 3D1 - Bank00.asm (STZ.w JOYPAD - useless instruction here) -JML.l InvertDPad : SKIP 9 +org $8083D1 ; <- 3D1 - Bank00.asm (STZ.w JOYPAD - useless instruction here) +JML InvertDPad : SKIP 9 InvertDPadReturn: ;-------------------------------------------------------------------------------- ;================================================================================ ; Enable/Disable Boots ;-------------------------------------------------------------------------------- -org $079C22 ; <- 39222 - Bank07.asm : 4494 (AND $7EF379 : BEQ .cantDoAction) -JSL.l ModifyBoots +org $879C22 ; <- 39222 - Bank07.asm : 4494 (AND $7EF379 : BEQ .cantDoAction) +JSL ModifyBoots ;-------------------------------------------------------------------------------- ;================================================================================ ; Enable/Disable Bonk Tremors ;-------------------------------------------------------------------------------- -org $079202 ; 39202 <- Bank07.asm : 2859 (JSL AddDashTremor : JSL Player_ApplyRumbleToSprites) -JSL.l AddBonkTremors : NOP #4 +org $879202 ; 39202 <- Bank07.asm : 2859 (JSL AddDashTremor : JSL Player_ApplyRumbleToSprites) +JSL AddBonkTremors : NOP #4 ;-------------------------------------------------------------------------------- ;================================================================================ ; Bonk Breakable Walls ;-------------------------------------------------------------------------------- -org $01CF8E ; CF8E <- Bank01.asm : 11641 (LDA $0372 : AND.w #$00FF) -JSL.l BonkBreakableWall : NOP #2 +org $81CF8E ; CF8E <- Bank01.asm : 11641 (LDA $0372 : AND.w #$00FF) +JSL BonkBreakableWall : NOP #2 ;-------------------------------------------------------------------------------- ;================================================================================ ; Bonk Rock Pile ;-------------------------------------------------------------------------------- -org $07C196 ; 3C196 <- Bank07.asm : 10310 (LDA $02EF : AND.b #$70) -JSL.l BonkRockPile : NOP +org $87C196 ; 3C196 <- Bank07.asm : 10310 (LDA $02EF : AND.b #$70) +JSL BonkRockPile : NOP ;-------------------------------------------------------------------------------- ;================================================================================ ; Move Gravestone ;-------------------------------------------------------------------------------- -org $07C0FD ; 3C0FD <- Bank07.asm : 10197 (LDA $0372 : BNE .moveGravestone) -JML.l GravestoneHook : NOP +org $87C0FD ; 3C0FD <- Bank07.asm : 10197 (LDA $0372 : BNE .moveGravestone) +JML GravestoneHook : NOP GravestoneHook_continue: -org $07C106 +org $87C106 moveGravestone: ;-------------------------------------------------------------------------------- ;================================================================================ ; Jump Down Ledge ;-------------------------------------------------------------------------------- -org $078966 ; 38966 <- Bank07.asm : 1618 (LDA $1B : BNE .indoors : LDA.b #$02 : STA $EE) -JSL.l JumpDownLedge : NOP #4 +org $878966 ; 38966 <- Bank07.asm : 1618 (LDA $1B : BNE .indoors : LDA.b #$02 : STA $EE) +JSL JumpDownLedge : NOP #4 ;-------------------------------------------------------------------------------- ;================================================================================ ; Bonk Recoil ;-------------------------------------------------------------------------------- -org $07922C ; 3922C <- Bank07.asm : 2869 (LDA.b #$24 : STA $29) -JSL.l BonkRecoil +org $87922C ; 3922C <- Bank07.asm : 2869 (LDA.b #$24 : STA $29) +JSL BonkRecoil ;-------------------------------------------------------------------------------- ;================================================================================ ; Dungeon Exit Hook ;-------------------------------------------------------------------------------- -org $02E21B ; <- 1621B - Bank02.asm : 11211 (STA $040C) -JSL.l OnDungeonExit : NOP #2 +org $82E21B ; <- 1621B - Bank02.asm : 11211 (STA $040C) +JSL OnDungeonExit : NOP #2 ;-------------------------------------------------------------------------------- ;================================================================================ ; Quit Hook (for both types of save and quit) ;-------------------------------------------------------------------------------- -org $09F60B ; <- 4F60B - module_death.asm : 530 (LDA.b #$10 : STA $1C) -JSL.l OnQuit +org $89F60B ; <- 4F60B - module_death.asm : 530 (LDA.b #$10 : STA $1C) +JSL OnQuit ;-------------------------------------------------------------------------------- ;================================================================================ ; Title Screen ;-------------------------------------------------------------------------------- -org $0CCDA5 ; <- Bank0C.asm : 1650 (JSL Palette_SelectScreen) -JSL.l SetFileSelectPalette +org $8CCDA5 ; <- Bank0C.asm : 1650 (JSL Palette_SelectScreen) +JSL SetFileSelectPalette ;-------------------------------------------------------------------------------- -org $0CCE41 ; <- 64E41 - Bank0C.asm : 1907 (DEC $C8 : BPL .done) +org $8CCE41 ; <- 64E41 - Bank0C.asm : 1907 (DEC $C8 : BPL .done) JSL FSCursorUp : NOP #4 ; set cursor to only select first file and erase -org $0CCE50 ; <- 64E50 - Bank0C.asm : 1918 (INC $C8) +org $8CCE50 ; <- 64E50 - Bank0C.asm : 1918 (INC $C8) JSL FSCursorDown : NOP #6 ; set cursor to only select first file and erase -org $0CCE0F ; < 64E0F - Bank0C.asm : 1880 (LDX $00 : INX #2 : CPX.w #$0006 : BCC .nextFile) +org $8CCE0F ; < 64E0F - Bank0C.asm : 1880 (LDX $00 : INX #2 : CPX.w #$0006 : BCC .nextFile) NOP #9 ; don't draw the other two save files ;-------------------------------------------------------------------------------- -org $0CCE71 ; <- Bank0C.asm : 1941 (LDA.b #$F1 : STA $012C) -JML.l FSSelectFile : NOP +org $8CCE71 ; <- Bank0C.asm : 1941 (LDA.b #$F1 : STA $012C) +JML FSSelectFile : NOP FSSelectFile_continue: -org $0CCEB1 ; <- Bank0C.asm : 2001 (.return) -FSSelectFile_return: +FSSelectFile_return = $8CCEB1 ;-------------------------------------------------------------------------------- ; Replace copy file module with a fully custom module -org $008061+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile) +org $808061+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile) db Module_Password -org $00807D+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile) +org $80807D+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile) db Module_Password>>8 -org $008099+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile) +org $808099+$02 ; <- Bank00.asm : 103 (dl Module_CopyFile) db Module_Password>>16 ; Hook up password screen tilemap -org $00937a+$07 +org $80937A+$07 db Password_Tilemap -org $009383+$07 +org $809383+$07 db Password_Tilemap>>8 -org $00938c+$07 +org $80938C+$07 db Password_Tilemap>>16 ;-------------------------------------------------------------------------------- -org $0CD527 ; <- 65527 : Bank0C.asm : 2913 (LDA.w #$0004 : STA $02) [LDA.w #$0006 : STA $02] -JSL.l DrawPlayerFile : NOP ; hijack hearts draw routine to draw a full inventory +org $8CD527 ; <- 65527 : Bank0C.asm : 2913 (LDA.w #$0004 : STA $02) [LDA.w #$0006 : STA $02] +JSL DrawPlayerFile : NOP ; hijack hearts draw routine to draw a full inventory -org $0ccdd5 ; Bank0C.asm:1881 (LDX.w #$00FD) -JSL.l AltBufferTable : NOP #8 ; Selection screen -org $0cd393 ; Bank0c.asm:2674 (LDX.w #$00FD) -JSL.l AltBufferTable : NOP #8 ; Delete screen +org $8CCDD5 ; Bank0C.asm:1881 (LDX.w #$00FD) +JSL AltBufferTable : NOP #8 ; Selection screen +org $8CD393 ; Bank0c.asm:2674 (LDX.w #$00FD) +JSL AltBufferTable : NOP #8 ; Delete screen ;-------------------------------------------------------------------------------- -org $0CCCCC ;<- 64CCC - Bank0C.asm : 1628 (JSL Intro_ValidateSram) / Bank02.asm : 75 (REP #$30) +org $8CCCCC ;<- 64CCC - Bank0C.asm : 1628 (JSL Intro_ValidateSram) / Bank02.asm : 75 (REP #$30) ; Explanation: In JP 1.0 the code for Intro_ValidateSram was inline in Bank 0C -JML.l ValidateSRAM ;(Return via RTL. Original code JML'd to Intro_LoadSpriteStats which returns with RTL, but we want to skip that) -org $0CCD57 ;<- 64D57 - Bank0C.asm : +JML ValidateSRAM ;(Return via RTL. Original code JML'd to Intro_LoadSpriteStats which returns with RTL, but we want to skip that) +org $8CCD57 ;<- 64D57 - Bank0C.asm : RTL ;Just in case anybody ever removes the previous hook ;-------------------------------------------------------------------------------- -org $00E55D ; <- 0655D - Bank00.asm : 5473 (LDA.w #$7000 : STA $2116) +org $80E55D ; <- 0655D - Bank00.asm : 5473 (LDA.w #$7000 : STA $2116) LDA.w #$2000 ; Load file select screen graphics to VRAM word addres 0x2000 instead of 0x7000 ;-------------------------------------------------------------------------------- -org $00833A ; <- 0033A - Bank00.asm : 481 (LDA.w #$007F) +org $80E568 : LDX.w #$0EFF ; Load full decompressed character set into VRAM +;-------------------------------------------------------------------------------- +org $80E581 : JSL.l LoadFileSelectVanillaItems : BRA + : NOP #13 : + +;-------------------------------------------------------------------------------- +org $80833A ; <- 0033A - Bank00.asm : 481 (LDA.w #$007F) LDA.w #$0180 ; change which character is used as the blank character for the select screen ;-------------------------------------------------------------------------------- -org $0CD50C ; <- 6550C (Not in disassembly, would be in bank0c.asm if it were) Position table for Name and Hearts +org $8CD50C ; <- 6550C (Not in disassembly, would be in bank0c.asm if it were) Position table for Name and Hearts dw $00CC, $014A, $01CA ; repositioned, only the first value matters dw $002A, $0192, $0112 -org $0CD53B ; <- 6553B : Bank0c.asm : 2919 (ADD.w #$0010 : STA $102C, Y) [... : STA $1034, Y] +org $8CD53B ; <- 6553B : Bank0c.asm : 2919 (ADD.w #$0010 : STA $102C, Y) [... : STA $1034, Y] STA.w $1042, Y ; Make 2nd half of names line up properly -org $0CD540 ; <- 65540 : Bank0c.asm : 2923 (INY #2) [INY #4] +org $8CD540 ; <- 65540 : Bank0c.asm : 2923 (INY #2) [INY #4] NOP #2 ; Remove space between name characters -org $0CD571 ; <- 65571 : Bank0c.asm : 2943 (LDA $04 : ADD.w #$002A : TAY) [... : ADD.w #$0032 : ...] +org $8CD571 ; <- 65571 : Bank0c.asm : 2943 (LDA $04 : ADD.w #$002A : TAY) [... : ADD.w #$0032 : ...] ADC.w #$0040 ;make Hearts line up properly ;-------------------------------------------------------------------------------- -org $0CCC67 ; <- (Not in disassembly, would be in bank0c.asm if it were) Y position table for File select fairy +org $8CCC67 ; <- Y position table for File select fairy db $42, $00, $00, $AF, $C7 -org $0CD308 ; <- (Not in disassembly, would be in bank0c.asm if it were) Y position table for File Delete fairy +org $8CD308 ; <- Y position table for File Delete fairy db $42, $00, $00, $C7 -org $0CD57E ; <- Y position table for File select link sprite -db $3d -org $0CD6BD ; <- Y position table for Death Counts +org $8CD57E ; <- Y position table for File select link sprite +db $3D +org $8CD6BD ; <- Y position table for Death Counts db $51 ;-------------------------------------------------------------------------------- +org $8CD55F : JSL.l CheckHeartPaletteFileSelect : NOP #2 ;================================================================================ ; Name Entry Screen ;-------------------------------------------------------------------------------- -org $0CD7BE ; <- 657BE : Bank0C.asm : 3353 (STA $7003D9, X) -JSL.l WriteBlanksToPlayerName -org $0CDB11 ; <- 65B11 : Bank0C.asm : 3605 (LDA $00 : AND.w #$FFF0 : ASL A : ORA $02 : STA $7003D9, X) -JSL.l WriteCharacterToPlayerName -org $0CDCA9 ; <- 65CA9 : Bank0C.asm : 3853 (LDA $7003D9, X) -JSL.l ReadCharacterFromPlayerName -org $0CDC90 ; <- 65C90 : Bank0C.asm : 3847 (ORA $DD24, Y) [ORA $DC82, Y] -JSL.l GetCharacterPosition -org $0CDA79 ; <- 65A79 : Bank0C.asm : 3518 (LDA $0CDA13, X : STA $0800, Y) [LDA $0CD98f, X : ...] +org $8CD7BE ; <- 657BE : Bank0C.asm : 3353 (STA $7003D9, X) +JSL WriteBlanksToPlayerName +org $8CDB11 ; <- 65B11 : Bank0C.asm : 3605 (LDA $00 : AND.w #$FFF0 : ASL A : ORA $02 : STA $7003D9, X) +JSL WriteCharacterToPlayerName +org $8CDCA9 ; <- 65CA9 : Bank0C.asm : 3853 (LDA $7003D9, X) +JSL ReadCharacterFromPlayerName +org $8CDC90 ; <- 65C90 : Bank0C.asm : 3847 (ORA $DD24, Y) [ORA $DC82, Y] +JSL GetCharacterPosition +org $8CDA79 ; <- 65A79 : Bank0C.asm : 3518 (LDA $0CDA13, X : STA $0800, Y) [LDA $0CD98F, X : ...] LDA.l HeartCursorPositions, X -org $0CDAEB ; <- 65AEB : Bank0C.asm : 3571-3575,3581-3587 (...) [LDA $0B12 : AND #$03] +org $8CDAEB ; <- 65AEB : Bank0C.asm : 3571-3575,3581-3587 (...) [LDA $0B12 : AND #$03] ; JP here is different. Indicated line number implement the US version of the same functionality -JSL.l WrapCharacterPosition : NOP -org $0CD75E ; bank_0C.asm (dl NameFile_MakeScreenVisible) +JSL WrapCharacterPosition : NOP +org $8CD75E ; bank_0C.asm (dl NameFile_MakeScreenVisible) dl MaybeForceFileName ;-------------------------------------------------------------------------------- -org $0CE43A ; No assembly source. Makes name entry box wider +org $8CE43A ; No assembly source. Makes name entry box wider db $2C -org $0CE448 +org $8CE448 db $2D, $40, $1E -org $0CE45C +org $8CE45C db $4D, $40, $1E -org $0CE462 +org $8CE462 db $6D, $40, $1E -org $0CE468 +org $8CE468 db $8D, $40, $1E -org $0CE46E +org $8CE46E db $AD, $40, $1E ;-------------------------------------------------------------------------------- -org $0CE41A ; No assembly source. +org $8CE41A ; Fix name screen background to use the not-overwritten copy of its graphics db $09 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 db $09 : SKIP 5 : db $49 : SKIP 1 : db $49 : SKIP 1 : db $49 : SKIP 1 : db $49 : SKIP 1 -db $c9 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 +db $C9 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 db $09 : SKIP 1 : db $89 : SKIP 4 : db $80, $09 : SKIP 4 : db $80, $09 : SKIP 4 db $80, $09 : SKIP 5 : db $89 : SKIP 5 db $49 : SKIP 5 : db $09 : SKIP 5 : db $09 : SKIP 5 : db $49 : SKIP 5 : db $09 : SKIP 5 @@ -270,10 +288,10 @@ db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 5 : db $05 ; Delete file Screen ;-------------------------------------------------------------------------------- ; Remove code that tries to hide non-selected player files -org $0CD435 ; <- 65435 - Bank0C.asm : 2772 (LDX.b #$64) [LDX.b #$50] +org $8CD435 ; <- 65435 - Bank0C.asm : 2772 (LDX.b #$64) [LDX.b #$50] LDX.b #$44 LDA.w $D324, X -org $0CD446 ; <- 65446 - Bank0C.asm : 2782 (LDX $C8 : CPX.b #$02 : BEQ BRANCH_11) +org $8CD446 ; <- 65446 - Bank0C.asm : 2782 (LDX $C8 : CPX.b #$02 : BEQ BRANCH_11) db $80 ; BRA ;-------------------------------------------------------------------------------- @@ -281,7 +299,7 @@ db $80 ; BRA ; Remove Mirrored copy of save file ;-------------------------------------------------------------------------------- ; Saving to mirrored copy -org $00895D ; <- 0095D - Bank00.asm : 1286 (LDA $7EF000, X : STA $0000, Y : STA $0F00, Y) +org $80895D ; <- 0095D - Bank00.asm : 1286 (LDA $7EF000, X : STA $0000, Y : STA $0F00, Y) SKIP 7 : NOP #3 SKIP 7 : NOP #3 SKIP 7 : NOP #3 @@ -289,172 +307,174 @@ SKIP 7 : NOP #3 SKIP 7 : NOP #3 ;-------------------------------------------------------------------------------- ; remove Clearing mirrored copy on file erase, instead clearing the extended save file too -org $0CD4E3 ; <- Bank0C.asm : 2282 (STA $700400, X : STA $700F00, X : STA $701000, X : STA $701100, X) -JSL.l ClearExtendedSaveFile +org $8CD4E3 ; <- Bank0C.asm : 2282 (STA $700400, X : STA $700F00, X : STA $701000, X : STA $701100, X) +JSL ClearExtendedSaveFile BRA + : NOP #18 : + ;-------------------------------------------------------------------------------- ;================================================================================ ; Extended SRAM Save file ;-------------------------------------------------------------------------------- -org $0CCF08 ; <- Bank0C.asm : 2036 (LDA.w #$0007 : STA $7EC00D : STA $7EC013) +org $8CCF08 ; <- Bank0C.asm : 2036 (LDA.w #$0007 : STA $7EC00D : STA $7EC013) JSL CopyExtendedSaveFileToWRAM ;-------------------------------------------------------------------------------- -org $008998 ; <- Bank00.asm : 1296 (LDX.w #$0000) +org $808998 ; <- Bank00.asm : 1296 (LDX.w #$0000) JSL CopyExtendedWRAMSaveFileToSRAM ;-------------------------------------------------------------------------------- -org $00899C ; <- bank_00.asm : #_00899C (CLC) +org $80899C ; <- bank_00.asm : #_00899C (CLC) JSL WriteSaveChecksumAndBackup PLA : SEP #$30 : PLB : RTL padbyte $FF : pad $0089C2 ; Fill adjacent free rom forward. See bank_00.asm: #_0089C2 ;-------------------------------------------------------------------------------- -org $0CD7AB ; <- Bank0C.asm : 3342 (STA $700400, X) -JSL.l ClearExtendedSaveFile +org $8CD7AB ; <- Bank0C.asm : 3342 (STA $700400, X) +JSL ClearExtendedSaveFile ;-------------------------------------------------------------------------------- -org $0CC2EB ; <- Bank0C.asm : 348 (STA $7EF000, X : STA $7EF100, X : STA $7EF200, X : STA $7EF300, X : STA $7EF400, X) -JSL.l ClearExtendedWRAMSaveFile +org $8CC2EB ; <- Bank0C.asm : 348 (STA $7EF000, X : STA $7EF100, X : STA $7EF200, X : STA $7EF300, X : STA $7EF400, X) +JSL ClearExtendedWRAMSaveFile ;-------------------------------------------------------------------------------- -org $09F653 ; <- module_death.asm : 556 (STA $7EF400, X) -JSL.l ClearExtendedWRAMSaveFile +org $89F653 ; <- module_death.asm : 556 (STA $7EF400, X) +JSL ClearExtendedWRAMSaveFile ;-------------------------------------------------------------------------------- ;================================================================================ ; Remove storage of selected file index from end of vanilla SRAM ;-------------------------------------------------------------------------------- -org $0087EB ; <- Bank00.asm : 986 (STA $7EC500 : STA $701FFE) +org $8087EB ; <- Bank00.asm : 986 (STA $7EC500 : STA $701FFE) BRA AfterFileWrittenChecks ;Also skip totally redundant checking and clearing the "file written" marker, ;since it is not even useful in the original code, much less with only one save slot -org $00881f ; <- Bank00.asm : 1011 (STY $01FE) +org $80881F ; <- Bank00.asm : 1011 (STY $01FE) AfterFileWrittenChecks: ;-------------------------------------------------------------------------------- -org $008951 ; <- Bank00.asm : 1278 (LDX $1FFE : LDA $00848A, X : TAY : PHY) -LDX #$0002 +org $808951 ; <- Bank00.asm : 1278 (LDX $1FFE : LDA $00848A, X : TAY : PHY) +LDX.w #$0002 ;-------------------------------------------------------------------------------- -org $0CCE85 ; <- Bank0C.asm : 1953 (LDA $C8 : ASL A : INC #2 : STA $701FFE) +org $8CCE85 ; <- Bank0C.asm : 1953 (LDA $C8 : ASL A : INC #2 : STA $701FFE) NOP #4 ;-------------------------------------------------------------------------------- -org $0CDB4C ; <- Bank0C.asm : 3655 (LDA $C8 : ASL A : INC #2 : STA $701FFE : TAX) +org $8CDB4C ; <- Bank0C.asm : 3655 (LDA $C8 : ASL A : INC #2 : STA $701FFE : TAX) JML OnFileCreation : NOP ;-------------------------------------------------------------------------------- -org $09F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2) +org $89F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2) LDA.w #$0002 : NOP ;-------------------------------------------------------------------------------- -org $0EEFEB ; <- vwf.asm : 310 (LDA $701FFE : TAX) +org $8EEFEB ; <- vwf.asm : 310 (LDA $701FFE : TAX) LDA.w #$0002 : NOP ;-------------------------------------------------------------------------------- ;================================================================================ ; Cross World Damage fixes ;-------------------------------------------------------------------------------- -org $068891 ; Sprite_Prep.asm : 378 //LDA .damage_class, Y : STA $0CD2, X -nop #$08 -JSL.l NewBatInit +org $868891 ; Sprite_Prep.asm : 378 //LDA .damage_class, Y : STA $0CD2, X +NOP #8 +JSL NewBatInit ;================================================================================ ; Damage table Relocation from WRAM ;-------------------------------------------------------------------------------- -org $06EDB5 ;<- 36DBE - Bank06.asm : 4882 (LDA $7F6000, X : STA $02) -JSL.l LookupDamageLevel +org $86EDB5 ;<- 36DBE - Bank06.asm : 4882 (LDA $7F6000, X : STA $02) +JSL LookupDamageLevel ;-------------------------------------------------------------------------------- -org $1EAB5E ;<- F2B5E - sprite_stalfos_knight.asm : 135 (LDA.b #$00 : STA $7F6918) +org $9EAB5E ;<- F2B5E - sprite_stalfos_knight.asm : 135 (LDA.b #$00 : STA $7F6918) STA.l StalfosBombDamage -org $1EAAD6 ;<- F2AB6 - sprite_stalfos_knight.asm : 32 (LDA.b #$02 : STA $7F6918) +org $9EAAD6 ;<- F2AB6 - sprite_stalfos_knight.asm : 32 (LDA.b #$02 : STA $7F6918) STA.l StalfosBombDamage ;-------------------------------------------------------------------------------- ;================================================================================ ; Duck Map Load Hook ;-------------------------------------------------------------------------------- -org $0AB76E ; <- 5376E - Bank0A.asm : 30 (JSL OverworldMap_InitGfx) -JSL.l OnLoadDuckMap -;-------------------------------------------------------------------------------- +org $8AB76E ; <- 5376E - Bank0A.asm : 30 (JSL OverworldMap_InitGfx) +JSL OnLoadDuckMap ;================================================================================ ; Infinite Bombs / Arrows / Magic ;-------------------------------------------------------------------------------- -org $08A17A ; <- 4217A - ancilla_arrow.asm : 42 (AND.b #$04 : BEQ .dont_spawn_sparkle) -CMP.b #$03 : db #$90 ; !BLT -org $08A40E ; <- 4240E - ancilla_arrow.asm : 331 (AND.b #$04 : BNE .use_silver_palette) -CMP.b #$03 : db #$B0 ; !BGE +org $88A17A ; <- 4217A - ancilla_arrow.asm : 42 (AND.b #$04 : BEQ .dont_spawn_sparkle) +CMP.b #$03 : db $90 ; !BLT +org $88A40E ; <- 4240E - ancilla_arrow.asm : 331 (AND.b #$04 : BNE .use_silver_palette) +CMP.b #$03 : db $B0 ; !BGE ;-------------------------------------------------------------------------------- -org $098127 ; <- 48127 - ancilla_init.asm : 202 (LDA $7EF343 : BNE .player_has_bombs) -JSL.l LoadBombCount -org $098133 ; <- 48133 - ancilla_init.asm : 211 (STA $7EF343 : BNE .bombs_left_over) -JSL.l StoreBombCount +org $898127 ; <- 48127 - ancilla_init.asm : 202 (LDA $7EF343 : BNE .player_has_bombs) +JSL LoadBombCount +org $898133 ; <- 48133 - ancilla_init.asm : 211 (STA $7EF343 : BNE .bombs_left_over) +JSL StoreBombCount ;-------------------------------------------------------------------------------- -org $0DDEB3 ; <- 6DEB3 - equipment.asm : 328 (LDA $7EF33F, X) -JSL.l IsItemAvailable +org $8DE4BF ; <- 6E4BF - equipment.asm : 1249 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs) +JSL LoadBombCount16 ;-------------------------------------------------------------------------------- -org $0DDDE8 ; <- 6DDE8 - equipment.asm : 148 (LDA $7EF340) -JSL.l SearchForEquippedItem +org $8DDEB3 ; <- 6DEB3 - equipment.asm : 328 (LDA $7EF33F, X) +JSL IsItemAvailable ;-------------------------------------------------------------------------------- -org $0DDE70 ; <- 6DE70 - equipment.asm : 273 (LDA $7EF340) -JSL.l SearchForEquippedItem +org $8DDDE8 ; <- 6DDE8 - equipment.asm : 148 (LDA $7EF340) +JSL SearchForEquippedItem ;-------------------------------------------------------------------------------- -org $0DE39D ; <- 6E39D - equipment.asm : 1109 (LDA $7EF340) -JSL.l SearchForEquippedItem +org $8DDE70 ; <- 6DE70 - equipment.asm : 273 (LDA $7EF340) +JSL SearchForEquippedItem +;-------------------------------------------------------------------------------- +org $8DE39D ; <- 6E39D - equipment.asm : 1109 (LDA $7EF340) +JSL SearchForEquippedItem ;-------------------------------------------------------------------------------- ;================================================================================ ; Inverted Mode ;-------------------------------------------------------------------------------- -org $028413 ; <- 10413 - Bank02.asm : 853 (LDA $7EF357 : BNE .notBunny) +org $828413 ; <- 10413 - Bank02.asm : 853 (LDA $7EF357 : BNE .notBunny) NOP #6 -JSL.l DecideIfBunny : db #$D0 ; BNE +JSL DecideIfBunny : db $D0 ; BNE ;-------------------------------------------------------------------------------- -org $07AA44 ; <- 3AA44 - Bank07.asm : 853 (LDA $7EF357 : BNE .playerHasMoonPearl) +org $87AA44 ; <- 3AA44 - Bank07.asm : 853 (LDA $7EF357 : BNE .playerHasMoonPearl) NOP #6 -JSL.l DecideIfBunnyByScreenIndex : db #$D0 ; BNE +JSL DecideIfBunnyByScreenIndex : db $D0 ; BNE ;-------------------------------------------------------------------------------- -org $02D9B9 ; <- 159B9 - Bank02.asm : 11089 (LDA $7EF3C8) +org $82D9B9 ; <- 159B9 - Bank02.asm : 11089 (LDA $7EF3C8) JSL AllowStartFromSingleEntranceCave ;-------------------------------------------------------------------------------- -org $028496 ; <- 15496 - Bank02.asm : 959 (LDA $7EF3C8 : PHA) -JML.l AllowStartFromExit +org $828496 ; <- 15496 - Bank02.asm : 959 (LDA $7EF3C8 : PHA) +JML AllowStartFromExit AllowStartFromExitReturn: ;-------------------------------------------------------------------------------- -org $1bc2a7 ; <- DC2A7 - Bank1B.asm : 1143 (Overworld_CreatePyramidHole:) -JSL.l Overworld_CreatePyramidHoleModified : RTL +org $9BC2A7 ; <- DC2A7 - Bank1B.asm : 1143 (Overworld_CreatePyramidHole:) +JSL Overworld_CreatePyramidHoleModified : RTL C9DE_LONG: -JSR $C9DE : RTL ; surprisingly same address as US +JSR.w $1BC9DE : RTL ; surprisingly same address as US ;-------------------------------------------------------------------------------- -org $07ff5f ; <- 3ff5f - Bank0E.asm : 5252 (LDA.w #$0E3F : STA $23BC) -JSL.l Draw_PyramidOverlay : RTS +org $87FF5F ; <- 3ff5f - Bank0E.asm : 5252 (LDA.w #$0E3F : STA $23BC) +JSL Draw_PyramidOverlay : RTS ;-------------------------------------------------------------------------------- ;Remove Electric Barrier Hook -org $06891E ; <- sprite_prep.asm : 537 (LDA $7EF280, X : PLX : AND.b #$40 : BEQ .not_dead) +org $86891E ; <- sprite_prep.asm : 537 (LDA $7EF280, X : PLX : AND.b #$40 : BEQ .not_dead) JSL Electric_Barrier ;-------------------------------------------------------------------------------- -org $08CDAC ; <- ancilla_break_tower_seal.asm : 117 (LDA.b #$05 : STA $04C6) +org $88CDAC ; <- ancilla_break_tower_seal.asm : 117 (LDA.b #$05 : STA $04C6) JSL GanonTowerAnimation : NOP #05 ;-------------------------------------------------------------------------------- -org $1AF5C1 ; <- sprite_waterfall.asm : 40 (LDA $8A : CMP.b #$43) +org $9AF5C1 ; <- sprite_waterfall.asm : 40 (LDA $8A : CMP.b #$43) JSL GanonTowerInvertedCheck ;-------------------------------------------------------------------------------- -org $02EC8D ; <- bank02.asm : 11981 (LDA.w #$020F : LDX $8A : CPX.w #$0033 : BNE .noRock) +org $82EC8D ; <- bank02.asm : 11981 (LDA.w #$020F : LDX $8A : CPX.w #$0033 : BNE .noRock) JSL HardcodedRocks : NOP #19 ;23 bytes removed with the JSL ;-------------------------------------------------------------------------------- -org $04E7AE ; <- bank0E.asm : 4230 (LDA $7EF287 : AND.w #$0020) -JSL.l TurtleRockPegSolved +org $84E7AE ; <- bank0E.asm : 4230 (LDA $7EF287 : AND.w #$0020) +JSL TurtleRockPegSolved -org $04E7B9 ; <- bank0E.asm : 4237 (LDX $04C8) +org $84E7B9 ; <- bank0E.asm : 4237 (LDX $04C8) JMP.w TurtleRockTrollPegs TurtleRockPegCheck: -org $04E7C9 +org $84E7C9 TurtleRockPegSuccess: -org $04E7F5 +org $84E7F5 TurtleRockPegFail: -org $04E96F +org $84E96F PegProbability: db $00 ; Probability out of 255. 0 = Vanilla behavior TurtleRockTrollPegs: SEP #$20 LDX.w $04C8 : CPX.w #$FFFF : BEQ .vanilla -JSL.l GetRandomInt +JSL GetRandomInt LDA.l PegProbability : BEQ .vanilla : CMP.l $7E0FA1 REP #$20 : !BGE .succeed .fail @@ -464,186 +484,174 @@ JMP.w TurtleRockPegSuccess .vanilla REP #$20 : JMP.w TurtleRockPegCheck ;-------------------------------------------------------------------------------- -org $1BBD05 ; <- bank1B.asm : 261 (TYA : STA $00) ; hook starts at the STA -JML.l PreventEnterOnBonk : NOP +org $9BBD05 ; <- bank1B.asm : 261 (TYA : STA $00) ; hook starts at the STA +JML PreventEnterOnBonk : NOP PreventEnterOnBonk_return: -org $1BBD77 ; <- bank1B.asm : 308 (SEP #$30) +org $9BBD77 ; <- bank1B.asm : 308 (SEP #$30) PreventEnterOnBonk_BRANCH_IX: ;-------------------------------------------------------------------------------- ;================================================================================ ; Crystals Mode ;-------------------------------------------------------------------------------- -org $099B7B ; <- ancilla_init.asm : 4136 (LDA $7EF37A : AND.b #$7F : CMP.b #$7F) -JSL.l CheckEnoughCrystalsForTower : NOP #4 -db #$90 ; BCC +org $899B7F ; <- ancilla_init.asm : 4136 (LDA $7EF37A : AND.b #$7F : CMP.b #$7F) +JSL CheckTowerOpen : BCC $899B6D ;-------------------------------------------------------------------------------- -org $08CE0C ; <- 44E0C - ancilla_break_tower_seal.asm : 168 (BEQ #$03 : JSR BreakTowerSeal_ExecuteSparkles : LDX.b #$06) -JML.l GetRequiredCrystalsForTower : NOP #3 +org $88CE0C ; <- 44E0C - ancilla_break_tower_seal.asm : 168 (BEQ #$03 : JSR BreakTowerSeal_ExecuteSparkles : LDX.b #$06) +JML GetRequiredCrystalsForTower : NOP #3 GetRequiredCrystalsForTower_continue: ;-------------------------------------------------------------------------------- -org $08CF19 ; <- 44F19 - ancilla_break_tower_seal.asm : 336 (TXA : AND.b #$07 : TAX) -JSL.l GetRequiredCrystalsInX +org $88CF19 ; <- 44F19 - ancilla_break_tower_seal.asm : 336 (TXA : AND.b #$07 : TAX) +JSL GetRequiredCrystalsInX ;-------------------------------------------------------------------------------- -org $08CFC9 ; <- 44FC9 - ancilla_break_tower_seal.asm : 414 (RTS) -db #$6B +org $88CFC9 ; <- 44FC9 - ancilla_break_tower_seal.asm : 414 (RTS) +RTL ;-------------------------------------------------------------------------------- ;================================================================================ ; Hash Key Display ;-------------------------------------------------------------------------------- -org $0CCDB5 ; <- 64DB5 - Bank0C.asm : 1776 (LDA.b #$06 : STA $14) -JSL.l OnPrepFileSelect +org $8CCDB5 ; <- 64DB5 - Bank0C.asm : 1776 (LDA.b #$06 : STA $14) +JSL OnPrepFileSelect ;================================================================================ ; Light speed ;-------------------------------------------------------------------------------- ; Message -org $1ED4FF +org $9ED4FF JSL AgahnimAsksAboutPed ; Spam blue balls if ped not pulled -org $1ED6E8 +org $9ED6E8 JSL CheckAgaForPed : NOP - ; kill ganon when aga dies in light speed -org $00F970 +org $80F970 JSL KillGanon ;================================================================================ ; Zelda Sprite Fixes ;-------------------------------------------------------------------------------- -org $05EBCF ; <- 2EBCF - sprite_zelda.asm : 23 (LDA $7EF359 : CMP.b #$02 : BCS .hasMasterSword) -JSL.l SpawnZelda : NOP #2 +org $85EBCF ; <- 2EBCF - sprite_zelda.asm : 23 (LDA $7EF359 : CMP.b #$02 : BCS .hasMasterSword) +JSL SpawnZelda : NOP #2 ;================================================================================ ; Alternate Goal ;-------------------------------------------------------------------------------- ;Invincible Ganon -org $06F2C8 ; <- 372C8 - Bank06.asm : 5776 (LDA $44 : CMP.b #$80 : BEQ .no_collision) -JSL.l GoalItemGanonCheck +org $86F2C8 ; <- 372C8 - Bank06.asm : 5776 (LDA $44 : CMP.b #$80 : BEQ .no_collision) +JSL GoalItemGanonCheck ;-------------------------------------------------------------------------------- ;Hammerable Ganon -org $06F2EA ; <- 372EA - Bank06.asm : 5791 (LDA $0E20, X : CMP.b #$D6 : BCS .no_collision) -JSL.l CheckGanonHammerDamage : NOP +org $86F2EA ; <- 372EA - Bank06.asm : 5791 (LDA $0E20, X : CMP.b #$D6 : BCS .no_collision) +JSL CheckGanonHammerDamage : NOP ;-------------------------------------------------------------------------------- +org $858922 +JSL.l CheckPedestalPull : BCC MasterSword_InPedestal_exit ;================================================================================ ; Stat Hooks ;-------------------------------------------------------------------------------- -org $02B797 ; <- 13797 - Bank02.asm : 8712 (LDA.b #$19 : STA $10) -JSL.l StatsFinalPrep +org $82B797 ; <- 13797 - Bank02.asm : 8712 (LDA.b #$19 : STA $10) +JSL StatsFinalPrep ;-------------------------------------------------------------------------------- -org $07A95B ; <- 3A95B - Bank07.asm : 6565 (JSL Dungeon_SaveRoomDataWRAM) -JSL.l IncrementUWMirror +org $87A95B ; <- 3A95B - Bank07.asm : 6565 (JSL Dungeon_SaveRoomDataWRAM) +JSL IncrementUWMirror ;-------------------------------------------------------------------------------- -org $0288D1 ; <- 108D1 - Bank02.asm : 1690 (STZ $0646) -JSL.l IndoorSubtileTransitionCounter : NOP #2 -org $06D192 ; <- 35192 - sprite_absorbable.asm : 274 (STA $7EF36F) -JSL.l IncrementSmallKeysNoPrimary +org $8288D1 ; <- 108D1 - Bank02.asm : 1690 (STZ $0646) +JSL IndoorSubtileTransitionCounter : NOP #2 +org $86D192 ; <- 35192 - sprite_absorbable.asm : 274 (STA $7EF36F) +JSL IncrementSmallKeysNoPrimary ;-------------------------------------------------------------------------------- -org $00F945 ; <- 7945 - Bank00.asm : 8557 (JSL SavePalaceDeaths) -JSL.l StatTransitionCounter ; we're not bothering to restore the instruction we wrote over +org $80F945 ; <- 7945 - Bank00.asm : 8557 (JSL SavePalaceDeaths) +JSL OnDungeonBossExit ;-------------------------------------------------------------------------------- -org $09F443 ; <- 4F443 - module_death.asm : 257 (STA $7EF35C, X) -JSL.l IncrementFairyRevivalCounter +org $89F443 ; <- 4F443 - module_death.asm : 257 (STA $7EF35C, X) +JSL IncrementFairyRevivalCounter ;-------------------------------------------------------------------------------- -org $02B6F3 ; <- 136F3 - Bank02.asm : 8600 (LDA.b #$0F : STA $10) -JSL.l DungeonExitTransition +org $82B6F3 ; <- 136F3 - Bank02.asm : 8600 (LDA.b #$0F : STA $10) +JSL DungeonExitTransition ;-------------------------------------------------------------------------------- -org $1BBD6A ; <- DBD6A - Bank1B.asm : 301 (LDA.b #$0F : STA $10) -JSL.l DungeonExitTransition +org $9BBD6A ; <- DBD6A - Bank1B.asm : 301 (LDA.b #$0F : STA $10) +JSL DungeonExitTransition ;-------------------------------------------------------------------------------- -org $01C3A7 ; <- C3A7 - Bank01.asm : 9733 (JSL Dungeon_SaveRoomQuadrantData) -JSL.l DungeonStairsTransition +org $81C3A7 ; <- C3A7 - Bank01.asm : 9733 (JSL Dungeon_SaveRoomQuadrantData) +JSL DungeonStairsTransition ;-------------------------------------------------------------------------------- -org $0BFFAC ; <- 5FFAC - Bank0B.asm : 170 (JSL Dungeon_SaveRoomQuadrantData) -JSL.l DungeonStairsTransition +org $8BFFAC ; <- 5FFAC - Bank0B.asm : 170 (JSL Dungeon_SaveRoomQuadrantData) +JSL DungeonStairsTransition ;-------------------------------------------------------------------------------- -org $029A17 ; <- 11A17 - Bank02.asm : 4770 (JSL EnableForceBlank) -JSL.l DungeonHoleEntranceTransition +org $829A17 ; <- 11A17 - Bank02.asm : 4770 (JSL EnableForceBlank) +JSL DungeonHoleEntranceTransition ;-------------------------------------------------------------------------------- -org $0794EB ; <- 394EB - Bank07.asm : 3325 (LDA $01C31F, X : STA $0476) -JSL.l DungeonHoleWarpTransition +org $8794EB ; <- 394EB - Bank07.asm : 3325 (LDA $01C31F, X : STA $0476) +JSL DungeonHoleWarpTransition ;-------------------------------------------------------------------------------- -org $0CC999 ; <- 64999 - Bank0C.asm : 1087 (LDA.b #$0F : STA $13) +org $8CC999 ; <- 64999 - Bank0C.asm : 1087 (LDA.b #$0F : STA $13) NOP #4 ;-------------------------------------------------------------------------------- -org $01ED75 ; <- ED75 - Bank01.asm : 13963 (JSL Dungeon_SaveRoomQuadrantData) -JSL.l IncrementBigChestCounter +org $81ED75 ; <- ED75 - Bank01.asm : 13963 (JSL Dungeon_SaveRoomQuadrantData) +JSL IncrementBigChestCounter ;-------------------------------------------------------------------------------- +org $8EE67A : STA.l PostGameCounter : BRA + : NOP #18 : + ;================================================================================ -; Dialog Override +; DialogOverride ;-------------------------------------------------------------------------------- -org $0EF1FF ; 0x771FF <- vwf.asm : 1212 (LDA $7F1200, X : AND.w #$007F : SUB.w #$0066 : BPL .commandByte) -JSL.l DialogOverride -org $0EF2DC ; every other LDA $7F1200, X in vwf.asm -JSL.l DialogOverride -org $0EF315 -JSL.l DialogOverride -org $0EF332 -JSL.l DialogOverride -org $0EF375 -JSL.l DialogOverride -org $0EF394 -JSL.l DialogOverride -org $0EF511 -JSL.l DialogOverride -org $0EF858 -JSL.l DialogOverride -org $0EFA26 -JSL.l DialogOverride -org $0EFA4C -JSL.l DialogOverride -org $0EFAB4 -JSL.l DialogOverride -org $0EFAC8 -JSL.l DialogOverride -org $0EFAE1 -JSL.l DialogOverride -org $0EFB11 -JSL.l DialogOverride +org $8EF1FF : JSL DialogOverride ; DialogOverride +org $8EF2DC : JSL DialogOverride ; DialogOverride +org $8EF315 : JSL DialogOverride ; DialogOverride +org $8EF332 : JSL DialogOverride ; DialogOverride +org $8EF375 : JSL DialogOverride ; DialogOverride +org $8EF394 : JSL DialogOverride ; DialogOverride +org $8EF511 : JSL DialogOverride ; DialogOverride +org $8EF858 : JSL DialogOverride ; DialogOverride +org $8EFA26 : JSL DialogOverride ; DialogOverride +org $8EFA4C : JSL DialogOverride ; DialogOverride +org $8EFAB4 : JSL DialogOverride ; DialogOverride +org $8EFAC8 : JSL DialogOverride ; DialogOverride +org $8EFAE1 : JSL DialogOverride ; DialogOverride +org $8EFB11 : JSL DialogOverride ; DialogOverride ;-------------------------------------------------------------------------------- -org $0EFBC6 ; <- 77BC6 - vwf.asm : 2717 (LDA.b #$1C : STA $1CE9) -JSL.l ResetDialogPointer : RTS +org $8EFBC6 ; <- 77BC6 - vwf.asm : 2717 (LDA.b #$1C : STA $1CE9) +JSL ResetDialogPointer : RTS ;-------------------------------------------------------------------------------- -org $0EED0B ; <- PC 0x76D0B - Bank0E.asm : 3276 (LDA $E924, Y : STA $1008, X) -JSL.l EndingSequenceTableOverride : NOP #2 +org $8EED0B ; <- PC 0x76D0B - Bank0E.asm : 3276 (LDA $E924, Y : STA $1008, X) +JSL EndingSequenceTableOverride : NOP #2 ;-------------------------------------------------------------------------------- -org $0EED15 ; <- PC 0x76D15 - Bank0E.asm : 3282 (LDA $E924, Y : STA $1008, X) -JSL.l EndingSequenceTableOverride : NOP #2 +org $8EED15 ; <- PC 0x76D15 - Bank0E.asm : 3282 (LDA $E924, Y : STA $1008, X) +JSL EndingSequenceTableOverride : NOP #2 ;-------------------------------------------------------------------------------- -org $0EED2A ; <- PC 0x76D2A - Bank0E.asm : 3295 (LDA $E924, Y : AND.w #$00FF) -JSL.l EndingSequenceTableLookupOverride : NOP #2 +org $8EED2A ; <- PC 0x76D2A - Bank0E.asm : 3295 (LDA $E924, Y : AND.w #$00FF) +JSL EndingSequenceTableLookupOverride : NOP #7 ;-------------------------------------------------------------------------------- ;================================================================================ ; Master Sword Overlay Fix ;-------------------------------------------------------------------------------- -org $0987b2 ; <- ancilla_init.asm : 1051 (LDA.b #$09) -JSL.l PedestalPullOverlayFix +org $8987B2 ; <- ancilla_init.asm : 1051 (LDA.b #$09) +JSL PedestalPullOverlayFix -org $0987b8 ; <- ancilla_init.asm : 1055 (STA $039F, X) +org $8987B8 ; <- ancilla_init.asm : 1055 (STA $039F, X) NOP #3 -org $0987df ; <- ancilla_init.asm : 1077 (STA $039F, X) +org $8987DF ; <- ancilla_init.asm : 1077 (STA $039F, X) NOP #3 ;-------------------------------------------------------------------------------- ;================================================================================ ; File Select Init Event ;-------------------------------------------------------------------------------- -org $0CCC89 ; <- 0x64C89 Bank0C.asm : 1598 (JSL EnableForceBlank) -JSL.l OnInitFileSelect +org $8CCC89 ; <- 0x64C89 Bank0C.asm : 1598 (JSL EnableForceBlank) +JSL OnInitFileSelect ;================================================================================ ; Hyrule Castle Rain Sequence Guards (allowing Gloves in Link's house) ;-------------------------------------------------------------------------------- -org $09C8B7 ; <- 4C8B7 -dw #CastleRainSpriteData -org $09F7BD ; <- 4F7BD +org $89C8B7 ; <- 4C8B7 +dw CastleRainSpriteData + +org $89F7BD ; <- 4F7BD CastleRainSpriteData: db $06, $1F, $40, $12, $01, $3F, $14, $01, $3F, $13, $1F, $42, $1A, $1F, $4B, $1A, $20, $4B, $25, $2D, $3F, $29, $20, $3F, $2A, $3C, $3F, $FF ;-------------------------------------------------------------------------------- @@ -651,408 +659,435 @@ db $06, $1F, $40, $12, $01, $3F, $14, $01, $3F, $13, $1F, $42, $1A, $1F, $4B, $1 ;================================================================================ ; Sprite_DrawMultiple ;-------------------------------------------------------------------------------- -org $05DFB1 ; <- 2DFB1 - Bank05.asm : 2499 -JSL.l SkipDrawEOR +org $85DFB1 ; <- 2DFB1 - Bank05.asm : 2499 +JSL SkipDrawEOR ;================================================================================ ; Kiki Big Bomb Fix ;-------------------------------------------------------------------------------- -org $1EE4AF ; <- f64af sprite_kiki.asm : 285 (LDA.b #$0A : STA $7EF3CC) -JSL.l AssignKiki : NOP #2 +org $9EE4AF ; <- f64af sprite_kiki.asm : 285 (LDA.b #$0A : STA $7EF3CC) +JSL AssignKiki : NOP #2 ;================================================================================ ; Wallmaster camera fix ;-------------------------------------------------------------------------------- -org $1EAF77 ; <- F2F77 sprite_wallmaster.asm : 141 (LDA.b #$2A : JSL Sound_SetSfx3PanLong) -JSL.l WallmasterCameraFix +org $9EAF77 ; <- F2F77 sprite_wallmaster.asm : 141 (LDA.b #$2A : JSL Sound_SetSfx3PanLong) +JSL WallmasterCameraFix ;================================================================================ ; Hard & Masochist Mode Fixes ;-------------------------------------------------------------------------------- -org $07D22B ; <- 3D22B - Bank05.asm : 12752 (LDA $D055, Y : STA $0373) -JSL.l CalculateSpikeFloorDamage : NOP #2 +org $87D22B ; <- 3D22B - Bank05.asm : 12752 (LDA $D055, Y : STA $0373) +JSL CalculateSpikeFloorDamage : NOP #2 ;-------------------------------------------------------------------------------- -org $08DCC3 ; <- 45CC3 - ancilla_cane_spark.asm : 272 (LDA $7EF36E) -JSL.l CalculateByrnaUsage +org $88DCC3 ; <- 45CC3 - ancilla_cane_spark.asm : 272 (LDA $7EF36E) +JSL CalculateByrnaUsage ;-------------------------------------------------------------------------------- -org $07AE17 ; <- 3AE17 - Bank07.asm : 7285 (LDA $7EF36E) -JSL.l CalculateCapeUsage +org $87AE17 ; <- 3AE17 - Bank07.asm : 7285 (LDA $7EF36E) +JSL CalculateCapeUsage ;-------------------------------------------------------------------------------- -org $07AE98 ; <- 3AE98 - Bank07.asm : 7380 (LDA $7EF36E) -JSL.l CalculateCapeUsage +org $87AE98 ; <- 3AE98 - Bank07.asm : 7380 (LDA $7EF36E) +JSL CalculateCapeUsage ;-------------------------------------------------------------------------------- -org $08DCA7 ; <- 45CA7 - ancilla_cane_spark.asm : 256 (LDA.b #$01 : STA $037B) -JSL.l ActivateInvulnerabilityOrDont : NOP +org $88DCA7 ; <- 45CA7 - ancilla_cane_spark.asm : 256 (LDA.b #$01 : STA $037B) +JSL ActivateInvulnerabilityOrDont : NOP ;-------------------------------------------------------------------------------- -ORG $06EDC6 ; <- 36DC6 - Bank06.asm : 4890 (LDA $0DB8F1, X) -JSL.l GetItemDamageValue +org $86EDC6 ; <- 36DC6 - Bank06.asm : 4890 (LDA $0DB8F1, X) +JSL GetItemDamageValue ;-------------------------------------------------------------------------------- ;================================================================================ ; Misc Stats ;-------------------------------------------------------------------------------- -org $029E2E ; <- 11E2E - module_ganon_emerges.asm : 59 (JSL Dungeon_SaveRoomDataWRAM.justKeys) -JSL.l OnAga2Defeated +org $829E2E ; <- 11E2E - module_ganon_emerges.asm : 59 (JSL Dungeon_SaveRoomDataWRAM.justKeys) +JSL OnAga2Defeated ;-------------------------------------------------------------------------------- -org $0DDBDE ; <- 6DBDE - headsup_display.asm : 105 (DEC A : BPL .subtractRupees) -JSL.l IncrementSpentRupees : NOP #6 +org $8DDBDE ; <- 6DBDE - headsup_display.asm : 105 (DEC A : BPL .subtractRupees) +JSL IncrementSpentRupees : NOP #6 ;================================================================================ ; Remove Item Menu Text ;-------------------------------------------------------------------------------- -org $0DEBB0 ; <- 6EBB0 - equipment.asm : 1810 (LDA $0202) +org $8DEBB0 ; <- 6EBB0 - equipment.asm : 1810 (LDA $0202) JMP DrawItem_finished -org $0DECE6 ; <- 6ECE6 - equipment.asm : 1934 (SEP #$30) +org $8DECE6 ; <- 6ECE6 - equipment.asm : 1934 (SEP #$30) DrawItem_finished: -org $0DEB48 ; <- 6EB48 - equipment.asm : 1784 (LDA $0000) +org $8DEB48 ; <- 6EB48 - equipment.asm : 1784 (LDA $0000) LDA.w $0000, Y : STA.w GFXStripes+$01F2 LDA.w $0002, Y : STA.w GFXStripes+$01F4 LDA.w $0040, Y : STA.w GFXStripes+$0232 LDA.w $0042, Y : STA.w GFXStripes+$0234 ;--------------------------- -org $0DE24B ; <- 6E24B - equipment.asm : 951 (LDA $0000) +org $8DE24B ; <- 6E24B - equipment.asm : 951 (LDA $0000) LDA.w $0000, Y : STA.w GFXStripes+$01F2 LDA.w $0002, Y : STA.w GFXStripes+$01F4 LDA.w $0040, Y : STA.w GFXStripes+$0232 LDA.w $0042, Y : STA.w GFXStripes+$0234 ;-------------------------------------------------------------------------------- -org $0DE2DC ; <- 6E2DC - equipment.asm : 989 (LDA $F449, X : STA $122C, Y) +org $8DE2DC ; <- 6E2DC - equipment.asm : 989 (LDA $F449, X : STA $122C, Y) JMP UpdateBottleMenu_return -org $0DE2F1 ; <- 6E2F1 - equipment.asm : 1000 (SEP #$30) -UpdateBottleMenu_return: +UpdateBottleMenu_return = $8DE2F1 ; <- 6E2F1 - equipment.asm : 1000 (SEP #$30) ;-------------------------------------------------------------------------------- -org $0DE6F4 ; <- 6E6F4 - equipment.asm : 1474 (BCC .lacksAbility) -db #$80 ; BRA -org $0DE81A ; <- 6E81A - equipment.asm : 1597 (STA $00) +org $8DE6F4 ; <- 6E6F4 - equipment.asm : 1474 (BCC .lacksAbility) +db $80 ; BRA +org $8DE81A ; <- 6E81A - equipment.asm : 1597 (STA $00) RTS -org $0DE7B9 ; <- 6E7B9 - equipment.asm : 1548 (LDA.w #$16D0 : STA $00) -JSL.l DrawGlovesInMenuLocation : NOP -org $0DE7CF ; <- 6E7CF - equipment.asm : 1554 (LDA.w #$16C8 : STA $00) -JSL.l DrawBootsInMenuLocation : NOP -org $0DE7E5 ; <- 6E7E5 - equipment.asm : 1560 (LDA.w #$16D8 : STA $00) -JSL.l DrawFlippersInMenuLocation : NOP -org $0DECEB ; <- 6ECEB - equipment.asm : 1946 (LDA.w #$16E0 : STA $00) -JSL.l DrawMoonPearlInMenuLocation : NOP +org $8DE7B9 ; <- 6E7B9 - equipment.asm : 1548 (LDA.w #$16D0 : STA $00) +JSL DrawGlovesInMenuLocation : NOP +org $8DE7CF ; <- 6E7CF - equipment.asm : 1554 (LDA.w #$16C8 : STA $00) +JSL DrawBootsInMenuLocation : NOP +org $8DE7E5 ; <- 6E7E5 - equipment.asm : 1560 (LDA.w #$16D8 : STA $00) +JSL DrawFlippersInMenuLocation : NOP +org $8DECEB ; <- 6ECEB - equipment.asm : 1946 (LDA.w #$16E0 : STA $00) +JSL DrawMoonPearlInMenuLocation : NOP ;================================================================================ ; Zelda S&Q Mirror Fix ;-------------------------------------------------------------------------------- -org $02D9A4 ; <- 159A4 - Bank02.asm : 11077 (dw $0000, $0002, $0002, $0032, $0004, $0006, $0030) +org $82D9A4 ; <- 159A4 - Bank02.asm : 11077 (dw $0000, $0002, $0002, $0032, $0004, $0006, $0030) dw $0000, $0002, $0004, $0032, $0004, $0006, $0030 ;================================================================================ ; Accessibility ;-------------------------------------------------------------------------------- -org $02A3F4 ; <- 123F4 - Bank02.asm : 6222 (LDA.b #$72 : BRA .setBrightness) +org $82A3F4 ; <- 123F4 - Bank02.asm : 6222 (LDA.b #$72 : BRA .setBrightness) BRA + : NOP #2 : + -org $02A3FD ; <- 123FD - Bank02.asm : 6233 (LDA.b #$32 : STA $9a) -JSL.l ConditionalLightning +org $82A3FD ; <- 123FD - Bank02.asm : 6233 (LDA.b #$32 : STA $9A) +JSL ConditionalLightning ;-------------------------------------------------------------------------------- -org $1DE9CD ; <- EE9CD - Bank1D.asm : 568 (JSL Filter_Majorly_Whiten_Bg) -JSL.l ConditionalWhitenBg +org $9DE9CD ; <- EE9CD - Bank1D.asm : 568 (JSL Filter_Majorly_Whiten_Bg) +JSL ConditionalWhitenBg ;-------------------------------------------------------------------------------- -org $08AAE9 ; <- 042AE9 - ancilla_ether_spell.asm : 34 (JSL Palette_ElectroThemedGear) -JSL.l LoadElectroPalette +org $88AAE9 ; <- 042AE9 - ancilla_ether_spell.asm : 34 (JSL Palette_ElectroThemedGear) +JSL LoadElectroPalette ;-------------------------------------------------------------------------------- -org $08AAF5 ; <- 042AF5 - ancilla_ether_spell.asm : 45 (JSL LoadActualGearPalettes) -JSL.l RestoreElectroPalette +org $88AAF5 ; <- 042AF5 - ancilla_ether_spell.asm : 45 (JSL LoadActualGearPalettes) +JSL RestoreElectroPalette ;-------------------------------------------------------------------------------- -org $08AAF9 ; -< 42AF9 - ancilla_ether_spell.asm : 46 (JSL Palette_Restore_BG_From_Flash) -JSL.l RestoreBgEther +org $88AAF9 ; -< 42AF9 - ancilla_ether_spell.asm : 46 (JSL Palette_Restore_BG_From_Flash) +JSL RestoreBgEther ;-------------------------------------------------------------------------------- -org $08AAED ; <- 42AED - ancilla_ether_spell.asm : 35 (JSL Filter_Majorly_Whiten_Bg) -JSL.l ConditionalWhitenBg +org $88AAED ; <- 42AED - ancilla_ether_spell.asm : 35 (JSL Filter_Majorly_Whiten_Bg) +JSL ConditionalWhitenBg ;-------------------------------------------------------------------------------- -org $02FEE6 ; <- 17EE6 - Bank0E.asm : 3907 (RTS) -RTL ; the whiten color routine is only JSL-ed to +org $82FEE6 ; <- 17EE6 - Bank0E.asm : 3907 (RTS) +RTL ; the whiten color routine is only JSL-ed to ;-------------------------------------------------------------------------------- -org $07FA7B ; <- 3FA7B - Bank0E.asm : 4735 (REP #$20 : LDX.b #$02) +org $87FA7B ; <- 3FA7B - Bank0E.asm : 4735 (REP #$20 : LDX.b #$02) JML DDMConditionalLightning ;-------------------------------------------------------------------------------- -org $07FACB ; <- 3FACB - Bank0E.asm : 4773 (REP #$20 : LDA #$F531, Y) -JSL.l ConditionalGTFlash : BRA + : NOP #11 : + +org $87FACB ; <- 3FACB - Bank0E.asm : 4773 (REP #$20 : LDA #$F531, Y) +JSL ConditionalGTFlash : BRA + : NOP #11 : + ;-------------------------------------------------------------------------------- -org $0AFF48 ; <- 57F48 - Bank0A.asm : 4935 (REP #$20 : LDA $7EC3DA) -JSL.l ConditionalRedFlash : BRA + : NOP #13 : + +org $8AFF48 ; <- 57F48 - Bank0A.asm : 4935 (REP #$20 : LDA $7EC3DA) +JSL ConditionalRedFlash : BRA + : NOP #13 : + ;-------------------------------------------------------------------------------- -org $08C2A1 ; <- 442A3 - ancilla_sword_ceremony.asm : 54 (REP #$20) -JSL.l ConditionalPedAncilla : BRA + : NOP #4 : + +org $88C2A1 ; <- 442A3 - ancilla_sword_ceremony.asm : 54 (REP #$20) +JSL ConditionalPedAncilla : BRA + : NOP #4 : + ;-------------------------------------------------------------------------------- -org $079976 ; <- 039976 - Bank07.asm : 4009 (JSL Palette_ElectroThemedGear) -JSL.l LoadElectroPalette +org $879976 ; <- 039976 - Bank07.asm : 4009 (JSL Palette_ElectroThemedGear) +JSL LoadElectroPalette ;-------------------------------------------------------------------------------- -org $07997C ; <- 03997C - Bank07.asm : 4015 (JSL LoadActualGearPalettes) -JSL.l RestoreElectroPalette +org $87997C ; <- 03997C - Bank07.asm : 4015 (JSL LoadActualGearPalettes) +JSL RestoreElectroPalette ;================================================================================ ; Ice Floor Toggle ;-------------------------------------------------------------------------------- -org $07D234 ; <- 3D234 - Bank07.asm : 12758 (LDA $0348 : AND.b #$11 : BEQ .notWalkingOnIce) -JSL.l LoadModifiedIceFloorValue_a11 : NOP +org $87D234 ; <- 3D234 - Bank07.asm : 12758 (LDA $0348 : AND.b #$11 : BEQ .notWalkingOnIce) +JSL LoadModifiedIceFloorValue_a11 : NOP ;-------------------------------------------------------------------------------- -org $07D26E ; <- 3D26E - Bank07.asm : 12786 (LDA $0348 : AND.b #$01 : BNE BRANCH_RESH) -JSL.l LoadModifiedIceFloorValue_a01 : NOP +org $87D26E ; <- 3D26E - Bank07.asm : 12786 (LDA $0348 : AND.b #$01 : BNE BRANCH_RESH) +JSL LoadModifiedIceFloorValue_a01 : NOP ;================================================================================ ; Sword Upgrade Randomization ;-------------------------------------------------------------------------------- -org $03FC16 ; <- 1FC16 ($A8, $B8, $3D, $D0, $B8, $3D) +org $83FC16 ; <- 1FC16 ($A8, $B8, $3D, $D0, $B8, $3D) db $B1, $C6, $F9, $C9, $C6, $F9 ; data insert - 2 chests, fat fairy room -org $01E97E ; <- E97E ($280016, $250016) -dl $080116, $070116; <- E97E + +; unused item receipts +org $81E97E +dw $0116 : db $08 +dw $0116 : db $25 + ;-------------------------------------------------------------------------------- -org $06C936 ; <- 34936 - sprite_ponds.asm : 952 -PyramidFairy_BRANCH_IOTA: -org $06C948 ; <- 34948 - sprite_ponds.asm : 961 -PyramidFairy_BRANCH_GAMMA: +PyramidFairy_BRANCH_IOTA = $86C936 +PyramidFairy_BRANCH_GAMMA = $86C948 + ;-------------------------------------------------------------------------------- -org $1EE16E ; <- F616E - sprite_bomb_shop_entity.asm : 73 +org $9EE16E ; <- F616E - sprite_bomb_shop_entity.asm : 73 NOP #8 ; fix bomb shop dialog for dwarfless big bomb -org $068A14 ; <- 30A14 - sprite_prep.asm : 716 +org $868A14 ; <- 30A14 - sprite_prep.asm : 716 NOP #8 ; fix bomb shop spawn for dwarfless big bomb ;-------------------------------------------------------------------------------- -org $06B489 ; <- 33489 - sprite_smithy_bros.asm : 473 (LDA $7EF359 : CMP.b #$03 : BCS .tempered_sword_or_better) -JML.l GetSmithSword : NOP #4 +org $86B489 ; <- 33489 - sprite_smithy_bros.asm : 473 (LDA $7EF359 : CMP.b #$03 : BCS .tempered_sword_or_better) +JML GetSmithSword : NOP #4 Smithy_DoesntHaveSword: -org $06B49D ; <- 3349D - sprite_smithy_bros.asm : 485 (.tempered_sword_or_better) +org $86B49D ; <- 3349D - sprite_smithy_bros.asm : 485 (.tempered_sword_or_better) Smithy_AlreadyGotSword: ;-------------------------------------------------------------------------------- -org $06ED55 ; <- 36D55 - Bank06.asm : 4817 -JSL.l LoadSwordForDamage ; moth gold sword fix +org $86ED55 ; <- 36D55 - Bank06.asm : 4817 +JSL LoadSwordForDamage ; moth gold sword fix ;-------------------------------------------------------------------------------- -org $08C5F7 ; <- 445F7 - ancilla_receive_item.asm : 400 (LDA.b #$09 : STA $012D) +org $88C5F7 ; <- 445F7 - ancilla_receive_item.asm : 400 (LDA.b #$09 : STA $012D) NOP #5 ; remove spooky telepathy sound ;-------------------------------------------------------------------------------- -org $08C431 ; <- 44431 - ancilla_receive_item.asm : 125 (LDA $0C5E, X : CMP.b #$01 : BNE .notMasterSword2) -JSL.l MSMusicReset : NOP +org $88C431 ; <- 44431 - ancilla_receive_item.asm : 125 (LDA $0C5E, X : CMP.b #$01 : BNE .notMasterSword2) +JSL MSMusicReset : NOP ;================================================================================ ; Temporary Nerfs and Buffs ;-------------------------------------------------------------------------------- -org $06F400 ; <- 37F400 - Bank06.asm : 5963 (CLC : ADC $7EF35B) -JSL.l LoadModifiedArmorLevel : NOP +org $86F400 ; <- 37F400 - Bank06.asm : 5963 (CLC : ADC $7EF35B) +JSL LoadModifiedArmorLevel : NOP ;-------------------------------------------------------------------------------- -org $07ADDB ; <- 3ADDB - Bank07.asm : 7251 (LDA $7EF37B : TAY) -JSL.l LoadModifiedMagicLevel +org $87ADDB ; <- 3ADDB - Bank07.asm : 7251 (LDA $7EF37B : TAY) +JSL LoadModifiedMagicLevel ;-------------------------------------------------------------------------------- -org $07AE0D ; <- 3AE0D - Bank07.asm : 7279 (LDA $7EF37B : TAY) -JSL.l LoadModifiedMagicLevel +org $87AE0D ; <- 3AE0D - Bank07.asm : 7279 (LDA $7EF37B : TAY) +JSL LoadModifiedMagicLevel ;-------------------------------------------------------------------------------- -org $07AE8E ; <- 3AE8E - Bank07.asm : 7376 (LDA $7EF37B : TAY) -JSL.l LoadModifiedMagicLevel +org $87AE8E ; <- 3AE8E - Bank07.asm : 7376 (LDA $7EF37B : TAY) +JSL LoadModifiedMagicLevel ;-------------------------------------------------------------------------------- -org $08DCB9 ; <- 45CB9 - ancilla_cane_spark.asm : 256 (LDA $7EF37B : TAY) -JSL.l LoadModifiedMagicLevel +org $88DCB9 ; <- 45CB9 - ancilla_cane_spark.asm : 256 (LDA $7EF37B : TAY) +JSL LoadModifiedMagicLevel ;-------------------------------------------------------------------------------- -org $07B08B +org $87B08B LinkItem_MagicCostBaseIndices: ;-------------------------------------------------------------------------------- -org $07B096 ; <- 3B096 - Bank07.asm : 7731 (LDA LinkItem_MagicCostBaseIndices, X : CLC : ADC $7EF37B : TAX) -JSL.l LoadModifiedMagicLevel : !ADD.w LinkItem_MagicCostBaseIndices, X +org $87B096 ; <- 3B096 - Bank07.asm : 7731 (LDA LinkItem_MagicCostBaseIndices, X : CLC : ADC $7EF37B : TAX) +JSL LoadModifiedMagicLevel : !ADD.w LinkItem_MagicCostBaseIndices, X ;-------------------------------------------------------------------------------- -org $07B0D5 ; <- 3B0D5 - Bank07.asm : 7783 (LDA LinkItem_MagicCostBaseIndices, X : CLC : ADC $7EF37B : TAX) -JSL.l LoadModifiedMagicLevel : !ADD.w LinkItem_MagicCostBaseIndices, X +org $87B0D5 ; <- 3B0D5 - Bank07.asm : 7783 (LDA LinkItem_MagicCostBaseIndices, X : CLC : ADC $7EF37B : TAX) +JSL LoadModifiedMagicLevel : !ADD.w LinkItem_MagicCostBaseIndices, X ;================================================================================ ; Faster Great Fairies ;-------------------------------------------------------------------------------- -org $06C83D ; <- sprite_ponds.asm : 784 ( LDA.b #$FF : STA $0DF0, X ) +org $86C83D ; <- sprite_ponds.asm : 784 ( LDA.b #$FF : STA $0DF0, X ) db $30 ; (any faster and she appears as link is still throwing the bottle) ;-------------------------------------------------------------------------------- -org $06C896 ; <- sprite_ponds.asm : 844 ( LDA $1A : AND.b #$07 : BNE BRANCH_ALPHA ) +org $86C896 ; <- sprite_ponds.asm : 844 ( LDA $1A : AND.b #$07 : BNE BRANCH_ALPHA ) db $03 ; fade in speed. Should be power of 2 minus 1 -org $06C985 ; <- sprite_ponds.asm : 1025 ( LDA $1A : AND.b #$07 : BNE BRANCH_ALPHA ) +org $86C985 ; <- sprite_ponds.asm : 1025 ( LDA $1A : AND.b #$07 : BNE BRANCH_ALPHA ) db $03 ; fade out speed. Should be power of 2 minus 1 ;================================================================================ ; New Items ;-------------------------------------------------------------------------------- -org $07B574 ; <- 3B574 - Bank07.asm : 8519 (LDA.b #$01 : STA $02E9) -JSL.l ChestPrep : NOP #3 +org $87B574 ; <- 3B574 - Bank07.asm : 8519 (LDA.b #$01 : STA $02E9) +JSL ChestPrep : NOP #3 db $90 ; !BCC .cantOpen ;-------------------------------------------------------------------------------- -org $00D531 ; 5531 - Bank00.asm:3451 (LDY.b #$5D) -JML.l GetAnimatedSpriteGfxFile +org $80D531 ; 5531 - Bank00.asm:3451 (LDY.b #$5D) +JML GetAnimatedSpriteGfxFile -org $00D547 ; 5547 - Bank00.asm:3467 (JSR Decomp_spr_high) +org $80D547 ; 5547 - Bank00.asm:3467 (JSR Decomp_spr_high) GetAnimatedSpriteGfxFile_return: -org $00D557 ; 5557 - Bank00.asm:3486 (LDA $00 : ADC $D469, X) -JSL.l GetAnimatedSpriteBufferPointer : NOP +org $80D557 ; 5557 - Bank00.asm:3486 (LDA $00 : ADC $D469, X) +JSL GetAnimatedSpriteBufferPointer : NOP -org $0799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem) -JSL.l AddReceivedItemExpanded +org $8799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem) +JSL AddReceivedItemExpanded -org $098611 ; 48611 - ancilla_init.asm:720 (LDA .item_target_addr+0, X) -LDA.w AddReceivedItemExpanded_item_target_addr+0, X -org $098616 ; 48616 - ancilla_init.asm:721 (LDA .item_target_addr+1, X) -LDA.w AddReceivedItemExpanded_item_target_addr+1, X -org $09861F ; 4861F - ancilla_init.asm:724 (LDA .item_values, Y) -LDA.w AddReceivedItemExpanded_item_values, Y +org $898611 ; 48611 - ancilla_init.asm:720 (LDA .item_target_addr+0, X) +LDA.w ItemReceipts_target+0, X +org $898616 ; 48616 - ancilla_init.asm:721 (LDA .item_target_addr+1, X) +LDA.w ItemReceipts_target+1, X +org $89861F ; 4861F - ancilla_init.asm:724 (LDA .item_values, Y) +LDA.w ItemReceipts_value, Y -org $098624 ; 48624 - ancilla_init.asm:728 (TYA : ASL A : TAX) -JSL.l UpdateInventoryLocationExpanded -BRA + : NOP #18 : + +org $898627 ; 48627 - ancilla_init.asm:731 (LDA .item_target_addr+0, X) +LDA.w ItemReceipts_target+0, X +org $89862C ; 4862C - ancilla_init.asm:722 (LDA .item_target_addr+1, X) +LDA.w ItemReceipts_target+1, X +org $898635 ; 48635 - ancilla_init.asm:727 (LDA .item_values, Y) +LDA.w ItemReceipts_value, Y -org $0986AA ; 486AA - ancilla_init.asm:848 (LDA .item_masks, X) -LDA.w AddReceivedItemExpanded_item_masks, X +org $8986AA ; 486AA - ancilla_init.asm:848 (LDA .item_masks, X) +LDA.w DungeonItemMasks, X -org $098769 ; 48769 - ancilla_init.asm:1005 (LDA .item_graphics_indices, Y) -LDA.w AddReceivedItemExpanded_item_graphics_indices, Y +org $898769 ; 48769 - ancilla_init.asm:1005 (LDA .item_graphics_indices, Y) +LDA.w ItemReceipts_graphics, Y -org $09884D ; 4884D - ancilla_init.asm:1137 (LDA $836C, Y) -LDA.w AddReceivedItemExpanded_y_offsets, 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 +org $898811 +JSL.l SetItemRiseTimer -org $0988B7 ; 488B7 - ancilla_init.asm:1199 (LDA .wide_item_flag, Y) -LDA.w AddReceivedItemExpanded_wide_item_flag, Y +org $89884D ; 4884D - ancilla_init.asm:1137 (LDA $836C, Y) +LDA.w ItemReceipts_offset_y, Y +org $89885B ; 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 ItemReceipts_offset_x, Y -org $0988EF ; 488EF - ancilla_init.asm:1248 (LDA $836C, Y) -LDA.w AddReceivedItemExpanded_y_offsets, Y -org $098908 ; 48908 - ancilla_init.asm:1258 (LDA .x_offsets, Y) -LDA.w AddReceivedItemExpanded_x_offsets, Y +org $8988B7 ; 488B7 - ancilla_init.asm:1199 (LDA .wide_item_flag, Y) +LDA.w SpriteProperties_chest_width, Y -org $08C6C8 ; 446C8 - ancilla_receive_item.asm:538 (LDA AddReceiveItem.properties, X) +org $8988EF ; 488EF - ancilla_init.asm:1248 (LDA $836C, Y) +LDA.w ItemReceipts_offset_y, Y +org $898908 ; 48908 - ancilla_init.asm:1258 (LDA .x_offsets, Y) +LDA.w ItemReceipts_offset_x, Y + +org $88C6C8 ; 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 +org $88C6DE ; 446DE - ancilla_receive_item.asm:550 (LDA .wide_item_flag, X) +JSL.l ItemReceiptWidthCheck -org $08C6F9 ; 446F9 - ancilla_receive_item.asm:570 (LDA AddReceiveItem.properties, X) +org $88C6F9 ; 446F9 - ancilla_receive_item.asm:570 (LDA AddReceiveItem.properties, X) JSL CheckReceivedItemPropertiesBeforeLoad -org $08C70F ; 4470F - ancilla_receive_item.asm : 582 - (LDA.b #$00 : STA ($92), Y) -JSL.l LoadNarrowObject +org $8985ED ; 485ED - ancilla_init.asm:693 (LDA $02E9 : CMP.b #$01) +JSL AddReceivedItemExpandedGetItem : NOP -org $0985ED ; 485ED - ancilla_init.asm:693 (LDA $02E9 : CMP.b #$01) -JSL.l AddReceivedItemExpandedGetItem : NOP - -org $07B57D ; 3B57D - Bank07.asm:8527 (LDA Link_ReceiveItemAlternates, Y : STA $03) -JSL.l Link_ReceiveItemAlternatesExpanded_loadAlternate : NOP +org $87B57D ; 3B57D - Bank07.asm:8527 (LDA Link_ReceiveItemAlternates, Y : STA $03) +BRA Link_PerformOpenChest_no_replacement ;-------------------------------------------------------------------------------- -org $09892E ; 4892E - ancilla_init.asm:1307 (LDA BottleList, X) +org $89892E ; 4892E - ancilla_init.asm:1307 (LDA BottleList, X) LDA.w BottleListExpanded, X -org $09895C ; 4895C - ancilla_init.asm:1344 (LDA PotionList, X) +org $89895C ; 4895C - ancilla_init.asm:1344 (LDA PotionList, X) LDA.w PotionListExpanded, X ;-------------------------------------------------------------------------------- -org $06D1EB ; 351EB - sprite_absorbable.asm:364 (STA $7EF375) ; bugbug commented out until i figure out why it doesn't work +org $86D1EB ; 351EB - sprite_absorbable.asm:364 (STA $7EF375) ; bugbug commented out until i figure out why it doesn't work JSL HandleBombAbsorbtion ;================================================================================ ; Kholdstare Shell Fix ;-------------------------------------------------------------------------------- -org $00EC88 ; <- 6C88 - Bank00.asm:6671 - (LDA $7EC380, X : STA $7EC580, X) -LDA $7EC3A0, X : STA $7EC5A0, X +org $80EC88 ; <- 6C88 - Bank00.asm:6671 - (LDA $7EC380, X : STA $7EC580, X) +LDA.l $7EC3A0, X : STA.l $7EC5A0, X ;-------------------------------------------------------------------------------- -org $00ECEB ; <- 6CEB - Bank00.asm:6730 - (LDX.w #$0080) +org $80ECEB ; <- 6CEB - Bank00.asm:6730 - (LDX.w #$0080) LDX.w #$00A0 : LDA.w #$00B0 ;================================================================================ ; Potion Refill Fixes ;-------------------------------------------------------------------------------- -org $00F8FB ; <- 78FB - Bank00.asm:8507 - (JSL HUD.RefillHealth : BCC BRANCH_ALPHA) -JSL.l RefillHealth +org $80F8FB ; <- 78FB - Bank00.asm:8507 - (JSL HUD.RefillHealth : BCC BRANCH_ALPHA) +JSL RefillHealth ;-------------------------------------------------------------------------------- -org $00F911 ; <- 7911 - Bank00.asm:8528 - (JSL HUD.RefillMagicPower : BCS BRANCH_$7901) -JSL.l RefillMagic +org $80F911 ; <- 7911 - Bank00.asm:8528 - (JSL HUD.RefillMagicPower : BCS BRANCH_$7901) +JSL RefillMagic ;-------------------------------------------------------------------------------- -org $00F918 ; <- 7918 - Bank00.asm:8537 - (JSL HUD.RefillHealth : BCC .alpha) -JSL.l RefillHealth +org $80F918 ; <- 7918 - Bank00.asm:8537 - (JSL HUD.RefillHealth : BCC .alpha) +JSL RefillHealth ;-------------------------------------------------------------------------------- -org $00F922 ; <- 7922 - Bank00.asm:8543 - (JSL HUD.RefillMagicPower : BCC .beta) -JSL.l RefillMagic +org $80F922 ; <- 7922 - Bank00.asm:8543 - (JSL HUD.RefillMagicPower : BCC .beta) +JSL RefillMagic ;================================================================================ ; Early Bottle Fix ;-------------------------------------------------------------------------------- -org $09894C ; <- 4894C - ancilla_init.asm:1327 -JSL.l InitializeBottles +org $89894C ; <- 4894C - ancilla_init.asm:1327 +JSL InitializeBottles ;================================================================================ ; Agahnim Doors Fix ;-------------------------------------------------------------------------------- -org $099BBA +org $899BBA JSL FlagAgahnimDoor -org $1BBC94 ; <- DBC94 - Bank1B.asm : 201 (LDA $7EF3C5 : AND.w #$000F : CMP.w #$0003 : BCS BRANCH_EPSILON) -JSL.l LockAgahnimDoors : BNE Overworld_Entrance_BRANCH_EPSILON : NOP #6 +org $9BBC94 ; <- DBC94 - Bank1B.asm : 201 (LDA $7EF3C5 : AND.w #$000F : CMP.w #$0003 : BCS BRANCH_EPSILON) +JSL LockAgahnimDoors : BNE Overworld_Entrance_BRANCH_EPSILON : NOP #6 -org $1BBCC1 ; <- DBCC1 - Bank1B.asm : 223 (LDA $0F8004, X : AND.w #$01FF : STA $00) +org $9BBCC1 ; <- DBCC1 - Bank1B.asm : 223 (LDA $0F8004, X : AND.w #$01FF : STA $00) Overworld_Entrance_BRANCH_EPSILON: ; go here to lock doors ;-------------------------------------------------------------------------------- -; -- HOOK THIS LATER TO FUCK WITH BOSS DROPS -- -org $01C73E ; <- C73E - Bank01.asm : 10377 (LDA $01C6FC, X : JSL Sprite_SpawnFallingItem) -JSL.l DropSafeDungeon : NOP #4 +; Dungeon Drops ;-------------------------------------------------------------------------------- +org $81C50D : JSL.l CheckDungeonWorld +org $81C517 : JSL.l CheckDungeonCompletion +org $81C523 : JSL.l CheckDungeonCompletion +org $81C710 : JSL.l CheckSpawnPrize +BCS RoomTag_GetHeartForPrize_spawn_prize : BRA RoomTag_GetHeartForPrize_delete_tag +org $81C742 : JSL.l SpawnDungeonPrize +org $8799EA : JML.l SetItemPose +org $88C415 : JSL.l PendantMusicCheck +BCS Ancilla22_ItemReceipt_is_pendant : BRA Ancilla22_ItemReceipt_wait_for_music +org $88C452 : JSL.l MaybeKeepLootID : NOP #2 +org $88C61D : JSL.l AnimatePrizeCutscene : NOP +org $88C622 : BCC ItemReceipt_Animate_continue +org $88C6BA : JSL.l CheckPoseItemCoordinates +org $88CAD6 : JSL.l HandleDropSFX : NOP #2 +org $88CADC : BCC Ancilla29_MilestoneItemReceipt_skip_crystal_sfx +org $88CAE9 : JSL.l PrepPrizeTile +org $88CB23 : JSL.l PrizeDropSparkle : BCC Ancilla29_MilestoneItemReceipt_no_sparkle : NOP #2 +org $88CB97 : JSL.l PrepPrizeOAMCoordinates : BRA + : NOP #$12 : + +org $88CBFF : JSL.l PrepPrizeShadow +org $88CC6C : JSL.l HandleCrystalsField +org $88CCA6 : JSL.l PrepPrizeOAMCoordinates : NOP +org $8985FA : JSL.l SetCutsceneFlag : NOP #3 : BCC AncillaAdd_ItemReceipt_not_crystal +org $8988B2 : JSL.l SetPrizeCoords : NOP + ;================================================================================ ; Uncle / Sage Fixes - Old Man Fixes - Link's House Fixes ;-------------------------------------------------------------------------------- -org $05DA4F ; <- 2DA4F - sprite_uncle_and_priest.asm : 45 (BCC .agahnim_not_defeated) -db 80 ; BRA +org $85DA4F ; <- 2DA4F - sprite_uncle_and_priest.asm : 45 (BCC .agahnim_not_defeated) +db $80 ; BRA ;-------------------------------------------------------------------------------- -org $05DA61 ; <- 2DA61 - sprite_uncle_and_priest.asm : 51 (BEQ .priest_not_already_dead) -db 80 ; BRA +org $85DA61 ; <- 2DA61 - sprite_uncle_and_priest.asm : 51 (BEQ .priest_not_already_dead) +db $80 ; BRA ;-------------------------------------------------------------------------------- -org $05DA81 ; <- 2DA81 - sprite_uncle_and_priest.asm : 65 (BCC .dontHaveMasterSword) -db 80 ; BRA +org $85DA81 ; <- 2DA81 - sprite_uncle_and_priest.asm : 65 (BCC .dontHaveMasterSword) +db $80 ; BRA ;-------------------------------------------------------------------------------- -org $05DEF8 ; <- 2DEF8 - sprite_uncle_and_priest.asm : 917 (LDA.b #$05) +org $85DEF8 ; <- 2DEF8 - sprite_uncle_and_priest.asm : 917 (LDA.b #$05) LDA.b #$00 ;-------------------------------------------------------------------------------- ;0xFE465 -> 0x1E -org $1FE465 -db #$1E +org $9FE465 ; changes key door in tr pipes to a normal door +db $1E ;-------------------------------------------------------------------------------- ;================================================================================ ; Bomb & Arrow Capacity Updates ;-------------------------------------------------------------------------------- -org $0DDC27 ; <- 6DC27 - headsup_display.asm:151 (LDA $7EF370 : TAY) -JSL.l IncrementBombs : NOP #15 +org $8DDC27 ; <- 6DC27 - headsup_display.asm:151 (LDA $7EF370 : TAY) +JSL IncrementBombs : NOP #15 ;-------------------------------------------------------------------------------- -org $0DDC49 ; <- 6DC49 - headsup_display.asm:169 (LDA $7EF371 : TAY) -JSL.l IncrementArrows : NOP #15 +org $8DDC49 ; <- 6DC49 - headsup_display.asm:169 (LDA $7EF371 : TAY) +JSL IncrementArrows : NOP #15 ;-------------------------------------------------------------------------------- -org $1EE199 ; <- F6199 - sprite_bomb_shop_entity.asm:102 (LDA $7EF370 : PHX : TAX) -JSL.l CompareBombsToMax : NOP #11 +org $9EE199 ; <- F6199 - sprite_bomb_shop_entity.asm:102 (LDA $7EF370 : PHX : TAX) +JSL CompareBombsToMax : NOP #11 ;================================================================================ ; Bonk Items ;-------------------------------------------------------------------------------- -org $05FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F) -JSL.l GiveBonkItem : NOP #5 -org $05FC97 ; <- 2FC97 - sprite_dash_item.asm : 126 (LDA.b #$2F : JSL Sound_SetSfx3PanLong) +org $85FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F) +JSL GiveBonkItem : NOP #5 +org $85FC97 ; <- 2FC97 - sprite_dash_item.asm : 126 (LDA.b #$2F : JSL Sound_SetSfx3PanLong) NOP #6 ;-------------------------------------------------------------------------------- -org $068D39 ; <- 30D39 - sprite_prep.asm : 1435 - (LDA.b #$08 : STA $0F50, X) -JSL.l LoadBonkItemGFX +org $868D39 ; <- 30D39 - sprite_prep.asm : 1435 - (LDA.b #$08 : STA $0F50, X) +JSL LoadBonkItemGFX ;-------------------------------------------------------------------------------- -org $05FC04 ; <- 2FC04 - sprite_dash_item.asm : 38 - (JSL DashKey_Draw) -JSL.l DrawBonkItemGFX +org $85FC04 ; <- 2FC04 - sprite_dash_item.asm : 38 - (JSL DashKey_Draw) +JSL DrawBonkItemGFX ;================================================================================ ; Library Item ;-------------------------------------------------------------------------------- -org $05FD44 ; <- 2FD44 - sprite_dash_item.asm : 244 - (JSL Link_ReceiveItem) -JSL.l SetLibraryItem +org $85FD44 ; <- 2FD44 - sprite_dash_item.asm : 244 - (JSL Link_ReceiveItem) +JSL SetLibraryItem ;-------------------------------------------------------------------------------- -org $068D1B ; <- 30D1B - sprite_prep.asm : 1414 - (JSL GetAnimatedSpriteTile.variable) -JSL.l LoadLibraryItemGFX +org $868D1B ; <- 30D1B - sprite_prep.asm : 1414 - (JSL GetAnimatedSpriteTile.variable) +JSL LoadLibraryItemGFX ;-------------------------------------------------------------------------------- -org $05FC9E ; <- 2FC9E - sprite_dash_item.asm : 138 - (JSL Sprite_PrepAndDrawSingleLargeLong) -JSL.l DrawLibraryItemGFX +org $85FC9E ; <- 2FC9E - sprite_dash_item.asm : 138 - (JSL Sprite_PrepAndDrawSingleLargeLong) +JSL DrawLibraryItemGFX ;-------------------------------------------------------------------------------- -org $068D0E ; <- 30D0E - sprite_prep.asm : 1401 - (LDA $7EF34E : BEQ .book_of_mudora) -JSL.l ItemCheck_Library +org $868D0E ; <- 30D0E - sprite_prep.asm : 1401 - (LDA $7EF34E : BEQ .book_of_mudora) +JSL ItemCheck_Library ;================================================================================ ; Inventory Updates ;-------------------------------------------------------------------------------- -org $0DDF38 ; <- 6DF38 - equipment.asm : 480 -JSL.l ProcessMenuButtons +org $8DDF38 ; <- 6DF38 - equipment.asm : 480 +JSL ProcessMenuButtons BCC _equipment_497 JMP.w _equipment_544 ResetEquipment: @@ -1060,56 +1095,56 @@ JSR.w RestoreNormalMenu ; (short) RTL NOP #3 -warnpc $0DDF49 -org $0DDF49 ; <- 6DF49 - equipment.asm : 497 +warnpc $8DDF49 +org $8DDF49 ; <- 6DF49 - equipment.asm : 497 _equipment_497: ; LDA $F4 : AND.b #$08 : BEQ .notPressingUp - NO BUTTON CAPTURE -org $0DDF88 ; <- 6DF88 - equipment.asm : 544 +org $8DDF88 ; <- 6DF88 - equipment.asm : 544 _equipment_544: ;-------------------------------------------------------------------------------- -org $0DEB98 ; <- 6EB98 - equipment.asm : 1803 +org $8DEB98 ; <- 6EB98 - equipment.asm : 1803 LDA.w #$3C60 : STA $FFBE, Y ORA.w #$8000 : STA $007E, Y ORA.w #$4000 : STA $0084, Y -JSL.l AddYMarker : NOP #2 +JSL AddYMarker : NOP #2 ;-------------------------------------------------------------------------------- -org $0DF789+6 ; <- 6F789+6 (not in disassembly) - red bottle hud tile, lower right -dw #$2413 ; (Orig: #$24E3) -org $0DF789+6+8 ; green bottle hud tile, lower right -dw #$3C12 ; (Orig: #$3CE3) -org $0DF789+6+16 ; blue bottle hud tile, lower right -dw #$2C14 ; (Orig: #$2CD2) -org $0DF789+6+40 ; good bee hud tile, lower right -dw #$2815 ; (Orig: #$283A) -org $0DF8A1+6 ; <- 6F8A1+6 (not in disassembly) - green mail tile, lower right -dw #$3C4B ; (Orig: #$7C78) -org $0DF8A1+6+8 ; blue mail tile tile, lower right -dw #$2C4F ; (Orig: #$6C78) -org $0DF8A1+6+16 ; red mail tile, lower right -dw #$242F ; (Orig: #$6478) +org $8DF789+6 ; <- 6F789+6 (not in disassembly) - red bottle hud tile, lower right +dw $2413 ; (Orig: #$24E3) +org $8DF789+6+8 ; green bottle hud tile, lower right +dw $3C12 ; (Orig: #$3CE3) +org $8DF789+6+16 ; blue bottle hud tile, lower right +dw $2C14 ; (Orig: #$2CD2) +org $8DF789+6+40 ; good bee hud tile, lower right +dw $2815 ; (Orig: #$283A) +org $8DF8A1+6 ; <- 6F8A1+6 (not in disassembly) - green mail tile, lower right +dw $3C4B ; (Orig: #$7C78) +org $8DF8A1+6+8 ; blue mail tile tile, lower right +dw $2C4F ; (Orig: #$6C78) +org $8DF8A1+6+16 ; red mail tile, lower right +dw $242F ; (Orig: #$6478) ;-------------------------------------------------------------------------------- -org $0DDE9F ; <- 6DE9F equipment.asm:300 - LDA.b #$0A : STA $0200 +org $8DDE9F ; <- 6DE9F equipment.asm:300 - LDA.b #$0A : STA $0200 LDA.b #$04 ;-------------------------------------------------------------------------------- -org $0DDE59 ; <- 6DE59 equipment.asm:247 - REP #$20 -JSL.l BringMenuDownEnhanced : RTS +org $8DDE59 ; <- 6DE59 equipment.asm:247 - REP #$20 +JSL BringMenuDownEnhanced : RTS ;-------------------------------------------------------------------------------- -org $0DDFBC ; <- 6DFBC equipment.asm:599 - LDA $EA : ADD.w #$0008 : STA $EA : SEP #$20 : BNE .notDoneScrolling -JSL.l RaiseHudMenu : NOP #3 +org $8DDFBC ; <- 6DFBC equipment.asm:599 - LDA $EA : ADD.w #$0008 : STA $EA : SEP #$20 : BNE .notDoneScrolling +JSL RaiseHudMenu : NOP #3 ;-------------------------------------------------------------------------------- -org $0DDE3D ; <- 6DE3D equipment.asm:217 - BNE .equippedItemIsntBottle +org $8DDE3D ; <- 6DE3D equipment.asm:217 - BNE .equippedItemIsntBottle db $80 ; BRA ;-------------------------------------------------------------------------------- -org $0DDF9A ; <- 6DF9A - equipment.asm : 554 -JSL.l OpenBottleMenu : NOP +org $8DDF9A ; <- 6DF9A - equipment.asm : 554 +JSL OpenBottleMenu : NOP ;-------------------------------------------------------------------------------- -org $0DE12D ; <- 6E12D - equipment.asm : 828 -JSL.l CloseBottleMenu +org $8DE12D ; <- 6E12D - equipment.asm : 828 +JSL CloseBottleMenu ;-------------------------------------------------------------------------------- -org $0DDF1E ; <- 6DF1E - equipment.asm : 462 - LDA $F4 : AND.b #$10 : BEQ .dontLeaveMenu -JSL.l CheckCloseItemMenu +org $8DDF1E ; <- 6DF1E - equipment.asm : 462 - LDA $F4 : AND.b #$10 : BEQ .dontLeaveMenu +JSL CheckCloseItemMenu ;-------------------------------------------------------------------------------- -org $0DEE70 ; <- 6EE70 - equipment.asm : 2137 -JSL.l PrepItemScreenBigKey : NOP +org $8DEE70 ; <- 6EE70 - equipment.asm : 2137 +JSL PrepItemScreenBigKey : NOP ;-------------------------------------------------------------------------------- org $0DDEA5 ; LDA.b Joy1A_New : BEQ .wait_for_button JSL.l HandleEmptyMenu : RTS @@ -1118,111 +1153,111 @@ JML.l MaybeDrawEquippedItem : NOP #2 org $0DE363 ; LDA.b #$04 : STA.w SubModuleInterface JSL.l RestoreMenu_SetSubModule : NOP ;-------------------------------------------------------------------------------- -org $08D395 ; <- 45395 - ancilla_bird_travel_intro.asm : 253 +org $88D395 ; <- 45395 - ancilla_bird_travel_intro.asm : 253 JSL.l UpgradeFlute : NOP #2 ;-------------------------------------------------------------------------------- -org $05E4D7 ; <- 2E4D7 - sprite_witch.asm : 213 -JSL.l RemoveMushroom : NOP #2 +org $85E4D7 ; <- 2E4D7 - sprite_witch.asm : 213 +JSL RemoveMushroom : NOP #2 ;-------------------------------------------------------------------------------- -org $05F55F ; <- 2F55F - sprite_potion_shop.asm : 59 -JSL.l LoadPowder +org $85F55F ; <- 2F55F - sprite_potion_shop.asm : 59 +JSL LoadPowder ;-------------------------------------------------------------------------------- -org $05F681 ; <- 2F681 - sprite_potion_shop.asm : 234 -JSL.l DrawPowder : RTS +org $85F681 ; <- 2F681 - sprite_potion_shop.asm : 234 +JSL DrawPowder : RTS NOP #8 ;-------------------------------------------------------------------------------- -org $05F65D ; <- 2F65D - sprite_potion_shop.asm : 198 -JSL.l CollectPowder : NOP #5 +org $85F65D ; <- 2F65D - sprite_potion_shop.asm : 198 +JSL CollectPowder : NOP #5 ;-------------------------------------------------------------------------------- -org $05EE5F ; <- 2EE5F - sprite_mushroom.asm : 30 -JSL.l LoadMushroom : NOP +org $85EE5F ; <- 2EE5F - sprite_mushroom.asm : 30 +JSL LoadMushroom : NOP ;-------------------------------------------------------------------------------- -org $05EE78 ; <- 2EE78 - sprite_mushroom.asm : 58 -JSL.l DrawMushroom +org $85EE78 ; <- 2EE78 - sprite_mushroom.asm : 58 +JSL DrawMushroom ;-------------------------------------------------------------------------------- -org $05EE97 ; <- 2EE97 - sprite_mushroom.asm : 81 +org $85EE97 ; <- 2EE97 - sprite_mushroom.asm : 81 NOP #14 ;-------------------------------------------------------------------------------- -org $07A36F ; <- 3A36F - Bank07.asm : 5679 +org $87A36F ; <- 3A36F - Bank07.asm : 5679 NOP #5 -org $07A379 ; <- 3A379 - Bank07.asm : 5687 -JSL.l SpawnHauntedGroveItem +org $87A379 ; <- 3A379 - Bank07.asm : 5687 +JSL SpawnHauntedGroveItem ;-------------------------------------------------------------------------------- -org $07A3A2 ; 3A3A2 - Bank07.asm : 5720 - JSL DiggingGameGuy_AttemptPrizeSpawn -JSL.l SpawnShovelItem +org $87A3A2 ; 3A3A2 - Bank07.asm : 5720 - JSL DiggingGameGuy_AttemptPrizeSpawn +JSL SpawnShovelItem BRA _Bank07_5726 -org $07A3AB ; 3A3AB - Bank07.asm : 5726 - LDA.b #$12 : JSR Player_DoSfx2 +org $87A3AB ; 3A3AB - Bank07.asm : 5726 - LDA.b #$12 : JSR Player_DoSfx2 _Bank07_5726: ;-------------------------------------------------------------------------------- -org $079A0E ; 39A0E - Bank07.asm : 4117 - JSL HUD.RefreshIconLong -JSL.l Link_ReceiveItem_HUDRefresh +org $879A0E ; 39A0E - Bank07.asm : 4117 - JSL HUD.RefreshIconLong +JSL Link_ReceiveItem_HUDRefresh ;================================================================================ ; Swordless Mode ;-------------------------------------------------------------------------------- -org $07A49F ; <- 3A49F - Bank07.asm:5903 (LDA $7EF359 : INC A : AND.b #$FE : BEQ .cant_cast_play_sound) - Ether -JSL.l CheckMedallionSword +org $87A49F ; <- 3A49F - Bank07.asm:5903 (LDA $7EF359 : INC A : AND.b #$FE : BEQ .cant_cast_play_sound) - Ether +JSL CheckMedallionSword ;-------------------------------------------------------------------------------- -org $07A574 ; <- 3A574 - Bank07.asm:6025 (LDA $7EF359 : INC A : AND.b #$FE : BEQ BRANCH_BETA) - Bombos -JSL.l CheckMedallionSword +org $87A574 ; <- 3A574 - Bank07.asm:6025 (LDA $7EF359 : INC A : AND.b #$FE : BEQ BRANCH_BETA) - Bombos +JSL CheckMedallionSword ;-------------------------------------------------------------------------------- -org $07A656 ; <- 3A656 - Bank07.asm:6133 (LDA $7EF359 : INC A : AND.b #$FE : BEQ BRANCH_BETA) - Quake -JSL.l CheckMedallionSword +org $87A656 ; <- 3A656 - Bank07.asm:6133 (LDA $7EF359 : INC A : AND.b #$FE : BEQ BRANCH_BETA) - Quake +JSL CheckMedallionSword ;-------------------------------------------------------------------------------- -org $05F3A0 ; <- 2F3A0 - sprite_medallion_tablet.asm:240 (LDA $7EF359 : BMI .zeta) -JSL.l CheckTabletSword +org $85F3A0 ; <- 2F3A0 - sprite_medallion_tablet.asm:240 (LDA $7EF359 : BMI .zeta) +JSL CheckTabletSword ;-------------------------------------------------------------------------------- -org $05F40A ; <- 2F40A - sprite_medallion_tablet.asm:303 (LDA $7EF359 : BMI .show_hylian_script) -JSL.l CheckTabletSword +org $85F40A ; <- 2F40A - sprite_medallion_tablet.asm:303 (LDA $7EF359 : BMI .show_hylian_script) +JSL CheckTabletSword ;-------------------------------------------------------------------------------- -org $1DF086 ; <- EF086 - sprite_evil_barrier.asm:303 (LDA $7EF359 : CMP.b #$02 : BCS .anozap_from_player_attack) -JSL.l GetSwordLevelForEvilBarrier +org $9DF086 ; <- EF086 - sprite_evil_barrier.asm:303 (LDA $7EF359 : CMP.b #$02 : BCS .anozap_from_player_attack) +JSL GetSwordLevelForEvilBarrier ;-------------------------------------------------------------------------------- ;================================================================================ ; Medallion Tablets ;-------------------------------------------------------------------------------- -org $05F274 ; <- 2F274 -JSL.l ItemCheck_BombosTablet +org $85F274 ; <- 2F274 +JSL ItemCheck_BombosTablet ;-------------------------------------------------------------------------------- -org $05F285 ; <- 2F285 -JSL.l ItemCheck_EtherTablet +org $85F285 ; <- 2F285 +JSL ItemCheck_EtherTablet ;-------------------------------------------------------------------------------- -org $07859F ; <- 3859F - Bank07.asm : 965 (JSL AddPendantOrCrystal) +org $87859F ; <- 3859F - Bank07.asm : 965 (JSL AddPendantOrCrystal) JSL SpawnTabletItem -org $07862A ; <- 3862A - Bank07.asm : 1064 (JSL AddPendantOrCrystal) +org $87862A ; <- 3862A - Bank07.asm : 1064 (JSL AddPendantOrCrystal) JSL SpawnTabletItem ;-------------------------------------------------------------------------------- -org $05EF1E ; LDA.l $7EF280,X : AND #$40 +org $85EF1E ; LDA.l $7EF280,X : AND #$40 JSL CheckTabletItem : NOP #2 ;================================================================================ ; Medallion Entrances ;-------------------------------------------------------------------------------- -org $08B504 ; <- 43504 - ancilla_bombos_spell.asm : 671 -JSL.l MedallionTrigger_Bombos : NOP +org $88B504 ; <- 43504 - ancilla_bombos_spell.asm : 671 +JSL MedallionTrigger_Bombos : NOP ;-------------------------------------------------------------------------------- -org $08ACC8 ; <- 42CC8 - ancilla_ether_spell.asm : 350 -JSL.l MedallionTrigger_Ether +org $88ACC8 ; <- 42CC8 - ancilla_ether_spell.asm : 350 +JSL MedallionTrigger_Ether JMP _ancilla_ether_spell_363 -warnpc $08ACE6 -org $08ACE6 ; <- 42CE6 - ancilla_quake_spell.asm : 363 +warnpc $88ACE6 +org $88ACE6 ; <- 42CE6 - ancilla_quake_spell.asm : 363 _ancilla_ether_spell_363: ;-------------------------------------------------------------------------------- -org $08B6EA ; <- 436EA - ancilla_quake_spell.asm : 67 -JSL.l MedallionTrigger_Quake +org $88B6EA ; <- 436EA - ancilla_quake_spell.asm : 67 +JSL MedallionTrigger_Quake JMP _ancilla_quake_spell_83 Ancilla_CheckIfEntranceTriggered: JSR $F856 RTL -warnpc $08B708 -org $08B708 ; <- 43708 - ancilla_quake_spell.asm : 83 +warnpc $88B708 +org $88B708 ; <- 43708 - ancilla_quake_spell.asm : 83 _ancilla_quake_spell_83: ;================================================================================ ; Animated Entrances ;-------------------------------------------------------------------------------- -org $1BCAC4 ; <- Bank1B.asm : 1537 (STA $02E4 ; Link can't move.) +org $9BCAC4 ; <- Bank1B.asm : 1537 (STA $02E4 ; Link can't move.) JSL AnimatedEntranceFix BNE + RTL @@ -1232,545 +1267,503 @@ BNE + ;================================================================================ ; Big & Great Fairies ;-------------------------------------------------------------------------------- -org $1DC475 ; <- EC475 - sprite_big_fairie.asm : 70 (LDA.w #$00A0 : ADD $7EF372 : STA $7EF372) -JSL.l RefillHealthPlusMagic : NOP #8 +org $9DC475 ; <- EC475 - sprite_big_fairie.asm : 70 (LDA.w #$00A0 : ADD $7EF372 : STA $7EF372) +JSL RefillHealthPlusMagic : NOP #8 -org $1DC489 ; <- EC489 - sprite_big_fairie.asm : 88 (LDA $7EF36D : CMP $7EF36C : BNE .player_hp_not_full_yet) -NOP #4 : JSL.l CheckFullHealth +org $9DC489 ; <- EC489 - sprite_big_fairie.asm : 88 (LDA $7EF36D : CMP $7EF36C : BNE .player_hp_not_full_yet) +NOP #4 : JSL CheckFullHealth ;-------------------------------------------------------------------------------- ;================================================================================ ; RNG Fixes ;-------------------------------------------------------------------------------- -org $1DFD9E ; <- EFD9E - sprite_diggin_guy.asm : 307 +org $9DFD9E ; <- EFD9E - sprite_diggin_guy.asm : 307 NOP #8 ;-------------------------------------------------------------------------------- -org $1DFD67 ; <- EFD67 - sprite_diggin_guy.asm : 242 -JSL.l RigDigRNG +org $9DFD67 ; <- EFD67 - sprite_diggin_guy.asm : 242 +JSL RigDigRNG ;-------------------------------------------------------------------------------- -org $01EE94 ; <- EE94 - Bank01.asm : 14121 -JSL.l RigChestRNG -org $01EEF5 ; <- EEF5 - Bank01.asm -JSL.l FixChestCounterForChestGame -org $01EEFD ; <- EEFD - Bank01.asm -JSL.l FixChestCounterForChestGame +org $81EE94 ; <- EE94 - Bank01.asm : 14121 +JSL RigChestRNG +org $81EEF5 ; <- EEF5 - Bank01.asm +JSL FixChestCounterForChestGame +org $81EEFD ; <- EEFD - Bank01.asm +JSL FixChestCounterForChestGame ;-------------------------------------------------------------------------------- -org $1ED63E ; <- F563E - sprite_agahnim.asm +org $9ED63E ; <- F563E - sprite_agahnim.asm JSL RNG_Agahnim1 -org $1ED6EF ; <- F56EF - sprite_agahnim.asm +org $9ED6EF ; <- F56EF - sprite_agahnim.asm JSL RNG_Agahnim1 -org $1D91E3 ; <- E91E3 - sprite_ganon.asm +org $9D91E3 ; <- E91E3 - sprite_ganon.asm JSL RNG_Ganon_Extra_Warp -org $1D9488 ; <- E9488 - sprite_ganon.asm +org $9D9488 ; <- E9488 - sprite_ganon.asm JSL RNG_Ganon ;-------------------------------------------------------------------------------- -org $05A3F4 ; <- 2A3F4 - sprite_lanmola.asm : 112 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Lanmolas1 -org $05A401 ; <- 2A401 - sprite_lanmola.asm : 116 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Lanmolas1 -org $05A4FA ; <- 2A4FA - sprite_lanmola.asm : 241 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Lanmolas1 -org $05A507 ; <- 2A507 - sprite_lanmola.asm : 245 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Lanmolas1 +org $85A3F4 ; <- 2A3F4 - sprite_lanmola.asm : 112 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Lanmolas1 +org $85A401 ; <- 2A401 - sprite_lanmola.asm : 116 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Lanmolas1 +org $85A4FA ; <- 2A4FA - sprite_lanmola.asm : 241 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Lanmolas1 +org $85A507 ; <- 2A507 - sprite_lanmola.asm : 245 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Lanmolas1 ;-------------------------------------------------------------------------------- -org $1DD817 ; <- ED817 - sprite_giant_moldorm.asm : 187 (JSL GetRandomInt : AND.b #$02 : DEC A : STA $0EB0, X) -JSL.l RNG_Moldorm1 -org $1DD821 ; <- ED821 - sprite_giant_moldorm.asm : 189 (JSL GetRandomInt : AND.b #$1F : ADC.b #$20 : STA !timer_0, X) -JSL.l RNG_Moldorm1 -org $1DD832 ; <- ED832 - sprite_giant_moldorm.asm : 203 (JSL GetRandomInt : AND.b #$0F : ADC.b #$08 : STA !timer_0, X) -JSL.l RNG_Moldorm1 +org $9DD817 ; <- ED817 - sprite_giant_moldorm.asm : 187 (JSL GetRandomInt : AND.b #$02 : DEC A : STA $0EB0, X) +JSL RNG_Moldorm1 +org $9DD821 ; <- ED821 - sprite_giant_moldorm.asm : 189 (JSL GetRandomInt : AND.b #$1F : ADC.b #$20 : STA !timer_0, X) +JSL RNG_Moldorm1 +org $9DD832 ; <- ED832 - sprite_giant_moldorm.asm : 203 (JSL GetRandomInt : AND.b #$0F : ADC.b #$08 : STA !timer_0, X) +JSL RNG_Moldorm1 ;-------------------------------------------------------------------------------- -org $1E81A9 ; <- F01A9 - sprite_helmasaur_king.asm : 247 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Helmasaur -org $1E8262 ; <- F0262 - sprite_helmasaur_king.asm : 373 (JSL GetRandomInt : AND.b #$01 : BEQ BRANCH_BETA) -JSL.l RNG_Helmasaur -org $1DEEE1 ; <- EEEE1 - sprite_helmasaur_fireball.asm : 236 (JSL GetRandomInt : STA $0FB6) -JSL.l RNG_Helmasaur +org $9E81A9 ; <- F01A9 - sprite_helmasaur_king.asm : 247 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Helmasaur +org $9E8262 ; <- F0262 - sprite_helmasaur_king.asm : 373 (JSL GetRandomInt : AND.b #$01 : BEQ BRANCH_BETA) +JSL RNG_Helmasaur +org $9DEEE1 ; <- EEEE1 - sprite_helmasaur_fireball.asm : 236 (JSL GetRandomInt : STA $0FB6) +JSL RNG_Helmasaur ;-------------------------------------------------------------------------------- -org $1EB5F7 ; <- F35F7 - sprite_arrghus.asm : 328 (JSL GetRandomInt : AND.b #$3F : ADC.b #$30 : STA $0DF0, X) -JSL.l RNG_Arrghus +org $9EB5F7 ; <- F35F7 - sprite_arrghus.asm : 328 (JSL GetRandomInt : AND.b #$3F : ADC.b #$30 : STA $0DF0, X) +JSL RNG_Arrghus ;-------------------------------------------------------------------------------- -org $1EBF4D ; <- F3F4D - sprite_mothula.asm : 180 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Mothula -org $1EBF60 ; <- F3F60 - sprite_mothula.asm : 187 (JSL GetRandomInt : AND.b #$1F : ADC.b #$40 : STA $0DF0, X) -JSL.l RNG_Mothula -org $1EBFBE ; <- F3FBE - sprite_mothula.asm : 261 (JSL GetRandomInt : AND.b #$1F : ORA.b #$40 : STA !beam_timer, X) -JSL.l RNG_Mothula -org $1EC095 ; <- F4095 - sprite_mothula.asm : 373 (JSL GetRandomInt : AND.b #$1F : CMP #$1E : BCC .already_in_range) -JSL.l RNG_Mothula +org $9EBF4D ; <- F3F4D - sprite_mothula.asm : 180 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Mothula +org $9EBF60 ; <- F3F60 - sprite_mothula.asm : 187 (JSL GetRandomInt : AND.b #$1F : ADC.b #$40 : STA $0DF0, X) +JSL RNG_Mothula +org $9EBFBE ; <- F3FBE - sprite_mothula.asm : 261 (JSL GetRandomInt : AND.b #$1F : ORA.b #$40 : STA !beam_timer, X) +JSL RNG_Mothula +org $9EC095 ; <- F4095 - sprite_mothula.asm : 373 (JSL GetRandomInt : AND.b #$1F : CMP #$1E : BCC .already_in_range) +JSL RNG_Mothula ;-------------------------------------------------------------------------------- -org $1E957A ; <- F157A - sprite_kholdstare.asm : 209 (JSL GetRandomInt : AND.b #$3F : ADC.b #$20 : STA $0DF0, X) -JSL.l RNG_Kholdstare -org $1E95F0 ; <- F15F0 - sprite_kholdstare.asm : 289 (JSL GetRandomInt : AND.b #$3F : ADC.b #$60 : STA $0DF0, X) -JSL.l RNG_Kholdstare -org $1E95FB ; <- F15FB - sprite_kholdstare.asm : 291 (JSL GetRandomInt : PHA : AND.b #$03 : TAY) -JSL.l RNG_Kholdstare -org $1E96C9 ; <- F16C9 - sprite_kholdstare.asm : 453 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Kholdstare -org $1E96E5 ; <- F16E5 - sprite_kholdstare.asm : 458 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Kholdstare -org $1E97D5 ; <- F17D5 - sprite_kholdstare.asm : 605 (JSL GetRandomInt : AND.b #$04 : STA $0D) -JSL.l RNG_Kholdstare +org $9E957A ; <- F157A - sprite_kholdstare.asm : 209 (JSL GetRandomInt : AND.b #$3F : ADC.b #$20 : STA $0DF0, X) +JSL RNG_Kholdstare +org $9E95F0 ; <- F15F0 - sprite_kholdstare.asm : 289 (JSL GetRandomInt : AND.b #$3F : ADC.b #$60 : STA $0DF0, X) +JSL RNG_Kholdstare +org $9E95FB ; <- F15FB - sprite_kholdstare.asm : 291 (JSL GetRandomInt : PHA : AND.b #$03 : TAY) +JSL RNG_Kholdstare +org $9E96C9 ; <- F16C9 - sprite_kholdstare.asm : 453 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Kholdstare +org $9E96E5 ; <- F16E5 - sprite_kholdstare.asm : 458 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Kholdstare +org $9E97D5 ; <- F17D5 - sprite_kholdstare.asm : 605 (JSL GetRandomInt : AND.b #$04 : STA $0D) +JSL RNG_Kholdstare ;-------------------------------------------------------------------------------- -org $1DE5E4 ; <- EE5E4 - sprite_vitreous.asm : 207 (JSL GetRandomInt : AND.b #$0F : TAY) -JSL.l RNG_Vitreous -org $1DE626 ; <- EE626 - sprite_vitreous.asm : 255 (JSL GetRandomInt : AND.b #$07 : STA $0D90, Y) -JSL.l RNG_Vitreous +org $9DE5E4 ; <- EE5E4 - sprite_vitreous.asm : 207 (JSL GetRandomInt : AND.b #$0F : TAY) +JSL RNG_Vitreous +org $9DE626 ; <- EE626 - sprite_vitreous.asm : 255 (JSL GetRandomInt : AND.b #$07 : STA $0D90, Y) +JSL RNG_Vitreous ;-------------------------------------------------------------------------------- -org $1DB16C ; <- EB16C - sprite_trinexx.asm : 530 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Trinexx -org $1DB186 ; <- EB186 - sprite_trinexx.asm : 535 (JSL GetRandomInt : AND.b #$07 : TAY) -JSL.l RNG_Trinexx -org $1DB25E ; <- EB25E - sprite_trinexx.asm : 643 (JSL GetRandomInt : AND.b #$03 : TAY : CMP $00 : BEQ BRANCH_ALPHA) -JSL.l RNG_Trinexx -org $1DB28D ; <- EB28D - sprite_trinexx.asm : 661 (JSL GetRandomInt : AND.b #$03 : CMP.b #$01 : TYA : BCS BRANCH_GAMMA) -JSL.l RNG_Trinexx -org $1DB9B0 ; <- EB9B0 - sprite_sidenexx.asm : 165 (JSL GetRandomInt : AND.b #$07 : INC A : CMP.b #$05 : BCS BRANCH_ALPHA) -JSL.l RNG_Trinexx -org $1DB9CC ; <- EB9CC - sprite_sidenexx.asm : 175 (JSL GetRandomInt : LSR A : BCS BRANCH_ALPHA) -JSL.l RNG_Trinexx -org $1DBA5D ; <- EBA5D - sprite_sidenexx.asm : 270 (JSL GetRandomInt : AND.b #$0F : STA $0DF0, X) -JSL.l RNG_Trinexx -org $1DBAB1 ; <- EBAB1 - sprite_sidenexx.asm : 314 (JSL GetRandomInt : AND.b #$0F : LDY.b #$00 : SUB.b #$03) -JSL.l RNG_Trinexx -org $1DBAC3 ; <- EBAC3 - sprite_sidenexx.asm : 323 (JSL GetRandomInt : AND.b #$0F : ADD.b #$0C : STA $02 : STZ $03) -JSL.l RNG_Trinexx +org $9DB16C ; <- EB16C - sprite_trinexx.asm : 530 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Trinexx +org $9DB186 ; <- EB186 - sprite_trinexx.asm : 535 (JSL GetRandomInt : AND.b #$07 : TAY) +JSL RNG_Trinexx +org $9DB25E ; <- EB25E - sprite_trinexx.asm : 643 (JSL GetRandomInt : AND.b #$03 : TAY : CMP $00 : BEQ BRANCH_ALPHA) +JSL RNG_Trinexx +org $9DB28D ; <- EB28D - sprite_trinexx.asm : 661 (JSL GetRandomInt : AND.b #$03 : CMP.b #$01 : TYA : BCS BRANCH_GAMMA) +JSL RNG_Trinexx +org $9DB9B0 ; <- EB9B0 - sprite_sidenexx.asm : 165 (JSL GetRandomInt : AND.b #$07 : INC A : CMP.b #$05 : BCS BRANCH_ALPHA) +JSL RNG_Trinexx +org $9DB9CC ; <- EB9CC - sprite_sidenexx.asm : 175 (JSL GetRandomInt : LSR A : BCS BRANCH_ALPHA) +JSL RNG_Trinexx +org $9DBA5D ; <- EBA5D - sprite_sidenexx.asm : 270 (JSL GetRandomInt : AND.b #$0F : STA $0DF0, X) +JSL RNG_Trinexx +org $9DBAB1 ; <- EBAB1 - sprite_sidenexx.asm : 314 (JSL GetRandomInt : AND.b #$0F : LDY.b #$00 : SUB.b #$03) +JSL RNG_Trinexx +org $9DBAC3 ; <- EBAC3 - sprite_sidenexx.asm : 323 (JSL GetRandomInt : AND.b #$0F : ADD.b #$0C : STA $02 : STZ $03) +JSL RNG_Trinexx ;-------------------------------------------------------------------------------- org $6F9B8 ; <- 379B8 - bank06.asm : 6693 (JSL GetRandomInt : PLY : AND $FA5C, Y : BNE BRANCH_MU) -JSL.l RNG_Enemy_Drops +JSL RNG_Enemy_Drops ;================================================================================ ; HUD Changes ;-------------------------------------------------------------------------------- -org $0DFC4C ; <- 6FC4C - headsup_display.asm : 836 (LDA $7EF36E : AND.w #$00FF : ADD.w #$0007 : AND.w #$FFF8 : TAX) -JML.l OnDrawHud : NOP #197 +org $8DFDCB +JSL UpdateHearts +RTS +org $8DF191 : JSL.l ColorAnimatedHearts : BRA + : NOP #7 : + + +org $8DFC4C ; <- 6FC4C - headsup_display.asm : 836 (LDA $7EF36E : AND.w #$00FF : ADD.w #$0007 : AND.w #$FFF8 : TAX) +JML OnDrawHud : NOP #197 ; why? it's not hurting anyone lol ReturnFromOnDrawHud: SEP #$30 LDX.b #$FF ; vanilla hud code ends with #$FF in X, and it's required for unknown reasons. -org $0DFC37 ; <- 6FC37 - headsup_display.asm : 828 (LDA.w #$28F7) -JSL.l DrawMagicHeader +org $8DFC37 ; <- 6FC37 - headsup_display.asm : 828 (LDA.w #$28F7) +JSL DrawMagicHeader BRA + : NOP #15 : + ;-------------------------------------------------------------------------------- -org $0DFB29 ; <- headsup_display.asm : 688 (LDA.b #$86 : STA $7EC71E) -JSL.l DrawHUDArrows : BRA + - NOP #18 -+ +org $81CF67 ; <- CF67 - Bank01.asm : 11625 (STA $7EF36F) +JSL DecrementSmallKeys ;-------------------------------------------------------------------------------- -org $01CF67 ; <- CF67 - Bank01.asm : 11625 (STA $7EF36F) -JSL.l DecrementSmallKeys -;-------------------------------------------------------------------------------- -org $0DED04 ; <- 6ED04 - equipment.asm : 1963 (REP #$30) -JSL.l DrawHUDDungeonItems +org $8DED04 ; <- 6ED04 - equipment.asm : 1963 (REP #$30) +JSL DrawHUDDungeonItems ;-------------------------------------------------------------------------------- ; Insert our version of the hud tilemap -org $0DFA96 ; <- 6FA96 - headsup_display.asm : 626 (LDX.w #.hud_tilemap) -LDX.w #HUD_TileMap -org $0DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700) -MVN $217E +; Commented out because incorporated in hook in special_weapons.asm +; org $8DFA96 ; <- 6FA96 - headsup_display.asm : 626 (LDX.w #.hud_tilemap) +; LDX.w #HUD_TileMap +; org $8DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700) +; MVN $A17E ;-------------------------------------------------------------------------------- -org $0DFB1F ; 6FB1F - headsup_display.asm : 681 (LDA $7EF340 : BEQ .hastNoBow) -JSL.l CheckHUDSilverArrows +org $8DFB1F : JSL CheckHUDSilverArrows +org $8DFB29 : BRA UpdateHUDBuffer_update_item_check_arrows +;-------------------------------------------------------------------------------- +org $8DF1AB : JSR.w RebuildHUD_update +org $8DDFC8 : JSR.w RebuildHUD_update +org $8DDB88 ; Don't rebuild HUD twice on icon refresh +NOP #3 ; Not sure why this is here +;-------------------------------------------------------------------------------- +org $87A205 : JSL.l RebuildHUD_update_long +org $8AEF62 : JSL.l RebuildHUD_update_long +org $87A1CF : JSL.l RebuildHUD_update_long +org $87A235 : JSL.l RebuildHUD_update_long +;-------------------------------------------------------------------------------- +org $8DFFE1 +RebuildHUD_update_long: +JSR.w RebuildHUD_update : RTL +warnpc $8E8000 +;-------------------------------------------------------------------------------- +org $8DEDE8 +JSL.l DrawHeartPiecesMenu : BRA DrawEquipment_in_a_dungeon ;================================================================================ ; 300 Rupee NPC ;-------------------------------------------------------------------------------- -org $1EF060 ; <- F7060 - sprite_shopkeeper.asm:242 (INC $0D80, X) -JSL.l Set300RupeeNPCItem : NOP +org $9EF060 ; <- F7060 - sprite_shopkeeper.asm:242 (INC $0D80, X) +JSL Set300RupeeNPCItem : NOP ;================================================================================ ; Tree Kid Fix ;-------------------------------------------------------------------------------- -org $06B12B ; <- 3312B - tree status set - 418 - LDA NpcFlagsVanilla : ORA.b #$08 : STA NpcFlagsVanilla +org $86B12B ; <- 3312B - tree status set - 418 - LDA NpcFlagsVanilla : ORA.b #$08 : STA NpcFlagsVanilla LDA.l NpcFlagsVanilla : AND.b #$F7 : STA.l NpcFlagsVanilla ; unset arboration instead of setting it ;-------------------------------------------------------------------------------- -org $06B072 ; <- 33072 - FluteAardvark_InitialStateFromFluteState - 418 : dw FluteAardvark_AlreadyArborated -db #$8B +org $86B072 ; <- 33072 - FluteAardvark_InitialStateFromFluteState - 418 : dw FluteAardvark_AlreadyArborated +dw $06B08B ;================================================================================ ;================================================================================ ; Glitched Mode Fixes ;-------------------------------------------------------------------------------- -org $0691AC ; <- 311AC - sprite_prep.asm:2453 (LDY $0FFF) -JSL.l GetAgahnimPalette : NOP #2 +org $8691AC ; <- 311AC - sprite_prep.asm:2453 (LDY $0FFF) +JSL GetAgahnimPalette : NOP #2 ;-------------------------------------------------------------------------------- -org $06F0DD ; <- 370DD - Bank06.asm:5399 (STA $0BA0, X) -JSL.l GetAgahnimDeath : NOP #2 +org $86F0DD ; <- 370DD - Bank06.asm:5399 (STA $0BA0, X) +JSL GetAgahnimDeath : NOP #2 ;-------------------------------------------------------------------------------- -org $1ED4E6 ; <- F54E6 - sprite_agahnim.asm:314 (LDY $0FFF) -JSL.l GetAgahnimType : NOP #2 +org $9ED4E6 ; <- F54E6 - sprite_agahnim.asm:314 (LDY $0FFF) +JSL GetAgahnimType : NOP #2 ;-------------------------------------------------------------------------------- -org $1ED577 ; <- F5577 - sprite_agahnim.asm:418 (PHX) -JML.l GetAgahnimSlot +org $9ED577 ; <- F5577 - sprite_agahnim.asm:418 (PHX) +JML GetAgahnimSlot GetAgahnimSlotReturn: ;-------------------------------------------------------------------------------- -org $1ED678 ; <- F5678 - sprite_agahnim.asm:587 (INC $0E30, X) -NOP #2 : JSL.l GetAgahnimLightning +org $9ED678 ; <- F5678 - sprite_agahnim.asm:587 (INC $0E30, X) +NOP #2 : JSL GetAgahnimLightning ;-------------------------------------------------------------------------------- -org $0287E0 ; <- 107E0 - Bnak02.asm:1507 (LDA $0112 : ORA $02E4 : ORA $0FFC : BEQ .allowJoypadInput) -JSL.l AllowJoypadInput : NOP #5 +org $8287E0 ; <- 107E0 - Bnak02.asm:1507 (LDA $0112 : ORA $02E4 : ORA $0FFC : BEQ .allowJoypadInput) +JSL AllowJoypadInput : BRA ++ : NOP #3 : ++ ;================================================================================ ; Half Magic Bat ;-------------------------------------------------------------------------------- -org $05FBD3 ; <- 2FBD3 - sprite_mad_batter.asm:209 - (STA $7EF37B) -JSL.l GetMagicBatItem +org $85FBD3 ; <- 2FBD3 - sprite_mad_batter.asm:209 - (STA $7EF37B) +JSL GetMagicBatItem ;================================================================================ ; MSU Music ;-------------------------------------------------------------------------------- -org $0080D7 ; <- D7 - Bank00.asm:172 (SEP #$30) +org $8080D7 ; <- D7 - Bank00.asm:172 (SEP #$30) JML MSUMain : NOP SPCContinue: -org $028B7A ; <- C220 A5A0 - Bank02.asm:2225 (REP #$20 : LDA $A0) +org $828B7A ; <- C220 A5A0 - Bank02.asm:2225 (REP #$20 : LDA $A0) JSL SpiralStairsPreCheck -org $029069 ; <- A21C A5A0 - Bank02.asm:3081 (LDX.b #$1C : LDA $A0) +org $829069 ; <- A21C A5A0 - Bank02.asm:3081 (LDX.b #$1C : LDA $A0) JSL SpiralStairsPostCheck -org $02D6E8 ; <- 9C0A01 - Bank02.asm:10811 (STZ $010A) +org $82D6E8 ; <- 9C0A01 - Bank02.asm:10811 (STZ $010A) NOP #3 -org $08C421 ; <- AD4021 F005 - ancilla_receive_item.asm:108 (LDA $2140 : BEQ .wait_for_music) +org $88C421 ; <- AD4021 F005 - ancilla_receive_item.asm:108 (LDA $2140 : BEQ .wait_for_music) JML PendantFanfareWait : NOP PendantFanfareContinue: -org $08C42B +org $88C42B PendantFanfareDone: -org $08C62A ; <- AD4021 D008 - ancilla_receive_item.asm:442 (LDA $2140 : BNE .waitForSilence) +org $88C62A ; <- AD4021 D008 - ancilla_receive_item.asm:442 (LDA $2140 : BNE .waitForSilence) JML CrystalFanfareWait : NOP CrystalFanfareDone: -org $08C637 +org $88C637 CrystalFanfareContinue: -org $0988A0 ; <- 8D2C01 8009 - ancilla_init.asm:1179 (STA $012C : BRA .doneWithSoundEffects) +org $8988A0 ; <- 8D2C01 8009 - ancilla_init.asm:1179 (STA $012C : BRA .doneWithSoundEffects) JML FanfarePreload : NOP -org $09F2A7 ; <- 8F27C27E - module_death.asm:56 (STA $7EC227) -JSL.l StoreMusicOnDeath +org $89F2A7 ; <- 8F27C27E - module_death.asm:56 (STA $7EC227) +JSL StoreMusicOnDeath -org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C) -JSL.l EndingMusicWait +org $8EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C) +JSL EndingMusicWait ; Process music commands in NMI from new location after muting is processed -org $0080DD +org $8080DD dw MusicControl -org $008101 +org $808101 dw MusicControl -org $09F512 +org $89F512 dw MusicControl -org $0CF05F +org $8CF05F dw MusicControl ;================================================================================ ; Replacement Shopkeeper ;-------------------------------------------------------------------------------- -org $068BEB ; <- 30BEB - sprite_prep.asm:1125 - (INC $0BA0, X) -JSL.l SpritePrep_ShopKeeper : RTS : NOP +org $868BEB ; <- 30BEB - sprite_prep.asm:1125 - (INC $0BA0, X) +JSL SpritePrep_ShopKeeper : RTS : NOP ShopkeeperFinishInit: ;-------------------------------------------------------------------------------- -org $1EEEE3 ; <- F6EE3 - sprite_shopkeeper.asm:7 - (LDA $0E80, X) -JSL.l Sprite_ShopKeeper : RTS : NOP +org $9EEEE3 ; <- F6EE3 - sprite_shopkeeper.asm:7 - (LDA $0E80, X) +JSL Sprite_ShopKeeper : RTS : NOP ShopkeeperJumpTable: ;================================================================================ ; Tile Target Loader ;-------------------------------------------------------------------------------- -org $00D55E ; <- 555E - Bank00.asm:3491 (LDX.w #$2D40) -JSL.l LoadModifiedTileBufferAddress : NOP #2 +org $80D55E ; <- 555E - Bank00.asm:3491 (LDX.w #$2D40) +JSL LoadModifiedTileBufferAddress : NOP #2 ;================================================================================ ; Permabunny Fix ;-------------------------------------------------------------------------------- -org $078F32 ; <- 38F32 - Bank07.asm:2420 - (LDA $7EF357) -JSL.l DecideIfBunny ; for bunny beams +org $878F32 ; <- 38F32 - Bank07.asm:2420 - (LDA $7EF357) +JSL DecideIfBunny ; for bunny beams ;================================================================================ ; Other bunny Fixes ;-------------------------------------------------------------------------------- -org $029E7C; <- 11E7C - module_ganon_emerges.asm:127 - (LDA.b #$09 : STA $012C) -JSL.l FixAga2Bunny : NOP +org $829E7C; <- 11E7C - module_ganon_emerges.asm:127 - (LDA.b #$09 : STA $012C) +JSL FixAga2Bunny : NOP ;================================================================================ ; Open Mode Fixes ;-------------------------------------------------------------------------------- -org $05DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5) +org $85DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5) NOP #6 ;-------------------------------------------------------------------------------- -org $05EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5) -JSL.l EndRainState : NOP #2 +org $85EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5) +JSL EndRainState : NOP #2 ;-------------------------------------------------------------------------------- -org $05DF49 ; <- 2DF49 - sprite_uncle_and_priest.asm:984 - (JSL Link_ReceiveItem) -JSL.l OnUncleItemGet +org $85DF49 ; <- 2DF49 - sprite_uncle_and_priest.asm:984 - (JSL Link_ReceiveItem) +JSL OnUncleItemGet ;================================================================================ ; Generic Keys ;-------------------------------------------------------------------------------- -org $028157 ; <- 10157 - Bank02.asm:381 - (LDA $040C : CMP.b #$FF : BEQ .notPalace) -JSL.l CheckKeys : NOP +org $828157 ; <- 10157 - Bank02.asm:381 - (LDA $040C : CMP.b #$FF : BEQ .notPalace) +JSL CheckKeys : NOP ;-------------------------------------------------------------------------------- -org $028166 ; <- 10166 - Bank02.asm:396 - (LDA $7EF37C, X) -JSL.l LoadKeys +org $828166 ; <- 10166 - Bank02.asm:396 - (LDA $7EF37C, X) +JSL LoadKeys ;-------------------------------------------------------------------------------- -org $029A31 ; <- 11A31 - Bank02.asm:4785 - (LDA $7EF37C, X) -JSL.l LoadKeys +org $829A31 ; <- 11A31 - Bank02.asm:4785 - (LDA $7EF37C, X) +JSL LoadKeys ;-------------------------------------------------------------------------------- -org $02A0D1 ; <- 120D1 - Bank02.asm:5841 - (STA $7EF37C, X) -JSL.l SaveKeys +org $82A0D1 ; <- 120D1 - Bank02.asm:5841 - (STA $7EF37C, X) +JSL SaveKeys ;-------------------------------------------------------------------------------- -org $09F584 ; <- 4F584 - module_death.asm:447 - (STA $7EF37C, X) -JSL.l SaveKeys +org $89F584 ; <- 4F584 - module_death.asm:447 - (STA $7EF37C, X) +JSL SaveKeys ;-------------------------------------------------------------------------------- -org $0282EC ; <- 102EC - Bank02.asm:650 - (STA $7EF36F) -JSL.l ClearOWKeys +org $8282EC ; <- 102EC - Bank02.asm:650 - (STA $7EF36F) +JSL ClearOWKeys ;-------------------------------------------------------------------------------- -org $0DFA80 ; <- 6FA80 : headsup_display.asm:596 - (LDA.b #$00 : STA $7EC017) -JSL.l HUDRebuildIndoor : NOP #4 +org $8DFA80 ; <- 6FA80 : headsup_display.asm:596 - (LDA.b #$00 : STA $7EC017) +JSL HUDRebuildIndoor : NOP #4 ;-------------------------------------------------------------------------------- -org $029A35 ; <- 11A35 : Bank02.asm:4789 - (JSL HUD.RebuildIndoor.palace) -JSL.l HUDRebuildIndoorHole +org $829A35 ; <- 11A35 : Bank02.asm:4789 - (JSL HUD.RebuildIndoor.palace) +JSL HUDRebuildIndoorHole ;================================================================================ ; Pendant / Crystal Fixes ;-------------------------------------------------------------------------------- ;================================================================================ -org $098BB0 ; <- 048BB0 - ancilla_init.asm:1663 - (STX $02D8 : JSR AddAncilla) -JSL.l TryToSpawnCrystalUntilSuccess : NOP -org $01C74B ; <- 00C74B - bank01.asm:10368 - (STZ $AE, X) -NOP #2 ; this STZ is what makes the crystal never spawn if it fails to spawn on the first try +org $8DE9C8 ; <- 6E9C8 - equipment.asm:1623 - (LDA $7EF3C5 : CMP.b #$03 : BCC .beforeAgahnim) +JSL DrawPendantCrystalDiagram : RTS ;================================================================================ -org $0DE9C8 ; <- 6E9C8 - equipment.asm:1623 - (LDA $7EF3C5 : CMP.b #$03 : BCC .beforeAgahnim) -JSL.l DrawPendantCrystalDiagram : RTS -;================================================================================ -org $0DEDCC ; <- 6EDCC - equipment.asm:2043 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BNE .inSpecificDungeon) -JSL.l ShowDungeonItems : NOP #5 +org $8DEDCC ; <- 6EDCC - equipment.asm:2043 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BNE .inSpecificDungeon) +JSL ShowDungeonItems : NOP #5 -org $0DEE59 ; <- 6EE59 - equipment.asm:2126 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BEQ .notInPalace) -JSL.l ShowDungeonItems : NOP #5 +org $8DEE59 ; <- 6EE59 - equipment.asm:2126 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BEQ .notInPalace) +JSL ShowDungeonItems : NOP #5 -org $0DEE8A ; <- 6EE8A - equipment.asm:2151 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BEQ .notInPalaceAgain) -JSL.l ShowDungeonItems : NOP #5 +org $8DEE8A ; <- 6EE8A - equipment.asm:2151 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BEQ .notInPalaceAgain) +JSL ShowDungeonItems : NOP #5 -org $0DEF3B ; <- 6EF3B - equipment.asm:2290 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BEQ .notInPalace) -JSL.l ShowDungeonItems : NOP #5 +org $8DEF3B ; <- 6EF3B - equipment.asm:2290 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BEQ .notInPalace) +JSL ShowDungeonItems : NOP #5 ;================================================================================ -org $00F97E ; <- 797E - Bank00.asm:8586 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA) -JSL.l FlipLWDWFlag : NOP #6 +org $80F97E ; <- 797E - Bank00.asm:8586 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA) +JSL FlipLWDWFlag : NOP #6 ;================================================================================ -org $02B15C ; <- 1315C - Bank02.asm:7672 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA) -JSL.l IncrementOWMirror -JSL.l FlipLWDWFlag : NOP #2 +org $82B15C ; <- 1315C - Bank02.asm:7672 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA) +JSL IncrementOWMirror +JSL FlipLWDWFlag : NOP #2 ;================================================================================ -;Clear level to open doors -org $01C50D ; 0xC50D - Bank01.asm:10032 - (LDA $7EF3CA : BNE .inDarkWorld) -LDA CrystalPendantFlags_2, X +;org $8AC5BB ; < 545BB - Bank0A.asm:1856 - (LDA $7EF3C7 : CMP.b #$03 : BNE .fail) +;JSL OverworldMap_CheckObject : RTS +;org $8AC5D8 ; < 545D8 - Bank0A.asm:1885 - (LDA $7EF3C7 : CMP.b #$07 : BNE OverworldMap_CheckPendant_fail) +;JSL OverworldMap_CheckObject : RTS ;================================================================================ -;Kill enemy to clear level -org $01C715 ; <- C715 - Bank01.asm:10358 - (LDA $7EF3CA : BNE .inDarkWorld) -LDA CrystalPendantFlags_2, X -;================================================================================ -org $0AC5BB ; < 545BB - Bank0A.asm:1856 - (LDA $7EF3C7 : CMP.b #$03 : BNE .fail) -JSL.l OverworldMap_CheckObject : RTS -org $0AC5D8 ; < 545D8 - Bank0A.asm:1885 - (LDA $7EF3C7 : CMP.b #$07 : BNE OverworldMap_CheckPendant_fail) -JSL.l OverworldMap_CheckObject : RTS -;================================================================================ -org $0AC53e ; <- 5453E - Bank0A.asm:1771 - (LDA $0AC50D, X : STA $0D) -JSL.l GetCrystalNumber +org $8AC53E ; <- 5453E - Bank0A.asm:1771 - (LDA $0AC50D, X : STA $0D) +LDA.l CrystalNumberTable-1,X ;================================================================================ ; EVERY INSTANCE OF STA $7EF3C7 IN THE ENTIRE CODEBASE -org $029D51 ; <- 11D51 -JSL.l SetLWDWMap -org $0589BB ; <- 289BB -JSL.l SetLWDWMap -org $05DD9A ; <- 2DD9A -JSL.l SetLWDWMap +org $829D51 : JSL SetLWDWMap +org $8589BB : JSL SetLWDWMap +org $85DD9A : JSL SetLWDWMap -org $05F1F6 ; <- 2F1F6 -JSL.l SetLWDWMap -org $05F209 ; <- 2F209 -JSL.l SetLWDWMap -org $05FF91 ; <- 2FF91 -JSL.l SetLWDWMap +org $85F1F6 : JSL SetLWDWMap +org $85F209 : JSL SetLWDWMap +org $85FF91 : JSL SetLWDWMap -org $098687 ; <- 48687 -JSL.l SetLWDWMap -org $1ECEDD ; <- F4EDD -JSL.l SetLWDWMap -org $1ECF0D ; <- F4F0D -JSL.l SetLWDWMap +org $898687 : JSL SetLWDWMap +org $9ECEDD : JSL SetLWDWMap +org $9ECF0D : JSL SetLWDWMap ;================================================================================ -; EVERY INSTANCE OF LDA $7EF3C7 IN THE ENTIRE CODEBASE -org $05DDFE ; <- 2DDFE -JSL.l GetMapMode -org $05EE25 ; <- 2EE25 -JSL.l GetMapMode -org $05F17D ; <- 2F17D -JSL.l GetMapMode -org $05FF7D ; <- 2FF7D -JSL.l GetMapMode - -org $0AC01A ; <- 5401A -JSL.l GetMapMode -org $0AC037 ; <- 54037 -JSL.l GetMapMode -org $0AC079 ; <- 54079 -JSL.l GetMapMode -org $0AC0B8 ; <- 540B8 x -JSL.l GetMapMode -org $0AC0F8 ; <- 540F8 -JSL.l GetMapMode -org $0AC137 ; <- 54137 -JSL.l GetMapMode -org $0AC179 ; <- 54179 -JSL.l GetMapMode -org $0AC1B3 ; <- 541B3 -JSL.l GetMapMode -org $0AC1F5 ; <- 541F5 -JSL.l GetMapMode -org $0AC22F ; <- 5422F -JSL.l GetMapMode -org $0AC271 ; <- 54271 -JSL.l GetMapMode -org $0AC2AB ; <- 542AB -JSL.l GetMapMode -org $0AC2ED ; <- 542ED -JSL.l GetMapMode -org $0AC327 ; <- 54327 -JSL.l GetMapMode -org $0AC369 ; <- 54369 -JSL.l GetMapMode - -org $0DC849 ; <- 6C849 -JSL.l GetMapMode +org $85DDFE : JSL GetMapMode +org $85EE25 : JSL GetMapMode +org $85F17D : JSL GetMapMode +org $85FF7D : JSL GetMapMode +org $8AC01A : JSL GetMapMode +org $8DC849 : JSL GetMapMode ;================================================================================ -org $0AC012 ; <- 54012 - Bank0A.asm:1039 (LDA $7EF2DB : AND.b #$20 : BNE BRANCH_DELTA) +org $8AC012 ; <- 54012 - Bank0A.asm:1039 (LDA $7EF2DB : AND.b #$20 : BNE BRANCH_DELTA) NOP #8 ;================================================================================ -org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A : BCS BRANCH_BETA) +org $828B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A : BCS BRANCH_BETA) JSL CheckHeraBossDefeated : BNE + : NOP LDX.b #$F1 : STX.w MusicControlRequest + ;================================================================================ -org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA) +org $829090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA) JSL CheckHeraBossDefeated : BNE + : NOP STX.w MusicControlRequest ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS + ;================================================================================ -org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA) +org $829798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA) NOP #6 ; remove crystal room cutscene check that causes softlocks ;================================================================================ ;================================================================================ ; Text Changes ;-------------------------------------------------------------------------------- -org $06C7BB ; <- 347BB - sprite_ponds.asm:702 (JSL Sprite_ShowMessageFromPlayerContact : BCC BRANCH_ALPHA) -JSL.l FairyPond_Init +org $86C7BB ; <- 347BB - sprite_ponds.asm:702 (JSL Sprite_ShowMessageFromPlayerContact : BCC BRANCH_ALPHA) +JSL FairyPond_Init ;-------------------------------------------------------------------------------- -org $1D92EC ; <- E92EC - sprite_ganon.asm:947 (JSL Sprite_ShowMessageMinimal) -JSL.l DialogGanon1 +org $9D92EC ; <- E92EC - sprite_ganon.asm:947 (JSL Sprite_ShowMessageMinimal) +JSL DialogGanon1 ;-------------------------------------------------------------------------------- -org $1D9078 ; <- E9078 - sprite_ganon.asm:552 (LDA.b #$70 : STA $1CF0) -JSL.l DialogGanon2 : RTS +org $9D9078 ; <- E9078 - sprite_ganon.asm:552 (LDA.b #$70 : STA $1CF0) +JSL DialogGanon2 : RTS ;-------------------------------------------------------------------------------- ;-- Convert Capitalism fairy to shop -org $06C4BD ; <- 34C4BD - sprite_ponds.asm:107 (LDA $A0 : CMP.b #$15 : BEQ Sprite_HappinessPond) -JSL.l HappinessPond_Check +org $86C4BD ; <- 34C4BD - sprite_ponds.asm:107 (LDA $A0 : CMP.b #$15 : BEQ Sprite_HappinessPond) +JSL HappinessPond_Check ;-------------------------------------------------------------------------------- ;-- Sahasrahla (no green pendant) -org $05F16C ; <- 2F16C sprite_elder.asm:137 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) -JSL.l Sprite_ShowSolicitedMessageIfPlayerFacing_Alt +org $85F16C ; <- 2F16C sprite_elder.asm:137 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +JSL Sprite_ShowSolicitedMessageIfPlayerFacing_Alt ;-------------------------------------------------------------------------------- ;-- Sahasrahla (have boots) -org $05F1A8 ; <- 2F1A8 sprite_elder.asm:170 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) -JSL.l Sprite_ShowSolicitedMessageIfPlayerFacing_Alt +org $85F1A8 ; <- 2F1A8 sprite_elder.asm:170 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +JSL Sprite_ShowSolicitedMessageIfPlayerFacing_Alt ;-------------------------------------------------------------------------------- ;-- Sahasrahla (have boots, have ice rod) -org $05F1BC ; <- 2F1BC sprite_elder.asm:182 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) -JSL.l Sprite_ShowSolicitedMessageIfPlayerFacing_Alt +org $85F1BC ; <- 2F1BC sprite_elder.asm:182 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +JSL Sprite_ShowSolicitedMessageIfPlayerFacing_Alt ;-------------------------------------------------------------------------------- ;-- Sahasrahla (have boots, have ice rod, have 3 pendants) -org $05F1CE ; <- 2F1CE sprite_elder.asm:194 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) -JSL.l Sprite_ShowSolicitedMessageIfPlayerFacing_Alt +org $85F1CE ; <- 2F1CE sprite_elder.asm:194 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +JSL Sprite_ShowSolicitedMessageIfPlayerFacing_Alt ;-------------------------------------------------------------------------------- ;-- Sahasrahla (have boots, have ice rod, have 3 pendants, have master sword) -org $05F1D8 ; <- 2F1D8 sprite_elder.asm:204 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) -JSL.l Sprite_ShowSolicitedMessageIfPlayerFacing_Alt +org $85F1D8 ; <- 2F1D8 sprite_elder.asm:204 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +JSL Sprite_ShowSolicitedMessageIfPlayerFacing_Alt ;---------------------------------------------------------- ;-- Bomb shop guy (talking to him before and after big bomb is available) -org $1EE181 ; <- F6181 sprite_bomb_shop_entity.asm : 85 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +org $9EE181 ; <- F6181 sprite_bomb_shop_entity.asm : 85 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) JSL Sprite_ShowSolicitedMessageIfPlayerFacing_Alt ;---------------------------------------------------- ;-- Bombos tablet -org $05F3BF ; <- 2F3BF sprite_medallion_tablet.asm : 254 (JSL Sprite_ShowMessageUnconditional) -JSL.l DialogBombosTablet +org $85F3BF ; <- 2F3BF sprite_medallion_tablet.asm : 254 (JSL Sprite_ShowMessageUnconditional) +JSL DialogBombosTablet ;---------------------------------------------------- ;-- Ether tablet -org $05F429 ; <- 2F429 sprite_medallion_tablet.asm : 317 (JSL Sprite_ShowMessageUnconditional) -JSL.l DialogEtherTablet +org $85F429 ; <- 2F429 sprite_medallion_tablet.asm : 317 (JSL Sprite_ShowMessageUnconditional) +JSL DialogEtherTablet ;---------------------------------------------------- ;-- Thrown fish (move to different text ID) -org $1D82B2 ; <- 0xE82B2 low byte of message -db #$8F +org $9D82B2 ; <- 0xE82B2 low byte of message +db $8F ;================================================================================ ;================================================================================ ; Text Removal ;-------------------------------------------------------------------------------- -org $05FA8E +org $85FA8E Sprite_ShowMessageMinimal: -JML.l Sprite_ShowMessageMinimal_Alt +JML Sprite_ShowMessageMinimal_Alt ;-------------------------------------------------------------------------------- -org $07b0cc ; <- 3b0d0 - Bank 07.asm : 7767 (JSL Main_ShowTextMessage) -JSL.l Main_ShowTextMessage_Alt +org $87B0CC ; <- 3b0d0 - Bank 07.asm : 7767 (JSL Main_ShowTextMessage) +JSL Main_ShowTextMessage_Alt ;-------------------------------------------------------------------------------- -org $08c5fe ; <- 445FE - ancilla_receive_item.asm : 408 (JSL Main_ShowTextMessage) -JSL.l Main_ShowTextMessage_Alt +org $88C5FE ; <- 445FE - ancilla_receive_item.asm : 408 (JSL Main_ShowTextMessage) +JSL Main_ShowTextMessage_Alt ;-------------------------------------------------------------------------------- -org $05E21F ; <- 2E21F - Bank05.asm : 2691 (STZ $0223) -JSL.l Sprite_ShowMessageMinimal_Alt +org $85E21F ; <- 2E21F - Bank05.asm : 2691 (STZ $0223) +JSL Sprite_ShowMessageMinimal_Alt BRA Sprite_ShowMessageUnconditional_Rest -org $05E232 ; <- 2E232 - Bank05.asm : 2700 (PHX) +org $85E232 ; <- 2E232 - Bank05.asm : 2700 (PHX) Sprite_ShowMessageUnconditional_Rest: ;-------------------------------------------------------------------------------- ;-- Music restarting at zelda fix -org $05ED10 ; <- 2ED10 - sprite_zelda.asm : 233 - (LDA.b #$19 : STA $012C) +org $85ED10 ; <- 2ED10 - sprite_zelda.asm : 233 - (LDA.b #$19 : STA $012C) NOP #5 ;-------------------------------------------------------------------------------- -org $1ECE47 ; <- F4E47 - sprite_crystal_maiden.asm : 220 -JML.l MaidenCrystalScript +org $9ECE47 ; <- F4E47 - sprite_crystal_maiden.asm : 220 +JML MaidenCrystalScript ;-------------------------------------------------------------------------------- -org $1ECCEB ; <- F4CEB - sprite_crystal_maiden.asm : 25 ; skip all palette nonsense -JML.l SkipCrystalPalette -org $1ECD39 -SkipCrystalPalette: +org $9ECCEB ; <- F4CEB - sprite_crystal_maiden.asm : 25 ; skip all palette nonsense +BRA CrystalCutscene_Initialize_skip_palette ;-------------------------------------------------------------------------------- -org $08C3FD ; <- 443FD - ancilla_receive_item.asm : 89 +org $88C3FD ; <- 443FD - ancilla_receive_item.asm : 89 BRA + : NOP #4 : + ;-------------------------------------------------------------------------------- -org $08C5E5 ; <- 445ED - ancilla_receive_item.asm:395 (LDA .item_messages, Y : CMP.w #$FFFF : BEQ .handleGraphics) -JSL.l DialogItemReceive : NOP #2 -org $08C301 ; <- 44301 - ancilla_receive_item.asm:8 (.item_messages) +org $88C5E5 ; <- 445ED - ancilla_receive_item.asm:395 (LDA .item_messages, Y : CMP.w #$FFFF : BEQ .handleGraphics) +JSL DialogItemReceive : NOP #2 +org $88C301 ; <- 44301 - ancilla_receive_item.asm:8 (.item_messages) Ancilla_ReceiveItem_item_messages: ;---------------------------------------------------------- ;-- Shopkeepers -org $1EF379 ; <- F7379 sprite_shopkeeper.asm : 810 (JSL Sprite_ShowMessageUnconditional : JSL ShopKeeper_RapidTerminateReceiveItem) +org $9EF379 ; <- F7379 sprite_shopkeeper.asm : 810 (JSL Sprite_ShowMessageUnconditional : JSL ShopKeeper_RapidTerminateReceiveItem) NOP #4 ;Just remove the rapid terminate call ;-------------------------------------------------------------------------------- ;-- Reset Dialog Selection index for each new message -org $0EEE5D ; <- 76E5D - vwf.asm:84 (JSL Attract_DecompressStoryGfx) -JSL.l DialogResetSelectionIndex +org $8EEE5D ; <- 76E5D - vwf.asm:84 (JSL Attract_DecompressStoryGfx) +JSL DialogResetSelectionIndex ;---------------------------------------------------- ;-- Agahnim 1 Defeated -org $068475 ; <- 30475 Bank06.asm : 762 - (JSL Sprite_ShowMessageMinimal) -JSL.l AddInventory_incrementBossSwordLong +org $868475 ; <- 30475 Bank06.asm : 762 - (JSL Sprite_ShowMessageMinimal) +JSL IncrementBossSword ;---------------------------------------------------------- ;-- We'll take your sword -org $06B4F3 ; <- 334F3 sprite_smithy_bros.asm : 556 (JSL Sprite_ShowMessageUnconditional) +org $86B4F3 ; <- 334F3 sprite_smithy_bros.asm : 556 (JSL Sprite_ShowMessageUnconditional) JSL ItemSet_SmithSword ;---------------------------------------------------------- @@ -1778,7 +1771,7 @@ JSL ItemSet_SmithSword ;-- Escort Text ;-- dw coordinate, coordinate, flag, text message number, tagalong number ;=================================== -org $09A4C2 ; <- 4A4C2 tagalong.asm : 967 - (.room_data_1) +org $89A4C2 ; <- 4A4C2 tagalong.asm : 967 - (.room_data_1) dw $1EF0, $0288, $0001, $0097, $00F0 ; Old man first text after encounter text dw $1E58, $02F0, $0002, $0098, $00F0 ; Old man "dead end" (when you run to the pot) dw $1EA8, $03B8, $0004, $0099, $00F0 ; Old man "turn right here" @@ -1793,281 +1786,283 @@ dw $1520, $167C, $0001, $0122, $00F0 ; Blind (maiden) "don't take me outside!" dw $05AC, $04FC, $0001, $0027, $00F0 ; Zelda in the water room ;---------------------------------------------------------- ;-- New Sign table offet calculation -org $07b4fe ; <- 3b4fe - bank07.asm : 8454 (LDA $8A : ASL A : TAY) +org $87B4FE ; <- 3b4fe - bank07.asm : 8454 (LDA $8A : ASL A : TAY) JSL CalculateSignIndex ;================================================================================ ; Dark World Spawn Location Fix & Follower Fixes ;-------------------------------------------------------------------------------- -org $00894A ; <- 94A -PHB : JSL.l DarkWorldSaveFix +org $80894A ; <- 94A +PHB : JSL DarkWorldSaveFix ;-------------------------------------------------------------------------------- -org $028046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile) -JSL.l OnFileLoad +org $828046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile) +JSL OnFileLoad ;-------------------------------------------------------------------------------- -org $09F520 ; <- 4F520 - module_death.asm : 401 (LDA $7EF3C5 : CMP.b #$03 : BCS BRANCH_THETA) -JSL.l OnPlayerDead -JSL.l IncrementDeathCounter : NOP #6 +org $89F520 ; <- 4F520 - module_death.asm : 401 (LDA $7EF3C5 : CMP.b #$03 : BCS BRANCH_THETA) +JSL OnPlayerDead +JSL IncrementDeathCounter : NOP #6 ;-------------------------------------------------------------------------------- -org $1ED379 ; <- F5379 - sprite_agahnim.asm:75 - JSL PrepDungeonExit +org $9ED379 ; <- F5379 - sprite_agahnim.asm:75 - JSL PrepDungeonExit JSL FixAgahnimFollowers ;================================================================================ ;================================================================================ ; Randomize NPC Items ;-------------------------------------------------------------------------------- -org $028823 ; <- 10823 - Bank02.asm:1560 (LDA $7EF3C5 : BEQ .ignoreInput) -JSL.l AllowSQ +org $828823 ; <- 10823 - Bank02.asm:1560 (LDA $7EF3C5 : BEQ .ignoreInput) +JSL AllowSQ ;-------------------------------------------------------------------------------- -org $08C45F ; <- 4445F - ancilla_recieve_item.asm:157 (STZ $02E9) -JSL.l PostItemAnimation : NOP #2 +org $88C45F ; <- 4445F - ancilla_recieve_item.asm:157 (STZ $02E9) +JSL PostItemAnimation : NOP #2 ;-------------------------------------------------------------------------------- -org $1EE90A ; <- F690A -JSL.l ItemCheck_OldMan : NOP #2 +org $9EE90A ; <- F690A +JSL ItemCheck_OldMan : NOP #2 ;-------------------------------------------------------------------------------- -org $0280F2 ; <- 100F2 -JSL.l ItemCheck_OldMan : NOP #2 +org $8280F2 ; <- 100F2 +JSL ItemCheck_OldMan : NOP #2 ;-------------------------------------------------------------------------------- -org $1EE9FE ; <- F69FE -JSL.l ItemSet_OldMan +org $9EE9FE ; <- F69FE +JSL ItemSet_OldMan ;-------------------------------------------------------------------------------- -org $068F16 ; <- 30F16 -JSL.l ItemCheck_ZoraKing +org $868F16 ; <- 30F16 +JSL ItemCheck_ZoraKing ;-------------------------------------------------------------------------------- -org $059ACA ; <- 29ACA -JSL $1DE1AA ; Sprite_SpawnFlippersItem +org $859ACA ; <- 29ACA +JSL $9DE1AA ; Sprite_SpawnFlippersItem ;-------------------------------------------------------------------------------- -org $1DE1E4 ; <- EE1E4 - sprite_great_catfish.asm : 489 -JSL.l LoadZoraKingItemGFX : NOP #2 +org $9DE1E4 ; <- EE1E4 - sprite_great_catfish.asm : 489 +JSL LoadZoraKingItemGFX : NOP #2 ;-------------------------------------------------------------------------------- -org $068D86 ; <- 30D86 -JSL.l ItemCheck_SickKid +org $868D86 ; <- 30D86 +JSL ItemCheck_SickKid ;-------------------------------------------------------------------------------- -org $06B9D4 ; <- 339D4 - sprite_bug_net_kid.asm : 111 (JSL Link_ReceiveItem) -JSL.l ItemSet_SickKid +org $86B9D4 ; <- 339D4 - sprite_bug_net_kid.asm : 111 (JSL Link_ReceiveItem) +JSL ItemSet_SickKid ;-------------------------------------------------------------------------------- -org $068BAC ; <- 30BAC - SpritePrep_FluteBoy : 1068 -JSL.l ItemCheck_TreeKid2 +org $868BAC ; <- 30BAC - SpritePrep_FluteBoy : 1068 +JSL ItemCheck_TreeKid2 -org $06908D ; <- 3108D - SpritePrep_FluteBoy : 2175 -JSL.l ItemCheck_TreeKid : CMP.b #$08 : BEQ $0A +org $86908D ; <- 3108D - SpritePrep_FluteBoy : 2175 +JSL ItemCheck_TreeKid : CMP.b #$08 : BEQ $0A -org $069095 ; <- 31095 - SpritePrep_FluteBoy : 2177 -JSL.l ItemCheck_TreeKid : CMP.b #$08 +org $869095 ; <- 31095 - SpritePrep_FluteBoy : 2177 +JSL ItemCheck_TreeKid : CMP.b #$08 -org $0690BD ; <- 310BD - SpritePrep_FluteBoy : 2202 -JSL.l ItemCheck_TreeKid2 +org $8690BD ; <- 310BD - SpritePrep_FluteBoy : 2202 +JSL ItemCheck_TreeKid2 -org $06AF9B ; <- 32F9B - FluteBoy_Chillin : 73 : LDA $7EF34C : CMP.b #$02 : BCS .player_has_flute +org $86AF9B ; <- 32F9B - FluteBoy_Chillin : 73 : LDA $7EF34C : CMP.b #$02 : BCS .player_has_flute LDA HasGroveItem : AND.b #$01 -db #$D0 ; BNE +db $D0 ; BNE -org $06B062 ; <- 33062 - FluteAardvark_InitialStateFromFluteState : 225 : LDA $7EF34C : AND.b #$03 : !BGE #$05 -JSL.l ItemCheck_TreeKid2 : NOP #$02 ; remove pointless AND +org $86B062 ; <- 33062 - FluteAardvark_InitialStateFromFluteState : 225 : LDA $7EF34C : AND.b #$03 : !BGE #$05 +JSL ItemCheck_TreeKid2 : NOP #$02 ; remove pointless AND -org $06B048 ; <- 33048 -JSL.l ItemCheck_TreeKid3 +org $86B048 ; <- 33048 +JSL ItemCheck_TreeKid3 -org $06AF59 ; <- 32F59 - sprite_flute_boy.asm : 36 (LDA $0D80, X : CMP.b #$03 : BEQ .invisible) -JML.l FluteBoy +org $86AF59 ; <- 32F59 - sprite_flute_boy.asm : 36 (LDA $0D80, X : CMP.b #$03 : BEQ .invisible) +JML FluteBoy FluteBoy_Abort: RTS FluteBoy_Continue: ;-------------------------------------------------------------------------------- -org $06B0C9 ; <- 330C9 -JSL.l ItemSet_TreeKid +org $86B0C9 ; <- 330C9 +JSL ItemSet_TreeKid ;-------------------------------------------------------------------------------- -org $05F177 ; <- 2F177 -JSL.l ItemCheck_Sahasrala +org $85F177 ; <- 2F177 +JSL ItemCheck_Sahasrala ;-------------------------------------------------------------------------------- -org $05F200 ; <- 2F200 -JSL.l ItemSet_Sahasrala +org $85F200 ; <- 2F200 +JSL ItemSet_Sahasrala ;-------------------------------------------------------------------------------- -org $1DE102 ; <- EE102 -JSL.l ItemCheck_Catfish -org $1DE11C ; <- EE11C -JSL.l ItemCheck_Catfish +org $9DE102 ; <- EE102 +JSL ItemCheck_Catfish +org $9DE11C ; <- EE11C +JSL ItemCheck_Catfish ;-------------------------------------------------------------------------------- -org $1DE1A1 ; <- EE1A1 - sprite_great_catfish.asm : 445 -JSL.l LoadCatfishItemGFX : NOP #2 +org $9DE1A1 ; <- EE1A1 - sprite_great_catfish.asm : 445 +JSL LoadCatfishItemGFX : NOP #2 ;-------------------------------------------------------------------------------- -org $1DDF49 ; <- EDF49 - sprite_great_catfish.asm : 19 -JML.l JumpToSplashItemTarget : NOP -org $1DDF4E ; <- EDF4E - sprite_great_catfish.asm : 21 +org $9DDF49 ; <- EDF49 - sprite_great_catfish.asm : 19 +JML JumpToSplashItemTarget : NOP +org $9DDF4E ; <- EDF4E - sprite_great_catfish.asm : 21 SplashItem_SpawnSplash: -org $1DDF52 ; <- EDF52 - sprite_great_catfish.asm : 27 +org $9DDF52 ; <- EDF52 - sprite_great_catfish.asm : 27 SplashItem_SpawnOther: -org $1DE228 ; <- EE228 - sprite_great_catfish.asm : 290 +org $9DE228 ; <- EE228 - sprite_great_catfish.asm : 290 LDA.b #$FF ;-------------------------------------------------------------------------------- -org $1DDF81 ; <- EDF81 - sprite_great_catfish.asm : 61 -JSL.l DrawThrownItem +org $9DDF81 ; <- EDF81 - sprite_great_catfish.asm : 61 +JSL DrawThrownItem ;-------------------------------------------------------------------------------- -org $05EE53 ; <- 2EE53 - mushroom.asm : 22 -JSL.l ItemCheck_Mushroom : NOP #2 +org $85EE53 ; <- 2EE53 - mushroom.asm : 22 +JSL ItemCheck_Mushroom : NOP #2 ;-------------------------------------------------------------------------------- -org $05EE8C ; <- 2EE8C - mushroom.asm : 69 -JSL.l ItemSet_Mushroom : NOP +org $85EE8C ; <- 2EE8C - mushroom.asm : 69 +JSL ItemSet_Mushroom : NOP ;-------------------------------------------------------------------------------- -org $05F53E ; <- 2F53E - sprite_potion_shop.asm : 40 -JSL.l ItemCheck_Powder : CMP.b #$20 +org $85F53E ; <- 2F53E - sprite_potion_shop.asm : 40 +JSL ItemCheck_Powder : CMP.b #$20 ;-------------------------------------------------------------------------------- ; the quake medallion AND FLIPPERS -org $1DDF71 ; <- EDF71 - sprite_great_catfish.asm : 47 -JSL.l MarkThrownItem +org $9DDF71 ; <- EDF71 - sprite_great_catfish.asm : 47 +JSL MarkThrownItem ;-------------------------------------------------------------------------------- -org $05FAFF ; <- 2FAFF - sprite_mad_batter.asm:57 (LDA $7EF37B : CMP.b #$01 : BCS .magic_already_doubled) -JSL.l ItemCheck_MagicBat : BEQ + : RTS : NOP : + +org $85FAFF ; <- 2FAFF - sprite_mad_batter.asm:57 (LDA $7EF37B : CMP.b #$01 : BCS .magic_already_doubled) +JSL ItemCheck_MagicBat : BEQ + : RTS : NOP : + ;================================================================================ ;================================================================================ ; Boss Hearts ;-------------------------------------------------------------------------------- -org $05EF5D ; <- 2EF5D - sprite_heart_upgrades.asm:110 (JSL GetAnimatedSpriteTile.variable) -JSL.l HeartContainerSpritePrep +org $85EF5D ; <- 2EF5D - sprite_heart_upgrades.asm:110 (JSL GetAnimatedSpriteTile.variable) +JSL HeartContainerSpritePrep ;-------------------------------------------------------------------------------- -org $05EF79 ; <- 2EF79 - sprite_heart_upgrades.asm:128 (JSL Sprite_PrepAndDrawSingleLargeLong) -JSL.l DrawHeartContainerGFX +org $85EF79 ; <- 2EF79 - sprite_heart_upgrades.asm:128 (JSL Sprite_PrepAndDrawSingleLargeLong) +JSL DrawHeartContainerGFX ;-------------------------------------------------------------------------------- -org $05EFCE ; <- 2EFCE - sprite_heart_upgrades.asm:176 (JSL Link_ReceiveItem) -JSL.l HeartContainerGet +org $85EFCE ; <- 2EFCE - sprite_heart_upgrades.asm:176 (JSL Link_ReceiveItem) +JSL HeartContainerGet ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- -org $0799B1 ; 399B1 - Bank07.asm:4063 (CPY.b #$3E : BNE .notHeartContainer) -JSL.l HeartContainerSound : BCC Link_ReceiveItem_notHeartContainer -org $0799BA ; 399BA - Bank07.asm:4070 (LDA.b #$60 : STA $02D9) +org $8799B1 ; 399B1 - Bank07.asm:4063 (CPY.b #$3E : BNE .notHeartContainer) +JSL HeartContainerSound : BCC Link_ReceiveItem_notHeartContainer +org $8799BA ; 399BA - Bank07.asm:4070 (LDA.b #$60 : STA $02D9) Link_ReceiveItem_notHeartContainer: ;-------------------------------------------------------------------------------- -org $09887F ; <- 4887F - ancilla_init.asm : 1163 (LDA $0C5E, X : CMP.b #$3E : BEQ .doneWithSoundEffects) +org $89887F ; <- 4887F - ancilla_init.asm : 1163 (LDA $0C5E, X : CMP.b #$3E : BEQ .doneWithSoundEffects) JSL NormalItemSkipSound : NOP : BCS AddReceivedItem_doneWithSoundEffects -org $0988AE ; <- 488AE - ancilla_init.asm : 1193 (LDA.b #$0A : STA $02) +org $8988AE ; <- 488AE - ancilla_init.asm : 1193 (LDA.b #$0A : STA $02) AddReceivedItem_doneWithSoundEffects: ;================================================================================ ; Heart Pieces ;-------------------------------------------------------------------------------- -org $05F030 ; <- 2F030 - display item -JSL.l DrawHeartPieceGFX +org $85F030 ; <- 2F030 - display item +JSL DrawHeartPieceGFX ;-------------------------------------------------------------------------------- -org $05F08A ; <- 2F08A - sprite_heart_upgrades.asm : 324 - (LDA $7EF36B : INC A : AND.b #$03 : STA $7EF36B : BNE .got_4_piecese) item determination -JSL.l HeartPieceGet -JSL.l IsMedallion +org $85F08A ; <- 2F08A - sprite_heart_upgrades.asm : 324 - (LDA $7EF36B : INC A : AND.b #$03 : STA $7EF36B : BNE .got_4_piecese) item determination +JSL HeartPieceGet +JSL DynamicDrawCleanup +JSL IsMedallion BCS + : BRA Sprite_EB_HeartPiece_handle_flags : + ; Don't change OW flags if we're STZ.w SpriteAITable, X : RTS ; getting a tablet item ;-------------------------------------------------------------------------------- -org $06C0B0 ; <- 340B0 - sprite prep -JSL.l HeartPieceSpritePrep +org $86C0B0 ; <- 340B0 - sprite prep +JSL HeartPieceSpritePrep ;-------------------------------------------------------------------------------- -org $08C45B ; <- 4445B - ancilla_receive_item.asm : 152 -JSL.l HPItemReset +org $88C45B ; <- 4445B - ancilla_receive_item.asm : 152 +JSL HPItemReset ;================================================================================ ;================================================================================ ; Fake Flippers Softlock Fix + General Damage Hooks ;-------------------------------------------------------------------------------- -org $078091 ; <- 38091 - Bank07.asm:138 (LDA $037B : BNE .linkNotDamaged) +org $878091 ; <- 38091 - Bank07.asm:138 (LDA $037B : BNE .linkNotDamaged) LDA.w DamageReceived : STA.b Scrap00 : STZ.w DamageReceived ; store and zero damage LDA.w NoDamage : BNE LinkDamaged_linkNotDamaged ; skip if immune ;-------------------------------------------------------------------------------- -org $0780C6 ; <- 380C6 - Bank07.asm:174 (LDA $7EF36D) -JSL.l OnLinkDamaged +org $8780C6 ; <- 380C6 - Bank07.asm:174 (LDA $7EF36D) +JSL OnLinkDamaged ;-------------------------------------------------------------------------------- -org $0780FB ; <- 380FB - Bank07.asm:207 (.linkNotDamaged) +org $8780FB ; <- 380FB - Bank07.asm:207 (.linkNotDamaged) LinkDamaged_linkNotDamaged: ;-------------------------------------------------------------------------------- -org $0794FB ; <- 394FB - Bank07.asm:3336 (LDA.b #$14 : STA $11) -JSL.l OnLinkDamagedFromPit +org $8794FB ; <- 394FB - Bank07.asm:3336 (LDA.b #$14 : STA $11) +JSL OnLinkDamagedFromPit ;-------------------------------------------------------------------------------- -org $01FFE7 ; <- FFE7 - Bank01.asm:16375 (LDA $7EF36D) -JSL.l OnLinkDamagedFromPitOutdoors +org $81FFE7 ; <- FFE7 - Bank01.asm:16375 (LDA $7EF36D) +JSL OnLinkDamagedFromPitOutdoors ;-------------------------------------------------------------------------------- -org $02B468 +org $82B468 dw FakeFlipperProtection -org $02FFC7 +org $82FFC7 FakeFlipperProtection: JSR.w $029485 JSL protectff RTS ;-------------------------------------------------------------------------------- -;org $078F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM) -;JSL.l OnEnterWater : NOP +;org $878F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM) +;JSL OnEnterWater : NOP ;================================================================================ ; Floodgate Softlock Fix ;-------------------------------------------------------------------------------- -org $0AB8E5 ; <- 538E5 -JSL.l FloodGateAndMasterSwordFollowerReset -JSL.l IncrementFlute +org $8AB8E5 ; <- 538E5 +JSL FloodGateAndMasterSwordFollowerReset +JSL IncrementFlute STZ.w GFXStripes : STZ.w GFXStripes+1 -NOP #26 +BRA ++ : NOP #24 : ++ ;-------------------------------------------------------------------------------- -org $02AA87 ; <- 12A87 -JSL.l OnOWTransition : NOP #36 +org $82AA87 ; <- 12A87 +JSL OnOWTransition : BRA ++ : NOP #34 : ++ ;================================================================================ ;Inverted mode tile map update (executed right after the original tile load) ;-------------------------------------------------------------------------------- -org $02ED51 ; <- 16D51 -JSL.l Overworld_LoadNewTiles : NOP #$02 -;-------------------------------------------------------------------------------- -;Same as above -org $02EC2E ;<- 016C2E -JSL.l Overworld_LoadNewTiles : NOP #$02 +org $82ED51 +JSL Overworld_LoadNewTiles : BRA ++ : ++ +org $82EC2E +JSL Overworld_LoadNewTiles : BRA ++ : ++ ;================================================================================ -org $07A3E2 ;<- 3A3E2 Bank07.asm:5764 (LDA.b #$80 : STA $03F0) -JSL.l FreeDuckCheck : BEQ + +org $87A3E2 ;<- 3A3E2 Bank07.asm:5764 (LDA.b #$80 : STA $03F0) +JSL FreeDuckCheck : BEQ + NOP skip 3 ; a JSR we need to keep + ;================================================================================ -org $07A9AC ; <- 3A9AC - Bank07.asm:6628 (LDA $0C : ORA $0E : STA $00 : AND.b #$0C : BEQ BRANCH_BETA) -JML.l MirrorBonk +org $87A9AC ; <- 3A9AC - Bank07.asm:6628 (LDA $0C : ORA $0E : STA $00 : AND.b #$0C : BEQ BRANCH_BETA) +JML MirrorBonk MirrorBonk_NormalReturn: -org $07A9D1 ; <- 3A9D1 - Bank07.asm:6649 (BRANCH_GAMMA:) +org $87A9D1 ; <- 3A9D1 - Bank07.asm:6649 (BRANCH_GAMMA:) MirrorBonk_BranchGamma: ;================================================================================ ;================================================================================ ; Add SFX ;-------------------------------------------------------------------------------- -org $1DFDA8 ; <- EFDA9 - sprite_digging_game_guy.asm:309 (STA $7FFE00) -JSL.l SpawnShovelGamePrizeSFX +org $9DFDA8 ; <- EFDA9 - sprite_digging_game_guy.asm:309 (STA $7FFE00) +JSL SpawnShovelGamePrizeSFX ;-------------------------------------------------------------------------------- -org $01EECD ; <- EECD - Bank01.asm:14160 (LDA.b #$0E : STA $012F) -JSL.l SpawnChestGamePrizeSFX : NOP +org $81EECD ; <- EECD - Bank01.asm:14160 (LDA.b #$0E : STA $012F) +JSL SpawnChestGamePrizeSFX : NOP ;================================================================================ ;================================================================================ ; Heart Beep Timer ;-------------------------------------------------------------------------------- -org $0DDC9B ; <- 6DC9B -JSL.l BeepLogic : NOP #6 +org $8DDC9B ; <- 6DC9B +JSL BeepLogic : NOP #6 ;================================================================================ ;================================================================================ ; Item Downgrade Fix ;-------------------------------------------------------------------------------- -org $09865E ; <- 4865E -JSL.l $1BEE1B ; fix something i wrote over i shouldn't have +org $89865E ; <- 4865E +JSL $9BEE1B ; fix something i wrote over i shouldn't have +;-------------------------------------------------------------------------------- +org $898638 ; <- 48638 - ancilla_init.asm:737 - LDA .item_values, Y : BMI .dontWrite (BMI) +JSL ItemDowngradeFix ;================================================================================ ;================================================================================ ; Lamp Mantle & Light Cone Fix ;-------------------------------------------------------------------------------- -org $1AFC4D ; <- D7C4D - sprite_movable_mantle.asm:31 (LDA $7EF3CC : CMP.b #$01 : BNE .return) -JSL.l CheckForZelda +org $9AFC4D ; <- D7C4D - sprite_movable_mantle.asm:31 (LDA $7EF3CC : CMP.b #$01 : BNE .return) +JSL CheckForZelda ;-------------------------------------------------------------------------------- -org $1AFC55 ; <- D7C55 - sprite_movable_mantle.asm:34 (LDA $7EF34A : BEQ .return) +org $9AFC55 ; <- D7C55 - sprite_movable_mantle.asm:34 (LDA $7EF34A : BEQ .return) NOP #6 ; remove check ;-------------------------------------------------------------------------------- -org $068841 ; <- 30841 - sprite_prep.asm:269 (LDA $0D00, X : ADD.b #$03 : STA $0D00, X) -JSL.l Mantle_CorrectPosition : NOP #2 +org $868841 ; <- 30841 - sprite_prep.asm:269 (LDA $0D00, X : ADD.b #$03 : STA $0D00, X) +JSL Mantle_CorrectPosition : NOP #2 ;-------------------------------------------------------------------------------- -org $0DFA53 ; <- 6FA53 - hud check for lantern -JSL.l LampCheck +org $8DFA53 ; <- 6FA53 - hud check for lantern +JSL LampCheck ;-------------------------------------------------------------------------------- -org $01F503 ; <- F503 - Bank01.asm:14994 (LDA.b #$01 : STA $1D) -JSL.l SetOverlayIfLamp +org $81F503 ; <- F503 - Bank01.asm:14994 (LDA.b #$01 : STA $1D) +JSL SetOverlayIfLamp ;================================================================================ ;================================================================================ @@ -2078,26 +2073,26 @@ JSL.l SetOverlayIfLamp ; overlay to draw when leaving the cave again. We also use this value to ; identify the tavern entrance to determine whether link should walk up or down. ;-------------------------------------------------------------------------------- -org $1BBD5F ; <- Bank1b.asm:296 (LDA $1BBB73, X : STA $010E) -JSL.l StoreLastOverworldDoorID : NOP #3 +org $9BBD5F ; <- Bank1b.asm:296 (LDA $1BBB73, X : STA $010E) +JSL StoreLastOverworldDoorID : NOP #3 ;-------------------------------------------------------------------------------- -org $02D754 ; <- Bank02.asm:10847 (LDA $D724, X : STA $0696 : STZ $0698) -JSL.l CacheDoorFrameData : NOP #5 +org $82D754 ; <- Bank02.asm:10847 (LDA $D724, X : STA $0696 : STZ $0698) +JSL CacheDoorFrameData : NOP #5 ;-------------------------------------------------------------------------------- -org $0298AD ; <- Bank02.asm:4495 (LDA $010E : CMP.b #$43) -JSL.l WalkDownIntoTavern : NOP #1 +org $8298AD ; <- Bank02.asm:4495 (LDA $010E : CMP.b #$43) +JSL WalkDownIntoTavern : NOP #1 ;================================================================================ ;================================================================================ ; Hole fixes ;-------------------------------------------------------------------------------- -org $1BB88E ; <- DB88E - Bank1B.asm:59 (LDX.w #$0024) -JML.l CheckHole -org $1BB8A4 ; <- DB8A4 - Bank1B.asm:78 (LDX.w #$0026) +org $9BB88E ; <- DB88E - Bank1B.asm:59 (LDX.w #$0024) +JML CheckHole +org $9BB8A4 ; <- DB8A4 - Bank1B.asm:78 (LDX.w #$0026) Overworld_Hole_GotoHoulihan: -org $1BB8AF ; <- DB8AF - Bank1B.asm:85 (.matchedHole) +org $9BB8AF ; <- DB8AF - Bank1B.asm:85 (.matchedHole) Overworld_Hole_matchedHole: -org $1BB8BD ; <- DB8BD - Bank1B.asm:85 (PLB) +org $9BB8BD ; <- DB8BD - Bank1B.asm:85 (PLB) Overworld_Hole_End: ;================================================================================ @@ -2106,57 +2101,57 @@ Overworld_Hole_End: ; this check is intended to prevent getting fluted out a second time if you ; return to his room after already killing him once. ;--------------------------------------------------------------------------------- -org $01C74E ; 00C74E - bank_01.asm:13281 - (LDA.l $7EF2DB : AND.b #$20) +org $81C74E ; 00C74E - bank_01.asm:13281 - (LDA.l $7EF2DB : AND.b #$20) LDA.l Aga2Duck : NOP #2 ;================================================================================ ; Music fixes ;-------------------------------------------------------------------------------- -org $0282F4 ; <- Bank02.asm:654 (LDY.b #$58 ...) -JML.l PreOverworld_LoadProperties_ChooseMusic -org $028389 ; <- Bank02.asm:763 +org $8282F4 ; <- Bank02.asm:654 (LDY.b #$58 ...) +JML PreOverworld_LoadProperties_ChooseMusic +org $828389 ; <- Bank02.asm:763 PreOverworld_LoadProperties_SetSong: ;-------------------------------------------------------------------------------- ; Remove Aga1 check for Kakariko music, always play track 7 -org $02A992 ; (BCS $A999) +org $82A992 ; (BCS $A999) NOP #2 -org $02A9B0 ; (BCS $A9B7) +org $82A9B0 ; (BCS $A9B7) NOP #2 -org $02C1C8 ; (BCS $C1CC) +org $82C1C8 ; (BCS $C1CC) NOP #2 -org $02ADA0 ; (LDA.b #$F1 : STA $012C) +org $82ADA0 ; (LDA.b #$F1 : STA $012C) JSL Overworld_MosaicDarkWorldChecks : NOP ;-------------------------------------------------------------------------------- -org $05CC58 ; <- Bank05.asm:1307 (LDA $040A : CMP.b #$18) +org $85CC58 ; <- Bank05.asm:1307 (LDA $040A : CMP.b #$18) JSL PsychoSolder_MusicCheck : NOP #1 ;-------------------------------------------------------------------------------- -org $02B13A ; <- Bank02.asm:7647 +org $82B13A ; <- Bank02.asm:7647 dl Overworld_FinishMirrorWarp ;-------------------------------------------------------------------------------- -org $0AB949 ; <- Bank0A.asm:270 (Different from US ROM) +org $8AB949 ; <- Bank0A.asm:270 (Different from US ROM) JSL BirdTravel_LoadTargetAreaMusic : NOP #16 ;================================================================================ ;================================================================================ ; Hooks for roomloading.asm ;-------------------------------------------------------------------------------- -org $02895D ; <- Bank02.asm:1812 (JSL Dungeon_LoadRoom) +org $82895D ; <- Bank02.asm:1812 (JSL Dungeon_LoadRoom) JSL LoadRoomHook ;-------------------------------------------------------------------------------- -org $028BE7 ; <- Bank02.asm:2299 (JSL Dungeon_LoadRoom) +org $828BE7 ; <- Bank02.asm:2299 (JSL Dungeon_LoadRoom) JSL LoadRoomHook_noStats ;-------------------------------------------------------------------------------- -org $029309 ; <- Bank02.asm:3533 (JSL Dungeon_LoadRoom) +org $829309 ; <- Bank02.asm:3533 (JSL Dungeon_LoadRoom) JSL LoadRoomHook_noStats ;-------------------------------------------------------------------------------- -org $02C2F3 ; <- Bank02.asm:10391 (JSL Dungeon_LoadRoom) +org $82C2F3 ; <- Bank02.asm:10391 (JSL Dungeon_LoadRoom) JSL LoadRoomHook_noStats ;================================================================================ ;================================================================================ ; Hooks into the "Reloading all graphics" routine ;-------------------------------------------------------------------------------- -org $00E64D ; <- Bank00.asm:5656 (STZ $00 : STX $01 : STA $02) +org $80E64D ; <- Bank00.asm:5656 (STZ $00 : STX $01 : STA $02) JML BgGraphicsLoading BgGraphicsLoadingCancel: RTS : NOP @@ -2166,58 +2161,58 @@ BgGraphicsLoadingResume: ;================================================================================ ; Hook when updating the floor tileset in dungeons (such as between floors) ;-------------------------------------------------------------------------------- -org $00DF62 ; <- Bank00.asm:4672 (LDX.w #$0000 : LDY.w #$0040) +org $80DF62 ; <- Bank00.asm:4672 (LDX.w #$0000 : LDY.w #$0040) JML ReloadingFloors : NOP #2 ReloadingFloorsResume: -org $00DF6E ; <- A few instructions later, right after JSR Do3To.high16Bit +org $80DF6E ; <- A few instructions later, right after JSR Do3To.high16Bit ReloadingFloorsCancel: ;================================================================================ ;================================================================================ ; Hook bow use - to use rupees instead of actual arrows ;-------------------------------------------------------------------------------- -org $07A055 ; <- Bank07.asm:5205 (LDA $0B99 : BEQ BRANCH_DELTA) -JSL.l ArrowGame : NOP #14 +org $87A055 ; <- Bank07.asm:5205 (LDA $0B99 : BEQ BRANCH_DELTA) +JSL ArrowGame : BRA ++ : NOP #12 : ++ -org $07A06C ; <- Bank07.asm:5215 (LDA $7EF377 : BEQ BRANCH_EPSILON) -JSL.l DecrementArrows : SKIP 2 : NOP : LDA CurrentArrows +org $87A06C ; <- Bank07.asm:5215 (LDA $7EF377 : BEQ BRANCH_EPSILON) +JSL DecrementArrows : SKIP 2 : NOP : LDA CurrentArrows ;================================================================================ ;================================================================================ ; Quick Swap ;-------------------------------------------------------------------------------- -org $0287FB ; <- 107FB - Bank02.asm:1526 (LDA $F6 : AND.b #$40 : BEQ .dontActivateMap) -JSL.l QuickSwap +org $8287FB ; <- 107FB - Bank02.asm:1526 (LDA $F6 : AND.b #$40 : BEQ .dontActivateMap) +JSL QuickSwap -org $02A451 ; <- 12451 - Bank02.asm:6283 (LDA $F6 : AND.b #$40 : BEQ .xButtonNotDown) -JSL.l QuickSwap +org $82A451 ; <- 12451 - Bank02.asm:6283 (LDA $F6 : AND.b #$40 : BEQ .xButtonNotDown) +JSL QuickSwap ;================================================================================ ;================================================================================ ; Tagalong Fixes ;-------------------------------------------------------------------------------- -org $0689AB ; <- 309AB - sprite_prep.asm: 647 (LDA $7EF3CC : CMP.b #$06 : BEQ .killSprite) +org $8689AB ; <- 309AB - sprite_prep.asm: 647 (LDA $7EF3CC : CMP.b #$06 : BEQ .killSprite) ; Note: In JP 1.0 we have: (CMP.b #$00 : BNE .killSprite) appling US bugfix ; Prevent followers from causing blind/maiden to despawn: -CMP.b #$06 : db #$F0 ; BEQ +CMP.b #$06 : db $F0 ; BEQ ;-------------------------------------------------------------------------------- ; Fix old man purple chest issues using the same method as above -org $1EE906 ; <- F6906 - sprite_old_mountain_man.asm : 31 (LDA $7EF3CC : CMP.b #$00 : BNE .already_have_tagalong) -CMP.b #$04 : db #$F0 ; BEQ +org $9EE906 ; <- F6906 - sprite_old_mountain_man.asm : 31 (LDA $7EF3CC : CMP.b #$00 : BNE .already_have_tagalong) +CMP.b #$04 : db $F0 ; BEQ ;-------------------------------------------------------------------------------- ;Control which doors frog/smith can enter -org $1BBCF0 ; <- DBCF0 - Bank1B.asm: 248 (LDA $04B8 : BNE BRANCH_MU) +org $9BBCF0 ; <- DBCF0 - Bank1B.asm: 248 (LDA $04B8 : BNE BRANCH_MU) Overworld_Entrance_BRANCH_LAMBDA: ; Branch here to show Cannot Enter with Follower message -org $1BBD55 ; <- DBD55 - Bank1B.asm: 290 (CPX.w #$0076 : BCC BRANCH_LAMBDA) -JML.l SmithDoorCheck : NOP +org $9BBD55 ; <- DBD55 - Bank1B.asm: 290 (CPX.w #$0076 : BCC BRANCH_LAMBDA) +JML SmithDoorCheck : NOP Overworld_Entrance_BRANCH_RHO: ; branch here to continue into door ;================================================================================ ;================================================================================ ; Paradox Cave Shopkeeper Fixes ;-------------------------------------------------------------------------------- -org $008C19 ; Bank00.asm@1633 (LDA.b #$01 : STA MDMAEN) +org $808C19 ; Bank00.asm 1633 (LDA.b #$01 : STA MDMAEN) JSL ParadoxCaveGfxFix : NOP ;================================================================================ @@ -2225,13 +2220,13 @@ JSL ParadoxCaveGfxFix : NOP ; Resolve conflict between race game and witch item ;-------------------------------------------------------------------------------- ; Change race game to use $021B instead of $0ABF for detecting cheating -org $0DCB9D ; STZ.w $0ABF +org $8DCB9D ; STZ.w $0ABF STZ.w RaceGameFlag -org $0DCBFE ; LDA.w $0ABF +org $8DCBFE ; LDA.w $0ABF LDA.w RaceGameFlag -org $02BFE0 ; LDA.b #$01 : STA.w $0ABF +org $82BFE0 ; LDA.b #$01 : STA.w $0ABF JSL SetOverworldTransitionFlags : NOP ; For mirroring, the new flag is set in IncrementOWMirror in stats.asm ;================================================================================ @@ -2239,7 +2234,7 @@ JSL SetOverworldTransitionFlags : NOP ;================================================================================ ; Player Sprite Fixes ;-------------------------------------------------------------------------------- -org $0DA9C8 ; <- 06A9C8 - player_oam.asm: 1663 (AND.w #$00FF : CMP.w #$00F8 : BCC BRANCH_MARLE) +org $8DA9C8 ; <- 06A9C8 - player_oam.asm: 1663 (AND.w #$00FF : CMP.w #$00F8 : BCC BRANCH_MARLE) ; We are converting this branching code that basically puts the carry from the ; CMP into $02 into constant time code, so that player sprite head-bobbing can ; be removed by sprites while remaining race legal (cycle-for-cycle identical @@ -2247,63 +2242,63 @@ org $0DA9C8 ; <- 06A9C8 - player_oam.asm: 1663 (AND.w #$00FF : CMP.w #$00F8 : BC LDA.b Scrap02 ; always zero! (this replaces the BCC) ADC.w #0000 ; put the carry bit into the accumulator instead of a hardcoded 1. ;------------------------------------------------------------------------------- -org $02FD6F ; <- 017d6f - bank0E.asm: 3694 (LoadActualGearPalettes:) Note: Overflow of bank02 moved to 0e in US Rom +org $82FD6F ; <- 017d6f - bank0E.asm: 3694 (LoadActualGearPalettes:) Note: Overflow of bank02 moved to 0e in US Rom JSL LoadActualGearPalettesWithGloves : RTL ;-------------------------------------------------------------------------------- ; Bunny Palette/Overworld Map Bugfix ;-------------------------------------------------------------------------------- -org $02FDF0 ; <- 017df0 - bank0E (LDA [$00] : STA $7EC300, X : STA $7EC500, X) +org $82FDF0 ; <- 017df0 - bank0E (LDA [$00] : STA $7EC300, X : STA $7EC500, X) JSL LoadGearPalette_safe_for_bunny : RTS ;================================================================================ ;================================================================================ ; Chest Encryption ;-------------------------------------------------------------------------------- -org $01EBEB ; <- 0EBEB - bank01.asm : 13760 (INC $0E) -JML.l GetChestData : NOP -org $01EBDE ; <- 0EBDE - bank01.asm : 13740 (.couldntFindChest) +org $81EBEB ; <- 0EBEB - bank01.asm : 13760 (INC $0E) +JML GetChestData : NOP +org $81EBDE ; <- 0EBDE - bank01.asm : 13740 (.couldntFindChest) Dungeon_OpenKeyedObject_couldntFindChest: -org $01EBF0 ; <- 0EBF0 - bank01.asm : 13764 (.nextChest) +org $81EBF0 ; <- 0EBF0 - bank01.asm : 13764 (.nextChest) Dungeon_OpenKeyedObject_nextChest: -org $01EC14 ; <- 0EC14 - bank01.asm : 13783 (LDX $040C) +org $81EC14 ; <- 0EC14 - bank01.asm : 13783 (LDX $040C) Dungeon_OpenKeyedObject_bigChest: -org $01EC38 ; <- 0EC38 - bank01.asm : 13809 (.smallChest) +org $81EC38 ; <- 0EC38 - bank01.asm : 13809 (.smallChest) Dungeon_OpenKeyedObject_smallChest: ;================================================================================ ;================================================================================ ; Murahdahla (The brother who re-assembles the triforce pieces) ;-------------------------------------------------------------------------------- -org $06C092 ; bank06.asm:1864 (JSL Sprite_ElderLong) [22 CD F0 05] +org $86C092 ; bank06.asm:1864 (JSL Sprite_ElderLong) [22 CD F0 05] JSL NewElderCode ;-------------------------------------------------------------------------------- ; Add him to Castle Map post-rain, and post aga1 ;-------------------------------------------------------------------------------- -org $09D0AC -db #$18, #$0F, #$43, #$FF ;remove heart from tree adjancent map [LW1] -db #$12, #$19, #$16 ;add sahasrala in castle Y, X, Sprite ID -org $09C937 -db #$B0, #$D0 ;change [LW1] map 01C pointers -org $09D421 -db #$18, #$0F, #$45, #$FF;remove heart from tree adjancent map [LW2] -db #$12, #$19, #$16 ;add sahasrala in castle Y, X, Sprite ID -org $09CA57 -db #$25, #$D4 ;change [LW2] map 01C pointers +org $89D0AC +db $18, $0F, $43, $FF ; remove heart from tree adjancent map [LW1] +db $12, $19, $16 ; add sahasrala in castle Y, X, Sprite ID +org $89C937 +db $B0, $D0 ; change [LW1] map 01C pointers +org $89D421 +db $18, $0F, $45, $FF ; remove heart from tree adjancent map [LW2] +db $12, $19, $16 ; add sahasrala in castle Y, X, Sprite ID +org $89CA57 +db $25, $D4 ; change [LW2] map 01C pointers ;-------------------------------------------------------------------------------- ; Expanded trinexx sheet gfx. ;-------------------------------------------------------------------------------- -org $00CFC0+178 : db #$33 -org $00D09F+178 : db #$90 -org $00D17E+178 : db #$00 +org $80CFC0+178 : db ExpandedTrinexx>>16 +org $80D09F+178 : db ExpandedTrinexx>>8 +org $80D17E+178 : db ExpandedTrinexx>>0 ; Use above sheet in Hyrule castle courtyard after rain state. -org $00DB9E ; Hyrule Castle GFX Sprite Sheet 4 on [LW1] -db #$3F -org $00DC0A ; Hyrule Castle GFX Sprite Sheet 4 on [LW2] -db #$3F +org $80DB9E ; Hyrule Castle GFX Sprite Sheet 4 on [LW1] +db $3F +org $80DC0A ; Hyrule Castle GFX Sprite Sheet 4 on [LW2] +db $3F ;-------------------------------------------------------------------------------- ; Updated evil barrier animation table ;-------------------------------------------------------------------------------- -org $1DF0E1 ;Evil Barrier new draw code +org $9DF0E1 ;Evil Barrier new draw code dw 0, 0 : db $CC, $00, $00, $02 dw -29, 3 : db $EA, $00, $00, $00 @@ -2359,7 +2354,7 @@ dw 37, 11 : db $FB, $40, $00, $00 ;-------------------------------------------------------------------------------- ; Allow Bunny Link to Read Signposts ;-------------------------------------------------------------------------------- -org $07839E ; bunny BAGE check +org $87839E ; bunny BAGE check BunnyRead: JSR.w $07B5A9 ; check A button BCC .noA @@ -2370,7 +2365,7 @@ BunnyRead: .noread .noA -org $07FFF4 +org $87FFF4 CheckIfReading: JSR.w $07D36C ; check action LDA.b #$80 : TRB.b $3B @@ -2379,136 +2374,136 @@ CheckIfReading: ;================================================================================ -org $0DB4CA : db $40, $40 ; fire bar statis -org $0DB4A9 : db $50, $50, $6E, $6E ; roller statis -org $0DB4B2 : db $40, $40, $40, $40 ; cannon statis -org $0DB4C3 : db $C0 ; anti fairy statis -org $0DB516 : db $40 ; chain chomp statis +; remove kill room requirements +org $8DB4CA : db $40, $40 ; fire bar +org $8DB4A9 : db $50, $50, $6E, $6E ; roller +org $8DB4B2 : db $40, $40, $40, $40 ; cannon +org $8DB4C3 : db $C0 ; anti fairy +org $8DB516 : db $40 ; chain chomp ;-------------------------------------------------------------------------------- ; Keep Firebar Damage on Same Layer ;-------------------------------------------------------------------------------- -org $06F425 -Sprite_AttemptDamageToPlayerPlusRecoilLong: - -org $1ED1B6 -JSL NewFireBarDamage +org $9ED1B6 : JSL NewFireBarDamage ;================================================================================ ; Remove heart beeps from 1/2 max HP -org $0DDB60 +org $8DDB60 db $00, $00 - +;================================================================================ +; Credits +;================================================================================ +org $8EE651 : JSL LoadCreditsTiles +org $8EEDAF : JSL NearEnding +org $8EEDD9 : JSL EndingItems +org $8EE828 : JSL PreparePointer : LDA.b [CreditsPtr],Y : NOP +org $8EE83F : LDA.b [CreditsPtr],Y : NOP +org $8EE853 +LDA.b [CreditsPtr],Y : NOP : AND.w #$00FF : ASL A : JSL CheckFontTable +org $8EE86D : JSL RenderCreditsStatCounter : JMP.w AfterDeathCounterOutput +org $82857D : JSL LoadOverworldCreditsTiles ;================================================================================ ; Fast credits - -org $02A096 -JSL DumbFlagForMSU - -org $0EC3AF -JSL FastCreditsScrollOW : JMP.w $0EC3C7 - -org $0EC41F -JSL FastCreditsCutsceneUnderworldY - -org $0EC42C -JSL FastCreditsCutsceneUnderworldX - -org $0EC488 -JSL FastCreditsCutsceneTimer - -org $0EE773 -JSL FastTextScroll : NOP +org $8EC2B1 : JSL FlagFastCredits +org $82A096 : JSL DumbFlagForMSU +org $8EC3AF : JSL FastCreditsScrollOW : JMP.w $0EC3C7 +org $8EC41F : JSL FastCreditsCutsceneUnderworldY +org $8EC42C : JSL FastCreditsCutsceneUnderworldX +org $8EC488 : JSL FastCreditsCutsceneTimer +org $8EE773 : JSL FastTextScroll : NOP ;================================================================================ -org $01FFEE : JSL IncrementDamageTakenCounter_Eight ; overworld pit -org $079506 : JSL IncrementDamageTakenCounter_Eight ; underworld pit +org $81FFEE : JSL IncrementDamageTakenCounter_Eight ; overworld pit +org $879506 : JSL IncrementDamageTakenCounter_Eight ; underworld pit -org $07B0B1 : JSL IncrementMagicUseCounter +org $87B0B1 : JSL IncrementMagicUseCounter ;================================================================================ ; Boss icons -org $0AEEDF : db $02 ; big icon -org $0AEAFF : db $48 ; X position +org $8AEEDF : db $02 ; big icon +org $8AEAFF : db $48 ; X position -org $0AEED4 ; disable flashing +org $8AEED4 ; disable flashing BRA ++ : NOP #6 : ++ -org $0AEEF2 +org $8AEEF2 SBC.b #$03 : STA.w $0801,X LDA.b #$03 : STA.w $0802,X LDA.b #$31 : STA.w $0803,X +org $808BE5 ; hijack stripes for boss GFX transfer +JSL DoDungeonMapBossIcon + ;================================================================================ -org $01C4B8 +org $81C4B8 JSL FixJingleGlitch -org $01C536 +org $81C536 JSL FixJingleGlitch -org $01C592 +org $81C592 JSL FixJingleGlitch -org $01C65F +org $81C65F JSL FixJingleGlitch ;================================================================================ ; Bomb-Only Mode ;-------------------------------------------------------------------------------- -org $06ECC3 ; Bank06.asm@4704 (PHX : TAX : LDA.l .damage_classes, X : PLX) +org $86ECC3 ; Bank06.asm@4704 (PHX : TAX : LDA.l .damage_classes, X : PLX) JSL DamageClassCalc BRA + : NOP #29 : + ;-------------------------------------------------------------------------------- -org $0882D4 ; Bank08.asm@445 (PHX : TYX : ... ) +org $8882D4 ; Bank08.asm@445 (PHX : TYX : ... ) JSL Utility_CheckAncillaOverlapWithSprite BRA + : NOP #5 : + ;-------------------------------------------------------------------------------- -org $088DB1 ; Bank08.asm@1207 (PHY : PHX : TYX : ... ) +org $888DB1 ; Bank08.asm@1207 (PHY : PHX : TYX : ... ) JSL Utility_CheckAncillaOverlapWithSprite BRA + : NOP #7 : + ;-------------------------------------------------------------------------------- -org $08E252 ; Bank08.asm@1770 (PHY : PHX : TYX : ... ) +org $88E252 ; Bank08.asm@1770 (PHY : PHX : TYX : ... ) JSL Utility_CheckAncillaOverlapWithSprite BRA + : NOP #7 : + ;-------------------------------------------------------------------------------- -org $0882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03) +org $8882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03) JSL Utility_CheckHelmasaurKingCollision NOP ;-------------------------------------------------------------------------------- -org $1E838C ; sprite_helmasaur_king.asm@522 (LDA $0301 : AND.b #$0A) +org $9E838C ; sprite_helmasaur_king.asm@522 (LDA $0301 : AND.b #$0A) JSL Utility_CheckHammerHelmasaurKingMask NOP ;-------------------------------------------------------------------------------- -org $06ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40) +org $86ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40) JSL Utility_CheckImpervious NOP ;-------------------------------------------------------------------------------- -org $068F94 ; sprite_prep.asm@1984 (INC $0BA0, X : JSL Sprite_InitializedSegmented) +org $868F94 ; sprite_prep.asm@1984 (INC $0BA0, X : JSL Sprite_InitializedSegmented) JSL AllowBombingMoldorm BRA + : NOP : + ;-------------------------------------------------------------------------------- -org $06892F ; sprite_prep.asm@548 (LDA $0D00, X : SUB #$0C : STA $0D00, X : ...) +org $86892F ; sprite_prep.asm@548 (LDA $0D00, X : SUB #$0C : STA $0D00, X : ...) JSL AllowBombingBarrier RTS : NOP #7 ;-------------------------------------------------------------------------------- -org $0DE4BF ; equipment.asm@1247 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs : ...) +org $8DE4BF ; equipment.asm@1247 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs : ...) JSL DrawBombInMenu BRA + : NOP #13 : + ;-------------------------------------------------------------------------------- -org $0DFB6A ; headsup_display@727 (CPX #$0004 : BNE .bombsNotEquipped : LDA #$0001) +org $8DFB6A ; headsup_display@727 (CPX #$0004 : BNE .bombsNotEquipped : LDA #$0001) JSL DrawBombInYBox BRA + : NOP #2 : + ;-------------------------------------------------------------------------------- -org $0DEE05 ; equipment.asm@2065 (LDA $7EF359 : AND.w #$00FF : CMP.w #$00FF : ...) +org $8DEE05 ; equipment.asm@2065 (LDA $7EF359 : AND.w #$00FF : CMP.w #$00FF : ...) JSL DrawSwordInMenu BRA + : NOP #16 : + ;-------------------------------------------------------------------------------- -org $0DFA92 ; headsup_display.asm@622 (PDB : LDA.w #$0149 : ...) +org $8DFA92 ; headsup_display.asm@622 (PDB : LDA.w #$0149 : ...) JSL DrawBombOnHud BRA + : NOP #8 : + ;-------------------------------------------------------------------------------- -org $089EF8 ; ancilla_bomb@1438 (LDA.w #$04 : STA $0B) +org $889EF8 ; ancilla_bomb@1438 (LDA.w #$04 : STA $0B) JSL SetBombSpriteColor ;-------------------------------------------------------------------------------- ; bomb icons with numbers -org $0DFC51 ; is this being used? I hope not! let's find out if anything breaks! +org $8DFC51 ; is this being used? I hope not! let's find out if anything breaks! db $F5, $20, $F5, $20, $F5, $20, $F5, $20 db $B2, $3C, $B3, $3C, $C2, $3C, $17, $3C db $B2, $2C, $B3, $2C, $C2, $2C, $18, $2C @@ -2517,7 +2512,7 @@ db $B2, $28, $B3, $28, $C2, $28, $1A, $28 db $B2, $28, $B3, $28, $C2, $28, $1B, $28 ; bomb icons without numbers -org $0DFC81 +org $8DFC81 db $F5, $20, $F5, $20, $F5, $20, $F5, $20 db $B2, $3C, $B3, $3C, $C2, $3C, $C2, $7C db $B2, $2C, $B3, $2C, $C2, $2C, $C2, $6C @@ -2525,10 +2520,10 @@ db $B2, $24, $B3, $24, $C2, $24, $C2, $64 db $B2, $28, $B3, $28, $C2, $28, $C2, $68 db $B2, $28, $B3, $28, $C2, $28, $C2, $68 ;-------------------------------------------------------------------------------- -org $079CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A) +org $879CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A) JSL CheckDetonateBomb ;-------------------------------------------------------------------------------- -org $079D08 ; bank_07.asm@6068 (INC $3C : LDA $3C : CMP #$09) +org $879D08 ; bank_07.asm@6068 (INC $3C : LDA $3C : CMP #$09) JSL NoSwingHammerB : NOP #2 ;-------------------------------------------------------------------------------- org $1EDCF8 ; bank_1E.asm@16086 (LDX $0202 : ...) @@ -2547,37 +2542,37 @@ NOP #48 skip 11 .bee_valid_target ;-------------------------------------------------------------------------------- -org $07F88C ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however. +org $87F88C ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however. Link_UseHammerLong: JSR Link_UseHammer : RTL -warnpc $07F890 +warnpc $87F890 ;-------------------------------------------------------------------------------- -org $06F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10) +org $86F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10) JSL CheckBugNet : NOP -org $06EB91 ; bank_06.asm@21178 (LDA.w $037A : AND.b #$10) +org $86EB91 ; bank_06.asm@21178 (LDA.w $037A : AND.b #$10) JSL CheckBugNet : NOP ;-------------------------------------------------------------------------------- -org $06ED77 ; bank_06.asm@21597 (LDA.w $0301 : AND.b #$0A : ...) +org $86ED77 ; bank_06.asm@21597 (LDA.w $0301 : AND.b #$0A : ...) JSL SetHammerClass BRA + : NOP #7 : + ;================================================================================ ; Variable Ganon Vulnerability ;-------------------------------------------------------------------------------- -org $08BBD4 ; ancilla_magic_powder.asm@253 (LDA #$0A : JSL Ancilla_CheckSpriteDamage.preset_class) +org $88BBD4 ; ancilla_magic_powder.asm@253 (LDA #$0A : JSL Ancilla_CheckSpriteDamage.preset_class) JSL Ganon_CheckPowderVulnerability NOP #2 ;-------------------------------------------------------------------------------- -org $1D8F4E ; sprite_ganon.asm@325 (LDA $04C5 : CMP #$02) +org $9D8F4E ; sprite_ganon.asm@325 (LDA $04C5 : CMP #$02) JSL Ganon_CheckInvincible NOP ;-------------------------------------------------------------------------------- -org $0DD628 ; Bank0D.asm@1266 (LDA $0B6B, Y : AND #$02) +org $8DD628 ; Bank0D.asm@1266 (LDA $0B6B, Y : AND #$02) JSL CheckBeeBoss NOP ;-------------------------------------------------------------------------------- -org $0DD676 ; Bank0D.asm@1303 (TYX : JSL Ancilla_CheckSpriteDamage.preset_class) +org $8DD676 ; Bank0D.asm@1303 (TYX : JSL Ancilla_CheckSpriteDamage.preset_class) JSL Ganon_CheckBeeVulnerability NOP ;-------------------------------------------------------------------------------- @@ -2585,40 +2580,25 @@ NOP ;================================================================================ ; Pseudo-Sword Mode ;-------------------------------------------------------------------------------- -org $06ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2) +org $86ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2) JSL StoreSwordDamage ;================================================================================ ; Text Renderer ;-------------------------------------------------------------------------------- if !FEATURE_NEW_TEXT - org $0EF51B - JML RenderCharExtended - org $0EF520 - RenderCharExtended_returnOriginal: - org $0EF567 - RenderCharExtended_returnUncompressed: - - org $0EF356 - JSL RenderCharLookupWidth - org $0EF3BA - JSL RenderCharLookupWidth - org $0EF48E - JML RenderCharLookupWidthDraw - org $0EF499 - RenderCharLookupWidthDraw_return: - - org $0EF6AA - JML RenderCharToMapExtended - org $0EF6C2 - RenderCharToMapExtended_return: - - org $0EFA50 - JSL RenderCharSetColorExtended - org $0EEE5D - JSL RenderCharSetColorExtended_init - org $0EF285 - JSL RenderCharSetColorExtended_close : NOP + 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 ;================================================================================ @@ -2632,3 +2612,70 @@ JSL.l TransferVRAMStripes ;=================================================================================================== org $9BF029+1 : db $10 +;=================================================================================================== +; Item decompression/loading +;=================================================================================================== +; mushroom - are these even necessary in rando? +org $8283CF : JSL TransferItemReceiptToBuffer_using_GraphicsID +org $82ADB6 : JSL TransferItemReceiptToBuffer_using_GraphicsID +org $82ADE9 : JSL TransferItemReceiptToBuffer_using_GraphicsID + +; big key +org $869261 : JSL TransferItemReceiptToBuffer_using_GraphicsID + +; falling items +org $898BD2 : JSL TransferItemReceiptToBuffer_using_GraphicsID + +; misc +org $89878C : JSL TransferItemReceiptToBuffer_using_GraphicsID + +; rupees +org $88C6A0 : JSL TransferRupeesProperly + + +; pond items +org $898A4D : JSL TransferItemReceiptToBuffer_using_GraphicsID +org $898AEE : JSL TransferItemReceiptToBuffer_using_GraphicsID + +; flute +org $898C85 : JSL TransferItemReceiptToBuffer_using_GraphicsID + +; gt cutscene +org $899BBE : JSL TransferItemReceiptToBuffer_using_GraphicsID + +;=================================================================================================== +; gratuitous NOPs removed for speed +;=================================================================================================== +org $1D8E75 : RTS + +org $1DB5D8 : JML.l $9DB5DF +org $1DB605 : JML.l $9DB60C +org $1DBBF1 : JML.l $9DBBF8 +org $1DBC19 : JML.l $9DBC20 +org $1DC072 : JMP.w $9DC079 +org $1DC0A5 : JMP.w $9DC0AC +org $1DED3B : JML.l $9DED42 +org $1DED7A : JML.l $9DED81 + +org $05B55E : JMP ++ : ++ +org $05B580 : JMP ++ : ++ + +org $05B5BE : RTS + +org $0DD7AD : JMP ++ : ++ +org $0DD7CB : JMP ++ : ++ + +org $1E8A85 : RTS + +org $1E8955 : LDA 1,S : NOP +org $1E8973 : LDA 1,S : NOP +org $1E89AF : LDA 1,S : NOP +org $1E89D5 : LDA 1,S : NOP +org $1EB797 : LDA 1,S : NOP +org $1EB7D1 : LDA 1,S : NOP +org $1ED0A9 : LDA 1,S : NOP + +org $1ED122 : JMP ++ : ++ +org $1ED141 : JMP ++ : ++ + +;=================================================================================================== diff --git a/hud.asm b/hud.asm index 06904ae..ed684d9 100644 --- a/hud.asm +++ b/hud.asm @@ -1,47 +1,47 @@ -;org $0DFE97 ; <- 6FE97 - headsup_display.asm:1009 (.hud_tilemap) +;org $8DFE97 ; <- 6FE97 - headsup_display.asm:1009 (.hud_tilemap) ; DO NOT EXCEED 0x150 HUD_TileMap: - dw $207F, $207F, $2850, $A856 - dw $2852, $285B, $285B, $285C - ;dw $207F, $3CA8, $207F, $207F, $207F + dw $207F, $207F, $2850, $A856 + dw $2852, $285B, $285B, $285C + ;dw $207F, $3CA8, $207F, $207F, $207F dw $207F, $3C02, $3C03, $207F, $207F ; normal mode ;dw $3C02, $3C03, $207F, $207F, $207F ; rupee arrows - dw $2C88, $2C89, $207F, $20A7 - dw $20A9, $207F, $2871 ;, $207F - dw $207F, $207F, $288B, $288F - dw $24AB, $24AC, $688F, $688B - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $2854, $2871 - dw $2858, $207F, $207F, $285D - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $2854, $304E - dw $2858, $207F, $207F, $285D - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $2854, $305E - dw $2859, $A85B, $A85B, $A85C - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $2854, $305E - dw $6854, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $207F, $207F - dw $207F, $207F, $A850, $2856 - dw $E850 + dw $2C88, $2C89, $207F, $20A7 + dw $20A9, $207F, $2871 ;, $207F + dw $207F, $207F, $288B, $288F + dw $24AB, $24AC, $688F, $688B + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $2854, $2871 + dw $2858, $207F, $207F, $285D + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $2854, $304E + dw $2858, $207F, $207F, $285D + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $2854, $305E + dw $2859, $A85B, $A85B, $A85C + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $2854, $305E + dw $6854, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $207F, $207F + dw $207F, $207F, $A850, $2856 + dw $E850 diff --git a/init.asm b/init.asm index f20e7fe..fee19f9 100644 --- a/init.asm +++ b/init.asm @@ -48,12 +48,16 @@ Init_Primary: LDA.l OneMindTimerInit : STA.l OneMindTimerRAM SEP #$30 - LDA.b #$01 : STA.w MEMSEL ; enable fastrom access on upper banks - STA.l OneMindId + LDA.l RomSpeed : STA.w MEMSEL ; enable fastrom access on upper banks + LDA.b #$01 : STA.l OneMindId LDA.b #$10 : STA.b PlayerSpriteBank ; set default player sprite bank LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad -RTL + LDA.b #(ReturnFromInit>>16)|$80 : PHA : PLB + +JML ReturnFromInit + + ;-------------------------------------------------------------------------------- ; Init_PostRAMClear ;-------------------------------------------------------------------------------- @@ -64,6 +68,35 @@ Init_PostRAMClear: JSL MSUInit JSL InitRNGPointerTable - JSL InitDungeonCounts + JSL DecompressAllItemGraphics + JSR InitDungeonCounts -JML $00D463 ; The original target of the jump table that we hijacked +JML $80D463 ; The original target of the jump table that we hijacked + +;=================================================================================================== +InitDungeonCounts: + PHB + LDX.b #$0F + - + LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X + DEX + BPL - + LDX.b #$0F + - + LDA.l ChestKeys, X : STA.l MapTotalsWRAM, X + DEX + BPL - + + LDA.b #$7E + PHA : PLB + REP #$30 + LDA.l TotalItemCount + JSL.l HUDHex4Digit_Long + SEP #$20 + LDA.b Scrap04 : TAX : STX.w TotalItemCountTiles+$00 + LDA.b Scrap05 : TAX : STX.w TotalItemCountTiles+$02 + LDA.b Scrap06 : TAX : STX.w TotalItemCountTiles+$04 + LDA.b Scrap07 : TAX : STX.w TotalItemCountTiles+$06 + SEP #$10 + PLB +RTS diff --git a/initsramtable.asm b/initsramtable.asm index 004c76d..908ee85 100644 --- a/initsramtable.asm +++ b/initsramtable.asm @@ -14,30 +14,30 @@ fillword $0000 ; Zero out the table fill $500 ; -org $30B000 ; PC 0x183000 +org $B0B000 ; PC 0x183000 InitSRAMTable: InitRoomDataWRAM: -org $30B060 ; PC 0x183060 +org $B0B060 ; PC 0x183060 InitATAltarRoom: dw $0000 ; aga curtains -org $30B092 ; PC 0x183092 +org $B0B092 ; PC 0x183092 InitSWBackEntryRoom: dw $0000 ; skull woods curtains -org $30B20C +org $B0B20C dw $F000, $F000 ; Pre-open kak bomb hut & brewery -org $30B280 ; PC 0x183280 - 0x1832FF +org $B0B280 ; PC 0x183280 - 0x1832FF InitOverworldEvents: -org $30B282 ; PC 0x183282 - Lumberjacks +org $B0B282 ; PC 0x183282 - Lumberjacks InitLumberjackOW: db $00 -org $30B29B ; PC 0x18329B - Open castle gate +org $B0B29B ; PC 0x18329B - Open castle gate InitHyruleCastleOW: db $20 -org $30B2DB ; PC 0x1832DB - Pyramid hole +org $B0B2DB ; PC 0x1832DB - Pyramid hole InitPyramidOW: db $00 -org $30B2C3 ; PC 0x1832C3 - GT +org $B0B2C3 ; PC 0x1832C3 - GT InitDDMWestOW: db $00 -org $30B340 ; PC 0x183340 +org $B0B340 ; PC 0x183340 StartingEquipment: StartingBow: skip 1 ; PC 0x183340 StartingBoomerang: skip 1 ; PC 0x183341 @@ -129,13 +129,13 @@ InitDroppedFollowerIndoors: skip 1 ; PC 0x1833D1 InitDroppedFollowerLayer: skip 1 ; PC 0x1833D2 InitFollowerDropped: skip 1 ; PC 0x1833D3 -org $30B3D9 ; PC 0x1833D9 - 0x1833F0 +org $B0B3D9 ; PC 0x1833D9 - 0x1833F0 StaticFileName: ; The validity value ($55AA) must be written manually on SRAM init at $7003E1 dw $0181, $0068, $006E, $018C dw $0166, $0064, $0068, $018C dw $0165, $0068, $006D, $018C -org $30B401 ; PC 0x183401 +org $B0B401 ; PC 0x183401 InitDeathCounter: dw $FFFF @@ -147,29 +147,29 @@ dw $FFFF ; excluding ~28 bytes (File name, validity value, and checksum.) ;-------------------------------------------------------------------------------- -org $30B414 ; PC 0x183414-0x183416 +org $B0B414 ; PC 0x183414-0x183416 InitMapOverlay: dw $0000 -org $30B417 ; PC 0x183417 +org $B0B417 ; PC 0x183417 InitHighestSword: db $00 -org $30B414 ; PC 0x183418-0x183419 +org $B0B414 ; PC 0x183418-0x183419 InitGoalCounter: dw $0000 -org $30B422 ; PC 0x183422 +org $B0B422 ; PC 0x183422 InitHighestShield: db $00 -org $30B428 ; PC 0x183428 +org $B0B428 ; PC 0x183428 InitMapsCompasses: db $00 -org $30B429 ; PC 0x183429 +org $B0B429 ; PC 0x183429 InitPendantCounter: db $00 -org $30B454 ; PC 0x183454-0x183457 +org $B0B454 ; PC 0x183454-0x183457 InitChallengeTimer: dw $0000, $0000 -org $30B46E ; PC 0x18346E +org $B0B46E ; PC 0x18346E InitHighestMail: db $00 -org $30B471 ; PC 0x183471 +org $B0B471 ; PC 0x183471 InitCrystalCounter: db $00 diff --git a/inventory.asm b/inventory.asm index 0c0fa24..e21f548 100644 --- a/inventory.asm +++ b/inventory.asm @@ -1,28 +1,6 @@ ;================================================================================ ; Inventory Updates ;================================================================================ -; InventoryTracking -; ------oq brmpnskf -; b = blue boomerang | - -; r = red boomerang | - -; m = mushroom current | - -; p = magic powder | - -; n = mushroom past | - -; s = shovel | - -; k = fake flute | o = any bomb acquired from item location -; f = working flute | q = quickswap locked -;-------------------------------------------------------------------------------- -; BowTracking -; Item Tracking Slot #2 -; bsp----- -; b = bow -; s = silver arrow bow -; p = 2nd progressive bow -; - -; - -; - -; - -; - ;-------------------------------------------------------------------------------- ; ProcessMenuButtons: ; out: Carry - 0 = No Button, 1 = Yes Button @@ -32,10 +10,9 @@ ProcessMenuButtons: BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held .sel_unheld - LDA.l HudFlag : AND.b #$20 : BEQ + - LDA.l HudFlag : AND.b #$DF : STA.l HudFlag ; select is released, unset hud flag - LDA.b IndoorsFlag : BEQ + ; skip if outdoors - LDA.b #$20 : STA.w SFX3 ; menu select sound + LDA.l HudFlag : AND.b #$60 : BEQ + + LDA.b #$00 : STA.l HudFlag + JSL.l MaybePlaySelectSFX + JSL.l ResetEquipment + @@ -43,8 +20,14 @@ ProcessMenuButtons: CLC ; no buttons RTL .sel_pressed - LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag ; set hud flag - LDA.b #$20 : STA.w SFX3 ; menu select sound + LDA.l HUDDungeonItems : BIT.b #$0C : BNE + + LDA.b #$40 + BRA .store_flag + + + LDA.b #$60 + .store_flag + STA.l HudFlag + JSL.l MaybePlaySelectSFX JSL.l ResetEquipment RTL .y_pressed ; Note: used as entry point by quickswap code. Must preserve X. @@ -129,10 +112,6 @@ ProcessBottleMenu: .no_bottles LDA.b #$00 ; pretend like the controller state was 0 from the overridden load RTL -; .y_not_pressed -; LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over - load controller state -;RTL -;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ;OpenBottleMenu: @@ -162,548 +141,212 @@ RTL ;-------------------------------------------------------------------------------- ; AddInventory: ;-------------------------------------------------------------------------------- -macro TopHalf(address) - LDA.l
: !ADD #$10 : STA.l
-endmacro - -macro BottomHalf(address) - PHA : PHX - LDA.l
: INC : AND.b #$0F : TAX - LDA.l
: AND.b #$F0 : STA.l
- TXA : ORA.l
: STA.l
- PLX : PLA -endmacro -;-------------------------------------------------------------------------------- -FullInventoryExternal: - PHA : PHX : PHP : JMP AddInventory_incrementCounts -;-------------------------------------------------------------------------------- AddInventory: - PHA : PHX : PHP - CPY.b #$0C : BNE + ; Blue Boomerang - LDA.l InventoryTracking : ORA.b #$80 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$2A : BNE + ; Red Boomerang - LDA.l InventoryTracking : ORA.b #$40 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$29 : BNE + ; Mushroom - LDA.l InventoryTracking : ORA.b #$28 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$0D : BNE + ; Magic Powder - LDA.l InventoryTracking : ORA.b #$10 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$13 : BNE + ; Shovel - LDA.l InventoryTracking : ORA.b #$04 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$14 : BNE + ; Flute (Inactive) - LDA.l InventoryTracking : ORA.b #$02 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$4A : BNE + ; Flute (Active) - LDA.l InventoryTracking : ORA.b #$01 : STA.l InventoryTracking - JMP .incrementCounts - + CPY.b #$0B : BNE + ; Bow - LDA.l ArrowMode : BNE +++ - LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking - +++ - JMP .incrementCounts - + CPY.b #$3A : BNE + ; Bow & Arrows - LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking - JMP .incrementCounts - + CPY.b #$3B : BNE + ; Bow & Silver Arrows - LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking - LDA.l ArrowMode : BNE +++ - LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; activate wood arrows when not in rupee bow - +++ - JMP .incrementCounts - + CPY.b #$43 : BNE + ; Single arrow - LDA.l ArrowMode : BEQ +++ - LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking ; activate wood arrows in quick-swap - +++ - JMP .incrementCounts - + CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows - LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking +; In: Y - Receipt ID +; Uses $0B-$0D for long absolute addressing + PHA : PHX : PHY : PHP : PHB + 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 + 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 + PLB : PLP : PLY : PLX : PLA +RTL + +ShopCheck: +; 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 + REP #$20 + LDA.b RoomIndex + CMP.w #274 : BEQ .nocount ; dark world death mountain shop, ornamental shield shop + CMP.w #271 : BEQ .nocount ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop + CMP.w #272 : BEQ .nocount ; red shield shop + CMP.w #284 : BEQ .nocount ; bomb shop + CMP.w #287 : BEQ .nocount ; kakariko shop + CMP.w #255 : BEQ .nocount ; light world death mountain shop + CMP.w #276 : BEQ .nocount ; waterfall fairy + CMP.w #277 : BEQ .nocount ; upgrade fairy (shop) + CMP.w #278 : BEQ .nocount ; pyramid fairy + SEP #$20 + .count + CLC +RTS + .nocount + SEP #$21 +RTS + +DungeonIncrement: + LDA.w InventoryTable_properties,Y : BIT.b #$40 : BEQ + + JSL.l CountChestKeyLong + - - .incrementCounts - ; don't count any of this stuff - CPY.b #$20 : BNE + : JMP .itemCounts : + ; Crystal - CPY.b #$26 : BNE + : JMP .itemCounts : + ; Heart Piece Completion Heart - CPY.b #$2E : BNE + : JMP .itemCounts : + ; Red Potion (Refill) - CPY.b #$2F : BNE + : JMP .itemCounts : + ; Green Potion (Refill) - CPY.b #$30 : BNE + : JMP .itemCounts : + ; Blue Potion (Refill) - CPY.b #$37 : BNE + : JMP .itemCounts : + ; Pendant - CPY.b #$38 : BNE + : JMP .itemCounts : + ; Pendant - CPY.b #$39 : BNE + : JMP .itemCounts : + ; Pendant - - CPY.b #$04 : !BLT .isSword ; Swords - Skip Shop/Fairy Check for Swords - CPY.b #$49 : BEQ .isSword - CPY.b #$50 : BEQ .isSword - CPY.b #$5E : BEQ .isSword - BRA + - .isSword - JMP .dungeonCounts - + - CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow - - LDA.b IndoorsFlag : BEQ ++ ; skip shop check if outdoors - LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ ++ ; skip shop check for chests - PHP : REP #$20 ; set 16-bit accumulator - LDA.b RoomIndex - CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop - CMP.w #271 : BNE + : JMP .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop - CMP.w #272 : BNE + : JMP .shop : + ; red shield shop - CMP.w #284 : BNE + : JMP .shop : + ; bomb shop - ;CMP.w #265 : BNE + : JMP .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted - ;CMP.w #271 : BNE + : JMP .shop : + ; lake hylia shop - CMP.w #287 : BNE + : JMP .shop : + ; kakariko shop - CMP.w #255 : BNE + : JMP .shop : + ; light world death mountain shop - CMP.w #276 : BNE + : JMP .shop : + ; waterfall fairy - CMP.w #277 : BNE + : JMP .shop : + ; upgrade fairy (shop) - CMP.w #278 : BNE + : JMP .shop : + ; pyramid fairy - PLP : BRA ++ - .shop - PLP : JMP .done - ++ - - .dungeonCounts - LDA.b IndoorsFlag : BNE + : JMP .fullItemCounts : + - SEP #$20 ; Set 8-bit Accumulator - - LDA.w DungeonID ; get dungeon id - CMP.b #$FF : BEQ .fullItemCounts - + LDA.b IndoorsFlag : BEQ .done + LDA.w DungeonID : BMI .done CMP.l BallNChainDungeon : BNE + - CPY.b #$32 : BNE + - JMP .done + CPY.b #$32 : BEQ .ballchain_bigkey + CMP.b #$04 : BCS + - LDA.l SewersLocations : INC : STA.l SewersLocations - LDA.l HCLocations : INC : STA.l HCLocations - BRA .fullItemCounts - + LSR : TAX : LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X - ++ CPX.b #$0D : BNE + - LDA.l BigKeyField : AND.b #$04 : BNE ++ - JSR .incrementGTowerPreBigKey - ++ - + - ; == END INDOOR-ONLY SECTION - .fullItemCounts - - LDA.l BootsEquipment : BNE + ; Check for Boots - LDA.l PreBootsLocations : INC : STA.l PreBootsLocations ; Increment Pre Boots Counter - + - - LDA.l MirrorEquipment : BNE + ; Check for Mirror - LDA.l PreMirrorLocations : INC : STA.l PreMirrorLocations ; Increment Pre Mirror Counter - + - - LDA.l FluteEquipment : BNE + ; Check for Flute - LDA.l PreFluteLocations : INC : STA.l PreFluteLocations ; Increment Pre Mirror Counter - + - - REP #$20 - LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total - SEP #$20 - - .itemCounts - - CPY.b #$00 : BNE + ; Fighter's Sword & Fighter's Shield - LDX.b #$01 - JSR .incrementSword - JSR .incrementShield - JMP .done - + CPY.b #$01 : BNE + ; Master Sword - LDX.b #$02 - JSR .incrementSword - JMP .done - + CPY.b #$02 : BNE + ; Tempered Sword - LDX.b #$03 - JSR .incrementSword - JMP .done - + CPY.b #$03 : BNE + ; Golden Sword - LDX.b #$04 - JSR .incrementSword - JMP .done - + CPY.b #$04 : BNE + ; Fighter's Shield - LDX.b #$01 - JSR .incrementShield - JMP .done - + CPY.b #$05 : BNE + ; Red Shield - LDX.b #$02 - JSR .incrementShield - JMP .done - + CPY.b #$06 : BNE + ; Mirror Shield - LDX.b #$03 - JSR .incrementShield - JMP .done - + CPY.b #$07 : !BLT + ; Items $07 - $0D - CPY.b #$0E : !BGE + - JSR .incrementY - JMP .done - + CPY.b #$14 : BNE + ; Flute (Inactive) - LEAVE THIS ABOVE THE 0F-16 CONDITION - kkat - JSR .stampFlute - JSR .incrementY - JMP .done - + CPY.b #$0F : !BLT + ; Items $0F - $16 - CPY.b #$17 : !BGE + - JSR .incrementY - JMP .done - + CPY.b #$17 : BNE + ; Heart Piece - JSR .incrementHeartPiece - JMP .done - + CPY.b #$18 : !BLT + ; Items $18 - $19 - CPY.b #$1A : !BGE + - JSR .incrementY - JMP .done - + CPY.b #$1A : BNE + ; Magic Mirror - JSR .stampMirror - JSR .incrementY - JMP .done - + CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat - JSR .incrementY - JMP .done - + CPY.b #$1B : !BLT + ; Items IndoorsFlag - $1F - CPY.b #$20 : !BGE + - JSR .incrementA - JMP .done - + CPY.b #$20 : BNE + ; Crystal - JSR .incrementCrystal - JSR .setDungeonCompletion - JMP .done - + CPY.b #$21 : BNE + ; Bug Net - JSR .incrementY - JMP .done - + CPY.b #$22 : BNE + ; Blue Mail - LDX.b #$01 - JSR .incrementMail - + CPY.b #$23 : BNE + ; Red Mail - LDX.b #$02 - JSR .incrementMail - + CPY.b #$24 : BNE + ; Small Key - JSR .incrementVanillaKey - JMP .done - + CPY.b #$25 : BNE + ; Compass - JSL MaybeFlagCompassTotalPickup - JSR .incrementCompass - JMP .done - + CPY.b #$26 : BNE + ; Liar Heart (Container) - ;JSR .incrementHeartContainer - JMP .done - + CPY.b #$27 : BNE + ; 1 Bomb - JSR .maybeIncrementBombs - JMP .done - + CPY.b #$28 : BNE + ; 3 Bombs - JSR .maybeIncrementBombs - JMP .done - + CPY.b #$29 : BNE + ; Mushroom - JSR .incrementY - JMP .done - + CPY.b #$2A : !BLT + ; Items $2A - $2D - CPY.b #$2E : !BGE + - JSR .incrementY - JMP .done - + CPY.b #$31 : BNE + ; 10 Bombs - JSR .maybeIncrementBombs - JMP .done - + CPY.b #$32 : BNE + ; Big Key - JSR .incrementBigKey - JMP .done - + CPY.b #$33 : BNE + ; Map - JSL MaybeFlagMapTotalPickup - JSR .incrementMap - JMP .done - + CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants - CPY.b #$3A : !BGE + - JSR .incrementPendant - JSR .setDungeonCompletion - JMP .done - + CPY.b #$3A : !BLT + ; Items $3A - $3B - Bow & Silver Arrows - CPY.b #$3C : !BGE + - JSR .incrementBow - JMP .done - + CPY.b #$3C : BNE + ; Bottle w/Bee - JSR .incrementY - JMP .done - + CPY.b #$3D : BNE + ; Bottle w/Fairy - JSR .incrementY - JMP .done - + CPY.b #$3E : !BLT + ; Items $3E - $3F - Heart Containers - CPY.b #$40 : !BGE + - JSR .incrementHeartContainer - JMP .done - + CPY.b #$48 : BNE + ; Bottle w/Gold Bee - JSR .incrementY - JMP .done - + CPY.b #$49 : BNE + ; Fighter's Sword - LDX.b #$01 - JSR .incrementSword - JMP .done - + CPY.b #$4A : BNE + ; Flute (Active) - JSR .stampFlute - JSR .incrementY - JMP .done - + CPY.b #$4B : BNE + ; Pegasus Boots - JSR .stampBoots - JSR .incrementA - JMP .done - + CPY.b #$4C : BNE + ; 50 Bomb Capacity Upgrade - JSR .incrementCapacity - JSR .maybeIncrementBombs - JMP .done - + CPY.b #$4D : !BLT + ; Items $4D - $4F - Capacity Upgrades - CPY.b #$50 : !BGE + - JSR .incrementCapacity - JMP .done - + CPY.b #$50 : BNE + ; Master Sword (Safe) - LDX.b #$02 - JSR .incrementSword - JMP .done - + CPY.b #$51 : BNE + ; 5 Bomb Capacity Upgrade - LDX.b #$02 - JSR .maybeIncrementBombs - JMP .done - + CPY.b #$52 : BNE + ; 10 Bomb Capacity Upgrade - LDX.b #$02 - JSR .maybeIncrementBombs - JMP .done - + CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades - CPY.b #$55 : !BGE + - JSR .incrementCapacity - JMP .done - + CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows - JSR .incrementBow - JMP .done - + CPY.b #$5E : BNE + ; Progressive Sword - LDA.l SwordEquipment : INC : TAX - JSR .incrementSword - JMP .done - + CPY.b #$5F : BNE + ; Progressive Shield - LDA.l ShieldEquipment : INC : TAX - JSR .incrementShield - JMP .done - + CPY.b #$60 : BNE + ; Progressive Armor - LDA.l ArmorEquipment : INC : TAX - JSR .incrementMail - JMP .done - + CPY.b #$61 : BNE + ; Progressive Lifting Glove - JSR .incrementA - JMP .done - + CPY.b #$64 : !BLT + ; Items $64 & $65 - Progressive Bow - CPY.b #$66 : !BGE + - JSR .incrementBow - JMP .done - + CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps - CPY.b #$80 : !BGE + - JSL MaybeFlagMapTotalPickup - JSR .incrementMap - JMP .done - + CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses - CPY.b #$90 : !BGE + - JSL MaybeFlagCompassTotalPickup - JSR .incrementCompass - JMP .done - + CPY.b #$90 : !BLT + ; Items $90 - $9F - Free Big Keys - CPY.b #$A0 : !BGE + - JSR .incrementBigKey - JMP .done - + CPY.b #$A0 : !BLT + ; Items $A0 - $AF - Free Small Keys - CPY.b #$B0 : !BGE + - JSR .incrementKey - JMP .done - + CPY.b #$B6 : BNE + ; Item $B6 - Bomb Upgrade - JSR .stampSword ; update "first bomb" timestamp - LDA.l SpecialWeaponLevel ; get current bomb level - CMP #$05 : !BGE ++ ; check if already maxed - INC : STA.l SpecialWeaponLevel - ++ JMP .done - + CPY.b #$B7 : BNE + ; Item $B7 - Cane Upgrade - JSR .stampSword ; update "first cane" timestamp - LDA.l SpecialWeaponLevel ; get current cane level - CMP #$05 : !BGE ++ ; check if already maxed - INC : STA.l SpecialWeaponLevel - ++ JMP .done - + CPY.b #$B8 : BNE + ; Item $B8 - Bug Net Upgrade - JSR .stampSword ; update "first bug net" timestamp - LDA.l SpecialWeaponLevel ; get current bug net level - CMP #$05 : !BGE ++ ; check if already maxed - INC : STA.l SpecialWeaponLevel - ++ JMP .done + 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 + + LDA.l BigKeyField : BIT.b #$04 : BNE ++ + LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations + ++ + + .done - PLP : PLX : PLA -RTL -; WHICH BEE IS BOTTLED? -; MAKE SURE FAIRY FOUNTAINS DON'T FUCK THE COUNTS UP - -.stampSword - REP #$20 ; set 16-bit accumulator - LDA.l SwordTime : BNE + - LDA.l SwordTime+2 : BNE + - LDA.l NMIFrames : STA.l SwordTime - LDA.l NMIFrames+2 : STA.l SwordTime+2 - + - SEP #$20 ; set 8-bit accumulator + CLC +RTS + .ballchain_bigkey + LDA.l BigKeysBigChests + CLC : ADC.b #$10 + STA.l BigKeysBigChests + SEC RTS -.stampBoots - REP #$20 ; set 16-bit accumulator - LDA.l BootsTime : BNE + - LDA.l BootsTime+2 : BNE + - LDA.l NMIFrames : STA.l BootsTime - LDA.l NMIFrames+2 : STA.l BootsTime+2 - + - SEP #$20 ; set 8-bit accumulator +StampItem: + REP #$30 + TYA : ASL : TAX + LDA.w InventoryTable_stamp,X : BEQ .skip + STA.b Scrap0B + LDA.b [Scrap0B] : BNE .skip + LDA.l NMIFrames : STA.b [Scrap0B] + INC.b Scrap0B : INC.b Scrap0B + LDA.l NMIFrames+2 : STA.b [Scrap0B] + .skip RTS -.stampFlute - REP #$20 ; set 16-bit accumulator - LDA.l FluteTime : BNE + - LDA.l FluteTime+2 : BNE + - LDA.l NMIFrames : STA.l FluteTime - LDA.l NMIFrames+2 : STA.l FluteTime+2 - + - SEP #$20 ; set 8-bit accumulator +IncrementYAItems: + LDA.w InventoryTable_properties,Y + 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 RTS - -.stampMirror - REP #$20 ; set 16-bit accumulator - LDA.l MirrorTime : BNE + - LDA.l MirrorTime+2 : BNE + - LDA.l NMIFrames : STA.l MirrorTime - LDA.l NMIFrames+2 : STA.l MirrorTime+2 + .bow_check + LDA.l BowEquipment : BNE + + BRA .y_item + - SEP #$20 ; set 8-bit accumulator RTS - -.incrementSword - JSR .stampSword - LDA.l HighestSword - INC : STA.b Scrap04 : CPX.b Scrap04 : !BLT + ; don't increment unless we're getting a better sword - TXA : STA.l HighestSword + .bomb_check + LDA.l InventoryTracking+1 : BIT.b #$02 : BNE + + ORA.b #$02 : STA.l InventoryTracking+1 + BRA .y_item + RTS -.incrementShield - LDA.l HighestShield - INC : STA.b Scrap04 : CPX.b Scrap04 : !BLT + ; don't increment unless we're getting a better shield - TXA : STA.l HighestShield +IncrementByOne: + REP #$20 + TYA : ASL : TAX + LDA.w InventoryTable_stat,X : BEQ .skip + STA.b Scrap0B + SEP #$21 + LDA.b #$00 : ADC.b [Scrap0B] : STA.b [Scrap0B] + .skip + SEP #$20 +RTS + +IncrementBossSword: + PHX + LDA.l StatsLocked : BNE .done + +.start + LDA.l SpecialWeapons : CMP.b #$01 : BEQ .check_special_weapon + CMP.b #$03 : BEQ .check_special_weapon + CMP.b #$04 : BEQ .check_special_weapon + CMP.b #$05 : BEQ .check_special_weapon + CMP.b #$08 : BEQ .check_special_weapon + +.check_sword + LDA.l SwordEquipment : CMP.b #$FF : BNE + + BRA .none + -RTS + ASL : TAX + JMP.w (.vectors,X) +.check_special_weapon + LDA.l SpecialWeaponLevel + ASL : TAX + JMP.w (.vectors,X) -.incrementBow - LDA.l BowEquipment : BNE .dontCount ; Don't increment Y item count for extra bows -.incrementY - LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter -.dontCount -RTS + .vectors + dw .none + dw .fighter + dw .master + dw .tempered + dw .golden + dw .golden -.incrementA - LDA.l YAItemCounter : INC : AND.b #$07 : TAX - LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter - TXA : ORA.l YAItemCounter : STA.l YAItemCounter -RTS - -.incrementPendant - LDA.l PendantCounter : INC : STA.l PendantCounter -RTS - -.incrementCapacity - LDA.l CapacityUpgrades : INC : STA.l CapacityUpgrades -RTS - -.incrementHeartPiece - LDA.l HeartPieceCounter : INC : STA.l HeartPieceCounter -RTS - -.incrementHeartContainer - LDA.l HeartContainerCounter : INC : STA.l HeartContainerCounter -RTS - -.incrementCrystal - LDA.l CrystalCounter : INC : STA.l CrystalCounter -RTS - -.incrementMail - LDA.l HighestMail - INC : STA.b Scrap04 : CPX.b Scrap04 : !BLT + ; don't increment unless we're getting a better mail - TXA : STA.l HighestMail - + -RTS - -.incrementKeyLong - JSR .incrementKey -RTL - -.incrementVanillaKey - LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter - JSL.l UpdateKeys - -.incrementKey - LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter -RTS - -.incrementCompass - %BottomHalf(MapsCompasses) -RTS - -.incrementBigKey - %TopHalf(BigKeysBigChests) -RTS - -.incrementGTowerPreBigKey - LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations -RTS - -.maybeIncrementBombs - LDA.l InventoryTracking+1 : AND.b #$02 : BNE + - LDA.l InventoryTracking+1 : ORA.b #$02 : STA.l InventoryTracking+1 - JSR .incrementY - + -RTS - -.incrementMap - %TopHalf(MapsCompasses) -RTS - -.incrementBossSwordLong - JSR .incrementBossSword -RTL - -.incrementBossSword - LDA.l SpecialWeapons : CMP.b #$01 : BEQ + - CMP.b #$03 : BEQ + - CMP.b #$04 : BEQ + - CMP.b #$05 : BEQ + - CMP.b #$08 : BEQ + - LDA.l SwordEquipment : BRA ++ - + : LDA.l SpecialWeaponLevel - ++ - BNE + : - - LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills - RTS - + CMP.b #$FF : BEQ - - + CMP.b #$01 : BNE + - %TopHalf(SwordBossKills) : RTS - + CMP.b #$02 : BNE + - %BottomHalf(SwordBossKills) : RTS - + CMP.b #$03 : BNE + - %TopHalf(SwordBossKills+1) : RTS - + CMP.b #$04 : BNE + - %BottomHalf(SwordBossKills+1) - + -RTS - -.setDungeonCompletion - LDX.w DungeonID : BMI + - REP #$20 ; 16 bit - LDA.l DungeonMask, X - ORA.l DungeonsCompleted : STA.l DungeonsCompleted - SEP #$20 ; 8 bit - + -RTS -;-------------------------------------------------------------------------------- + .none + LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills + .done + PLX + RTL + .fighter + LDA.l SwordBossKills + CLC : ADC.b #$10 + STA.l SwordBossKills + PLX + RTL + .master + LDA.l SwordBossKills : INC : AND.b #$0F : TAX + LDA.l SwordBossKills : AND.b #$F0 : STA.l SwordBossKills + TXA : ORA.l SwordBossKills : STA.l SwordBossKills + PLX + RTL + .tempered + LDA.l SwordBossKills+1 + CLC : ADC.b #$10 + STA.l SwordBossKills+1 + PLX + RTL + .golden + LDA.l SwordBossKills+1 : INC : AND.b #$0F : TAX + LDA.l SwordBossKills+1 : AND.b #$F0 : STA.l SwordBossKills+1 + TXA : ORA.l SwordBossKills+1 : STA.l SwordBossKills+1 + PLX + RTL ;-------------------------------------------------------------------------------- -; Link_ReceiveItem_HUDRefresh: +IncrementFinalSword: + PHX + REP #$20 + LDA.w RoomIndex : BNE .done + SEP #$20 + JMP IncrementBossSword_start + .done + SEP #$20 + PLX +RTL ;-------------------------------------------------------------------------------- Link_ReceiveItem_HUDRefresh: LDA.l BombsEquipment : BNE + ; skip if we have bombs @@ -714,6 +357,7 @@ Link_ReceiveItem_HUDRefresh: + JSL.l HUD_RefreshIconLong ; thing we wrote over + INC.w UpdateHUD JSL.l PostItemGet RTL ;-------------------------------------------------------------------------------- @@ -728,6 +372,7 @@ HandleBombAbsorbtion: LDA.b #$04 : STA.w ItemCursor ; set selected item to bombs LDA.b #$01 : STA.w CurrentYItem ; set selected item to bombs JSL.l HUD_RebuildLong + INC.w UpdateHUD + RTL ;-------------------------------------------------------------------------------- @@ -859,7 +504,7 @@ ClearOWKeys: JSL.l TurtleRockEntranceFix JSL.l FakeWorldFix - JSR.w FixBunnyOnExitToLightWorld + JSL.l FixBunnyOnExitToLightWorld LDA.l GenericKeys : BEQ + PLA : LDA.l CurrentGenericKeys : STA.l CurrentSmallKeys RTL @@ -882,10 +527,15 @@ RTL ; LoadPowder: ;-------------------------------------------------------------------------------- LoadPowder: + PHX JSL.l Sprite_SpawnDynamically ; thing we wrote over %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) - STA.w SpriteAuxTable, Y ; Store item type - JSL.l PrepDynamicTile + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID, Y + TYX + JSL.l PrepDynamicTile_loot_resolved + PLX RTL ;-------------------------------------------------------------------------------- @@ -908,12 +558,12 @@ RTL DrawPowder: LDA.w ItemReceiptPose : BNE .defer ; defer if link is buying a potion LDA.l RedrawFlag : BEQ + - LDA.w SpriteAuxTable, X ; Retrieve stored item type - JSL.l PrepDynamicTile + ; LDA.w SpriteAuxTable, X ; Retrieve stored item type + JSL.l PrepDynamicTile_loot_resolved LDA.b #$00 : STA.l RedrawFlag ; reset redraw flag BRA .defer + - LDA.w SpriteAuxTable, X ; Retrieve stored item type + LDA.w SpriteID, X ; Retrieve stored item type JSL.l DrawDynamicTile .defer RTL @@ -933,7 +583,9 @@ LoadMushroom: LDA.b #$00 : STA.l RedrawFlag %GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) - STA.w SpriteItemType, X ; Store item type + JSL.l AttemptItemSubstitution + JSR.w ResolveLootID + STA.w SpriteID,X JSL.l PrepDynamicTile .skip @@ -951,7 +603,7 @@ DrawMushroom: BRA .done ; don't draw on the init frame .skipInit - LDA.w SpriteItemType, X ; Retrieve stored item type + LDA.w SpriteID, X ; Retrieve stored item type JSL.l DrawDynamicTile .done @@ -963,14 +615,13 @@ RTL ; CollectPowder: ;-------------------------------------------------------------------------------- CollectPowder: - LDY.w SpriteAuxTable, X ; Retrieve stored item type + LDY.w SpriteID, X ; Retrieve stored item type BNE + ; if for any reason the item value is 0 reload it, just in case %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY + STZ.w ItemReceiptMethod ; item from NPC JSL.l Link_ReceiveItem - ;JSL.l FullInventoryExternal JSL.l ItemSet_Powder RTL ;-------------------------------------------------------------------------------- @@ -1104,3 +755,14 @@ RTL } ;-------------------------------------------------------------------------------- +MaybePlaySelectSFX: + LDA.w DungeonID : BMI .not_dungeon + .play + LDA.b #$20 : STA.w SFX3 ; menu select sound + RTL + .not_dungeon + LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play + BIT.b #$0C : BEQ .dont_play + BRA .play + .dont_play +RTL diff --git a/invertedmaps.asm b/invertedmaps.asm index 67ab5e1..1501335 100644 --- a/invertedmaps.asm +++ b/invertedmaps.asm @@ -1,1120 +1,1562 @@ +;=================================================================================================== + +OWWriteSize = $00 +OWWriteIncrement = $02 +OWWriteTile = $06 +OWWriteCommand = $08 + +;--------------------------------------------------------------------------------------------------- + +function OWW_RLESize(s) = s<<8 + +!OWW_STOP = $8000 +!OWW_END = $FFFF + +!OWW_SKIP = $FFFF + +!OWW_Vertical = $0080 +!OWW_Horizontal = $0000 + +;=================================================================================================== + Overworld_LoadNewTiles: -{ - ; add sign to EDM for OWG people to read - LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$0005 : BNE + - LDA.w #$0101 : STA.l $7E2E18 ; #$0101 is the sign tile16 id, $7E2D98 is the position of the tile16 on map - + - - ; GT sign - LDA.l InvertedMode : AND.w #$00FF : BNE + - LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$0043 : BNE + - LDA.w #$0101 : STA.l $7E2550 - + - - ; Pyramid sign - LDA.l InvertedMode : AND.w #$00FF : BNE + - LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$005B : BNE + - LDA.w #$0101 : STA.l $7E27B6 ; Moved sign near statue - LDA.w #$05C2 : STA.l $7E27B4 ; added a pyramid peg on the left of the sign - + - - SEP #$30 - LDA.l InvertedMode : BEQ .notInverted - PHB - - ; Set the data bank to $7E. - LDA.b #$7E : PHA : PLB - REP #$30 - ; Use it as an index into a jump table. - LDA.b OverworldIndex : CMP.w #$0080 : !BGE .noData - ASL A : TAX - - JSR (Overworld_NewTilesTable, X) - .noData - PLB - .notInverted - REP #$30 - LDX.w #$001E : LDA.w #$0DBE - - RTL -} - - -Overworld_NewTilesTable: -{ -;LW - ;00 01 02 03 04 05 06 07 -dw return, return, return, map003, return, map005, return, map007 - ;08 09 10 11 12 13 14 15 -dw return, return, return, return, return, return, return, return - ;16 17 18 19 20 21 22 23 -dw map016, return, return, return, map020, return, return, return - ;24 25 26 27 28 29 30 31 -dw return, return, return, map027, return, return, return, return - ;32 33 34 35 36 37 38 39 -dw return, return, return, return, return, return, return, return - ;40 41 42 43 44 45 46 47 -dw return, map041, return, return, return, return, return, return - ;48 49 50 51 52 53 54 55 -dw map049, return, map050, map051, return, map053, return, return - ;56 57 58 59 60 61 62 63 -dw return, return, map058, return, map060, return, return, return -;DW - ;64 65 66 67 68 69 70 71 -dw return, return, return, map068, return, map078, return, map071 - ;72 73 74 75 76 77 78 79 -dw return, return, return, return, return, return, return, return - ;80 81 82 83 84 85 86 87 -dw map080, return, return, return, map084, return, return, return - ;88 89 90 91 92 93 94 95 -dw return, return, return, map091, return, return, return, return - ;96 97 98 99 100 101 102 103 -dw return, return, return, return, return, return, return, return - ;104 105 106 107 108 109 110 111 -dw return, return, return, return, return, return, return, map111 - ;112 113 114 115 116 117 118 119 -dw map120, return, return, map115, return, map117, return, return - ;120 121 122 123 124 125 126 127 -dw return, return, return, return, return, return, return, return - -return: -RTS - -map003: -{ -LDA.w #$021A : STA.w $29B6 -LDA.w #$01F3 : STA.w $29B8 -LDA.w #$00A0 : STA.w $29BA -LDA.w #$0104 : STA.w $29BC -LDA.w #$00C6 : STA.w $2A34 -STA.w $2A38 -STA.w $2A3A -LDA.w #$0034 : STA.w $2BE0 -RTS -} - -map005: -{ -LDA.w #$0111 : STA.w $206E -STA.w $20EC -LDA.w #$0113 : STA.w $2070 -STA.w $2072 -LDA.w #$0112 : STA.w $2074 -STA.w $20EE -STA.w $216C -LDA.w #$0116 : STA.w $20F0 -STA.w $216E -LDA.w #$0117 : STA.w $20F2 -LDA.w #$0118 : STA.w $20F4 -LDA.w #$011C : STA.w $2170 -LDA.w #$011D : STA.w $2172 -LDA.w #$011E : STA.w $2174 -LDA.w #$0130 : STA.w $21E2 -STA.w $21F0 -STA.w $22E2 -STA.w $22F0 -LDA.w #$0123 : STA.w $21EC -LDA.w #$0124 : STA.w $21EE -LDA.w #$0034 : STA.w $21F2 -LDA.w #$0126 : STA.w $21F4 -LDA.w #$0135 : STA.w $2262 -STA.w $2270 -STA.w $2362 -STA.w $2370 -LDA.w #$0136 : STA.w $2264 -STA.w $2266 -STA.w $226C -STA.w $226E -LDA.w #$0137 : STA.w $2268 -STA.w $226A -LDA.w #$013C : STA.w $22E4 -STA.w $22E6 -STA.w $22EC -STA.w $22EE -LDA.w #$013D : STA.w $22E8 -STA.w $22EA -LDA.w #$0144 : STA.w $2364 -LDA.w #$0145 : STA.w $2366 -LDA.w #$0146 : STA.w $2368 -LDA.w #$0147 : STA.w $236A -LDA.w #$01B3 : STA.w $236C -LDA.w #$01B4 : STA.w $236E -LDA.w #$0139 : STA.w $2970 -STA.w $2C6C -LDA.w #$014B : STA.w $2972 -STA.w $2C6E -LDA.w #$016B : STA.w $29F0 -STA.w $2CEC -LDA.w #$0182 : STA.w $29F2 -STA.w $2CEE - -.map014 -LDA.w #$0034 : STA.w $3D4A - -RTS -} - -map007: -{ -LDA.w #$021B : STA.w $259E -STA.w $25A2 -STA.w $25A4 -STA.w $261C -STA.w $2626 -STA.w $269A -STA.w $26A8 -STA.w $271A -STA.w $2728 -STA.w $279A -STA.w $27A8 -STA.w $281E -STA.w $2820 -STA.w $2822 -STA.w $2824 -STA.w $2828 -STA.w $289C -STA.w $28A6 -STA.w $291E -STA.w $2924 -LDA.w #$0134 : STA.w $269E -STA.w $26A4 -LDA.w #$0034 : STA.w $2826 -RTS -} - -map016: -{ -LDA.w #$0034 : STA.w $2B2E -RTS -} - -map020: -{ -LDA.w #$02F1 : STA.w $2422 -LDA.w #$02F2 : STA.w $2424 -LDA.w #$0184 : STA.w $24A2 -STA.w $2522 -LDA.w #$0185 : STA.w $24A4 -STA.w $2524 -RTS -} - -map027: ;Castle map -{ - -LDA.w #$0485 : STA.w $2424 -STA.w $2426 -LDA.w #$0454 : STA.w $24A4 -STA.w $24A6 -LDA.w #$0476 : STA.w $2522 -LDA.w #$0460 : STA.w $2524 -STA.w $2526 -LDA.w #$04D7 : STA.w $2528 -LDA.w #$04DD : STA.w $2624 -LDA.w #$04DE : STA.w $2626 -LDA.w #$04E0 : STA.w $26A4 -LDA.w #$04E1 : STA.w $26A6 -LDA.w #$04E4 : STA.w $2724 -LDA.w #$04E5 : STA.w $2726 -LDA.w #$0034 : STA.w $27A4 -STA.w $27A6 - -;Eye removed -LDA.w #$046D : STA.w $243E -STA.w $24BC -STA.w $24BE -STA.w $253E -STA.w $2440 -STA.w $24C0 -STA.w $24C2 -STA.w $2540 - -;new trees -LDA.w #$0035 : STA.w $2C28 -STA.w $2FAE -LDA.w #$0034 : STA.w $2C2C -STA.w $2C2E -STA.w $2CB6 -STA.w $2D36 -STA.w $2DB6 -STA.w $2EB6 -STA.w $2F30 -STA.w $2F36 -STA.w $2FAA -STA.w $2FB0 -STA.w $2FB4 -STA.w $2FB6 -LDA.w #$00E2 : STA.w $2C36 -STA.w $2FA8 -LDA.w #$00AE : STA.w $2CAC -LDA.w #$00AF : STA.w $2CAE -LDA.w #$007E : STA.w $2CB0 -LDA.w #$007F : STA.w $2CB2 -LDA.w #$04BA : STA.w $2CB4 -STA.w $2DB4 -STA.w $2EB4 -LDA.w #$00B0 : STA.w $2D2C -LDA.w #$0014 : STA.w $2D2E -LDA.w #$0015 : STA.w $2D30 -LDA.w #$00A8 : STA.w $2D32 -LDA.w #$04BB : STA.w $2D34 -STA.w $2E34 -STA.w $2F34 -LDA.w #$0089 : STA.w $2DAC -LDA.w #$001C : STA.w $2DAE -LDA.w #$001D : STA.w $2DB0 -LDA.w #$0076 : STA.w $2DB2 -LDA.w #$00F1 : STA.w $2E2C -LDA.w #$004E : STA.w $2E2E -LDA.w #$004F : STA.w $2E30 -LDA.w #$00D9 : STA.w $2E32 -LDA.w #$009A : STA.w $2EAC -LDA.w #$009B : STA.w $2EAE -LDA.w #$009C : STA.w $2EB0 -LDA.w #$0095 : STA.w $2EB2 - -LDA.w #$0034 -STA.w $3028 -STA.w $302C -LDA.w #$0035 : STA.w $302A -STA.w $3032 -LDA.w #$00DA : STA.w $302E -LDA.w #$00E2 : STA.w $3030 - - - -LDA.w #$0485 : STA.w $2424 -STA.w $2426 -LDA.w #$0454 : STA.w $24A4 -STA.w $24A6 -LDA.w #$0476 : STA.w $2522 -LDA.w #$0460 : STA.w $2524 -STA.w $2526 -LDA.w #$04D7 : STA.w $2528 -LDA.w #$04DD : STA.w $2624 -LDA.w #$04DE : STA.w $2626 -LDA.w #$04E0 : STA.w $26A4 -LDA.w #$04E1 : STA.w $26A6 -LDA.w #$04E4 : STA.w $2724 -LDA.w #$04E5 : STA.w $2726 -LDA.w #$0034 : STA.w $27A4 -STA.w $27A6 - -LDA.w #$0486 : STA.w $26B0 -LDA.w #$0487 : STA.w $26B2 -LDA.w #$0454 : STA.w $272C -STA.w $272E -LDA.w #$048E : STA.w $2730 -LDA.w #$048F : STA.w $2732 -LDA.w #$04CA : STA.w $27AC -LDA.w #$045E : STA.w $27AE -LDA.w #$0494 : STA.w $27B0 -LDA.w #$0495 : STA.w $27B2 -LDA.w #$049E : STA.w $27B4 -LDA.w #$0499 : STA.w $282C -LDA.w #$0451 : STA.w $2830 -LDA.w #$0034 : STA.w $28AC -STA.w $28AE -STA.w $28B0 -LDA.w #$0454 : STA.w $274E -STA.w $2750 -LDA.w #$0608 : STA.w $2752 -LDA.w #$0459 : STA.w $27CE -STA.w $27D0 -LDA.w #$045E : STA.w $27D2 -LDA.w #$0451 : STA.w $284E -STA.w $2850 -STA.w $2852 -STA.w $282E -LDA.w #$0034 : STA.w $28CE -STA.w $28D0 -STA.w $28D2 - - -; CHECK IF AGAHNIM 2 IS DEAD AND WE HAVE ALREADY LANDED -LDA.w OverworldEventDataWRAM+$5B : AND.w #$0020 : BEQ .agahnim2Alive -LDA.w #$046D : STA.w $243E -LDA.w #$0E3A : STA.w $24BC -LDA.w #$0E3B : STA.w $24BE -LDA.w #$0E3E : STA.w $253C -LDA.w #$0E3F : STA.w $253E -LDA.w #$0490 : STA.w $25BE -LDA.w #$0E39 : STA.w $2440 -LDA.w #$0E3C : STA.w $24C0 -LDA.w #$0E3D : STA.w $24C2 -LDA.w #$0E40 : STA.w $2540 -LDA.w #$0E41 : STA.w $2542 -LDA.w #$0491 : STA.w $25C0 -.agahnim2Alive - -; add sign for Tower Entry -LDA.w #$0101 : STA.w $7E222C -LDA.w #$0101 : STA.w $7E2252 - -RTS -} - -map041: -{ -LDA.w #$0034 : STA.w $2288 -STA.w $2308 -STA.w $2388 -STA.w $2408 -STA.w $2488 -STA.w $248A -LDA.w #$0036 : STA.w $2386 -RTS -} - -map049: -{ -LDA.w #$017E : STA.w $2050 -STA.w $20CE -LDA.w #$00D1 : STA.w $2052 -STA.w $2054 -STA.w $2056 -STA.w $2058 -STA.w $205A -STA.w $205C -STA.w $205E -STA.w $21E6 -STA.w $21E8 -STA.w $21EA -STA.w $21EC -STA.w $21EE -STA.w $21F0 -LDA.w #$00D2 : STA.w $2060 -STA.w $20E2 -STA.w $2164 -LDA.w #$0183 : STA.w $20D0 -STA.w $214E -LDA.w #$00C9 : STA.w $20D2 -STA.w $20D4 -STA.w $20D6 -STA.w $20D8 -STA.w $20DA -STA.w $20DC -STA.w $20DE -STA.w $2152 -STA.w $2154 -STA.w $2156 -STA.w $2158 -STA.w $215A -STA.w $215C -STA.w $215E -STA.w $2266 -STA.w $2268 -STA.w $226A -STA.w $226C -STA.w $226E -STA.w $2270 -STA.w $22CC -LDA.w #$00D0 : STA.w $20E0 -STA.w $2162 -STA.w $21E4 -LDA.w #$0153 : STA.w $2150 -STA.w $21CE -STA.w $21D0 -STA.w $2250 -STA.w $22CE -LDA.w #$00C8 : STA.w $2160 -STA.w $21E2 -STA.w $2264 -STA.w $28DA -STA.w $295C -LDA.w #$00DC : STA.w $21D2 -STA.w $21D4 -STA.w $21D6 -STA.w $21D8 -STA.w $21DA -STA.w $21DC -STA.w $21DE -STA.w $224C -LDA.w #$00CA : STA.w $21E0 -STA.w $2262 -STA.w $285A -STA.w $28DC -LDA.w #$0178 : STA.w $224E -LDA.w #$00E3 : STA.w $2252 -STA.w $2254 -LDA.w #$0186 : STA.w $22D0 -STA.w $234E -LDA.w #$0034 : STA.w $22D2 -STA.w $22D4 -STA.w $22D6 -STA.w $2350 -STA.w $2352 -STA.w $2354 -STA.w $2356 -STA.w $23D0 -STA.w $23D2 -STA.w $23D4 -STA.w $23D6 -STA.w $2452 -STA.w $2454 -STA.w $2456 -STA.w $2458 -STA.w $24D4 -STA.w $24D6 -STA.w $2554 -STA.w $2556 -STA.w $25D4 -STA.w $25D6 -STA.w $2656 -LDA.w #$00D3 : STA.w $22E2 -LDA.w #$0302 : STA.w $22E4 -LDA.w #$00CC : STA.w $22E6 -STA.w $22E8 -STA.w $22EA -STA.w $22EC -STA.w $22EE -STA.w $22F0 -STA.w $234C -LDA.w #$00CE : STA.w $2362 -STA.w $23E2 -STA.w $25D8 -STA.w $2658 -STA.w $26D8 -STA.w $2758 -LDA.w #$00C5 : STA.w $2364 -STA.w $23E4 -STA.w $25DC -STA.w $265C -STA.w $26DC -STA.w $275C -LDA.w #$06AB : STA.w $2366 -STA.w $23E6 -STA.w $2466 -STA.w $24E4 -STA.w $24E6 -STA.w $2760 -LDA.w #$00AA : STA.w $2368 -LDA.w #$0384 : STA.w $236A -STA.w $236E -STA.w $23EC -STA.w $246A -STA.w $24E8 -STA.w $24EA -STA.w $24EC -STA.w $24EE -LDA.w #$00AB : STA.w $236C -LDA.w #$0759 : STA.w $23C8 -STA.w $244A -STA.w $24CC -STA.w $254E -STA.w $26D0 -STA.w $2752 -STA.w $27D4 -LDA.w #$0757 : STA.w $23CA -STA.w $244C -STA.w $24CE -STA.w $2550 -STA.w $26D2 -STA.w $2754 -LDA.w #$01FF : STA.w $23CC -STA.w $244E -STA.w $24D0 -STA.w $2652 -STA.w $26D4 -STA.w $2756 -LDA.w #$017C : STA.w $23CE -STA.w $2450 -STA.w $24D2 -STA.w $2654 -STA.w $26D6 -LDA.w #$015C : STA.w $23E0 -LDA.w #$0100 : STA.w $245A -STA.w $24D8 -LDA.w #$01C2 : STA.w $245C -LDA.w #$0218 : STA.w $245E -LDA.w #$0162 : STA.w $2460 -LDA.w #$0106 : STA.w $2462 -STA.w $24E0 -STA.w $255C -LDA.w #$0107 : STA.w $2464 -STA.w $24E2 -LDA.w #$0104 : STA.w $24DA -STA.w $2558 -LDA.w #$01D4 : STA.w $24DC -LDA.w #$0219 : STA.w $24DE -LDA.w #$0179 : STA.w $2552 -STA.w $25D2 -LDA.w #$0105 : STA.w $255A -LDA.w #$0166 : STA.w $255E -LDA.w #$0766 : STA.w $2560 -LDA.w #$06B4 : STA.w $2562 -STA.w $2564 -STA.w $2566 -STA.w $2568 -STA.w $256A -STA.w $256C -STA.w $256E -STA.w $2570 -LDA.w #$06E5 : STA.w $25D0 -STA.w $2650 -LDA.w #$00C4 : STA.w $25DA -STA.w $265A -STA.w $26DA -STA.w $275A -LDA.w #$0171 : STA.w $25DE -LDA.w #$0165 : STA.w $25E4 -STA.w $25E6 -STA.w $25E8 -STA.w $25EA -STA.w $25EC -STA.w $25EE -STA.w $25F0 -LDA.w #$06E4 : STA.w $27D2 -STA.w $2852 -STA.w $2854 -STA.w $2856 -STA.w $28D4 -STA.w $28D6 -STA.w $2956 -STA.w $2958 -STA.w $29D8 -STA.w $29DA -LDA.w #$06E1 : STA.w $27D6 -LDA.w #$02FD : STA.w $27D8 -STA.w $2858 -LDA.w #$00CF : STA.w $27DA -LDA.w #$06E7 : STA.w $28D8 -STA.w $295A -STA.w $29DC - - -LDA.w #$0769 : STA.w $38F8 -LDA.w #$06E1 : STA.w $38FA -STA.w $38FC -STA.w $38FE -LDA.w #$06E3 : STA.w $3978 -LDA.w #$02E5 : STA.w $397A -STA.w $397E -LDA.w #$02EC : STA.w $397C -LDA.w #$02F0 : STA.w $39F8 -LDA.w #$02F3 : STA.w $39FA -STA.w $39FC -STA.w $39FE - - -.map056 -LDA.w #$0034 : STA.w $3D94 - -RTS -} - -map060: -{ -LDA.w #$02E5 : STA.w $27AE -STA.w $282C -STA.w $282E -STA.w $2832 -STA.w $28AC -STA.w $28AE -STA.w $2928 -STA.w $292C -STA.w $29A8 -STA.w $29B0 -STA.w $2A28 -STA.w $2A30 -STA.w $2AAC -STA.w $2AB2 -LDA.w #$078A : STA.w $28AA -STA.w $28B0 -STA.w $2AAA -STA.w $2B2A -STA.w $2B30 -STA.w $2BAE -LDA.w #$02EB : STA.w $28B4 -STA.w $2930 -STA.w $29AE -STA.w $2A2C -STA.w $2A32 -STA.w $2AAE -LDA.w #$02EC : STA.w $2934 -STA.w $2B28 -STA.w $2B2C -STA.w $2B2E -STA.w $2B32 -RTS -} - -map050: -{ -LDA.w #$01D5 : STA.w $2486 -LDA.w #$0165 : STA.w $2506 -LDA.w #$0166 : STA.w $2508 -STA.w $258A -LDA.w #$00C6 : STA.w $2586 -STA.w $2608 -STA.w $2688 -STA.w $2708 -STA.w $2788 -STA.w $2806 -STA.w $2808 -LDA.w #$0171 : STA.w $2588 -LDA.w #$021C : STA.w $260A -STA.w $268A -STA.w $270A -STA.w $278A -LDA.w #$0034 : STA.w $270E -STA.w $278E -STA.w $2790 -STA.w $280E -STA.w $2810 -STA.w $2812 -STA.w $2814 -STA.w $2816 -STA.w $2818 -STA.w $281A -STA.w $281C -STA.w $288E -STA.w $2892 -STA.w $2894 -STA.w $2896 -STA.w $2898 -STA.w $289A -STA.w $289C -STA.w $289E -STA.w $290E -STA.w $2910 -STA.w $2912 -STA.w $2918 -STA.w $291A -STA.w $291C -STA.w $291E -STA.w $2920 -STA.w $298C -STA.w $298E -STA.w $2990 -STA.w $2992 -STA.w $2998 -STA.w $299A -STA.w $299E -STA.w $29A0 -STA.w $2A06 -STA.w $2A08 -STA.w $2A0A -STA.w $2A0C -STA.w $2A10 -STA.w $2A12 -STA.w $2A14 -STA.w $2A16 -STA.w $2A18 -STA.w $2A1C -STA.w $2A1E -STA.w $2A84 -STA.w $2A86 -STA.w $2A88 -STA.w $2A8C -STA.w $2A8E -STA.w $2A90 -STA.w $2A92 -STA.w $2A94 -STA.w $2A96 -STA.w $2A98 -STA.w $2A9A -STA.w $2A9C -STA.w $2B06 -STA.w $2B0A -STA.w $2B0E -STA.w $2B12 -STA.w $2B1A -STA.w $2B84 -STA.w $2B86 -STA.w $2B88 -STA.w $2B8A -STA.w $2B8E -STA.w $2B92 -STA.w $2B94 -STA.w $2B98 -STA.w $2B9A -STA.w $2C04 -STA.w $2C08 -STA.w $2C0A -STA.w $2C0E -STA.w $2C12 -STA.w $2C14 -STA.w $2C18 -STA.w $2C86 -STA.w $2C88 -STA.w $2C8A -STA.w $2C90 -STA.w $2C92 -STA.w $2C94 -STA.w $2C98 -STA.w $2D0A -STA.w $2D0C -STA.w $2D10 -STA.w $2D14 -STA.w $2D16 -STA.w $2D8A -STA.w $2D8C -STA.w $2D8E -STA.w $2D94 -LDA.w #$016A : STA.w $278C -STA.w $280C -STA.w $2A82 -STA.w $2B02 -STA.w $2B82 -STA.w $2C02 -STA.w $2C82 -LDA.w #$01FA : STA.w $288C -LDA.w #$00DA : STA.w $2890 -STA.w $299C -STA.w $2B14 -STA.w $2B16 -STA.w $2B18 -STA.w $2B96 -STA.w $2C16 -STA.w $2C96 -STA.w $2D08 -STA.w $2D92 -LDA.w #$0186 : STA.w $290C -STA.w $298A -STA.w $2A04 -LDA.w #$0036 : STA.w $2914 -STA.w $2916 -STA.w $2994 -STA.w $2996 -STA.w $2D12 -LDA.w #$00E4 : STA.w $2986 -LDA.w #$00E5 : STA.w $2988 -LDA.w #$0100 : STA.w $29A2 -LDA.w #$0071 : STA.w $2A0E -STA.w $2A1A -STA.w $2C8C -LDA.w #$015C : STA.w $2A20 -STA.w $2A9E -STA.w $2B1C -STA.w $2C9A -STA.w $2D18 -STA.w $2D96 -LDA.w #$0104 : STA.w $2A22 -LDA.w #$01D4 : STA.w $2A24 -LDA.w #$0035 : STA.w $2A8A -STA.w $2B08 -STA.w $2C06 -STA.w $2D0E -STA.w $2D90 -LDA.w #$0162 : STA.w $2AA0 -STA.w $2B1E -STA.w $2B9C -STA.w $2D1A -STA.w $2D98 -LDA.w #$00E2 : STA.w $2B04 -STA.w $2B0C -STA.w $2B10 -STA.w $2B8C -STA.w $2B90 -STA.w $2C0C -STA.w $2C10 -STA.w $2C8E -LDA.w #$00F8 : STA.w $2C1A -LDA.w #$00CE : STA.w $2C1C -STA.w $2C9C -LDA.w #$0160 : STA.w $2C84 -STA.w $2D06 -STA.w $2D88 -LDA.w #$0167 : STA.w $2D04 -STA.w $2D86 -LDA.w #$0172 : STA.w $2E08 -LDA.w #$015E : STA.w $2E0A -STA.w $2E0C -STA.w $2E0E -STA.w $2E10 -STA.w $2E12 -STA.w $2E14 -LDA.w #$0174 : STA.w $2E16 - -RTS -} - -map051: -{ -LDA.w #$0034 : STA.w $22A8 -RTS -} - -map053: -{ -LDA.w #$02F1 : STA.w $2BB0 -LDA.w #$02F2 : STA.w $2BB2 -LDA.w #$0184 : STA.w $2C30 -LDA.w #$0185 : STA.w $2C32 -LDA.w #$0392 : STA.w $2CB0 -LDA.w #$0393 : STA.w $2CB2 -LDA.w #$0394 : STA.w $2D30 -LDA.w #$0395 : STA.w $2D32 -LDA.w #$0034 : STA.w $2F56 - -RTS -} - -map058: -{ -LDA.w #$0774 : STA.w $2800 -LDA.w #$06E1 : STA.w $2802 -LDA.w #$0757 : STA.w $2804 -STA.w $2886 -LDA.w #$0779 : STA.w $2880 -LDA.w #$02EC : STA.w $2882 -LDA.w #$0759 : STA.w $2884 -STA.w $2906 -LDA.w #$02E5 : STA.w $2900 -STA.w $2902 -STA.w $2904 -LDA.w #$076A : STA.w $2908 -LDA.w #$02F3 : STA.w $2980 -STA.w $2982 -LDA.w #$02F1 : STA.w $2984 -LDA.w #$02F2 : STA.w $2986 -LDA.w #$038A : STA.w $2988 -LDA.w #$0184 : STA.w $2A04 -STA.w $2A84 -STA.w $2B04 -STA.w $2B84 -LDA.w #$0185 : STA.w $2A06 -STA.w $2A86 -STA.w $2B06 -STA.w $2B86 - -RTS -} - -map068: -{ -LDA.w #$0E96 : STA.w $235E -STA.w $23DE -STA.w $245E -STA.w $24DE -STA.w $255E -LDA.w #$0E97 : STA.w $2360 -STA.w $23E0 -STA.w $2460 -STA.w $24E0 -STA.w $2560 -LDA.w #$0E94 : STA.w $25DE -LDA.w #$0E95 : STA.w $25E0 -LDA.w #$0180 : STA.w $275E -LDA.w #$0181 : STA.w $2760 -LDA.w #$0184 : STA.w $27DE -STA.w $285E -LDA.w #$0185 : STA.w $27E0 -STA.w $2860 -LDA.w #$0212 : STA.w $2BE0 - -RTS -} - -map071: -{ -LDA.w #$0398 : STA.w $25A0 -LDA.w #$0522 : STA.w $25A2 -LDA.w #$0125 : STA.w $2620 -LDA.w #$0126 : STA.w $2622 -LDA.w #$0239 : STA.w $269E -STA.w $26A4 - -RTS -} - -map078: -{ -LDA.w #$0239 : STA.w $3D4A -RTS -} - -map080: -{ -LDA.w #$020F : STA.w $2B2E -RTS -} - -map084: -{ -LDA.w #$02F3 : STA.w $2422 -STA.w $2424 -LDA.w #$00C9 : STA.w $24A2 -STA.w $24A4 -LDA.w #$00E3 : STA.w $2522 -STA.w $2524 -RTS -} - -map091: ;Pyramid -{ -LDA.w #$0323 : STA.w $39B6 -LDA.w #$0324 : STA.w $39B8 -STA.w $39BA -STA.w $39BC -STA.w $39BE -LDA.w #$02FE : STA.w $3A34 -LDA.w #$02FF : STA.w $3A36 -LDA.w #$0326 : STA.w $3A38 -STA.w $3A3A -STA.w $3A3C -STA.w $3A3E -LDA.w #$039D : STA.w $3AB2 -LDA.w #$0303 : STA.w $3AB4 -LDA.w #$0232 : STA.w $3AB6 -STA.w $3B34 -LDA.w #$0233 : STA.w $3AB8 -STA.w $3ABA -STA.w $3ABC -STA.w $3ABE -LDA.w #$03A2 : STA.w $3B32 -LDA.w #$0235 : STA.w $3B36 -STA.w $3BB4 -LDA.w #$046A : STA.w $3B38 -LDA.w #$0333 : STA.w $3B3A -STA.w $3B3C -STA.w $3B3E -LDA.w #$0034 : STA.w $3BB6 -STA.w $3BBA -STA.w $3BBC -STA.w $3C3A -STA.w $3C3C -STA.w $3C3E - -;Added Pegs on pyramid map -;{ -STA.w $321C -STA.w $329C -STA.w $32A0 - -LDA.w #$0071 : STA.w $321E -LDA.w #$00DA : STA.w $3220 -STA.w $329A -LDA.w #$00E1 : STA.w $329E -LDA.w #$0382 : STA.w $3318 -LDA.w #$037C : STA.w $3322 - -LDA.w #$021B : STA.w $3218 -STA.w $3222 -STA.w $3298 -STA.w $32A2 -STA.w $331A -STA.w $331C -STA.w $331E -STA.w $3320 -LDA.w #$00E2 : STA.w $321A -;} - -LDA.w #$00F2 : STA.w $3BB8 -LDA.w #$0108 : STA.w $3C38 - - -;Warp Tile agah defeated -LDA.w #$0034 : STA.w $3BBE ;Tile when no warp -LDA.l ProgressIndicator : AND.w #$00FF : CMP.w #$0003 : BNE .agahnimAlive -LDA.w #$0212 : STA.w $3BBE ;warp -.agahnimAlive - - -LDA.w #$0324 : STA.w $39C0 -STA.w $39C2 -STA.w $39C4 -LDA.w #$0325 : STA.w $39C6 -LDA.w #$02D5 : STA.w $39C8 -STA.w $39D2 -LDA.w #$02CC : STA.w $39CC -STA.w $39D4 -LDA.w #$0326 : STA.w $3A40 -STA.w $3A42 -STA.w $3A44 -LDA.w #$0327 : STA.w $3A46 -LDA.w #$02F7 : STA.w $3A48 -LDA.w #$02E3 : STA.w $3A4C -STA.w $3A4E -LDA.w #$0233 : STA.w $3AC0 -STA.w $3AC2 -STA.w $3AC4 -LDA.w #$0234 : STA.w $3AC6 -STA.w $3B48 -LDA.w #$02F6 : STA.w $3AC8 -LDA.w #$0396 : STA.w $3ACA -LDA.w #$0333 : STA.w $3B40 -STA.w $3B42 -LDA.w #$03AA : STA.w $3B44 -LDA.w #$03A3 : STA.w $3B46 -STA.w $3BC8 -LDA.w #$0397 : STA.w $3B4A -LDA.w #$0034 : STA.w $3BC0 -STA.w $3BC2 -STA.w $3BC6 -STA.w $3C40 -STA.w $3C42 -LDA.w #$029C : STA.w $3BC4 -LDA.w #$010A : STA.w $3C44 -LDA.w #$010B : STA.w $3C46 -STA.w $3C48 -STA.w $3C4A -STA.w $3C4C -STA.w $3C4E -STA.w $3C50 -STA.w $3C52 -STA.w $3C54 -STA.w $3C56 -STA.w $3C58 -STA.w $3C5A -STA.w $3C5C -STA.w $3C5E -STA.w $3C60 -STA.w $3C62 -STA.w $3C64 -STA.w $3C66 - -RTS -} - -map111: -{ -LDA.w #$020F : STA.w $2BB2 -RTS -} - -map115: -{ -LDA.w #$020F : STA.w $22A8 -RTS -} - -map120: -{ -LDA.w #$0239 : STA.w $3D94 -RTS -} - -map117: -{ -;118 -LDA.w #$0239 : STA.w $2F50 -LDA.w #$0BA3 : STA.w $2F52 -STA.w $2FCE -STA.w $2FD0 - -;126 - -LDA.w #$0BA3 : STA.w $3054 -STA.w $3056 -STA.w $3058 -STA.w $305A -STA.w $3254 -STA.w $3256 -STA.w $3258 -STA.w $325A -LDA.w #$0BAC : STA.w $30D4 -LDA.w #$0BAD : STA.w $30D6 -STA.w $3156 -STA.w $31D6 -LDA.w #$0BA9 : STA.w $30D8 -STA.w $3158 -STA.w $31D8 -LDA.w #$0BAA : STA.w $30DA -LDA.w #$0BC5 : STA.w $3154 -LDA.w #$0BC8 : STA.w $315A -LDA.w #$0BCA : STA.w $31D4 -LDA.w #$0BCD : STA.w $31DA -RTS -} + LDA.b OverworldIndex + CMP.w #$0080 + BCS .exit + + ASL + TAX + + LDA.l OverworldMapChangePointers,X + BNE .do_overlay + +.exit + LDX.w #$001E + LDA.w #$0DBE + + RTL + +.end + PLB + BRA .exit + +.do_overlay + PHB + PHK + PLB + + ; give Y the pointer to our data + TAY + +.next_tile + ; format: + ; dw , + ; or if bit 15 is set + ; dw , ... + ; commands are: + ; 1sss ssss dccc cccc + ; s - size (if applicable) + ; d - direction (if applicable) + ; c - command id + ; FFFF is end + LDA.w $0000,Y + INY + INY + TAX + BMI .command + + LDX.w $0000,Y + STA.l $7E0000,X + + INY + INY + + BRA .next_tile + + ; when using commands, list parameters will never have bit-15 set + ; so we use that as our sentinel in data lists + ; we could encode the size for everything + ; but that makes adjustments more burdensome +.command + CMP.w #!OWW_END + BEQ .end + + STA.b OWWriteCommand + + AND.w #$007F + ASL + TAX + + JSR (.command_vectors,X) + + BRA .next_tile + +.command_vectors + ; dw !OWW_Stripe|!OWW_ + ; dw + ; dw , , ... |!OWW_STOP + ; use !SKIP to not place a tile but continue the stripe + !OWW_Stripe = $8000 + dw .stripe ; 00 + + ; dw !OWW_StripeRLE|!OWW_|RLESize() + ; dw , + !OWW_StripeRLE = $8001 + dw .stripe_rle ; 01 + + ; dw !OWW_StripeRLEINC|!OWW_|RLESize() + ; dw , + !OWW_StripeRLEINC = $8002 + dw .stripe_rle_inc ; 02 + + ; dw !OWW_ArbTileCopy + ; dw + ; dw , , ... |!OWW_STOP + !OWW_ArbTileCopy = $8003 + dw .arbitrary_tile_copy ; 03 + + dw .nothing ; 04 + dw .nothing ; 05 + dw .nothing ; 06 + dw .nothing ; 07 + dw .nothing ; 08 + dw .nothing ; 09 + dw .nothing ; 0A + dw .nothing ; 0B + dw .nothing ; 0C + + ; dw !OWW_SkipIfInverted,
+ ; skips to
when inverted mode + !OWW_SkipIfInverted = $800D + dw .inverted_skip ; 0D + + ; dw !OWW_SkipIfNotInverted,
+ ; skips to
when not inverted + !OWW_SkipIfNotInverted = $800E + dw .inverted_block ; 0E + + ; dw !OWW_InvertedOnly + ; cancels everything if not inverted + !OWW_InvertedOnly = $800F + dw .inverted_only ; 0F + + ; dw !OWW_CustomCommand, + !OWW_CustomCommand = $8010 + dw .custom_command ; 10 + + dw .nothing ; 11 + dw .nothing ; 12 + dw .nothing ; 13 + dw .nothing ; 14 + dw .nothing ; 15 + dw .nothing ; 16 + dw .nothing ; 17 + dw .nothing ; 18 + dw .nothing ; 19 + +;--------------------------------------------------------------------------------------------------- + +.custom_command + TYX + + INY + INY + + JMP.w ($0000,X) + +;--------------------------------------------------------------------------------------------------- + +.inverted_skip + LDX.w $0000,Y + + INY + INY + + LDA.l InvertedMode + AND.w #$00FF + BEQ .dont_change_inverted + + TXY + +.nothing + RTS + +;--------------------------------------------------------------------------------------------------- + +.inverted_block + LDX.w $0000,Y + INY + INY + BRA .check_inverted + +#ReliableOWWSentinel: + dw !OWW_END + +.inverted_only + LDX.w #ReliableOWWSentinel + +.check_inverted + LDA.l InvertedMode + AND.w #$00FF + BNE .dont_change_inverted + + TXY + +.dont_change_inverted + RTS + +;--------------------------------------------------------------------------------------------------- + +.get_increment + LDA.b OWWriteCommand + AND.w #$0080 + BNE .vertical_increment + + LDA.w #$0002 + +.vertical_increment + STA.b OWWriteIncrement + + RTS + +;--------------------------------------------------------------------------------------------------- + +.stripe + JSR .get_increment + + LDX.w $0000,Y + + BRA ++ ; to increment at start of loop properly + +-- TXA + CLC + ADC.b OWWriteIncrement + TAX + +++ INY + INY + + LDA.w $0000,Y + BMI .end_stripe_maybe + + STA.l $7E0000,X + BRA -- + +.end_stripe_maybe + CMP.w #!OWW_SKIP ; just skip, so we can have fewer discontinuous commands + BEQ -- + + AND.w #$7FFF + STA.l $7E0000,X + + INY + INY + + RTS + +;--------------------------------------------------------------------------------------------------- + +.stripe_rle_inc + JSR .get_increment + JSR .get_rle_size_and_tile + + LDX.w $0000,Y + BRA ++ + +-- TXA + CLC + ADC.b OWWriteIncrement + TAX + + LDA.b OWWriteTile + INC + STA.b OWWriteTile + +++ STA.l $7E0000,X + + DEC.b OWWriteSize + BNE -- + + INY + INY + + RTS + +;--------------------------------------------------------------------------------------------------- + +.get_rle_size_and_tile + LDA.b OWWriteCommand+1 + AND.w #$007F + STA.b OWWriteSize + + LDA.w $0000,Y + STA.b OWWriteTile + + INY + INY + + RTS + +;--------------------------------------------------------------------------------------------------- + +.stripe_rle + JSR .get_increment + JSR .get_rle_size_and_tile + + LDX.w $0000,Y + BRA ++ + +-- TXA + CLC + ADC.b OWWriteIncrement + TAX + + LDA.b OWWriteTile + +++ STA.l $7E0000,X + + DEC.b OWWriteSize + BNE -- + + INY + INY + + RTS + +;--------------------------------------------------------------------------------------------------- +; Don't use SKIP with this, since that's not really meaningful anyways... +;--------------------------------------------------------------------------------------------------- +.arbitrary_tile_copy + LDA.w $0000,Y + +-- INY + INY + + LDX.w $0000,Y + BMI .last_arb + + STA.l $7E0000,X + BRA -- + +.last_arb + PHA + + TXA + AND.w #$7FFF + TAX + + PLA + + STA.l $7E0000,X + + INY + INY + + RTS + +;--------------------------------------------------------------------------------------------------- + +;=================================================================================================== + +OverworldMapChangePointers: + ; light world + dw $0000 ; 00 + dw $0000 ; 01 + dw $0000 ; 02 + dw .map03 ; 03 + dw $0000 ; 04 + dw .map05 ; 05 + dw $0000 ; 06 + dw .map07 ; 07 + dw $0000 ; 08 + dw $0000 ; 09 + dw $0000 ; 0A + dw $0000 ; 0B + dw $0000 ; 0C + dw $0000 ; 0D + dw .map0E ; 0E + dw $0000 ; 0F + dw .map10 ; 10 + dw $0000 ; 11 + dw $0000 ; 12 + dw $0000 ; 13 + dw .map14 ; 14 + dw $0000 ; 15 + dw $0000 ; 16 + dw $0000 ; 17 + dw $0000 ; 18 + dw $0000 ; 19 + dw $0000 ; 1A + dw .map1B ; 1B + dw $0000 ; 1C + dw $0000 ; 1D + dw $0000 ; 1E + dw $0000 ; 1F + dw $0000 ; 20 + dw $0000 ; 21 + dw $0000 ; 22 + dw $0000 ; 23 + dw $0000 ; 24 + dw $0000 ; 25 + dw $0000 ; 26 + dw $0000 ; 27 + dw $0000 ; 28 + dw .map29 ; 29 + dw $0000 ; 2A + dw $0000 ; 2B + dw $0000 ; 2C + dw $0000 ; 2D + dw $0000 ; 2E + dw $0000 ; 2F + dw .map30 ; 30 + dw .map31 ; 31 + dw .map32 ; 32 + dw .map33 ; 33 + dw $0000 ; 34 + dw .map35 ; 35 + dw $0000 ; 36 + dw $0000 ; 37 + dw .map38 ; 38 + dw $0000 ; 39 + dw .map3A ; 3A + dw $0000 ; 3B + dw .map3C ; 3C + dw $0000 ; 3D + dw $0000 ; 3E + dw $0000 ; 3F + + ; dark world + dw $0000 ; 40 + dw $0000 ; 41 + dw $0000 ; 42 + dw .map43 ; 43 + dw .map44 ; 44 + dw .map45 ; 45 + dw $0000 ; 46 + dw .map47 ; 47 + dw $0000 ; 48 + dw $0000 ; 49 + dw $0000 ; 4A + dw $0000 ; 4B + dw $0000 ; 4C + dw $0000 ; 4D + dw .map4E ; 4E + dw $0000 ; 4F + dw .map50 ; 50 + dw $0000 ; 51 + dw $0000 ; 52 + dw $0000 ; 53 + dw .map54 ; 54 + dw $0000 ; 55 + dw $0000 ; 56 + dw $0000 ; 57 + dw $0000 ; 58 + dw $0000 ; 59 + dw $0000 ; 5A + dw .map5B ; 5B + dw $0000 ; 5C + dw $0000 ; 5D + dw $0000 ; 5E + dw $0000 ; 5F + dw $0000 ; 60 + dw $0000 ; 61 + dw $0000 ; 62 + dw $0000 ; 63 + dw $0000 ; 64 + dw $0000 ; 65 + dw $0000 ; 66 + dw $0000 ; 67 + dw $0000 ; 68 + dw $0000 ; 69 + dw $0000 ; 6A + dw $0000 ; 6B + dw $0000 ; 6C + dw $0000 ; 6D + dw $0000 ; 6E + dw .map6F ; 6F + dw .map70 ; 70 + dw $0000 ; 71 + dw $0000 ; 72 + dw .map73 ; 73 + dw $0000 ; 74 + dw .map75 ; 75 + dw $0000 ; 76 + dw $0000 ; 77 + dw .map78 ; 78 + dw $0000 ; 79 + dw $0000 ; 7A + dw $0000 ; 7B + dw $0000 ; 7C + dw $0000 ; 7D + dw $0000 ; 7E + dw $0000 ; 7F + +;--------------------------------------------------------------------------------------------------- + +.map03 + dw !OWW_InvertedOnly + + ; singles + dw $0034, $2BE0 + + dw !OWW_Stripe|!OWW_Horizontal + dw $29B6 ; address + dw $021A, $01F3, $00A0, $0104|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $00C6 ; tile + dw $2A34, $2A38, $2A3A|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map05 + dw $0101, $2E18 ; OWG sign + + dw !OWW_InvertedOnly + + ; singles + dw $0034, $21F2 + dw $0034, $3D4A + dw $0116, $216E + dw $0126, $21F4 + + dw $0139, $2C6C + dw $014B, $2C6E + dw $016B, $29F0 + dw $016B, $2CEC + dw $0182, $29F2 + dw $0182, $2CEE + + dw !OWW_Stripe|!OWW_Horizontal + dw $206E ; address + dw $0112, $0113, $0113, $0112|!OWW_STOP + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2) + dw $0111, $20EC ; tile, start + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(3) + dw $0116, $20F0 ; tile, start + + dw !OWW_Stripe|!OWW_Horizontal + dw $216C ; address + dw $0112, $0116, $011C, $011D, $011E|!OWW_STOP + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(3) + dw $011C, $2170 ; tile, start + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2) + dw $0123, $21EC ; tile, start + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(4) + dw $0144, $2364 ; tile, start + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2) + dw $01B3, $236C ; tile, start + + dw !OWW_Stripe|!OWW_Horizontal + dw $2970 ; address + dw $0139, $014B|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0130 ; tile + dw $21E2, $21F0, $22E2, $22F0|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0135 ; tile + dw $2262, $2270, $2362, $2370|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0136 ; tile + dw $2264, $2266, $226C, $226E|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0137 ; tile + dw $2268, $226A|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $22E4 ; start + dw $013C, $013C, $013D, $013D, $013C, $013C|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map07 + dw !OWW_InvertedOnly + + ; singles + dw $0134, $269E + dw $0134, $26A4 + dw $0034, $2826 + + dw !OWW_ArbTileCopy + dw $021B ; tile + dw $259E, $25A2, $25A4, $261C + dw $2626, $269A, $26A8, $271A + dw $2728, $279A, $27A8, $281E + dw $2820, $2822, $2824, $2828 + dw $289C, $28A6, $291E, $2924|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map0E + dw !OWW_InvertedOnly + + dw $0034, $3D4A + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map10 + dw !OWW_InvertedOnly + + dw $0034, $2B2E + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map14 + dw !OWW_InvertedOnly + + dw !OWW_Stripe|!OWW_Vertical + dw $2422 + dw $02F1, $0184, $0184|!OWW_STOP + + dw !OWW_Stripe|!OWW_Vertical + dw $2424 + dw $02F2, $0185, $0185|!OWW_STOP + + dw !OWW_END + +;=================================================================================================== + +.map1B + dw !OWW_InvertedOnly + + ; singles + dw $0476, $2522 + dw $04D7, $2528 + + dw !OWW_Stripe|!OWW_Vertical + dw $2424 ; address + dw $0485, $0454, $0460, !OWW_SKIP + dw $04DD, $04E0, $04E4, $0034|!OWW_STOP + + dw !OWW_Stripe|!OWW_Vertical + dw $2426 ; address + dw $0485, $0454, $0460, !OWW_SKIP + dw $04DE, $04E1, $04E5, $0034|!OWW_STOP + + + ; Eye removed + dw !OWW_ArbTileCopy + dw $046D ; tile + dw $243E, $24BC, $24BE, $253E + dw $2440, $24C0, $24C2, $2540|!OWW_STOP + + ; new trees + + dw !OWW_Stripe|!OWW_Horizontal + dw $2D2C ; address + dw $00B0, $0014, $0015, $00A8 + dw $04BB, $0034|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $2DAC ; address + dw $0089, $001C, $001D, $0076 + dw $04BA, $0034|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $2E2C ; address + dw $00F1, $004E, $004F, $00D9 + dw $04BB|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0034 ; tile + dw $28AC, $28AE + dw $28B0, $28CE, $28D0, $28D2 + dw $2C2C, $2C2E, $2CB6, $2EB6 + dw $2F30, $2F36, $2FAA, $2FB0 + dw $2FB4, $2FB6, $3028, $302C|!OWW_STOP + + ; TODO still need to optimize this last section ugh + dw $0035, $2C28 + dw $0035, $2FAE + dw $0035, $302A + dw $0035, $3032 + dw $007E, $2CB0 + dw $007F, $2CB2 + dw $0095, $2EB2 + dw $009A, $2EAC + dw $009B, $2EAE + dw $009C, $2EB0 + dw $00AE, $2CAC + dw $00AF, $2CAE + dw $00DA, $302E + dw $00E2, $2C36 + dw $00E2, $2FA8 + dw $00E2, $3030 + dw $0451, $282E + dw $0451, $2830 + dw $0451, $284E + dw $0451, $2850 + dw $0451, $2852 + dw $0454, $272C + dw $0454, $272E + dw $0454, $274E + dw $0454, $2750 + dw $0459, $27CE + dw $0459, $27D0 + dw $045E, $27AE + dw $045E, $27D2 + dw $0476, $2522 + dw $0486, $26B0 + dw $0487, $26B2 + dw $048E, $2730 + dw $048F, $2732 + dw $0494, $27B0 + dw $0495, $27B2 + dw $0499, $282C + dw $049E, $27B4 + dw $04BA, $2CB4 + dw $04BA, $2EB4 + dw $04BB, $2F34 + dw $04CA, $27AC + dw $04D7, $2528 + dw $0608, $2752 + + dw !OWW_CustomCommand, .map1B_check_aga + + dw $046D, $243E + dw $0E39, $2440 + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(4) + dw $0E3A, $24BC ; tile, start + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(4) + dw $0E3E, $253C ; tile, start + + dw $0490, $25BE + dw $0491, $25C0 + +.map1B_no_hole + ; add sign for tower entry + dw $0101, $222C + dw $0101, $2252 + + dw !OWW_END + +.map1B_check_aga + LDA.l OverworldEventDataWRAM+$5B + AND.w #$0020 + BNE ++ + + LDY.w #.map1B_no_hole + +++ RTS + +;--------------------------------------------------------------------------------------------------- + +.map29 + dw !OWW_InvertedOnly + + ; singles + dw $0036, $2386 + + dw !OWW_ArbTileCopy + dw $0034 ; tile + dw $2288, $2308, $2388, $2408 + dw $2488, $248A|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- +.map30 + dw !OWW_InvertedOnly + + dw $0178, $224E + dw $00D3, $22E2 + dw $0302, $22E4 + dw $00AA, $2368 + dw $00AB, $236C + dw $01C2, $245C + dw $015C, $23E0 + dw $0218, $245E + dw $0162, $2460 + dw $0105, $255A + dw $01D4, $24DC + dw $0219, $24DE + dw $0171, $25DE + dw $0166, $255E + dw $0766, $2560 + dw $06E1, $27D6 + dw $00CF, $27DA + dw $0034, $3D94 + + dw !OWW_ArbTileCopy + dw $017E + dw $2050, $20CE|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00D1, $2052 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6) + dw $00D1, $21E6 + + dw !OWW_ArbTileCopy + dw $00D2 + dw $2060, $20E2, $2164|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0183 + dw $20D0, $214E|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00C9, $20D2 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00C9, $2152 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6) + dw $00C9, $2266 + dw $00C9, $22CC + + dw !OWW_ArbTileCopy + dw $00D0 + dw $20E0, $2162, $21E4|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(3) + dw $0153, $2150 + + dw !OWW_ArbTileCopy + dw $0153 + dw $21CE, $22CE|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $00C8 + dw $2160, $21E2, $2264, $28DA, $295C|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $00CA + dw $21E0, $2262, $285A, $28DC|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00DC, $21D2 + dw $00DC, $224C + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(2) + dw $00E3, $2252 + + dw !OWW_ArbTileCopy + dw $0186 + dw $22D0, $234E|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $0034, $22D2 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(7) + dw $0034, $22D4 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(7) + dw $0034, $22D6 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $0034, $2350 + + dw !OWW_ArbTileCopy + dw $0034 + dw $2458, $2656|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6) + dw $00CC, $22E6 + dw $00CC, $234C + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $00CE, $2362 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $00CE, $25D8 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $00C5, $2364 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $00C5, $25DC + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $06AB, $2366 + + dw !OWW_ArbTileCopy + dw $06AB + dw $24E4, $2760|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0384 + dw $236A, $236E, $23EC, $246A|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0384, $24E8 + + dw !OWW_ArbTileCopy + dw $0759 + dw $23C8, $244A, $24CC, $254E, $26D0, $2752, $27D4|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0757 + dw $23CA, $244C, $24CE, $2550, $26D2, $2754|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $01FF + dw $23CC, $244E, $24D0, $2652, $26D4, $2756|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $017C + dw $23CE, $2450, $24D2, $2654, $26D6|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0100 + dw $245A, $24D8|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0104 + dw $24DA, $2558|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0106 + dw $2462, $24E0, $255C|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0107 + dw $2464, $24E2|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $0179, $2552 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(8) + dw $06B4, $2562 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $06E5, $25D0 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $00C4, $25DA + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $0165, $25E4 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $06E4, $27D2 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $06E4, $2854 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(3) + dw $06E4, $2856 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $06E4, $2958 + dw $06E4, $29DA + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $02FD, $27D8 + + dw !OWW_ArbTileCopy + dw $06E7 + dw $28D8, $295A, $29DC|!OWW_STOP + + dw !OWW_END +;--------------------------------------------------------------------------------------------------- + +.map31 + dw !OWW_InvertedOnly + + ; singles + dw $017E, $20CE + dw $017E, $2050 + dw $0183, $20D0 + dw $0183, $214E + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0034, $2050 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00D1, $2052 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00D1, $21E6 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00C9, $20D2 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00C9, $2152 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6) + dw $00C9, $2266 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $00DC, $21D2 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6) + dw $00CC, $22E6 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0034, $2452 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(8) + dw $06B4, $2562 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $0165, $25E4 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0384, $24E8 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0034, $23D0 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0034, $22D2 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map38 + dw !OWW_InvertedOnly + + dw $0034, $3D94 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + + +.map3C + dw !OWW_InvertedOnly + + dw !OWW_ArbTileCopy + dw $02E5 + dw $27AE, $282C, $282E, $2832 + dw $28AC, $28AE, $2928, $292C + dw $29A8, $29B0, $2A28, $2A30 + dw $2AAC, $2AB2|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $078A + dw $28AA, $28B0, $2AAA, $2B2A + dw $2B30, $2BAE|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $02EB + dw $28B4, $2930, $29AE, $2A2C + dw $2A32, $2AAE|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $02EC + dw $2934, $2B28, $2B2C, $2B2E + dw $2B32|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map32 + dw !OWW_InvertedOnly + + dw !OWW_Stripe|!OWW_Vertical + dw $2486 + dw $01D5, $0165, $00C6|!OWW_STOP + + dw $0166, $2508 + dw $0171, $2588 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5) + dw $00C6, $2608 + + dw $0166, $258A + dw $016A, $278C + dw $016A, $280C + dw $00C6, $2806 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5) + dw $021C, $260A + + dw !OWW_ArbTileCopy + dw $0034 + dw $270E, $278E, $2790, $2918, $291A, $2998, $299A, $291C, $291E, $2920|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(8) + dw $0034, $280E + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $0034, $2892 + + dw !OWW_Stripe|!OWW_Horizontal + dw $288C + dw $01FA, $0034, $00DA|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $290C + dw $0186 + dw $0034, $0034, $0034 + dw $0036, $0036|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(7) + dw $0034, $2818 + + dw !OWW_Stripe|!OWW_Horizontal + dw $2986 + dw $00E4, $00E5, $0186 + dw $0034, $0034, $0034, $0034 + dw $0036, $0036 + dw $0034, $0034 + dw $00DA + dw $0034, $0034 + dw $0100|!OWW_STOP + + dw $0186, $2A04 + + ; a couple of these will be overwritten in a second + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(13) + dw $0034, $2A06 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(13) + dw $0034, $2A84 + + ; leave these after the above + dw $0071, $2A0E + dw $0071, $2A1A + dw $0035, $2A8C + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(5) + dw $0034, $2B84 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(6) + dw $0034, $2C86 + + dw !OWW_ArbTileCopy + dw $0034 ; tile + dw $2B06, $2B0A, $2B0E, $2B12 + dw $2B1A, $2B92, $2B94 + dw $2B98, $2B9A, $2C04, $2C08 + dw $2C0A, $2C0E, $2C12, $2C14 + dw $2C18, $2C98 + dw $2D0A, $2D0C, $2D10, $2D14 + dw $2D16, $2D8A, $2D8C, $2D8E + dw $2D94|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0035 ; tile + dw $2B08, $2C06, $2D0E, $2D90|!OWW_STOP + + dw $0104, $2A22 + dw $01D4, $2A24 + dw $00F8, $2C1A + dw $00CE, $2C1C + dw $0071, $2C8C + dw $00CE, $2C9C + dw $0167, $2D04 + dw $0036, $2D12 + dw $0167, $2D86 + dw $0172, $2E08 + dw $0174, $2E16 + + dw !OWW_ArbTileCopy + dw $00DA ; tile + dw $2B14, $2B16, $2B18, $2B96 + dw $2C16, $2C96, $2D08, $2D92|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $00E2 ; tile + dw $2B04, $2B0C, $2B10, $2B8C, $2B90 + dw $2C0C, $2C10, $2C8E|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $015C ; tile + dw $2A20, $2A9E, $2B1C, $2C9A, $2D18 + dw $2D96|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $015E ; tile + dw $2E0A, $2E0C, $2E0E, $2E10 + dw $2E12, $2E14|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0160 ; tile + dw $2C84, $2D06, $2D88|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0162 ; tile + dw $2AA0, $2B1E, $2B9C, $2D1A + dw $2D98|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $016A ; tile + dw $2A82, $2B02, $2B82, $2C02 + dw $2C82|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map33 + dw !OWW_InvertedOnly + + dw $0034, $22A8 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map35 + dw !OWW_InvertedOnly + + dw !OWW_Stripe|!OWW_Vertical + dw $2BB0 + dw $02F1, $0184, $0392, $0394|!OWW_STOP + + dw !OWW_Stripe|!OWW_Vertical + dw $2BB2 + dw $02F2, $0185, $0393, $0395|!OWW_STOP + + dw $0034, $2F56 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map3A + dw !OWW_InvertedOnly + + dw !OWW_Stripe|!OWW_Horizontal + dw $2800 + dw $0774, $06E1, $0757|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $2880 + dw $0779, $02EC, $0759, $0757|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $2900 + dw $02E5, $02E5, $02E5, $0759, $076A|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $2980 + dw $02F3, $02F3, $02F1, $02F2, $038A|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $0184, $2A04 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(4) + dw $0185, $2A06 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map43 + dw !OWW_SkipIfInverted, .map43_inverted + dw $0101, $2550 ; GT sign + + .map43_inverted + dw !OWW_InvertedOnly + + dw $0212, $2BE0 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5) + dw $0E96, $235E + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5) + dw $0E97, $2360 + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2) + dw $0E94, $25DE ; tile, start + + dw !OWW_StripeRLEINC|!OWW_Horizontal|OWW_RLESize(2) + dw $0180, $275E + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $0184, $27DE + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(2) + dw $0185, $27E0 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map44 + dw !OWW_InvertedOnly + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5) + dw $0E96, $235E + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(5) + dw $0E97, $2360 + + dw $0E94, $25DE + dw $0E95, $25E0 + dw $0212, $2BE0 + + dw !OWW_Stripe|!OWW_Vertical + dw $275E + dw $0180, $0184, $0184|!OWW_STOP + + dw !OWW_Stripe|!OWW_Vertical + dw $276E + dw $0181, $0185, $0185|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- +.map45 + dw !OWW_InvertedOnly + + dw $0239, $3D4A + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map47 + dw !OWW_InvertedOnly + + dw $0398, $25A0 + dw $0522, $25A2 + dw $0125, $2620 + dw $0126, $2622 + dw $0239, $269E + dw $0239, $26A4 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map4E + dw !OWW_InvertedOnly + + dw $0239, $3D4A + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map50 + dw !OWW_InvertedOnly + + dw $020F, $2B2E + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map54 + dw !OWW_InvertedOnly + + dw !OWW_Stripe|!OWW_Vertical + dw $2422 + dw $02F3, $00C9, $00E3|!OWW_STOP + + dw !OWW_Stripe|!OWW_Vertical + dw $2424 + dw $02F3, $00C9, $00E3|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +; Pyramid +.map5B + dw !OWW_SkipIfInverted, .map5B_inverted_mode + + dw $0101, $27B6 ; sign to statue + dw $05C2, $27B4 ; peg left of sign + +.map5B_inverted_mode + dw !OWW_InvertedOnly + + dw $0323, $39B6 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0324, $39B8 + + dw $02FE, $3A34 + dw $02FF, $3A36 + dw $0235, $3BB4 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0326, $3A38 + + dw !OWW_Stripe|!OWW_Horizontal + dw $3AB2 + dw $039D, $0303, $0232 + dw $0233, $0233, $0233, $0233|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $3B32 + dw $03A2, $0232, $0235, $046A + dw $0333, $0333, $0333|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0034 ; tile + dw $3BB6, $3BBA, $3BBC, $3C3A + dw $3C3C, $3C3E|!OWW_STOP + + + ; pegs + dw !OWW_ArbTileCopy + dw $0034 ; tile + dw $321C, $329C, $32A0|!OWW_STOP + + dw $00E2, $321A + dw $0071, $321E + dw $00DA, $3220 + + dw $00DA, $329A + dw $00E1, $329E + + dw $0382, $3318 + dw $037C, $3322 + + dw $00F2, $3BB8 + dw $0108, $3C38 + + dw !OWW_ArbTileCopy + dw $021B ; tile + dw $3218, $3222, $3298, $32A2 + dw $331A, $331C, $331E, $3320|!OWW_STOP + + + dw !OWW_CustomCommand, .map5B_pick_warp_tile + + dw !OWW_Stripe|!OWW_Horizontal + dw $39C0 ; start + dw $0324, $0324, $0324, $0325, $02D5 + dw !OWW_SKIP, $02CC|!OWW_STOP + + dw $02CC, $39D4 + + dw !OWW_Stripe|!OWW_Horizontal + dw $3A40 ; start + dw $0326, $0326, $0326 + dw $0327, $02F7, !OWW_SKIP + dw $02E3, $02E3|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $3AC0 ; start + dw $0233, $0233, $0233, $0234 + dw $02F6, $0396|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $3B40 + dw $0333, $0333, $03AA, $03A3 + dw $0234, $0397|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $3BC0 ; start + dw $0034, $0034, $029C, $0034 + dw $03A3|!OWW_STOP + + dw !OWW_Stripe|!OWW_Horizontal + dw $3C40 ; start + dw $0034, $0034, $010A|!OWW_STOP + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(17) + dw $010B, $3C46 + + dw !OWW_END + +.map5B_pick_warp_tile + LDA.l ProgressIndicator + AND.w #$00FF + CMP.w #$0003 + + LDA.w #$0034 + BCC ++ + + LDA.w #$0212 + +++ STA.l $7E3BBE + + RTS + +;--------------------------------------------------------------------------------------------------- + +.map6F + dw !OWW_InvertedOnly + + dw $020F, $2BB2 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map70 + dw !OWW_InvertedOnly + + dw $0239, $3D94 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map73 + dw !OWW_InvertedOnly + + dw $020F, $22A8 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map75 + dw !OWW_InvertedOnly + + ; singles + dw $0239, $2F50 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0BA3, $3054 + + dw !OWW_StripeRLE|!OWW_Horizontal|OWW_RLESize(4) + dw $0BA3, $3254 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(3) + dw $0BAD, $30D6 + + dw !OWW_StripeRLE|!OWW_Vertical|OWW_RLESize(3) + dw $0BA9, $30D8 + + dw !OWW_Stripe|!OWW_Vertical + dw $30D4 ; start + dw $0BAC, $0BC5, $0BCA|!OWW_STOP + + dw !OWW_Stripe|!OWW_Vertical + dw $30DA ; start + dw $0BAA, $0BC8, $0BCD|!OWW_STOP + + dw !OWW_ArbTileCopy + dw $0BA3 ; tile + dw $2F52, $2FCE, $2FD0|!OWW_STOP + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +.map78 + dw !OWW_InvertedOnly + + dw $0239, $3D94 + + dw !OWW_END + +;--------------------------------------------------------------------------------------------------- + +;=================================================================================================== diff --git a/itemdatatables.asm b/itemdatatables.asm new file mode 100644 index 0000000..7f76b87 --- /dev/null +++ b/itemdatatables.asm @@ -0,0 +1,1482 @@ +;------------------------------------------------------------------------------ +; Item Data Tables +;------------------------------------------------------------------------------ +; This module contains several statically mapped tables related to items, item +; receipts, and item graphics. There are 256 item receipt indexes and the tables are +; written column-major, meaning each "column" property of every table entry is +; written adjacent to each other (e.g., ItemReceipts_offset_y is one byte per item. +; All 256 bytes for each item are written in receipt ID order, then 256 bytes are +; written for ItemReceipts_offset_x, etc.) The addresses and description of each +; table and column are described immediately below. The tables themselves are below +; the documentation. +; +; The tables and documentation here should provide the knowledge and capability +; to add an item into an unclaimed receipt ID or replace some existing items, although +; you should prefer to use unclaimed space or reuse randomizer item slots as some +; vanilla behavior is still hard-coded. +; +; Some of the entries in these tables are word-length vectors, or pointers to +; code the randomizer ROM runs on item pickup or resolution (e.g., resolving a +; progressive sword that's a standing item.) We provide all our own routines plus +; some for "skipping" these steps when not necessary. If you want an item to potentially +; resolve to a different one, or to run some custom code on pickup, you will have to use +; ItemSubstitutionRules in tables.asm or claim some free space in this bank to put your +; own code with vectors to it in the appropriate tables. +;------------------------------------------------------------------------------ + +;------------------------------------------------------------------------------ +; ItemReceiptGraphicsROM - $A28000 (0x110000 PC) +;------------------------------------------------------------------------------ +; Where the custom uncompressed 4bpp item graphics are stored. See customitems.4bpp +; and customitems.png for reference. Offsets into this label should written to +; ItemReceiptGraphicsOffsets & StandingItemGraphicsOffsets without the high byte +; (0x8000) set. +; +; We can understand this buffer as being divided into an 8x8 grid with most sprites +; occupying a 16x16 space and narrow sprites occupying an 8x16 space. The first 16x16 +; item tile is a blank one-color sprite, the second 16x16 is the triforce piece, +; and the third is the fighter sword sprite. +; +; Every 8x8 4bpp tile from left to right is offset by 0x20. From top to bottom +; the offset is 0x200. This means that each "row" of 8x8 tiles should be written +; contiguously, but to write the next tile(s) below the base upper-left address +; should be incremented by 0x200. +;------------------------------------------------------------------------------ + +;------------------------------------------------------------------------------ +; ItemReceipts +;------------------------------------------------------------------------------ +; .offset_y [0x01] - $A2B000 (0x113000 PC) +; • Sprite Y offset from default position +; .offset_x [0x01] - $A2B100 (0x113100 PC) +; • Sprite X offset from default position +; .graphics [0x01] - $A2B200 (0x113200 PC) +; • Sprite index for compressed graphics +; .target [0x02] - $A2B300 (0x113300 PC) +; • Target address in save buffer in bank $7E +; .value [0x01] - $A2B500 (0x113500 PC) +; • Value written to target address +; .behavior [0x02] - $A2B600 (0x113600 PC) +; • Vector to code in this bank that runs on item pickup +; .resolution [0x02] - $A2B600 (0x113600 PC) +; • Vector to code in this bank that can resolve to new item (e.g. for progressive items) +;------------------------------------------------------------------------------ + +;------------------------------------------------------------------------------ +; SpriteProperties +;------------------------------------------------------------------------------ +; For the most part item sprites are identical in all contexts, but some +; sprites have two graphics, chest/npc graphics and standing item graphics. +;------------------------------------------------------------------------------ +; .chest_width [0x01] - $A2BA00 (0x11CA00 PC) +; .standing_width [0x01] - $A2BB00 (0x11CB00 PC) +; • $00 = 8x16 sprite | $02 = 16x16 sprite +; .chest_palette [0x01] - $A2BC00 (0x11CC00 PC) +; .standing_palette [0x01] - $A2BD00 (0x11CD00 PC) +; • l - - - - c c c +; c = palette index | l = load palette from .palette_addr +; .palette_addr [0x02] - $A2BE00 (0x11CE00 PC) +; • Pointer to 8-color palette in bank $9B (see custompalettes.asm) +; • If an item has two sprites, this should be the chest sprite for +; dark rooms. +;------------------------------------------------------------------------------ + +;------------------------------------------------------------------------------ +; InventoryTable +;------------------------------------------------------------------------------ +; .properties [0x01] - $A2C000 (0x114000 PC) +; • 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) +; • Pointer to address in bank $7E. Stamps 32-bit frame time if stats not locked. +;------------------------------------------------------------------------------ + +;------------------------------------------------------------------------------ +; ItemReceiptGraphicsOffsets & StandingItemGraphicsOffsets +;------------------------------------------------------------------------------ +; Each receipt ID has one word-length entry. Decompressed vanilla item graphics +; are located starting at BigDecompressionBuffer. The graphics routines use the +; fact that the high bit is set for these in this table to know to load from the +; buffer. Custom graphics are offset from ItemReceiptGraphicsRom, allocated in +; LTTP_RND_GeneralBugfixes.asm and written to with decompressed customitems.4bpp +; (see customitems.png for reference.) +; +; ItemReceiptGraphicsOffsets is used for chest items and items link holds up while +; in an item receipt post. StandingItemGraphicsOffsets is for standing items in +; heart piece, heart container, and shop locations. +;------------------------------------------------------------------------------ + +ItemReceipts: + .offset_y : fillbyte $00 : fill 256 + .offset_x : fillbyte $00 : fill 256 + .graphics : fillbyte $00 : fill 256 ; item_graphics_indices + .target : fillword $0000 : fill 256*2 ; item_target_addr + .value : fillbyte $00 : fill 256 ; item_values + .behavior : fillword $0000 : fill 256*2 ; ItemBehavior + .resolution : fillword $0000 : fill 256*2 ; ReceiptResolution + + +macro ReceiptProps(id, y, x, gfx, sram, value, behavior, res) + pushpc + + org ItemReceipts_offset_y+ : db + org ItemReceipts_offset_x+ : db + org ItemReceipts_graphics+ : db + org ItemReceipts_target++ : dw + org ItemReceipts_value+ : db + org ItemReceipts_behavior++ : dw ItemBehavior_ + org ItemReceipts_resolution++ : dw ResolveLootID_ + + pullpc +endmacro + +%ReceiptProps($00, -5, 0, $06, $F359, $01, sword_shield, skip) ; 00 - Fighter sword & Shield +%ReceiptProps($01, -5, 4, $18, $F359, $02, master_sword, skip) ; 01 - Master sword +%ReceiptProps($02, -5, 4, $18, $F359, $03, tempered_sword, skip) ; 02 - Tempered sword +%ReceiptProps($03, -5, 4, $18, $F359, $04, gold_sword, skip) ; 03 - Golden sword +%ReceiptProps($04, -5, 4, $2D, $F35A, $01, fighter_shield, skip) ; 04 - Fighter shield +%ReceiptProps($05, -4, 0, $20, $F35A, $02, red_shield, skip) ; 05 - Fire shield +%ReceiptProps($06, -4, 0, $2E, $F35A, $03, mirror_shield, skip) ; 06 - Mirror shield +%ReceiptProps($07, -5, 4, $09, $F345, $01, skip, skip) ; 07 - Fire rod +%ReceiptProps($08, -5, 4, $09, $F346, $01, skip, skip) ; 08 - Ice rod +%ReceiptProps($09, -4, 4, $0A, $F34B, $01, skip, skip) ; 09 - Hammer +%ReceiptProps($0A, -4, 4, $08, $F342, $01, skip, skip) ; 0A - Hookshot +%ReceiptProps($0B, -4, 4, $05, $F340, $01, bow, skip) ; 0B - Bow +%ReceiptProps($0C, -2, 5, $10, $F341, $01, blue_boomerang, skip) ; 0C - Blue Boomerang +%ReceiptProps($0D, -4, 0, $0B, $F344, $02, powder, skip) ; 0D - Powder +%ReceiptProps($0E, -4, 0, $2C, $F35C, $FF, skip, skip) ; 0E - Bottle refill (bee) +%ReceiptProps($0F, -4, 0, $1B, $F347, $01, skip, skip) ; 0F - Bombos +%ReceiptProps($10, -4, 0, $1A, $F348, $01, skip, skip) ; 10 - Ether +%ReceiptProps($11, -4, 0, $1C, $F349, $01, skip, skip) ; 11 - Quake +%ReceiptProps($12, -4, 0, $14, $F34A, $01, skip, skip) ; 12 - Lamp +%ReceiptProps($13, -4, 4, $19, $F34C, $01, shovel, skip) ; 13 - Shovel +%ReceiptProps($14, -4, 0, $0C, $F34C, $02, flute_inactive, skip) ; 14 - Flute +%ReceiptProps($15, -4, 4, $07, $F350, $01, skip, skip) ; 15 - Somaria +%ReceiptProps($16, -4, 0, $1D, $F35C, $FF, skip, bottles) ; 16 - Bottle +%ReceiptProps($17, -4, 0, $2F, $F36B, $FF, skip, skip) ; 17 - Heart piece +%ReceiptProps($18, -4, 4, $07, $F351, $01, skip, skip) ; 18 - Byrna +%ReceiptProps($19, -4, 0, $15, $F352, $01, skip, skip) ; 19 - Cape +%ReceiptProps($1A, -4, 0, $12, $F353, $02, skip, skip) ; 1A - Mirror +%ReceiptProps($1B, -4, 0, $0D, $F354, $01, skip, skip) ; 1B - Glove +%ReceiptProps($1C, -4, 0, $0D, $F354, $02, skip, skip) ; 1C - Mitts +%ReceiptProps($1D, -4, 0, $0E, $F34E, $01, skip, skip) ; 1D - Book +%ReceiptProps($1E, -4, 0, $11, $F356, $01, skip, skip) ; 1E - Flippers +%ReceiptProps($1F, -4, 0, $17, $F357, $01, skip, skip) ; 1F - Pearl +%ReceiptProps($20, -4, 0, $28, $F37A, $FF, dungeon_crystal, skip) ; 20 - Crystal +%ReceiptProps($21, -4, 0, $27, $F34D, $01, skip, skip) ; 21 - Net +%ReceiptProps($22, -4, 0, $04, $F35B, $FF, blue_mail, skip) ; 22 - Blue mail +%ReceiptProps($23, -5, 0, $04, $F35B, $02, red_mail, skip) ; 23 - Red mail +%ReceiptProps($24, -4, 4, $0F, $F36F, $FF, skip, skip) ; 24 - Small key +%ReceiptProps($25, -4, 0, $16, $F364, $FF, dungeon_compass, skip) ; 25 - Compass +%ReceiptProps($26, -4, 0, $03, $F36C, $FF, skip, skip) ; 26 - Heart container from 4/4 +%ReceiptProps($27, -4, 0, $13, $F375, $FF, skip, skip) ; 27 - Bomb +%ReceiptProps($28, -4, 0, $01, $F375, $FF, skip, skip) ; 28 - 3 bombs +%ReceiptProps($29, -4, 0, $1F, $F344, $FF, mushroom, skip) ; 29 - Mushroom +%ReceiptProps($2A, -2, 5, $10, $F341, $02, red_boomerang, skip) ; 2A - Red boomerang +%ReceiptProps($2B, -4, 0, $1E, $F35C, $FF, skip, bottles) ; 2B - Full bottle (red) +%ReceiptProps($2C, -4, 0, $1E, $F35C, $FF, skip, bottles) ; 2C - Full bottle (green) +%ReceiptProps($2D, -4, 0, $1E, $F35C, $FF, skip, bottles) ; 2D - Full bottle (blue) +%ReceiptProps($2E, -4, 0, $1E, $F36D, $FF, skip, skip) ; 2E - Potion refill (red) +%ReceiptProps($2F, -4, 0, $1E, $F36E, $FF, skip, skip) ; 2F - Potion refill (green) +%ReceiptProps($30, -4, 0, $1E, $F36E, $FF, skip, skip) ; 30 - Potion refill (blue) +%ReceiptProps($31, -4, 0, $30, $F375, $FF, skip, skip) ; 31 - 10 bombs +%ReceiptProps($32, -4, 0, $22, $F366, $FF, dungeon_bigkey, skip) ; 32 - Big key +%ReceiptProps($33, -4, 0, $21, $F368, $FF, dungeon_map, skip) ; 33 - Map +%ReceiptProps($34, -2, 4, $24, $F360, $FF, skip, skip) ; 34 - 1 rupee +%ReceiptProps($35, -2, 4, $24, $F360, $FF, skip, skip) ; 35 - 5 rupees +%ReceiptProps($36, -2, 4, $24, $F360, $EC, skip, skip) ; 36 - 20 rupees +%ReceiptProps($37, -4, 0, $23, $F374, $FF, pendant, skip) ; 37 - Green pendant +%ReceiptProps($38, -4, 0, $39, $F374, $FF, pendant, skip) ; 38 - Red pendant +%ReceiptProps($39, -4, 0, $39, $F374, $FF, pendant, skip) ; 39 - Blue pendant +%ReceiptProps($3A, -4, 0, $29, $F340, $01, bow_and_arrows, skip) ; 3A - Bow And Arrows +%ReceiptProps($3B, -4, 0, $2A, $F340, $03, silver_bow, skip) ; 3B - Silver Bow +%ReceiptProps($3C, -4, 0, $2C, $F35C, $FF, skip, skip) ; 3C - Full bottle (bee) +%ReceiptProps($3D, -4, 0, $2B, $F35C, $FF, skip, skip) ; 3D - Full bottle (fairy) +%ReceiptProps($3E, -4, 0, $03, $F36C, $FF, skip, skip) ; 3E - Boss heart +%ReceiptProps($3F, -4, 0, $03, $F36C, $FF, skip, skip) ; 3F - Sanc heart +%ReceiptProps($40, -4, 0, $34, $F360, $9C, skip, skip) ; 40 - 100 rupees +%ReceiptProps($41, -4, 0, $35, $F360, $CE, skip, skip) ; 41 - 50 rupees +%ReceiptProps($42, -2, 4, $31, $F372, $FF, skip, skip) ; 42 - Heart +%ReceiptProps($43, -2, 4, $33, $F376, $01, single_arrow, skip) ; 43 - Arrow +%ReceiptProps($44, -4, 0, $02, $F376, $0A, skip, skip) ; 44 - 10 arrows +%ReceiptProps($45, -2, 4, $32, $F373, $FF, skip, skip) ; 45 - Small magic +%ReceiptProps($46, -4, 0, $36, $F360, $FF, skip, skip) ; 46 - 300 rupees +%ReceiptProps($47, -4, 0, $37, $F360, $FF, skip, skip) ; 47 - 20 rupees green +%ReceiptProps($48, -4, 0, $2C, $F35C, $FF, skip, skip) ; 48 - Full bottle (good bee) +%ReceiptProps($49, -5, 4, $06, $F359, $01, fighter_sword, skip) ; 49 - Tossed fighter sword +%ReceiptProps($4A, -4, 0, $0C, $F34C, $03, flute_active, skip) ; 4A - Active Flute +%ReceiptProps($4B, -4, 0, $38, $F355, $01, skip, skip) ; 4B - Boots +%ReceiptProps($4C, -4, 0, $39, $F375, $32, bombs_50, skip) ; 4C - Bomb capacity (50) +%ReceiptProps($4D, -4, 0, $3A, $F376, $46, arrows_70, skip) ; 4D - Arrow capacity (70) +%ReceiptProps($4E, -4, 0, $3B, $F373, $80, magic_2, magic) ; 4E - 1/2 magic +%ReceiptProps($4F, -4, 0, $3C, $F373, $80, magic_4, skip) ; 4F - 1/4 magic +%ReceiptProps($50, -5, 4, $18, $F359, $02, master_sword_safe, skip) ; 50 - Safe master sword +%ReceiptProps($51, -4, 0, $42, $F375, $FF, bombs_5, skip) ; 51 - Bomb capacity (+5) +%ReceiptProps($52, -4, 0, $3E, $F375, $FF, bombs_10, skip) ; 52 - Bomb capacity (+10) +%ReceiptProps($53, -4, 0, $3F, $F376, $FF, arrows_5, skip) ; 53 - Arrow capacity (+5) +%ReceiptProps($54, -4, 0, $40, $F376, $FF, arrows_10, skip) ; 54 - Arrow capacity (+10) +%ReceiptProps($55, -4, 0, $00, $F41A, $FF, programmable_1, skip) ; 55 - Programmable item 1 +%ReceiptProps($56, -4, 0, $00, $F41C, $FF, programmable_2, skip) ; 56 - Programmable item 2 +%ReceiptProps($57, -4, 0, $00, $F41E, $FF, programmable_3, skip) ; 57 - Programmable item 3 +%ReceiptProps($58, -4, 0, $41, $F340, $FF, silver_arrows, skip) ; 58 - Upgrade-only Silver Arrows +%ReceiptProps($59, -4, 4, $24, $F360, $FF, rupoor, skip) ; 59 - Rupoor +%ReceiptProps($5A, -4, 0, $47, $F36A, $FF, skip, skip) ; 5A - Nothing +%ReceiptProps($5B, -4, 0, $4B, $F454, $FF, red_clock, skip) ; 5B - Red clock +%ReceiptProps($5C, -4, 0, $4B, $F454, $FF, blue_clock, skip) ; 5C - Blue clock +%ReceiptProps($5D, -4, 0, $4B, $F454, $FF, green_clock, skip) ; 5D - Green clock +%ReceiptProps($5E, -4, 0, $FE, $F359, $FF, prog_sword, prog_sword) ; 5E - Progressive sword +%ReceiptProps($5F, -4, 0, $FF, $F35A, $FF, prog_shield, shields) ; 5F - Progressive shield +%ReceiptProps($60, -4, 0, $FD, $F35B, $FF, prog_mail, armor) ; 60 - Progressive armor +%ReceiptProps($61, -4, 0, $0D, $F354, $FF, skip, gloves) ; 61 - Progressive glove +%ReceiptProps($62, -4, 0, $FF, $F36A, $FF, skip, rng_single) ; 62 - RNG pool item (single) +%ReceiptProps($63, -4, 0, $FF, $F36A, $FF, skip, rng_multi) ; 63 - RNG pool item (multi) +%ReceiptProps($64, -4, 0, $FF, $F340, $FF, skip, progressive_bow) ; 64 - Progressive bow +%ReceiptProps($65, -4, 0, $FF, $F340, $FF, skip, progressive_bow_2) ; 65 - Progressive bow +%ReceiptProps($66, -4, 0, $FF, $F36A, $FF, skip, skip) ; 66 - +%ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 - +%ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 - +%ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 - +%ReceiptProps($6A, -4, 0, $49, $F36A, $FF, triforce, skip) ; 6A - Triforce +%ReceiptProps($6B, -4, 0, $50, $F36A, $FF, goal_item, skip) ; 6B - Power star +%ReceiptProps($6C, -4, 0, $49, $F36A, $FF, goal_item, skip) ; 6C - Triforce Piece +%ReceiptProps($6D, -4, 0, $FF, $F36A, $FF, request_F0, skip) ; 6D - Server request item +%ReceiptProps($6E, -4, 0, $FF, $F36A, $FF, request_F1, skip) ; 6E - Server request item (dungeon drop) +%ReceiptProps($6F, -4, 0, $FF, $F36A, $FF, request_F2, skip) ; 6F - +%ReceiptProps($70, -4, 0, $21, $F36A, $FF, free_map, skip) ; 70 - Map of Light World +%ReceiptProps($71, -4, 0, $21, $F36A, $FF, free_map, skip) ; 71 - Map of Dark World +%ReceiptProps($72, -4, 0, $21, $F36A, $FF, free_map, skip) ; 72 - Map of Ganon's Tower +%ReceiptProps($73, -4, 0, $21, $F36A, $FF, free_map, skip) ; 73 - Map of Turtle Rock +%ReceiptProps($74, -4, 0, $21, $F36A, $FF, free_map, skip) ; 74 - Map of Thieves' Town +%ReceiptProps($75, -4, 0, $21, $F36A, $FF, free_map, skip) ; 75 - Map of Tower of Hera +%ReceiptProps($76, -4, 0, $21, $F36A, $FF, free_map, skip) ; 76 - Map of Ice Palace +%ReceiptProps($77, -4, 0, $21, $F36A, $FF, free_map, skip) ; 77 - Map of Skull Woods +%ReceiptProps($78, -4, 0, $21, $F36A, $FF, free_map, skip) ; 78 - Map of Misery Mire +%ReceiptProps($79, -4, 0, $21, $F36A, $FF, free_map, skip) ; 79 - Map of Dark Palace +%ReceiptProps($7A, -4, 0, $21, $F36A, $FF, free_map, skip) ; 7A - Map of Swamp Palace +%ReceiptProps($7B, -4, 0, $21, $F36A, $FF, free_map, skip) ; 7B - Map of Agahnim's Tower +%ReceiptProps($7C, -4, 0, $21, $F36A, $FF, free_map, skip) ; 7C - Map of Desert Palace +%ReceiptProps($7D, -4, 0, $21, $F36A, $FF, free_map, skip) ; 7D - Map of Eastern Palace +%ReceiptProps($7E, -4, 0, $21, $F36A, $FF, hc_map, skip) ; 7E - Map of Hyrule Castle +%ReceiptProps($7F, -4, 0, $21, $F36A, $FF, hc_map, skip) ; 7F - Map of Sewers +%ReceiptProps($80, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 80 - Compass of Light World +%ReceiptProps($81, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 81 - Compass of Dark World +%ReceiptProps($82, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 82 - Compass of Ganon's Tower +%ReceiptProps($83, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 83 - Compass of Turtle Rock +%ReceiptProps($84, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 84 - Compass of Thieves' Town +%ReceiptProps($85, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 85 - Compass of Tower of Hera +%ReceiptProps($86, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 86 - Compass of Ice Palace +%ReceiptProps($87, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 87 - Compass of Skull Woods +%ReceiptProps($88, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 88 - Compass of Misery Mire +%ReceiptProps($89, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 89 - Compass of Dark Palace +%ReceiptProps($8A, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 8A - Compass of Swamp Palace +%ReceiptProps($8B, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 8B - Compass of Agahnim's Tower +%ReceiptProps($8C, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 8C - Compass of Desert Palace +%ReceiptProps($8D, -4, 0, $16, $F36A, $FF, free_compass, skip) ; 8D - Compass of Eastern Palace +%ReceiptProps($8E, -4, 0, $16, $F36A, $FF, hc_compass, skip) ; 8E - Compass of Hyrule Castle +%ReceiptProps($8F, -4, 0, $16, $F36A, $FF, hc_compass, skip) ; 8F - Compass of Sewers +%ReceiptProps($90, -4, 0, $22, $F36A, $FF, skip, skip) ; 90 - Skull key +%ReceiptProps($91, -4, 0, $22, $F36A, $FF, skip, skip) ; 91 - Reserved +%ReceiptProps($92, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 92 - Big key of Ganon's Tower +%ReceiptProps($93, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 93 - Big key of Turtle Rock +%ReceiptProps($94, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 94 - Big key of Thieves' Town +%ReceiptProps($95, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 95 - Big key of Tower of Hera +%ReceiptProps($96, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 96 - Big key of Ice Palace +%ReceiptProps($97, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 97 - Big key of Skull Woods +%ReceiptProps($98, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 98 - Big key of Misery Mire +%ReceiptProps($99, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 99 - Big key of Dark Palace +%ReceiptProps($9A, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 9A - Big key of Swamp Palace +%ReceiptProps($9B, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 9B - Big key of Agahnim's Tower +%ReceiptProps($9C, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 9C - Big key of Desert Palace +%ReceiptProps($9D, -4, 0, $22, $F36A, $FF, free_bigkey, skip) ; 9D - Big key of Eastern Palace +%ReceiptProps($9E, -4, 0, $22, $F36A, $FF, hc_bigkey, skip) ; 9E - Big key of Hyrule Castle +%ReceiptProps($9F, -4, 0, $22, $F36A, $FF, hc_bigkey, skip) ; 9F - Big key of Sewers +%ReceiptProps($A0, -4, 4, $0F, $F36A, $FF, hc_smallkey, skip) ; A0 - Small key of Sewers +%ReceiptProps($A1, -4, 4, $0F, $F36A, $FF, hc_smallkey, skip) ; A1 - Small key of Hyrule Castle +%ReceiptProps($A2, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A2 - Small key of Eastern Palace +%ReceiptProps($A3, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A3 - Small key of Desert Palace +%ReceiptProps($A4, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A4 - Small key of Agahnim's Tower +%ReceiptProps($A5, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A5 - Small key of Swamp Palace +%ReceiptProps($A6, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A6 - Small key of Dark Palace +%ReceiptProps($A7, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A7 - Small key of Misery Mire +%ReceiptProps($A8, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A8 - Small key of Skull Woods +%ReceiptProps($A9, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; A9 - Small key of Ice Palace +%ReceiptProps($AA, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; AA - Small key of Tower of Hera +%ReceiptProps($AB, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; AB - Small key of Thieves' Town +%ReceiptProps($AC, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; AC - Small key of Turtle Rock +%ReceiptProps($AD, -4, 4, $0F, $F36A, $FF, free_smallkey, skip) ; AD - Small key of Ganon's Tower +%ReceiptProps($AE, -4, 4, $0F, $F36A, $FF, skip, skip) ; AE - Reserved +%ReceiptProps($AF, -4, 4, $0F, $F36A, $FF, generic_smallkey, skip) ; AF - Generic small key +%ReceiptProps($B0, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B0 - Crystal 6 +%ReceiptProps($B1, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B1 - Crystal 1 +%ReceiptProps($B2, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B2 - Crystal 5 +%ReceiptProps($B3, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B3 - Crystal 7 +%ReceiptProps($B4, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B4 - Crystal 2 +%ReceiptProps($B5, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B5 - Crystal 4 +%ReceiptProps($B6, -4, 0, $28, $F36A, $FF, free_crystal, skip) ; B6 - Crystal 3 +%ReceiptProps($B7, -4, 0, $49, $F36A, $FF, skip, skip) ; B7 - Reserved +%ReceiptProps($B8, -4, 0, $49, $F36A, $FF, skip, skip) ; B8 - +%ReceiptProps($B9, -4, 0, $49, $F36A, $FF, skip, skip) ; B9 - +%ReceiptProps($BA, -4, 0, $49, $F36A, $FF, skip, skip) ; BA - +%ReceiptProps($BB, -4, 0, $49, $F36A, $FF, skip, skip) ; BB - +%ReceiptProps($BC, -4, 0, $49, $F36A, $FF, skip, skip) ; BC - +%ReceiptProps($BD, -4, 0, $49, $F36A, $FF, skip, skip) ; BD - +%ReceiptProps($BE, -4, 0, $49, $F36A, $FF, skip, skip) ; BE - +%ReceiptProps($BF, -4, 0, $49, $F36A, $FF, skip, skip) ; BF - +%ReceiptProps($C0, -4, 0, $13, $F36A, $FF, prog_weapon, skip) ; C0 - Progressive Bombs +%ReceiptProps($C1, -4, 4, $07, $F36A, $FF, prog_weapon, skip) ; C1 - Progressive Cane +%ReceiptProps($C2, -4, 0, $27, $F36A, $FF, prog_weapon, skip) ; C2 - Progressive Bug Net +%ReceiptProps($C3, -4, 0, $49, $F36A, $FF, skip, skip) ; C3 - +%ReceiptProps($C4, -4, 0, $49, $F36A, $FF, skip, skip) ; C4 - +%ReceiptProps($C5, -4, 0, $49, $F36A, $FF, skip, skip) ; C5 - +%ReceiptProps($C6, -4, 0, $49, $F36A, $FF, skip, skip) ; C6 - +%ReceiptProps($C7, -4, 0, $49, $F36A, $FF, skip, skip) ; C7 - +%ReceiptProps($C8, -4, 0, $49, $F36A, $FF, skip, skip) ; C8 - +%ReceiptProps($C9, -4, 0, $49, $F36A, $FF, skip, skip) ; C9 - +%ReceiptProps($CA, -4, 0, $49, $F36A, $FF, skip, skip) ; CA - +%ReceiptProps($CB, -4, 0, $49, $F36A, $FF, skip, skip) ; CB - +%ReceiptProps($CC, -4, 0, $49, $F36A, $FF, skip, skip) ; CC - +%ReceiptProps($CD, -4, 0, $49, $F36A, $FF, skip, skip) ; CD - +%ReceiptProps($CE, -4, 0, $49, $F36A, $FF, skip, skip) ; CE - +%ReceiptProps($CF, -4, 0, $49, $F36A, $FF, skip, skip) ; CF - +%ReceiptProps($D0, -4, 0, $49, $F36A, $FF, skip, skip) ; D0 - +%ReceiptProps($D1, -4, 0, $49, $F36A, $FF, skip, skip) ; D1 - +%ReceiptProps($D2, -4, 0, $49, $F36A, $FF, skip, skip) ; D2 - +%ReceiptProps($D3, -4, 0, $49, $F36A, $FF, skip, skip) ; D3 - +%ReceiptProps($D4, -4, 0, $49, $F36A, $FF, skip, skip) ; D4 - +%ReceiptProps($D5, -4, 0, $49, $F36A, $FF, skip, skip) ; D5 - +%ReceiptProps($D6, -4, 0, $49, $F36A, $FF, skip, skip) ; D6 - +%ReceiptProps($D7, -4, 0, $49, $F36A, $FF, skip, skip) ; D7 - +%ReceiptProps($D8, -4, 0, $49, $F36A, $FF, skip, skip) ; D8 - +%ReceiptProps($D9, -4, 0, $49, $F36A, $FF, skip, skip) ; D9 - +%ReceiptProps($DA, -4, 0, $49, $F36A, $FF, skip, skip) ; DA - +%ReceiptProps($DB, -4, 0, $49, $F36A, $FF, skip, skip) ; DB - +%ReceiptProps($DC, -4, 0, $49, $F36A, $FF, skip, skip) ; DC - +%ReceiptProps($DD, -4, 0, $49, $F36A, $FF, skip, skip) ; DD - +%ReceiptProps($DE, -4, 0, $49, $F36A, $FF, skip, skip) ; DE - +%ReceiptProps($DF, -4, 0, $49, $F36A, $FF, skip, skip) ; DF - +%ReceiptProps($E0, -4, 0, $49, $F36A, $FF, skip, skip) ; E0 - +%ReceiptProps($E1, -4, 0, $49, $F36A, $FF, skip, skip) ; E1 - +%ReceiptProps($E2, -4, 0, $49, $F36A, $FF, skip, skip) ; E2 - +%ReceiptProps($E3, -4, 0, $49, $F36A, $FF, skip, skip) ; E3 - +%ReceiptProps($E4, -4, 0, $49, $F36A, $FF, skip, skip) ; E4 - +%ReceiptProps($E5, -4, 0, $49, $F36A, $FF, skip, skip) ; E5 - +%ReceiptProps($E6, -4, 0, $49, $F36A, $FF, skip, skip) ; E6 - +%ReceiptProps($E7, -4, 0, $49, $F36A, $FF, skip, skip) ; E7 - +%ReceiptProps($E8, -4, 0, $49, $F36A, $FF, skip, skip) ; E8 - +%ReceiptProps($E9, -4, 0, $49, $F36A, $FF, skip, skip) ; E9 - +%ReceiptProps($EA, -4, 0, $49, $F36A, $FF, skip, skip) ; EA - +%ReceiptProps($EB, -4, 0, $49, $F36A, $FF, skip, skip) ; EB - +%ReceiptProps($EC, -4, 0, $49, $F36A, $FF, skip, skip) ; EC - +%ReceiptProps($ED, -4, 0, $49, $F36A, $FF, skip, skip) ; ED - +%ReceiptProps($EE, -4, 0, $49, $F36A, $FF, skip, skip) ; EE - +%ReceiptProps($EF, -4, 0, $49, $F36A, $FF, skip, skip) ; EF - +%ReceiptProps($F0, -4, 0, $49, $F36A, $FF, skip, skip) ; F0 - +%ReceiptProps($F1, -4, 0, $49, $F36A, $FF, skip, skip) ; F1 - +%ReceiptProps($F2, -4, 0, $49, $F36A, $FF, skip, skip) ; F2 - +%ReceiptProps($F3, -4, 0, $49, $F36A, $FF, skip, skip) ; F3 - +%ReceiptProps($F4, -4, 0, $49, $F36A, $FF, skip, skip) ; F4 - +%ReceiptProps($F5, -4, 0, $49, $F36A, $FF, skip, skip) ; F5 - +%ReceiptProps($F6, -4, 0, $49, $F36A, $FF, skip, skip) ; F6 - +%ReceiptProps($F7, -4, 0, $49, $F36A, $FF, skip, skip) ; F7 - +%ReceiptProps($F8, -4, 0, $49, $F36A, $FF, skip, skip) ; F8 - +%ReceiptProps($F9, -4, 0, $49, $F36A, $FF, skip, skip) ; F9 - +%ReceiptProps($FA, -4, 0, $49, $F36A, $FF, skip, skip) ; FA - +%ReceiptProps($FB, -4, 0, $49, $F36A, $FF, skip, skip) ; FB - +%ReceiptProps($FC, -4, 0, $49, $F36A, $FF, skip, skip) ; FC - +%ReceiptProps($FD, -4, 0, $49, $F36A, $FF, skip, skip) ; FD - +%ReceiptProps($FE, -4, 0, $49, $F36A, $FF, skip, skip) ; FE - Server request (async) +%ReceiptProps($FF, -4, 0, $49, $F36A, $FF, skip, skip) ; FF - + +;------------------------------------------------------------------------------ +; Palettes: l - - - - c c c +; c = Color Index | l = Load palette data from ROM +SpriteProperties: + .chest_width : fillbyte $00 : fill 256 + .standing_width : fillbyte $00 : fill 256 + .chest_palette : fillbyte $00 : fill 256 + .standing_palette : fillbyte $00 : fill 256 + .palette_addr : fillword $0000 : fill 256*2 ; bank $9B + +macro SpriteProps(id, chest_width, standing_width, chest_pal, standing_pal, addr) + pushpc + + org SpriteProperties_chest_width+ : db + org SpriteProperties_standing_width+ : db + org SpriteProperties_chest_palette+ : db + org SpriteProperties_standing_palette+ : db + org SpriteProperties_palette_addr++ : dw + + pullpc +endmacro + +%SpriteProps($00, 0, 2, $05, $02, PalettesVanilla_blue_ice+$0E) ; 00 - Fighter sword & Shield +%SpriteProps($01, 0, 2, $05, $05, PalettesCustom_master_sword) ; 01 - Master sword +%SpriteProps($02, 0, 2, $05, $01, PalettesCustom_tempered_sword) ; 02 - Tempered sword +%SpriteProps($03, 0, 2, $05, $04, PalettesCustom_golden_sword) ; 03 - Golden sword +%SpriteProps($04, 0, 0, $05, $80, PalettesCustom_fighter_shield) ; 04 - Fighter shield +%SpriteProps($05, 2, 2, $05, $80, PalettesCustom_red_shield) ; 05 - Fire shield +%SpriteProps($06, 2, 2, $05, $80, PalettesCustom_mirror_shield) ; 06 - Mirror shield +%SpriteProps($07, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 07 - Fire rod +%SpriteProps($08, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 08 - Ice rod +%SpriteProps($09, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 09 - Hammer +%SpriteProps($0A, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 0A - Hookshot +%SpriteProps($0B, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 0B - Bow +%SpriteProps($0C, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 0C - Blue Boomerang +%SpriteProps($0D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 0D - Powder +%SpriteProps($0E, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 0E - Bottle refill (bee) +%SpriteProps($0F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 0F - Bombos +%SpriteProps($10, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 10 - Ether +%SpriteProps($11, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 11 - Quake +%SpriteProps($12, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 12 - Lamp +%SpriteProps($13, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 13 - Shovel +%SpriteProps($14, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 14 - Flute +%SpriteProps($15, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 15 - Somaria +%SpriteProps($16, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 16 - Bottle +%SpriteProps($17, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 17 - Heart piece +%SpriteProps($18, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 18 - Byrna +%SpriteProps($19, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 19 - Cape +%SpriteProps($1A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 1A - Mirror +%SpriteProps($1B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 1B - Glove +%SpriteProps($1C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 1C - Mitts +%SpriteProps($1D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 1D - Book +%SpriteProps($1E, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 1E - Flippers +%SpriteProps($1F, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 1F - Pearl +%SpriteProps($20, 2, 2, $86, $86, PalettesCustom_crystal) ; 20 - Crystal +%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($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 +%SpriteProps($28, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 28 - 3 bombs +%SpriteProps($29, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 29 - Mushroom +%SpriteProps($2A, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 2A - Red boomerang +%SpriteProps($2B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 2B - Full bottle (red) +%SpriteProps($2C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 2C - Full bottle (green) +%SpriteProps($2D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 2D - Full bottle (blue) +%SpriteProps($2E, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 2E - Potion refill (red) +%SpriteProps($2F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 2F - Potion refill (green) +%SpriteProps($30, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 30 - Potion refill (blue) +%SpriteProps($31, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 31 - 10 bombs +%SpriteProps($32, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 32 - Big key +%SpriteProps($33, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 33 - Map +%SpriteProps($34, 0, 0, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 34 - 1 rupee +%SpriteProps($35, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 35 - 5 rupees +%SpriteProps($36, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 36 - 20 rupees +%SpriteProps($37, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 37 - Green pendant +%SpriteProps($38, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 38 - Red pendant +%SpriteProps($39, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 39 - Blue pendant +%SpriteProps($3A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 3A - Bow And Arrows +%SpriteProps($3B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 3B - Silver Bow +%SpriteProps($3C, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 3C - Full bottle (bee) +%SpriteProps($3D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 3D - Full bottle (fairy) +%SpriteProps($3E, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 3E - Boss heart +%SpriteProps($3F, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 3F - Sanc heart +%SpriteProps($40, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 40 - 100 rupees +%SpriteProps($41, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 41 - 50 rupees +%SpriteProps($42, 0, 0, $01, $01, PalettesVanilla_red_melon+$0E) ; 42 - Heart +%SpriteProps($43, 0, 0, $02, $02, PalettesVanilla_blue_ice+$0E) ; 43 - Arrow +%SpriteProps($44, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 44 - 10 arrows +%SpriteProps($45, 0, 0, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 45 - Small magic +%SpriteProps($46, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 46 - 300 rupees +%SpriteProps($47, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 47 - 20 rupees green +%SpriteProps($48, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 48 - Full bottle (good bee) +%SpriteProps($49, 0, 2, $05, $02, PalettesCustom_fighter_shield) ; 49 - Tossed fighter sword +%SpriteProps($4A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 4A - Active Flute +%SpriteProps($4B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 4B - Boots +%SpriteProps($4C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4C - Bomb capacity (50) +%SpriteProps($4D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4D - Arrow capacity (70) +%SpriteProps($4E, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4E - 1/2 magic +%SpriteProps($4F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 4F - 1/4 magic +%SpriteProps($50, 0, 2, $05, $02, PalettesCustom_master_sword) ; 50 - Safe master sword +%SpriteProps($51, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 51 - Bomb capacity (+5) +%SpriteProps($52, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 52 - Bomb capacity (+10) +%SpriteProps($53, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 53 - Arrow capacity (+5) +%SpriteProps($54, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 54 - Arrow capacity (+10) +%SpriteProps($55, 2, 2, $04, $04, $0000) ; 55 - Programmable item 1 +%SpriteProps($56, 2, 2, $04, $04, $0000) ; 56 - Programmable item 2 +%SpriteProps($57, 2, 2, $04, $04, $0000) ; 57 - Programmable item 3 +%SpriteProps($58, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 58 - Upgrade-only Silver Arrows +%SpriteProps($59, 0, 0, $03, $03, PalettesCustom_off_black) ; 59 - Rupoor +%SpriteProps($5A, 2, 2, $01, $01, $0000) ; 5A - Nothing +%SpriteProps($5B, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; 5B - Red clock +%SpriteProps($5C, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 5C - Blue clock +%SpriteProps($5D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 5D - Green clock +%SpriteProps($5E, 2, 2, $FF, $FF, $0000) ; 5E - Progressive sword +%SpriteProps($5F, 2, 2, $FF, $FF, $0000) ; 5F - Progressive shield +%SpriteProps($60, 2, 2, $FF, $FF, $0000) ; 60 - Progressive armor +%SpriteProps($61, 2, 2, $FF, $FF, $0000) ; 61 - Progressive glove +%SpriteProps($62, 2, 2, $FF, $FF, $0000) ; 62 - RNG pool item (single) +%SpriteProps($63, 2, 2, $FF, $FF, $0000) ; 63 - RNG pool item (multi) +%SpriteProps($64, 2, 2, $FF, $FF, $0000) ; 64 - Progressive bow +%SpriteProps($65, 2, 2, $FF, $FF, $0000) ; 65 - Progressive bow +%SpriteProps($66, 2, 2, $00, $00, $0000) ; 66 - +%SpriteProps($67, 2, 2, $00, $00, $0000) ; 67 - +%SpriteProps($68, 2, 2, $00, $00, $0000) ; 68 - +%SpriteProps($69, 2, 2, $00, $00, $0000) ; 69 - +%SpriteProps($6A, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 6A - Triforce +%SpriteProps($6B, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 6B - Power star +%SpriteProps($6C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 6C - Triforce Piece +%SpriteProps($6D, 2, 2, $FF, $FF, $0000) ; 6D - Server request item +%SpriteProps($6E, 2, 2, $FF, $FF, $0000) ; 6E - Server request item (dungeon drop) +%SpriteProps($6F, 2, 2, $FF, $FF, $0000) ; 6F - +%SpriteProps($70, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 70 - Map of Light World +%SpriteProps($71, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 71 - Map of Dark World +%SpriteProps($72, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 72 - Map of Ganon's Tower +%SpriteProps($73, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 73 - Map of Turtle Rock +%SpriteProps($74, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 74 - Map of Thieves' Town +%SpriteProps($75, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 75 - Map of Tower of Hera +%SpriteProps($76, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 76 - Map of Ice Palace +%SpriteProps($77, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 77 - Map of Skull Woods +%SpriteProps($78, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 78 - Map of Misery Mire +%SpriteProps($79, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 79 - Map of Dark Palace +%SpriteProps($7A, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 7A - Map of Swamp Palace +%SpriteProps($7B, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 7B - Map of Agahnim's Tower +%SpriteProps($7C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 7C - Map of Desert Palace +%SpriteProps($7D, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 7D - Map of Eastern Palace +%SpriteProps($7E, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 7E - Map of Hyrule Castle +%SpriteProps($7F, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 7F - Map of Sewers +%SpriteProps($80, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 80 - Compass of Light World +%SpriteProps($81, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 81 - Compass of Dark World +%SpriteProps($82, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 82 - Compass of Ganon's Tower +%SpriteProps($83, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 83 - Compass of Turtle Rock +%SpriteProps($84, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 84 - Compass of Thieves' Town +%SpriteProps($85, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 85 - Compass of Tower of Hera +%SpriteProps($86, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 86 - Compass of Ice Palace +%SpriteProps($87, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 87 - Compass of Skull Woods +%SpriteProps($88, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 88 - Compass of Misery Mire +%SpriteProps($89, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 89 - Compass of Dark Palace +%SpriteProps($8A, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 8A - Compass of Swamp Palace +%SpriteProps($8B, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 8B - Compass of Agahnim's Tower +%SpriteProps($8C, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 8C - Compass of Desert Palace +%SpriteProps($8D, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 8D - Compass of Eastern Palace +%SpriteProps($8E, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 8E - Compass of Hyrule Castle +%SpriteProps($8F, 2, 2, $02, $02, PalettesVanilla_blue_ice+$0E) ; 8F - Compass of Sewers +%SpriteProps($90, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 90 - Skull key +%SpriteProps($91, 2, 2, $04, $04, $0000) ; 91 - Reserved +%SpriteProps($92, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 92 - Big key of Ganon's Tower +%SpriteProps($93, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 93 - Big key of Turtle Rock +%SpriteProps($94, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 94 - Big key of Thieves' Town +%SpriteProps($95, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 95 - Big key of Tower of Hera +%SpriteProps($96, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 96 - Big key of Ice Palace +%SpriteProps($97, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 97 - Big key of Skull Woods +%SpriteProps($98, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 98 - Big key of Misery Mire +%SpriteProps($99, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 99 - Big key of Dark Palace +%SpriteProps($9A, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 9A - Big key of Swamp Palace +%SpriteProps($9B, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 9B - Big key of Agahnim's Tower +%SpriteProps($9C, 2, 2, $04, $04, PalettesVanilla_green_blue_guard+$0E) ; 9C - Big key of Desert Palace +%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($AE, 2, 2, $02, $02, $0000) ; AE - Reserved +%SpriteProps($AF, 0, 0, $04, $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 +%SpriteProps($B3, 2, 2, $80, $80, PalettesCustom_crystal) ; B3 - Crystal 7 +%SpriteProps($B4, 2, 2, $80, $80, PalettesCustom_crystal) ; B4 - Crystal 2 +%SpriteProps($B5, 2, 2, $80, $80, PalettesCustom_crystal) ; B5 - Crystal 4 +%SpriteProps($B6, 2, 2, $80, $80, PalettesCustom_crystal) ; B6 - Crystal 3 +%SpriteProps($B7, 2, 2, $80, $80, $0000) ; B7 - Reserved +%SpriteProps($B8, 2, 2, $04, $04, $0000) ; B8 - +%SpriteProps($B9, 2, 2, $04, $04, $0000) ; B9 - +%SpriteProps($BA, 2, 2, $04, $04, $0000) ; BA - +%SpriteProps($BB, 2, 2, $04, $04, $0000) ; BB - +%SpriteProps($BC, 2, 2, $04, $04, $0000) ; BC - +%SpriteProps($BD, 2, 2, $04, $04, $0000) ; BD - +%SpriteProps($BE, 2, 2, $04, $04, $0000) ; BE - +%SpriteProps($BF, 2, 2, $04, $04, $0000) ; BF - +%SpriteProps($C0, 2, 2, $FF, $FF, PalettesVanilla_blue_ice+$0E) ; C0 - Progressive Bombs +%SpriteProps($C1, 0, 0, $05, $05, PalettesCustom_red_shield) ; C1 - Progressive Cane +%SpriteProps($C2, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; C2 - Progressive Bug Net +%SpriteProps($C3, 2, 2, $04, $04, $0000) ; C3 - +%SpriteProps($C4, 2, 2, $04, $04, $0000) ; C4 - +%SpriteProps($C5, 2, 2, $04, $04, $0000) ; C5 - +%SpriteProps($C6, 2, 2, $04, $04, $0000) ; C6 - +%SpriteProps($C7, 2, 2, $04, $04, $0000) ; C7 - +%SpriteProps($C8, 2, 2, $04, $04, $0000) ; C8 - +%SpriteProps($C9, 2, 2, $04, $04, $0000) ; C9 - +%SpriteProps($CA, 2, 2, $04, $04, $0000) ; CA - +%SpriteProps($CB, 2, 2, $04, $04, $0000) ; CB - +%SpriteProps($CC, 2, 2, $04, $04, $0000) ; CC - +%SpriteProps($CD, 2, 2, $04, $04, $0000) ; CD - +%SpriteProps($CE, 2, 2, $04, $04, $0000) ; CE - +%SpriteProps($CF, 2, 2, $04, $04, $0000) ; CF - +%SpriteProps($D0, 2, 2, $04, $04, $0000) ; D0 - +%SpriteProps($D1, 2, 2, $04, $04, $0000) ; D1 - +%SpriteProps($D2, 2, 2, $04, $04, $0000) ; D2 - +%SpriteProps($D3, 2, 2, $04, $04, $0000) ; D3 - +%SpriteProps($D4, 2, 2, $04, $04, $0000) ; D4 - +%SpriteProps($D5, 2, 2, $04, $04, $0000) ; D5 - +%SpriteProps($D6, 2, 2, $04, $04, $0000) ; D6 - +%SpriteProps($D7, 2, 2, $04, $04, $0000) ; D7 - +%SpriteProps($D8, 2, 2, $04, $04, $0000) ; D8 - +%SpriteProps($D9, 2, 2, $04, $04, $0000) ; D9 - +%SpriteProps($DA, 2, 2, $04, $04, $0000) ; DA - +%SpriteProps($DB, 2, 2, $04, $04, $0000) ; DB - +%SpriteProps($DC, 2, 2, $04, $04, $0000) ; DC - +%SpriteProps($DD, 2, 2, $04, $04, $0000) ; DD - +%SpriteProps($DE, 2, 2, $04, $04, $0000) ; DE - +%SpriteProps($DF, 2, 2, $04, $04, $0000) ; DF - +%SpriteProps($E0, 2, 2, $04, $04, $0000) ; E0 - +%SpriteProps($E1, 2, 2, $04, $04, $0000) ; E1 - +%SpriteProps($E2, 2, 2, $04, $04, $0000) ; E2 - +%SpriteProps($E3, 2, 2, $04, $04, $0000) ; E3 - +%SpriteProps($E4, 2, 2, $04, $04, $0000) ; E4 - +%SpriteProps($E5, 2, 2, $04, $04, $0000) ; E5 - +%SpriteProps($E6, 2, 2, $04, $04, $0000) ; E6 - +%SpriteProps($E7, 2, 2, $04, $04, $0000) ; E7 - +%SpriteProps($E8, 2, 2, $04, $04, $0000) ; E8 - +%SpriteProps($E9, 2, 2, $04, $04, $0000) ; E9 - +%SpriteProps($EA, 2, 2, $04, $04, $0000) ; EA - +%SpriteProps($EB, 2, 2, $04, $04, $0000) ; EB - +%SpriteProps($EC, 2, 2, $04, $04, $0000) ; EC - +%SpriteProps($ED, 2, 2, $04, $04, $0000) ; ED - +%SpriteProps($EE, 2, 2, $04, $04, $0000) ; EE - +%SpriteProps($EF, 2, 2, $04, $04, $0000) ; EF - +%SpriteProps($F0, 2, 2, $04, $04, $0000) ; F0 - +%SpriteProps($F1, 2, 2, $04, $04, $0000) ; F1 - +%SpriteProps($F2, 2, 2, $04, $04, $0000) ; F2 - +%SpriteProps($F3, 2, 2, $04, $04, $0000) ; F3 - +%SpriteProps($F4, 2, 2, $04, $04, $0000) ; F4 - +%SpriteProps($F5, 2, 2, $04, $04, $0000) ; F5 - +%SpriteProps($F6, 2, 2, $04, $04, $0000) ; F6 - +%SpriteProps($F7, 2, 2, $04, $04, $0000) ; F7 - +%SpriteProps($F8, 2, 2, $04, $04, $0000) ; F8 - +%SpriteProps($F9, 2, 2, $04, $04, $0000) ; F9 - +%SpriteProps($FA, 2, 2, $04, $04, $0000) ; FA - +%SpriteProps($FB, 2, 2, $04, $04, $0000) ; FB - +%SpriteProps($FC, 2, 2, $04, $04, $0000) ; FC - +%SpriteProps($FD, 2, 2, $04, $04, $0000) ; FD - +%SpriteProps($FE, 2, 2, $FF, $FF, $0000) ; FE - Server request (async) +%SpriteProps($FF, 2, 2, $04, $04, $0000) ; FF - + +;------------------------------------------------------------------------------ +; 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 + .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 + 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, $15, SwordTime, $0000) ; C0 - Progressive Bombs +%InventoryItem($C1, $85, SwordTime, $0000) ; C1 - Progressive Cane +%InventoryItem($C2, $85, SwordTime, $0000) ; C2 - Progressive Bug Net +%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 - + +ItemReceiptGraphicsOffsets: + dw $0860 ; 00 - Fighter Sword and Shield + dw BigDecompressionBuffer+$11C0 ; 01 - Master Sword + dw BigDecompressionBuffer+$11C0 ; 01 - Tempered Sword + dw BigDecompressionBuffer+$11C0 ; 03 - Butter Sword + dw BigDecompressionBuffer+$09E0 ; 04 - Fighter Shield + dw BigDecompressionBuffer+$1940 ; 05 - Fire Shield + dw BigDecompressionBuffer+$0C80 ; 06 - Mirror Shield + dw BigDecompressionBuffer+$1C80 ; 07 - Fire Rod + dw BigDecompressionBuffer+$1C80 ; 08 - Ice Rod + dw BigDecompressionBuffer+$1CA0 ; 09 - Hammer + dw BigDecompressionBuffer+$1C60 ; 0A - Hookshot + dw BigDecompressionBuffer+$1C00 ; 0B - Bow + dw BigDecompressionBuffer+$1DE0 ; 0C - Boomerang + dw BigDecompressionBuffer+$1CC0 ; 0D - Powder + dw BigDecompressionBuffer+$09A0 ; 0E - Bottle Refill (bee) + dw BigDecompressionBuffer+$1440 ; 0F - Bombos + dw BigDecompressionBuffer+$1400 ; 10 - Ether + dw BigDecompressionBuffer+$1480 ; 11 - Quake + dw BigDecompressionBuffer+$10C0 ; 12 - Lamp + dw BigDecompressionBuffer+$11E0 ; 13 - Shovel + dw BigDecompressionBuffer+$0C40 ; 14 - Flute + dw BigDecompressionBuffer+$1C40 ; 15 - Somaria + dw BigDecompressionBuffer+$14C0 ; 16 - Bottle + dw BigDecompressionBuffer+$0C00 ; 17 - Heartpiece + dw BigDecompressionBuffer+$1C40 ; 18 - Byrna + dw BigDecompressionBuffer+$1100 ; 19 - Cape + dw BigDecompressionBuffer+$1040 ; 1A - Mirror + dw BigDecompressionBuffer+$1D40 ; 1B - Glove + dw BigDecompressionBuffer+$1D40 ; 1C - Mitts + dw BigDecompressionBuffer+$1D80 ; 1D - Book + dw BigDecompressionBuffer+$1000 ; 1E - Flippers + dw BigDecompressionBuffer+$1180 ; 1F - Pearl + dw BigDecompressionBuffer+$08A0 ; 20 - Crystal + dw BigDecompressionBuffer+$0860 ; 21 - Net + dw BigDecompressionBuffer+$1900 ; 22 - Blue Mail + dw BigDecompressionBuffer+$1900 ; 23 - Red Mail + dw BigDecompressionBuffer+$1DC0 ; 24 - Small Key + dw BigDecompressionBuffer+$1140 ; 25 - Compbutt + dw BigDecompressionBuffer+$18C0 ; 26 - Heart Container from 4/4 + dw BigDecompressionBuffer+$1080 ; 27 - Bomb + dw BigDecompressionBuffer+$1840 ; 28 - 3 bombs + dw BigDecompressionBuffer+$1540 ; 29 - Mushroom + dw BigDecompressionBuffer+$1DE0 ; 2A - Red boomerang + dw BigDecompressionBuffer+$1500 ; 2B - Full bottle (red) + dw BigDecompressionBuffer+$1500 ; 2C - Full bottle (green) + dw BigDecompressionBuffer+$1500 ; 2D - Full bottle (blue) + dw BigDecompressionBuffer+$1500 ; 2E - Potion refill (red) + dw BigDecompressionBuffer+$1500 ; 2F - Potion refill (green) + dw BigDecompressionBuffer+$1500 ; 30 - Potion refill (blue) + dw BigDecompressionBuffer+$1D00 ; 31 - 10 bombs + dw BigDecompressionBuffer+$15C0 ; 32 - Big key + dw BigDecompressionBuffer+$1580 ; 33 - Map + dw BigDecompressionBuffer+$0800 ; 34 - 1 rupee + dw BigDecompressionBuffer+$0800 ; 35 - 5 rupees + dw BigDecompressionBuffer+$0800 ; 36 - 20 rupees + dw $0820 ; 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 - Silver bow + 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+$0D00 ; 43 - Arrow + dw BigDecompressionBuffer+$1880 ; 44 - 10 arrows + dw BigDecompressionBuffer+$0CE0 ; 45 - Small magic + dw BigDecompressionBuffer+$0DA0 ; 46 - 300 rupees + dw BigDecompressionBuffer+$0000 ; 47 - 20 rupees green + dw BigDecompressionBuffer+$09A0 ; 48 - Full bottle (good bee) + dw BigDecompressionBuffer+$1C20 ; 49 - Tossed fighter sword + dw BigDecompressionBuffer+$09A0 ; 4A - Bottle refill (good bee) + dw BigDecompressionBuffer+$0040 ; 4B - Boots + + ; Rando items + dw $04A0 ; 4C - Bomb capacity (50) + dw $05A0 ; 4D - Arrow capacity (70) + dw $01A0 ; 4E - 1/2 magic + dw $01E0 ; 4F - 1/4 magic + dw $00E0 ; 50 - Safe master sword + dw $0420 ; 51 - Bomb capacity (+5) + dw $0460 ; 52 - Bomb capacity (+10) + dw $0520 ; 53 - Arrow capacity (+5) + dw $0560 ; 54 - Arrow capacity (+10) + dw $0 ; 55 - Programmable item 1 + dw $0 ; 56 - Programmable item 2 + dw $0 ; 57 - Programmable item 3 + dw $05E0 ; 58 - Upgrade-only silver arrows + dw $0 ; 59 - Rupoor + dw $0020 ; 5A - Nothing + dw $0DE0 ; 5B - Red clock + dw $0DE0 ; 5C - Blue clock + dw $0DE0 ; 5D - Green clock + dw $0 ; 5E - Progressive sword + dw $0 ; 5F - Progressive shield + dw $0 ; 60 - Progressive armor + dw $0 ; 61 - Progressive glove + dw $0 ; 62 - RNG pool item (single) + dw $0 ; 63 - RNG pool item (multi) + dw $0 ; 64 - Progressive bow + dw $0 ; 65 - Progressive bow + dw $0 ; 66 - + dw $0 ; 67 - + dw $0 ; 68 - + dw $0 ; 69 - + dw $0060 ; 6A - Triforce + dw $11E0 ; 6B - Power star + dw $0060 ; 6C - Triforce Piece + 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 BigDecompressionBuffer+$08A0 ; B0 - Crystal 6 + dw BigDecompressionBuffer+$08A0 ; B1 - Crystal 1 + dw BigDecompressionBuffer+$08A0 ; B2 - Crystal 5 + dw BigDecompressionBuffer+$08A0 ; B3 - Crystal 7 + dw BigDecompressionBuffer+$08A0 ; B4 - Crystal 2 + dw BigDecompressionBuffer+$08A0 ; B5 - Crystal 4 + dw BigDecompressionBuffer+$08A0 ; B6 - Crystal 3 + dw $0 ; B7 - Reserved + 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 BigDecompressionBuffer+$1080 ; C0 - Progressive Bombs + dw BigDecompressionBuffer+$1C40 ; C1 - Progressive Cane + dw BigDecompressionBuffer+$0860 ; C2 - Progressive Bug Net + 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 - + +;=================================================================================================== +; The table below is for "standing" items, either in heart piece locations, boss heart locations +; or shops etc. Generally we do not and shouldn't use different gfx for this purpose, so this is +; mostly a copy of the previous table. However some items, such as swords, use a separate sprite +; for receipt and non-receipt drawing. +;=================================================================================================== +StandingItemGraphicsOffsets: + dw $0860 ; 00 - Fighter Sword and Shield + dw $00E0 ; 01 - Master Sword + dw $0120 ; 02 - Tempered Sword + dw $0160 ; 03 - Butter Sword + dw BigDecompressionBuffer+$09E0 ; 04 - Fighter Shield + dw BigDecompressionBuffer+$1940 ; 05 - Fire Shield + dw BigDecompressionBuffer+$0C80 ; 06 - Mirror Shield + dw BigDecompressionBuffer+$1C80 ; 07 - Fire Rod + dw BigDecompressionBuffer+$1C80 ; 08 - Ice Rod + dw BigDecompressionBuffer+$1CA0 ; 09 - Hammer + dw BigDecompressionBuffer+$1C60 ; 0A - Hookshot + dw BigDecompressionBuffer+$1C00 ; 0B - Bow + dw BigDecompressionBuffer+$1DE0 ; 0C - Boomerang + dw BigDecompressionBuffer+$1CC0 ; 0D - Powder + dw BigDecompressionBuffer+$09A0 ; 0E - Bottle Refill (bee) + dw BigDecompressionBuffer+$1440 ; 0F - Bombos + dw BigDecompressionBuffer+$1400 ; 10 - Ether + dw BigDecompressionBuffer+$1480 ; 11 - Quake + dw BigDecompressionBuffer+$10C0 ; 12 - Lamp + dw BigDecompressionBuffer+$11E0 ; 13 - Shovel + dw BigDecompressionBuffer+$0C40 ; 14 - Flute + dw BigDecompressionBuffer+$1C40 ; 15 - Somaria + dw BigDecompressionBuffer+$14C0 ; 16 - Bottle + dw BigDecompressionBuffer+$0C00 ; 17 - Heartpiece + dw BigDecompressionBuffer+$1C40 ; 18 - Byrna + dw BigDecompressionBuffer+$1100 ; 19 - Cape + dw BigDecompressionBuffer+$1040 ; 1A - Mirror + dw BigDecompressionBuffer+$1D40 ; 1B - Glove + dw BigDecompressionBuffer+$1D40 ; 1C - Mitts + dw BigDecompressionBuffer+$1D80 ; 1D - Book + dw BigDecompressionBuffer+$1000 ; 1E - Flippers + dw BigDecompressionBuffer+$1180 ; 1F - Pearl + dw BigDecompressionBuffer+$08A0 ; 20 - Crystal + dw BigDecompressionBuffer+$0860 ; 21 - Net + dw BigDecompressionBuffer+$1900 ; 22 - Blue Mail + dw BigDecompressionBuffer+$1900 ; 23 - Red Mail + dw BigDecompressionBuffer+$1DC0 ; 24 - Small Key + dw BigDecompressionBuffer+$1140 ; 25 - Compbutt + dw BigDecompressionBuffer+$18C0 ; 26 - Heart Container from 4/4 + dw BigDecompressionBuffer+$1080 ; 27 - Bomb + dw BigDecompressionBuffer+$1840 ; 28 - 3 bombs + dw BigDecompressionBuffer+$1540 ; 29 - Mushroom + dw BigDecompressionBuffer+$1DE0 ; 2A - Red boomerang + dw BigDecompressionBuffer+$1500 ; 2B - Full bottle (red) + dw BigDecompressionBuffer+$1500 ; 2C - Full bottle (green) + dw BigDecompressionBuffer+$1500 ; 2D - Full bottle (blue) + dw BigDecompressionBuffer+$1500 ; 2E - Potion refill (red) + dw BigDecompressionBuffer+$1500 ; 2F - Potion refill (green) + dw BigDecompressionBuffer+$1500 ; 30 - Potion refill (blue) + dw BigDecompressionBuffer+$1D00 ; 31 - 10 bombs + dw BigDecompressionBuffer+$15C0 ; 32 - Big key + dw BigDecompressionBuffer+$1580 ; 33 - Map + dw BigDecompressionBuffer+$0800 ; 34 - 1 rupee + dw BigDecompressionBuffer+$0800 ; 35 - 5 rupees + dw BigDecompressionBuffer+$0800 ; 36 - 20 rupees + dw $0820 ; 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+$0D00 ; 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 $00A0 ; 49 - Tossed fighter sword + dw BigDecompressionBuffer+$09A0 ; 4A - Bottle refill (good bee) + dw BigDecompressionBuffer+$0040 ; 4B - Boots + + ; Rando items + dw $04A0 ; 4C - Bomb capacity (50) + dw $05A0 ; 4D - Arrow capacity (70) + dw $01A0 ; 4E - 1/2 magic + dw $01E0 ; 4F - 1/4 magic + dw $00E0 ; 50 - Safe master sword + dw $0420 ; 51 - Bomb capacity (+5) + dw $0460 ; 52 - Bomb capacity (+10) + dw $0520 ; 53 - Arrow capacity (+5) + dw $0560 ; 54 - Arrow capacity (+10) + dw $0 ; 55 - Programmable item 1 + dw $0 ; 56 - Programmable item 2 + dw $0 ; 57 - Programmable item 3 + dw $05E0 ; 58 - Upgrade-only silver arrows + dw $0 ; 59 - Rupoor + dw $0020 ; 5A - Nothing + dw $0DE0 ; 5B - Red clock + dw $0DE0 ; 5C - Blue clock + dw $0DE0 ; 5D - Green clock + dw $0 ; 5E - Progressive sword + dw $0 ; 5F - Progressive shield + dw $0 ; 60 - Progressive armor + dw $0 ; 61 - Progressive glove + dw $0 ; 62 - RNG pool item (single) + dw $0 ; 63 - RNG pool item (multi) + dw $0 ; 64 - Progressive bow + dw $0 ; 65 - Progressive bow + dw $0 ; 66 - + dw $0 ; 67 - + dw $0 ; 68 - + dw $0 ; 69 - + dw $0060 ; 6A - Triforce + dw $11E0 ; 6B - Power star + dw $0060 ; 6C - Triforce Piece + 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 BigDecompressionBuffer+$08A0 ; B0 - Crystal 6 + dw BigDecompressionBuffer+$08A0 ; B1 - Crystal 1 + dw BigDecompressionBuffer+$08A0 ; B2 - Crystal 5 + dw BigDecompressionBuffer+$08A0 ; B3 - Crystal 7 + dw BigDecompressionBuffer+$08A0 ; B4 - Crystal 2 + dw BigDecompressionBuffer+$08A0 ; B5 - Crystal 4 + dw BigDecompressionBuffer+$08A0 ; B6 - Crystal 3 + dw $0 ; B7 - Reserved + 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 BigDecompressionBuffer+$1080 ; C0 - Progressive Bombs + dw BigDecompressionBuffer+$1C40 ; C1 - Progressive Cane + dw BigDecompressionBuffer+$0860 ; C2 - Progressive Bug Net + 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/itemdowngrade.asm b/itemdowngrade.asm index 7c53a8d..ef5c6b6 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -2,11 +2,6 @@ ; Item Downgrade Fix ;-------------------------------------------------------------------------------- ItemDowngradeFix: - JSR ItemDowngradeFixMain - JSL CountChestKeyLong -RTL - -ItemDowngradeFixMain: JSL.l AddInventory BMI .dontWrite ; thing we wrote over part 1 @@ -34,7 +29,7 @@ ItemDowngradeFixMain: .done STA.b [Scrap00] ; thing we wrote over part 2 .dontWrite -RTS +RTL .isPowerGloves .isBlueShield .isRedShield @@ -43,7 +38,7 @@ RTS .isBowAndArrows CMP.b [$00] : !BGE .done ; finished if we're upgrading LDA.b [$00] ; reload old value -RTS +RTL .isSilverArrowBow .isRedBoomerang .isMagicPowder @@ -54,10 +49,10 @@ RTS LDA.b [Scrap00] : BNE + ; don't upgrade if we already have the toggle for it PLA STA.b [Scrap00] - RTS + RTL + PLA -RTS +RTL .isSword PHA LDA.l HighestSword : STA.b Scrap04 @@ -77,5 +72,5 @@ JMP .done INC.b Scrap00 LDA.l HighestShield : STA.b [Scrap00] PLA -RTS +RTL ;================================================================================ diff --git a/itemtext.asm b/itemtext.asm index f4d32c1..ec81834 100644 --- a/itemtext.asm +++ b/itemtext.asm @@ -1,4 +1,4 @@ -org $328000 +org $B28000 ; You have found ; the map of Notice_MapOf: @@ -27,6 +27,11 @@ Notice_SmallKeyOf: 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 dw #$7F7F +; +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 + 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 @@ -111,3 +116,32 @@ Notice_Sewers: 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 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 + 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 + 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 + 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 + 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 + 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 + 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 + dw #$7F7F diff --git a/itemtext_lower.asm b/itemtext_lower.asm index ade3255..d4061f7 100644 --- a/itemtext_lower.asm +++ b/itemtext_lower.asm @@ -1,113 +1,147 @@ -org $328000 +org $B28000 ; You have found ; the map of Notice_MapOf: - db $74, $00, $C2, $00, $3E, $00, $44, $00, $FF, $00, $37, $00, $30, $00, $45, $00, $34, $00, $FF, $00, $35, $00, $3E, $00, $44, $00, $3D, $00, $33 - db $75, $00, $43, $00, $37, $00, $34, $00, $FF, $00, $3C, $00, $30, $00, $3F, $00, $FF, $00, $3E, $00, $35 + 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, $3E, $00, $44, $00, $FF, $00, $37, $00, $30, $00, $45, $00, $34, $00, $FF, $00, $35, $00, $3E, $00, $44, $00, $3D, $00, $33 - db $75, $00, $43, $00, $37, $00, $34, $00, $FF, $00, $32, $00, $3E, $00, $3C, $00, $3F, $00, $30, $00, $42, $00, $42, $00, $FF, $00, $3E, $00, $35 + 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, $37, $00, $FF, $00, $3B, $00, $3E, $00, $3E, $00, $3A, $00, $C7, $00, $FF, $00, $38, $00, $43, $00, $D8, $00, $42 - db $75, $00, $43, $00, $37, $00, $34, $00, $FF, $00, $31, $00, $38, $00, $36, $00, $FF, $00, $3A, $00, $34, $00, $48, $00, $FF, $00, $3E, $00, $35 + 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, $37, $00, $38, $00, $42, $00, $FF, $00, $38, $00, $42, $00, $FF, $00, $30 - db $75, $00, $42, $00, $3C, $00, $30, $00, $3B, $00, $3B, $00, $FF, $00, $3A, $00, $34, $00, $48, $00, $FF, $00, $43, $00, $3e + 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, $38, $00, $36, $00, $37, $00, $43, $00, $FF, $00, $C0, $00, $3E, $00, $41, $00, $3B, $00, $33 + 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, $30, $00, $41, $00, $3A, $00, $FF, $00, $C0, $00, $3E, $00, $41, $00, $3B, $00, $33 + 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, $30, $00, $3D, $00, $3E, $00, $3D, $00, $42, $00, $FF, $00, $BD, $00, $3E, $00, $46, $00, $34, $00, $41 + 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, $44, $00, $41, $00, $43, $00, $3B, $00, $34, $00, $FF, $00, $BB, $00, $3E, $00, $32, $00, $3a + 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, $37, $00, $38, $00, $34, $00, $45, $00, $34, $00, $42, $00, $FF, $00, $BD, $00, $3E, $00, $46, $00, $3d + 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, $3E, $00, $46, $00, $34, $00, $41, $00, $FF, $00, $3E, $00, $35, $00, $FF, $00, $B1, $00, $34, $00, $41, $00, $30 + 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, $32, $00, $34, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 + 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, $3A, $00, $44, $00, $3B, $00, $3B, $00, $FF, $00, $C0, $00, $3E, $00, $3E, $00, $33, $00, $42 + 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, $38, $00, $42, $00, $34, $00, $41, $00, $48, $00, $FF, $00, $B6, $00, $38, $00, $41, $00, $34 + 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, $30, $00, $41, $00, $3A, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 + 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, $46, $00, $30, $00, $3C, $00, $3F, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 + 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, $30, $00, $42, $00, $43, $00, $3B, $00, $34, $00, $FF, $00, $BD, $00, $3E, $00, $46, $00, $34, $00, $41 + 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, $34, $00, $42, $00, $34, $00, $41, $00, $43, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 + 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, $30, $00, $42, $00, $43, $00, $34, $00, $41, $00, $3D, $00, $FF, $00, $B9, $00, $30, $00, $3B, $00, $30, $00, $32, $00, $34 + 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, $48, $00, $41, $00, $44, $00, $3B, $00, $34, $00, $FF, $00, $AC, $00, $30, $00, $42, $00, $43, $00, $3B, $00, $34 + 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, $48, $00, $41, $00, $44, $00, $3B, $00, $34, $00, $FF, $00, $AC, $00, $30, $00, $42, $00, $43, $00, $3B, $00, $34 + 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, $43, $00, $37, $00, $38, $00, $42, $00, $FF, $00, $33, $00, $44, $00, $3D, $00, $36, $00, $34, $00, $3E, $00, $3d - dw #$7F7F \ No newline at end of file + 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/maidencrystals.asm b/maidencrystals.asm index 1ee421d..dc6a553 100644 --- a/maidencrystals.asm +++ b/maidencrystals.asm @@ -14,5 +14,5 @@ MaidenCrystalScript: LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals LDA.b #$08 : STA.l MapIcons ; Update the map icon to just be Ganon's Tower + -JML.l $1ECF35 ; <- F4F35 - sprite_crystal_maiden.asm : 426 +JML.l $9ECF35 ; <- F4F35 - sprite_crystal_maiden.asm : 426 ;-------------------------------------------------------------------------------- diff --git a/music.asm b/music.asm index 94992eb..adfe68b 100644 --- a/music.asm +++ b/music.asm @@ -103,7 +103,7 @@ Overworld_FinishMirrorWarp: LDA.w #$0000 : STA.l FadeTimer : STA.l FadeDirection SEP #$20 - JSL $00D7C8 + JSL $80D7C8 LDA.b #$80 : STA.b HDMAENQ LDX.b #$04 ; bunny theme @@ -245,10 +245,10 @@ RTL ; ; On entry, A = $8A (overworld area being loaded) Overworld_MosaicDarkWorldChecks: - CMP.b #$40 : beq .checkCrystals - CMP.b #$42 : beq .checkCrystals - CMP.b #$50 : beq .checkCrystals - CMP.b #$51 : bne .doFade + CMP.b #$40 : BEQ .checkCrystals + CMP.b #$42 : BEQ .checkCrystals + CMP.b #$50 : BEQ .checkCrystals + CMP.b #$51 : BNE .doFade .checkCrystals LDA.l CrystalsField : CMP.b #$7F : BEQ .done diff --git a/newhud.asm b/newhud.asm index afd7ae2..3576e9e 100644 --- a/newhud.asm +++ b/newhud.asm @@ -1,273 +1,515 @@ +!InfiniteTile = $2431 +!BlankTile = $207F +!SlashTile = $2830 +!PTile = $296C +!CTile = $295F + NewDrawHud: + PHB + SEP #$30 -;================================================================================ -; Draw bomb count -;================================================================================ + REP #$10 - LDA.l InfiniteBombs : BNE .infinite_bombs - .finite_bombs - LDA.l SpecialWeapons : CMP #$01 : BNE .normal - LDA.l SpecialWeaponLevel : BEQ .no_bombs - .normal - 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 - BRA + - - .no_bombs - REP #$20 - LDA.w #$207F : STA HUDBombCount - STA HUDBombCount+2 - BRA + - - .infinite_bombs - REP #$20 - LDA.w #$2431 : STA.l HUDBombCount ; infinity (left half) - INC A : STA.l HUDBombCount+2 ; infinity (right half) - + + LDA.b #$7E + PHA : PLB ;================================================================================ -; Draw rupee counter -;================================================================================ - - 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 - -;================================================================================ -; Draw arrow count -;================================================================================ +NewHUD_DrawBombs: + LDA.l InfiniteBombs : BNE .infinite + LDA.l SpecialWeapons : CMP #$01 : BNE .normal + LDA.l SpecialWeaponLevel : BEQ .no_bombs +.infinite + LDY.w #!InfiniteTile+0 + LDX.w #!InfiniteTile+1 + BRA .draw + +.no_bombs + LDY.w #!BlankTile + LDX.w #!BlankTile + BRA .draw + +.normal + LDA.w BombsEquipment + JSR HUDHex2Digit + +.draw + STY.w HUDBombCount+0 + STX.w HUDBombCount+2 + +;================================================================================ +NewHUD_DrawRupees: + REP #$20 + + LDA.w DisplayRupees + JSR HUDHex4Digit + + LDA.b Scrap04 : TAX : STX.w HUDRupees+0 ; 1000s + LDA.b Scrap05 : TAX : STX.w HUDRupees+2 ; 100s + LDA.b Scrap06 : TAX : STX.w HUDRupees+4 ; 10s + LDA.b Scrap07 : TAX : STX.w HUDRupees+6 ; 1s + +;================================================================================ +NewHUD_DrawArrows: SEP #$20 - LDA.l ArrowMode : BNE + - LDA.l InfiniteArrows : BNE .infinite_arrows - .finite_arrows - 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 - BRA + - - .infinite_arrows - REP #$20 - LDA.w #$2431 : STA.l HUDArrowCount ; infinity (left half) - INC A : STA.l HUDArrowCount+2 ; infinity (right half) - + - -;================================================================================ -; Draw Goal Item Indicator + + LDA.l ArrowMode : BNE NewHUD_DrawGoal + LDA.l InfiniteArrows : BEQ .finite + +.infinite + LDY.w #!InfiniteTile+0 + LDX.w #!InfiniteTile+1 + BRA .draw + +.finite + LDA.w CurrentArrows + JSR HUDHex2Digit + +.draw + STY.w HUDArrowCount+0 + STX.w HUDArrowCount+2 + ;================================================================================ +NewHUD_DrawGoal: + REP #$20 + LDA.w UpdateHUD : BEQ .no_goal + LDA.l GoalItemRequirement : BEQ .no_goal + + LDA.l GoalItemIcon : STA.w HUDGoalIndicator + LDA.w #!SlashTile : STA.w HUDGoalIndicator+8 + LDA.l GoalCounter + JSR HUDHex4Digit + + LDA.b Scrap05 : TAX : STX.w HUDGoalIndicator+2 ; draw 100's digit + LDA.b Scrap06 : TAX : STX.w HUDGoalIndicator+4 ; draw 10's digit + LDA.b Scrap07 : TAX : STX.w HUDGoalIndicator+6 ; draw 1's digit REP #$20 - LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter - LDA.l GoalCounter - JSR HudHexToDec4Digit + LDA.l GoalItemRequirement : CMP.w #$FFFF : BNE .real_goal - 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 - - 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 - BRA .done - .skip - LDA.w #$207F ; transparent tile - STA.l HUDGoalIndicator+8 - STA.l HUDGoalIndicator+10 - STA.l HUDGoalIndicator+12 - .done - -;================================================================================ -; Draw Dungeon Compass Counts -;================================================================================ - LDA.l CompassMode : ORA.l MapHUDMode : BIT #$0003 : BEQ + - JSL.l DrawDungeonItemCounts ; compasses.asm - + + LDX.w #!BlankTile + STX.w HUDGoalIndicator+10 + STX.w HUDGoalIndicator+12 + STX.w HUDGoalIndicator+14 -;================================================================================ -; Draw key count -;================================================================================ +.no_goal SEP #$20 - LDA.l CurrentSmallKeys : CMP.b #$FF : BEQ .not_in_dungeon - .in_dungeon - JSR HudHexToDec2Digit : REP #$20 - - ; if 10s digit is 0, draw transparent tile instead of 0 - LDX.b Scrap06 : TXA : CPX.b #$90 : BNE + - LDA.w #$007F - + - ORA.w #$2400 : STA.l HUDKeyDigits - - ; 1s digit - LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDKeyDigits+2 - BRA .done_keys - - .not_in_dungeon - REP #$20 - - ;in the overworld, draw transparent tiles instead of key count - LDA.w #$247F : STA.l HUDKeyDigits : STA.l HUDKeyDigits+2 - STA.l HUDKeyIcon - - .done_keys + BRA NewHUD_DrawKeys +.real_goal + JSR HUDHex4Digit + LDA.b Scrap05 : TAX : STX.w HUDGoalIndicator+10 ; draw 100's digit + LDA.b Scrap06 : TAX : STX.w HUDGoalIndicator+12 ; draw 10's digit + LDA.b Scrap07 : TAX : STX.w HUDGoalIndicator+14 ; draw 1's digit +;================================================================================ +NewHUD_DrawKeys: + LDA.l CurrentSmallKeys + CMP.b #$FF + BNE .in_dungeon -;-------------------------------------------------------------------------------- -; Draw pendant/crystal icon -;-------------------------------------------------------------------------------- -!P_ICON = $296C -!C_ICON = $295F + LDY.w #!BlankTile + STY.w HUDKeyIcon + STY.w HUDKeyDigits+0 + STY.w HUDKeyDigits+2 + BRA NewHUD_DrawDungeonCounters +.in_dungeon + JSR HUDHex2Digit + CPY.w #$2490 + BNE .real_10s + + LDY.w #!BlankTile + +.real_10s + STY.w HUDKeyDigits+0 + STX.w HUDKeyDigits+2 + +;================================================================================ +NewHUD_DrawDungeonCounters: + LDA.w UpdateHUD : BEQ NewHUD_DrawPrizeIcon + LDA.l CompassMode : ORA.l MapHUDMode : BIT.b #$03 : BEQ NewHUD_DrawPrizeIcon + LDX.b IndoorsFlag : BNE + + JMP.w NewHUD_DrawMagicMeter + + + SEP #$30 + ; extra hard safeties for getting dungeon ID to prevent crashes + LDA.w DungeonID + CMP.b #$1B : BCS NewHUD_DrawPrizeIcon ; Skip if not in a valid dungeon ID + AND.b #$FE : TAX + LSR : TAY + PHX : PHY + + JSR.w DrawCompassCounts + SEP #$10 + PLY : PLX + JSR.w DrawMapCounts + +;================================================================================ +NewHUD_DrawPrizeIcon: + REP #$10 SEP #$20 - LDA.b IndoorsFlag : BEQ .noprize + LDA.b GameMode + CMP.b #$12 : BEQ .no_prize + CMP.b #$0E : BEQ + + LDA.w UpdateHUD : BEQ NewHUD_DrawItemCounter + + + LDA.w DungeonID + CMP.b #$1A : BCS .no_prize + CMP.b #$04 : BCC .no_prize + CMP.b #$08 : BNE .dungeon - LDX.w DungeonID - CPX #$1A : !BGE .noprize - CPX #$04 : !BLT .noprize - CPX #$08 : BEQ .noprize - - LDA.b GameMode : CMP.b #$12 : BEQ .noprize +.no_prize + LDY.w #!BlankTile + BRA .draw_prize +.dungeon + SEP #$30 + TAX + LSR + TAY LDA.l MapMode - REP #$20 - BEQ .drawprize + + REP #$30 + BEQ .prize LDA.l MapField AND.l DungeonItemMasks,X - BEQ .noprize + BEQ .no_prize -.drawprize - TXA : LSR : TAX - LDA.l CrystalPendantFlags_2, X - AND.w #$0040 : BNE .is_crystal + .prize + TYX + LDA.l CrystalPendantFlags_2,X + BIT.w #$0080 + BNE .no_icon - LDA.w #!P_ICON - BRA .doneprize + BIT.w #$0040 + BNE .crystal -.is_crystal - LDA.w #!C_ICON - BRA .doneprize + LDY.w #!PTile + BRA .draw_prize -.noprize +.crystal + LDY.w #!CTile + BRA .draw_prize + +.no_icon + LDY.w #!BlankTile + +.draw_prize + STY.w HUDPrizeIcon + +;================================================================================ +NewHUD_DrawItemCounter: REP #$20 - LDA.w #$207F + LDA.w UpdateHUD : BEQ NewHUD_DrawMagicMeter + LDA.l ItemCounterHUD : AND.w #$00FF : BEQ NewHUD_DrawMagicMeter + LDA.w #!SlashTile : STA.w HUDGoalIndicator+$08 + LDA.l TotalItemCount : CMP.w #1000 : BCS .item_four_digits + LDA.w TotalItemCountTiles+$02 : STA.w HUDGoalIndicator+$0A + LDA.w TotalItemCountTiles+$04 : STA.w HUDGoalIndicator+$0C + LDA.w TotalItemCountTiles+$06 : STA.w HUDGoalIndicator+$0E -.doneprize - STA.l HUDPrizeIcon + LDA.w TotalItemCounter + JSR.w HUDHex4Digit + LDA.b $05 : TAX : STX.w HUDGoalIndicator+$02 + LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04 + LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06 + BRA NewHUD_DrawMagicMeter -;-------------------------------------------------------------------------------- -; Draw Magic Meter + .item_four_digits + LDA.w TotalItemCountTiles+$00 : STA.w HUDGoalIndicator+$0A + LDA.w TotalItemCountTiles+$02 : STA.w HUDGoalIndicator+$0C + LDA.w TotalItemCountTiles+$04 : STA.w HUDGoalIndicator+$0E + LDA.w TotalItemCountTiles+$06 : STA.w HUDGoalIndicator+$10 + + LDA.w TotalItemCounter + JSR.w HUDHex4Digit + LDA.b $04 : TAX : STX.w HUDGoalIndicator+$00 + LDA.b $05 : TAX : STX.w HUDGoalIndicator+$02 + LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04 + LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06 + +;================================================================================ DrawMagicMeter_mp_tilemap = $0DFE0F -;-------------------------------------------------------------------------------- - LDA.l CurrentMagic : AND.w #$00FF ; crap we wrote over when placing the hook for OnDrawHud - !ADD #$0007 - AND.w #$FFF8 - TAX ; end of crap - - LDA.l InfiniteMagic : AND.w #$00FF : BNE + : JMP .green : + - SEP #$20 : LDA.b #$80 : STA.l CurrentMagic : REP #$30 ; set magic to max - LDX.w #$0080 ; load full magic meter graphics - LDA.b FrameCounter : AND.w #$000C : LSR #2 - BEQ .red - CMP.w #0001 : BEQ .yellow - CMP.w #0002 : BNE + : JMP .green : + - .blue - LDA.l DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA.l HUDTileMapBuffer+$46 - LDA.l DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA.l HUDTileMapBuffer+$86 - LDA.l DrawMagicMeter_mp_tilemap+4, X : AND.w #$EFFF : STA.l HUDTileMapBuffer+$C6 - LDA.l DrawMagicMeter_mp_tilemap+6, X : AND.w #$EFFF : STA.l HUDTileMapBuffer+$06 - RTL - .red - LDA.l DrawMagicMeter_mp_tilemap+0, X : AND.w #$E7FF : STA.l HUDTileMapBuffer+$46 - LDA.l DrawMagicMeter_mp_tilemap+2, X : AND.w #$E7FF : STA.l HUDTileMapBuffer+$86 - LDA.l DrawMagicMeter_mp_tilemap+4, X : AND.w #$E7FF : STA.l HUDTileMapBuffer+$C6 - LDA.l DrawMagicMeter_mp_tilemap+6, X : AND.w #$E7FF : STA.l HUDTileMapBuffer+$06 - RTL - .yellow - LDA.l DrawMagicMeter_mp_tilemap+0, X : AND.w #$EBFF : STA.l HUDTileMapBuffer+$46 - LDA.l DrawMagicMeter_mp_tilemap+2, X : AND.w #$EBFF : STA.l HUDTileMapBuffer+$86 - LDA.l DrawMagicMeter_mp_tilemap+4, X : AND.w #$EBFF : STA.l HUDTileMapBuffer+$C6 - LDA.l DrawMagicMeter_mp_tilemap+6, X : AND.w #$EBFF : STA.l HUDTileMapBuffer+$0106 - RTL - .orange - LDA.l DrawMagicMeter_mp_tilemap+0, X : AND.w #$E3FF : STA.l HUDTileMapBuffer+$46 - LDA.l DrawMagicMeter_mp_tilemap+2, X : AND.w #$E3FF : STA.l HUDTileMapBuffer+$86 - LDA.l DrawMagicMeter_mp_tilemap+4, X : AND.w #$E3FF : STA.l HUDTileMapBuffer+$C6 - LDA.l DrawMagicMeter_mp_tilemap+6, X : AND.w #$E3FF : STA.l HUDTileMapBuffer+$0106 - RTL - .green - LDA.l DrawMagicMeter_mp_tilemap+0, X : STA.l HUDTileMapBuffer+$46 - LDA.l DrawMagicMeter_mp_tilemap+2, X : STA.l HUDTileMapBuffer+$86 - LDA.l DrawMagicMeter_mp_tilemap+4, X : STA.l HUDTileMapBuffer+$C6 - LDA.l DrawMagicMeter_mp_tilemap+6, X : STA.l HUDTileMapBuffer+$0106 - RTL +NewHUD_DrawMagicMeter: + SEP #$31 + LDA.l CurrentMagic + ADC.b #$06 ; carry set by above for +1 to get +7 + AND.b #$F8 + TAY + + LDA.l InfiniteMagic + BEQ .set_index + +.infinite_magic + LDA.b #$80 + STA.w CurrentMagic + TAY + + LDA.b FrameCounter + REP #$30 + AND.w #$000C + LSR + BRA .recolor + +.set_index ; this branch is always 0000 when taken + REP #$30 + TDC + .recolor + TAX + LDA.l MagicMeterColorMasks,X + + TYX + TAY : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$046 + TYA : AND.l DrawMagicMeter_mp_tilemap+2,X : STA.w HUDTileMapBuffer+$086 + TYA : AND.l DrawMagicMeter_mp_tilemap+4,X : STA.w HUDTileMapBuffer+$0C6 + TYA : AND.l DrawMagicMeter_mp_tilemap+6,X : STA.w HUDTileMapBuffer+$106 ;================================================================================ -; 16-bit A, 8-bit X -; in: A(b) - Byte to Convert -; out: $04 - $07 (high - low) +NewHUD_DoneDrawing: + STZ.w UpdateHUD + PLB +RTL + ;================================================================================ -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 +MagicMeterColorMasks: + dw $FFFF ; green - KEEP GREEN FIRST + dw $EFFF ; blue + dw $E7FF ; red + dw $EBFF ; yellow + dw $E3FF ; orange + +;================================================================================ +DrawCompassCounts: + LDA.l CompassMode : BEQ .done + + ; no compass needed if this bit is set + BIT.b #$02 : BNE .draw_compass_count + REP #$20 + LDA.l CompassField : AND.l DungeonItemMasks,X : BEQ .done + +.draw_compass_count + SEP #$20 + TYX : BNE .not_sewers + INX + +.not_sewers + LDA.l DungeonLocationsChecked, X + PHA + + LDA.l CompassTotalsWRAM,X + + JSR HUDHex2Digit + STY.w HUDTileMapBuffer+$9A : STX.w HUDTileMapBuffer+$9C + + LDX.w #!BlankTile : STX.w HUDTileMapBuffer+$92 + LDX.w #!SlashTile : STX.w HUDTileMapBuffer+$98 + + PLA + JSR HUDHex2Digit + STY.w HUDTileMapBuffer+$94 : STX.w HUDTileMapBuffer+$96 + +.done + SEP #$20 +RTS +;================================================================================ +DrawMapCounts: + LDA.l MapHUDMode : BEQ .done + + ; no map needed if this bit is set + BIT.b #$02 : BNE .draw_map_count + REP #$20 + LDA.l MapField : AND.l DungeonItemMasks,X : BEQ .done + +.draw_map_count + SEP #$20 + TYX : BNE .not_sewers + INX + +.not_sewers + LDA.l DungeonCollectedKeys, X + PHA + + LDA.l MapTotalsWRAM,X + + JSR HUDHex2Digit + STX.w HUDTileMapBuffer+$A6 + + LDX.w #!SlashTile : STX.w HUDTileMapBuffer+$A4 + + PLA + JSR HUDHex2Digit + STX.w HUDTileMapBuffer+$A2 + +.done + SEP #$20 RTS ;================================================================================ -; 8-bit registers -; in: A(b) - Byte to Convert -; out: $06 - $07 (high - low) +; Exits with: +; X - ones place tile +; Y - tens place tile +;=================================================================================================== +HUDHex2Digit: + SEP #$30 ; clear high byte of X and Y and make it so they don't get B + ASL : TAX + + REP #$10 + + LDA.b #$24 : XBA ; tile props in high byte + + LDA.l FastHexTable,X : LSR #4 : ORA.b #$90 + TAY + + LDA.l FastHexTable,X : AND.b #$0F : ORA.b #$90 + TAX + + RTS + +HUDHex4Digit: + JSL HexToDec + + REP #$30 + + LDA.l HexToDecDigit2 : ORA.w #$9090 : STA.b Scrap04 + LDA.l HexToDecDigit4 : ORA.w #$9090 : STA.b Scrap06 + + LDA.w #$2400 + + SEP #$20 + RTS + +HUDHex2Digit_Long: + JSR HUDHex2Digit + REP #$20 +RTL + +HUDHex4Digit_Long: + JSR HUDHex4Digit + REP #$20 +RTL + ;================================================================================ -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 +UpdateHearts: + PHB + REP #$20 + SEP #$10 + + LDX.b #$7E + PHX + PLB + + LDA.w MaximumHealth + LSR + LSR + LSR + AND.w #$1F1F + + + TAX + XBA + TAY + + LDA.w #HUDTileMapBuffer+$068 + STA.b $07 + STA.b $09 + +.next_filled_heart + CPX.b #$01 + BMI .done_hearts + + PHX + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + PLX + ORA.w #$20A0 + + CPY.b #$01 + BPL .add_heart + + INC + INC + +.add_heart + STA.b ($07) + + DEY + DEX + + LDA.b $07 + INC + INC + CMP.w #HUDTileMapBuffer+$07C + BEQ .next_row + + CMP.w #HUDTileMapBuffer+$0BC + BNE .fine + +.next_row + ADC.w #$002B + +.fine + STA.b $07 + + CPY.b #$00 + BNE .next_filled_heart + + STA.b $09 + BRA .next_filled_heart + +.done_hearts + LDA.w CurrentHealth + AND.w #$0007 + BEQ .skip_partial + CMP.w #$0005 + BCS .more_than_half + + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + ORA.w #$20A1 + STA.b ($09) + BRA .skip_partial + +.more_than_half + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + ORA.w #$20A0 + STA.b ($09) + +.skip_partial + SEP #$30 + + PLB + RTL + +CheckHeartPaletteFileSelect: + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_file_select,X + ORA.w #$0200 + LDX.w #$000A +RTL + +CheckHeartPalette: + PHX + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + ORA.w #$20A0 + PLX RTS + +ColorAnimatedHearts: + PHX + REP #$20 + LDA.l HUDHeartColors_index : ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + PLX + ORA.l HeartFramesBaseTiles,X + STA.b [Scrap00],Y + SEP #$20 +RTL + +HeartFramesBaseTiles: +dw $20A3, $20A4, $20A3, $20A0 diff --git a/newitems.asm b/newitems.asm index 7fbf687..c557d4d 100755 --- a/newitems.asm +++ b/newitems.asm @@ -1,55 +1,6 @@ ;================================================================================ ; New Item Handlers ;-------------------------------------------------------------------------------- -; REMEMBER TO UPDATE THE TABLES IN UTILITIES.ASM! -;-------------------------------------------------------------------------------- -; #$4C - Bomb Capacity (50) -; #$4D - Arrow Capacity (70) -; #$4E - 1/2 Magic -; #$4F - 1/4 Magic -; #$50 - Safe Master Sword -; #$51 - Bomb Capacity (+5) -; #$52 - Bomb Capacity (+10) -; #$53 - Arrow Capacity (+5) -; #$54 - Arrow Capacity (+10) -; #$55 - Programmable Item 1 -; #$56 - Programmable Item 2 -; #$57 - Programmable Item 3 -; #$58 - Upgrade-Only Silver Arrows -; #$59 - Rupoor -; #$5A - Null Item -; #$5B - Red Clock -; #$5C - Blue Clock -; #$5D - Green Clock -; #$5E - Progressive Sword -; #$5F - Progressive Shield -; #$60 - Progressive Armor -; #$61 - Progressive Lifting Glove -; #$62 - RNG Pool Item (Single) -; #$63 - RNG Pool Item (Multi) -; #$64 - Progressive Bow -; #$65 - Progressive Bow -; #$6A - Goal Item (Single/Triforce) -; #$6B - Goal Item (Multi/Power Star) -; #$6C - Goal Item (Multi/Triforce Piece) -; #$6D - Server Request F0 (Hearts / Powder / Mushroom / Bonkable) -; #$6E - Server Request F1 (NPC) -; #$6F - Server Request F2 (Tablets / Pedestal) -; #$70 - Maps -; #$80 - Compasses -; #$90 - Big Keys -; #$A0 - Small Keys -; #$B0 - reserved for bee traps -; #$B1 - reserved for bonk shuffle -; #$B2 - reserved for bonk shuffle -; #$B3 - reserved for bonk shuffle -; #$B4 - reserved for bonk shuffle -; #$B5 - reserved for bonk shuffle -; #$B6 - Progressive Bomb -; #$B7 - Progressive Cane -; #$B8 - Progressive Bug Net -; #$FE - Server Request (Asychronous Chest) -; #$FF - Null Chest ;-------------------------------------------------------------------------------- ; Service Indexes ; 0x00 - 0x04 - chests @@ -57,6 +8,7 @@ ; 0xF1 - freestanding heart 2 / boss heart / npc ; 0xF3 - tablet/pedestal ;-------------------------------------------------------------------------------- +;-------------------------------------------------------------------------------- GetAnimatedSpriteGfxFile: CMP.b #$0C : BNE + LDY.b #$5C : JML GetAnimatedSpriteGfxFile_return @@ -79,7 +31,7 @@ GetAnimatedSpriteGfxFile: + LDY.b #$32 JML GetAnimatedSpriteGfxFile_return -;-------------------------------------------------------------------------------- + GetAnimatedSpriteBufferPointer_table: ; Original data: dw $09C0, $0030, $0060, $0090, $00C0, $0300, $0318, $0330 @@ -95,7 +47,7 @@ dw $03C0, $0990, $09A8, $09C0, $09D8, $0A08, $0A38, $0600 dw $0630 ; New data: dw $0600, $0630, $0660, $0690 ; 50 Bombs / 70 Arrows / Half Magic / Quarter Magic -dw $06C0, $06F0, $0720 ; +5/+10 Bomb Arrows +dw $06C0, $06F0, $8520 ; +5/+10 Bomb Arrows ;#$4x dw $0750 ; +10 Arrows @@ -112,7 +64,7 @@ GetAnimatedSpriteBufferPointer: LDA.b Scrap00 : ADC.l GetAnimatedSpriteBufferPointer_table, X ;PLB RTL -;-------------------------------------------------------------------------------- + macro ProgrammableItemLogic(index) LDA.l ProgrammableItemLogicPointer_ : BNE ?jump LDA.l ProgrammableItemLogicPointer_+1 : BNE ?jump @@ -123,14 +75,6 @@ macro ProgrammableItemLogic(index) ?end: endmacro -macro ValueShift() - TAX : LDA.b #$01 - ?start: - CPX #$00 : BEQ ?end - ASL - DEX - BRA ?start : ?end: -endmacro ;-------------------------------------------------------------------------------- ;carry clear if pass ;carry set if caught @@ -157,7 +101,7 @@ ProcessEventItems: REP #$20 ; set 16-bit accumulator LDA.l GoalItemRequirement : BEQ ++ LDA.l GoalCounter : INC : STA.l GoalCounter - CMP.l GoalItemRequirement : !BLT ++ + CMP.l GoalItemRequirement : BCC ++ LDA.l TurnInGoalItems : AND.w #$00FF : BNE ++ JSL.l ActivateGoal ++ @@ -173,684 +117,717 @@ ProcessEventItems: PLA : STA.b Scrap00 RTS ;-------------------------------------------------------------------------------- +AddReceivedItemExpanded: + JSR.w ResolveReceipt + PHB : PHK +JML AddReceivedItem+2 + AddReceivedItemExpandedGetItem: - PHX + PHX : PHB - LDA.w ItemReceiptID ; check inventory + LDA.w ItemReceiptID JSL.l FreeDungeonItemNotice - CMP.b #$0B : BNE + ; Bow - LDA.l BowTracking : AND.b #$40 : BEQ ++ - LDA.l SilverArrowsUseRestriction : BNE ++ - LDA.b #03 : STA.l BowEquipment ; set bow to silver - ++ - JMP .done - + CMP.b #$3B : BNE + ; Silver Bow - LDA.l SilverArrowsUseRestriction : BNE .noequip - LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip - LDA.l ArrowsFiller : BNE ++ ; check arrows - LDA.b #$03 : BRA +++ ; bow without arrow - ++ - LDA.b #$04 ; bow with arrow - +++ - STA.l BowEquipment - .noequip - LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking ; mark silver bow on y-toggle - JMP .done - + CMP.b #$4C : BNE + ; 50 bombs - LDA.b #50 : STA.l BombCapacity ; upgrade bombs - LDA.b #50 : STA.l BombsFiller ; fill bombs - JMP .done - + CMP.b #$4D : BNE + ; 70 arrows - LDA.b #70 : STA.l ArrowCapacity ; upgrade arrows - LDA.b #70 : STA.l ArrowsFiller ; fill arrows - JMP .done - + CMP.b #$4E : BNE + ; 1/2 magic - LDA.l MagicConsumption : CMP.b #$02 : !BGE ++ - INC : STA.l MagicConsumption ; upgrade magic - ++ - LDA.b #$80 : STA.l MagicFiller ; fill magic - JMP .done - + CMP.b #$4F : BNE + ; 1/4 magic - LDA.b #$02 : STA.l MagicConsumption ; upgrade magic - LDA.b #$80 : STA.l MagicFiller ; fill magic - JMP .done - + CMP.b #$50 : BNE + ; Master Sword (Safe) - LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword - LDA.b #$02 : STA.l SwordEquipment ; set master sword - JMP .done - + CMP.b #$51 : BNE + ; +5 Bombs - LDA.l BombCapacity : !ADD.b #$05 : STA.l BombCapacity ; upgrade bombs +5 - LDA.l Upgrade5BombsRefill : STA.l BombsFiller ; fill bombs - JMP .done - + CMP.b #$52 : BNE + ; +10 Bombs - LDA.l BombCapacity : !ADD.b #$0A : STA.l BombCapacity ; upgrade bombs +10 - LDA.l Upgrade10BombsRefill : STA.l BombsFiller ; fill bombs - JMP .done - + CMP.b #$53 : BNE + ; +5 Arrows - LDA.l ArrowCapacity : !ADD.b #$05 : STA.l ArrowCapacity ; upgrade arrows +5 - LDA.l Upgrade5ArrowsRefill : STA.l ArrowsFiller ; fill arrows - JMP .done - + CMP.b #$54 : BNE + ; +10 Arrows - LDA.l ArrowCapacity : !ADD.b #$0A : STA.l ArrowCapacity ; upgrade arrows +10 - LDA.l Upgrade10ArrowsRefill : STA.l ArrowsFiller ; fill arrows - JMP .done - + CMP.b #$55 : BNE + ; Programmable Object 1 - %ProgrammableItemLogic(1) - JMP .done - + CMP.b #$56 : BNE + ; Programmable Object 2 - %ProgrammableItemLogic(2) - JMP .done - + CMP.b #$57 : BNE + ; Programmable Object 3 - %ProgrammableItemLogic(3) - JMP .done - + CMP.b #$58 : BNE + ; Upgrade-Only Silver Arrows - LDA.l SilverArrowsUseRestriction : BNE +++ - LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ +++ - LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE ++ - !ADD.b #$02 : STA.l BowEquipment ; switch to silver bow - ++ - +++ - LDA.l ArrowMode : BEQ ++ - LDA.b #$01 : STA.l ArrowsFiller - ++ - + CMP.b #$59 : BNE + ; 1 Rupoor - REP #$20 : LDA.l CurrentRupees : !SUB RupoorDeduction : STA.l CurrentRupees : SEP #$20 ; Take 1 rupee - JMP .done - + CMP.b #$5A : BNE + ; Null Item - JMP .done - + CMP.b #$5B : BNE + ; Red Clock - REP #$20 ; set 16-bit accumulator - LDA.l ChallengeTimer : !ADD.l RedClockAmount : STA.l ChallengeTimer - LDA.l ChallengeTimer+2 : ADC.l RedClockAmount+2 : STA.l ChallengeTimer+2 - SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$5C : BNE + ; Blue Clock - REP #$20 ; set 16-bit accumulator - LDA.l ChallengeTimer : !ADD.l BlueClockAmount : STA.l ChallengeTimer - LDA.l ChallengeTimer+2 : ADC.l BlueClockAmount+2 : STA.l ChallengeTimer+2 - SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$5D : BNE + ; Green Clock - REP #$20 ; set 16-bit accumulator - LDA.l ChallengeTimer : !ADD.l GreenClockAmount : STA.l ChallengeTimer - LDA.l ChallengeTimer+2 : ADC.l GreenClockAmount+2 : STA.l ChallengeTimer+2 - SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$5E : BNE + ; Progressive Sword - JMP .done - + CMP.b #$5F : BNE + ; Progressive Shield - JMP .done - + CMP.b #$60 : BNE + ; Progressive Armor - JMP .done - + CMP.b #$61 : BNE + ; Progressive Lifting Glove - JMP .done - + CMP.b #$62 : BNE + ; RNG Pool Item (Single) - JMP .done - + CMP.b #$63 : BNE + ; RNG Pool Item (Multi) - JMP .done - + CMP.b #$64 : BNE + ; Progressive Bow - JMP .done - + CMP.b #$65 : BNE + ; Progressive Bow - JMP .done - + CMP.b #$6A : BNE + ; Goal Collectable (Single/Triforce) - JSL.l ActivateGoal - JMP .done - + CMP.b #$6B : BNE + ; Goal Collectable (Multi/Power Star) - BRA .multi_collect - + CMP.b #$6C : BNE + ; Goal Collectable (Multi/Power Star) Alternate Graphic - .multi_collect - REP #$20 ; set 16-bit accumulator - LDA.l GoalItemRequirement : BEQ ++ - LDA.l GoalCounter : INC : STA.l GoalCounter - CMP.w GoalItemRequirement : !BLT ++ - LDA.l TurnInGoalItems : AND.w #$00FF : BNE ++ - JSL.l ActivateGoal - ++ - SEP #$20 ; set 8-bit accumulator - JMP .done - + CMP.b #$6D : BNE + ; Server Request F0 - JSL.l ItemGetServiceRequest_F0 - JMP .done - + CMP.b #$6E : BNE + ; Server Request F1 - JSL.l ItemGetServiceRequest_F1 - JMP .done - + CMP.b #$6F : BNE + ; Server Request F2 - JSL.l ItemGetServiceRequest_F2 - JMP .done - ;+ CMP.b #$FE : BNE + ; Server Request (Null Chest) - ; JSL.l ItemGetServiceRequest - ; JMP .done - + CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map - AND.b #$0F : CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l MapField : STA.l MapField ; Map 1 - JMP .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both - ORA.l MapField+1 : STA.l MapField+1 ; Map 2 - JMP .done - + CMP.b #$80 : !BLT + : CMP.b #$90 : !BGE + ; Free Compass - AND.b #$0F : CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l CompassField : STA.l CompassField ; Compass 1 - JMP .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both - ORA.l CompassField+1 : STA.l CompassField+1 ; Compass 2 - JMP .done - + CMP.b #$90 : !BLT + : CMP.b #$A0 : !BGE + ; Free Big Key - AND.b #$0F : CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l BigKeyField : STA.l BigKeyField ; Big Key 1 - JMP .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both - ORA.l BigKeyField+1 : STA.l BigKeyField+1 ; Big Key 2 - JMP .done - + CMP.b #$A0 : !BLT + : CMP.b #$B0 : !BGE + ; Free Small Key - AND.b #$0F : TAX - LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X ; Increment Key Count + JSR ItemBehavior + SEP #$30 - CPX.b #$00 : BNE ++ - STA.l HyruleCastleKeys ; copy HC to sewers - ++ : CPX.b #$01 : BNE ++ - STA.l SewerKeys ; copy sewers to HC - ++ - - LDA.l GenericKeys : BEQ + - .generic - LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys - JMP .done - .normal - TXA : ASL : CMP.w DungeonID : BNE ++ - LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys - ++ - JMP .done - + CMP.b #$B6 : BNE + ; Bomb Upgrade - LDA #$01 : STA InfiniteBombs - JMP .done - + : CMP.b #$B7 : BNE + ; Cane Upgrade - LDA.l SpecialWeapons : CMP #$03 : BEQ .blue_cane - CMP #$04 : BEQ .red_cane - BRA .done - .blue_cane - LDA #$01 : STA ByrnaEquipment - BRA .done - .red_cane - LDA #$01 : STA SomariaEquipment - BRA .done - BRA .done - + : CMP.b #$B8 : BNE + ; Cane Upgrade - LDA #$01 : STA BugNetEquipment - BRA .done - + - .done - PLX + PLB : PLX + STZ.w ShopPurchaseFlag LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over RTL -;-------------------------------------------------------------------------------- -; #$70 - Maps -; #$80 - Compasses -; #$90 - Big Keys -; #$A0 - Small Keys -;-------------------------------------------------------------------------------- -;2B:Bottle Already Filled w/ Red Potion -;2C:Bottle Already Filled w/ Green Potion -;2D:Bottle Already Filled w/ Blue Potion -;3C:Bottle Already Filled w/ Bee -;3D:Bottle Already Filled w/ Fairy -;48:Bottle Already Filled w/ Gold Bee -AddReceivedItemExpanded: -{ - PHA : PHX - JSL.l PreItemGet - LDA.w ItemReceiptID ; Item Value - JSR AttemptItemSubstitution - STA.w ItemReceiptID +ItemBehavior: + REP #$30 + AND #$00FF : ASL : TAX + SEP #$20 + JMP.w (ItemReceipts_behavior,X) - JSR IncrementItemCounters + .skip + RTS - CMP.b #$16 : BNE ++ ; Bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$2B : BNE ++ ; Red Potion w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$2C : BNE ++ ; Green Potion w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$2D : BNE ++ ; Blue Potion w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$3C : BNE ++ ; Bee w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$3D : BNE ++ ; Fairy w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$48 : BNE ++ ; Gold Bee w/bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$4E : BNE ++ ; Progressive Magic - LDA.l MagicConsumption : BEQ +++ - LDA.b #$4F : STA.w ItemReceiptID - +++ : JMP .done - ++ : CMP.b #$5E : BNE ++ ; Progressive Sword - LDA.l HighestSword : CMP.l ProgressiveSwordLimit : !BLT + - LDA.l ProgressiveSwordReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Sword - LDA.b #$49 : STA.w ItemReceiptID : JMP .done - + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$50 : STA.w ItemReceiptID : JMP .done - + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$02 : STA.w ItemReceiptID : JMP .done - + ; Everything Else - LDA.b #$03 : STA.w ItemReceiptID : JMP .done - ++ : CMP.b #$5F : BNE ++ ; Progressive Shield - LDA.l HighestShield : CMP.l ProgressiveShieldLimit : !BLT + - LDA.l ProgressiveShieldReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Shield - LDA.b #$04 : STA.w ItemReceiptID : JMP .done - + : CMP.b #$01 : BNE + ; Fighter Shield - LDA.b #$05 : STA.w ItemReceiptID : JMP .done - + ; Everything Else - LDA.b #$06 : STA.w ItemReceiptID : JMP .done - ++ : CMP.b #$60 : BNE ++ ; Progressive Armor - LDA.l HighestMail : CMP.l ProgressiveArmorLimit : !BLT + - LDA.l ProgressiveArmorReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Armor - LDA.b #$22 : STA.w ItemReceiptID : JMP .done - + ; Everything Else - LDA.b #$23 : STA.w ItemReceiptID : JMP .done - ++ : CMP.b #$61 : BNE ++ ; Progressive Lifting Glove - LDA.l GloveEquipment : BNE + ; No Lift - LDA.b #$1B : STA.w ItemReceiptID : BRA .done - + ; Everything Else - LDA.b #$1C : STA.w ItemReceiptID : BRA .done - ++ : CMP.b #$64 : BNE ++ : -- ; Progressive Bow - LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement : STA.w ItemReceiptID : JMP .done - + : CMP.b #$00 : BNE + ; No Bow - LDA.b #$3A : STA.w ItemReceiptID : BRA .done - + ; Any Bow - LDA.b #$3B : STA.w ItemReceiptID : BRA .done - ++ : CMP.b #$65 : BNE ++ ; Progressive Bow 2 - LDA.l BowTracking : ORA.b #$20 : STA.l BowTracking - BRA -- - ; ++ : CMP.b #$FE : BNE ++ ; Server Request (Null Chest) - ; JSL ChestItemServiceRequest - ; BRA .done - ++ : CMP.b #$62 : BNE ++ ; RNG Item (Single) - JSL.l GetRNGItemSingle : STA.w ItemReceiptID - XBA : JSR.w MarkRNGItemSingle - LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - BRA .done - ++ : CMP.b #$63 : BNE ++ ; RNG Item (Multi) - JSL.l GetRNGItemMulti : STA.w ItemReceiptID - LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - BRA .done + .blue_boomerang + LDA.l InventoryTracking : ORA.b #$80 + BRA .store_inventory_tracking + + .red_boomerang + LDA.l InventoryTracking : ORA.b #$40 + BRA .store_inventory_tracking + + .mushroom + LDA.l InventoryTracking : ORA.b #$28 + BRA .store_inventory_tracking + + .powder + LDA.l InventoryTracking : ORA.b #$10 + BRA .store_inventory_tracking + + .flute_inactive + LDA.l InventoryTracking : ORA.b #$02 + BRA .store_inventory_tracking + + .flute_active + LDA.l InventoryTracking : ORA.b #$01 + BRA .store_inventory_tracking + + .shovel + LDA.l InventoryTracking : ORA.b #$04 + + .store_inventory_tracking + STA.l InventoryTracking + RTS + + .sword_shield + SEP #$10 + LDX.b #$01 + JSR .increment_sword + JSR .increment_shield + RTS + + .master_sword + SEP #$10 + LDX.b #$02 + JSR .increment_sword + RTS + + .tempered_sword + SEP #$10 + LDX.b #$03 + JSR .increment_sword + RTS + + .gold_sword + SEP #$10 + LDX.b #$04 + JSR .increment_sword + RTS + + .fighter_shield + SEP #$10 + LDA.w ShopPurchaseFlag : BNE ..shop_shield + - + LDX.b #$01 + JSR .increment_shield + RTS + ..shop_shield + TYX + LDA.l InventoryTable_properties,X : BIT.b #$02 : BNE - + RTS + + .red_shield + SEP #$10 + LDA.w ShopPurchaseFlag : BNE ..shop_shield + - + LDX.b #$02 + JSR .increment_shield + RTS + ..shop_shield + TYX + LDA.l InventoryTable_properties,X : BIT.b #$02 : BNE - + RTS + + .mirror_shield + SEP #$10 + LDX.b #$03 + JSR .increment_shield + REP #$10 + RTS + + .blue_mail + SEP #$10 + LDX.b #$01 + JSR .increment_mail + REP #$10 + RTS + + .red_mail + SEP #$10 + LDX.b #$02 + JSR .increment_mail + REP #$10 + RTS + + .fighter_sword + SEP #$10 + LDX.b #$01 + JSR .increment_sword + REP #$10 + RTS + + .prog_sword + SEP #$10 + LDA.l SwordEquipment : INC : TAX + JSR .increment_sword + REP #$10 + RTS + + .prog_shield + SEP #$10 + LDA.l ShieldEquipment : INC : TAX + JSR .increment_shield + REP #$10 + RTS + + .prog_mail + SEP #$10 + LDA.l ArmorEquipment : INC : TAX + JSR .increment_mail + REP #$10 + 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 + + + LDA.b #$01 : STA.l BowEquipment + RTS + + .dungeon_compass + REP #$20 + LDA.w DungeonID : CMP.w #$0003 : BCC ..hc_sewers + TAX + LDA.l DungeonItemMasks,X : TAY + ORA.l CompassField : STA.l CompassField + JMP.w .increment_compass + ..hc_sewers + LDA.w #$C000 : TAY + ORA.l CompassField : STA.l CompassField + JMP.w .increment_compass + + + .dungeon_bigkey + REP #$20 + LDA.w DungeonID : CMP.w #$0003 : BCC ..hc_sewers + TAX + LDA.l DungeonItemMasks,X : ORA.l BigKeyField : STA.l BigKeyField + JMP.w .increment_bigkey + ..hc_sewers + LDA.w #$C000 : ORA.l BigKeyField : STA.l BigKeyField + JMP.w .increment_bigkey + + .dungeon_map + REP #$20 + LDA.w DungeonID : CMP.w #$0003 : BCC ..hc_sewers + TAX + LDA.l DungeonItemMasks,X : TAY + ORA.l MapField : STA.l MapField + JMP.w .increment_map + ..hc_sewers + LDA.w #$C000 : TAY + ORA.l MapField : STA.l MapField + 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 + + LDA.b #04 : STA.l BowEquipment + BRA .store_bow + + + LDA.b #$03 + BRA .store_bow + .no_silvers + LDA.l CurrentArrows : BEQ + + LDA.b #02 + BRA .store_bow + + + LDA.b #$01 + .store_bow + STA.l BowEquipment + 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 + LDA.l CurrentArrows : BNE + ; check arrows + LDA.b #$03 : BRA ++ ; bow without arrow + + + LDA.b #$04 ; bow with arrow ++ - .done + STA.l BowEquipment + .noequip + RTS + + .bombs_50 + LDA.b #50 : STA.l BombCapacity ; upgrade bombs + LDA.b #50 : STA.l BombsFiller ; fill bombs + RTS + + .arrows_70 + LDA.b #70 : STA.l ArrowCapacity ; upgrade arrows + LDA.b #70 : STA.l ArrowsFiller ; fill arrows + RTS + + .magic_2 + LDA.l MagicConsumption : CMP.b #$02 : !BGE + + INC : STA.l MagicConsumption ; upgrade magic + + + LDA.b #$80 : STA.l MagicFiller ; fill magic + RTS + + .magic_4 + LDA.b #$02 : STA.l MagicConsumption ; upgrade magic + LDA.b #$80 : STA.l MagicFiller ; fill magic + RTS + + .master_sword_safe + SEP #$10 + LDA.l SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword + LDA.b #$02 : STA.l SwordEquipment ; set master sword + + + LDX.b #$02 + JSR .increment_sword + RTS + + .bombs_5 + LDA.l BombCapacity : !ADD.b #$05 : STA.l BombCapacity ; upgrade bombs +5 + LDA.l Upgrade5BombsRefill : STA.l BombsFiller ; fill bombs + RTS + + .bombs_10 + LDA.l BombCapacity : !ADD.b #$0A : STA.l BombCapacity ; upgrade bombs +10 + LDA.l Upgrade10BombsRefill : STA.l BombsFiller ; fill bombs + RTS + + .arrows_5 + LDA.l ArrowCapacity : !ADD.b #$05 : STA.l ArrowCapacity ; upgrade arrows +5 + LDA.l Upgrade5ArrowsRefill : STA.l ArrowsFiller ; fill arrows + RTS + + .arrows_10 + LDA.l ArrowCapacity : !ADD.b #$0A : STA.l ArrowCapacity ; upgrade arrows +10 + LDA.l Upgrade10ArrowsRefill : STA.l ArrowsFiller ; fill arrows + RTS + + .programmable_1 + %ProgrammableItemLogic(1) + RTS + + .programmable_2 + %ProgrammableItemLogic(2) + RTS + + .programmable_3 + %ProgrammableItemLogic(3) + RTS + + .silver_arrows + LDA.l SilverArrowsUseRestriction : BNE ++ + LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking + LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ ++ + LDA.l BowEquipment : BEQ ++ : CMP.b #$03 : !BGE + + !ADD.b #$02 : STA.l BowEquipment ; switch to silver bow + + + ++ + LDA.l ArrowMode : BEQ + + LDA.b #$01 : STA.l ArrowsFiller + + + RTS + + .single_arrow + LDA.l ArrowMode : BEQ + + LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address + INC.w UpdateHUD ; in retro/rupee bow mode. + + + RTS + + .rupoor + REP #$20 : LDA.l CurrentRupees : !SUB RupoorDeduction : STA.l CurrentRupees : SEP #$20 ; Take 1 rupee + RTS + + .null + RTS + + .red_clock + REP #$20 ; set 16-bit accumulator + LDA.l ChallengeTimer : !ADD.l RedClockAmount : STA.l ChallengeTimer + LDA.l ChallengeTimer+2 : ADC.l RedClockAmount+2 : STA.l ChallengeTimer+2 + SEP #$20 ; set 8-bit accumulator + RTS + + .blue_clock + REP #$20 ; set 16-bit accumulator + LDA.l ChallengeTimer : !ADD.l BlueClockAmount : STA.l ChallengeTimer + LDA.l ChallengeTimer+2 : ADC.l BlueClockAmount+2 : STA.l ChallengeTimer+2 + SEP #$20 ; set 8-bit accumulator + RTS + + .green_clock + REP #$20 ; set 16-bit accumulator + LDA.l ChallengeTimer : !ADD.l GreenClockAmount : STA.l ChallengeTimer + LDA.l ChallengeTimer+2 : ADC.l GreenClockAmount+2 : STA.l ChallengeTimer+2 + SEP #$20 ; set 8-bit accumulator + RTS + + .triforce + JSL.l ActivateGoal + RTS + + .goal_item + REP #$20 ; set 16-bit accumulator + LDA.l GoalItemRequirement : BEQ + + LDA.l GoalCounter : INC : STA.l GoalCounter + CMP.w GoalItemRequirement : BCC + + LDA.l TurnInGoalItems : AND.w #$00FF : BNE + + JSL.l ActivateGoal + + + SEP #$20 ; set 8-bit accumulator + RTS + + .request_F0 + JSL.l ItemGetServiceRequest_F0 + RTS + + .request_F1 + JSL.l ItemGetServiceRequest_F1 + RTS + + .request_F2 + JSL.l ItemGetServiceRequest_F2 + RTS + + .request_async + ; JSL.l ItemGetServiceRequest + RTS + + .free_map + REP #$20 + LSR + AND.w #$000F : ASL : TAX + LDA.w DungeonItemIDMap,X : TAX + LDA.l DungeonItemMasks,X : TAY + ORA.l MapField : STA.l MapField + SEP #$20 + JMP.w .increment_map + + .hc_map + REP #$20 + LDA.w #$C000 : TAY + ORA.l MapField : STA.l MapField + JMP.w .increment_map + + .free_compass + REP #$20 + LSR + AND.w #$000F : ASL : TAX + LDA.w DungeonItemIDMap,X : TAX + LDA.l DungeonItemMasks,X : TAY + ORA.l CompassField : STA.l CompassField + SEP #$20 + JMP.w .increment_compass + + .hc_compass + REP #$20 + LDA.w #$C000 : TAY + ORA.l CompassField : STA.l CompassField + SEP #$20 + JMP.w .increment_compass + + .free_bigkey + REP #$20 + LSR + AND.w #$000F : ASL : TAX + LDA.w DungeonItemIDMap,X : TAX + LDA.l DungeonItemMasks,X : ORA.l BigKeyField : STA.l BigKeyField + SEP #$20 + JMP.w .increment_bigkey + + .hc_bigkey + LDA.b #$C0 : ORA.l BigKeyField+1 : STA.l BigKeyField+1 + JMP.w .increment_bigkey + + .free_smallkey + REP #$20 + LSR + AND.w #$000F : TAX + ASL : CMP.w DungeonID : BEQ .same_dungeon + LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X + RTS + .same_dungeon + SEP #$20 + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys + LDA.l DungeonKeys,X : INC : STA.l DungeonKeys,X + RTS + + .same_dungeon_hc + SEP #$20 + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys + LDA.l SewerKeys : INC + STA.l SewerKeys : STA.l HyruleCastleKeys + RTS + + .hc_smallkey + LDA.w DungeonID : CMP.b #$03 : BCC .same_dungeon_hc + LDA.l HyruleCastleKeys : INC : STA.l HyruleCastleKeys + LDA.l SewerKeys : INC : STA.l SewerKeys + RTS + + .generic_smallkey + LDA.l GenericKeys : BEQ .normal + LDA.l CurrentSmallKeys : INC + STA.l CurrentGenericKeys : STA.l CurrentSmallKeys + RTS + .normal + LDA.w DungeonID : BMI + + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys + RTS + + + RTS + + .increment_sword + LDA.l HighestSword + INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better sword + TXA : STA.l HighestSword + + + RTS + + .increment_shield + LDA.l HighestShield + INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better shield + TXA : STA.l HighestShield + + + RTS + + .increment_mail + LDA.l HighestMail + INC : STA.b Scrap04 : CPX.b Scrap04 : BCC + ; don't increment unless we're getting a better mail + TXA : STA.l HighestMail + + + RTS + + .increment_bigkey + SEP #$20 + 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 + 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 + RTS + + .pendant + SEP #$20 + LSR + SEC : SBC.b #$37 + TAX + LDA.w PendantMasks,X : AND.l PendantsField : BNE + + LDA.l PendantCounter : INC : STA.l PendantCounter + + + RTS + + .dungeon_crystal + SEP #$20 + LDA.l CrystalCounter : INC : STA.l CrystalCounter + RTS + + .free_crystal + REP #$20 + LSR + AND.w #$000F : TAX + LDA.w #$0000 + SEC + - + ROL + DEX + BPL - + SEP #$20 + TAX + AND.l CrystalsField : BNE + + TXA + ORA.l CrystalsField : STA.l CrystalsField + LDA.l CrystalCounter : INC : STA.l CrystalCounter + + + .done + RTS + + .prog_weapon + LDA.l SpecialWeaponLevel : INC : STA.l SpecialWeaponLevel + LDA.l SpecialWeapons : CMP #$01 : BEQ ..bombs + CMP #$03 : BEQ ..byrna + CMP #$04 : BEQ ..somaria + CMP #$08 : BEQ ..bug_net + RTS + ..bombs + LDA #$01 : STA.l InfiniteBombs : RTS + INC.w UpdateHUD + ..byrna + LDA #$01 : STA.l ByrnaEquipment : RTS + ..somaria + LDA #$01 : STA.l SomariaEquipment : RTS + ..bug_net + LDA #$01 : STA.l BugNetEquipment : RTS + +ResolveReceipt: + PHA : PHX + PHK : PLB + JSL.l PreItemGet + LDA.w ItemReceiptID + .get_item + JSL.l AttemptItemSubstitution + JSR.w HandleBowTracking + JSR.w ResolveLootID + .have_item + STA.w ItemReceiptID + JSR IncrementItemCounters PLX : PLA + RTS + +ResolveLootIDLong: + PHY + JSR.w ResolveLootID + PLY +RTL + +ResolveLootID: +; In: A - Loot ID +; Out: A - Resolved Loot ID +; Caller is responsible for running AttemptItemSubstitution prior if applicable. + + PHX : PHB + PHK : PLB + .get_item + TAY + REP #$30 + AND.w #$00FF : ASL : TAX + TYA + JMP.w (ItemReceipts_resolution,X) + .have_item + SEP #$30 + PLB : PLX + RTS + + .skip + JMP.w .have_item + + .bottles + SEP #$30 + JSR.w CountBottles : CMP.l BottleLimit : BCC + + LDA.l BottleLimitReplacement + JMP.w .get_item + + + TYA + JMP.w .have_item + + .magic + SEP #$20 + LDA.l MagicConsumption : TAX + LDA.w ResolveLootID_magic_ids,X + JMP.w .have_item + ..ids + db $4E, $4F, $4F + + .prog_sword + SEP #$20 + LDA.l HighestSword + CMP.l ProgressiveSwordLimit : BCC + + LDA.l ProgressiveSwordReplacement + JMP.w .get_item + + + TAX + LDA.w ResolveLootID_prog_sword_ids,X + JMP.w .have_item + ..ids + db $49, $50, $02, $03, $03 + + .shields + SEP #$20 + LDA.l HighestShield + CMP.l ProgressiveShieldLimit : BCC + + LDA.l ProgressiveShieldReplacement + JMP.w .get_item + + + TAX + LDA.w ResolveLootID_shields_ids,X + JMP.w .have_item + ..ids + db $04, $05, $06, $06 + + .armor + SEP #$20 + LDA.l HighestMail + CMP.l ProgressiveArmorLimit : BCC + + LDA.l ProgressiveArmorReplacement + JMP.w .get_item + + + TAX + LDA.w ResolveLootID_armor_ids,X + JMP.w .have_item + ..ids + db $22, $23, $23 + + + .gloves + SEP #$20 + LDA.l GloveEquipment : TAX + LDA.w ResolveLootID_gloves_ids,X + JMP.w .have_item + ..ids + db $1B, $1C, $1C + + .progressive_bow + SEP #$20 + LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : BCC + + LDA.l ProgressiveBowReplacement + JMP.w .get_item + + + LDA.l BowEquipment : TAX + LDA.w ResolveLootID_bows_ids,X + JMP.w .get_item + + .progressive_bow_2 + SEP #$20 + LDA.l BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : BCC + + LDA.l ProgressiveBowReplacement + JMP.w .get_item + + + LDA.l BowEquipment : TAX + LDA.w ResolveLootID_bows_ids,X + JMP.w .get_item + + .bows + ..ids + db $3A, $3B, $3B, $3B, $3B + + .null_chest + ; JSL ChestItemServiceRequest + JMP.w .have_item + + .rng_single + JSL.l GetRNGItemSingle : STA.w ScratchBufferV+6 + XBA : JSR.w MarkRNGItemSingle + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in + LDA.w ScratchBufferV+6 : JMP.w .get_item + + .rng_multi + JSL.l GetRNGItemMulti : STA.w ScratchBufferV+6 + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in + LDA.w ScratchBufferV+6 : JMP.w .get_item - PHB : PHK ; we're skipping the corresponding instructions to grab the data bank - JML.l AddReceivedItem+2 -} ;-------------------------------------------------------------------------------- -;DATA AddReceivedItemExpanded -{ -.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 Silver 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 ; reserved for bee traps - db -4, -4, -4, -4, -4 ; reserved for bonk shuffle - db -4 ; Bomb Upgrade - db -4 ; Cane Upgrade - db -4 ; Bug Net Upgrade - db -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 Silver 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 ; reserved for bee traps - db 0, 0, 0, 0, 0 ; reserved for bonk shuffle - db 0 ; Bomb Upgrade - db 4 ; Cane Upgrade - db 0 ; Bug Net Upgrade - db 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 Silver 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 ; reserved for bee traps - db $49, $49, $49, $49, $49 ; reserved for bonk shuffle - db $13 ; Bomb Upgrade - db $07 ; Cane Upgrade - db $27 ; Bug Net Upgrade - db $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 Silver 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 ; reserved for bee traps - db $02, $02, $02, $02, $02 ; reserved for bonk shuffle - db $02 ; Bomb Upgrade - db $00 ; Cane Upgrade - db $02 ; Bug Net Upgrade - db $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 Silver 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 ; reserved for bee traps - db 4, 4, 4, 4, 4 ; reserved for bonk shuffle - db 5 ; Bomb Upgrade - db 5 ; Cane Upgrade - db 1 ; Bug Net Upgrade - db 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 ; reserved for bee traps - dw $F36A, $F36A, $F36A, $F36A, $F36A ; reserved for bonk shuffle - dw $F38F ; Bomb Upgrade - dw $F38F ; Cane Upgrade - dw $F38F ; Bug Net Upgrade - dw $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 Silver 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 ; reserved for bee traps - db $FF, $FF, $FF, $FF, $FF ; reserved for bonk shuffle - db $FF ; Bomb Upgrade - db $FF ; Cane Upgrade - db $FF ; Bug Net Upgrade - db $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 +DungeonItemMasks: + ; these are dungeon correlations to $7EF364 - $7EF369 so it knows where to store compasses, etc ; sewers and castle get 2 bits active so that they can share their items elegantly dw $C000, $C000, $2000, $1000, $0800, $0400, $0200, $0100 dw $0080, $0040, $0020, $0010, $0008, $0004, $4B8B, $20AB ; last two can be re-used @@ -871,7 +848,8 @@ AddReceivedItemExpanded: dw $040C, $20C2, $C6BD, $0785, $8700, $E200, $8220, $00B0 dw $3EC0, $0AD0, $082C, $1003, $A905, $8D02, $0309, $20C0 dw $44D0 -} + + ;-------------------------------------------------------------------------------- BottleListExpanded: db $16, $2B, $2C, $2D, $3D, $3C, $48 @@ -879,82 +857,43 @@ BottleListExpanded: PotionListExpanded: db $2E, $2F, $30, $FF, $0E ;-------------------------------------------------------------------------------- -Link_ReceiveItemAlternatesExpanded: -{ - db -1, -1, -1, -1, -1, -1, -1, -1 - db -1, -1, -1, -1, -1, -1, -1, -1 ; db -1, -1, -1, -1, $44, -1, -1, -1 - - db -1, -1, $35, -1, -1, -1, -1, -1 - db -1, -1, -1, -1, -1, -1, -1, -1 - - db -1, -1, -1, -1, -1, -1, -1, -1 - db -1, -1, -1, -1, -1, -1, -1, -1 ; db -1, -1, $46, -1, -1, -1, -1, -1 - - db -1, -1, -1, -1, -1, -1, -1, -1 - db -1, -1, -1, -1, -1, -1, -1, -1 - - db -1, -1, -1, -1, -1, -1, -1, -1 - db -1, -1, -1, -1 - - db -1, -1, -1, -1 - db -1 ; Master Sword (Safe) - db -1, -1, -1, -1 ; +5/+10 Bomb Arrows - db -1, -1, -1 ; 3x Programmable Item - db -1 ; Upgrade-Only Silver Arrows - db -1 ; 1 Rupoor - db -1 ; Null Item - db -1, -1, -1 ; Red, Blue & Green Clocks - db -1, -1, -1, -1 ; Progressive Sword, Shield, Armor & Gloves - db -1, -1 ; RNG Single & Multi - db -1, -1 ; Progressive Bow - db -1, -1, -1, -1 ; Unused - db -1, -1 ; Goal Item Single, Multi & Alt Multi - db -1, -1, -1, -1 ; Unused - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Map - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Compass - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Big Key - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Free Small Key - db -1 ; reserved for bee traps - db -1, -1, -1, -1, -1 ; reserved for bonk shuffle - db -1 ; Bomb Upgrade - db -1 ; Cane Upgrade - db -1 ; Bug Net Upgrade - db -1, -1, -1, -1, -1, -1, -1 ; Unused - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused - db -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ; Unused -} -;-------------------------------------------------------------------------------- -.loadAlternate - PHB : PHK : PLB - TYA : JSR AttemptItemSubstitution : STA.b Scrap03 - CPY.b Scrap03 : BNE + : LDA.b #$FF : STA.b Scrap03 : + - PLB -RTL +HandleBowTracking: +; In: A - Item Receipt ID + CMP.b #$64 : BEQ .prog_one + CMP.b #$65 : BEQ .prog_two +RTS + .prog_one + LDA.b #$90 + BRA .done + .prog_two + LDA.b #$A0 + .done + ORA.l BowTracking : STA.l BowTracking + LDA.w ItemReceiptID +RTS ;-------------------------------------------------------------------------------- ;Return BowEquipment but also draw silver arrows if you have the upgrade even if you don't have the bow CheckHUDSilverArrows: - LDA.l ArrowMode : BEQ .normal - .rupee_arrows - JSL.l DrawHUDArrows - LDA.l BowEquipment - RTL - .normal - LDA.l BowEquipment : BNE + - LDA.l BowTracking : AND.b #$40 : BEQ ++ - JSL.l DrawHUDArrows - ++ - LDA.l BowEquipment - + -RTL + LDA.l ArrowMode : BNE .rupee_bow + LDA.l BowEquipment : TAX : BEQ .nobow + JSL.l DrawHUDArrows_normal + TXA + RTL + .rupee_bow + LDA.l BowEquipment : TAX + JSL.l DrawHUDArrows_rupee_arrows + TXA + RTL + .nobow + JSL.l DrawHUDArrows_silverscheck + TXA + RTL ;-------------------------------------------------------------------------------- DrawHUDArrows: -LDA.l ArrowMode : BEQ .normal .rupee_arrows - LDA.l CurrentArrows : BEQ .none ; assuming silvers will increment this. if we go with something else, reorder these checks - LDA.l BowEquipment : BNE + + TXA : BNE + + .silverscheck LDA.l BowTracking : AND.b #$40 : BNE .silver BRA .wooden + CMP.b #03 : !BGE .silver @@ -964,8 +903,12 @@ LDA.l ArrowMode : BEQ .normal LDA.b #$20 : STA.l HUDTileMapBuffer+$21 LDA.b #$A9 : STA.l HUDTileMapBuffer+$22 LDA.b #$20 : STA.l HUDTileMapBuffer+$23 + .skip RTL - .normal ; in normal arrow mode this function is only ever called for silvers + .normal + TXA + CMP.b #$03 : BCS .silver + BRA .wooden .silver LDA.b #$86 : STA.l HUDTileMapBuffer+$20 ; draw silver arrow marker LDA.b #$24 : STA.l HUDTileMapBuffer+$21 @@ -985,7 +928,7 @@ GetRNGItemSingle: LDX.b #$00 .single_reroll JSL.l GetRandomInt : AND.b #$7F ; select random value - INX : CPX.b #$7F : !BLT + : LDA.b #$00 : BRA +++ : + ; default to 0 if too many attempts + INX : CPX.b #$7F : BCC + : LDA.b #$00 : BRA +++ : + ; default to 0 if too many attempts CMP.l RNGSingleTableSize : !BGE .single_reroll +++ @@ -996,9 +939,9 @@ GetRNGItemSingle: TYA JSR.w CheckSingleItem : BEQ .single_unused ; already used LDA.w ScratchBufferV : INC ; increment index - CMP.l RNGSingleTableSize : !BLT +++ : LDA.b #$00 : +++ ; rollover index if needed + CMP.l RNGSingleTableSize : BCC +++ : LDA.b #$00 : +++ ; rollover index if needed STA.w ScratchBufferV ; store index - INX : TAY : TXA : CMP.l RNGSingleTableSize : !BLT .recheck + INX : TAY : TXA : CMP.l RNGSingleTableSize : BCC .recheck LDA.b #$5A ; everything is gone, default to null item - MAKE THIS AN OPTION FOR THIS AND THE OTHER ONE BRA .single_done .single_unused @@ -1050,7 +993,7 @@ GetRNGItemMulti: LDX.b #$00 - ; reroll JSL.l GetRandomInt : AND.b #$7F ; select random value - INX : CPX.b #$7F : !BLT + : LDA.b 00 : BRA .done : + ; default to 0 if too many attempts + INX : CPX.b #$7F : BCC + : LDA.b 00 : BRA .done : + ; default to 0 if too many attempts CMP.l RNGMultiTableSize : !BGE - .done STA.l RNGLockIn @@ -1078,35 +1021,36 @@ IncrementItemCounters: RTS ;-------------------------------------------------------------------------------- AttemptItemSubstitution: - PHX : PHA - LDX.b #$00 - - - LDA.l ItemSubstitutionRules, X - CMP.b #$FF : BEQ .exit - 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 - +: BEQ .exit - .noMatch - INX #4 - BRA - - .exit - PLA : PLX -RTS + PHX : PHA + LDX.b #$00 + - + LDA.l ItemSubstitutionRules, X + CMP.b #$FF : BEQ .exit + CMP.b 1,S : BNE .noMatch + .match + PHX + TXA : LSR #2 : TAX + LDA.l ItemLimitCounts, X + PLX + CMP.l ItemSubstitutionRules+1, X : BCC + + LDA.l ItemSubstitutionRules+2, X : STA.b 1,S + + + BEQ .exit + .noMatch + INX #4 + BRA - + .exit + PLA : PLX +RTL ;-------------------------------------------------------------------------------- CountBottles: PHX LDX.b #$00 - LDA.l BottleContentsOne : BEQ ++ : INX - ++ : LDA.l BottleContentsTwo : BEQ ++ : INX - ++ : LDA.l BottleContentsThree : BEQ ++ : INX - ++ : LDA.l BottleContentsFour : BEQ ++ : INX - ++ + LDA.l BottleContentsOne : BEQ + : INX + + : LDA.l BottleContentsTwo : BEQ + : INX + + : LDA.l BottleContentsThree : BEQ + : INX + + : LDA.l BottleContentsFour : BEQ + : INX + + TXA PLX RTS @@ -1126,130 +1070,84 @@ ChestPrep: LDY.b Scrap0C ; get item value SEC RTL + ;-------------------------------------------------------------------------------- -UpdateInventoryLocationExpanded: -{ - REP #$30 - TYA : AND #$00FF : ASL A : TAX - - ; Tells what inventory location to write to. - LDA.w AddReceivedItemExpanded_item_target_addr, X : STA $00 - - SEP #$30 - - LDA.b #$7E : STA $02 - - LDA.w AddReceivedItemExpanded_item_values, Y - JSL ItemDowngradeFix - RTL -} -;-------------------------------------------------------------------------------- -; Set a flag in SRAM if we pick up a compass in its own dungeon with HUD compass -; counts on MaybeFlagCompassTotalPickup: LDA.l CompassMode : AND.b #$0F : BEQ .done - LDA.w DungeonID : CMP.b #$FF : BEQ .done - LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag "index" - CPY.b #$25 : BEQ .setFlag ; Set flag if it's a compass for this dungeon - STA.b Scrap04 - TYA : AND.b #$0F : CMP.b Scrap04 : BNE .done ; Check if compass is for this dungeon - .setFlag - CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l CompassCountDisplay : STA.l CompassCountDisplay - BRA .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ + : LDA.b #$C0 : + ; Make Hyrule Castle / Sewers Count for Both - ORA.l CompassCountDisplay+1 : STA.l CompassCountDisplay+1 + LDA.w DungeonID : BMI .done + LDA.w ItemReceiptID : CMP.b #$25 : BEQ .set_flag + REP #$20 + AND.w #$000F : ASL : TAX + LDA.w DungeonItemIDMap,X : CMP.w DungeonID : BNE .done + .set_flag + REP #$20 + TYA : ORA.l CompassCountDisplay : STA.l CompassCountDisplay .done RTL + +MaybeFlagMapTotalPickup: + LDA.l MapHUDMode : AND.b #$0F : BEQ .done + LDA.w DungeonID : BMI .done + LDA.w ItemReceiptID : CMP.b #$33 : BEQ .set_flag + REP #$20 + AND.w #$000F : ASL : TAX + LDA.w DungeonItemIDMap,X : CMP.w DungeonID : BNE .done + .set_flag + REP #$20 + TYA : ORA.l MapCountDisplay : STA.l MapCountDisplay + .done +RTL + ;-------------------------------------------------------------------------------- ; Set the dungeon item count display flags if we're entering a dungeon and have the ; corresponding dungeon item MaybeFlagDungeonTotalsEntrance: - LDX.w DungeonID : CPX.b #$FF : BEQ .done ; Skip if we're not entering dungeon - LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts - JSR.w FlagCompassCount - .maps - LDA.l MapHUDMode : AND.w #$000F : BEQ .done - LDX.w DungeonID - JSR.w FlagMapCount + LDX.w DungeonID : BMI .done ; Skip if we're not entering dungeon + REP #$10 + LDA.l DungeonItemMasks,X : TAY + LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts + JSR.w FlagCompassCount + .maps + LDA.l MapHUDMode : AND.w #$000F : BEQ .done + LDX.w DungeonID + JSR.w FlagMapCount .done RTL ;-------------------------------------------------------------------------------- FlagCompassCount: - CMP.w #$0002 : BEQ .compassShown + CMP.w #$0002 : BEQ .compass_shown LDA.l CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass - .compassShown - SEP #$20 - TXA : LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag index - CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l CompassCountDisplay : STA.l CompassCountDisplay - REP #$20 - BRA .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ + : LDA.b #$C0 : + ; Make Hyrule Castle / Sewers Count for Both - ORA.l CompassCountDisplay+1 : STA.l CompassCountDisplay+1 - REP #$20 + .compass_shown + TYA : ORA.l CompassCountDisplay : STA.l CompassCountDisplay .done RTS ;-------------------------------------------------------------------------------- FlagMapCount: CMP.w #$0002 : BEQ .mapShown LDA.l MapField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have map - .mapShown - SEP #$20 - TXA : LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag index - CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l MapCountDisplay : STA.l MapCountDisplay - REP #$20 - BRA .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ + : LDA.b #$C0 : + ; Make Hyrule Castle / Sewers Count for Both - ORA.l MapCountDisplay+1 : STA.l MapCountDisplay+1 - REP #$20 + .mapShown + TYA : ORA.l MapCountDisplay : STA.l MapCountDisplay .done RTS + ;-------------------------------------------------------------------------------- -MaybeFlagMapTotalPickup: - LDA.l MapHUDMode : AND.b #$0F : BEQ .done - LDA.w DungeonID : CMP.b #$FF : BEQ .done - LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag "index" - CPY.b #$33 : BEQ .setFlag ; Set flag if it's a compass for this dungeon - STA.b Scrap04 - TYA : AND.b #$0F : CMP.b Scrap04 : BNE .done ; Check if map is for this dungeon - .setFlag - CMP.b #$08 : !BGE ++ - %ValueShift() - ORA.l MapCountDisplay : STA.l MapCountDisplay - BRA .done - ++ - !SUB #$08 - %ValueShift() - BIT.b #$C0 : BEQ + : LDA.b #$C0 : + ; Make Hyrule Castle / Sewers Count for Both - ORA.l MapCountDisplay+1 : STA.l MapCountDisplay+1 - .done -RTL -;-------------------------------------------------------------------------------- -LoadReceivedItemExpandedProperties: -CPX.b #$B6 : BEQ .bomb_upgrade - LDA.l AddReceivedItemExpanded_properties, X ; load from table - RTL -.bomb_upgrade - LDA.l SpecialWeaponLevel - CMP.b #$01 : BNE + ; L1 Bombs - LDA.b #4 : RTL - + : CMP.b #$02 : BNE + ; L2 Bombs - LDA.b #2 : RTL - + : CMP.b #$03 : BNE + ; L3 Bombs - LDA.b #1 : RTL - + ; Everything Else - LDA.b #5 : RTL +DungeonItemIDMap: ; Maps lower four bits of our new dungeon items to DungeonID +dw $FFFF +dw $FFFF +dw $001A ; GT +dw $0018 ; TR +dw $0016 ; TT +dw $0014 ; TH +dw $0012 ; IP +dw $0010 ; SW +dw $000E ; MM +dw $000C ; PD +dw $000A ; SP +dw $0008 ; CT +dw $0006 ; DP +dw $0004 ; EP +dw $0002 ; HC +dw $0000 ; Sewers + +PendantMasks: +db $04, 01, 02 diff --git a/npcitems.asm b/npcitems.asm index 96c8d43..3206fe5 100644 --- a/npcitems.asm +++ b/npcitems.asm @@ -47,23 +47,23 @@ ItemCheck_SickKid: RTL ItemCheck_TreeKid: - LDA.l NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment + LDA.l NpcFlags : AND.b #$08 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 + TDC ; ?? TODO RTL ItemCheck_TreeKid3: - JSL $0DD030 ; FluteAardvark_Draw - thing we wrote over + JSL $8DD030 ; 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 +74,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: @@ -133,7 +133,7 @@ RTL ItemSet_Mushroom: PHA LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1 - LDY.w SpriteItemType, X ; Retrieve stored item type + LDY.w SpriteID, X ; Retrieve stored item type BNE + ; if for any reason the item value is 0 reload it, just in case %GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY @@ -174,8 +174,12 @@ RTL ; Randomize Zora King ;-------------------------------------------------------------------------------- LoadZoraKingItemGFX: - LDA.l $1DE1C3 ; location randomizer writes zora item to - JML.l PrepDynamicTile + LDA.l $9DE1C3 ; location randomizer writes zora item to + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID,Y + TYX + JML.l PrepDynamicTile_loot_resolved ;-------------------------------------------------------------------------------- JumpToSplashItemTarget: LDA.w SpriteMovement, X @@ -186,18 +190,21 @@ JumpToSplashItemTarget: ; Randomize Catfish ;-------------------------------------------------------------------------------- LoadCatfishItemGFX: - LDA.l $1DE185 ; location randomizer writes catfish item to - JML PrepDynamicTile + LDA.l $9DE185 ; location randomizer writes catfish item to + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.w SpriteID, Y + TYX + JML.l PrepDynamicTile_loot_resolved ;-------------------------------------------------------------------------------- DrawThrownItem: LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish .zora LDA.b #$01 : STA.l RedrawFlag - LDA.l $1DE1C3 ; location randomizer writes zora item to BRA .draw .catfish - LDA.l $1DE185 ; location randomizer writes catfish item to .draw + LDA.w SpriteID,X JML DrawDynamicTile ;-------------------------------------------------------------------------------- MarkThrownItem: diff --git a/overworldmap.asm b/overworldmap.asm new file mode 100644 index 0000000..e828790 --- /dev/null +++ b/overworldmap.asm @@ -0,0 +1,143 @@ +pushpc + +org $0AC02B +DrawPrizesOverride: +LDX.b #$FF + +.loopStart + INX : PHX + JSR OverworldMap_CheckForPrize + BCC + : JMP .skip_draw : + + + TXA : ASL A : TAX + LDA.l MapCompassFlag + AND #$01 : BNE + + LDA.l WorldMapIcon_posx_vanilla+1, X : STA.l $7EC10B + LDA.l WorldMapIcon_posx_vanilla, X : STA.l $7EC10A + LDA.l WorldMapIcon_posy_vanilla+1, X : STA.l $7EC109 + LDA.l WorldMapIcon_posy_vanilla, X : STA.l $7EC108 + BRA .adjustment + + LDA.l WorldMapIcon_posx_located+1, X : STA.l $7EC10B + LDA.l WorldMapIcon_posx_located, X : STA.l $7EC10A + LDA.l WorldMapIcon_posy_located+1, X : STA.l $7EC109 + LDA.l WorldMapIcon_posy_located, X : STA.l $7EC108 + .adjustment + LDA.l WorldMapIcon_tile, X : CMP #$FF : BEQ .skip_draw + LDA.l WorldMapIcon_tile+1, X : BEQ .dont_adjust + CMP.b #$64 : BEQ .is_crystal + LDA.b $1A : AND.b #$10 : BNE .skip_draw + .is_crystal + JSR.w WorldMapIcon_AdjustCoordinate + .dont_adjust + JSR.w WorldMap_CalculateOAMCoordinates + BCC .skip_draw + PLX : PHX : TXA : ASL A : TAX + LDA.l WorldMapIcon_tile+1, X : BEQ .is_red_x + LDA.l MapCompassFlag : CMP.b #$01 : BEQ .is_red_x + LDA.l WorldMapIcon_tile+1, X : STA.b $0D + LDA.l WorldMapIcon_tile, X : STA.b $0C + LDA.b #$02 : BRA .continue + .is_red_x + LDA.b $1A : LSR #3 : AND.b #$03 : TAX + LDA.l WorldMap_RedXChars,X : STA.b $0D + LDA.b #$32 : STA.b $0C : LDA.b #$00 + .continue + STA.b $0B + PLX : PHX + INX : JSR.w WorldMap_HandleSpriteBlink + .skip_draw + ; end of loop + PLX : CPX #12 : BCS + : JMP .loopStart : + + + PLA : STA.l $7EC10B + PLA : STA.l $7EC10A + PLA : STA.l $7EC109 + PLA : STA.l $7EC108 + RTS + + +; X - the index of the prize marker +OverworldMap_CheckForPrize: +PHX + LDA #$00 : STA.l MapCompassFlag + JSR OverworldMap_CheckForCompass + BCC + + LDA.l MapCompassFlag : ORA #$01 : STA.l MapCompassFlag + LDA CurrentWorld : AND #$40 : BNE ++ ; is the compass position on LW or DW? + LDA.l WorldCompassMask, X : BEQ + : JMP .fail + ++ LDA.l WorldCompassMask, X : BNE + : JMP .fail + + JSR OverworldMap_CheckForMap + BCC + + LDA.l MapCompassFlag : ORA #$02 : STA.l MapCompassFlag + + + LDA.l MapCompassFlag : BEQ .fail + CMP #$02 : BNE .checkIfObtained + LDA CurrentWorld : AND #$40 : BNE + + CPX #3 : BCS .fail : BRA .checkIfObtained + + CPX #10 : BCS .fail + CPX #3 : BCC .fail + + .checkIfObtained + LDA.l MC_DungeonIdsForPrize, X + BPL +++ : CLC : BRA .done : +++ ; non-prize flags + CMP.b #$02 : BCC .hyrule_castle + ASL : TAX + REP #$20 + LDA.l DungeonsCompleted : AND.l DungeonItemMasks,X : BNE .fail + CLC : BRA .done + + ; see if hyrule castle has been completely cleared + .hyrule_castle + LDA.l CompassTotalsWRAM, X : SEC : SBC DungeonLocationsChecked, X : BEQ .fail + CLC : BRA .done + + .fail + SEC +.done +SEP #$20 +PLX +RTS + +; X - which compass in question +; CLC - should not move indicator +; SEC - yep indicator can move +OverworldMap_CheckForCompass: + LDA.l CompassMode : AND #$80 : BEQ .unset ; should I check for compass logic + LDA.l CompassMode : AND #$40 : BEQ .set ; compasses/maps aren't shuffled + LDA.l CompassMode : AND #$20 : BNE + + JSR OverworldMap_CheckForMap : BCC .unset : BRA .set + + LDA.l CompassExists, X : BEQ .set ; compass doesn't exist + PHX + LDA.l MC_SRAM_Offsets, X : TAX ; put compass offset into X + LDA CompassField, X : ORA MapOverlay, X + PLX + AND.l MC_Masks, X : BNE .set ; is the compass obtained +.unset +CLC +RTS +.set +SEC +RTS + +; map - which map in question +; CLC - should not show exact prize +; SEC - yep should show exact prize +OverworldMap_CheckForMap: + LDA.l MapMode : BEQ .set ; obtaining map doesn't change anything + LDA CurrentWorld : AND #$40 : BNE + ; not really sure on this check + LDA MapField : ORA MapOverlay : AND.b #$01 : BNE .set : BRA .continue + + LDA MapField : ORA MapOverlay : AND.b #$02 : BNE .set +.continue + PHX + LDA.l MC_SRAM_Offsets, X : TAX ; put map offset into X + LDA MapField, X : ORA MapOverlay, X + PLX + AND.l MC_Masks, X : BNE .set ; is the map obtained? +.unset +CLC +RTS +.set +SEC +RTS + +pullpc diff --git a/password.asm b/password.asm index edf77c7..d56936a 100644 --- a/password.asm +++ b/password.asm @@ -1,7 +1,7 @@ Module_Password: LDA.b GameSubMode - JSL.l UseImplicitRegIndexedLongJumpTable + JSL.l JumpTableLong dl Password_BeginInit ; 0 dl Password_EndInit ; 1 diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index da24319..2365290 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -17,18 +17,20 @@ RTL ;================================================================================ HUDRebuildIndoorHole: PHA + INC.w UpdateHUD LDA.l GenericKeys : BEQ .normal .generic PLA LDA.l CurrentGenericKeys ; generic key count - JSL.l HUD_RebuildIndoor_Palace + JSL.l HUD_RebuildIndoor_Palace RTL .normal PLA - JSL.l HUD_RebuildIndoor_Palace + JSL.l HUD_RebuildIndoor_Palace RTL ;================================================================================ HUDRebuildIndoor: + INC.w UpdateHUD LDA.l GenericKeys : BEQ .normal .generic LDA.b #$00 : STA.l RoomDarkness @@ -49,70 +51,6 @@ GetCrystalNumber: PLX RTL ;================================================================================ -OverworldMap_CheckObject: - PHX - ;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail - LDA.l CurrentWorld : AND.b #$40 : BNE + - ;LW Map - LDA.l MapMode : BEQ +++ - LDA.l MapField : ORA.l MapOverlay : AND.b #$01 : BNE +++ - PHX - LDA.l .lw_map_offsets, X : TAX ; put map offset into X - LDA.l MapField, X : ORA.l MapOverlay, X - PLX - AND.l .lw_map_masks, X : BNE +++ - JMP .fail - +++ - LDA.l .lw_offsets, X - BPL +++ : CLC : BRA .done : +++ ; don't display master sword - TAX : BRA ++ - + - ;DW Map - LDA.l MapMode : BEQ +++ - LDA.l MapField : ORA.l MapOverlay : AND.b #$02 : BNE +++ - PHX - LDA.l .dw_map_offsets, X : TAX ; put map offset into X - LDA.l MapField, X : ORA.l MapOverlay, X - PLX - AND.l .dw_map_masks, X : BNE +++ - JMP .fail - +++ - LDA.l .dw_offsets, X - TAX : BRA ++ - SEC - PLX -RTL -++ - LDA.l CrystalPendantFlags_2, X - AND.b #$40 : BNE .checkCrystal - - .checkPendant - LDA.l PendantsField : AND.l CrystalPendantFlags, X : BNE .fail - CLC : BRA .done - - .checkCrystal - LDA.l CrystalsField : AND.l CrystalPendantFlags, X : BNE .fail - CLC : BRA .done - - .fail - SEC - .done - PLX -RTL -.lw_offsets -db $02, $0A, $03, $FF -.dw_offsets -db $06, $08, $0C, $0B, $07, $09, $05 -.lw_map_offsets -db $01, $00, $01 -; pod skull trock thieves mire ice swamp -.dw_map_offsets -db $01, $00, $00, $00, $01, $00, $01 -.lw_map_masks -db $20, $20, $10, $00 -.dw_map_masks -db $02, $80, $08, $10, $01, $40, $04 -;================================================================================ SetLWDWMap: PHP SEP #$20 ; set 8-bit accumulator @@ -173,31 +111,39 @@ CheckCloseItemMenu: LDA.l MenuCollapse : BNE + LDA.b Joy1A_New : AND.b #$10 : RTL + - LDA.b Joy1A_All : AND.b #$10 : EOR.b #$10 + LDA.b Joy1A_All : EOR.b #$10 RTL ;================================================================================ ShowDungeonItems: - REP #$30 - LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave - LDA.l HudFlag : AND.w #$0020 ; check hud flag - BEQ + : LDA.w #$0000 : RTL : + ; if set, send the zero onwards - LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF ; original logic + LDA.w DungeonID-1 : BMI .no_dungeon + LDA.l HudFlag : AND.w #$0040 : BEQ + + .no_dungeon + LDA.w #$0000 + RTL + + + LDA.w DungeonID + REP #$02 + .done RTL ;-------------------------------------------------------------------------------- UpdateKeys: - PHX : PHP - SEP #$30 ; set 8-bit accumulator & index registers - LDA.w DungeonID : CMP.b #$1F : !BGE .skip - LSR : TAX ; get dungeon index and store to X - LDA.l CurrentSmallKeys : STA.l DungeonKeys, X - - CPX.b #$00 : BNE + - STA.l HyruleCastleKeys ; copy HC to sewers - + : CPX.b #$01 : BNE + - STA.l SewerKeys ; copy sewers to HC - + - .skip - PLP : PLX + 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 RTL ;$37C = Sewer Passage ;$37D = Hyrule Castle @@ -248,7 +194,7 @@ RTL ;-------------------------------------------------------------------------------- DrawHUDDungeonItems: LDA.l HUDDungeonItems : BNE .continue - RTL +RTL .dungeon_positions dw 0 ; Hyrule Castle @@ -282,7 +228,7 @@ DrawHUDDungeonItems: .dungeon_bitmasks - dw $4000 ; Hyrule Castle + dw $C000 ; Hyrule Castle dw $2000 ; Eastern dw $1000 ; Desert dw $0020 ; Hera @@ -311,28 +257,19 @@ DrawHUDDungeonItems: dw $A4*2 ; ; Turtle Rock dw $0D*2 ; ; Ganon's Tower -.continue - PHP - - PHB - PHK - PLB - - REP #$30 - + .continue + PHP : PHB + PHK : PLB + REP #$30 ;------------------------------------------------------------------------------- ; dungeon names LDA.w #$2D50 - LDY.w #00 - -.next_dungeon_name + .next_dungeon_name LDX.w .dungeon_positions,Y STA.w GFXStripes+$0646,X - INC - INY : INY CPY.w #26 : BCC .next_dungeon_name @@ -344,163 +281,138 @@ DrawHUDDungeonItems: STA.w GFXStripes+$06C6,X STA.w GFXStripes+$0706,X - DEX : DEX : BPL -- - + DEX : DEX + BPL -- LDA.l HudFlag : AND.w #$0020 : BEQ + - - JMP .maps_and_compasses - -+ + JMP .maps_and_compasses ;------------------------------------------------------------------------------- + + + LDA.l HUDDungeonItems : AND.w #$0001 : BNE + + LDA.w #$24F5 : STA.w GFXStripes+$0684 ; blank tile + BRA .skip_small_keys + + + .draw_small_keys + LDA.w #$2810 : STA.w GFXStripes+$0684 ; small keys icon + LDY.w #0 + CLC - LDA.l HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys + .next_small_key + LDX.w .small_key_x_offset,Y + LDA.l DungeonKeys,X + AND.w #$00FF -.draw_small_keys - LDA.w #$2810 : STA.w GFXStripes+$0684 ; small keys icon + LDX.w .dungeon_positions,Y + ADC.w #$2816 + STA.w GFXStripes+$0686,X - LDY.w #0 - - ; Clear the carry only once - ; it will be cleared by looping condition afterwards - CLC - -.next_small_key - LDX.w .small_key_x_offset,Y - LDA.l DungeonKeys,X - AND.w #$00FF - - LDX.w .dungeon_positions,Y - ADC.w #$2816 - STA.w GFXStripes+$0686,X - - INY : INY - CPY.w #26 : BCC .next_small_key + INY : INY + CPY.w #26 : BCC .next_small_key ;------------------------------------------------------------------------------- -.skip_small_keys + .skip_small_keys + ; Big Keys + LDA.l HUDDungeonItems : AND.w #$0002 : BNE + + LDA.w #$24F5 : STA.w GFXStripes+$06C4 ; blank tile + BRA .skip_big_keys + + + LDA.w #$2811 : STA.w GFXStripes+$06C4 ; big key icon + LDX.w #0 + LDA.l BigKeyField - ; Big Keys - LDA.l HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys + .next_big_key + BIT.w .dungeon_bitmasks,X + BEQ ..skip_key + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w GFXStripes+$06C6,Y + LDA.l BigKeyField - LDA.w #$2811 : STA.w GFXStripes+$06C4 ; big key icon - - ; use X so we can BIT - LDX.w #0 - - ; load once and test multiple times - LDA.l BigKeyField - -.next_big_key - BIT.w .dungeon_bitmasks,X - BEQ ..skip_key - - LDY.w .dungeon_positions,X - LDA.w #$2826 - STA.w GFXStripes+$06C6,Y - - ; reload - LDA.l BigKeyField - -..skip_key - INX : INX - CPX.w #26 : BCC .next_big_key + ..skip_key + INX : INX + CPX.w #26 : BCC .next_big_key ;------------------------------------------------------------------------------- -.skip_big_keys + .skip_big_keys + LDA.l HUDDungeonItems : AND.w #$0010 : BNE + + LDA.w #$24F5 : STA.w GFXStripes+$0704 ; blank tile + BRA .skip_boss_kills + + + LDA.w #$280F : STA.w GFXStripes+$0704 ; skull icon + LDY.w #0 - LDA.l HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills - LDA.w #$280F : STA.w GFXStripes+$0704 ; skull icon - LDY.w #0 + .next_boss_kill + LDX.w .boss_room_ids,Y + LDA.l RoomDataWRAM.l,X + AND.w #$0800 + BEQ ..skip_boss_kill + LDA.w #$2826 + LDX.w .dungeon_positions,Y + STA.w GFXStripes+$0706,X + ..skip_boss_kill + INY : INY + CPY.w #26 : BCC .next_boss_kill -.next_boss_kill - LDX.w .boss_room_ids,Y - LDA.l RoomDataWRAM.l,X - AND.w #$0800 - BEQ ..skip_boss_kill +;------------------------------------------------------------------------------- + .skip_boss_kills + LDA.l HUDDungeonItems : BIT.w #$00F3 : BEQ .maps_and_compasses + JMP .exit +;------------------------------------------------------------------------------- + .maps_and_compasses + LDA.w #$24F5 : STA.w GFXStripes+$0704 ; blank tile boss icon + ; Maps + LDA.l HUDDungeonItems : AND.w #$0004 : BNE + + LDA.w #$24F5 : STA.w GFXStripes+$0684 ; map icon + BRA .skip_maps + + + LDA.w #$2821 : STA.w GFXStripes+$0684 ; map icon + LDX.w #0 + LDA.l MapField - LDA.w #$2826 - LDX.w .dungeon_positions,Y - STA.w GFXStripes+$0706,X + .next_map + BIT.w .dungeon_bitmasks,X + BEQ ..skip_map -..skip_boss_kill - INY : INY - CPY.w #26 : BCC .next_boss_kill + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w GFXStripes+$0686,Y + LDA.l MapField + + ..skip_map + INX : INX + CPX.w #26 : BCC .next_map + + .skip_maps + LDA.l HUDDungeonItems : AND.w #$0008 : BNE + + LDA.w #$24F5 : STA.w GFXStripes+$06C4 ; blank tile + BRA .skip_compasses + + + LDA.w #$2C20 : STA.w GFXStripes+$06C4 ; compass icon + LDX.w #0 + LDA.l CompassField + + .next_compass + BIT.w .dungeon_bitmasks,X + BEQ ..skip_compass + + LDY.w .dungeon_positions,X + LDA.w #$2826 + STA.w GFXStripes+$06C6,Y + LDA.l CompassField + + ..skip_compass + INX : INX + CPX.w #26 : BCC .next_compass ;------------------------------------------------------------------------------- -.skip_boss_kills - JMP .exit - -;------------------------------------------------------------------------------- - - ; This should only display if select is pressed in hud - .maps_and_compasses - - ; Maps - LDA.l HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps - LDA.w #$2821 : STA.w GFXStripes+$0684 ; map icon - - ; use X so we can BIT - LDX.w #0 - - ; load once and test multiple times - LDA.l MapField - -.next_map - BIT.w .dungeon_bitmasks,X - BEQ ..skip_map - - LDY.w .dungeon_positions,X - LDA.w #$2826 - STA.w GFXStripes+$0686,Y - - ; reload - LDA.l MapField - -..skip_map - INX : INX - CPX.w #26 : BCC .next_map - -;------------------------------------------------------------------------------- - -.skip_maps - - ; Compasses - LDA.l HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses - LDA.w #$2C20 : STA.w GFXStripes+$06C4 ; compass icon - - ; use X so we can BIT - LDX.w #0 - - ; load once and test multiple times - LDA.l CompassField - -.next_compass - BIT.w .dungeon_bitmasks,X - BEQ ..skip_compass - - LDY.w .dungeon_positions,X - LDA.w #$2826 - STA.w GFXStripes+$06C6,Y - - ; reload - LDA.l CompassField - -..skip_compass - INX : INX - CPX.w #26 : BCC .next_compass - -;------------------------------------------------------------------------------- - -.skip_compasses - -.exit - PLB - PLP + .skip_compasses + .exit + PLB + PLP RTL ;-------------------------------------------------------------------------------- ;================================================================================ @@ -656,15 +568,19 @@ HandleEmptyMenu: LDA.b Joy1A_New : BIT.b #$DF : BNE .close_menu ; Not select, close menu BIT.b #$20 : BNE .sel_pressed LDA.b Joy1A_All : BIT.b #$20 : BNE .wait_for_change - LDA.l HudFlag : AND.b #$20 : BEQ .wait_for_change ; HUD flag off, skip drawing work - LDA.l HudFlag : AND.b #$DF : STA.l HudFlag ; Unset without select - LDA.b IndoorsFlag : BEQ ++ ; skip if outdoors - LDA.b #$20 : STA.w SFX3 - ++ - LDA.b #$0C : BRA .done + LDA.l HudFlag : AND.b #$60 : BEQ .wait_for_change + LDA.l HudFlag : AND.b #$9F : STA.l HudFlag ; Unset without select + JSL.l MaybePlaySelectSFX + LDA.b #$0C : BRA .done .sel_pressed - LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag - LDA.b #$20 : STA.w SFX3 + LDA.l HUDDungeonItems : BIT.b #$0C : BNE + + LDA.b #$40 + BRA .store_flag + + + LDA.b #$60 + .store_flag + STA.l HudFlag + JSL.l MaybePlaySelectSFX LDA.b #$0C : BRA .done .wait_for_change LDA.b #$03 : BRA .done @@ -687,3 +603,40 @@ RestoreMenu_SetSubModule: + LDA.b #$03 : STA.w SubModuleInterface RTL +;------------------------------------------------------------------------------- +DrawHeartPiecesMenu: + LDA.l HUDHeartColors_index : AND.w #$00FF + ASL : TAX + LDA.l HUDHeartColors_masks_game_hud,X + STA.b Scrap0D + + LDA.l HeartPieceQuarter : AND.w #$00FF + ASL #3 : TAX + LDY.w #$16F2 + + LDA.l HeartPieceMenuBaseTiles,X + ORA.b Scrap0D + STA.w $0000,Y + + INX #2 + LDA.l HeartPieceMenuBaseTiles,X + ORA.b Scrap0D + STA.w $0002,Y + + INX #2 + LDA.l HeartPieceMenuBaseTiles,X + ORA.b Scrap0D + STA.w $0040,Y + + INX #2 + LDA.l HeartPieceMenuBaseTiles,X + ORA.b Scrap0D + STA.w $0042,Y +RTL + +HeartPieceMenuBaseTiles: +dw $2084, $6084, $2085, $6085 ; 0 heart pieces +dw $20AD, $6084, $2085, $6085 ; 1 heart piece +dw $20AD, $6084, $20AE, $6085 ; 2 heart pieces +dw $20AD, $60AD, $20AE, $6085 ; 3 heart pieces +;------------------------------------------------------------------------------- diff --git a/playername.asm b/playername.asm index 426d61c..58ef1bc 100644 --- a/playername.asm +++ b/playername.asm @@ -26,7 +26,7 @@ WriteCharacterToPlayerName: RTL ReadCharacterFromPlayerName: ;Only for use on Name Screen - LDA.l ExtendedFileNameSRAM, X + LDA.l ExtendedFileNameSRAM, X CPX.w #$0008 : !BGE + LDA.l FileNameVanillaSRAM, X ;what we wrote over + @@ -59,7 +59,7 @@ db $98, $a0, $a8, $b0 db $c0, $c8, $d0, $d8 -NumberStripes: +NewNameStripes: dw $AB66, $1100 ; 0-4 top dw $1D40, $0188, $1D41, $0188, $1D42, $0188, $1D43, $0188 dw $1D44 @@ -72,15 +72,36 @@ dw $1D49 dw $0B67, $1100 ; 5-9 bottom dw $1D55, $0188, $1D56, $0188, $1D57, $0188, $1D58, $0188 dw $1D59 + +; Move JP characters where a-z are to column where second END button was +dw $B162, $1100 +dw $1CEE, $0188, $1CEF, $0188, $1D05, $0188, $1D06, $0188 +dw $1D07 +dw $D162, $1100 +dw $1CFE, $0188, $1CFF, $0188, $1D15, $0188, $1D16, $0188 +dw $1D17 +dw $F162, $1100 +dw $1D0D, $0188, $1D0E, $0188, $1D0F, $0188, $1D20, $0188 +dw $1D21 +dw $1163, $1100 +dw $1D1D, $0188, $1D1E, $0188, $1D1F, $0188, $1D30, $0188 +dw $1D31 +dw $3163, $1100 +dw $1D22, $0188, $1D23, $0188, $1D24, $0188, $1D25, $0188 +dw $1D26 +dw $5163, $1100 +dw $1D32, $0188, $1D33, $0188, $1D34, $0188, $1D35, $0188 +dw $1D36 + db $80 ; termination -TransferNumericStripes: +TransferNewNameStripes: REP #$30 LDA.w GameMode : CMP.w #$0204 : BNE .exit SEP #$20 - LDA.b #NumberStripes>>0 : STA.b $00 - LDA.b #NumberStripes>>8 : STA.b $01 - LDA.b #NumberStripes>>16 : STA.b $02 : STA.w DMA1ADDRB + LDA.b #NewNameStripes>>0 : STA.b $00 + LDA.b #NewNameStripes>>8 : STA.b $01 + LDA.b #NewNameStripes>>16 : STA.b $02 : STA.w DMA1ADDRB STZ.b $06 : LDY.w #$0000 .check_next LDA.b [$00],Y : BPL .next_stripe diff --git a/ram.asm b/ram.asm index 0b75f5f..bd89cbf 100644 --- a/ram.asm +++ b/ram.asm @@ -48,6 +48,8 @@ NMIHUD = $7E0016 ; during NMI. NMIINCR = $7E0017 ; NMIUP1100 = $7E0018 ; UPINCVH = $7E0019 ; Incremental upload VRAM high byte +LinkAbsoluteY = $7E0020 ; Link's absolute coordinates. Word length +LinkAbsoluteX = $7E0022 ; FrameCounter = $7E001A ; Increments every frame that the game isn't lagging IndoorsFlag = $7E001B ; $00 = Outdoors | $01 = Indoors MAINDESQ = $7E001C ; PPU register queues written during NMI @@ -186,6 +188,15 @@ RaceGameFlag = $7E021B ; ; MessageJunk = $7E0223 ; Zeroed but never used (?) ; +ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt. +;CoolScratch = $7E0224 ; 0x5C bytes of free ram +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. +AncillaVelocityZ = $7E0294 ; 0x0A bytes +AncillaZCoord = $7E029E ; 0x0A bytes + ; ItemReceiptID = $7E02D8 ; ItemReceiptPose = $7E02DA ; $00 = No pose | $01 = One hand up | $02 = Two hands up ; @@ -193,7 +204,7 @@ BunnyFlag = $7E02E0 ; $00 = Link | $01 = Bunny Poofing = $7E02E1 ; Flags cape and bunny poof. PoofTimer = $7E02E2 ; Countdown timer for poofing. SwordCooldown = $7E02E3 ; Cooldown for sword after dashing through an enemy. -CutsceneFlag = $7E02E4 ; Flags various cutscenes. All non-zero behave the same. +CutsceneFlag = $7E02E4 ; Flags various cutscenes. ; ItemReceiptMethod = $7E02E9 ; ; @@ -221,6 +232,8 @@ NoDamage = $7E037B ; Prevents Link from receiving damage. ; AncillaGeneral = $7E039F ; General use buffer for front slot ancillae. $0F bytes. ; +AncillaTimer = $7E03B1 ; Used as a timer for ancilla. + ; AncillaSearch = $7E03C4 ; Used to search through ancilla when every front slot is occupied. ; ForceSwordUp = $7E03EF ; $01 = Force sword up pose. @@ -228,7 +241,7 @@ FluteTimer = $7E03F0 ; Countdown timer for being able to use the fl ; YButtonOverride = $7E03FC ; Y override for minigames. $00 = Selected item | $01 = Shovel | $02 = Bow ; -ItemsTaken = $7E0403 ; Items taken in a room: b k u t s e h c +RoomItemsTaken = $7E0403 ; Items taken in a room: b k u t s e h c ; b = boss kill/item | k = key/heart piece (prevents crystals) ; u = 2nd key/heart piece | t = chest 4/rupees/swamp drain/bomb floor/mire wall ; s = chest 3/pod or dp wall | e, h, c = chest 2, 1, 0 @@ -262,8 +275,19 @@ TileMapTile32 = $7E0698 ; Tilemap location of new tile32 objects, such SkipOAM = $7E0710 ; Set to skip OAM updates. High byte written $FF with exploding walls OWScreenSize = $7E0712 ; Flags overworld screen size. ; +OAMBuffer = $7E0800 ; Main OAM buffer sent to OAM. $200 bytes. +OAMBuffer2 = $7E0A00 ; + ; +TransparencyFlag = $7E0ABD ; Flags transparency effects e.g. in Thieves Town Hellway + ; 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 +ItemGFXTarget = $7E0AFC ; target VRAM address + ; ArcVariable = $7E0B08 ; Arc variable. Word length. OverlordXLow = $7E0B08 ; $08 bytes. OverlordXHigh = $7E0B10 ; $08 bytes. @@ -279,6 +303,11 @@ SaveFileIndex = $7E0B9D ; ; SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes. ; +AncillaCoordYLow = $7E0BFA ; +AncillaCoordXLow = $7E0C04 ; +AncillaCoordYHigh = $7E0C0E ; +AncillaCoordXHigh = $7E0C18 ; + ; AncillaVelocityY = $7E0C22 ; $0A bytes. AncillaVelocityX = $7E0C2C ; $0A bytes. ; @@ -286,6 +315,8 @@ AncillaID = $7E0C4A ; $0A bytes. ; AncillaGet = $7E0C5E ; Used by varius ancilla in various ways. $0F bytes. ; +AncillaLayer = $7E0C7C ; + ; SpriteBump = $7E0CD2 ; See symbols_wram.asm. $10 bytes. ; TreePullKills = $7E0CFB ; Kills for tree pulls. @@ -316,7 +347,7 @@ SpriteOAMProperties = $7E0E40 ; h m w o o o o o | h = Harmless | m = m SpriteHitPoints = $7E0E50 ; Set from $0DB173 SpriteControl = $7E0E60 ; n i o s p p p t | n = Death animation? | i = Immune to attack/collion? ; o = Shadow | p = OAM prop palette | t = OAM prop name table -SpriteItemType = $7E0E80 ; Sprite Item Type. $10 bytes. +SpriteItemType = $7E0E80 ; Sprite Item Type. Also used for jump table local. $10 bytes. ; SpriteSpawnStep = $7E0ED0 ; Related to enemies spawning other sprites (eg pikit, zirro) ; @@ -333,6 +364,8 @@ SpriteZCoord = $7E0F70 ; SpriteVelocityZ = $7E0F80 ; SpriteSubPixelZ = $7E0F90 ; ; +CurrentSpriteSlot = $7E0FA0 ; Holds the current sprite/ancilla's index + ; FreezeSprites = $7E0FC1 ; "Seems to freeze sprites" ; PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack. @@ -354,6 +387,8 @@ DelayTimer = $7E1CE9 ; ; TextID = $7E1CF0 ; Message ID and page. Word length. ; +UpdateHUD = $7E1E03 ; Flag used to mark HUD updates and avoid heavy code segments. + ; ToastBuffer = $7E1E0E ; Multiworld buffer. Word length. ; MSUResumeTime = $7E1E6B ; Mirrored MSU block @@ -381,6 +416,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 @@ -439,12 +476,18 @@ HUDArrowCount = $7EC760 ; HUDKeyDigits = $7EC764 ; ; BigRAM = $7EC900 ; Big buffer of free ram (0x1F00) +ItemGFXStack = $7ECB00 ; Pointers to source of decompressed item tiles deferred to NMI loading. +ItemGFXSBankStack = $7ECB20 ; Source bank byte for above. +ItemTargetStack = $7ECB40 ; Pointers to VRAM targets for ItemGFXStack. +TotalItemCountTiles = $7ECF00 ; Cached total item count tiles for HUD. Four words high to low. ;================================================================================ ; Bank 7F ;-------------------------------------------------------------------------------- DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes. +DecompBuffer2 = $7F4000 ; Another buffer + base $7F5000 RedrawFlag: skip 1 ; skip 2 ; Unused @@ -461,15 +504,16 @@ BossKills: skip 1 ; LagTime: skip 4 ; Computed during stats preparation for display RupeesCollected: skip 2 ; Computed during stats preparation for display NonChestCounter: skip 2 ; Computed during stats preparation for display -skip 2 ; Unused +BowTrackingFlags: skip 2 ; Stores tracking bits for progressive bows before resolution to concrete item. TileUploadOffsetOverride: skip 2 ; Offset override for loading sprite gfx skip 3 ; skip 9 ; ; Shop Block $7F5050 - $7F506F ShopId: skip 1 ; Shop ID. Used for indexing and loading inventory for custom shops ShopType: skip 1 ; Shop type. $FF = vanilla shop - ; t - - - - - - - - ; t = Take-any + ; t d a v - - q q + ; t = $01 - Take-any | d = $01 - Door check | a = $01 = Take-all + ; v = Use alt vram | q = Number of items ShopInventory: skip $0D ; For three possible shop items, row major: ; [Item ID][Price low][Price High][Purchase Count] ShopState: skip 1 ; - - - - - l c r | Bitfield that determines whether to draw an item @@ -525,7 +569,7 @@ OHKOFlag: skip 1 ; Any non-zero write sets OHKO mode SpriteSwapper: skip 1 ; Loads new link sprite and glove/armor palette. No gfx or ; code currently in base ROM for this. BootsModifier: skip 1 ; $01 = Give dash ability -skip 1 ; Unused +OHKOCached: skip 1 ; "Old" OHKO flag state. Used to detect changes. ; Crypto Block ($7F50D0 - $7F51FF) KeyBase: skip $10 ; y: skip 4 ; @@ -548,13 +592,17 @@ CompassTotalsWRAM: skip $10 ; \ Compass and map dungeon HUD display total MapTotalsWRAM: skip $10 ; / on boot for tracking. skip $30 ; Reserved for general dungeon tracking data. May have over ; allocated here. Feel free to reassign. -skip $40 ; Unused +MapCompassFlag: skip 2 ; Used to flag overworld map drawing. +skip $3E ; Unused skip $260 ; Unused 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. @@ -703,7 +751,7 @@ endmacro %assertRAM(ForceSwordUp, $7E03EF) %assertRAM(FluteTimer, $7E03F0) %assertRAM(YButtonOverride, $7E03FC) -%assertRAM(ItemsTaken, $7E0403) +%assertRAM(RoomItemsTaken, $7E0403) %assertRAM(DungeonID, $7E040C) %assertRAM(LayerAdjustment, $7E047A) %assertRAM(RoomIndexMirror, $7E048E) @@ -722,6 +770,9 @@ endmacro %assertRAM(TileMapTile32, $7E0698) %assertRAM(SkipOAM, $7E0710) %assertRAM(OWScreenSize, $7E0712) +%assertRAM(OAMBuffer, $7E0800) +%assertRAM(OAMBuffer2, $7E0A00) +%assertRAM(TransparencyFlag, $7E0ABD) %assertRAM(OWTransitionFlag, $7E0ABF) %assertRAM(TreePullKills, $7E0CFB) %assertRAM(TreePullHits, $7E0CFC) @@ -738,6 +789,7 @@ endmacro %assertRAM(AncillaVelocityX, $7E0C2C) %assertRAM(AncillaID, $7E0C4A) %assertRAM(AncillaGet, $7E0C5E) +%assertRAM(AncillaLayer, $7E0C7C) %assertRAM(SpriteBump, $7E0CD2) %assertRAM(SpritePosYLow, $7E0D00) %assertRAM(SpritePosXLow, $7E0D10) @@ -796,6 +848,7 @@ endmacro %assertRAM(SpriteZCoord, $7E0F70) %assertRAM(SpriteVelocityZ, $7E0F80) %assertRAM(SpriteSubPixelZ, $7E0F90) +%assertRAM(CurrentSpriteSlot, $7E0FA0) %assertRAM(FreezeSprites, $7E0FC1) %assertRAM(PrizePackIndexes, $7E0FC7) %assertRAM(SpriteCoordCacheX, $7E0FD8) @@ -915,6 +968,7 @@ endmacro %assertRAM(TxStatus, $7F53FF) %assertRAM(CompassTotalsWRAM, $7F5410) %assertRAM(MapTotalsWRAM, $7F5420) +%assertRAM(MapCompassFlag, $7F5460) %assertRAM(DialogBuffer, $7F5700) %assertRAM(MiniGameTime, $7FFE00) %assertRAM(MiniGameTimeFinal, $7FFE04) diff --git a/retro.asm b/retro.asm index ded4fd3..170723a 100644 --- a/retro.asm +++ b/retro.asm @@ -12,6 +12,7 @@ LoadBombCount16: RTL StoreBombCount: JSL IncrementBombsPlacedCounter + INC.w UpdateHUD PHA : LDA.l InfiniteBombs : BEQ .finite .infinite PLA : LDA.b #$01 : RTL diff --git a/rngfixes.asm b/rngfixes.asm index e931b41..b1d88f2 100644 --- a/rngfixes.asm +++ b/rngfixes.asm @@ -21,7 +21,7 @@ RigChestRNG: RTL .forceHeart LDA.b #$33 : STA.b ScrapBufferBD+$0B ; assure the correct state if player talked to shopkeeper - LDA.w ItemsTaken : AND.b #$40 : BNE .notHeart + LDA.w RoomItemsTaken : AND.b #$40 : BNE .notHeart LDA.b #$07 ; give prize item RTL .notHeart @@ -35,9 +35,8 @@ RTL RTL ;-------------------------------------------------------------------------------- FixChestCounterForChestGame: - JSL.l DecrementItemCounter - JSL.l $0DBA71 -RTL + JSL DecrementItemCounter + JML $8DBA71 ;-------------------------------------------------------------------------------- RNG_Lanmolas1: LDA.b #$00 : BRA _rng_done @@ -133,20 +132,20 @@ InitRNGPointerTable: PLP : PLX RTL .rngDefaults -dw #$0000 ; 00 = Lanmolas 1 -dw #$0040 ; 01 = Moldorm 1 -dw #$0080 ; 02 = Agahnim 1 -dw #$00C0 ; 03 = Helmasaur -dw #$0100 ; 04 = Arrghus -dw #$0140 ; 05 = Mothula -dw #$0180 ; 06 = Kholdstare -dw #$01C0 ; 07 = Vitreous -dw #$0200 ; 08 = Trinexx -dw #$0240 ; 09 = Lanmolas 2 -dw #$0280 ; 10 = Moldorm 2 -dw #$02C0 ; 11 = Agahnim 2 -dw #$0300 ; 12 = Agahnim 2 Phantoms -dw #$0340 ; 13 = Ganon -dw #$0380 ; 14 = Ganon Extra Warp -dw #$03C0 ; 15 = Standard Escape Enemy Drops +dw $0000 ; 00 = Lanmolas 1 +dw $0040 ; 01 = Moldorm 1 +dw $0080 ; 02 = Agahnim 1 +dw $00C0 ; 03 = Helmasaur +dw $0100 ; 04 = Arrghus +dw $0140 ; 05 = Mothula +dw $0180 ; 06 = Kholdstare +dw $01C0 ; 07 = Vitreous +dw $0200 ; 08 = Trinexx +dw $0240 ; 09 = Lanmolas 2 +dw $0280 ; 10 = Moldorm 2 +dw $02C0 ; 11 = Agahnim 2 +dw $0300 ; 12 = Agahnim 2 Phantoms +dw $0340 ; 13 = Ganon +dw $0380 ; 14 = Ganon Extra Warp +dw $03C0 ; 15 = Standard Escape Enemy Drops ;-------------------------------------------------------------------------------- diff --git a/roomloading.asm b/roomloading.asm index db4b709..0170980 100644 --- a/roomloading.asm +++ b/roomloading.asm @@ -7,7 +7,7 @@ LoadRoomHook: LDX.b RoomIndex ; Room ID LDA.l RoomCallbackTable, X SEP #$10 ; 8 bit XY - JSL UseImplicitRegIndexedLongJumpTable + JSL JumpTableLong ; Callback routines: dl NoCallback ; 00 dl IcePalaceBombosSE ; 01 diff --git a/save.asm b/save.asm index c2445de..c68c084 100644 --- a/save.asm +++ b/save.asm @@ -1,60 +1,74 @@ ;-------------------------------------------------------------------------------- WriteSaveChecksumAndBackup: - LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes - CLC : ADC.l SaveDataWRAM, X - INX #2 - CPX.w #$04FE : BNE - - LDX.w #$0000 : - ; Checksum extended save data - CLC : ADC.l ExtendedFileNameWRAM, X - INX #2 - CPX.w #$0FFE : BNE - + TDC + CLC + LDX.w #$004FC + - + ADC.l CartridgeSRAM, X + DEX #2 + BPL - + LDX.w #$0FFE + - + ADC.l ExtendedFileNameSRAM, X + DEX #2 + BPL - STA.b Scrap00 LDA.w #$5A5A SEC : SBC.b Scrap00 STA.l InverseChecksumSRAM - + + .backup_save PHB - LDA.w #$14FF ; \ - LDX.w #CartridgeSRAM&$FFFF ; | Copies $1500 bytes from beginning of cart SRAM to - LDY.w #SaveBackupSRAM&$FFFF ; | $704000 - MVN !SRAMBank, !SRAMBank ; / + LDA.w #$14FF + LDX.w #CartridgeSRAM + LDY.w #SaveBackupSRAM + MVN CartridgeSRAM>>16, CartridgeSRAM>>16 PLB - + TDC + TAX RTL ;-------------------------------------------------------------------------------- ValidateSRAM: REP #$30 - LDX.w #$0000 : TXA : - ; Checksum first $04FE bytes - CLC : ADC.l CartridgeSRAM, X - INX #2 - CPX.w #$04FE : BNE - - LDX.w #$0000 : - ; Checksum extended save data - CLC : ADC.l ExtendedFileNameSRAM, X - INX #2 - CPX.w #$0FFE : BNE - + TDC + CLC + LDX.w #$04FC + - + ADC.l CartridgeSRAM, X + DEX #2 + BPL - + LDX.w #$0FFE + - + ADC.l ExtendedFileNameSRAM, X + DEX #2 + BPL - STA.b Scrap00 LDA.w #$5A5A SEC : SBC.b Scrap00 CMP.l InverseChecksumSRAM : BEQ .goodchecksum - LDX.w #$0000 : TXA : - ; Do the same for the backup save - CLC : ADC.l SaveBackupSRAM, X - INX #2 - CPX.w #$04FE : BNE - - LDX.w #$0000 : - - CLC : ADC.l SaveBackupSRAM+$500, X - INX #2 - CPX.w #$0FFE : BNE - + TDC + LDX.w #$04FC + - + ADC.l SaveBackupSRAM, X + DEX #2 + BPL - + LDX.w #$0FFE + - + ADC.l SaveBackupSRAM+$500, X + DEX #2 + BPL - STA.b Scrap00 LDA.w #$5A5A SEC : SBC.b Scrap00 CMP.l SaveBackupSRAM+$4FE : BEQ + - TDC : STA.l FileValiditySRAM ; Delete save by way of zeroing validity marker - BRA .goodchecksum : + + TDC : STA.l FileValiditySRAM ; Delete save + BRA .goodchecksum + + PHB - LDA.w #$14FF ; \ - LDX.w #SaveBackupSRAM&$FFFF ; | Copies $1500 bytes from backup on cart SRAM to - LDY.w #CartridgeSRAM&$FFFF ; | main save location at $700000 - MVN !SRAMBank, !SRAMBank ; / + LDA.w #$14FF + LDX.w #SaveBackupSRAM + LDY.w #CartridgeSRAM + MVN CartridgeSRAM>>16, CartridgeSRAM>>16 PLB .goodchecksum @@ -146,88 +160,23 @@ RTL ;-------------------------------------------------------------------------------- CopyExtendedSaveFileToWRAM: PHA - SEP #$30 - LDA.w DMAP0 : PHA ; preserve DMA parameters - LDA.w BBAD0 : PHA ; preserve DMA parameters - LDA.w A1T0L : PHA ; preserve DMA parameters - LDA.w A1T0H : PHA ; preserve DMA parameters - LDA.w A1B0 : PHA ; preserve DMA parameters - LDA.w DAS0L : PHA ; preserve DMA parameters - LDA.w DAS0H : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - STZ.w NMITIMEN ; Disable NMI, V/H, joypad - STZ.w HDMAEN ; Disable HDMA - LDA.b #$00 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode - - LDA.b #$80 : STA.w BBAD0 ; set bus B source to WRAM register - - LDA.b #$00 : STA.w WMADDL ; set WRAM register source address - LDA.b #$60 : STA.w WMADDH - LDA.b #$7F : STA.w WMADDB - - STZ.w A1T0L ; set bus A destination address to SRAM - LDA.b #$05 : STA.w A1T0H - LDA.b #$70 : STA.w A1B0 - - LDA.b #$00 : STA.w DAS0L ; set transfer size to 0x1000 - LDA.b #$10 : STA.w DAS0H ; STZ DAS0B - - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - LDA.b #$81 : STA.w NMITIMEN ; Re-enable NMI and joypad - ;-------------------------------------------------------------------------------- - PLA : STA.w DAS0H ; restore DMA parameters - PLA : STA.w DAS0L ; restore DMA parameters - PLA : STA.w A1B0 ; restore DMA parameters - PLA : STA.w A1T0H ; restore DMA parameters - PLA : STA.w A1T0L ; restore DMA parameters - PLA : STA.w BBAD0 ; restore DMA parameters - PLA : STA.w DMAP0 ; restore DMA parameters - REP #$30 + PHB + LDA.w #$0FFF + LDX.w #ExtendedSaveDataSRAM + LDY.w #ExtendedSaveDataWRAM + MVN ExtendedSaveDataWRAM>>16, CartridgeSRAM>>16 + PLB PLA - STA.l $7EC00D ; what we wrote over + STA.l $7EC00D ; What we wrote over. Keep this write last. RTL ;-------------------------------------------------------------------------------- CopyExtendedWRAMSaveFileToSRAM: - PHA PHB - SEP #$30 - LDA.b #$00 : PHA : PLB - LDA.w DMAP0 : PHA ; preserve DMA parameters - LDA.w BBAD0 : PHA ; preserve DMA parameters - LDA.w A1T0L : PHA ; preserve DMA parameters - LDA.w A1T0H : PHA ; preserve DMA parameters - LDA.w A1B0 : PHA ; preserve DMA parameters - LDA.w DAS0L : PHA ; preserve DMA parameters - LDA.w DAS0H : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - STZ.w NMITIMEN ; Disable NMI, V/H, joypad - STZ.w HDMAEN ; Disable HDMA - LDA.b #$80 : STA.w DMAP0 ; set DMA transfer direction B -> A, bus A auto increment, single-byte mode - - STA.w BBAD0 ; set bus B source to WRAM register - - LDA.b #$00 : STA.w WMADDL ; set WRAM register source address - LDA.b #$60 : STA.w WMADDH - LDA.b #$7F : STA.w WMADDB - - STZ.w A1T0L ; set bus A destination address to SRAM - LDA.b #$05 : STA.w A1T0H - LDA.b #$70 : STA.w A1B0 - - LDA.b #$10 : STA.w DAS0L ; set transfer size to 0xB00 - LDA.b #$0B : STA.w DAS0H ; STZ DAS0B - - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - LDA.b #$81 : STA.w NMITIMEN; Re-enable NMI and joypad - ;-------------------------------------------------------------------------------- - PLA : STA.w DAS0H ; restore DMA parameters - PLA : STA.w DAS0L ; restore DMA parameters - PLA : STA.w A1B0 ; restore DMA parameters - PLA : STA.w A1T0H ; restore DMA parameters - PLA : STA.w A1T0L ; restore DMA parameters - PLA : STA.w BBAD0 ; restore DMA parameters - PLA : STA.w DMAP0 ; restore DMA parameters - REP #$30 + LDA.w #$0FFF + LDX.w #ExtendedSaveDataSRAM + LDY.w #ExtendedSaveDataWRAM + MVN CartridgeSRAM>>16, ExtendedSaveDataWRAM>>16 PLB - PLA + TDC + TAX RTL diff --git a/shopkeeper.asm b/shopkeeper.asm index a95cc15..049cd7c 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -1,39 +1,7 @@ -;-------------------------------------------------------------------------------- -; 291 - Moldorm Cave -; 286 - Northeast Dark Swamp Cave -;-------------------------------------------------------------------------------- !FREE_TILE_BUFFER = $1180 -; A = Tile ID -macro UploadOAM(dest) - PHA : PHP +!FREE_TILE = $5C60 +!FREE_TILE_ALT = $5A40 - PHA - REP #$20 ; set 16-bit accumulator - LDA.w #$0000 : STA.l SpriteOAM - STA.l SpriteOAM+2 - LDA.w #$0200 : STA.l SpriteOAM+6 - SEP #$20 ; set 8-bit accumulator - LDA.b : STA.l SpriteOAM+4 - - LDA.b $01,s - - JSL.l GetSpritePalette - STA.l SpriteOAM+5 : STA.l SpriteOAM+13 - PLA - JSL.l IsNarrowSprite : BCS .narrow - - BRA .done - - .narrow - REP #$20 ; set 16-bit accumulator - LDA.w #$0000 : STA.l SpriteOAM+7 - STA.l SpriteOAM+14 - LDA.w #$0800 : STA.l SpriteOAM+9 - LDA.w #$3400 : STA.l SpriteOAM+11 - - .done - PLP : PLA -endmacro ;-------------------------------------------------------------------------------- ; $0A : Digit Offset ; $0C-$0D : Value to Display @@ -137,8 +105,8 @@ SpritePrep_ShopKeeper: LDX.w #$0000 LDY.w #$0000 - - TYA : CMP.l ShopCapacity : !BLT ++ : JMP .stop : ++ - LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .stop : ++ + TYA : CMP.l ShopCapacity : !BLT ++ : JMP .done : ++ + LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .done : ++ LDA.l ShopContentsTable, X : CMP.l ShopId : BEQ ++ : JMP .next : ++ LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l ShopInventory, X : PLX @@ -161,24 +129,23 @@ SpritePrep_ShopKeeper: ++ PLY : +++ - PHX : PHY - PHX : TYX : LDA.l ShopInventory, X : PLX : TAY - REP #$20 ; set 16-bit accumulator - LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX - JSR LoadTile - PLY : PLX - INY #4 - + PHX : PHY + PHX : TYX : LDA.l ShopInventory, X : PLX + SEP #$10 + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + TAY + REP #$30 + LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX + JSR.w SetupTileTransfer + PLY : PLX + INY #4 .next INX #8 JMP - - .stop - - LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2 - LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1 - LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux .done + SEP #$20 LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all .takeAll @@ -217,122 +184,42 @@ dw $0100, $0000 ;-------------------------------------------------------------------------------- ; X - Tile Buffer Offset ; Y - Item ID -LoadTile: - TXA : !ADD.w #!FREE_TILE_BUFFER : STA.l TileUploadOffsetOverride ; load offset from X - SEP #$30 ; set 8-bit accumulator & index registers - TYA ; load item ID from Y - JSL.l GetSpriteID ; convert loot id to sprite id - JSL.l GetAnimatedSpriteTile_variable +SetupTileTransfer: + LDA.l ShopType : BIT.w #$0010 : BNE .alt_vram + TXA : LSR #2 + CLC : ADC.w #!FREE_TILE + BRA .store_target + .alt_vram + TXA : LSR #2 + CLC : ADC.w #!FREE_TILE_ALT + .store_target + LDX.w ItemStackPtr + STA.l ItemTargetStack,X + + TYA : ASL : TAX + LDA.l StandingItemGraphicsOffsets,X + LDX.w ItemStackPtr + STA.l ItemGFXStack,X + + TXA + INC #2 + STA.l ItemStackPtr + + LDA.w #$0000 REP #$10 ; set 16-bit index registers + SEP #$20 RTS ;-------------------------------------------------------------------------------- ;ShopInventory, X ;[id][$lo][$hi][purchase_counter] ;-------------------------------------------------------------------------------- -Shopkeeper_UploadVRAMTilesLong: - JSR.w Shopkeeper_UploadVRAMTiles -RTL -Shopkeeper_UploadVRAMTiles: - LDA.w DMAP0 : PHA ; preserve DMA parameters - LDA.w BBAD0 : PHA ; preserve DMA parameters - LDA.w A1T0L : PHA ; preserve DMA parameters - LDA.w A1T0H : PHA ; preserve DMA parameters - LDA.w A1B0 : PHA ; preserve DMA parameters - LDA.w DAS0L : PHA ; preserve DMA parameters - LDA.w DAS0H : PHA ; preserve DMA parameters - ;-------------------------------------------------------------------------------- - LDA.b #$01 : STA.w DMAP0 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode - LDA.b #$18 : STA.w BBAD0 ; set bus B destination to VRAM register - LDA.b #$80 : STA.w VMAIN ; set VRAM to increment by 2 on high register write - - LDA.b #$80 : STA.w A1T0L ; set bus A source address to tile buffer - LDA.b #$A1 : STA.w A1T0H - LDA.b #$7E : STA.w A1B0 - - LDA.l ShopType : AND.b #$10 : BNE .special - JMP .normal - - .special - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$40 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5A : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$40 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5B : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5A : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5B : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5A : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5B : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - JMP .end - - .normal - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5C : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$60 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5D : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5C : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$80 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5D : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$A0 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5C : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - - LDA.b #$40 : STA.w DAS0L : STZ.b DAS0H ; set transfer size to 0x40 - LDA.b #$A0 : STA.w VMADDL ; set VRAM register destination address - LDA.b #$5D : STA.w VMADDH - LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - ;-------------------------------------------------------------------------------- - .end - PLA : STA.w DAS0H ; restore DMA parameters - PLA : STA.w DAS0L ; restore DMA parameters - PLA : STA.w A1B0 ; restore DMA parameters - PLA : STA.w A1T0H ; restore DMA parameters - PLA : STA.w A1T0L ; restore DMA parameters - PLA : STA.w BBAD0 ; restore DMA parameters - PLA : STA.w DMAP0 ; restore DMA parameters -RTS -;-------------------------------------------------------------------------------- Shopkepeer_CallOriginal: PLA : PLA : PLA LDA.b #ShopkeeperJumpTable>>16 : PHA LDA.b #ShopkeeperJumpTable>>8 : PHA LDA.b #ShopkeeperJumpTable : PHA LDA.w SpriteItemType, X - JML.l UseImplicitRegIndexedLocalJumpTable + JML.l JumpTableLocal ;-------------------------------------------------------------------------------- Sprite_ShopKeeper: @@ -476,59 +363,59 @@ Shopkeeper_SetupHitboxes: RTS Shopkeeper_BuyItem: - PHX : PHY - TYX + PHX : PHY + TYX - LDA.l ShopInventory, X - CMP.b #$0E : BEQ .refill ; Bee Refill - CMP.b #$2E : BEQ .refill ; Red Potion Refill - CMP.b #$2F : BEQ .refill ; Green Potion Refill - CMP.b #$30 : BEQ .refill ; Blue Potion Refill - BRA + - .refill - JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles - + + LDA.l ShopInventory, X + CMP.b #$0E : BEQ .refill ; Bee Refill + CMP.b #$2E : BEQ .refill ; Red Potion Refill + CMP.b #$2F : BEQ .refill ; Green Potion Refill + CMP.b #$30 : BEQ .refill ; Blue Potion Refill + BRA + + .refill + JSL.l Sprite_GetEmptyBottleIndex : BMI .full_bottles + + - LDA.l ShopType : AND.b #$80 : BNE .buy ; don't charge if this is a take-any - REP #$20 : LDA.l CurrentRupees : CMP.l ShopInventory+1, X : SEP #$20 : !BGE .buy + LDA.l ShopType : AND.b #$80 : BNE .buy ; don't charge if this is a take-any + REP #$20 : LDA.l CurrentRupees : CMP.l ShopInventory+1, X : SEP #$20 : !BGE .buy - .cant_afford - LDA.b #$7A - LDY.b #$01 - JSL.l Sprite_ShowMessageUnconditional - LDA.b #$3C : STA.w SFX2 ; error sound - JMP .done - .full_bottles - LDA.b #$6B - LDY.b #$01 - JSL.l Sprite_ShowMessageUnconditional - LDA.b #$3C : STA.w SFX2 ; error sound - JMP .done - .buy - LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any - REP #$20 : LDA.l CurrentRupees : !SUB ShopInventory+1, X : STA.l CurrentRupees : SEP #$20 ; Take price away - ++ - LDA.l ShopInventory, X : TAY : JSL.l Link_ReceiveItem - LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X + .cant_afford + LDA.b #$7A + LDY.b #$01 + JSL.l Sprite_ShowMessageUnconditional + LDA.b #$3C : STA.w SFX2 ; error sound + JMP .done + .full_bottles + LDA.b #$6B : LDY.b #$01 + JSL.l Sprite_ShowMessageUnconditional + LDA.b #$3C : STA.w SFX2 ; error sound + JMP .done + .buy + LDA.l ShopType : AND.b #$80 : BNE ++ ; don't charge if this is a take-any + REP #$20 : LDA.l CurrentRupees : !SUB ShopInventory+1, X : STA.l CurrentRupees : SEP #$20 ; Take price away + ++ + INC.w ShopPurchaseFlag + LDA.l ShopInventory, X : TAY : JSL.l Link_ReceiveItem + LDA.l ShopInventory+3, X : INC : STA.l ShopInventory+3, X - TXA : LSR #2 : TAX - LDA.l ShopType : BIT.b #$80 : BNE + - LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState - PHX - TXA : !ADD ShopSRAMIndex : TAX - LDA.l PurchaseCounts, X : INC : BEQ +++ : STA.l PurchaseCounts, X : +++ - PLX - BRA ++ - + ; Take-any - BIT.b #$20 : BNE .takeAll - .takeAny - LDA.l ShopState : ORA.b #$07 : STA.l ShopState - PHX : LDA.l ShopSRAMIndex : TAX : LDA.b #$01 : STA.l PurchaseCounts, X : PLX - BRA ++ - .takeAll - LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState - PHX : LDA.l ShopSRAMIndex : TAX : LDA.l ShopState : STA.l PurchaseCounts, X : PLX - ++ + TXA : LSR #2 : TAX + LDA.l ShopType : BIT.b #$80 : BNE + + LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState + PHX + TXA : !ADD ShopSRAMIndex : TAX + LDA.l PurchaseCounts, X : INC : BEQ +++ : STA.l PurchaseCounts, X : +++ + PLX + BRA ++ + + ; Take-any + BIT.b #$20 : BNE .takeAll + .takeAny + LDA.l ShopState : ORA.b #$07 : STA.l ShopState + PHX : LDA.l ShopSRAMIndex : TAX : LDA.b #$01 : STA.l PurchaseCounts, X : PLX + BRA ++ + .takeAll + LDA.l ShopState : ORA.w Shopkeeper_ItemMasks, X : STA.l ShopState + PHX : LDA.l ShopSRAMIndex : TAX : LDA.l ShopState : STA.l PurchaseCounts, X : PLX + ++ .done PLY : PLX RTS @@ -668,6 +555,9 @@ Shopkeeper_DrawNextItem: PLY LDA.l ShopInventory, X ; get item id + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + STA.b Scrap0D CMP.b #$2E : BNE + : BRA .potion + CMP.b #$2F : BNE + : BRA .potion + CMP.b #$30 : BEQ .potion @@ -685,19 +575,25 @@ Shopkeeper_DrawNextItem: STA.l SpriteOAM+4 - LDA.l ShopInventory, X ; get item palette - JSL.l GetSpritePalette : STA.l SpriteOAM+5 + LDA.b Scrap0D + PHX + JSL.l GetSpritePalette_resolved : STA.l SpriteOAM+5 + PLX LDA.b #$00 : STA.l SpriteOAM+6 - LDA.l ShopInventory, X ; get item palette - JSL.l IsNarrowSprite : BCS .narrow + LDA.b Scrap0D + PHX + TAX + LDA.l SpriteProperties_standing_width,X : BEQ .narrow .full + PLX LDA.b #$02 STA.l SpriteOAM+7 LDA.b #$01 BRA ++ .narrow + PLX LDA.b #$00 STA.l SpriteOAM+7 JSR.w PrepNarrowLower diff --git a/special_weapons.asm b/special_weapons.asm index 7795459..faf78d6 100644 --- a/special_weapons.asm +++ b/special_weapons.asm @@ -1,5 +1,5 @@ ;-------------------------------------------------------------------------------- -!ANCILLA_DAMAGE = "$06EC84" +!ANCILLA_DAMAGE = "$86EC84" ; start with X = sprite index, A = ancilla type index ;-------------------------------------------------------------------------------- DamageClassCalc: @@ -112,8 +112,8 @@ DamageClassCalc: RTL ; end with X = sprite index, A = damage class ;-------------------------------------------------------------------------------- -!SPRITE_SETUP_HIT_BOX_LONG = "$0683EA" -!UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG = "$0683E6" +!SPRITE_SETUP_HIT_BOX_LONG = "$8683EA" +!UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG = "$8683E6" ; start with X = ancilla index, Y = sprite index ;-------------------------------------------------------------------------------- Utility_CheckAncillaOverlapWithSprite: @@ -188,7 +188,7 @@ SetUpTrinexxHitbox: LDA #$80 : STA $0CAA, Y PHX - LDA $0E80, Y : !SUB.l $1DAF28 : AND.b #$7F : TAX + LDA $0E80, Y : !SUB.l $9DAF28 : AND.b #$7F : TAX LDA $7FFC00, X : STA $0D10, Y LDA $7FFC80, X : STA $0D30, Y @@ -412,9 +412,9 @@ BombIcon: DrawBombOnHud: PHB LDA.w #$0149 - LDX.w #$86B0 + LDX.w #HUD_TileMap LDY.w #$C700 - MVN $7E, $21 + MVN $A17E PLB LDA.l SpecialWeapons : AND.w #$00FF : CMP.w #$0001 : BNE .regularBombs diff --git a/spriteswap.asm b/spriteswap.asm index 7da92e7..06cd613 100644 --- a/spriteswap.asm +++ b/spriteswap.asm @@ -2,21 +2,21 @@ org $008A01 ; 0xA01 - Bank00.asm (LDA.b #$10 : STA $4304 : STA $4314 : STA $4324 LDA.b PlayerSpriteBank org $1BEDF9 -JSL SpriteSwap_Palette_ArmorAndGloves ;4bytes -RTL ;1byte -NOP #$01 +JSL SpriteSwap_Palette_ArmorAndGloves ; 4bytes +RTL ; 1byte +NOP org $1BEE1B JSL SpriteSwap_Palette_ArmorAndGloves_part_two RTL -!BANK_BASE = $29 +!BANK_BASE = $A9 org $BF8000 SwapSpriteIfNecessary: PHP SEP #$20 ; set 8-bit accumulator - LDA.l SpriteSwapper : BEQ + : !ADD #!BANK_BASE : CMP.b PlayerSpriteBank : BEQ + + LDA.l SpriteSwapper : BEQ + : CLC : ADC.b #!BANK_BASE : CMP.b PlayerSpriteBank : BEQ + STA.b PlayerSpriteBank STZ.w SkipOAM ; Set Normal Sprite NMI JSL.l SpriteSwap_Palette_ArmorAndGloves_part_two @@ -26,57 +26,57 @@ RTL SpriteSwap_Palette_ArmorAndGloves: { - ;DEDF9 - LDA.l SpriteSwapper : BNE .continue - LDA.b #$10 : STA.b PlayerSpriteBank ; Load Original Sprite Location - REP #$21 - LDA.l ArmorEquipment - JSL $1BEDFF ; Read Original Palette Code - RTL - .part_two - SEP #$30 - LDA.l SpriteSwapper : BNE .continue - REP #$30 - LDA.l GloveEquipment - JSL $1BEE21 ; Read Original Palette Code - RTL + ; DEDF9 + LDA.l SpriteSwapper : BNE .continue + LDA.b #$10 : STA.b PlayerSpriteBank ; Load Original Sprite Location + REP #$21 + LDA.l ArmorEquipment + JSL $9BEDFF ; Read Original Palette Code + RTL + .part_two + SEP #$30 + LDA.l SpriteSwapper : BNE .continue + REP #$30 + LDA.l GloveEquipment + JSL $9BEE21 ; Read Original Palette Code + RTL - .continue + .continue - PHX : PHY : PHA - ; Load armor palette - PHB : PHK : PLB - REP #$20 ; set 16-bit accumulator + PHX : PHY : PHA + ; Load armor palette + PHB : PHK : PLB + REP #$20 ; set 16-bit accumulator - ; Check what Link's armor value is. - LDA.l ArmorEquipment : AND.w #$00FF : TAX + ; Check what Link's armor value is. + LDA.l ArmorEquipment : AND.w #$00FF : TAX - LDA.l $1BEC06, X : AND.w #$00FF : ASL A : ADC.w #$F000 : STA.b Scrap00 - ;replace D308 by 7000 and search - REP #$10 ; set 16-bit index registers + LDA.l $9BEC06, X : AND.w #$00FF : ASL A : ADC.w #$F000 : STA.b Scrap00 + ; replace D308 by 7000 and search + REP #$10 ; set 16-bit index registers - LDA.w #$01E2 ; Target SP-7 (sprite palette 6) - LDX.w #$000E ; Palette has 15 colors + LDA.w #$01E2 ; Target SP-7 (sprite palette 6) + LDX.w #$000E ; Palette has 15 colors - TXY : TAX + TXY : TAX - LDA.b PlayerSpriteBank : AND.w #$00FF : STA.b Scrap02 + LDA.b PlayerSpriteBank : AND.w #$00FF : STA.b Scrap02 .loop - LDA.b [Scrap00] : STA.l PaletteBufferAux, X : STA.l PaletteBuffer, X + LDA.b [Scrap00] : STA.l PaletteBufferAux, X : STA.l PaletteBuffer, X - INC.b Scrap00 : INC.b Scrap00 + INC.b Scrap00 : INC.b Scrap00 - INX #2 + INX #2 - DEY : BPL .loop + DEY : BPL .loop - SEP #$30 + SEP #$30 - PLB - INC.b NMICGRAM - PLA : PLY : PLX - RTL + PLB + INC.b NMICGRAM + PLA : PLY : PLX + RTL } diff --git a/sram.asm b/sram.asm index bfa410a..a48c22c 100644 --- a/sram.asm +++ b/sram.asm @@ -177,8 +177,9 @@ InventoryTracking: skip 2 ; - - - - - - o q b r m p n s k f (bitfield) ; p = Magic Powder | n = Mushroom Past | s = Shovel ; k = Inactive Flute | f = Active Flute | o = Any bomb acquired ; q = Quickswap locked -BowTracking: skip 1 ; b s p - - - - - (bitfield) - ; b = Bow | s = Silver Arrows Upgrade | p = Second Progressive Bow +BowTracking: skip 1 ; b s p f - - - - - - - - - - - - (bitfield) + ; b = Any Bow | s = Silver Arrows Upgrade | p = Second Progressive Bow + ; f = First progressive bow ; The front end writes two distinct progressive bow items. p ; indicates whether the "second" has been found independent of ; the first @@ -255,7 +256,8 @@ MapOverlay: skip 2 ; Used to reveal dungeon prizes on the map in mo ; | m = Misery Mire | d = Palace of Darkness | s = Swamp Palace ; | a = Aga Tower | t = Desert Palace | e = Eastern Palace ; / h = Hyrule Castle | s = Sewer Passage -HudFlag: ; +HudFlag: ; - h c - - - - - + ; c = show maps and compasses | h = show heart pieces IgnoreFaeries: ; HasGroveItem: ; GeneralFlags: skip 1 ; - - h - - i - g (bitfield) @@ -315,12 +317,13 @@ MagicCounter: skip 2 ; Magic used by player (16-bit integer) HighestMail: skip 1 ; Highest mail level SmallKeyCounter: skip 1 ; Total Number of small keys collected (integer) HeartPieceCounter: skip 1 ; Total Number of heartpieces collected (integer) -CrystalCounter: skip 1 ; Total Number of crystals collected (integer) +skip 1 ; Unused DungeonsCompleted: skip 2 ; Bitfield indicating whether a dungeon's prize has been collected. ; This has the same shape as the dungeon item bitfields. MapCountDisplay: skip 2 ; +CrystalCounter: skip 2 ; Total Number of crystals collected (integer) BombsPlaced: skip 2 ; Total Number of bombs placed (16-bit integer) -skip 40 ; Unused +skip 38 ; Unused ServiceSequence: ; See servicerequest.asm ServiceSequenceRx: skip 8 ; Service sequence receive ServiceSequenceTx: skip 8 ; Service sequence transmit @@ -384,6 +387,7 @@ InverseChecksumWRAM: skip 2 ; Vanilla Inverse Checksum. Don't write unless c ; beginning at $700500 ;-------------------------------------------------------------------------------- base $7F6000 ; $1000 byte buffer we place beginning at second save file +ExtendedSaveDataWRAM: ; ExtendedFileNameWRAM: skip 24 ; File name, 12 word-length characters. RoomPotData: skip 592 ; Table for expanded pot shuffle. One word per room. SpritePotData: skip 592 ; Table for expanded pot shuffle. One word per room. @@ -408,7 +412,8 @@ BombsEquipmentSRAM: skip 31 ; DisplayRupeesSRAM: skip 21 ; CurrentArrowsSRAM: skip 21 ; InventoryTrackingSRAM: skip 2 ; -BowTrackingSRAM: skip 2 ; +BowTrackingSRAM: skip 1 ; +SpecialWeaponLevelSRAM: skip 1 ; skip 53 ; ProgressIndicatorSRAM: skip 1 ; skip 19 ; @@ -416,6 +421,7 @@ FileNameVanillaSRAM: skip 8 ; First four characters of file name FileValiditySRAM: skip 2 ; skip 283 ; InverseChecksumSRAM: skip 2 ; +ExtendedSaveDataSRAM: ; ExtendedFileNameSRAM: skip 24 ; We read and write the file name directly from and to SRAM (24 bytes) skip $1AE4 ; RomVersionSRAM: skip 4 ; ALTTPR ROM version. Low byte is the version, high byte writes @@ -428,15 +434,6 @@ SaveBackupSRAM: ; Backup copy of save ram. Game will attempt to ; checksum on file select screen load fails. base off -;================================================================================ -; Bank Definitions -;-------------------------------------------------------------------------------- -; If these move (most likely by placing initsramtable.asm somewhere else) these -; bank definitions need to be changed as well. -;================================================================================ -!SRAMBank = $70 -!SRAMTableBank = $30|$80 - ;================================================================================ ; Assertions ;================================================================================ @@ -604,9 +601,9 @@ endmacro %assertSRAM(HighestMail, $7EF46E) %assertSRAM(SmallKeyCounter, $7EF46F) %assertSRAM(HeartPieceCounter, $7EF470) -%assertSRAM(CrystalCounter, $7EF471) %assertSRAM(DungeonsCompleted, $7EF472) %assertSRAM(MapCountDisplay, $7EF474) +%assertSRAM(CrystalCounter, $7EF476) ;-------------------------------------------------------------------------------- %assertSRAM(ServiceSequence, $7EF4A0) %assertSRAM(ServiceSequenceRx, $7EF4A0) @@ -659,6 +656,7 @@ endmacro %assertSRAM(GTCollectedKeys, $7EF4ED) %assertSRAM(FileMarker, $7EF4F0) ;-------------------------------------------------------------------------------- +%assertSRAM(ExtendedSaveDataWRAM, $7F6000) %assertSRAM(ExtendedFileNameWRAM, $7F6000) %assertSRAM(RoomPotData, $7F6018) %assertSRAM(SpritePotData, $7F6268) @@ -677,10 +675,12 @@ endmacro %assertSRAM(CurrentArrowsSRAM, $700377) %assertSRAM(InventoryTrackingSRAM, $70038C) %assertSRAM(BowTrackingSRAM, $70038E) +%assertSRAM(SpecialWeaponLevelSRAM, $70038F) %assertSRAM(ProgressIndicatorSRAM, $7003C5) %assertSRAM(FileNameVanillaSRAM, $7003D9) %assertSRAM(FileValiditySRAM, $7003E1) %assertSRAM(InverseChecksumSRAM, $7004FE) +%assertSRAM(ExtendedSaveDataSRAM, $700500) %assertSRAM(ExtendedFileNameSRAM, $700500) %assertSRAM(RomVersionSRAM, $701FFC) %assertSRAM(RomNameSRAM, $702000) diff --git a/stats.asm b/stats.asm index 152be0e..8127025 100644 --- a/stats.asm +++ b/stats.asm @@ -33,7 +33,7 @@ DecrementSaveCounter: RTL ;-------------------------------------------------------------------------------- DungeonHoleWarpTransition: - LDA.l $01C31F, X + LDA.l $81C31F, X BRA StatTransitionCounter DungeonHoleEntranceTransition: JSL EnableForceBlank @@ -78,31 +78,37 @@ IncrementSmallKeys: STA.l CurrentSmallKeys ; thing we wrote over, write small key count PHX LDA.l StatsLocked : BNE + - JSL AddInventory_incrementKeyLong + LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter + JSL.l UpdateKeys - PHY : LDY.b #24 : JSL.l FullInventoryExternal : PLY + PHY : LDY.b #24 : JSL.l AddInventory : PLY JSL.l HUD_RebuildLong + INC.w UpdateHUD PLX RTL ;-------------------------------------------------------------------------------- IncrementSmallKeysNoPrimary: - STA.l CurrentSmallKeys ; thing we wrote over, write small key count - PHX - LDA.l StatsLocked : BNE + - JSL AddInventory_incrementKeyLong - + - JSL.l UpdateKeys - LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors - PHP : REP #$20 ; set 16-bit accumulator - LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement - PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal - JSR CountChestKey : PLY : BRA + - ++ - PLP - + - JSL.l HUD_RebuildLong - PLX + STA.l CurrentSmallKeys ; thing we wrote over, write small key count + PHX + LDA.l StatsLocked : BNE + + LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter + + + JSL.l UpdateKeys + LDA.b IndoorsFlag : BEQ + ; skip room check if outdoors + PHP : REP #$20 ; set 16-bit accumulator + LDA.b RoomIndex : CMP.w #$0087 : BNE ++ ; hera basement + PLP : PHY + LDY.b #$24 + JSL.l AddInventory + JSR CountChestKey + PLY + BRA + + ++ + PLP + + + INC.w UpdateHUD + JSL.l HUD_RebuildLong + PLX RTL ;-------------------------------------------------------------------------------- DecrementSmallKeys: @@ -110,52 +116,55 @@ DecrementSmallKeys: JSL.l UpdateKeys RTL ;-------------------------------------------------------------------------------- -CountChestKeyLong: ; called from ItemDowngradeFix in itemdowngrade.asm - JSR CountChestKey +CountChestKeyLong: + JSR.w CountChestKey RTL ;-------------------------------------------------------------------------------- -CountChestKey: ; called by neighbor functions +CountChestKey: PHA : PHX - CPY.b #$24 : BEQ + ; small key for this dungeon - use DungeonID - CPY.b #$A0 : !BLT .end ; Ignore most items - CPY.b #$AE : !BGE .end ; Ignore reserved key and generic key - TYA : AND.B #$0F - TAX : BRA .count ; use Key id instead of DungeonID (Keysanity) - + - LDA.w DungeonID : LSR : TAX - .count - LDA.l DungeonCollectedKeys, X : INC : STA.l DungeonCollectedKeys, X + LDA.l StatsLocked : BNE .done + CPY.b #$24 : BEQ .this_dungeon + TYA + AND.b #$0F : CMP.b #$02 : BCC .hc_sewers + TAX + LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X + BRA .done + .this_dungeon + LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers + LSR : TAX + LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X + BRA .done - CPX.b #$00 : BNE + - STA.l HCCollectedKeys ; copy HC to sewers - + - CPX.b #$01 : BNE + - STA.l SewerCollectedKeys ; copy sewers to HC - + - .end + .hc_sewers + LDA.l SewerCollectedKeys : INC + STA.l SewerCollectedKeys : STA.l HCCollectedKeys + + .done PLX : PLA RTS ;-------------------------------------------------------------------------------- CountBonkItem: ; called from GetBonkItem in bookofmudora.asm - LDA.b RoomIndex ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte - CMP.b #115 : BNE + ; Desert Bonk Key - LDA.l BonkKey_Desert : BRA ++ - + : CMP.b #140 : BNE + ; GTower Bonk Key + LDA.b RoomIndex + CMP.b #115 : BNE + + LDA.l BonkKey_Desert + BRA ++ + + + CMP.b #140 : BNE + LDA.l BonkKey_GTower : BRA ++ - + LDA.b #$24 ; default to small key + + + LDA.b #$24 ++ CMP.b #$24 : BNE + PHY - TAY : JSR CountChestKey + TAY + JSR CountChestKey PLY + RTL ;-------------------------------------------------------------------------------- IncrementAgahnim2Sword: PHA - LDA.l StatsLocked : BNE + - JSL AddInventory_incrementBossSwordLong - + + JSL.l IncrementBossSword PLA RTL ;-------------------------------------------------------------------------------- @@ -225,9 +234,11 @@ RTL IncrementBigChestCounter: JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over PHA - LDA.l StatsLocked : BNE + - %BottomHalf(BigKeysBigChests) - + + LDA.l StatsLocked : BNE + + LDA.l BigKeysBigChests : INC : AND.b #$0F : TAX + LDA.l BigKeysBigChests : AND.b #$F0 : STA.l BigKeysBigChests + TXA : ORA.l BigKeysBigChests : STA.l BigKeysBigChests + + PLA RTL ;-------------------------------------------------------------------------------- @@ -341,7 +352,7 @@ StatsFinalPrep: LDA.l StatsLocked : BNE .ramPostOnly INC : STA.l StatsLocked - JSL.l AddInventory_incrementBossSwordLong + JSL.l IncrementFinalSword LDA.l HighestMail : INC : STA.l HighestMail ; add green mail to mail count diff --git a/stats/credits.asm b/stats/credits.asm index ad98273..cfeb5c7 100644 --- a/stats/credits.asm +++ b/stats/credits.asm @@ -487,10 +487,10 @@ CreditsLineBlank: %blankline() -%bigcredits("MATRETHEWEY IBAZLY") +%bigcredits(" MATRETHEWEY ") %blankline() -%bigcredits("FISH_WAFFLE64 KRELBEL") +%bigcredits("FISH_WAFFLE64 IBAZLY") %blankline() @@ -574,7 +574,7 @@ CreditsLineBlank: %blankline() -%bigcredits("AND...") +%bigcredits("AND&") %blankline() diff --git a/stats/font.gb b/stats/font.gb deleted file mode 100755 index 9894dc4..0000000 Binary files a/stats/font.gb and /dev/null differ diff --git a/stats/fonttable.asm b/stats/fonttable.asm new file mode 100644 index 0000000..9c68676 --- /dev/null +++ b/stats/fonttable.asm @@ -0,0 +1,268 @@ +; Small letters red +dw $39E0 ; A ; $00 +dw $39E1 ; B ; +dw $39E2 ; C ; +dw $39E3 ; D ; +dw $39E4 ; E ; +dw $39E5 ; F ; +dw $39E6 ; G ; +dw $39E7 ; H ; +dw $39E8 ; I ; +dw $39E9 ; J ; +dw $39EA ; K ; +dw $39EB ; L ; +dw $39EC ; M ; +dw $39ED ; N ; +dw $39EE ; O ; +dw $39EF ; P ; +dw $39F0 ; Q ; +dw $39F1 ; R ; +dw $39F2 ; S ; +dw $39F3 ; T ; +dw $39F4 ; U ; +dw $39F5 ; V ; +dw $39F6 ; W ; +dw $39F7 ; X ; +dw $39F8 ; Y ; +dw $39F9 ; Z ; $19 + ; +; Small letters yellow ; +dw $2DE0 ; A ; $1A +dw $2DE1 ; B ; +dw $2DE2 ; C ; +dw $2DE3 ; D ; +dw $2DE4 ; E ; +dw $2DE5 ; F ; +dw $2DE6 ; G ; +dw $2DE7 ; H ; +dw $2DE8 ; I ; +dw $2DE9 ; J ; +dw $2DEA ; K ; +dw $2DEB ; L ; +dw $2DEC ; M ; +dw $2DED ; N ; +dw $2DEE ; O ; +dw $2DEF ; P ; +dw $2DF0 ; Q ; +dw $2DF1 ; R ; +dw $2DF2 ; S ; +dw $2DF3 ; T ; +dw $2DF4 ; U ; +dw $2DF5 ; V ; +dw $2DF6 ; W ; +dw $2DF7 ; X ; +dw $2DF8 ; Y ; +dw $2DF9 ; Z ; $33 +dw $2DFB ; , ; +dw $2DFC ; ' ; +dw $2DFD ; - ; +dw $2DFE ; . ; + ; +; Small letters green ; +dw $29E0 ; A ; $38 +dw $29E1 ; B ; +dw $29E2 ; C ; +dw $29E3 ; D ; +dw $29E4 ; E ; +dw $29E5 ; F ; +dw $29E6 ; G ; +dw $29E7 ; H ; +dw $29E8 ; I ; +dw $29E9 ; J ; +dw $29EA ; K ; +dw $29EB ; L ; +dw $29EC ; M ; +dw $29ED ; N ; +dw $29EE ; O ; +dw $29EF ; P ; +dw $29F0 ; Q ; +dw $29F1 ; R ; +dw $29F2 ; S ; +dw $29F3 ; T ; +dw $29F4 ; U ; +dw $29F5 ; V ; +dw $29F6 ; W ; +dw $29F7 ; X ; +dw $29F8 ; Y ; +dw $29F9 ; Z ; $51 +dw $29FA ; • ; + ; +; Big characters top ; +dw $3D40 ; 0 ; $53 +dw $3D41 ; 1 ; +dw $3D42 ; 2 ; +dw $3D43 ; 3 ; +dw $3D44 ; 4 ; +dw $3D45 ; 5 ; +dw $3D46 ; 6 ; +dw $3D47 ; 7 ; +dw $3D48 ; 8 ; +dw $3D49 ; 9 ; +dw $3D4A ; A ; +dw $3D4B ; B ; +dw $3D4C ; C ; +dw $3D4D ; D ; +dw $3D4E ; E ; +dw $3D4F ; F ; $62 +dw $3D60 ; G ; +dw $3D61 ; H ; +dw $3D62 ; I ; +dw $3D63 ; J ; +dw $3D64 ; K ; +dw $3D65 ; L ; +dw $3D66 ; M ; +dw $3D67 ; N ; +dw $3D68 ; O ; +dw $3D69 ; P ; +dw $3D6A ; Q ; +dw $3D6B ; R ; +dw $3D6C ; S ; +dw $3D6D ; T ; +dw $3D6E ; U ; +dw $3D6F ; V ; $72 +dw $3D80 ; W ; +dw $3D81 ; X ; +dw $3D82 ; Y ; +dw $3D83 ; Z ; +dw $0000 ; ; +dw $0000 ; ; +; Big characters bottom ; +dw $3D50 ; 0 ; $79 +dw $3D51 ; 1 ; +dw $3D52 ; 2 ; +dw $3D53 ; 3 ; +dw $3D54 ; 4 ; +dw $3D55 ; 5 ; +dw $3D56 ; 6 ; +dw $3D57 ; 7 ; +dw $3D58 ; 8 ; +dw $3D59 ; 9 ; +dw $3D5A ; A ; $83 +dw $3D5B ; B ; +dw $3D5C ; C ; +dw $3D5D ; D ; +dw $3D5E ; E ; +dw $3D5F ; F ; +dw $3D70 ; G ; +dw $3D71 ; H ; +dw $3D72 ; I ; +dw $3D73 ; J ; +dw $3D74 ; K ; +dw $3D75 ; L ; +dw $3D76 ; M ; +dw $3D77 ; N ; +dw $3D78 ; O ; +dw $3D79 ; P ; +dw $3D7A ; Q ; +dw $3D7B ; R ; +dw $3D7C ; S ; +dw $3D7D ; T ; +dw $3D7E ; U ; +dw $3D7F ; V ; $98 +dw $3D90 ; W ; +dw $3D91 ; X ; +dw $3D92 ; Y ; +dw $3D93 ; Z ; $9C +dw $0000 ; ; +dw $0000 ; ; +dw $3D9C ; ; $9F +; Lower case letters top ; +dw $3DA0 ; a ; $A0 +dw $3DA1 ; b ; +dw $3DA2 ; c ; +dw $3DA3 ; d ; +dw $3DA4 ; e ; +dw $3DA5 ; f ; +dw $3DA6 ; g ; +dw $3DA7 ; h ; +dw $3DA8 ; i ; +dw $3DA9 ; j ; +dw $3DAA ; k ; +dw $3DAB ; l ; +dw $3DAC ; m ; +dw $3DAD ; n ; +dw $3DAE ; o ; +dw $3DAF ; p ; +dw $3DC0 ; q ; $B0 +dw $3DC1 ; r ; +dw $3DC2 ; s ; +dw $3DC3 ; t ; +dw $3DC4 ; u ; +dw $3DC5 ; v ; +dw $3DC6 ; w ; +dw $3DC7 ; x ; +dw $3DC8 ; y ; +dw $3DC9 ; z ; +dw $0000 ; ; +; Lower case letters bottom; +dw $3DB0 ; a ; +dw $3DB1 ; b ; +dw $3DB2 ; c ; +dw $3DB3 ; d ; +dw $3DB4 ; e ; +dw $3DB5 ; f ; $C0 +dw $3DB6 ; g ; +dw $3DB7 ; h ; +dw $3DB8 ; i ; +dw $3DB9 ; j ; +dw $3DBA ; k ; +dw $3DBB ; l ; +dw $3DBC ; m ; +dw $3DBD ; n ; +dw $3DBE ; o ; +dw $3DBF ; p ; +dw $3DD0 ; q ; +dw $3DD1 ; r ; +dw $3DD2 ; s ; +dw $3DD3 ; t ; +dw $3DD4 ; u ; +dw $3DD5 ; v ; $D0 +dw $3DD6 ; w ; +dw $3DD7 ; x ; +dw $3DD8 ; y ; +dw $3DD9 ; z ; +dw $0000 ; ; +dw $0000 ; ; +dw $0000 ; ; +dw $0000 ; ; +; Special chars top ; +dw $3D2D ; ' ; $D9 +dw $3D2E ; " ; +dw $3D27 ; / ; +dw $3D8D ; . ; +dw $3DCA ; : ; +dw $3DCD ; _ ; +dw $3D28 ; • ; +dw $3D2F ; ... ; $E0 +dw $3DCC ; # ; +dw $3DCB ; @ ; +dw $3D29 ; |> ; +dw $3D86 ; ? ; +dw $3D87 ; ! ; +dw $3D8E ; ~ ; +dw $3D88 ; , ; +dw $3D89 ; - ; +dw $0000 ; ; +dw $0000 ; ; +dw $0000 ; ; +; Special chars bottom ; +dw $3D3D ; ' ; $EC +dw $3D3E ; " ; +dw $3D37 ; / ; +dw $3D9D ; . ; +dw $3DDA ; : ; $F0 +dw $3DDD ; _ ; +dw $3D38 ; • ; +dw $3D3F ; ... ; +dw $3DDC ; # ; +dw $3DDB ; @ ; +dw $3D39 ; |> ; +dw $3D96 ; ? ; +dw $3D97 ; ! ; +dw $3D9E ; ~ ; +dw $3D98 ; , ; +dw $3D99 ; - ; $FB +dw $0000 ; ; +dw $0000 ; ; +dw $0000 ; ; +dw $0000 ; ; diff --git a/stats/fonttable.bin b/stats/fonttable.bin deleted file mode 100755 index 898e370..0000000 --- a/stats/fonttable.bin +++ /dev/null @@ -1 +0,0 @@ -99999999999999999999999999------------------------------)))))))))))))))))))))))))))@=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=`=a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=======P=Q=R=S=T=U=V=W=X=Y=Z=[=\=]=^=_=p=q=r=s=t=u=v=w=x=y=z={=|=}=~================================ \ No newline at end of file diff --git a/stats/main.asm b/stats/main.asm index ec4712e..39368f5 100755 --- a/stats/main.asm +++ b/stats/main.asm @@ -5,16 +5,6 @@ lorom !BLT = "BCC" !BGE = "BCS" -org $238000 -incsrc stats/credits.asm - -FontGfx: -if !FEATURE_NEW_TEXT - incbin stats/font.2bpp -else - incbin stats/font.gb -endif -FontGfxEnd: ; Custom addresses. Most are arbitrary. Feel free to make sure they're okay or moving them elsewhere within ZP CreditsPtr = $7C ; 3 bytes @@ -41,8 +31,8 @@ PreparePointer: LDY.w #$0000 RTL -; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA -; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA +; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA +; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA ; End of data: 1111 1111 1111 1111 ; X X offset (measured in 8x8 tiles) @@ -58,55 +48,55 @@ RTL ; A Memory Address ValueCaps: - dw 0 - dw 9 - dw 99 - dw 999 - dw 9999 - dw 9999 ; TODO - 5 digits need to be fixed at a later date + dw 0 + dw 9 + dw 99 + dw 999 + dw 9999 + dw 9999 ; TODO - 5 digits need to be fixed at a later date BitMasks: - dw $FFFF - dw $0001 - dw $0003 - dw $0007 - dw $000F - dw $001F - dw $003F - dw $007F - dw $00FF - dw $01FF - dw $03FF - dw $07FF - dw $0FFF - dw $1FFF - dw $3FFF - dw $7FFF + dw $FFFF + dw $0001 + dw $0003 + dw $0007 + dw $000F + dw $001F + dw $003F + dw $007F + dw $00FF + dw $01FF + dw $03FF + dw $07FF + dw $0FFF + dw $1FFF + dw $3FFF + dw $7FFF macro StripeStart(xPos, length) - LDA.b $C8 - CLC - ADC.w # - XBA - STA.w $1002,x - - LDA.w #*2-1 - XBA - LDA.w #$0500 - STA.w $1004,x + LDA.b $C8 + CLC + ADC.w # + XBA + STA.w $1002,x + + LDA.w #*2-1 + XBA + LDA.w #$0500 + STA.w $1004,x endmacro macro StripeTile() - STA.w $1006,x - INX - INX + STA.w $1006,x + INX + INX endmacro macro StripeEnd() - INX - INX - INX - INX + INX + INX + INX + INX endmacro HexToDecStats: @@ -140,52 +130,52 @@ HexToDecStats: RTL LastHexDigit: - TYA - AND.w #$000F - PHA - TYA - LSR #4 - TAY - CLC - LDA.b StatsBottom - BNE + - ; Upper half - PLA - ADC #$3D40 - RTS -+ ; Lower half - PLA - ADC #$3D50 - RTS - -FindLine: - LDY.w #$0000 + TYA + AND.w #$000F + PHA + TYA + LSR #4 + TAY + CLC + LDA.b StatsBottom + BNE + + ; Upper half + PLA + ADC #$3D40 + RTS ++ ; Lower half + PLA + ADC #$3D50 + RTS + +FindLine: + LDY.w #$0000 + +- LDA.w CreditsStats,y + STZ.b StatsBottom + CMP #$FFFF + BEQ .noLine + + XBA + AND.w #$01FF + CMP.b LineNumber + BEQ .lineFound + + INC + INC.b StatsBottom + CMP.b LineNumber + BEQ .lineFound + + INY #8 + BRA - -- LDA.w CreditsStats,y - STZ.b StatsBottom - CMP #$FFFF - BEQ .noLine - - XBA - AND.w #$01FF - CMP.b LineNumber - BEQ .lineFound - - INC - INC.b StatsBottom - CMP.b LineNumber - BEQ .lineFound - - INY #8 - BRA - - .lineFound - SEC - RTS - + SEC + RTS + .noLine - CLC - RTS + CLC + RTS !FRAMES_PER_SECOND = 60 !FRAMES_PER_MINUTE = 60*60 @@ -193,408 +183,376 @@ FindLine: !MAX_FRAME_COUNT = 59*60+59*60+59*60+99 macro CountUnits(framesPerUnit, unitCounter) - STZ.b + STZ.b ?loop: - LDA.b ValueLow - SEC - SBC.w # - STA.b Temp - LDA.b ValueHigh - SBC.w #>>16 - BCC ?end - STA.b ValueHigh - LDA.b Temp - STA.b ValueLow - INC.b - BRA ?loop + LDA.b ValueLow + SEC + SBC.w # + STA.b Temp + LDA.b ValueHigh + SBC.w #>>16 + BCC ?end + STA.b ValueHigh + LDA.b Temp + STA.b ValueLow + INC.b + BRA ?loop ?end: endmacro -!ColonOffset = $83 -!PeriodOffset = $80 -BlankTile = $883D +!ColonOffset = $8A +!PeriodOffset = $4D +BlankCreditsTile = $883D RenderCreditsStatCounter: - PHB - PHK - PLB - - JSR FindLine - BCS + - JMP .endStats -+ - - ; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA - - ; == Determine stat type == - LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL - LSR - AND.w #$0003 ; TT - CMP.w #$0000 - BEQ .normalStat - JMP .timeStat + PHB + PHK + PLB + + JSR FindLine + BCS + + JMP .endStats ++ + + ; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA + + ; == Determine stat type == + LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL + LSR + AND.w #$0003 ; TT + CMP.w #$0000 + BEQ .normalStat + JMP .timeStat .normalStat - ; == Write Stripe header (VRAM address, i.e. tile coordinates) == - LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL - LSR #3 - AND.w #$001F ; X XXXX - CLC - ADC.w $C8 - XBA - STA.w $1002,x - - ; == Write Stripe header (Length of data) == - LDA.w #4*2-1 ; 4 tiles = 8 bytes - XBA - STA.w $1004,x - PHX - - ; == Load tile base (upper or lower half of white two-line zero) == - LDA.b StatsBottom - BNE + - LDA.w #$3D40 - BRA ++ -+ LDA.w #$3D50 -++ STA.b Temp + ; == Write Stripe header (VRAM address, i.e. tile coordinates) == + LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL + LSR #3 + AND.w #$001F ; X XXXX + CLC + ADC.w $C8 + XBA + STA.w $1002,x - ; == Load the actual stat word == - LDA.w CreditsStats+5,y - STA.b StatsPtr - LDA.w CreditsStats+6,y - STA.b StatsPtr+1 - LDA.b [StatsPtr] - STA.b ValueLow - - ; == Shift value == - LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS - AND.w #$000F ; SSSS - BEQ + - TAX - LDA.b ValueLow -- LSR - DEX - BNE - - STA.b ValueLow -+ - ; == Mask value == - LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS - ;LSR #4 - ;AND.w #$000F ; BBBB + ; == Write Stripe header (Length of data) == + LDA.w #4*2-1 ; 4 tiles = 8 bytes + XBA + STA.w $1004,x + PHX + + ; == Load tile base (upper or lower half of white two-line zero) == + LDA.b StatsBottom + BNE + + LDA.w #$3D40 + BRA ++ ++ LDA.w #$3D50 +++ STA.b Temp + + ; == Load the actual stat word == + LDA.w CreditsStats+5,y + STA.b StatsPtr + LDA.w CreditsStats+6,y + STA.b StatsPtr+1 + LDA.b [StatsPtr] + STA.b ValueLow + + ; == Shift value == + LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS + AND.w #$000F ; SSSS + BEQ + + TAX + LDA.b ValueLow +- LSR + DEX + BNE - + STA.b ValueLow ++ + ; == Mask value == + LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS + ;LSR #4 + ;AND.w #$000F ; BBBB LSR #3 AND.w #$001E - TAX - LDA.l BitMasks,x - AND.b ValueLow - STA.b ValueLow - - ; == Cap value == - LDA.w CreditsStats+3,y; ---- ---- CCC- ---- - LSR #5 - AND.w #$0007 ; CCC - BEQ + - ASL : TAX - LDA.l ValueCaps,x - CMP.b ValueLow - !BGE + - STA.b ValueLow -+ - ; == Display value == - LDA.b ValueLow - JSL HexToDecStats - PLX - STZ.b RemoveZero - - LDA.l $7F5004 - AND.w #$00FF - CMP.b RemoveZero - BNE + - LDA.w #BlankTile - BRA ++ -+ DEC.b RemoveZero - CLC - ADC.b Temp -++ %StripeTile() - - LDA.l $7F5005 - AND.w #$00FF - CMP.b RemoveZero - BNE + - LDA.w #BlankTile - BRA ++ -+ DEC.b RemoveZero - CLC - ADC.b Temp -++ %StripeTile() - - LDA.l $7F5006 - AND.w #$00FF - CMP.b RemoveZero - BNE + - LDA.w #BlankTile - BRA ++ -+ DEC.b RemoveZero - CLC - ADC.b Temp -++ %StripeTile() - - LDA.l $7F5007 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - %StripeEnd() + TAX + LDA.l BitMasks,x + AND.b ValueLow + STA.b ValueLow + + ; == Cap value == + LDA.w CreditsStats+3,y; ---- ---- CCC- ---- + LSR #5 + AND.w #$0007 ; CCC + BEQ + + ASL : TAX + LDA.l ValueCaps,x + CMP.b ValueLow + !BGE + + STA.b ValueLow ++ + ; == Display value == + LDA.b ValueLow + JSL HexToDecStats + PLX + STZ.b RemoveZero + + LDA.l $7F5004 + AND.w #$00FF + CMP.b RemoveZero + BNE + + LDA.w #BlankCreditsTile + BRA ++ ++ DEC.b RemoveZero + CLC + ADC.b Temp +++ %StripeTile() + + LDA.l $7F5005 + AND.w #$00FF + CMP.b RemoveZero + BNE + + LDA.w #BlankCreditsTile + BRA ++ ++ DEC.b RemoveZero + CLC + ADC.b Temp +++ %StripeTile() + + LDA.l $7F5006 + AND.w #$00FF + CMP.b RemoveZero + BNE + + LDA.w #BlankCreditsTile + BRA ++ ++ DEC.b RemoveZero + CLC + ADC.b Temp +++ %StripeTile() + + LDA.l $7F5007 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + %StripeEnd() .endStats - PLB - RTL - + PLB + RTL + .timeStat - ; Output format: HH:MM:SS.FF - - ; == Write Stripe header (VRAM address, i.e. tile coordinates) == - LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL - LSR #3 - AND.w #$001F ; X XXXX - CLC - ADC.b $C8 - XBA - STA.w $1002,x - - ; == Write Stripe header (Length of data) == - LDA.w #11*2-1 ; 11 tiles = 22 bytes - XBA - STA.w $1004,x - PHX - - ; == Load the actual stat words == - LDA.w CreditsStats+5,y - STA.b StatsPtr - LDA.w CreditsStats+6,y - STA.b StatsPtr+1 - LDA.b [StatsPtr] - STA.b ValueLow - INC.b StatsPtr - INC.b StatsPtr - LDA.b [StatsPtr] - STA.b ValueHigh - - CMP.w #!MAX_FRAME_COUNT>>16+1 - !BGE ++ - - ; == Convert total frames into hours, minutes, seconds and frames == - %CountUnits(!FRAMES_PER_HOUR, Hours) - %CountUnits(!FRAMES_PER_MINUTE, Minutes) - %CountUnits(!FRAMES_PER_SECOND, Seconds) - - ; == Cap at 99:59:59.59 == - LDA.b Hours - CMP.w #100 - !BLT + -++ LDA.w #99 - STA.b Hours - LDA.w #59 - STA.b Minutes - STA.b Seconds - STA.b ValueLow + ; Output format: HH:MM:SS.FF + + ; == Write Stripe header (VRAM address, i.e. tile coordinates) == + LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL + LSR #3 + AND.w #$001F ; X XXXX + CLC + ADC.b $C8 + XBA + STA.w $1002,x + + ; == Write Stripe header (Length of data) == + LDA.w #11*2-1 ; 11 tiles = 22 bytes + XBA + STA.w $1004,x + PHX + + ; == Load the actual stat words == + LDA.w CreditsStats+5,y + STA.b StatsPtr + LDA.w CreditsStats+6,y + STA.b StatsPtr+1 + LDA.b [StatsPtr] + STA.b ValueLow + INC.b StatsPtr + INC.b StatsPtr + LDA.b [StatsPtr] + STA.b ValueHigh + + CMP.w #!MAX_FRAME_COUNT>>16+1 + !BGE ++ + + ; == Convert total frames into hours, minutes, seconds and frames == + %CountUnits(!FRAMES_PER_HOUR, Hours) + %CountUnits(!FRAMES_PER_MINUTE, Minutes) + %CountUnits(!FRAMES_PER_SECOND, Seconds) + + ; == Cap at 99:59:59.59 == + LDA.b Hours + CMP.w #100 + !BLT + +++ LDA.w #99 + STA.b Hours + LDA.w #59 + STA.b Minutes + STA.b Seconds + STA.b ValueLow + - - ; == Load tile base (upper or lower half of white two-line zero) == - LDA.b StatsBottom - BNE + - LDA.w #$3D40 - BRA ++ -+ LDA.w #$3D50 -++ STA.b Temp - - PLX - - ; == Display value == - LDA.b Hours - JSL HexToDecStats - - LDA.l $7F5006 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.l $7F5007 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.w #!ColonOffset - CLC - ADC.b Temp - %StripeTile() - - LDA.b Minutes - JSL HexToDecStats - LDA.l $7F5006 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.l $7F5007 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.w #!ColonOffset - CLC - ADC.b Temp - %StripeTile() - - LDA.b Seconds - JSL HexToDecStats - LDA.l $7F5006 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.l $7F5007 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.w #!PeriodOffset - CLC - ADC.b Temp - %StripeTile() - - LDA.b ValueLow - JSL HexToDecStats - LDA.l $7F5006 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - LDA.l $7F5007 - AND.w #$00FF - CLC - ADC.b Temp - %StripeTile() - - %StripeEnd() - JMP .endStats - - + + ; == Load tile base (upper or lower half of white two-line zero) == + LDA.b StatsBottom + BNE + + LDA.w #$3D40 + BRA ++ ++ LDA.w #$3D50 +++ STA.b Temp + + PLX + + ; == Display value == + LDA.b Hours + JSL HexToDecStats + + LDA.l $7F5006 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.l $7F5007 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.w #!ColonOffset + CLC + ADC.b Temp + %StripeTile() + + LDA.b Minutes + JSL HexToDecStats + LDA.l $7F5006 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.l $7F5007 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.w #!ColonOffset + CLC + ADC.b Temp + %StripeTile() + + LDA.b Seconds + JSL HexToDecStats + LDA.l $7F5006 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.l $7F5007 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.w #!PeriodOffset + CLC + ADC.b Temp + %StripeTile() + + LDA.b ValueLow + JSL HexToDecStats + LDA.l $7F5006 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + LDA.l $7F5007 + AND.w #$00FF + CLC + ADC.b Temp + %StripeTile() + + %StripeEnd() + JMP .endStats + + RenderLineNumber: - %StripeStart(0, 3) - - STZ.b StatsBottom - LDA.b $CA - TAY - AND.w #$0001 - BEQ + - DEY - INC.b StatsBottom -+ - JSR LastHexDigit - PHA - JSR LastHexDigit - PHA - JSR LastHexDigit - %StripeTile() - PLA - %StripeTile() - PLA - %StripeTile() - - %StripeEnd() - - RTS - -LoadModifiedFont: - ; Based on CopyFontToVram(Bank00) - ; copies font graphics to VRAM (for BG3) - - ; set name base table to vram $4000 (word) - LDA.b #$02 : STA.w OBSEL - - ; increment on writes to $2119 - LDA.b #$80 : STA.w VMAIN - - ; set bank of the source address (see below) - LDA.b #FontGfx>>16 : STA.b Scrap02 - - REP #$30 - - ; vram target address is $7000 (word) - LDA.w #$7000 : STA.w VMADDL - - ; $00[3] = $0E8000 (offset for the font data) - LDA.w #FontGfx : STA.b Scrap00 - - ; going to write 0x1000 bytes (0x800 words) - LDX.w #FontGfxEnd-FontGfx/2-1 - -.nextWord + %StripeStart(0, 3) - ; read a word from the font data - LDA.b [$00] : STA.w VMDATAL - - ; increment source address by 2 - INC.b Scrap00 : INC.b Scrap00 - - DEX : BPL .nextWord - - SEP #$30 - JSL LoadFullItemTilesCredits + STZ.b StatsBottom + LDA.b $CA + TAY + AND.w #$0001 + BEQ + + DEY + INC.b StatsBottom ++ + JSR LastHexDigit + PHA + JSR LastHexDigit + PHA + JSR LastHexDigit + %StripeTile() + PLA + %StripeTile() + PLA + %StripeTile() - RTL + %StripeEnd() -LoadFullItemTilesCredits: - ; Based on CopyFontToVram(Bank00) - ; copies font graphics to VRAM (for BG3) + RTS - ; increment on writes to $2119 - LDA.b #$80 : STA.w VMAIN +LoadCreditsTiles: + JSL.l CopyFontToVRAM ; What we wrote over - ; set bank of the source address (see below) - LDA.b #FileSelectNewGraphics>>16 : STA.b Scrap02 + REP #$10 + LDA.b #$80 : STA.w VMAIN + LDA.b #$01 : STA.w DMAP0 + LDA.b #$18 : STA.w BBAD0 - REP #$30 + ; Item tiles + LDX.w #$8200 : STX.w VMADDL + LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0 + LDX.w #FileSelectNewGraphics : STX.w A1T0L + LDX.w #$0C00 : STX.w DAS0L + LDA.b #$01 : STA.w MDMAEN - ; vram target address is $8000 (word) (Wraps to start of VRAM on normal SNES, but using the correct address so it works on extended VRAM machines) - LDA.w #$8000 : STA.w VMADDL + ; Small characters A-Z + LDX.w #$7F00 : STX.w VMADDL + LDA.b #SmallCharacters>>16 : STA.w A1B0 + LDX.w #SmallCharacters : STX.w A1T0L + LDX.w #$0200 : STX.w DAS0L + LDA.b #$01 : STA.w MDMAEN - ; $00[3] = $0E8000 (offset for the font data) - LDA.w #FileSelectNewGraphics : STA.b Scrap00 + SEP #$10 +RTL - ; going to write 0x1000 bytes (0x800 words) - LDX.w #$800-1 +LoadOverworldCreditsTiles: + JSL.l CopyFontToVRAM ; What we wrote over + REP #$10 - .nextWord + ; Small characters A-Z + LDA.b #$80 : STA.w VMAIN + LDA.b #$01 : STA.w DMAP0 + LDA.b #$18 : STA.w BBAD0 + LDA.b #SmallCharacters>>16 : STA.w A1B0 + LDX.w #SmallCharacters : STX.w A1T0L + LDX.w #$0200 : STX.w DAS0L + LDX.w #$7F00 : STX.w VMADDL + LDA.b #$01 : STA.w MDMAEN - ; read a word from the font data - LDA.b [$00] : STA.w VMDATAL + SEP #$10 +RTL - ; increment source address by 2 - INC.b Scrap00 : INC.b Scrap00 - - DEX : BPL .nextWord - - SEP #$30 - - RTL - CheckFontTable: - TAY - PHB - PHK - PLB - LDA.w FontTable,Y - PLB - RTL + TAY + PHB + PHK + PLB + LDA.w FontTable,Y + PLB + RTL NearEnding: STZ.w $012A ; disable triforce helper thread @@ -602,7 +560,7 @@ NearEnding: REP #$10 JSL AltBufferTable_credits JSR DrawEndingItems -JML.l $00ec03 ; PaletteFilter_InitTheEndSprite + JML.l $80EC03 ; PaletteFilter_InitTheEndSprite EndingItems: ; This function is not strictly needed, simply updating the tracker @@ -620,39 +578,27 @@ DrawEndingItems: LDA.b #$01 : STA.b NMISTRIPES RTS -FontTable: - incbin stats/fonttable.bin - -CreditsStats: -incsrc stats/statConfig.asm -dw $FFFF - -org $0eedd9 - JSL EndingItems - -org $0eedaf - JSL NearEnding - -org $0EE651 - JSL LoadModifiedFont - -org $0EE828 - JSL PreparePointer - LDA.b [CreditsPtr],Y - NOP -org $0EE83F - LDA.b [CreditsPtr],Y - NOP -org $0EE853 - LDA.b [CreditsPtr],Y - NOP - AND.w #$00ff - ASL A - JSL CheckFontTable - -org $0ee86d - JSL RenderCreditsStatCounter - JMP.w AfterDeathCounterOutput - -org $0ee8fd - AfterDeathCounterOutput: +;================================================================================ +; Dialog Pointer Override +;-------------------------------------------------------------------------------- +EndingSequenceTableOverride: + PHY + PHX + TYX + LDA.l EndingSequenceText, X + PLX + STA.w $1008, X + PLY +RTL +;-------------------------------------------------------------------------------- +EndingSequenceTableLookupOverride: + PHX : PHB + PHK : PLB + TYX + LDA.l EndingSequenceText, X : AND.w #$00FF + ASL + TAY + LDA.w FontTable,Y + PLB : PLX +RTL +;-------------------------------------------------------------------------------- diff --git a/stats/statConfig.asm b/stats/statConfig.asm index 91f9c9d..68dbeec 100755 --- a/stats/statConfig.asm +++ b/stats/statConfig.asm @@ -46,6 +46,7 @@ macro AddStat(address, type, shiftRight, bits, digits, xPos, lineNumber) dl
endmacro +CreditsStats: %AddStat(SwordTime, 1, 0, 32, 4, !FIRST_SWORD_X, !FIRST_SWORD_Y) %AddStat(BootsTime, 1, 0, 32, 4, !PEGASUS_BOOTS_X, !PEGASUS_BOOTS_Y) %AddStat(FluteTime, 1, 0, 32, 4, !FLUTE_X, !FLUTE_Y) @@ -66,3 +67,5 @@ endmacro %AddStat(LagTime, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y) %AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y) %AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y) + +dw $FFFF diff --git a/tables.asm b/tables.asm index 72972a3..1ec6baf 100644 --- a/tables.asm +++ b/tables.asm @@ -1,99 +1,95 @@ ;================================================================================ ; Item Tables ;-------------------------------------------------------------------------------- -org $308000 ; bank #$30 ; PC 0x180000 - 0x180006 [encrypted] +org $B08000 ; bank #$30 ; PC 0x180000 - 0x180006 [encrypted] HeartPieceIndoorValues: HeartPiece_Forest_Thieves: - db #$17 ; #$17 = Heart Piece + db $17 ; #$17 = Heart Piece HeartPiece_Lumberjack_Tree: - db #$17 + db $17 HeartPiece_Spectacle_Cave: - db #$17 + db $17 HeartPiece_Circle_Bushes: - db #$17 + db $17 HeartPiece_Graveyard_Warp: - db #$17 + db $17 HeartPiece_Mire_Warp: - db #$17 + db $17 HeartPiece_Smith_Pegs: - db #$17 + db $17 ;-------------------------------------------------------------------------------- ; 0x180006 - 0x18000F (unused) [encrypted] ;-------------------------------------------------------------------------------- -org $308010 ; PC 0x180010 - 0x180017 [encrypted] +org $B08010 ; PC 0x180010 - 0x180017 [encrypted] SpriteItemValues: RupeeNPC_MoldormCave: - db #$46 ; #$46 = 300 Rupees + db $46 ; #$46 = 300 Rupees RupeeNPC_NortheastDarkSwampCave: - db #$46 ; #$46 = 300 Rupees + db $46 ; #$46 = 300 Rupees LibraryItem: - db #$1D ; #$1D = Book of Mudora + db $1D ; #$1D = Book of Mudora MushroomItem: - db #$29 ; #$29 = Mushroom + db $29 ; #$29 = Mushroom WitchItem: - db #$0D ; #$0D = Magic Powder + db $0D ; #$0D = Magic Powder MagicBatItem: - db #$4E ; #$4E = Half Magic Item (Default) - #$FF = Use Original Logic - See "HalfMagic" Below + db $4E ; #$4E = Half Magic Item (Default) - #$FF = Use Original Logic - See "HalfMagic" Below EtherItem: - db #$10 ; #$10 = Ether Medallion + db $10 ; #$10 = Ether Medallion BombosItem: - db #$0F ; #$0F = Bombos Medallion + db $0F ; #$0F = Bombos Medallion ;-------------------------------------------------------------------------------- ; 0x180017 - 0x18001F (unused) [encrypted] ;-------------------------------------------------------------------------------- -org $308020 ; PC 0x180020 +org $B08020 ; PC 0x180020 DiggingGameRNG: - db #$0F ; #$0F = 15 digs (default) (max ~30) -org $1DFD95 ; PC 0xEFD95 - db #$0F ; #$0F = 15 digs (default) (max ~30) -org $308021 ; PC 0x180021 + db $0F ; #$0F = 15 digs (default) (max ~30) +org $9DFD95 ; PC 0xEFD95 + db $0F ; #$0F = 15 digs (default) (max ~30) +org $B08021 ; PC 0x180021 ChestGameRNG: -db #$00 ; #$00 = 2nd chest (default) - #$01 = 1st chest +db $00 ; #$00 = 2nd chest (default) - #$01 = 1st chest ;-------------------------------------------------------------------------------- ;0 = Bombos ;1 = Ether ;2 = Quake -org $308022 ; PC 0x180022 +org $B08022 ; PC 0x180022 MireRequiredMedallion: -db #$01 ; #$01 = Ether (default) +db $01 ; #$01 = Ether (default) -org $308023 ; PC 0x180023 +org $B08023 ; PC 0x180023 TRockRequiredMedallion: -db #$02 ; #$02 = Quake (default) +db $02 ; #$02 = Quake (default) ;-------------------------------------------------------------------------------- -org $308024 ; PC 0x180024 - 0x180027 +org $B08024 ; PC 0x180024 - 0x180027 BigFairyHealth: -db #$A0 ; #$A0 = Refill Health (default) - #$00 = Don't Refill Health +db $A0 ; #$A0 = Refill Health (default) - #$00 = Don't Refill Health BigFairyMagic: -db #$00 ; #$80 = Refill Magic - #$00 = Don't Refill Magic (default) +db $00 ; #$80 = Refill Magic - #$00 = Don't Refill Magic (default) SpawnNPCHealth: -db #$A0 ; #$A0 = Refill Health (default) - #$00 = Don't Refill Health +db $A0 ; #$A0 = Refill Health (default) - #$00 = Don't Refill Health SpawnNPCMagic: -db #$00 ; #$80 = Refill Magic - #$00 = Don't Refill Magic (default) +db $00 ; #$80 = Refill Magic - #$00 = Don't Refill Magic (default) ;-------------------------------------------------------------------------------- -org $308028 ; PC 0x180028 +org $B08028 ; PC 0x180028 FairySword: -db #$03 ; #$03 = Golden Sword (default) +db $03 ; #$03 = Golden Sword (default) PedestalMusicCheck: -;org $08C435 ; <- 44435 - ancilla_receive_item.asm : 125 -;db #$01 ; #$01 = Master Sword (default) -org $0589B0 ; PC 0x289B0 ; sprite_master_sword.asm : 179 +;org $88C435 ; <- 44435 - ancilla_receive_item.asm : 125 +;db $01 ; #$01 = Master Sword (default) +org $8589B0 ; PC 0x289B0 ; sprite_master_sword.asm : 179 PedestalSword: -db #$01 ; #$01 = Master Sword (default) +db $01 ; #$01 = Master Sword (default) -org $308029 ; PC 0x180029 - 0x18002A +org $B08029 ; PC 0x180029 - 0x18002A SmithItemMode: -db #$01 ; #$00 = Classic Tempering Process - #$01 = Quick Item Get (default) +db $01 ; #$00 = Classic Tempering Process - #$01 = Quick Item Get (default) SmithItem: -db #$02 ; #$02 = Tempered Sword (default) - -;org $06B48E ; PC 0x3348E ; sprite_smithy_bros.asm : 473 -;SmithSwordCheck: -;db #$03 ; #$03 = Tempered Sword (default) ; THESE VALUES ARE +1 -org $06B55C ; PC 0x3355C ; sprite_smithy_bros.asm : 634 +db $02 ; #$02 = Tempered Sword (default) +org $86B55C ; PC 0x3355C ; sprite_smithy_bros.asm : 634 SmithSword: -db #$02 ; #$02 = Tempered Sword (default) +db $02 ; #$02 = Tempered Sword (default) ;-------------------------------------------------------------------------------- ; 0x18002B- 0x18002C (Unused) @@ -125,136 +121,125 @@ org $308030 ; PC 0x180030 EnableSRAMTrace: db #$00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -org $308031 ; PC 0x180031 +org $B08031 ; PC 0x180031 EnableEasterEggs: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- ; 0x180032 (unused) ;-------------------------------------------------------------------------------- -org $308033 ; PC 0x180033 +org $B08033 ; PC 0x180033 HeartBeep: -db #$20 ; #$00 = Off - #$20 = Normal (default) - #$40 = Half Speed - #$80 = Quarter Speed +db $20 ; #$00 = Off - #$20 = Normal (default) - #$40 = Half Speed - #$80 = Quarter Speed ;-------------------------------------------------------------------------------- ; 0x180034 - 0x180035 (Unused) ;-------------------------------------------------------------------------------- -org $308036 ; PC 0x180036 - 0x180037 +org $B08036 ; PC 0x180036 - 0x180037 RupoorDeduction: -dw #$000A ; #$0A - Default (10 decimal) +dw $000A ; #$0A - Default (10 decimal) ;-------------------------------------------------------------------------------- -org $308038 ; PC 0x180038 +org $B08038 ; PC 0x180038 LampConeSewers: -db #$01 ; #$00 = Off - #$01 = On (default) +db $01 ; #$00 = Off - #$01 = On (default) ;-------------------------------------------------------------------------------- -; 0x180039 (Unused) +org $308039 ; PC 0x180039 +ItemCounterHUD: +db $00 ; $00 = Off | $01 = Display TotalItemCounter / TotalItemCount display on HUD ;-------------------------------------------------------------------------------- -org $30803A ; PC 0x18003A-0x18003C +org $B0803A ; PC 0x18003A-0x18003C MapHUDMode: db #$00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Map - #$02 = Display Dungeon Count Always MapMode: -db #$00 ; #$00 = Always On (default) - #$01 = Require Map Item +db $00 ; #$00 = Always On (default) - #$01 = Require Map Item CompassMode: -db #$00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Compass - #$02 = Display Dungeon Count Always +db $00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Compass - #$02 = Display Dungeon Count Always + ; #$80 = Move prizes to custom postion - #$40 = Compasses are shuffled and must be obtained to show position if bit on ;-------------------------------------------------------------------------------- -org $30803D ; PC 0x18003D +org $B0803D ; PC 0x18003D PersistentFloodgate: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -org $30803E ; PC 0x18003E -InvincibleGanon: -db #$00 -; #$00 = Off (default) -; #$01 = On -; #$02 = Require All Dungeons -; #$03 = Require "NumberOfCrystalsRequiredForGanon" Crystals and Aga2 -; #$04 = Require "NumberOfCrystalsRequiredForGanon" Crystals -; #$05 = Require "GoalItemRequirement" Goal Items -; #$06 = Light Speed -; #$07 = Require All Crystals and Crystal Bosses -; #$08 = Require All Crystal Bosses only +org $B0803E ; PC 0x18003E (unused) ;-------------------------------------------------------------------------------- -org $30803F ; PC 0x18003F +org $B0803F ; PC 0x18003F HammerableGanon: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- ; 0x180040 - (unused) ;-------------------------------------------------------------------------------- -org $308041 ; PC 0x180041 +org $B08041 ; PC 0x180041 AllowSwordlessMedallionUse: -db #$00 ; #$00 = Off (default) - #$01 = Medallion Pads - #$02 = Always +db $00 ; #$00 = Off (default) - #$01 = Medallion Pads - #$02 = Always ;-------------------------------------------------------------------------------- -org $308042 ; PC 0x180042 +org $B08042 ; PC 0x180042 PermitSQFromBosses: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- ; 0x180043 (unused) ;-------------------------------------------------------------------------------- -org $308044 ; PC 0x180044 +org $B08044 ; PC 0x180044 AllowHammerTablets: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -org $30805D ; PC 0x18005D +org $B0805D ; PC 0x18005D AllowHammerEvilBarrierWithFighterSword: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -org $308045 ; PC 0x180045 +org $B08045 ; PC 0x180045 +; display ---edcba a: Small Keys, b: Big Key, c: Map, d: Compass, e: Bosses HUDDungeonItems: - ; display ---edcba a: Small Keys, b: Big Key, c: Map, d: Compass, e: Bosses -db #$00 +db $00 ;-------------------------------------------------------------------------------- ; 0x180046 (unused) ;-------------------------------------------------------------------------------- -org $308048 ; PC 0x180048 +org $B08048 ; PC 0x180048 MenuSpeed: -db #$08 ; #$08 (default) - higher is faster - #$E8 = instant open -org $0DDD9A ; PC 0x6DD9A (equipment.asm:95) ; Menu Down Chime -db #$11 ; #$11 = Vwoop Down (Default) - #$20 = Menu Chime -org $0DDF2A ; PC 0x6DF2A (equipment.asm:466) ; Menu Up Chime -db #$12 ; #$12 = Vwoop Up (Default) - #$20 = Menu Chime -org $0DE0E9 ; PC 0x6E0E9 (equipment.asm:780) ; Menu Up Chime -db #$12 ; #$12 = Vwoop Up (Default) - #$20 = Menu Chime +db $08 ; #$08 (default) - higher is faster - #$E8 = instant open +org $8DDD9A ; PC 0x6DD9A (equipment.asm:95) ; Menu Down Chime +db $11 ; #$11 = Vwoop Down (Default) - #$20 = Menu Chime +org $8DDF2A ; PC 0x6DF2A (equipment.asm:466) ; Menu Up Chime +db $12 ; #$12 = Vwoop Up (Default) - #$20 = Menu Chime +org $8DE0E9 ; PC 0x6E0E9 (equipment.asm:780) ; Menu Up Chime +db $12 ; #$12 = Vwoop Up (Default) - #$20 = Menu Chime ;-------------------------------------------------------------------------------- -org $308049 ; PC 0x180049 +org $B08049 ; PC 0x180049 MenuCollapse: -db #$00 ; #$00 = Press Start (default) - #$10 = Release Start +db $00 ; #$00 = Press Start (default) - #$10 = Release Start ;-------------------------------------------------------------------------------- -org $30804A ; PC 0x18004A +org $B0804A ; PC 0x18004A InvertedMode: -db #$00 ; #$00 = Normal (default) - #$01 = Inverted +db $00 ; #$00 = Normal (default) - #$01 = Inverted ;-------------------------------------------------------------------------------- -org $30804B ; PC 0x18004B +org $B0804B ; PC 0x18004B QuickSwapFlag: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- -org $30804C ; PC 0x18004C +org $B0804C ; PC 0x18004C SmithTravelsFreely: -db #$00 ; #$00 = Off (default) - #$01 = On (frog/smith can enter multi-entrance doors) +db $00 ; #$00 = Off (default) - #$01 = On (frog/smith can enter multi-entrance doors) ;-------------------------------------------------------------------------------- -org $30804D ; PC 0x18004D +org $B0804D ; PC 0x18004D EscapeAssist: ; ScrubMode: -db #$00 -;-MBA -mba -;M - Infinite Magic (after escape) -;B - Infinite Bombs (after escape) -;A - Infinite Arrows (after escape) -;m - Infinite Magic (during escape) -;b - Infinite Bombs (during escape) -;a - Infinite Arrows (during escape) +db $00 +;---- -mba +;m - Infinite Magic +;b - Infinite Bombs +;a - Infinite Arrows ;-------------------------------------------------------------------------------- -org $30804E ; PC 0x18004E +org $B0804E ; PC 0x18004E UncleRefill: -db #$00 +db $00 ;---- -mba ;m - Refill Magic ;b - Refill Bombs ;a - Refill Arrows ;-------------------------------------------------------------------------------- -org $30804F ; PC 0x18004F +org $B0804F ; PC 0x18004F ByrnaInvulnerability: -db #$01 ; #$00 = Off - #$01 = On (default) +db $01 ; #$00 = Off - #$01 = On (default) ;-------------------------------------------------------------------------------- -org $308050 ; PC 0x180050 - 0x18005C +org $B08050 ; PC 0x180050 - 0x18005C CrystalPendantFlags_2: - db $00 ; Sewers + db $02 ; Ganons Tower - because 5D is not available right now - sewers doesn't get one db $00 ; Hyrule Castle db $00 ; Eastern Palace db $00 ; Desert Palace @@ -270,15 +255,13 @@ CrystalPendantFlags_2: db $40 ; Turtle Rock ;Pendant: $00 ;Crystal: $40 +;No Icon: $80 +;Aga1: $01 +;Aga2: $02 ;-------------------------------------------------------------------------------- -org $30805E ; PC 0x18005E - Number of crystals required to enter GT -NumberOfCrystalsRequiredForTower: -db #$07 ; #$07 = 7 Crystals -org $30805F ; PC 0x18005F - Number of crystals required to kill Ganon -NumberOfCrystalsRequiredForGanon: -db #$07 ; #$07 = 7 Crystals +org $B0805E ; PC 0x18005E - 0x18005F (Unused) ;-------------------------------------------------------------------------------- -org $308060 ; PC 0x180060 - 0x18007E +org $B08060 ; PC 0x180060 - 0x18007E ProgrammableItemLogicJump_1: JSL.l $000000 : RTL ProgrammableItemLogicJump_2: @@ -286,34 +269,34 @@ JSL.l $000000 : RTL ProgrammableItemLogicJump_3: JSL.l $000000 : RTL -org $308061 ; PC 0x180061 +org $B08061 ; PC 0x180061 ProgrammableItemLogicPointer_1: -dl #$000000 -org $308066 ; PC 0x180066 +dl $000000 +org $B08066 ; PC 0x180066 ProgrammableItemLogicPointer_2: -dl #$000000 -org $30806B ; PC 0x18006B +dl $000000 +org $B0806B ; PC 0x18006B ProgrammableItemLogicPointer_3: -dl #$000000 +dl $000000 ;-------------------------------------------------------------------------------- ; 0x18007F (unused) ;-------------------------------------------------------------------------------- -org $308070 ; PC 0x180070 - 0x18007F +org $B08070 ; PC 0x180070 - 0x18007F CrystalNumberTable: -db $00 ; +db $69 ; Eastern +db $69 ; Hera +db $69 ; Desert +db $7F ; Darkness +db $6C ; Skull +db $7C ; TRock +db $6D ; Thieves +db $6F ; Mire +db $6E ; Ice db $79 ; Swamp db $00 ; -db $6E ; Ice db $00 ; -db $6F ; Mire db $00 ; -db $6D ; Thieves -db $69 ; Desert -db $7C ; TRock -db $69 ; Hera -db $6C ; Skull -db $69 ; Eastern -db $7F ; Darkness +db $00 ; db $00 ; db $00 ; @@ -356,41 +339,41 @@ db $00 ; ;Warp BL : 7A ;Warp BR : 7B ;-------------------------------------------------------------------------------- -org $308080 ; PC 0x180080 - 0x180083 ; Default to fill on upgrade. Can be set to 0 to not fill. +org $B08080 ; PC 0x180080 - 0x180083 ; Default to fill on upgrade. Can be set to 0 to not fill. Upgrade5BombsRefill: -db #$32 +db $32 Upgrade10BombsRefill: -db #$32 +db $32 Upgrade5ArrowsRefill: -db #$46 +db $46 Upgrade10ArrowsRefill: -db #$46 +db $46 ;-------------------------------------------------------------------------------- -org $308084 ; PC 0x180084 - 0x180085 +org $B08084 ; PC 0x180084 - 0x180085 PotionHealthRefill: -db #$A0 ; #$A0 - Full Refill (Default) +db $A0 ; #$A0 - Full Refill (Default) PotionMagicRefill: -db #$80 ; #$80 - Full Refill (Default) +db $80 ; #$80 - Full Refill (Default) ;-------------------------------------------------------------------------------- -org $308086 ; PC 0x180086 +org $B08086 ; PC 0x180086 GanonAgahRNG: -db #$00 ; $00 = static rng, $01 = no extra blue balls/warps +db $00 ; $00 = static rng, $01 = no extra blue balls/warps ;-------------------------------------------------------------------------------- -org $308087 ; PC 0x180087 +org $B08087 ; PC 0x180087 IsEncrypted: -dw #$0000 ; $0000 = not encrypted, $0001 = encrypted with static key, $0002 = Encrypted w/ passcode entry screen +dw $0000 ; $0000 = not encrypted, $0001 = encrypted with static key, $0002 = Encrypted w/ passcode entry screen ;-------------------------------------------------------------------------------- -org $308089 ; PC 0x180089 +org $B08089 ; PC 0x180089 TurtleRockAutoOpenFix: -db #$00 ; #$00 - Normal, #$01 - Open TR Entrance if exiting from it +db $00 ; #$00 - Normal, #$01 - Open TR Entrance if exiting from it ;-------------------------------------------------------------------------------- -org $30808A ; PC 0x18008A +org $B0808A ; PC 0x18008A BlockCastleDoorsInRain: -db #$00 ; #$00 - Normal, $01 - Block them (Used by Entrance Rando in Standard Mode) +db $00 ; #$00 - Normal, $01 - Block them (Used by Entrance Rando in Standard Mode) ;-------------------------------------------------------------------------------- ; 0x18008B-0x18008D (unused) ;-------------------------------------------------------------------------------- -org $30808E ; PC 0x18008E +org $B0808E ; PC 0x18008E FakeBoots: db $00 ; #$00 = Off (default) - #$01 = On ;-------------------------------------------------------------------------------- @@ -398,34 +381,34 @@ org $30808F ; PC 0x18008F SeededRNG: db $01 ; #$00 = Off - #$01 = Seeded RNG (default for rando) ;-------------------------------------------------------------------------------- -org $308090 ; PC 0x180090 - 0x180097 +org $B08090 ; PC 0x180090 - 0x180097 ProgressiveSwordLimit: -db #$04 ; #$04 - 4 Swords (default) +db $04 ; #$04 - 4 Swords (default) ProgressiveSwordReplacement: -db #$47 ; #$47 - 20 Rupees (default) +db $47 ; #$47 - 20 Rupees (default) ProgressiveShieldLimit: -db #$03 ; #$03 - 3 Shields (default) +db $03 ; #$03 - 3 Shields (default) ProgressiveShieldReplacement: -db #$47 ; #$47 - 20 Rupees (default) +db $47 ; #$47 - 20 Rupees (default) ProgressiveArmorLimit: -db #$02 ; #$02 - 2 Armors (default) +db $02 ; #$02 - 2 Armors (default) ProgressiveArmorReplacement: -db #$47 ; #$47 - 20 Rupees (default) +db $47 ; #$47 - 20 Rupees (default) BottleLimit: -db #$04 ; #$04 - 4 Bottles (default) +db $04 ; #$04 - 4 Bottles (default) BottleLimitReplacement: -db #$47 ; #$47 - 20 Rupees (default) +db $47 ; #$47 - 20 Rupees (default) ProgressiveBowLimit: -db #$02 ; #$02 - 2 Bows (default) +db $02 ; #$02 - 2 Bows (default) ProgressiveBowReplacement: -db #$47 ; #$47 - 20 Rupees (default) +db $47 ; #$47 - 20 Rupees (default) ;-------------------------------------------------------------------------------- ; 0x18009A - 0x18009C one mind ;-------------------------------------------------------------------------------- -org $30809A ; PC 0x18009A +org $B0809A ; PC 0x18009A OneMindPlayerCount: db 0 -org $30809B ; PC 0x18009B - 0x18009C +org $B0809B ; PC 0x18009B - 0x18009C OneMindTimerInit: dw 0 ;-------------------------------------------------------------------------------- @@ -434,37 +417,37 @@ dw 0 ; ; b - boss icon ;-------------------------------------------------------------------------------- -org $30809D +org $B0809D DungeonMapIcons: db $01 ;-------------------------------------------------------------------------------- ; 0x18009E - 0x18009F (unused) ;-------------------------------------------------------------------------------- -org $3080A0 ; PC 0x1800A0 - 0x1800A4 +org $B080A0 ; PC 0x1800A0 - 0x1800A4 Bugfix_MirrorlessSQToLW: -db #$01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) +db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) Bugfix_SwampWaterLevel: -db #$01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) +db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) Bugfix_PreAgaDWDungeonDeathToFakeDW: -db #$01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) +db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) Bugfix_SetWorldOnAgahnimDeath: -db #$01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) +db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) Bugfix_PodEG: -db #$01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) +db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default) ;-------------------------------------------------------------------------------- ; 0x1800A5 - 0x1800AF (unused) ;-------------------------------------------------------------------------------- -org $3080B0 ; 0x1800B0-0x1800BF +org $B080B0 ; 0x1800B0-0x1800BF StaticDecryptionKey: dd $00000000, $00000000, $00000000, $00000000 ;-------------------------------------------------------------------------------- -org $3080C0 ; 0x1800C0-0x1800C7 [encrypted] +org $B080C0 ; 0x1800C0-0x1800C7 [encrypted] KnownEncryptedValue: db $31, $41, $59, $26, $53, $58, $97, $93 ;-------------------------------------------------------------------------------- ; 0x1800C8 - 0x1800FF (unused) ;-------------------------------------------------------------------------------- -org $308100 ; PC 0x180100 (0x40 bytes) +org $B08100 ; PC 0x180100 (0x40 bytes) ShovelSpawnTable: db $B2 ; Gold Bee db $D8, $D8, $D8 ; Single Heart @@ -483,178 +466,178 @@ ShovelSpawnTable: ;-------------------------------------------------------------------------------- ; Bank 30 resumes below at HeartPieceOutdoorValues ;-------------------------------------------------------------------------------- -org $098B7C ; PC 0x48B7C +org $898B7C ; PC 0x48B7C EtherTablet: - db #$10 ; #$10 = Ether -org $08CAA9 ; PC 0x44AA9 - db #$10 ; #$10 = Ether + db $10 ; #$10 = Ether +org $88CAA9 ; PC 0x44AA9 + db $10 ; #$10 = Ether -org $098B81 ; PC 0x48B81 +org $898B81 ; PC 0x48B81 BombosTablet: - db #$0F ; #$0F = Bombos -org $08CAAE ; PC 0x44AAE - db #$0F ; #$0F = Bombos + db $0F ; #$0F = Bombos +org $88CAAE ; PC 0x44AAE + db $0F ; #$0F = Bombos ;-------------------------------------------------------------------------------- -org $05FBD2 ; PC 0x2FBD2 - sprite_mad_batter.asm:209 - (#$01) +org $85FBD2 ; PC 0x2FBD2 - sprite_mad_batter.asm:209 - (#$01) HalfMagic: db $01 ; #$01 = 1/2 Magic (default) - #$02 = 1/4 Magic ;-------------------------------------------------------------------------------- -org $07ADA7 ; PC 0x3ADA7 - Bank07.asm:7216 - (db 4, 8, 8) +org $87ADA7 ; PC 0x3ADA7 - Bank07.asm:7216 - (db 4, 8, 8) CapeMagicUse: db $04, $08, $10 ; change to db $04, $08, $08 for original cape behavior -org $08DC42 ; PC 0x45C42 - ancilla_cane_spark.asm:200 - (db 4, 2, 1) +org $88DC42 ; PC 0x45C42 - ancilla_cane_spark.asm:200 - (db 4, 2, 1) ByrnaMagicUsage: -db #$04, #$02, #$01 ; normal, 1/2, 1/4 magic +db $04, #$02, #$01 ; normal, 1/2, 1/4 magic ;-------------------------------------------------------------------------------- ;Dungeon Music -;org $02D592 ; PC 0x15592 +;org $82D592 ; PC 0x15592 ;11 - Pendant Dungeon ;16 - Crystal Dungeon -org $02D592+$03 +org $82D592+$03 Music_Castle: db $10,$10,$10 -org $02D592+$24 +org $82D592+$24 Music_AgaTower: db $10 -org $02D592+$81 +org $82D592+$81 Music_Sewer: db $10 -org $02D592+$08 +org $82D592+$08 Music_Eastern: db $11 -org $02D592+$09 +org $82D592+$09 Music_Desert: db $11, $11, $11, $11 -org $02D592+$33 +org $82D592+$33 Music_Hera: db $11 -org $02907A ; 0x1107A - Bank02.asm:3089 (#$11) +org $82907A ; 0x1107A - Bank02.asm:3089 (#$11) Music_Hera2: db $11 -org $028B8C ; 0x10B8C - Bank02.asm:2231 (#$11) +org $828B8C ; 0x10B8C - Bank02.asm:2231 (#$11) Music_Hera3: db $11 -org $02D592+$26 +org $82D592+$26 Music_Darkness: db $16 -org $02D592+$25 +org $82D592+$25 Music_Swamp: db $16 -org $02D592+$28 +org $82D592+$28 Music_Skull: db $16, $16, $16, $16 -org $02D592+$76 +org $82D592+$76 Music_Skull_Drop: db $16, $16, $16, $16 -org $02D592+$34 +org $82D592+$34 Music_Thieves: db $16 -org $02D592+$2D +org $82D592+$2D Music_Ice: db $16 -org $02D592+$27 +org $82D592+$27 Music_Mire: db $16 -org $02D592+$35 +org $82D592+$35 Music_TRock: db $16 -org $02D592+$15 +org $82D592+$15 Music_TRock2: db $16 -org $02D592+$18 +org $82D592+$18 Music_TRock3: db $16, $16 -org $02D592+$37 +org $82D592+$37 Music_GTower: db $16 ;-------------------------------------------------------------------------------- ; OWG EDM bridge sign text pointer (Message id of the upper left of map05 = map05) ;-------------------------------------------------------------------------------- -org $07F501 -dw #$018E +org $87F501 +dw $018E ;-------------------------------------------------------------------------------- ; GT sign text pointer (Message id of the upper right of map43 = map44) ;-------------------------------------------------------------------------------- -org $07F57F -dw #$0190 +org $87F57F +dw $0190 ;-------------------------------------------------------------------------------- ; Pyramid sign text pointer (Message id of the upper left of map5B = map5B) ;-------------------------------------------------------------------------------- -org $07F5AD -dw #$0191 +org $87F5AD +dw $0191 ;-------------------------------------------------------------------------------- ; HC (inverted) left sign text pointer (Message id of the upper left of map1B = map1B) ;-------------------------------------------------------------------------------- -org $07F52D -dw #$0190 +org $87F52D +dw $0190 ;-------------------------------------------------------------------------------- ; HC (inverted) right sign text pointer (Message id of the upper right of map1B = map1C) ;-------------------------------------------------------------------------------- -org $07F52F -dw #$0191 +org $87F52F +dw $0191 ;-------------------------------------------------------------------------------- -;Map Pendant / Crystal Indicators +;Map Pendant / Crystal Indicators - DEPRECATED in favor of WorldMapIcon_tile, don't use -org $0ABF2E ; PC 0x53F02 +org $8ABF2E ; PC 0x53F02 dw $0100 ; #$6234 - Master Sword -org $0ABEF8 ; PC 0x53EF8 +org $8ABEF8 ; PC 0x53EF8 MapObject_Eastern: -dw $6038 ; #$6038 - Green Pendant / Courage +dw $6238 ; #$6038 - Green Pendant / Courage -org $0ABF1C ; PC 0x53F1C +org $8ABF1C ; PC 0x53F1C MapObject_Desert: dw $6034 ; #$6034 - Blue Pendant / Power -org $0ABF0A ; PC 0x53F0A +org $8ABF0A ; PC 0x53F0A MapObject_Hera: dw $6032 ; #$6032 - Red Pendant / Wisdom -org $0ABF00 ; PC 0x53F00 +org $8ABF00 ; PC 0x53F00 MapObject_Darkness: dw $6434 ; #6434 - Crystal -org $0ABF6C ; PC 0x53F6C +org $8ABF6C ; PC 0x53F6C MapObject_Swamp: dw $6434 ; #6434 - Crystal -org $0ABF12 ; PC 0x53F12 +org $8ABF12 ; PC 0x53F12 MapObject_Skull: dw $6434 ; #6434 - Crystal -org $0ABF36 ; PC 0x53F36 +org $8ABF36 ; PC 0x53F36 MapObject_Thieves: dw $6434 ; #6434 - Crystal -org $0ABF5A ; PC 0x53F5A +org $8ABF5A ; PC 0x53F5A MapObject_Ice: dw $6432 ; #6434 - Crystal 5/6 -org $0ABF48 ; PC 0x53F48 +org $8ABF48 ; PC 0x53F48 MapObject_Mire: dw $6432 ; #6434 - Crystal 5/6 -org $0ABF24 ; PC 0x53F24 +org $8ABF24 ; PC 0x53F24 MapObject_TRock: dw $6434 ; #6434 - Crystal ;-------------------------------------------------------------------------------- -org $02A09B ; PC 0x1209B - Bank02.asm:5802 - (pool MilestoneItem_Flags:) +org $82A09B ; PC 0x1209B - Bank02.asm:5802 - (pool MilestoneItem_Flags:) CrystalPendantFlags: db $00 ; Sewers db $00 ; Hyrule Castle @@ -684,20 +667,21 @@ CrystalPendantFlags: ;-------------------------------------------------------------------------------- ;Dungeons with no drops should match their respective world's normal vanilla prize ;xxx ;-------------------------------------------------------------------------------- -org $01C6FC ; PC 0xC6FC - Bank01.asm:10344 - (db $00, $00, $01, $02, $00, $06, $06, $06, $06, $06, $03, $06, $06) +org $81C6FC ; PC 0xC6FC - Bank01.asm:10344 - (db $00, $00, $01, $02, $00, $06, $06, $06, $06, $06, $03, $06, $06) +DungeonPrizeReceiptID: db $00 ; Sewers db $00 ; Hyrule Castle - db $01 ; Eastern Palace - db $02 ; Desert Palace + db $37 ; Eastern Palace + db $38 ; Desert Palace db $00 ; Agahnim's Tower - db $06 ; Swamp Palace - db $06 ; Palace of Darkness - db $06 ; Misery Mire - db $06 ; Skull Woods - db $06 ; Ice Palace - db $03 ; Tower of Hera - db $06 ; Thieves' Town - db $06 ; Turtle Rock + 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 $20 ; Thieves' Town + db $20 ; Turtle Rock ;Ether/Nothing: $00 ;Green Pendant: $01 ;Blue Pendant: $02 @@ -706,7 +690,7 @@ org $01C6FC ; PC 0xC6FC - Bank01.asm:10344 - (db $00, $00, $01, $02, $00, $06, $ ;Bombos: $05 ;Crystal: $06 ;-------------------------------------------------------------------------------- -org $02885E ; PC 0x1085E - Bank02.asm:1606 - (dw $0006, $005A, $0029, $0090, $00DE, $00A4, $00AC, $000D) ; DEPRECATED - DISCONTINUE USE +org $82885E ; PC 0x1085E - Bank02.asm:1606 - (dw $0006, $005A, $0029, $0090, $00DE, $00A4, $00AC, $000D) ; DEPRECATED - DISCONTINUE USE dw $0006 ; Crystal 2 Location dw $005A ; Crystal 1 Location dw $0029 ; Crystal 3 Location @@ -729,28 +713,28 @@ dw $000D ; Agahnim II Location ; 0D ;AC = Blind Room ;0D = Agahnim 2 Room ;-------------------------------------------------------------------------------- -;org $098B7D ; PC 0x48B7D - ancilla_init.asm:1630 - (db $37, $39, $38) ; DEPRECATED - DISCONTINUE USE +;org $898B7D ; PC 0x48B7D - ancilla_init.asm:1630 - (db $37, $39, $38) ; DEPRECATED - DISCONTINUE USE ;PendantEastern: -;db #$37 +;db $37 ;PendantDesert: -;db #$39 +;db $39 ;PendantHera: -;db #$38 +;db $38 ;37:Pendant 1 Green / Courage ;38:Pendant 3 Red / Wisdom ;39:Pendant 2 Blue / Power ;-------------------------------------------------------------------------------- -org $07B51D ; PC 0x3B51D +org $87B51D ; PC 0x3B51D BlueBoomerangSubstitution: -db #$FF ; no substitution -org $07B53B ; PC 0x3B53B +db $FF ; no substitution +org $87B53B ; PC 0x3B53B RedBoomerangSubstitution: -db #$FF ; no substitution +db $FF ; no substitution ;-------------------------------------------------------------------------------- -;org $08D01A ; PC 0x4501A - ancilla_flute.asm - 42 +;org $88D01A ; PC 0x4501A - ancilla_flute.asm - 42 ;OldHauntedGroveItem: -; db #$14 ; #$14 = Flute +; db $14 ; #$14 = Flute ;-------------------------------------------------------------------------------- ;2B:Bottle Already Filled w/ Red Potion ;2C:Bottle Already Filled w/ Green Potion @@ -758,236 +742,272 @@ db #$FF ; no substitution ;3C:Bottle Already Filled w/ Bee ;3D:Bottle Already Filled w/ Fairy ;48:Bottle Already Filled w/ Gold Bee -org $06C8FF ; PC 0x348FF +org $86C8FF ; PC 0x348FF WaterfallPotion: ; <-------------------------- FAIRY POTION STUFF HERE - db #$2C ; #$2C = Green Potion -org $06C93B ; PC 0x3493B + db $2C ; #$2C = Green Potion +org $86C93B ; PC 0x3493B PyramidPotion: - db #$2C ; #$2C = Green Potion + db $2C ; #$2C = Green Potion ;-------------------------------------------------------------------------------- -org $308140 ; PC 0x180140 - 0x18014A [encrypted] +org $B08140 ; PC 0x180140 - 0x18014A [encrypted] HeartPieceOutdoorValues: HeartPiece_Spectacle: - db #$17 + db $17 HeartPiece_Mountain_Warp: - db #$17 + db $17 HeartPiece_Maze: - db #$17 + db $17 HeartPiece_Desert: - db #$17 + db $17 HeartPiece_Lake: - db #$17 + db $17 HeartPiece_Swamp: - db #$17 + db $17 HeartPiece_Cliffside: - db #$17 + db $17 HeartPiece_Pyramid: - db #$17 + db $17 HeartPiece_Digging: - db #$17 + db $17 HeartPiece_Zora: - db #$17 + db $17 HauntedGroveItem: - db #$14 ; #$14 = Flute + db $14 ; #$14 = Flute ;-------------------------------------------------------------------------------- ; 0x18014B - 0x18014F (unused) [encrypted] ;================================================================================ -org $308150 ; PC 0x180150 - 0x180159 [encrypted] +org $B08150 ; PC 0x180150 - 0x180159 [encrypted] HeartContainerBossValues: HeartContainer_ArmosKnights: - db #$3E ; #$3E = Boss Heart (putting pendants here causes main pendants to not drop for obvious (in retrospect) reasons) + db $3E ; #$3E = Boss Heart (putting pendants here causes main pendants to not drop for obvious (in retrospect) reasons) HeartContainer_Lanmolas: - db #$3E + db $3E HeartContainer_Moldorm: - db #$3E + db $3E HeartContainer_HelmasaurKing: - db #$3E + db $3E HeartContainer_Arrghus: - db #$3E + db $3E HeartContainer_Mothula: - db #$3E + db $3E HeartContainer_Blind: - db #$3E + db $3E HeartContainer_Kholdstare: - db #$3E + db $3E HeartContainer_Vitreous: - db #$3E + db $3E HeartContainer_Trinexx: - db #$3E + db $3E ;-------------------------------------------------------------------------------- ; 0x180159 - 0x18015F (unused) [encrypted] ;================================================================================ -org $308160 ; PC 0x180160 - 0x180162 +org $B08160 ; PC 0x180160 - 0x180162 BonkKey_Desert: - db #$24 ; #$24 = Small Key (default) + db $24 ; #$24 = Small Key (default) BonkKey_GTower: - db #$24 ; #$24 = Small Key (default) + db $24 ; #$24 = Small Key (default) StandingKey_Hera: - db #$24 ; #$24 = Small Key (default) + db $24 ; #$24 = Small Key (default) ;-------------------------------------------------------------------------------- ; 0x180163 - 0x180164 (unused) ;================================================================================ -org $308165 ; PC 0x180165 +org $B08165 ; PC 0x180165 GoalItemIcon: -dw #$280E ; #$280D = Star - #$280E = Triforce Piece (default) +dw $280E ; #$280D = Star - #$280E = Triforce Piece (default) ;================================================================================ -org $308167 ; PC 0x180167-0x180167 +org $B08167 ; PC 0x180167-0x180167 GoalItemRequirement: dw $0000 ; #$0000 = Off (default) - #$XXXX = Require $XX Goal Items - #$FFFF = Counter-Only ;================================================================================ -org $308169 ; PC 0x180169 +org $B08169 ; PC 0x180169 AgahnimDoorStyle: -db #$01 ; #00 = Never Locked - #$01 = Locked During Escape (default) - #$02 = Locked Without 7 Crystals +db $01 ; #00 = Never Locked - #$01 = Locked During Escape (default) - #$02 = Locked Without 7 Crystals ;================================================================================ -org $30816A ; PC 0x18016A +org $B0816A ; PC 0x18016A FreeItemText: -db #$00 ; #00 = Off (default) -;---o bmcs +db $00 ; #00 = Off (default) +;--po bmcs +;p - enabled for non-prize crystals ;o - enabled for outside dungeon items ;b - enabled for inside big key items ;m - enabled for inside map items ;c - enabled for inside compass items ;s - enabled for inside small key items ;================================================================================ -org $30816B ; PC 0x18016B - 0x18016D +org $B0816B ; PC 0x18016B - 0x18016D HardModeExclusionCaneOfByrnaUsage: -db #$04, #$02, #$01 ; Normal, 1/2, 1/4 Magic -org $30816E ; PC 0x18016E - 308170 +db $04, #$02, #$01 ; Normal, 1/2, 1/4 Magic +org $B0816E ; PC 0x18016E - 308170 HardModeExclusionCapeUsage: -db #$04, #$08, #$10 ; Normal, 1/2, 1/4 Magic +db $04, #$08, #$10 ; Normal, 1/2, 1/4 Magic ;================================================================================ -org $308171 ; PC 0x180171 +org $B08171 ; PC 0x180171 GanonPyramidRespawn: -db #$01 ; #00 = Do not respawn on Pyramid after Death - #$01 = Respawn on Pyramid after Death (default) +db $01 ; #00 = Do not respawn on Pyramid after Death - #$01 = Respawn on Pyramid after Death (default) ;================================================================================ -org $308172 ; PC 0x180172 +org $B08172 ; PC 0x180172 GenericKeys: -db #$00 ; #00 = Dungeon-Specific Keys (Default) - #$01 = Generic Keys +db $00 ; #00 = Dungeon-Specific Keys (Default) - #$01 = Generic Keys ;================================================================================ -org $308173 ; PC 0x180173 +org $B08173 ; PC 0x180173 Bob: -db #$01 ; #00 = Off - #$01 = On (Default) +db $01 ; #00 = Off - #$01 = On (Default) ;================================================================================ -org $308174 ; PC 0x180174 +org $B08174 ; PC 0x180174 ; Flag to fix Fake Light World/Fake Dark World as caused by leaving the underworld ; to the other world (As can be caused by EG, Certain underworld clips, or Entance Randomizer). ; Currently, Fake Worlds triggered by other causes like YBA's Fake Flute, are not affected. FixFakeWorld: -db #$01 ; #00 = Fix Off (Default) - #$01 = Fix On +db $01 ; #00 = Fix Off (Default) - #$01 = Fix On ;================================================================================ -org $308175 ; PC 0x180175 - 0x180179 +org $B08175 ; PC 0x180175 - 0x180179 ArrowMode: -db #$00 ; #00 = Normal (Default) - #$01 = Rupees +db $00 ; #00 = Normal (Default) - #$01 = Rupees ArrowModeWoodArrowCost: ; keep these together -dw #$000A ; #$000A = 10 (Default) +dw $000A ; #$000A = 10 (Default) ArrowModeSilverArrowCost: ; keep these together -dw #$0032 ; #$0032 = 50 (Default) +dw $0032 ; #$0032 = 50 (Default) ;================================================================================ -org $30817A ; PC 0x18017A ; #$2000 for Eastern Palace +org $B0817A ; PC 0x18017A ; #$2000 for Eastern Palace MapReveal_Sahasrahla: -dw #$0000 -org $30817C ; PC 0x18017C ; #$0140 for Ice Palace and Misery Mire +dw $0000 +org $B0817C ; PC 0x18017C ; #$0140 for Ice Palace and Misery Mire MapReveal_BombShop: -dw #$0000 +dw $0000 ;================================================================================ -org $30817E ; PC 0x18017E +org $B0817E ; PC 0x18017E Restrict_Ponds: -db #$01 ; #$00 = Original Behavior - #$01 - Restrict to Bottles (Default) +db $01 ; #$00 = Original Behavior - #$01 - Restrict to Bottles (Default) ;================================================================================ -org $30817F ; PC 0x18017F +org $B0817F ; PC 0x18017F DisableFlashing: -db #$00 ; #$00 = Flashing Enabled (Default) - #$01 = Flashing Disabled +db $00 ; #$00 = Flashing Enabled (Default) - #$01 = Flashing Disabled ;================================================================================ ;---- --hb ;h - Hookshot ;b - Boomerang -org $308180 ; PC 0x180180 +org $B08180 ; PC 0x180180 StunItemAction: -db #$03 ; #$03 = Hookshot and Boomerang (Default) +db $03 ; #$03 = Hookshot and Boomerang (Default) ;================================================================================ -org $308181 ; PC 0x180181 +org $B08181 ; PC 0x180181 SilverArrowsUseRestriction: -db #$00 ; #$00 = Off (Default) - #$01 = Only At Ganon +db $00 ; #$00 = Off (Default) - #$01 = Only At Ganon ;================================================================================ -org $308182 ; PC 0x180182 +org $B08182 ; PC 0x180182 SilverArrowsAutoEquip: -db #$01 ; #$00 = Off - #$01 = Collection Time (Default) - #$02 = Entering Ganon - #$03 = Collection Time & Entering Ganon +db $01 ; #$00 = Off - #$01 = Collection Time (Default) - #$02 = Entering Ganon - #$03 = Collection Time & Entering Ganon ;================================================================================ -org $308183 ; PC 0x180183 +org $B08183 ; PC 0x180183 FreeUncleItemAmount: -dw #$12C ; 300 rupees (Default) +dw $12C ; 300 rupees (Default) ;-------------------------------------------------------------------------------- -org $308185 ; PC 0x180185 +org $B08185 ; PC 0x180185 RainDeathRefillTable: RainDeathRefillMagic_Uncle: -db #$00 +db $00 RainDeathRefillBombs_Uncle: -db #$00 +db $00 RainDeathRefillArrows_Uncle: -db #$00 +db $00 RainDeathRefillMagic_Cell: -db #$00 +db $00 RainDeathRefillBombs_Cell: -db #$00 +db $00 RainDeathRefillArrows_Cell: -db #$00 +db $00 RainDeathRefillMagic_Mantle: -db #$00 +db $00 RainDeathRefillBombs_Mantle: -db #$00 +db $00 RainDeathRefillArrows_Mantle: -db #$00 +db $00 ;================================================================================ ; 0x18018E - 0x18018F (unused) ;================================================================================ -org $308190 ; PC 0x180190 - 0x180192 +org $B08190 ; PC 0x180190 - 0x180192 TimerStyle: -db #$00 ; #$00 = Off (Default) - #$01 Countdown - #$02 = Stopwatch +db $00 ; #$00 = Off (Default) - #$01 Countdown - #$02 = Stopwatch TimeoutBehavior: -db #$00 ; #$00 = DNF (Default) - #$01 = Sign Change (Requires TimerRestart == 1) - #$02 = OHKO - #$03 = End Game +db $00 ; #$00 = DNF (Default) - #$01 = Sign Change (Requires TimerRestart == 1) - #$02 = OHKO - #$03 = End Game TimerRestart: -db #$00 ; #$00 = Locked (Default) - #$01 = Restart +db $00 ; #$00 = Locked (Default) - #$01 = Restart ;-------------------------------------------------------------------------------- -org $308193 ; PC 0x180193 +org $B08193 ; PC 0x180193 ServerRequestMode: -db #$00 ; #$00 = Off (Default) - #$01 = Synchronous - #$02 = Asychronous +db $00 ; #$00 = Off (Default) - #$01 = Synchronous - #$02 = Asychronous ;--------------------------------------------------------------------------------- -org $308194 ; PC 0x180194 +org $B08194 ; PC 0x180194 TurnInGoalItems: -db #$01 ; #$00 = Instant win if last goal item collected. $01 = (Default) must turn in goal items +db $01 ; #$00 = Instant win if last goal item collected. $01 = (Default) must turn in goal items ;-------------------------------------------------------------------------------- -org $308195 ; PC 0x180195 +org $B08195 ; PC 0x180195 ByrnaCaveSpikeDamage: -db #$08 ; #$08 = 1 Heart (default) - #$02 = 1/4 Heart +db $08 ; #$08 = 1 Heart (default) - #$02 = 1/4 Heart ;-------------------------------------------------------------------------------- -; 0x180196 - 0x1801FF (unused) +org $B08196 ; PC 0x180196-0x180197 +TotalItemCount: ; Total item count for HUD. Only counts items that use "item get" animation. +dw $00D8 ; 216 + +org $B08198 ; PC 0x180198-0x1801A9 +GanonsTowerOpenAddress: ; 0x180198-0x180199 +dw CrystalCounter ; Target address for GT open check +GanonsTowerOpenTarget: ; 0x18019A-0x18019B +dw $0007 ; Target amount for GT open modes to compare +GanonsTowerOpenMode: ; 0x18019C-0x18019D +dw $0001 ; $00 = Vanilla | $01 = Compare target with address +PedPullAddress: ; 0x18019E-0x18019F +dw PendantCounter ; Target address for ped pull check +PedPullTarget: ; 0x1801A0-0x1801A1 +dw $0003 ; Target amount for ped pull modes to check +PedCheckMode: ; 0x1801A2-0x1801A3 +dw $0000 ; $00 = vanilla | $01 = Compare address to target value +GanonVulnerableAddress: ; 0x1801A4-0x1801A5 +dw CrystalCounter ; Target address for ped pull check +GanonVulnerableTarget: ; 0x1801A6-0x1801A7 +dw $0007 ; Target amount for Ganon vulnerability modes to compare +GanonVulnerableMode: ; 0x1801A8-0x1801A9 +dw $0000 ; #$00 = Off (default) + ; #$01 = On + ; #$02 = Require All Dungeons + ; #$03 = Require "GanonVulnerableTarget" Crystals and Aga2 + ; #$04 = Require "GanonVulnerableTarget" Crystals + ; #$05 = Require "GoalItemRequirement" Goal Items + ; #$06 = Light Speed + ; #$07 = Require All Crystals and Crystal Bosses + ; #$08 = Require All Crystal Bosses only + ; #$09 = Require All Dungeons No Agahnim + ; #$0A = Require 100% Item Collection + ; #$0B = Require 100% Item Collection and All Dungeons +;-------------------------------------------------------------------------------- +; 0x18019A - 0x1801FF (unused) ;================================================================================ -org $308200 ; PC 0x180200 - 0x18020B +org $B08200 ; PC 0x180200 - 0x18020B RedClockAmount: -dw #$4650, #$0000 ; $00004650 = +5 minutes +dw $4650, #$0000 ; $00004650 = +5 minutes BlueClockAmount: -dw #$B9B0, #$FFFF ; $FFFFB9B0 = -5 minutes +dw $B9B0, #$FFFF ; $FFFFB9B0 = -5 minutes GreenClockAmount: -dw #$0000, #$0000 +dw $0000, #$0000 ;-------------------------------------------------------------------------------- ; 0x18020C-0x18020F (unused) ;-------------------------------------------------------------------------------- ;================================================================================ -org $09E3BB ; PC 0x4E3BB +org $89E3BB ; PC 0x4E3BB db $E4 ; Hera Basement Key (Set to programmable HP $EB) (set to $E4 for original hookable/boomable key behavior) ;================================================================================ -org $308210 ; PC 0x180210 +org $B08210 ; PC 0x180210 RandomizerSeedType: -db #$00 ; #$00 = Casual (default) - #$01 = Glitched - #$02 = Speedrunner - #$A0 = Super Metroid Combo - #$FF = Not Randomizer +db $00 ; #$00 = Casual (default) - #$01 = Glitched - #$02 = Speedrunner - #$A0 = Super Metroid Combo - #$FF = Not Randomizer ;-------------------------------------------------------------------------------- -org $308211 ; PC 0x180211 +org $B08211 ; PC 0x180211 GameType: ;---- ridn ;r - room randomization ;i - item randomization ;d - door/entrance randomization ;n - enemy randomization -db #$00 ; #$00 = Not Randomized (default) +db $00 ; #$00 = Not Randomized (default) ;-------------------------------------------------------------------------------- ;dgGe mutT ;d - Nonstandard Dungeon Configuration (Not Map/Compass/BigKey/SmallKeys in same quantity as vanilla) @@ -999,30 +1019,30 @@ db #$00 ; #$00 = Not Randomized (default) ;u - Contains Unreachable Items ;t - Minor Trolling (Swapped around levers, etc) ;T - Major Trolling (Forced-guess softlocks, impossible seed, etc) -org $308212 ; PC 0x180212 +org $B08212 ; PC 0x180212 WarningFlags: -db #$00 +db $00 ;-------------------------------------------------------------------------------- -org $308213 ; PC 0x180213 +org $B08213 ; PC 0x180213 TournamentSeed: -db #$00 ; #$00 = Off (default) - #$01 = On +db $00 ; #$00 = Off (default) - #$01 = On TournamentSeedInverse: -db #$01 ; #$00 = On - #$01 = Off (Default) +db $01 ; #$00 = On - #$01 = Off (Default) ;-------------------------------------------------------------------------------- -org $308215 ; PC 0x180215 +org $B08215 ; PC 0x180215 SeedHash: db $00, $01, $02, $03, $04 ;-------------------------------------------------------------------------------- -org $30821A ; PC 0x18021A +org $B0821A ; PC 0x18021A NoBGM: db $00 ; $00 = BGM enabled (default) $01 = BGM disabled -org $30821B ; PC 0x18021B +org $B0821B ; PC 0x18021B FastFanfare: db $00 ; $00 = Normal fanfare (default) $01 = Fast fanfare -org $30821C ; PC 0x18021C +org $B0821C ; PC 0x18021C MSUResumeType: db $01 ; Type of tracks to resume #$00 = Everything - #$01 = Overworld (default) -org $30821D ; PC 0x18021D +org $B0821D ; PC 0x18021D MSUResumeTimer: dw $0708 ; Number of frames on a different track until we no longer resume (0x708 = 1800 = ~30s) ;-------------------------------------------------------------------------------- @@ -1030,7 +1050,7 @@ dw $0708 ; Number of frames on a different track until we no longer resume (0x70 ;================================================================================ ; $308220 (0x180220) - $30823F (0x18023F) ; Plandomizer Author Name (ASCII) - Leave unused chars as 0 -org $308220 ; PC 0x180220 +org $B08220 ; PC 0x180220 ;================================================================================ ; $308240 (0x180420) - $308246 (0x180246) ; For starting areas in single entrance caves, we specify which row in the StartingAreaExitTable @@ -1043,11 +1063,11 @@ org $308220 ; PC 0x180220 ; Position 4: Mantle ; Position 5: Middle of Old Man Cave ; Position 6: Old Man's House -org $308240 ; PC 0x180240 +org $B08240 ; PC 0x180240 StartingAreaExitOffset: db $00, $00, $00, $00, $00, $00, $00 ;-------------------------------------------------------------------------------- -org $308247 ; PC 0x180247 +org $B08247 ; PC 0x180247 ; For any starting areas in single entrance caves you can specify the overworld door here ; to enable drawing the doorframes These values should be the overworld door index+1. ; A value of zero will draw no door frame. @@ -1057,7 +1077,7 @@ db $00, $00, $00, $00, $00, $00, $00 ; 0x18024E - 0x18024F (unused) ;------------------------------------------------------------------------------- ; $308250 (0x180250) - $30829F (0x18029F) -org $308250 ; PC 0x180250 +org $B08250 ; PC 0x180250 StartingAreaExitTable: ; This has the same format as the main Exit table, except ; is stored row major instead of column major @@ -1067,10 +1087,15 @@ dw $0000 : db $00 : dw $0000, $0000, $0000, $0000, $0000, $0000, $0000 : db $00, dw $0000 : db $00 : dw $0000, $0000, $0000, $0000, $0000, $0000, $0000 : db $00, $00, $00 dw $0000 : db $00 : dw $0000, $0000, $0000, $0000, $0000, $0000, $0000 : db $00, $00, $00 ;-------------------------------------------------------------------------------- -; 0x1802A0 - 0x1802FF (unused) +; 0x1802A0 - 0x1802BF (unused) +;--------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +; 0x1802C0 - 0x1802FF (unused) +;--------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; $308300 (0x180300) - $30834F (0x18034F) -org $308300 ; PC 0x180300 +org $B08300 ; PC 0x180300 ExtraHole_Map16: dw $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF dw $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF @@ -1084,29 +1109,35 @@ db $00, $00, $00, $00, $00, $00, $00, $00 ; $308350 (0x180350) - $30834F (0x18034F) ; Correspond to the three start options ; do not set for a starting location that is using a single entrance cave -org $308350 ; PC 0x180350 +org $B08350 ; PC 0x180350 ShouldStartatExit: db $00, $00, $00 ;-------------------------------------------------------------------------------- ; $308358 (0x180358) fixes major glitches ; 0x00 - fix ; otherwise dont fix various major glitches -org $308358 +org $B08358 AllowAccidentalMajorGlitch: db $00 ;-------------------------------------------------------------------------------- -; GFX pointer (0x180359 - 0x18035B) +; GFX pointers (0x180359 - 0x18035E) ; For 3rd party sprite stuff ;-------------------------------------------------------------------------------- -org $308359 -dl GfxPalettes +org $B0835C +dl ItemReceiptGraphicsOffsets + +org $B0835F +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 ; if you modify this table you will need to modify the pointers to it located at $0EECC0 -org $309500 ; PC 0x181500 +org $B09500 ; PC 0x181500 EndingSequenceText: ; the return of the king db $62, $65, $00, $2B, $2D, $21, $1E, $9F, $2B, $1E, $2D, $2E, $2B, $27, $9F, $28, $1F, $9F, $2D, $21, $1E, $9F, $24, $22, $27, $20 @@ -1135,16 +1166,16 @@ db $62, $EB, $00, $13, $75, $6B, $71, $6E, $9F, $64, $6B, $71, $6F, $61 db $63, $0B, $00, $13, $9B, $91, $97, $94, $9F, $8A, $91, $97, $95, $87 ; finger webs for sale db $62, $66, $00, $27, $1F, $22, $27, $20, $1E, $2B, $9F, $30, $1E, $1B, $2C, $9F, $1F, $28, $2B, $9F, $2C, $1A, $25, $1E -db $62, $E8, $00, $1F, $76, $6B, $6E, $5D, $77, $6F, $9F, $73, $5D, $70, $61, $6E, $62, $5D, $68, $68 -db $63, $08, $00, $1F, $9C, $91, $94, $83, $9D, $95, $9F, $99, $83, $96, $87, $94, $88, $83, $8E, $8E +db $62, $E8, $00, $1F, $76, $6B, $6E, $5D, $D9, $6F, $9F, $73, $5D, $70, $61, $6E, $62, $5D, $68, $68 +db $63, $08, $00, $1F, $9C, $91, $94, $83, $EC, $95, $9F, $99, $83, $96, $87, $94, $88, $83, $8E, $8E ; the witch and assistant db $62, $64, $00, $2D, $2D, $21, $1E, $9F, $30, $22, $2D, $1C, $21, $9F, $1A, $27, $1D, $9F, $1A, $2C, $2C, $22, $2C, $2D, $1A, $27, $2D db $62, $EB, $00, $13, $69, $5D, $63, $65, $5F, $9F, $6F, $64, $6B, $6C db $63, $0B, $00, $13, $8F, $83, $89, $8B, $85, $9F, $95, $8A, $91, $92 ; twin lumberjacks db $62, $68, $00, $1F, $2D, $30, $22, $27, $9F, $25, $2E, $26, $1B, $1E, $2B, $23, $1A, $1C, $24, $2C -db $62, $E9, $00, $1B, $73, $6B, $6B, $60, $6F, $69, $61, $6A, $77, $6F, $9F, $64, $71, $70 -db $63, $09, $00, $1B, $99, $91, $91, $86, $95, $8F, $87, $90, $9D, $95, $9F, $8A, $97, $96 +db $62, $E9, $00, $1B, $73, $6B, $6B, $60, $6F, $69, $61, $6A, $D9, $6F, $9F, $64, $71, $70 +db $63, $09, $00, $1B, $99, $91, $91, $86, $95, $8F, $87, $90, $EC, $95, $9F, $8A, $97, $96 ; ocarina boy plays again db $62, $64, $00, $2D, $28, $1C, $1A, $2B, $22, $27, $1A, $9F, $1B, $28, $32, $9F, $29, $25, $1A, $32, $2C, $9F, $1A, $20, $1A, $22, $27 db $62, $E9, $00, $19, $64, $5D, $71, $6A, $70, $61, $60, $9F, $63, $6E, $6B, $72, $61 @@ -1172,13 +1203,13 @@ db $63, $0B, $00, $13, $8E, $91, $95, $96, $9F, $99, $91, $91, $86, $95 ; master sword db $62, $66, $00, $27, $1A, $27, $1D, $9F, $2D, $21, $1E, $9F, $26, $1A, $2C, $2D, $1E, $2B, $9F, $2C, $30, $28, $2B, $1D db $62, $A8, $00, $1D, $4A, $43, $3C, $3C, $47, $4A, $9F, $38, $3E, $38, $40, $45, $52, $52, $52 -db $62, $EC, $00, $0F, $62, $6B, $6E, $61, $72, $61, $6E, $78 -db $63, $0C, $00, $0F, $88, $91, $94, $87, $98, $87, $94, $9E +db $62, $EC, $00, $0F, $62, $6B, $6E, $61, $72, $61, $6E, $E5 +db $63, $0C, $00, $0F, $88, $91, $94, $87, $98, $87, $94, $F8 ;-------------------------------------------------------------------------------- -; org $0EECC0 ; PC 0x76CC0 poiters for above scenes +; org $8EECC0 ; PC 0x76CC0 poiters for above scenes ; dw $0000, $003C, $006A, $00AC, $00EA, $012A, $015D, $019D, $01D4, $020C, $0249, $0284, $02B7, $02F1, $0329, $0359, $039C ;================================================================================ -org $30A000 ; $30A000 (0x182000) - $30A07F (0x18007F) +org $B0A000 ; $30A000 (0x182000) - $30A07F (0x18007F) RNGSingleItemTable: db $08, $09, $0A, $0B, $FF, $FF, $FF, $FF db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF @@ -1198,7 +1229,7 @@ db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF db $FF, $FF, $FF, $FF, $FF, $FF, $FF RNGSingleTableSize: db $04 -org $30A080 ; $30A080 (0x182080) - $30A0FF (0x1820FF) +org $B0A080 ; $30A080 (0x182080) - $30A0FF (0x1820FF) RNGMultiItemTable: db $31, $36, $40, $46, $FF, $FF, $FF, $FF db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF @@ -1429,59 +1460,59 @@ db $04 ;B8 - Progressive Bug Net ;================================================================================ ;;Residual Portal -;org $0283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE) -;db #$F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only -;org $02B34D ; PC 0x1334D (Bank02.asm:7902) (BNE) -;db #$F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only -;org $06DB78 ; PC 0x35B78 (Bank06.asm:2186) ($24) -;db #$8B ; #$24 - Light Style, #$8B - Dark Style +;org $8283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE) +;db $F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only +;org $82B34D ; PC 0x1334D (Bank02.asm:7902) (BNE) +;db $F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only +;org $86DB78 ; PC 0x35B78 (Bank06.asm:2186) ($24) +;db $8B ; #$24 - Light Style, #$8B - Dark Style ;;Portal indicator in dark world map -;org $0ABFBB ; Bank0a.asm:1005 (LDA $008A : CMP.b #$40 : BCS BRANCH_BETA) +;org $8ABFBB ; Bank0a.asm:1005 (LDA $008A : CMP.b #$40 : BCS BRANCH_BETA) ;db $90 ;$90 (BCC) - Show in Dark World, $B0 (BCS) normal ;;-------------------------------------------------------------------------------- ;;Vortexes -;org $05AF79 ; PC 0x2AF79 (sprite_warp_vortex.asm:18) (BNE) -;db #$F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only -;org $0DB3C5 ; PC 0x6B3C5 (sprite_properties.asm:119) ($C4) -;db #$C6 ; #$C4 - Blue Portal, #$C6 - Red Portal +;org $85AF79 ; PC 0x2AF79 (sprite_warp_vortex.asm:18) (BNE) +;db $F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only +;org $8DB3C5 ; PC 0x6B3C5 (sprite_properties.asm:119) ($C4) +;db $C6 ; #$C4 - Blue Portal, #$C6 - Red Portal ;;-------------------------------------------------------------------------------- ;;Duck -;org $07A3F4 ; PC 0x3A3F4 (Bank07.asm:5772) (BNE) -;db #$F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only -;org $02E849 ; PC 0x16849 (Bank02.asm:11641) +;org $87A3F4 ; PC 0x3A3F4 (Bank07.asm:5772) (BNE) +;db $F0 ; #$D0 - Light Only (Default), #$F0 - Dark Only +;org $82E849 ; PC 0x16849 (Bank02.asm:11641) ;;dw $0003, $0016, $0018, $002C, $002F, $0030, $003B, $003F ; Light World Flute Spots ;dw $0043, $0056, $0058, $006C, $006F, $0070, $007B, $007F ; Dark World Flute Spots -;org $02E8D5 ; PC 0x168D5 (Bank02.asm:11661) ($07B7) +;org $82E8D5 ; PC 0x168D5 (Bank02.asm:11661) ($07B7) ;dw $07C8 ; $07B7 - Normal Location 3 Y (Default), $07C7 - Inverted Location 3 Y -;org $02E8F7; PC 0x168F7 (Bank02.asm:11661) ($07B7) +;org $82E8F7; PC 0x168F7 (Bank02.asm:11661) ($07B7) ;dw $01F8 ; $0200 - Normal Location 3 X (Default), $0200 - Inverted Location 3 X ;;-------------------------------------------------------------------------------- ;;Mirror -;org $07A943 ; PC 0x3A943 (Bank07.asm:6548) (BNE) -;db #$80 ; #$D0 - Dark-to-Light (Default), #$F0 - Light-to-Dark, #$80 - Both Directions, #$42 - Disabled +;org $87A943 ; PC 0x3A943 (Bank07.asm:6548) (BNE) +;db $80 ; #$D0 - Dark-to-Light (Default), #$F0 - Light-to-Dark, #$80 - Both Directions, #$42 - Disabled ;;-------------------------------------------------------------------------------- ;;Residual Portal -;org $07A96D ; PC 0x3A96D (Bank07.asm:6578) (BEQ) -;db #$D0 ; #$F0 - Light Side (Default), #$D0 - Dark Side +;org $87A96D ; PC 0x3A96D (Bank07.asm:6578) (BEQ) +;db $D0 ; #$F0 - Light Side (Default), #$D0 - Dark Side ;;-------------------------------------------------------------------------------- -;org $08D40C ; PC 0x4540C (ancilla_morph_poof.asm:48) (BEQ) -;db #$D0 ; #$F0 - Light Side (Default), #$D0 - Dark Side +;org $88D40C ; PC 0x4540C (ancilla_morph_poof.asm:48) (BEQ) +;db $D0 ; #$F0 - Light Side (Default), #$D0 - Dark Side ;;-------------------------------------------------------------------------------- ;; Spawn -; org $0280a6 ; <- Bank02.asm : 257 (LDA $7EF3CA : BEQ .inLightWorld) -;db #$D0 ; #F0 - default to light (Default), #$D0 - Default to dark +; org $8280a6 ; <- Bank02.asm : 257 (LDA $7EF3CA : BEQ .inLightWorld) +;db $D0 ; #F0 - default to light (Default), #$D0 - Default to dark ;;-------------------------------------------------------------------------------- -;org $06B2AA ; <- 332AA sprite_smithy_bros.asm : 152 (JSL Sprite_ShowSolicitedMessageIfPlayerFacing) +;org $86B2AA ; <- 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 $80886E ; <- 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 -org $0DDBF1 ; <- 6DBF1 -dw #9999 ; Rupee Limit +org $8DDBEC ; <- 6DBEC +dw 10000 ; Rupee Limit +1 +org $8DDBF1 ; <- 6DBF1 +dw 9999 ; Rupee Limit ;================================================================================ ;2B:Bottle Already Filled w/ Red Potion ;2C:Bottle Already Filled w/ Green Potion @@ -1495,7 +1526,7 @@ dw #9999 ; Rupee Limit ; $7EC025 - $7EC034 - Item OAM Table ;================================================================================; -org $30A100 ; PC 0x182100 - 0x182304 +org $B0A100 ; PC 0x182100 - 0x182304 EntranceDoorFrameTable: ; data for multi-entrance caves dw $0816, $0000, $0000, $0000, $0000, $0000, $0000, $0000 @@ -1537,13 +1568,13 @@ dw $0000 ;-------------------------------------------------------------------------------- ; 0x182305 - 182FFF (unused) ;================================================================================ -org $30B000 ; PC 0x183000 - 0x1834FF +org $B0B000 ; PC 0x183000 - 0x1834FF incsrc initsramtable.asm ;-------------------------------------------------------------------------------- ; 0x183500 - 183FFF (unused) ;================================================================================ -org $30C000 ; PC 0x184000 - 0x184040 +org $B0C000 ; PC 0x184000 - 0x184040 ItemSubstitutionRules: ;db [item][quantity][substitution][pad] - CURRENT LIMIT 16 ENTRIES db $12, $01, $35, $FF @@ -1551,7 +1582,7 @@ db $51, $06, $52, $FF db $53, $06, $54, $FF db $FF, $FF, $FF, $FF -org $30C041 ; PC 0x184041 +org $B0C041 ; PC 0x184041 ForceFileName: db $00 ; $00 = Player picks name (default) - $01 = Use StaticFileName (initsramtable.asm) @@ -1568,13 +1599,13 @@ db $00 ; $00 = Player picks name (default) - $01 = Use StaticFileName (initsramt ;shopkeeper_config - ppp- -sss ; ppp - palette ; sss - sprite type -org $30C800 ; PC 0x184800 - 0x1848FF - max 32 shops ; do not exceed 36 tracked items sram_index > ($24) +org $B0C800 ; PC 0x184800 - 0x1848FF - max 32 shops ; do not exceed 36 tracked items sram_index > ($24) ShopTable: ;db [id][roomID-low][roomID-high][doorID][zero][shop_config][shopkeeper_config][sram_index] db $01, $15, $01, $5D, $00, $12, $04, $00 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30C900 ; PC 0x184900 - 0x184FFF - max 224 entries +org $B0C900 ; PC 0x184900 - 0x184FFF - max 224 entries ShopContentsTable: ;db [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high] db $01, $51, $64, $00, $07, $FF, $00, $00 @@ -1584,7 +1615,7 @@ db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ;-------------------------------------------------------------------------------- ; 0x185060 - 1850FF (unused) ;-------------------------------------------------------------------------------- -org $30D100 ; PC 0x185100 - 0x18513F +org $B0D100 ; PC 0x185100 - 0x18513F UnusedTable: ; please do not move this - kkat db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF @@ -1596,7 +1627,7 @@ db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ;================================================================================ -org $30D800 ; PC 0x185800 - 0x18591F +org $B0D800 ; PC 0x185800 - 0x18591F MSUTrackList: db $01,$03,$03,$03,$03,$03,$03,$01 db $03,$01,$03,$03,$03,$03,$03,$03 @@ -1668,938 +1699,1089 @@ dw $0000 ; STAIRS4 ;-------------------------------------------------------------------------------- RoomHeaders: -org $30DA00 : RoomHeader_0000: ; pc 0x185A00 +org $B0DA00 : RoomHeader_0000: ; pc 0x185A00 db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04 -org $30DA0E : RoomHeader_0001: ; pc 0x185A0E +org $B0DA0E : RoomHeader_0001: ; pc 0x185A0E db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $72, $00, $50, $52 -org $30DA1C : RoomHeader_0002: ; pc 0x185A1C +org $B0DA1C : RoomHeader_0002: ; pc 0x185A1C db $C0, $1D, $04, $06, $00, $14, $00, $00, $00, $00, $11, $00, $18, $0D -org $30DA2A : RoomHeader_0003: ; pc 0x185A2A +org $B0DA2A : RoomHeader_0003: ; pc 0x185A2A db $C0, $07, $06, $19, $00, $00, $00, $00, $0C, $02, $12, $00, $00, $00 -org $30DA38 : RoomHeader_0004: ; pc 0x185A38 +org $B0DA38 : RoomHeader_0004: ; pc 0x185A38 db $00, $18, $0D, $26, $00, $26, $14, $00, $00, $00, $B5, $00, $08, $08 -org $30DA46 : RoomHeader_0005: ; pc 0x185A46 +org $B0DA46 : RoomHeader_0005: ; pc 0x185A46 db $00, $08, $08, $14, $00, $25, $00, $20, $06, $05, $0C, $00, $25, $00 -org $30DA54 : RoomHeader_0006: ; pc 0x185A54 +org $B0DA54 : RoomHeader_0006: ; pc 0x185A54 db $00, $08, $08, $14, $00, $25, $00, $20, $06, $05, $0C, $00, $25, $00 -org $30DA62 : RoomHeader_0007: ; pc 0x185A62 +org $B0DA62 : RoomHeader_0007: ; pc 0x185A62 db $20, $06, $05, $0C, $00, $25, $00, $00, $00, $17, $17, $C0, $07, $06 -org $30DA70 : RoomHeader_0008: ; pc 0x185A70 +org $B0DA70 : RoomHeader_0008: ; pc 0x185A70 db $C0, $07, $06, $07, $00, $00, $00, $00, $0F, $07, $19, $00, $27, $00 -org $30DA7E : RoomHeader_0009: ; pc 0x185A7E +org $B0DA7E : RoomHeader_0009: ; pc 0x185A7E db $00, $0F, $07, $19, $00, $27, $00, $00, $00, $4B, $4A, $4A, $00, $0F -org $30DA8C : RoomHeader_000A: ; pc 0x185A8C +org $B0DA8C : RoomHeader_000A: ; pc 0x185A8C db $00, $0F, $07, $19, $00, $27, $00, $00, $00, $09, $3A, $01, $0F, $07 -org $30DA9A : RoomHeader_000B: ; pc 0x185A9A +org $B0DA9A : RoomHeader_000B: ; pc 0x185A9A db $01, $0F, $07, $19, $00, $03, $00, $00, $00, $6A, $1B, $C0, $28, $0E -org $30DAA8 : RoomHeader_000C: ; pc 0x185AA8 +org $B0DAA8 : RoomHeader_000C: ; pc 0x185AA8 db $C0, $28, $0E, $13, $00, $00, $00, $00, $00, $00, $6B, $8C, $8C, $40 -org $30DAB6 : RoomHeader_000D: ; pc 0x185AB6 +org $B0DAB6 : RoomHeader_000D: ; pc 0x185AB6 db $40, $1B, $0E, $18, $05, $38, $00, $00, $13, $0B, $1C, $00, $08, $00 -org $30DAC4 : RoomHeader_000E: ; pc 0x185AC4 +org $B0DAC4 : RoomHeader_000E: ; pc 0x185AC4 db $00, $13, $0B, $1C, $00, $08, $00, $00, $00, $00, $1E, $00, $21, $13 -org $30DAD2 : RoomHeader_000F: ; pc 0x185AD2 +org $B0DAD2 : RoomHeader_000F: ; pc 0x185AD2 db $00, $21, $13, $22, $00, $00, $00, $00, $01, $01, $01, $00, $00, $00 -org $30DAE0 : RoomHeader_0010: ; pc 0x185AE0 +org $B0DAE0 : RoomHeader_0010: ; pc 0x185AE0 db $00, $21, $13, $22, $00, $00, $00, $00, $01, $01, $01, $00, $00, $00 -org $30DAEE : RoomHeader_0011: ; pc 0x185AEE +org $B0DAEE : RoomHeader_0011: ; pc 0x185AEE db $00, $01, $01, $01, $00, $00, $00, $08, $00, $00, $02, $C0, $1D, $04 -org $30DAFC : RoomHeader_0012: ; pc 0x185AFC +org $B0DAFC : RoomHeader_0012: ; pc 0x185AFC db $C0, $1D, $04, $06, $00, $00, $00, $00, $18, $0D, $26, $00, $00, $00 -org $30DB0A : RoomHeader_0013: ; pc 0x185B0A +org $B0DB0A : RoomHeader_0013: ; pc 0x185B0A db $00, $18, $0D, $26, $00, $00, $00, $00, $18, $0D, $1E, $00, $00, $00 -org $30DB18 : RoomHeader_0014: ; pc 0x185B18 +org $B0DB18 : RoomHeader_0014: ; pc 0x185B18 db $20, $18, $0D, $26, $00, $00, $00, $C0, $18, $0D, $26, $00, $00, $00 -org $30DB26 : RoomHeader_0015: ; pc 0x185B26 +org $B0DB26 : RoomHeader_0015: ; pc 0x185B26 db $C0, $18, $0D, $26, $00, $00, $00, $00, $00, $00, $B6, $90, $08, $08 -org $30DB34 : RoomHeader_0016: ; pc 0x185B34 +org $B0DB34 : RoomHeader_0016: ; pc 0x185B34 db $90, $08, $08, $11, $03, $00, $00, $00, $00, $00, $66, $20, $06, $05 -org $30DB42 : RoomHeader_0017: ; pc 0x185B42 +org $B0DB42 : RoomHeader_0017: ; pc 0x185B42 db $20, $06, $05, $19, $00, $35, $00, $00, $00, $27, $07, $27, $01, $0F -org $30DB50 : RoomHeader_0018: ; pc 0x185B50 +org $B0DB50 : RoomHeader_0018: ; pc 0x185B50 db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 -org $30DB5E : RoomHeader_0019: ; pc 0x185B5E +org $B0DB5E : RoomHeader_0019: ; pc 0x185B5E db $01, $0F, $07, $19, $00, $00, $00, $00, $0F, $07, $19, $00, $16, $00 -org $30DB6C : RoomHeader_001A: ; pc 0x185B6C +org $B0DB6C : RoomHeader_001A: ; pc 0x185B6C db $00, $0F, $07, $19, $00, $16, $00, $00, $00, $00, $6A, $6A, $68, $0F -org $30DB7A : RoomHeader_001B: ; pc 0x185B7A +org $B0DB7A : RoomHeader_001B: ; pc 0x185B7A db $68, $0F, $07, $08, $00, $03, $1C, $00, $00, $00, $0B, $00, $1A, $0E -org $30DB88 : RoomHeader_001C: ; pc 0x185B88 +org $B0DB88 : RoomHeader_001C: ; pc 0x185B88 db $00, $1A, $0E, $09, $00, $04, $3F, $00, $00, $00, $8C, $00, $1B, $0E -org $30DB96 : RoomHeader_001D: ; pc 0x185B96 +org $B0DB96 : RoomHeader_001D: ; pc 0x185B96 db $00, $1B, $0E, $18, $00, $00, $00, $00, $00, $00, $4C, $20, $13, $0B -org $30DBA4 : RoomHeader_001E: ; pc 0x185BA4 +org $B0DBA4 : RoomHeader_001E: ; pc 0x185BA4 db $20, $13, $0B, $1C, $00, $17, $00, $00, $00, $3E, $0E, $00, $13, $0B -org $30DBB2 : RoomHeader_001F: ; pc 0x185BB2 +org $B0DBB2 : RoomHeader_001F: ; pc 0x185BB2 db $00, $13, $0B, $29, $00, $17, $00, $00, $00, $00, $3F, $20, $0C, $02 -org $30DBC0 : RoomHeader_0020: ; pc 0x185BC0 +org $B0DBC0 : RoomHeader_0020: ; pc 0x185BC0 db $20, $0C, $02, $12, $00, $15, $25, $01, $01, $01, $01, $00, $00, $00 -org $30DBCE : RoomHeader_0021: ; pc 0x185BCE +org $B0DBCE : RoomHeader_0021: ; pc 0x185BCE db $01, $01, $01, $01, $00, $00, $00, $00, $18, $0D, $26, $00, $01, $00 -org $30DBDC : RoomHeader_0022: ; pc 0x185BDC +org $B0DBDC : RoomHeader_0022: ; pc 0x185BDC db $01, $01, $01, $01, $00, $00, $00, $00, $18, $0D, $26, $00, $01, $00 -org $30DBEA : RoomHeader_0023: ; pc 0x185BEA +org $B0DBEA : RoomHeader_0023: ; pc 0x185BEA db $00, $18, $0D, $26, $00, $00, $00, $00, $18, $0D, $1E, $00, $00, $00 -org $30DBF8 : RoomHeader_0024: ; pc 0x185BF8 +org $B0DBF8 : RoomHeader_0024: ; pc 0x185BF8 db $00, $18, $0D, $26, $00, $01, $00, $00, $0A, $08, $11, $00, $16, $00 -org $30DC06 : RoomHeader_0025: ; pc 0x185C06 +org $B0DC06 : RoomHeader_0025: ; pc 0x185C06 db $00, $0A, $08, $11, $00, $16, $00, $00, $00, $00, $76, $76, $76, $20 -org $30DC14 : RoomHeader_0026: ; pc 0x185C14 +org $B0DC14 : RoomHeader_0026: ; pc 0x185C14 db $00, $0A, $08, $11, $00, $16, $00, $00, $00, $00, $76, $76, $76, $20 -org $30DC22 : RoomHeader_0027: ; pc 0x185C22 +org $B0DC22 : RoomHeader_0027: ; pc 0x185C22 db $20, $06, $05, $19, $00, $36, $00, $00, $00, $31, $17, $31, $80, $0A -org $30DC30 : RoomHeader_0028: ; pc 0x185C30 +org $B0DC30 : RoomHeader_0028: ; pc 0x185C30 db $80, $0A, $08, $11, $00, $32, $1B, $00, $00, $00, $38, $CC, $0E, $09 -org $30DC3E : RoomHeader_0029: ; pc 0x185C3E +org $B0DC3E : RoomHeader_0029: ; pc 0x185C3E db $CC, $0E, $09, $1A, $02, $25, $00, $00, $0F, $07, $19, $00, $00, $00 -org $30DC4C : RoomHeader_002A: ; pc 0x185C4C +org $B0DC4C : RoomHeader_002A: ; pc 0x185C4C db $00, $0F, $07, $19, $00, $00, $00, $C0, $0F, $07, $2B, $00, $16, $00 -org $30DC5A : RoomHeader_002B: ; pc 0x185C5A +org $B0DC5A : RoomHeader_002B: ; pc 0x185C5A db $C0, $0F, $07, $2B, $00, $16, $00, $00, $00, $00, $3B, $00, $13, $0B -org $30DC68 : RoomHeader_002C: ; pc 0x185C68 +org $B0DC68 : RoomHeader_002C: ; pc 0x185C68 db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 -org $30DC76 : RoomHeader_002D: ; pc 0x185C76 +org $B0DC76 : RoomHeader_002D: ; pc 0x185C76 db $00, $13, $0B, $1C, $00, $2A, $00, $C0, $07, $06, $19, $00, $00, $00 -org $30DC84 : RoomHeader_002E: ; pc 0x185C84 +org $B0DC84 : RoomHeader_002E: ; pc 0x185C84 db $00, $13, $0B, $1C, $00, $2A, $00, $C0, $07, $06, $19, $00, $00, $00 -org $30DC92 : RoomHeader_002F: ; pc 0x185C92 +org $B0DC92 : RoomHeader_002F: ; pc 0x185C92 db $C0, $07, $06, $19, $00, $00, $00, $00, $0C, $02, $12, $00, $00, $00 -org $30DCA0 : RoomHeader_0030: ; pc 0x185CA0 +org $B0DCA0 : RoomHeader_0030: ; pc 0x185CA0 db $00, $0C, $02, $12, $00, $00, $00, $00, $00, $00, $40, $20, $06, $05 -org $30DCAE : RoomHeader_0031: ; pc 0x185CAE +org $B0DCAE : RoomHeader_0031: ; pc 0x185CAE db $20, $06, $05, $19, $00, $37, $04, $22, $00, $77, $27, $77, $01, $01 -org $30DCBC : RoomHeader_0032: ; pc 0x185CBC +org $B0DCBC : RoomHeader_0032: ; pc 0x185CBC db $01, $01, $01, $01, $00, $00, $00, $00, $00, $00, $42, $00, $04, $05 -org $30DCCA : RoomHeader_0033: ; pc 0x185CCA +org $B0DCCA : RoomHeader_0033: ; pc 0x185CCA db $00, $04, $05, $0B, $00, $15, $25, $80, $0A, $08, $11, $00, $00, $00 -org $30DCD8 : RoomHeader_0034: ; pc 0x185CD8 +org $B0DCD8 : RoomHeader_0034: ; pc 0x185CD8 db $80, $0A, $08, $11, $00, $00, $00, $00, $00, $00, $54, $80, $0A, $08 -org $30DCE6 : RoomHeader_0035: ; pc 0x185CE6 +org $B0DCE6 : RoomHeader_0035: ; pc 0x185CE6 db $80, $0A, $08, $11, $00, $00, $19, $80, $0A, $08, $11, $00, $00, $00 -org $30DCF4 : RoomHeader_0036: ; pc 0x185CF4 +org $B0DCF4 : RoomHeader_0036: ; pc 0x185CF4 db $80, $0A, $08, $11, $00, $00, $00, $80, $0A, $08, $11, $00, $00, $00 -org $30DD02 : RoomHeader_0037: ; pc 0x185D02 +org $B0DD02 : RoomHeader_0037: ; pc 0x185D02 db $80, $0A, $08, $11, $00, $00, $19, $80, $0A, $08, $11, $00, $00, $00 -org $30DD10 : RoomHeader_0038: ; pc 0x185D10 +org $B0DD10 : RoomHeader_0038: ; pc 0x185D10 db $80, $0A, $08, $11, $00, $00, $00, $00, $00, $00, $28, $20, $0D, $09 -org $30DD1E : RoomHeader_0039: ; pc 0x185D1E +org $B0DD1E : RoomHeader_0039: ; pc 0x185D1E db $20, $0D, $09, $13, $00, $00, $00, $00, $00, $29, $20, $0F, $07, $19 -org $30DD2C : RoomHeader_003A: ; pc 0x185D2C +org $B0DD2C : RoomHeader_003A: ; pc 0x185D2C db $20, $0F, $07, $19, $00, $00, $00, $00, $00, $0A, $0A, $00, $0F, $07 -org $30DD3A : RoomHeader_003B: ; pc 0x185D3A +org $B0DD3A : RoomHeader_003B: ; pc 0x185D3A db $00, $0F, $07, $08, $00, $00, $00, $00, $00, $00, $2B, $00, $07, $06 -org $30DD48 : RoomHeader_003C: ; pc 0x185D48 +org $B0DD48 : RoomHeader_003C: ; pc 0x185D48 db $00, $07, $06, $13, $00, $00, $00, $20, $1A, $0E, $0C, $00, $33, $00 -org $30DD56 : RoomHeader_003D: ; pc 0x185D56 +org $B0DD56 : RoomHeader_003D: ; pc 0x185D56 db $20, $1A, $0E, $0C, $00, $33, $00, $00, $00, $96, $96, $CC, $13, $0B -org $30DD64 : RoomHeader_003E: ; pc 0x185D64 +org $B0DD64 : RoomHeader_003E: ; pc 0x185D64 db $CC, $13, $0B, $29, $02, $02, $00, $00, $00, $00, $1E, $00, $13, $0B -org $30DD72 : RoomHeader_003F: ; pc 0x185D72 +org $B0DD72 : RoomHeader_003F: ; pc 0x185D72 db $00, $13, $0B, $29, $00, $27, $14, $00, $00, $00, $1F, $5F, $C0, $00 -org $30DD80 : RoomHeader_0040: ; pc 0x185D80 +org $B0DD80 : RoomHeader_0040: ; pc 0x185D80 db $C0, $00, $02, $27, $00, $00, $00, $00, $00, $00, $30, $B0, $01, $00 -org $30DD8E : RoomHeader_0041: ; pc 0x185D8E +org $B0DD8E : RoomHeader_0041: ; pc 0x185D8E db $01, $00, $00, $02, $00, $13, $00, $00, $00, $00, $42, $01, $01, $01 -org $30DD9C : RoomHeader_0042: ; pc 0x185D9C +org $B0DD9C : RoomHeader_0042: ; pc 0x185D9C db $01, $01, $01, $01, $00, $00, $00, $00, $00, $00, $41, $32, $68, $04 -org $30DDAA : RoomHeader_0043: ; pc 0x185DAA +org $B0DDAA : RoomHeader_0043: ; pc 0x185DAA db $68, $04, $05, $0A, $00, $00, $1D, $00, $17, $0A, $1B, $00, $01, $00 -org $30DDB8 : RoomHeader_0044: ; pc 0x185DB8 +org $B0DDB8 : RoomHeader_0044: ; pc 0x185DB8 db $00, $17, $0A, $1B, $00, $01, $00, $60, $17, $0A, $1B, $00, $01, $00 -org $30DDC6 : RoomHeader_0045: ; pc 0x185DC6 +org $B0DDC6 : RoomHeader_0045: ; pc 0x185DC6 db $60, $17, $0A, $1B, $00, $01, $00, $00, $00, $00, $BC, $00, $0A, $08 -org $30DDD4 : RoomHeader_0046: ; pc 0x185DD4 +org $B0DDD4 : RoomHeader_0046: ; pc 0x185DD4 db $00, $0A, $08, $11, $00, $3C, $00, $00, $0D, $09, $13, $00, $33, $34 -org $30DDE2 : RoomHeader_0047: ; pc 0x185DE2 +org $B0DDE2 : RoomHeader_0047: ; pc 0x185DE2 db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 -org $30DDF0 : RoomHeader_0048: ; pc 0x185DF0 +org $B0DDF0 : RoomHeader_0048: ; pc 0x185DF0 db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 -org $30DDFE : RoomHeader_0049: ; pc 0x185DFE +org $B0DDFE : RoomHeader_0049: ; pc 0x185DFE db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 -org $30DE0C : RoomHeader_004A: ; pc 0x185E0C +org $B0DE0C : RoomHeader_004A: ; pc 0x185E0C db $00, $0F, $07, $19, $00, $17, $00, $00, $00, $00, $09, $09, $00, $0F -org $30DE1A : RoomHeader_004B: ; pc 0x185E1A +org $B0DE1A : RoomHeader_004B: ; pc 0x185E1A db $00, $0F, $07, $08, $00, $01, $00, $00, $00, $09, $00, $1A, $0E, $0C -org $30DE28 : RoomHeader_004C: ; pc 0x185E28 +org $B0DE28 : RoomHeader_004C: ; pc 0x185E28 db $00, $1A, $0E, $0C, $00, $00, $00, $00, $00, $00, $1D, $20, $1A, $0E -org $30DE36 : RoomHeader_004D: ; pc 0x185E36 +org $B0DE36 : RoomHeader_004D: ; pc 0x185E36 db $20, $1A, $0E, $0C, $00, $32, $3F, $00, $00, $A6, $A6, $00, $13, $0B -org $30DE44 : RoomHeader_004E: ; pc 0x185E44 +org $B0DE44 : RoomHeader_004E: ; pc 0x185E44 db $00, $13, $0B, $29, $00, $17, $00, $00, $00, $00, $6E, $00, $13, $0B -org $30DE52 : RoomHeader_004F: ; pc 0x185E52 +org $B0DE52 : RoomHeader_004F: ; pc 0x185E52 db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $BE, $C0, $00, $00, $04 -org $30DE60 : RoomHeader_0050: ; pc 0x185E60 +org $B0DE60 : RoomHeader_0050: ; pc 0x185E60 db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $01, $01 -org $30DE6E : RoomHeader_0051: ; pc 0x185E6E +org $B0DE6E : RoomHeader_0051: ; pc 0x185E6E db $C0, $00, $00, $03, $00, $00, $00, $00, $00, $00, $61, $C0, $00, $00 -org $30DE7C : RoomHeader_0052: ; pc 0x185E7C +org $B0DE7C : RoomHeader_0052: ; pc 0x185E7C db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $01, $01 -org $30DE8A : RoomHeader_0053: ; pc 0x185E8A +org $B0DE8A : RoomHeader_0053: ; pc 0x185E8A db $C0, $04, $05, $0A, $00, $03, $00, $00, $00, $00, $63, $20, $0A, $08 -org $30DE98 : RoomHeader_0054: ; pc 0x185E98 +org $B0DE98 : RoomHeader_0054: ; pc 0x185E98 db $20, $0A, $08, $11, $00, $00, $00, $00, $00, $34, $34, $01, $01, $10 -org $30DEA6 : RoomHeader_0055: ; pc 0x185EA6 +org $B0DEA6 : RoomHeader_0055: ; pc 0x185EA6 db $01, $01, $10, $0D, $00, $00, $00, $00, $0D, $09, $13, $00, $23, $00 -org $30DEB4 : RoomHeader_0056: ; pc 0x185EB4 +org $B0DEB4 : RoomHeader_0056: ; pc 0x185EB4 db $00, $0D, $09, $13, $00, $23, $00, $00, $0D, $09, $13, $00, $16, $00 -org $30DEC2 : RoomHeader_0057: ; pc 0x185EC2 +org $B0DEC2 : RoomHeader_0057: ; pc 0x185EC2 db $00, $0D, $09, $13, $00, $16, $00, $00, $0D, $09, $13, $00, $21, $28 -org $30DED0 : RoomHeader_0058: ; pc 0x185ED0 +org $B0DED0 : RoomHeader_0058: ; pc 0x185ED0 db $00, $0D, $09, $13, $00, $21, $28, $C0, $0D, $09, $13, $00, $00, $00 -org $30DEDE : RoomHeader_0059: ; pc 0x185EDE +org $B0DEDE : RoomHeader_0059: ; pc 0x185EDE db $C0, $0D, $09, $13, $00, $00, $00, $00, $10, $07, $15, $00, $25, $00 -org $30DEEC : RoomHeader_005A: ; pc 0x185EEC +org $B0DEEC : RoomHeader_005A: ; pc 0x185EEC db $00, $10, $07, $15, $00, $25, $00, $C0, $1B, $0E, $0A, $00, $17, $00 -org $30DEFA : RoomHeader_005B: ; pc 0x185EFA +org $B0DEFA : RoomHeader_005B: ; pc 0x185EFA db $C0, $1B, $0E, $0A, $00, $17, $00, $00, $1B, $0E, $0A, $00, $00, $00 -org $30DF08 : RoomHeader_005C: ; pc 0x185F08 +org $B0DF08 : RoomHeader_005C: ; pc 0x185F08 db $00, $1B, $0E, $0A, $00, $00, $00, $00, $00, $00, $5D, $00, $24, $0E -org $30DF16 : RoomHeader_005D: ; pc 0x185F16 +org $B0DF16 : RoomHeader_005D: ; pc 0x185F16 db $00, $24, $0E, $23, $00, $09, $00, $00, $00, $00, $5C, $20, $13, $0B -org $30DF24 : RoomHeader_005E: ; pc 0x185F24 +org $B0DF24 : RoomHeader_005E: ; pc 0x185F24 db $20, $13, $0B, $1C, $00, $00, $00, $00, $00, $7E, $7E, $00, $13, $0B -org $30DF32 : RoomHeader_005F: ; pc 0x185F32 +org $B0DF32 : RoomHeader_005F: ; pc 0x185F32 db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $3F, $7F, $C0, $00 -org $30DF40 : RoomHeader_0060: ; pc 0x185F40 +org $B0DF40 : RoomHeader_0060: ; pc 0x185F40 db $C0, $00, $00, $04, $00, $00, $00, $C0, $00, $00, $04, $00, $00, $00 -org $30DF4E : RoomHeader_0061: ; pc 0x185F4E +org $B0DF4E : RoomHeader_0061: ; pc 0x185F4E db $C0, $00, $00, $04, $00, $00, $00, $08, $00, $00, $51, $00, $09, $05 -org $30DF5C : RoomHeader_0062: ; pc 0x185F5C +org $B0DF5C : RoomHeader_0062: ; pc 0x185F5C db $C0, $00, $00, $04, $00, $00, $00, $C0, $00, $00, $04, $00, $00, $00 -org $30DF6A : RoomHeader_0063: ; pc 0x185F6A +org $B0DF6A : RoomHeader_0063: ; pc 0x185F6A db $00, $09, $05, $0A, $00, $0D, $00, $00, $00, $00, $53, $E0, $23, $0A -org $30DF78 : RoomHeader_0064: ; pc 0x185F78 +org $B0DF78 : RoomHeader_0064: ; pc 0x185F78 db $E0, $23, $0A, $21, $00, $17, $00, $00, $00, $00, $AB, $E0, $23, $0A -org $30DF86 : RoomHeader_0065: ; pc 0x185F86 +org $B0DF86 : RoomHeader_0065: ; pc 0x185F86 db $E0, $23, $0A, $21, $00, $00, $00, $00, $00, $AC, $C0, $0A, $08, $11 -org $30DF94 : RoomHeader_0066: ; pc 0x185F94 +org $B0DF94 : RoomHeader_0066: ; pc 0x185F94 db $C0, $0A, $08, $11, $00, $3C, $00, $00, $00, $00, $16, $00, $0D, $09 -org $30DFA2 : RoomHeader_0067: ; pc 0x185FA2 +org $B0DFA2 : RoomHeader_0067: ; pc 0x185FA2 db $00, $0D, $09, $13, $00, $22, $00, $00, $0D, $09, $13, $00, $00, $00 -org $30DFB0 : RoomHeader_0068: ; pc 0x185FB0 +org $B0DFB0 : RoomHeader_0068: ; pc 0x185FB0 db $00, $0D, $09, $13, $00, $00, $00, $01, $0F, $07, $19, $00, $00, $00 -org $30DFBE : RoomHeader_0069: ; pc 0x185FBE +org $B0DFBE : RoomHeader_0069: ; pc 0x185FBE db $01, $0F, $07, $19, $00, $00, $00, $00, $00, $00, $1A, $1A, $00, $1B -org $30DFCC : RoomHeader_006A: ; pc 0x185FCC +org $B0DFCC : RoomHeader_006A: ; pc 0x185FCC db $01, $0F, $07, $19, $00, $00, $00, $00, $00, $00, $1A, $1A, $00, $1B -org $30DFDA : RoomHeader_006B: ; pc 0x185FDA +org $B0DFDA : RoomHeader_006B: ; pc 0x185FDA db $00, $1B, $0E, $0A, $00, $08, $0B, $00, $00, $00, $0C, $00, $24, $0E -org $30DFE8 : RoomHeader_006C: ; pc 0x185FE8 +org $B0DFE8 : RoomHeader_006C: ; pc 0x185FE8 db $00, $24, $0E, $23, $00, $03, $3F, $00, $00, $00, $A5, $00, $24, $0E -org $30DFF6 : RoomHeader_006D: ; pc 0x185FF6 +org $B0DFF6 : RoomHeader_006D: ; pc 0x185FF6 db $00, $24, $0E, $23, $00, $05, $00, $00, $13, $0B, $1C, $00, $02, $00 -org $30E004 : RoomHeader_006E: ; pc 0x186004 +org $B0E004 : RoomHeader_006E: ; pc 0x186004 db $00, $13, $0B, $1C, $00, $02, $00, $00, $00, $00, $4E, $00, $01, $01 -org $30E012 : RoomHeader_006F: ; pc 0x186012 +org $B0E012 : RoomHeader_006F: ; pc 0x186012 db $00, $01, $01, $04, $00, $00, $00, $08, $00, $00, $71, $80, $C0, $01 -org $30E020 : RoomHeader_0070: ; pc 0x186020 +org $B0E020 : RoomHeader_0070: ; pc 0x186020 db $00, $01, $01, $04, $00, $00, $00, $08, $00, $00, $71, $80, $C0, $01 -org $30E02E : RoomHeader_0071: ; pc 0x18602E +org $B0E02E : RoomHeader_0071: ; pc 0x18602E db $C0, $01, $01, $04, $00, $08, $00, $00, $00, $00, $70, $C0, $01, $01 -org $30E03C : RoomHeader_0072: ; pc 0x18603C +org $B0E03C : RoomHeader_0072: ; pc 0x18603C db $C0, $01, $01, $04, $00, $00, $00, $08, $00, $00, $01, $00, $09, $05 -org $30E04A : RoomHeader_0073: ; pc 0x18604A +org $B0E04A : RoomHeader_0073: ; pc 0x18604A db $00, $09, $05, $0A, $00, $17, $00, $00, $09, $05, $0A, $00, $27, $00 -org $30E058 : RoomHeader_0074: ; pc 0x186058 +org $B0E058 : RoomHeader_0074: ; pc 0x186058 db $00, $09, $05, $0A, $00, $27, $00, $00, $09, $05, $0A, $00, $01, $00 -org $30E066 : RoomHeader_0075: ; pc 0x186066 +org $B0E066 : RoomHeader_0075: ; pc 0x186066 db $00, $09, $05, $0A, $00, $01, $00, $80, $0A, $08, $11, $00, $00, $18 -org $30E074 : RoomHeader_0076: ; pc 0x186074 +org $B0E074 : RoomHeader_0076: ; pc 0x186074 db $80, $0A, $08, $11, $00, $00, $18, $00, $00, $00, $26, $26, $26, $C0 -org $30E082 : RoomHeader_0077: ; pc 0x186082 +org $B0E082 : RoomHeader_0077: ; pc 0x186082 db $C0, $06, $05, $19, $00, $00, $00, $00, $00, $A7, $31, $87, $87, $00 -org $30E090 : RoomHeader_0078: ; pc 0x186090 +org $B0E090 : RoomHeader_0078: ; pc 0x186090 db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 -org $30E09E : RoomHeader_0079: ; pc 0x18609E +org $B0E09E : RoomHeader_0079: ; pc 0x18609E db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 -org $30E0AC : RoomHeader_007A: ; pc 0x1860AC +org $B0E0AC : RoomHeader_007A: ; pc 0x1860AC db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 -org $30E0BA : RoomHeader_007B: ; pc 0x1860BA +org $B0E0BA : RoomHeader_007B: ; pc 0x1860BA db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 -org $30E0C8 : RoomHeader_007C: ; pc 0x1860C8 +org $B0E0C8 : RoomHeader_007C: ; pc 0x1860C8 db $00, $28, $0E, $13, $00, $20, $00, $00, $28, $0E, $13, $00, $04, $3C -org $30E0D6 : RoomHeader_007D: ; pc 0x1860D6 +org $B0E0D6 : RoomHeader_007D: ; pc 0x1860D6 db $00, $28, $0E, $13, $00, $04, $3C, $00, $00, $9B, $20, $13, $0B, $1C -org $30E0E4 : RoomHeader_007E: ; pc 0x1860E4 +org $B0E0E4 : RoomHeader_007E: ; pc 0x1860E4 db $20, $13, $0B, $1C, $00, $2B, $17, $00, $00, $9E, $5E, $00, $13, $0B -org $30E0F2 : RoomHeader_007F: ; pc 0x1860F2 +org $B0E0F2 : RoomHeader_007F: ; pc 0x1860F2 db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $00, $5F, $60, $01, $01 -org $30E100 : RoomHeader_0080: ; pc 0x186100 +org $B0E100 : RoomHeader_0080: ; pc 0x186100 db $60, $01, $01, $04, $00, $00, $00, $00, $00, $00, $70, $C0, $01, $01 -org $30E10E : RoomHeader_0081: ; pc 0x18610E +org $B0E10E : RoomHeader_0081: ; pc 0x18610E db $C0, $01, $01, $04, $00, $00, $00, $00, $09, $05, $0A, $00, $0D, $00 -org $30E11C : RoomHeader_0082: ; pc 0x18611C +org $B0E11C : RoomHeader_0082: ; pc 0x18611C db $C0, $01, $01, $04, $00, $00, $00, $00, $09, $05, $0A, $00, $0D, $00 -org $30E12A : RoomHeader_0083: ; pc 0x18612A +org $B0E12A : RoomHeader_0083: ; pc 0x18612A db $00, $09, $05, $0A, $00, $0D, $00, $00, $09, $05, $0A, $00, $00, $00 -org $30E138 : RoomHeader_0084: ; pc 0x186138 +org $B0E138 : RoomHeader_0084: ; pc 0x186138 db $00, $09, $05, $0A, $00, $00, $00, $00, $09, $05, $0A, $00, $02, $00 -org $30E146 : RoomHeader_0085: ; pc 0x186146 +org $B0E146 : RoomHeader_0085: ; pc 0x186146 db $00, $09, $05, $0A, $00, $02, $00, $00, $06, $05, $19, $00, $3E, $01 -org $30E154 : RoomHeader_0086: ; pc 0x186154 +org $B0E154 : RoomHeader_0086: ; pc 0x186154 db $00, $06, $05, $19, $00, $3E, $01, $28, $00, $00, $77, $77, $00, $0B -org $30E162 : RoomHeader_0087: ; pc 0x186162 +org $B0E162 : RoomHeader_0087: ; pc 0x186162 db $00, $06, $05, $19, $00, $3E, $01, $28, $00, $00, $77, $77, $00, $0B -org $30E170 : RoomHeader_0088: ; pc 0x186170 +org $B0E170 : RoomHeader_0088: ; pc 0x186170 db $00, $0B, $05, $08, $00, $00, $00, $02, $00, $A9, $00, $28, $0E, $13 -org $30E17E : RoomHeader_0089: ; pc 0x18617E +org $B0E17E : RoomHeader_0089: ; pc 0x18617E db $00, $0B, $05, $08, $00, $00, $00, $02, $00, $A9, $00, $28, $0E, $13 -org $30E18C : RoomHeader_008A: ; pc 0x18618C +org $B0E18C : RoomHeader_008A: ; pc 0x18618C db $00, $28, $0E, $13, $00, $3A, $0C, $20, $28, $0E, $13, $00, $16, $00 -org $30E19A : RoomHeader_008B: ; pc 0x18619A +org $B0E19A : RoomHeader_008B: ; pc 0x18619A db $00, $28, $0E, $13, $00, $3A, $0C, $20, $28, $0E, $13, $00, $16, $00 -org $30E1A8 : RoomHeader_008C: ; pc 0x1861A8 +org $B0E1A8 : RoomHeader_008C: ; pc 0x1861A8 db $20, $28, $0E, $13, $00, $16, $00, $28, $00, $1C, $0C, $0C, $1C, $00 -org $30E1B6 : RoomHeader_008D: ; pc 0x1861B6 +org $B0E1B6 : RoomHeader_008D: ; pc 0x1861B6 db $00, $28, $0E, $13, $00, $33, $29, $00, $13, $0B, $1C, $00, $00, $00 -org $30E1C4 : RoomHeader_008E: ; pc 0x1861C4 +org $B0E1C4 : RoomHeader_008E: ; pc 0x1861C4 db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $00, $AE, $80, $12, $0C -org $30E1D2 : RoomHeader_008F: ; pc 0x1861D2 +org $B0E1D2 : RoomHeader_008F: ; pc 0x1861D2 db $80, $12, $0C, $16, $00, $25, $00, $00, $11, $0C, $1C, $00, $00, $00 -org $30E1E0 : RoomHeader_0090: ; pc 0x1861E0 +org $B0E1E0 : RoomHeader_0090: ; pc 0x1861E0 db $80, $12, $0C, $16, $00, $25, $00, $00, $11, $0C, $1C, $00, $00, $00 -org $30E1EE : RoomHeader_0091: ; pc 0x1861EE +org $B0E1EE : RoomHeader_0091: ; pc 0x1861EE db $00, $11, $0C, $1C, $00, $00, $00, $00, $00, $00, $A0, $01, $11, $0C -org $30E1FC : RoomHeader_0092: ; pc 0x1861FC +org $B0E1FC : RoomHeader_0092: ; pc 0x1861FC db $01, $11, $0C, $1C, $00, $00, $00, $01, $11, $0C, $1C, $00, $16, $00 -org $30E20A : RoomHeader_0093: ; pc 0x18620A +org $B0E20A : RoomHeader_0093: ; pc 0x18620A db $01, $11, $0C, $1C, $00, $16, $00, $08, $00, $00, $A2, $00, $25, $0E -org $30E218 : RoomHeader_0094: ; pc 0x186218 +org $B0E218 : RoomHeader_0094: ; pc 0x186218 db $00, $25, $0E, $24, $00, $00, $00, $00, $25, $0E, $24, $00, $33, $00 -org $30E226 : RoomHeader_0095: ; pc 0x186226 +org $B0E226 : RoomHeader_0095: ; pc 0x186226 db $00, $25, $0E, $24, $00, $00, $00, $00, $25, $0E, $24, $00, $33, $00 -org $30E234 : RoomHeader_0096: ; pc 0x186234 +org $B0E234 : RoomHeader_0096: ; pc 0x186234 db $00, $25, $0E, $24, $00, $33, $00, $00, $00, $00, $3D, $68, $11, $0C -org $30E242 : RoomHeader_0097: ; pc 0x186242 +org $B0E242 : RoomHeader_0097: ; pc 0x186242 db $68, $11, $0C, $1D, $00, $1C, $00, $00, $00, $D1, $D1, $00, $11, $0C -org $30E250 : RoomHeader_0098: ; pc 0x186250 +org $B0E250 : RoomHeader_0098: ; pc 0x186250 db $00, $11, $0C, $1C, $00, $00, $00, $00, $00, $00, $D2, $01, $0B, $05 -org $30E25E : RoomHeader_0099: ; pc 0x18625E +org $B0E25E : RoomHeader_0099: ; pc 0x18625E db $01, $0B, $05, $08, $00, $00, $00, $00, $00, $00, $DA, $00, $28, $0E -org $30E26C : RoomHeader_009A: ; pc 0x18626C +org $B0E26C : RoomHeader_009A: ; pc 0x18626C db $00, $28, $0E, $13, $00, $00, $00, $00, $00, $7D, $00, $28, $0E, $13 -org $30E27A : RoomHeader_009B: ; pc 0x18627A +org $B0E27A : RoomHeader_009B: ; pc 0x18627A db $00, $28, $0E, $13, $00, $00, $00, $00, $00, $7D, $00, $28, $0E, $13 -org $30E288 : RoomHeader_009C: ; pc 0x186288 +org $B0E288 : RoomHeader_009C: ; pc 0x186288 db $00, $28, $0E, $13, $06, $00, $00, $00, $28, $0E, $13, $06, $00, $3B -org $30E296 : RoomHeader_009D: ; pc 0x186296 +org $B0E296 : RoomHeader_009D: ; pc 0x186296 db $00, $28, $0E, $13, $06, $00, $3B, $00, $00, $7B, $20, $13, $0B, $1C -org $30E2A4 : RoomHeader_009E: ; pc 0x1862A4 +org $B0E2A4 : RoomHeader_009E: ; pc 0x1862A4 db $20, $13, $0B, $1C, $00, $00, $00, $00, $00, $BE, $BE, $00, $13, $0B -org $30E2B2 : RoomHeader_009F: ; pc 0x1862B2 +org $B0E2B2 : RoomHeader_009F: ; pc 0x1862B2 db $00, $13, $0B, $1C, $00, $17, $00, $00, $12, $0C, $1D, $00, $00, $00 -org $30E2C0 : RoomHeader_00A0: ; pc 0x1862C0 +org $B0E2C0 : RoomHeader_00A0: ; pc 0x1862C0 db $00, $12, $0C, $1D, $00, $00, $00, $00, $00, $00, $91, $00, $11, $0C -org $30E2CE : RoomHeader_00A1: ; pc 0x1862CE +org $B0E2CE : RoomHeader_00A1: ; pc 0x1862CE db $00, $11, $0C, $1D, $00, $00, $00, $C0, $11, $0C, $1D, $00, $00, $00 -org $30E2DC : RoomHeader_00A2: ; pc 0x1862DC +org $B0E2DC : RoomHeader_00A2: ; pc 0x1862DC db $C0, $11, $0C, $1D, $00, $00, $00, $00, $00, $00, $93, $60, $19, $0D -org $30E2EA : RoomHeader_00A3: ; pc 0x1862EA +org $B0E2EA : RoomHeader_00A3: ; pc 0x1862EA db $00, $11, $0C, $1D, $00, $00, $00, $C0, $11, $0C, $1D, $00, $00, $00 -org $30E2F8 : RoomHeader_00A4: ; pc 0x1862F8 +org $B0E2F8 : RoomHeader_00A4: ; pc 0x1862F8 db $60, $19, $0D, $17, $04, $25, $00, $00, $25, $0E, $24, $00, $07, $00 -org $30E306 : RoomHeader_00A5: ; pc 0x186306 +org $B0E306 : RoomHeader_00A5: ; pc 0x186306 db $00, $25, $0E, $24, $00, $07, $00, $00, $00, $00, $6C, $00, $25, $0E -org $30E314 : RoomHeader_00A6: ; pc 0x186314 +org $B0E314 : RoomHeader_00A6: ; pc 0x186314 db $00, $25, $0E, $24, $00, $00, $00, $00, $00, $00, $4D, $00, $06, $05 -org $30E322 : RoomHeader_00A7: ; pc 0x186322 +org $B0E322 : RoomHeader_00A7: ; pc 0x186322 db $00, $06, $05, $19, $00, $00, $00, $00, $00, $17, $C0, $0B, $05, $08 -org $30E330 : RoomHeader_00A8: ; pc 0x186330 +org $B0E330 : RoomHeader_00A8: ; pc 0x186330 db $C0, $0B, $05, $08, $00, $03, $00, $C0, $0B, $05, $08, $00, $17, $00 -org $30E33E : RoomHeader_00A9: ; pc 0x18633E +org $B0E33E : RoomHeader_00A9: ; pc 0x18633E db $C0, $0B, $05, $08, $00, $17, $00, $00, $00, $89, $C0, $0B, $05, $08 -org $30E34C : RoomHeader_00AA: ; pc 0x18634C +org $B0E34C : RoomHeader_00AA: ; pc 0x18634C db $C0, $0B, $05, $08, $00, $17, $00, $00, $17, $0A, $1B, $00, $00, $00 -org $30E35A : RoomHeader_00AB: ; pc 0x18635A +org $B0E35A : RoomHeader_00AB: ; pc 0x18635A db $00, $17, $0A, $1B, $00, $00, $00, $00, $00, $00, $64, $E0, $17, $0A -org $30E368 : RoomHeader_00AC: ; pc 0x186368 +org $B0E368 : RoomHeader_00AC: ; pc 0x186368 db $E0, $17, $0A, $20, $00, $25, $00, $00, $13, $0B, $1C, $00, $27, $00 -org $30E376 : RoomHeader_00AD: ; pc 0x186376 +org $B0E376 : RoomHeader_00AD: ; pc 0x186376 db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $8E, $00, $13, $0B -org $30E384 : RoomHeader_00AE: ; pc 0x186384 +org $B0E384 : RoomHeader_00AE: ; pc 0x186384 db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $8E, $00, $13, $0B -org $30E392 : RoomHeader_00AF: ; pc 0x186392 +org $B0E392 : RoomHeader_00AF: ; pc 0x186392 db $00, $13, $0B, $1C, $00, $00, $00, $00, $26, $02, $21, $00, $05, $02 -org $30E3A0 : RoomHeader_00B0: ; pc 0x1863A0 +org $B0E3A0 : RoomHeader_00B0: ; pc 0x1863A0 db $00, $26, $02, $21, $00, $05, $02, $08, $00, $00, $40, $C0, $00, $11 -org $30E3AE : RoomHeader_00B1: ; pc 0x1863AE +org $B0E3AE : RoomHeader_00B1: ; pc 0x1863AE db $00, $11, $0C, $1D, $00, $00, $00, $02, $00, $B2, $C0, $11, $0C, $1D -org $30E3BC : RoomHeader_00B2: ; pc 0x1863BC +org $B0E3BC : RoomHeader_00B2: ; pc 0x1863BC db $C0, $11, $0C, $1D, $00, $03, $0E, $C0, $11, $0C, $1D, $00, $27, $00 -org $30E3CA : RoomHeader_00B3: ; pc 0x1863CA +org $B0E3CA : RoomHeader_00B3: ; pc 0x1863CA db $C0, $11, $0C, $1D, $00, $27, $00, $00, $19, $0D, $17, $00, $00, $00 -org $30E3D8 : RoomHeader_00B4: ; pc 0x1863D8 +org $B0E3D8 : RoomHeader_00B4: ; pc 0x1863D8 db $00, $19, $0D, $17, $00, $00, $00, $00, $00, $00, $C4, $01, $18, $0D -org $30E3E6 : RoomHeader_00B5: ; pc 0x1863E6 +org $B0E3E6 : RoomHeader_00B5: ; pc 0x1863E6 db $01, $18, $0D, $25, $00, $17, $00, $00, $00, $00, $04, $00, $18, $0D -org $30E3F4 : RoomHeader_00B6: ; pc 0x1863F4 +org $B0E3F4 : RoomHeader_00B6: ; pc 0x1863F4 db $00, $18, $0D, $1E, $00, $04, $3C, $00, $00, $00, $15, $00, $0B, $05 -org $30E402 : RoomHeader_00B7: ; pc 0x186402 +org $B0E402 : RoomHeader_00B7: ; pc 0x186402 db $00, $18, $0D, $1E, $00, $00, $00, $20, $18, $0D, $26, $00, $00, $00 -org $30E410 : RoomHeader_00B8: ; pc 0x186410 +org $B0E410 : RoomHeader_00B8: ; pc 0x186410 db $00, $0B, $05, $08, $00, $27, $00, $C0, $0B, $05, $08, $00, $00, $00 -org $30E41E : RoomHeader_00B9: ; pc 0x18641E +org $B0E41E : RoomHeader_00B9: ; pc 0x18641E db $C0, $0B, $05, $08, $00, $00, $00, $01, $0B, $05, $08, $00, $17, $00 -org $30E42C : RoomHeader_00BA: ; pc 0x18642C +org $B0E42C : RoomHeader_00BA: ; pc 0x18642C db $01, $0B, $05, $08, $00, $17, $00, $40, $17, $0A, $1B, $00, $00, $00 -org $30E43A : RoomHeader_00BB: ; pc 0x18643A +org $B0E43A : RoomHeader_00BB: ; pc 0x18643A db $40, $17, $0A, $1B, $00, $00, $00, $00, $17, $0A, $1B, $00, $17, $00 -org $30E448 : RoomHeader_00BC: ; pc 0x186448 +org $B0E448 : RoomHeader_00BC: ; pc 0x186448 db $00, $17, $0A, $1B, $00, $17, $00, $00, $00, $00, $45, $00, $13, $0B -org $30E456 : RoomHeader_00BD: ; pc 0x186456 +org $B0E456 : RoomHeader_00BD: ; pc 0x186456 db $00, $13, $0B, $29, $00, $16, $00, $00, $00, $4F, $9E, $00, $13, $0B -org $30E464 : RoomHeader_00BE: ; pc 0x186464 +org $B0E464 : RoomHeader_00BE: ; pc 0x186464 db $00, $13, $0B, $29, $00, $16, $00, $00, $00, $4F, $9E, $00, $13, $0B -org $30E472 : RoomHeader_00BF: ; pc 0x186472 +org $B0E472 : RoomHeader_00BF: ; pc 0x186472 db $00, $13, $0B, $29, $00, $00, $00, $01, $00, $02, $27, $00, $02, $0F -org $30E480 : RoomHeader_00C0: ; pc 0x186480 +org $B0E480 : RoomHeader_00C0: ; pc 0x186480 db $01, $00, $02, $27, $00, $02, $0F, $00, $00, $00, $B0, $D0, $00, $11 -org $30E48E : RoomHeader_00C1: ; pc 0x18648E +org $B0E48E : RoomHeader_00C1: ; pc 0x18648E db $00, $11, $0C, $1D, $00, $33, $00, $C0, $11, $0C, $1D, $00, $27, $00 -org $30E49C : RoomHeader_00C2: ; pc 0x18649C +org $B0E49C : RoomHeader_00C2: ; pc 0x18649C db $C0, $11, $0C, $1D, $00, $27, $00, $C0, $11, $0C, $1D, $00, $00, $00 -org $30E4AA : RoomHeader_00C3: ; pc 0x1864AA +org $B0E4AA : RoomHeader_00C3: ; pc 0x1864AA db $C0, $11, $0C, $1D, $00, $00, $00, $00, $18, $0D, $25, $00, $00, $00 -org $30E4B8 : RoomHeader_00C4: ; pc 0x1864B8 +org $B0E4B8 : RoomHeader_00C4: ; pc 0x1864B8 db $00, $18, $0D, $25, $00, $00, $00, $00, $00, $00, $B4, $00, $18, $0D -org $30E4C6 : RoomHeader_00C5: ; pc 0x1864C6 +org $B0E4C6 : RoomHeader_00C5: ; pc 0x1864C6 db $00, $18, $0D, $25, $00, $00, $00, $00, $18, $0D, $1E, $00, $33, $00 -org $30E4D4 : RoomHeader_00C6: ; pc 0x1864D4 +org $B0E4D4 : RoomHeader_00C6: ; pc 0x1864D4 db $00, $18, $0D, $1E, $00, $00, $00, $20, $18, $0D, $26, $00, $00, $00 -org $30E4E2 : RoomHeader_00C7: ; pc 0x1864E2 +org $B0E4E2 : RoomHeader_00C7: ; pc 0x1864E2 db $00, $18, $0D, $1E, $00, $33, $00, $00, $0B, $05, $09, $00, $15, $25 -org $30E4F0 : RoomHeader_00C8: ; pc 0x1864F0 +org $B0E4F0 : RoomHeader_00C8: ; pc 0x1864F0 db $00, $0B, $05, $09, $00, $15, $25, $00, $0B, $05, $08, $00, $17, $00 -org $30E4FE : RoomHeader_00C9: ; pc 0x1864FE +org $B0E4FE : RoomHeader_00C9: ; pc 0x1864FE db $00, $0B, $05, $08, $00, $17, $00, $C0, $17, $0A, $1B, $00, $00, $00 -org $30E50C : RoomHeader_00CA: ; pc 0x18650C +org $B0E50C : RoomHeader_00CA: ; pc 0x18650C db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 -org $30E51A : RoomHeader_00CB: ; pc 0x18651A +org $B0E51A : RoomHeader_00CB: ; pc 0x18651A db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 -org $30E528 : RoomHeader_00CC: ; pc 0x186528 +org $B0E528 : RoomHeader_00CC: ; pc 0x186528 db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 -org $30E536 : RoomHeader_00CD: ; pc 0x186536 +org $B0E536 : RoomHeader_00CD: ; pc 0x186536 db $20, $13, $0B, $29, $00, $14, $00, $00, $00, $DE, $01, $00, $02, $21 -org $30E544 : RoomHeader_00CE: ; pc 0x186544 +org $B0E544 : RoomHeader_00CE: ; pc 0x186544 db $20, $13, $0B, $29, $00, $14, $00, $00, $00, $DE, $01, $00, $02, $21 -org $30E552 : RoomHeader_00CF: ; pc 0x186552 +org $B0E552 : RoomHeader_00CF: ; pc 0x186552 db $01, $00, $02, $21, $00, $0F, $00, $00, $00, $00, $C0, $E0, $00, $11 -org $30E560 : RoomHeader_00D0: ; pc 0x186560 +org $B0E560 : RoomHeader_00D0: ; pc 0x186560 db $01, $00, $02, $21, $00, $0F, $00, $00, $00, $00, $C0, $E0, $00, $11 -org $30E56E : RoomHeader_00D1: ; pc 0x18656E +org $B0E56E : RoomHeader_00D1: ; pc 0x18656E db $00, $11, $0C, $1D, $00, $00, $00, $00, $00, $B1, $97, $00, $11, $0C -org $30E57C : RoomHeader_00D2: ; pc 0x18657C +org $B0E57C : RoomHeader_00D2: ; pc 0x18657C db $00, $11, $0C, $1D, $00, $0A, $00, $00, $00, $00, $98, $00, $0B, $05 -org $30E58A : RoomHeader_00D3: ; pc 0x18658A +org $B0E58A : RoomHeader_00D3: ; pc 0x18658A db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 -org $30E598 : RoomHeader_00D4: ; pc 0x186598 +org $B0E598 : RoomHeader_00D4: ; pc 0x186598 db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 -org $30E5A6 : RoomHeader_00D5: ; pc 0x1865A6 +org $B0E5A6 : RoomHeader_00D5: ; pc 0x1865A6 db $00, $18, $0D, $25, $00, $00, $00, $00, $18, $0D, $1E, $00, $33, $00 -org $30E5B4 : RoomHeader_00D6: ; pc 0x1865B4 +org $B0E5B4 : RoomHeader_00D6: ; pc 0x1865B4 db $00, $18, $0D, $1E, $00, $00, $00, $20, $18, $0D, $26, $00, $00, $00 -org $30E5C2 : RoomHeader_00D7: ; pc 0x1865C2 +org $B0E5C2 : RoomHeader_00D7: ; pc 0x1865C2 db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 -org $30E5D0 : RoomHeader_00D8: ; pc 0x1865D0 +org $B0E5D0 : RoomHeader_00D8: ; pc 0x1865D0 db $00, $0B, $05, $08, $00, $06, $00, $00, $0B, $05, $08, $00, $17, $00 -org $30E5DE : RoomHeader_00D9: ; pc 0x1865DE +org $B0E5DE : RoomHeader_00D9: ; pc 0x1865DE db $00, $0B, $05, $08, $00, $17, $00, $00, $0B, $05, $08, $00, $17, $00 -org $30E5EC : RoomHeader_00DA: ; pc 0x1865EC +org $B0E5EC : RoomHeader_00DA: ; pc 0x1865EC db $00, $0B, $05, $08, $00, $17, $00, $00, $00, $00, $99, $E0, $14, $0B -org $30E5FA : RoomHeader_00DB: ; pc 0x1865FA +org $B0E5FA : RoomHeader_00DB: ; pc 0x1865FA db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 -org $30E608 : RoomHeader_00DC: ; pc 0x186608 +org $B0E608 : RoomHeader_00DC: ; pc 0x186608 db $C0, $17, $0A, $1B, $00, $00, $00, $20, $13, $0B, $29, $00, $14, $00 -org $30E616 : RoomHeader_00DD: ; pc 0x186616 +org $B0E616 : RoomHeader_00DD: ; pc 0x186616 db $E0, $14, $0B, $16, $00, $25, $00, $C0, $20, $06, $13, $00, $00, $00 -org $30E624 : RoomHeader_00DE: ; pc 0x186624 +org $B0E624 : RoomHeader_00DE: ; pc 0x186624 db $E0, $14, $0B, $16, $00, $25, $00, $C0, $20, $06, $13, $00, $00, $00 -org $30E632 : RoomHeader_00DF: ; pc 0x186632 +org $B0E632 : RoomHeader_00DF: ; pc 0x186632 db $C0, $20, $06, $13, $00, $00, $00, $00, $00, $00, $EF, $00, $26, $02 -org $30E640 : RoomHeader_00E0: ; pc 0x186640 +org $B0E640 : RoomHeader_00E0: ; pc 0x186640 db $00, $26, $02, $21, $00, $01, $2A, $00, $00, $00, $D0, $C0, $07, $06 -org $30E64E : RoomHeader_00E1: ; pc 0x18664E +org $B0E64E : RoomHeader_00E1: ; pc 0x18664E db $C0, $07, $06, $28, $00, $00, $00, $00, $20, $06, $13, $00, $00, $00 -org $30E65C : RoomHeader_00E2: ; pc 0x18665C +org $B0E65C : RoomHeader_00E2: ; pc 0x18665C db $00, $20, $06, $13, $00, $00, $00, $C0, $20, $06, $09, $00, $00, $00 -org $30E66A : RoomHeader_00E3: ; pc 0x18666A +org $B0E66A : RoomHeader_00E3: ; pc 0x18666A db $C0, $20, $06, $09, $00, $00, $00, $01, $07, $14, $01, $00, $00, $00 -org $30E678 : RoomHeader_00E4: ; pc 0x186678 +org $B0E678 : RoomHeader_00E4: ; pc 0x186678 db $01, $07, $14, $01, $00, $00, $00, $01, $07, $06, $01, $00, $00, $00 -org $30E686 : RoomHeader_00E5: ; pc 0x186686 +org $B0E686 : RoomHeader_00E5: ; pc 0x186686 db $01, $07, $14, $01, $00, $00, $00, $01, $07, $06, $01, $00, $00, $00 -org $30E694 : RoomHeader_00E6: ; pc 0x186694 +org $B0E694 : RoomHeader_00E6: ; pc 0x186694 db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 -org $30E6A2 : RoomHeader_00E7: ; pc 0x1866A2 +org $B0E6A2 : RoomHeader_00E7: ; pc 0x1866A2 db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 -org $30E6B0 : RoomHeader_00E8: ; pc 0x1866B0 +org $B0E6B0 : RoomHeader_00E8: ; pc 0x1866B0 db $20, $07, $06, $13, $00, $00, $00, $00, $00, $F8, $F8, $F8, $F8, $F8 -org $30E6BE : RoomHeader_00E9: ; pc 0x1866BE +org $B0E6BE : RoomHeader_00E9: ; pc 0x1866BE db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FA, $FA, $20, $07, $06 -org $30E6CC : RoomHeader_00EA: ; pc 0x1866CC +org $B0E6CC : RoomHeader_00EA: ; pc 0x1866CC db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FA, $FA, $20, $07, $06 -org $30E6DA : RoomHeader_00EB: ; pc 0x1866DA +org $B0E6DA : RoomHeader_00EB: ; pc 0x1866DA db $20, $07, $06, $19, $00, $00, $00, $00, $00, $FB, $FB, $20, $20, $06 -org $30E6E8 : RoomHeader_00EC: ; pc 0x1866E8 +org $B0E6E8 : RoomHeader_00EC: ; pc 0x1866E8 db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FD, $FD, $FD, $20, $20 -org $30E6F6 : RoomHeader_00ED: ; pc 0x1866F6 +org $B0E6F6 : RoomHeader_00ED: ; pc 0x1866F6 db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FD, $FD, $FD, $20, $20 -org $30E704 : RoomHeader_00EE: ; pc 0x186704 +org $B0E704 : RoomHeader_00EE: ; pc 0x186704 db $20, $20, $06, $13, $00, $00, $00, $00, $00, $FE, $20, $20, $06, $13 -org $30E712 : RoomHeader_00EF: ; pc 0x186712 +org $B0E712 : RoomHeader_00EF: ; pc 0x186712 db $20, $20, $06, $13, $00, $02, $00, $08, $00, $FF, $DF, $FF, $00, $02 -org $30E720 : RoomHeader_00F0: ; pc 0x186720 +org $B0E720 : RoomHeader_00F0: ; pc 0x186720 db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 -org $30E72E : RoomHeader_00F1: ; pc 0x18672E +org $B0E72E : RoomHeader_00F1: ; pc 0x18672E db $01, $07, $06, $01, $00, $00, $00, $20, $07, $06, $13, $00, $00, $00 -org $30E73C : RoomHeader_00F2: ; pc 0x18673C +org $B0E73C : RoomHeader_00F2: ; pc 0x18673C db $00, $02, $03, $05, $00, $00, $02, $03, $0F, $00, $00, $00, $00, $07 -org $30E74A : RoomHeader_00F3: ; pc 0x18674A +org $B0E74A : RoomHeader_00F3: ; pc 0x18674A db $00, $02, $03, $05, $00, $00, $02, $03, $0F, $00, $00, $00, $00, $07 -org $30E758 : RoomHeader_00F4: ; pc 0x186758 +org $B0E758 : RoomHeader_00F4: ; pc 0x186758 db $00, $02, $03, $0F, $00, $00, $00, $00, $07, $06, $13, $00, $00, $00 -org $30E766 : RoomHeader_00F5: ; pc 0x186766 +org $B0E766 : RoomHeader_00F5: ; pc 0x186766 db $00, $02, $03, $0F, $00, $00, $00, $00, $07, $06, $13, $00, $00, $00 -org $30E774 : RoomHeader_00F6: ; pc 0x186774 +org $B0E774 : RoomHeader_00F6: ; pc 0x186774 db $00, $07, $06, $13, $00, $00, $00, $00, $00, $00, $E8, $E8, $E8, $E8 -org $30E782 : RoomHeader_00F7: ; pc 0x186782 +org $B0E782 : RoomHeader_00F7: ; pc 0x186782 db $00, $07, $06, $13, $00, $00, $00, $00, $00, $00, $E8, $E8, $E8, $E8 -org $30E790 : RoomHeader_00F8: ; pc 0x186790 +org $B0E790 : RoomHeader_00F8: ; pc 0x186790 db $00, $07, $06, $13, $00, $00, $00, $00, $00, $00, $E8, $E8, $E8, $E8 -org $30E79E : RoomHeader_00F9: ; pc 0x18679E +org $B0E79E : RoomHeader_00F9: ; pc 0x18679E db $00, $20, $06, $13, $00, $00, $00, $C0, $20, $06, $13, $00, $00, $00 -org $30E7AC : RoomHeader_00FA: ; pc 0x1867AC +org $B0E7AC : RoomHeader_00FA: ; pc 0x1867AC db $C0, $20, $06, $13, $00, $00, $00, $00, $00, $00, $EA, $00, $07, $06 -org $30E7BA : RoomHeader_00FB: ; pc 0x1867BA +org $B0E7BA : RoomHeader_00FB: ; pc 0x1867BA db $00, $07, $06, $19, $00, $00, $00, $00, $00, $00, $EB, $00, $20, $06 -org $30E7C8 : RoomHeader_00FC: ; pc 0x1867C8 +org $B0E7C8 : RoomHeader_00FC: ; pc 0x1867C8 db $00, $20, $06, $13, $00, $00, $00, $00, $00, $00, $ED, $ED, $00, $07 -org $30E7D6 : RoomHeader_00FD: ; pc 0x1867D6 +org $B0E7D6 : RoomHeader_00FD: ; pc 0x1867D6 db $00, $20, $06, $13, $00, $00, $00, $00, $00, $00, $ED, $ED, $00, $07 -org $30E7E4 : RoomHeader_00FE: ; pc 0x1867E4 +org $B0E7E4 : RoomHeader_00FE: ; pc 0x1867E4 db $00, $20, $06, $13, $00, $00, $00, $C0, $20, $06, $13, $00, $00, $00 -org $30E7F2 : RoomHeader_00FF: ; pc 0x1867F2 +org $B0E7F2 : RoomHeader_00FF: ; pc 0x1867F2 db $00, $07, $06, $05, $00, $00, $00, $00, $00, $00, $EF, $00, $05, $03 -org $30E800 : RoomHeader_0100: ; pc 0x186800 +org $B0E800 : RoomHeader_0100: ; pc 0x186800 db $00, $05, $03, $28, $00, $00, $00, $00, $1F, $03, $05, $00, $00, $00 -org $30E80E : RoomHeader_0101: ; pc 0x18680E +org $B0E80E : RoomHeader_0101: ; pc 0x18680E db $00, $02, $03, $0F, $00, $00, $00, $00, $15, $03, $0D, $00, $00, $00 -org $30E81C : RoomHeader_0102: ; pc 0x18681C +org $B0E81C : RoomHeader_0102: ; pc 0x18681C db $00, $15, $03, $0D, $00, $00, $00, $00, $05, $03, $0F, $00, $00, $00 -org $30E82A : RoomHeader_0103: ; pc 0x18682A +org $B0E82A : RoomHeader_0103: ; pc 0x18682A db $00, $05, $03, $0F, $00, $00, $00, $01, $15, $03, $0D, $00, $00, $00 -org $30E838 : RoomHeader_0104: ; pc 0x186838 +org $B0E838 : RoomHeader_0104: ; pc 0x186838 db $01, $15, $03, $0D, $00, $00, $00, $00, $1C, $0F, $10, $00, $00, $00 -org $30E846 : RoomHeader_0105: ; pc 0x186846 +org $B0E846 : RoomHeader_0105: ; pc 0x186846 db $00, $1C, $0F, $10, $00, $00, $00, $00, $1F, $03, $0F, $00, $00, $00 -org $30E854 : RoomHeader_0106: ; pc 0x186854 +org $B0E854 : RoomHeader_0106: ; pc 0x186854 db $00, $1F, $03, $0F, $00, $00, $00, $00, $02, $03, $01, $00, $00, $00 -org $30E862 : RoomHeader_0107: ; pc 0x186862 +org $B0E862 : RoomHeader_0107: ; pc 0x186862 db $00, $02, $03, $01, $00, $00, $00, $00, $02, $03, $0E, $00, $00, $00 -org $30E870 : RoomHeader_0108: ; pc 0x186870 +org $B0E870 : RoomHeader_0108: ; pc 0x186870 db $00, $02, $03, $0E, $00, $00, $00, $01, $05, $03, $05, $00, $00, $00 -org $30E87E : RoomHeader_0109: ; pc 0x18687E +org $B0E87E : RoomHeader_0109: ; pc 0x18687E db $01, $05, $03, $05, $00, $00, $00, $01, $07, $06, $10, $00, $00, $00 -org $30E88C : RoomHeader_010A: ; pc 0x18688C +org $B0E88C : RoomHeader_010A: ; pc 0x18688C db $01, $07, $06, $10, $00, $00, $00, $80, $0A, $08, $08, $00, $00, $1A -org $30E89A : RoomHeader_010B: ; pc 0x18689A +org $B0E89A : RoomHeader_010B: ; pc 0x18689A db $80, $0A, $08, $08, $00, $00, $1A, $00, $27, $06, $08, $00, $03, $00 -org $30E8A8 : RoomHeader_010C: ; pc 0x1868A8 +org $B0E8A8 : RoomHeader_010C: ; pc 0x1868A8 db $00, $27, $06, $08, $00, $03, $00, $00, $0A, $08, $11, $00, $00, $00 -org $30E8B6 : RoomHeader_010D: ; pc 0x1868B6 +org $B0E8B6 : RoomHeader_010D: ; pc 0x1868B6 db $00, $0A, $08, $11, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 -org $30E8C4 : RoomHeader_010E: ; pc 0x1868C4 +org $B0E8C4 : RoomHeader_010E: ; pc 0x1868C4 db $00, $07, $14, $05, $00, $00, $00, $00, $1E, $11, $05, $00, $00, $00 -org $30E8D2 : RoomHeader_010F: ; pc 0x1868D2 +org $B0E8D2 : RoomHeader_010F: ; pc 0x1868D2 db $00, $1F, $03, $05, $00, $00, $00, $00, $02, $03, $0F, $00, $00, $00 -org $30E8E0 : RoomHeader_0110: ; pc 0x1868E0 +org $B0E8E0 : RoomHeader_0110: ; pc 0x1868E0 db $00, $1F, $03, $05, $00, $00, $00, $00, $02, $03, $0F, $00, $00, $00 -org $30E8EE : RoomHeader_0111: ; pc 0x1868EE +org $B0E8EE : RoomHeader_0111: ; pc 0x1868EE db $00, $1E, $11, $05, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 -org $30E8FC : RoomHeader_0112: ; pc 0x1868FC +org $B0E8FC : RoomHeader_0112: ; pc 0x1868FC db $00, $07, $14, $05, $00, $00, $00, $00, $03, $10, $08, $00, $00, $00 -org $30E90A : RoomHeader_0113: ; pc 0x18690A +org $B0E90A : RoomHeader_0113: ; pc 0x18690A db $00, $03, $10, $08, $00, $00, $00, $00, $07, $06, $07, $00, $00, $00 -org $30E918 : RoomHeader_0114: ; pc 0x186918 +org $B0E918 : RoomHeader_0114: ; pc 0x186918 db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 -org $30E926 : RoomHeader_0115: ; pc 0x186926 +org $B0E926 : RoomHeader_0115: ; pc 0x186926 db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 -org $30E934 : RoomHeader_0116: ; pc 0x186934 +org $B0E934 : RoomHeader_0116: ; pc 0x186934 db $00, $22, $12, $07, $00, $00, $00, $00, $20, $14, $05, $00, $00, $00 -org $30E942 : RoomHeader_0117: ; pc 0x186942 +org $B0E942 : RoomHeader_0117: ; pc 0x186942 db $00, $20, $14, $05, $00, $00, $00, $E0, $23, $0A, $0F, $00, $00, $00 -org $30E950 : RoomHeader_0118: ; pc 0x186950 +org $B0E950 : RoomHeader_0118: ; pc 0x186950 db $00, $05, $03, $0F, $00, $00, $00, $01, $15, $03, $0D, $00, $00, $00 -org $30E95E : RoomHeader_0119: ; pc 0x18695E +org $B0E95E : RoomHeader_0119: ; pc 0x18695E db $E0, $23, $0A, $0F, $00, $00, $00, $00, $00, $00, $1D, $00, $1C, $0F -org $30E96C : RoomHeader_011A: ; pc 0x18696C +org $B0E96C : RoomHeader_011A: ; pc 0x18696C db $00, $1C, $0F, $05, $00, $00, $00, $C0, $07, $06, $08, $00, $00, $00 -org $30E97A : RoomHeader_011B: ; pc 0x18697A +org $B0E97A : RoomHeader_011B: ; pc 0x18697A db $C0, $07, $06, $08, $00, $00, $00, $00, $23, $0A, $0F, $00, $00, $00 -org $30E988 : RoomHeader_011C: ; pc 0x186988 +org $B0E988 : RoomHeader_011C: ; pc 0x186988 db $00, $1F, $03, $05, $00, $00, $00, $00, $02, $03, $0F, $00, $00, $00 -org $30E996 : RoomHeader_011D: ; pc 0x186996 +org $B0E996 : RoomHeader_011D: ; pc 0x186996 db $00, $23, $0A, $0F, $00, $00, $00, $00, $00, $00, $19, $00, $20, $06 -org $30E9A4 : RoomHeader_011E: ; pc 0x1869A4 +org $B0E9A4 : RoomHeader_011E: ; pc 0x1869A4 db $00, $20, $06, $2A, $00, $00, $00, $00, $05, $03, $05, $00, $00, $00 -org $30E9B2 : RoomHeader_011F: ; pc 0x1869B2 +org $B0E9B2 : RoomHeader_011F: ; pc 0x1869B2 db $00, $05, $03, $05, $00, $00, $00, $00, $13, $06, $13, $00, $00, $00 -org $30E9C0 : RoomHeader_0120: ; pc 0x1869C0 +org $B0E9C0 : RoomHeader_0120: ; pc 0x1869C0 db $00, $13, $06, $13, $00, $00, $00, $00, $07, $06, $28, $00, $03, $00 -org $30E9CE : RoomHeader_0121: ; pc 0x1869CE +org $B0E9CE : RoomHeader_0121: ; pc 0x1869CE db $00, $1E, $11, $05, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 -org $30E9DC : RoomHeader_0122: ; pc 0x1869DC +org $B0E9DC : RoomHeader_0122: ; pc 0x1869DC db $00, $1E, $11, $05, $00, $00, $00, $00, $07, $14, $05, $00, $00, $00 -org $30E9EA : RoomHeader_0123: ; pc 0x1869EA +org $B0E9EA : RoomHeader_0123: ; pc 0x1869EA db $00, $07, $06, $28, $00, $03, $00, $00, $07, $06, $28, $00, $00, $00 -org $30E9F8 : RoomHeader_0124: ; pc 0x1869F8 +org $B0E9F8 : RoomHeader_0124: ; pc 0x1869F8 db $00, $07, $06, $28, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA06 : RoomHeader_0125: ; pc 0x186A06 +org $B0EA06 : RoomHeader_0125: ; pc 0x186A06 db $00, $07, $06, $28, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA14 : RoomHeader_0126: ; pc 0x186A14 +org $B0EA14 : RoomHeader_0126: ; pc 0x186A14 db $00, $07, $06, $28, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA22 : RoomHeader_0127: ; pc 0x186A22 +org $B0EA22 : RoomHeader_0127: ; pc 0x186A22 db $00, $20, $06, $2A, $00, $00, $00, $00, $05, $03, $05, $00, $00, $00 -org $30EA30 : RoomHeader_0128: ; pc 0x186A30 +org $B0EA30 : RoomHeader_0128: ; pc 0x186A30 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA3E : RoomHeader_0129: ; pc 0x186A3E +org $B0EA3E : RoomHeader_0129: ; pc 0x186A3E db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA4C : RoomHeader_012A: ; pc 0x186A4C +org $B0EA4C : RoomHeader_012A: ; pc 0x186A4C db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA5A : RoomHeader_012B: ; pc 0x186A5A +org $B0EA5A : RoomHeader_012B: ; pc 0x186A5A db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA68 : RoomHeader_012C: ; pc 0x186A68 +org $B0EA68 : RoomHeader_012C: ; pc 0x186A68 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA76 : RoomHeader_012D: ; pc 0x186A76 +org $B0EA76 : RoomHeader_012D: ; pc 0x186A76 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -org $30EA84 : RoomHeader_012E: ; pc 0x186A84 +org $B0EA84 : RoomHeader_012E: ; pc 0x186A84 db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ;-------------------------------------------------------------------------------- ; 0x186C00 - 186FFE (unused) ;-------------------------------------------------------------------------------- -org $30EFFF ; PC 0x186FFF -BallNChainDungeon: -db #$02 +org $B0EFFF ; PC 0x186FFF +BallNChainDungeon: ; Dungeon ID where ball n chain guard is located. Write +db $02 ; $FF to count ball and chain item for collection stats. -org $30F000 ; PC 0x187000-0x18700F +org $B0F000 ; PC 0x187000-0x18700F CompassTotalsROM: db $08, $08, $06, $06, $02, $0A, $0E, $08, $08, $08, $06, $08, $0C, $1B, $00, $00 -org $30F010 +org $B0F010 ChestKeys: ; PC 0x187010-0x18701F db $01, $01, $00, $01, $02, $01, $06, $03, $03, $02, $01, $01, $04, $04, $00, $00 +org $B0F020 +HUDHeartColors: ; PC 0x187020 +.index ; $00 = Red | $01 = Blue | $02 = Green | $03 = Yellow +dw #$0000 +.masks_game_hud ; PC 0x187022 +dw #$0400 ; Red +dw #$0C00 ; Blue +dw #$1C00 ; Green +dw #$0800 ; Yellow +.masks_file_select ; PC 0x18702A +dw #$0400 ; Red +dw #$0C00 ; Blue +dw #$1800 ; Green +dw #$0800 ; Yellow + +org $B0F032 ; PC 0x187032 +RomSpeed: +db $01 ; $01 = FastROM (default) | $00 = SlowROM + +org $B0F033 ; PC 0x187033 + ;-------------------------------------------------------------------------------- -; 0x187010 - 187FFF (unused) +; 0x187033 - 187FFF (unused) ;-------------------------------------------------------------------------------- - - - +;-------------------------------------------------------------------------------- +; Overworld Map Tables +;-------------------------------------------------------------------------------- +org $8ABDF6 +WorldMapIcon_posx_vanilla: +dw $0F31 ; prize1 +dw $08D0 ; prize2 +dw $0108 +dw $0F40 + +dw $0082 +dw $0F11 +dw $01D0 +dw $0100 + +dw $0CA0 +dw $0759 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $8ABE16 +WorldMapIcon_posy_vanilla: +dw $0620 ; prize1 +dw $0080 ; prize2 +dw $0D70 +dw $0620 + +dw $00B0 +dw $0103 +dw $0780 +dw $0CA0 + +dw $0DA0 +dw $0ED0 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $8ABE36 +WorldMapIcon_posx_located: +dw $FF00 ; prize1 +dw $FF00 ; prize2 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $8ABE56 +WorldMapIcon_posy_located: +dw $FF00 ; prize1 +dw $FF00 ; prize2 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FF00 +dw $FF00 +dw $FF00 + +dw $FF00 +dw $FFFF ; reserved - not used +dw $FFFF +dw $FFFF + +org $8ABE76 +WorldMapIcon_tile: +db $38, $62 ; green pendant ; Eastern Palace +db $32, $60 ; red pendant ; Hera +db $34, $60 ; blue pendant ; Desert +db $34, $64 ; crystal ; PoD + +db $34, $64 ; crystal ; Skull Woods +db $34, $64 ; crystal ; Turtle Rock +db $34, $64 ; crystal ; Thieves Town +db $34, $64 ; crystal ; Misery Mire + +db $34, $64 ; crystal ; Ice Palace +db $34, $64 ; crystal ; Swamp Palace +db $32, $66 ; skull looking thing +db $00, $00 ; red x + +db $00, $00 ; red x +db $00, $00 ; unused red x's +db $00, $00 +db $00, $00 + +org $8ABE96 +CompassExists: +; dw $37FC ; todo: convert to two bytes with masks? so much extra code... +; eastern hera desert pod skull trock thieves mire ice swamp gt at escape +db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00, $00 + +; 0 = light world, 1 = dark world +org $8ABEA6 +WorldCompassMask: +; eastern desert hera pod skull trock thieves mire ice swamp gt at escape x1 x2 x3 +db $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00, $00 + +; eastern desert hera pod skull trock thieves mire ice swamp gt at escape +MC_DungeonIdsForPrize: +db $02, $0A, $03, $06, $08, $0C, $0B, $07, $09, $05, $00, $04, $01 +MC_SRAM_Offsets: +db $01, $00, $01, $01, $00, $00, $00, $01, $00, $01, $00, $01, $01 +MC_Masks: +; EP TH DP PD SK TR TT MM +db $20, $20, $10, $02, $80, $08, $10, $01, $40, $04, $04, $08, $40 diff --git a/tablets.asm b/tablets.asm index 2eecce3..3ab31d5 100644 --- a/tablets.asm +++ b/tablets.asm @@ -30,25 +30,22 @@ RTS ;-------------------------------------------------------------------------------- SpawnTabletItem: JSL.l LoadOutdoorValue - PHA - JSL.l PrepDynamicTile + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong + PHA + LDA.b #$EB : STA.l MiniGameTime + JSL Sprite_SpawnDynamically + PLA + STA.w SpriteID,Y + TYX + JSL.l PrepDynamicTile_loot_resolved - JSL.l GetSpriteID - - LDA.b #$EB - STA.l MiniGameTime - JSL Sprite_SpawnDynamically - - PLA : STA.w SpriteItemType, Y ; Store item type - LDA.b LinkPosX : STA.w SpritePosXLow, Y - LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y - - LDA.b LinkPosY : STA.w SpritePosYLow, Y - LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y - - LDA.b #$00 : STA.w SpriteLayer, Y - - LDA.b #$7F : STA.w SpriteZCoord, Y ; spawn WAY up high + LDA.b LinkPosX : STA.w SpritePosXLow, Y + LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y + LDA.b LinkPosY : STA.w SpritePosYLow, Y + LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y + LDA.b #$00 : STA.w SpriteLayer, Y + LDA.b #$7F : STA.w SpriteZCoord, Y ; spawn WAY up high RTL ;-------------------------------------------------------------------------------- MaybeUnlockTabletAnimation: @@ -92,7 +89,7 @@ IsMedallion: RTL ;-------------------------------------------------------------------------------- LoadNarrowObject: - LDA.l AddReceivedItemExpanded_wide_item_flag, X : STA.b ($92), Y ; AddReceiveItem.wide_item_flag? + LDA.l SpriteProperties_standing_width, X : STA.b ($92), Y ; AddReceiveItem.wide_item_flag? RTL ;-------------------------------------------------------------------------------- CheckTabletItem: diff --git a/textrenderer.asm b/textrenderer.asm index c053dd2..0c2be48 100644 --- a/textrenderer.asm +++ b/textrenderer.asm @@ -1,6 +1,6 @@ RenderCharSetColorExtended_init: stz.b Scrap0C - jsl $00d84e + jsl Attract_DecompressStoryGfx rtl RenderCharSetColorExtended_close: @@ -26,9 +26,7 @@ RenderCharSetColorExtended: RenderCharToMapExtended: phx : tya : asl #2 : tax - lda.l FontProperties, x - and.w #$0001 - bne .uncompressed + lda.l FontProperties, x : bit.w #$0001 : bne .uncompressed .compressed plx lda.w #$0000 @@ -104,9 +102,7 @@ RenderCharThinTable: RenderCharExtended: pha asl : asl : tax - lda.l FontProperties, x - and.w #$00ff - bne .renderUncompressed + lda.l FontProperties, x : and.w #$00ff : bne .renderUncompressed .renderOriginal pla : asl : tax : asl : adc.b Scrap0E @@ -209,39 +205,39 @@ FontProperties: dw $0000, $0000 ; 2E dw $0000, $0000 ; 2F - dw $8001, $0400 ; 30 ; a - dw $8001, $0410 ; 31 - dw $8001, $0420 ; 32 - dw $8001, $0430 ; 33 - dw $8001, $0440 ; 34 - dw $8001, $0450 ; 35 - dw $8001, $0460 ; 36 - dw $8001, $0470 ; 37 - dw $8001, $0480 ; 38 - dw $8001, $0490 ; 39 - dw $8001, $04A0 ; 3A - dw $8001, $04B0 ; 3B - dw $8001, $04C0 ; 3C - dw $8001, $04D0 ; 3D - dw $8001, $04E0 ; 3E - dw $8001, $04F0 ; 3F + dw $0000, $0000 ; 30 + dw $0000, $0000 ; 31 + dw $0000, $0000 ; 32 + dw $0000, $0000 ; 33 + dw $0000, $0000 ; 34 + dw $0000, $0000 ; 35 + dw $0000, $0000 ; 36 + dw $0000, $0000 ; 37 + dw $0000, $0000 ; 38 + dw $0000, $0000 ; 39 + dw $0000, $0000 ; 3A + dw $0000, $0000 ; 3B + dw $0000, $0000 ; 3C + dw $0000, $0000 ; 3D + dw $0000, $0000 ; 3E + dw $0000, $0000 ; 3F - dw $8001, $0600 ; 40 - dw $8001, $0610 ; 41 - dw $8001, $0620 ; 42 - dw $8001, $0630 ; 43 - dw $8001, $0640 ; 44 - dw $8001, $0650 ; 45 - dw $8001, $0660 ; 46 - dw $8001, $0670 ; 47 - dw $8001, $0680 ; 48 - dw $8001, $0690 ; 49 ; z - dw $8001, $06F0 ; 4A ; : - dw $8001, $0A90 ; 4B ; @ (thin) - dw $8001, $0AA0 ; 4C ; # (thin) - dw $0000, $0000 ; 4D - dw $0000, $0000 ; 4E - dw $8001, $0EF0 ; 4F ; + dw $0000, $0000 ; 40 + dw $0000, $0000 ; 41 + dw $0000, $0000 ; 42 + dw $0000, $0000 ; 43 + dw $0000, $0000 ; 44 + dw $0000, $0000 ; 45 + dw $0000, $0000 ; 46 + dw $0000, $0000 ; 47 + dw $0000, $0000 ; 48 + dw $0000, $0000 ; 49 + dw $0000, $0000 ; 4A + dw $0000, $0000 ; 4B + dw $0000, $0000 ; 4C + dw $0000, $0000 ; 4D + dw $0000, $0000 ; 4E + dw $8001, $0DF0 ; 4F ; dw $0000, $0000 ; 50 dw $0000, $0000 ; 51 @@ -318,15 +314,15 @@ FontProperties: dw $0000, $0000 ; 94 dw $0000, $0000 ; 95 dw $0000, $0000 ; 96 - dw $0000, $0000 ; 97 - dw $0000, $0000 ; 98 - dw $0000, $0000 ; 99 - dw $0000, $0000 ; 9A - dw $0000, $0000 ; 9B - dw $0000, $0000 ; 9C - dw $0000, $0000 ; 9D - dw $0000, $0000 ; 9E - dw $0000, $0000 ; 9F + dw $8001, $0AD0 ; 97 ; / + dw $8001, $0AE0 ; 98 ; • + dw $8001, $02A0 ; 99 ; Cursor |> + dw $0000, $0000 ; 9A ; smiley lookin JP char + dw $8001, $06A0 ; 9B ; Link face left + dw $8001, $06B0 ; 9C ; Link face right + dw $8001, $06E0 ; 9D ; ' + dw $8001, $0AF0 ; 9E ; " + dw $8001, $02E0 ; 9F ; ellipsis ... dw $8001, $0800 ; A0 ; 0 dw $8001, $0810 ; A1 @@ -372,44 +368,44 @@ FontProperties: dw $8001, $06C0 ; C7 ; ! dw $8001, $02D0 ; C8 ; , dw $8001, $02B0 ; C9 ; - - dw $8000, $0000 ; CA - dw $8000, $0000 ; CB - dw $8000, $02E0 ; CC ; ... + dw $8000, $0000 ; CA ; 🡄" + dw $8000, $0000 ; CB ; 🡆 + dw $0000, $0000 ; CC ; Blank char dw $8001, $02C0 ; CD ; . dw $8001, $02F0 ; CE ; ~ - dw $8000, $0000 ; CF + dw $8000, $0000 ; CF ; - dw $0000, $0000 ; D0 - dw $0000, $0000 ; D1 - dw $8001, $06a0 ; D2 ; Link face left - dw $8001, $06b0 ; D3 ; Link face right - dw $0000, $0000 ; D4 - dw $0000, $0000 ; D5 - dw $0000, $0000 ; D6 - dw $0000, $0000 ; D7 - dw $8001, $06E0 ; D8 ; ' - dw $0000, $0000 ; D9 - dw $0000, $0000 ; DA - dw $0000, $0000 ; DB - dw $0000, $0000 ; DC - dw $0000, $0000 ; DD - dw $0000, $0000 ; DE - dw $0000, $0000 ; DF + dw $8001, $0400 ; D0 ; a + dw $8001, $0410 ; D1 + dw $8001, $0420 ; D2 + dw $8001, $0430 ; D3 + dw $8001, $0440 ; D4 + dw $8001, $0450 ; D5 + dw $8001, $0460 ; D6 + dw $8001, $0470 ; D7 + dw $8001, $0480 ; D8 + dw $8001, $0490 ; D9 + dw $8001, $04A0 ; DA + dw $8001, $04B0 ; DB + dw $8001, $04C0 ; DC + dw $8001, $04D0 ; DD + dw $8001, $04E0 ; DE + dw $8001, $04F0 ; DF ; p - dw $0000, $0000 ; E0 - dw $0000, $0000 ; E1 - dw $0000, $0000 ; E2 - dw $0000, $0000 ; E3 - dw $8001, $02A0 ; E4 ; Cursor |> - dw $0000, $0000 ; E5 - dw $0000, $0000 ; E6 - dw $0000, $0000 ; E7 - dw $0000, $0000 ; E8 - dw $0000, $0000 ; E9 - dw $0000, $0000 ; EA - dw $0000, $0000 ; EB - dw $0000, $0000 ; EC - dw $0000, $0000 ; ED + dw $8001, $0600 ; E0 ; q + dw $8001, $0610 ; E1 + dw $8001, $0620 ; E2 + dw $8001, $0630 ; E3 + dw $8001, $0640 ; E4 + dw $8001, $0650 ; E5 + dw $8001, $0660 ; E6 + dw $8001, $0670 ; E7 + dw $8001, $0680 ; E8 + dw $8001, $0690 ; E9 ; z + dw $8001, $0A80 ; EA ; : + dw $8001, $0A90 ; EB ; @ (thin) + dw $8001, $0AA0 ; EC ; # (thin) + dw $8001, $0A00 ; ED ; _ dw $0000, $0000 ; EE dw $0000, $0000 ; EF @@ -428,4 +424,4 @@ FontProperties: dw $0000, $0000 ; FC dw $0000, $0000 ; FD dw $0000, $0000 ; FE - dw $8001, $0EF0 ; FF ; + dw $8001, $0DF0 ; FF ; diff --git a/timer.asm b/timer.asm index 9eb4ac8..db06c12 100644 --- a/timer.asm +++ b/timer.asm @@ -110,22 +110,23 @@ dw #$003C, #$0000 dw #$FFFF, #$7FFF ;-------------------------------------------------------------------------------- DrawChallengeTimer: - LDA.l OHKOFlag : AND.w #$00FF : BEQ + - LDA.w #$2807 : STA.l HUDTileMapBuffer+$90 - LDA.w #$280A : STA.l HUDTileMapBuffer+$92 - LDA.w #$280B : STA.l HUDTileMapBuffer+$94 - LDA.w #$280C : STA.l HUDTileMapBuffer+$96 - RTL - + - LDA.w #$247F : STA.l HUDTileMapBuffer+$90 - STA.l HUDTileMapBuffer+$92 - STA.l HUDTileMapBuffer+$94 - STA.l HUDTileMapBuffer+$96 - ++ + JSR.w CheckOHKO : BCC ++ + AND.w #$00FF : BEQ + + LDA.w #$2807 : STA.l HUDTileMapBuffer+$90 + LDA.w #$280A : STA.l HUDTileMapBuffer+$92 + LDA.w #$280B : STA.l HUDTileMapBuffer+$94 + LDA.w #$280C : STA.l HUDTileMapBuffer+$96 + RTL + + + LDA.w #$247F : STA.l HUDTileMapBuffer+$90 + STA.l HUDTileMapBuffer+$92 + STA.l HUDTileMapBuffer+$94 + STA.l HUDTileMapBuffer+$96 + ++ - LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer - LDA.w #$2807 : STA.l HUDTileMapBuffer+$92 - LDA.l ClockStatus : AND.w #$0002 : BEQ + ; DNF / OKHO + LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer + LDA.w #$2807 : STA.l HUDTileMapBuffer+$92 + LDA.l ClockStatus : AND.w #$0002 : BEQ + ; DNF / OKHO LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF LDA.w #$2808 : STA.l HUDTileMapBuffer+$94 @@ -171,3 +172,16 @@ OHKOTimer: LDA.l CurrentHealth RTL ;-------------------------------------------------------------------------------- +CheckOHKO: + SEP #$20 + LDA.l OHKOFlag : CMP.l OHKOCached : BNE .change + REP #$20 + CLC + RTS + .change + STA.l OHKOCached + INC.w UpdateHUD + REP #$20 + SEC +RTS +;-------------------------------------------------------------------------------- diff --git a/utilities.asm b/utilities.asm index 0ac8f41..cb87a38 100644 --- a/utilities.asm +++ b/utilities.asm @@ -6,156 +6,25 @@ ; out: A - Sprite GFX ID ;-------------------------------------------------------------------------------- GetSpriteID: - JSR AttemptItemSubstitution - CMP.b #$16 : BEQ .bottle ; Bottle - CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle - CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle - CMP.b #$2D : BEQ .bottle ; Blue Potion w/bottle - CMP.b #$3C : BEQ .bottle ; Bee w/bottle - CMP.b #$3D : BEQ .bottle ; Fairy w/bottle - CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle + JSL.l AttemptItemSubstitution + JSR.w ResolveLootID CMP.b #$6D : BEQ .server_F0 ; Server Request F0 CMP.b #$6E : BEQ .server_F1 ; Server Request F1 CMP.b #$6F : BEQ .server_F2 ; Server Request F2 BRA .normal - .bottle - PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT + - PLA : LDA.l BottleLimitReplacement - JMP GetSpriteID - + - PLA : BRA .normal .server_F0 - JSL.l ItemVisualServiceRequest_F0 - BRA .normal + JSL.l ItemVisualServiceRequest_F0 + BRA .normal .server_F1 - JSL.l ItemVisualServiceRequest_F1 - BRA .normal + JSL.l ItemVisualServiceRequest_F1 + BRA .normal .server_F2 - JSL.l ItemVisualServiceRequest_F2 + JSL.l ItemVisualServiceRequest_F2 .normal - PHX - PHB : PHK : PLB - ;-------- - TAX : LDA.l .gfxSlots, X ; look up item gfx - PLB : PLX - CMP.b #$F8 : !BGE .specialHandling + TAX : LDA.l ItemReceipts_graphics, X ; look up item gfx + PLX 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 - ++ -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 - - 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, $43, $0C, $38, $39, $3A, $F9, $3C - ; db $2C, $06, $0C, $38, $FF, $FF, $FF, $FF - - ;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 - - ;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 - - ;8x - db $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16, $16 ; Free Compass - - ;9x - db $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22 ; Free Big Key - - ;Ax - db $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F ; Free Small Key - - ;Bx - db $49 ; reserved for bee traps - db $13, $13, $13, $13, $13 ; reserved for bonk shuffle - db $13 ; Bomb Upgrade - db $07 ; Cane Upgrade - db $27 ; Bug Net Upgrade - db $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 -} -;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; GetSpritePalette @@ -163,281 +32,70 @@ RTL ; out: A - Palette ;-------------------------------------------------------------------------------- GetSpritePalette: - JSR AttemptItemSubstitution - CMP.b #$16 : BEQ .bottle ; Bottle - CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle - CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle - CMP.b #$2D : BEQ .bottle ; Blue Potion w/bottle - CMP.b #$3C : BEQ .bottle ; Bee w/bottle - CMP.b #$3D : BEQ .bottle ; Fairy w/bottle - CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle - BRA .notBottle - .bottle - PHA : JSR.w CountBottles : CMP.l BottleLimit : !BLT + - PLA : LDA.l BottleLimitReplacement - JMP GetSpritePalette - + - PLA : .notBottle - PHX - PHB : PHK : PLB - ;-------- - TAX : LDA.l GfxPalettes, X ; look up item gfx - PLB : PLX - CMP.b #$F6 : !BGE .specialHandling + JSL.l AttemptItemSubstitution + JSR.w ResolveLootID + .resolved + TAX + LDA.l SpriteProperties_standing_palette, X : BIT #$80 : BNE .load_palette + ASL 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 #$F7 : BNE ++ ; Progressive Bombs - LDA SpecialWeaponLevel - CMP.b #$00 : BNE + ; No Bombs - LDA.b #$08 : RTL - + : CMP.b #$01 : BNE + ; L1 Bombs - LDA.b #$04 : RTL - + : CMP.b #$02 : BNE + ; L2 Bombs - LDA.b #$02 : RTL - + ; Everything Else - LDA.b #$0A : 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 - ++ + .load_palette + JSL.l LoadItemPalette + ASL RTL - -;DATA - Loot Identifier to Sprite Palette -{ -GfxPalettes: - db $00, $04, $02, $08, $04, $02, $08, $02 - db $04, $02, $02, $02, $04, $04, $04, $08 - - db $08, $08, $02, $02, $04, $02, $02, $02 - db $04, $02, $04, $02, $08, $08, $04, $02 - - db $0A, $02, $04, $02, $04, $04, $00, $04 - db $04, $08, $02, $02, $08, $04, $02, $08 - - db $04, $04, $08, $08, $08, $04, $02, $08 - db $02, $04, $08, $02, $04, $04, $02, $02 - - db $08, $08, $02, $04, $04, $08, $08, $08 - db $04, $04, $04, $02, $08, $08, $08, $08 - ; db $04, $0A, $04, $02, $FF, $FF, $FF, $FF - - db $04 ; Safe Master Sword - db $08, $08, $08, $08 ; Bomb & Arrow +5/+10 - db $04, $00, $00 ; Programmable Items 1-3 - db $02 ; Upgrade-Only Silver Arrows - db $06 ; 1 Rupoor - db $02 ; Null Item - db $02, $04, $08 ; Red, Blue & Green Clocks - db $FD, $FE, $FF, $FC ; Progressive Sword, Shield, Armor & Gloves - db $FA, $FB ; RNG Single & Multi - db $F8, $F8 ; Progressive Bow - db $00, $00, $00, $00 ; Unused - db $08, $08, $08 ; Goal Item Single, Multi & Alt Multi - db $04, $04, $04 ; Server Request F0, F1, F2 - - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Map - db $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 ; Free Compass - ;db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; *EVENT* - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Big Key - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Free Small Key - db $08 ; reserved for bee traps - db $08, $08, $08, $08, $08 ; reserved for bonk shuffle - db $F7 ; Bomb Upgrade - db $0A ; Cane Upgrade - db $02 ; Bug Net Upgrade - db $08, $08, $08, $08, $08, $08, $08 ; Unused - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused - db $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08, $08 ; Unused -} -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; IsNarrowSprite -; in: A - Loot ID -; out: Carry - 0 = Full, 1 = Narrow -;-------------------------------------------------------------------------------- -IsNarrowSprite: - PHA : PHX - PHB : PHK : PLB - JSR AttemptItemSubstitution - ;-------- - CMP.b #$16 : BEQ .bottle ; Bottle - CMP.b #$2B : BEQ .bottle ; Red Potion w/bottle - CMP.b #$2C : BEQ .bottle ; Green Potion w/bottle - CMP.b #$2D : BEQ .bottle ; Blue Potion w/bottle - CMP.b #$3C : BEQ .bottle ; Bee w/bottle - CMP.b #$3D : BEQ .bottle ; Fairy w/bottle - CMP.b #$48 : BEQ .bottle ; Gold Bee w/bottle - BRA .notBottle - .bottle - JSR.w CountBottles : CMP.l BottleLimit : !BLT + - LDA.l BottleLimitReplacement - JSL.l IsNarrowSprite - JMP .done - + : JMP .continue - .notBottle - CMP.b #$5E : BNE ++ ; Progressive Sword - LDA.l HighestSword : CMP.l ProgressiveSwordLimit : !BLT + ; Progressive Sword Limit - LDA.l ProgressiveSwordReplacement - JSL.l IsNarrowSprite - JMP .done - + : JMP .continue - ++ CMP.b #$5F : BNE ++ ; Progressive Shield - LDA.l HighestShield : BNE + : JMP .done ; No Shield - + : CMP.l ProgressiveShieldLimit : !BLT .continue - LDA.l ProgressiveShieldReplacement - JSL.l IsNarrowSprite - JMP .done - ++ CMP.b #$60 : BNE ++ ; Progressive Armor - LDA.l HighestMail : CMP.l ProgressiveArmorLimit : !BLT .continue - LDA.l ProgressiveArmorReplacement - JSL.l IsNarrowSprite - JMP .done - + - ++ CMP.b #$62 : BNE ++ ; RNG Item (Single) - JSL.l GetRNGItemSingle : JMP .continue - ++ CMP.b #$63 : BNE ++ ; RNG Item (Multi) - JSL.l GetRNGItemMulti - ++ CMP.b #$64 : BEQ + ; Progressive Bow - CMP.b #$65 : BNE .continue ; Progressive Bow (alt) - + : LDA.l BowEquipment : INC : LSR - CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement - JSL.l IsNarrowSprite - JMP .done - .continue - ;-------- - - LDX.b #$00 ; set index counter to 0 - ;---- - - - CPX.b #$2A : !BGE .false ; finish if we've done the whole list - CMP.l .smallSprites, X : BNE + ; skip to next if we don't match - ;-- - SEC ; set true state - BRA .done ; we're done - ;-- - + - INX ; increment index - BRA - ; go back to beginning of loop - ;---- - .false - CLC - .done - PLB : PLX : PLA -RTL - -;DATA - Half-Size Sprite Markers -{ - .smallSprites - db $04, $07, $08, $09, $0A, $0B, $0C, $13 - db $15, $18, $24, $2A, $34, $35, $36, $42 - db $43, $45, $59, $A0, $A1, $A2, $A3, $A4 - db $A5, $A6, $A7, $A8, $A9, $AA, $AB, $AC - db $AD, $AE, $AF, $B7, $FF, $FF, $FF, $FF - db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -} -;-------------------------------------------------------------------------------- - ;-------------------------------------------------------------------------------- ; PrepDynamicTile -; in: A - Loot ID +; in: SpriteID,X - Loot ID ;-------------------------------------------------------------------------------- 20/8477 PrepDynamicTile: - PHA : PHX : PHY + PHX : PHY : PHB + JSR.w ResolveLootID + - JSR.w LoadDynamicTileOAMTable - JSL.l GetSpriteID ; convert loot id to sprite id - JSL.l GetAnimatedSpriteTile_variable - PLY : PLX : PLA + JSL TransferItemReceiptToBuffer_using_ReceiptID + SEP #$30 + PLB : PLY : PLX RTL + .loot_resolved + PHX : PHY : PHB + BRA - ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; LoadDynamicTileOAMTable -; in: A - Loot ID +; in: SpriteID,X - Loot ID +; out: A - Loot ID ;-------------------------------------------------------------------------------- 20/847B LoadDynamicTileOAMTable: - PHA : PHP - - PHA - REP #$20 ; set 16-bit accumulator - LDA.w #$0000 : STA.l SpriteOAM - STA.l SpriteOAM+2 - LDA.w #$0200 : STA.l SpriteOAM+6 - SEP #$20 ; set 8-bit accumulator - LDA.b #$24 : STA.l SpriteOAM+4 - - LDA.b $01,s - - JSL.l GetSpritePalette - STA.l SpriteOAM+5 : STA.l SpriteOAM+13 - PLA - JSL.l IsNarrowSprite : BCS .narrow + PHP + REP #$20 + LDA.w #$0000 : STA.l SpriteOAM : STA.l SpriteOAM+2 + LDA.w #$0200 : STA.l SpriteOAM+6 + SEP #$20 + LDA.b #$24 : STA.l SpriteOAM+4 + LDA.w SpriteID,X + JSL.l GetSpritePalette_resolved + STA.l SpriteOAM+5 : STA.l SpriteOAM+13 + PHX + LDA.l SpriteProperties_standing_width,X : BEQ .narrow BRA .done .narrow - REP #$20 ; set 16-bit accumulator - LDA.w #$0000 : STA.l SpriteOAM+7 - STA.l SpriteOAM+14 + REP #$20 + LDA.w #$0400 : STA.l SpriteOAM+7 : STA.l SpriteOAM+14 + LDA.w #$0000 : STA.l SpriteOAM+14 LDA.w #$0800 : STA.l SpriteOAM+9 LDA.w #$3400 : STA.l SpriteOAM+11 - .done - PLP : PLA -RTS -;-------------------------------------------------------------------------------- + SEP #$20 + LDA.b #$04 : STA.l SpriteOAM + .done + TXA + PLX + PLP +RTS ;-------------------------------------------------------------------------------- ; DrawDynamicTile ; in: A - Loot ID @@ -446,15 +104,19 @@ RTS ; This wastes two OAM slots if you don't want a shadow - fix later - I wrote "fix later" over a year ago and it's still not fixed (Aug 6, 2017) - lol (May 25th, 2019) ;-------------------------------------------------------------------------------- 2084B8 DrawDynamicTile: - JSL.l IsNarrowSprite : BCS .narrow + PHX + TAX + LDA.l SpriteProperties_standing_width,X : BEQ .narrow .full + PLX LDA.b #$01 : STA.b Scrap06 LDA.b #$0C : JSL.l OAM_AllocateFromRegionC LDA.b #$02 : PHA BRA .draw .narrow + PLX LDA.b #$02 : STA.b Scrap06 LDA.b #$10 : JSL.l OAM_AllocateFromRegionC LDA.b #$03 : PHA @@ -464,9 +126,9 @@ DrawDynamicTile: LDA.b #SpriteOAM>>8 : STA.b Scrap09 STZ.b Scrap07 LDA.b #$7E : PHB : PHA : PLB - LDA.b #$01 : STA.l SpriteSkipEOR - JSL Sprite_DrawMultiple_quantity_preset - LDA.b #$00 : STA.l SpriteSkipEOR + LDA.b #$01 : STA.l SpriteSkipEOR + JSL Sprite_DrawMultiple_quantity_preset + LDA.b #$00 : STA.l SpriteSkipEOR PLB LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr ; leave the pointer in the right spot to draw the shadow, if desired @@ -475,14 +137,18 @@ DrawDynamicTile: RTL ;-------------------------------------------------------------------------------- DrawDynamicTileNoShadow: - JSL.l IsNarrowSprite : BCS .narrow + PHX + TAX + LDA.l SpriteProperties_standing_width,X : BEQ .narrow .full + PLX LDA.b #$01 : STA.b Scrap06 LDA.b #$04 : JSL.l OAM_AllocateFromRegionC BRA .draw .narrow + PLX LDA.b #$02 : STA.b Scrap06 LDA.b #$08 : JSL.l OAM_AllocateFromRegionC @@ -491,9 +157,9 @@ DrawDynamicTileNoShadow: LDA.b #SpriteOAM>>8 : STA.b Scrap09 STZ.b Scrap07 LDA.b #$7E : PHB : PHA : PLB - LDA.b #$01 : STA.l SpriteSkipEOR - JSL Sprite_DrawMultiple_quantity_preset - LDA.l Bob : BNE + : LDA.b #$00 : STA.l SpriteSkipEOR : + ; Bob fix is conditional + LDA.b #$01 : STA.l SpriteSkipEOR + JSL Sprite_DrawMultiple_quantity_preset + LDA.l Bob : BNE + : LDA.b #$00 : STA.l SpriteSkipEOR : + ; Bob fix is conditional PLB LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr @@ -523,13 +189,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 @@ -537,7 +203,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 @@ -580,106 +246,10 @@ 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 -; in: A(b) - Byte to count bits in -; out: A(b) - sum of bits -; caller is responsible for setting 8-bit mode and preserving X and Y -;-------------------------------------------------------------------------------- -;CountBits: -; PHX -; TAX ; Save a copy of value -; LSR #4 ; Shift down hi nybble, Leave <3> in C -; PHA ; And save <7:4> in Stack -; TXA ; Recover value -; AND.b #$07 ; Put out <2:0> in X -; TAX ; And save in X -; LDA.l NybbleBitCounts, X ; Fetch count for <2:0> -; PLX ; get <7:4> -; ADC.l NybbleBitCounts, X ; Add count for S & C -; PLX -;RTL - -; Look up table of bit counts in the values $00-$0F -NybbleBitCounts: -db #00, #01, #01, #02, #01, #02, #02, #03, #01, #02, #02, #03, #02, #03, #03, #04 - -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; HexToDec -; in: A(w) - Word to Convert -; out: HexToDecDigit1 - HexToDecDigit5 (high - low) -;-------------------------------------------------------------------------------- -;HexToDec: -; PHA -; PHA -; LDA.w #$9090 -; STA.l HexToDecDigit1 : STA.l HexToDecDigit3 : STA.l HexToDecDigit4 ; clear digit storage -; PLA -; - -; CMP.w #10000 : !BLT + -; PHA : SEP #$20 : LDA.l HexToDecDigit1 : INC : STA.l HexToDecDigit1 : REP #$20 : PLA -; !SUB.w #10000 : BRA - -; + - -; CMP.w #1000 : !BLT + -; PHA : SEP #$20 : LDA.l HexToDecDigit2 : INC : STA.l HexToDecDigit2 : REP #$20 : PLA -; !SUB.w #1000 : BRA - -; + - -; CMP.w #100 : !BLT + -; PHA : SEP #$20 : LDA.l HexToDecDigit3 : INC : STA.l HexToDecDigit3 : REP #$20 : PLA -; !SUB.w #100 : BRA - -; + - -; CMP.w #10 : !BLT + -; PHA : SEP #$20 : LDA.l HexToDecDigit4 : INC : STA.l HexToDecDigit4 : REP #$20 : PLA -; !SUB.w #10 : BRA - -; + - -; CMP.w #1 : !BLT + -; PHA : SEP #$20 : LDA.l HexToDecDigit5 : INC : STA.l HexToDecDigit5 : REP #$20 : PLA -; !SUB.w #1 : BRA - -; + -; PLA -;RTL -;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; WriteVRAMStripe @@ -708,27 +278,27 @@ RTL ; in: Y(w) - Address of Data to Copy ;-------------------------------------------------------------------------------- WriteVRAMBlock: - PHX - LDX.w GFXStripes ; get pointer - AND.w #$7F : STA.w GFXStripes+2, X : INX #2 ; set destination - PLA : ASL : AND.w #$3FFF : STA.w GFXStripes+2, X : INX #2 ; set length + PHX + LDX.w GFXStripes ; get pointer + AND.w #$7F : STA.w GFXStripes+2, X : INX #2 ; set destination + PLA : ASL : AND.w #$3FFF : STA.w GFXStripes+2, X : INX #2 ; set length - PHX - TYX ; set X to source - PHA - TXA : !ADD #$1002 : TAY ; set Y to dest - PLA - ;A is already the value we need for mvn - MVN $7F7E ; currently we transfer from our buffers in 7F to the vram buffer in 7E + PHX + TYX ; set X to source + PHA + TXA : !ADD #$1002 : TAY ; set Y to dest + PLA + ;A is already the value we need for mvn + MVN $7F7E ; currently we transfer from our buffers in 7F to the vram buffer in 7E - !ADD 1, s ; add the length in A to the stack pointer on the top of the stack - PLX : TAX ; pull and promptly ignore, copying the value we just got over it + !ADD 1, s ; add the length in A to the stack pointer on the top of the stack + PLX : TAX ; pull and promptly ignore, copying the value we just got over it - SEP #$20 ; set 8-bit accumulator - LDA.b #$FF : STA.w GFXStripes+$02, X - STX.w GFXStripes - LDA.b #01 : STA.w NMISTRIPES - REP #$20 ; set 16-bit accumulator + SEP #$20 ; set 8-bit accumulator + LDA.b #$FF : STA.w GFXStripes+$02, X + STX.w GFXStripes + LDA.b #01 : STA.w NMISTRIPES + REP #$20 ; set 16-bit accumulator RTL ;-------------------------------------------------------------------------------- ;Byte 1 byte 2 Byte 3 byte 4 @@ -746,8 +316,142 @@ RTL ;This feature makes it easy to draw the same tile repeatedly. If this bit is set, the length bits should be set to 2 times the number of copies of the tile to upload. (Without subtracting 1!) ;It is followed by a single tile (word). Combining this this with the D bit makes it easy to draw large horizontal or vertical runs of a tile without using much space. Geat for erasing or drawing horizontal or verical box edges. ;================================================================================ -TransferVRAMStripes: - JSL.l TransferNumericStripes - JSL.l DoDungeonMapBossIcon - LDA.b NMISTRIPES : CMP.b #$01 ; What we wrote over + +DynamicDrawCleanup: + PHA + REP #$20 + LDA.w #$F000 + STA.w OAMBuffer + STA.w OAMBuffer+$04 + STA.w OAMBuffer+$08 + STA.w OAMBuffer+$0C + STZ.w OAMBuffer+$02 + STZ.w OAMBuffer+$06 + STZ.w OAMBuffer+$0A + STZ.w OAMBuffer+$0E + SEP #$20 + PLA RTL + +;------------------------------------------------------------------------------ +CheckReceivedItemPropertiesBeforeLoad: + PHX + LDX.w CurrentSpriteSlot + LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite + PLX + LDA.b RoomIndex : BEQ .normalCode + LDA.l RoomFade : BNE .load_palette + .normalCode + LDA.l SpriteProperties_chest_palette,X : BIT #$80 : BNE .load_palette + RTL + .load_palette + JSL.l LoadItemPalette + RTL + .falling_sprite + PLX + LDA.l SpriteProperties_standing_palette,X : BIT #$80 : BNE .load_palette +RTL + +;------------------------------------------------------------------------------ +LoadItemPalette: +; In: X - Loot ID +; Out: A - Sprite palette index + PHX : PHY : PHB + LDA.b #PalettesVanillaBank>>16 : STA.b Scrap0C + PEA $7E00 + PLB : PLB + REP #$30 + + + CPX.w #$00C0 : BNE .not_prog_bombs + LDA.l SpecialWeaponLevel : AND.w #$00FF : BNE + + LDA.w #PalettesVanilla_blue_ice+$0E : BRA .continue ; none + + DEC : BNE + + LDA.w #PalettesVanilla_green_blue_guard+$0E : BRA .continue ; fighter + + DEC : BNE + + LDA.w #PalettesVanilla_blue_ice+$0E : BRA .continue ; master + + DEC : BNE + + LDA.w #PalettesVanilla_red_melon+$0E : BRA .continue ; tempered + + LDA.w #PalettesCustom_golden_bombs : BRA .continue ; gold + +.not_prog_bombs + TXA : ASL : TAX + LDA.l SpriteProperties_palette_addr, X + +.continue + STA.b Scrap0A + + LDY.w #$000E + JSR.w GTTorchCheck : BCS .aux + LDA.w TransparencyFlag : BNE .SP05 + - + LDA.b [Scrap0A], Y + STA.w PaletteBuffer+$0170,Y + DEY #2 + BPL - + LDA.w #$0003 + BRA .done + .SP05 + - + LDA.b [Scrap0A], Y + STA.w PaletteBuffer+$01B0,Y + DEY #2 + BPL - + LDA.w #$0005 + .done + SEP #$30 + PLB : PLY : PLX + INC.b NMICGRAM +RTL + .aux + LDA.w TransparencyFlag : BNE .SP05_aux + - + LDA.b [Scrap0A], Y + STA.w PaletteBufferAux+$0170,Y + DEY #2 + BPL - + LDA.w #$0003 + BRA .done + .SP05_aux + - + LDA.b [Scrap0A], Y + STA.w PaletteBufferAux+$01B0,Y + DEY #2 + BPL - + LDA.w #$0005 + BRA .done + +TransferVRAMStripes: + JSL.l TransferNewNameStripes + JSL.l DoDungeonMapBossIcon + LDA.b NMISTRIPES : CMP.b #$01 ; What we wrote over +RTL + + +ItemReceiptWidthCheck: + PHX + LDX.w CurrentSpriteSlot + LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite + PLX + LDA.l SpriteProperties_chest_width, X + RTL + .falling_sprite + PLX + LDA.l SpriteProperties_standing_width, X +RTL + +GTTorchCheck: + 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 + REP #$30 + PLX +RTS diff --git a/vanillalabels.asm b/vanillalabels.asm index 97887a1..568634c 100644 --- a/vanillalabels.asm +++ b/vanillalabels.asm @@ -1,122 +1,190 @@ -;================================================================================ +;=================================================================================================== ; Vanilla Labels -;================================================================================ +;=================================================================================================== +; EVERY LABEL SHOULD BE IN A FAST ROM BANK +;=================================================================================================== ; Labels for routines in the vanilla portion of the ROM. More or less in sequential ; order. Most of these names came from the MoN US disassembly. But we should ; refer to the JP 1.0 disassembly as that's what the randomizer is based on. -; All routines can be assumed to return long unless otherwise noted. -;================================================================================ +;=================================================================================================== +;--------------------------------------------------------------------------------------------------- +;=================================================================================================== +; Long routines (use JSL) +;=================================================================================================== +Vram_EraseTilemaps_triforce = $808333 +JumpTableLocal = $808781 +JumpTableLong = $80879C +Sound_LoadLightWorldSongBank = $808913 +Sound_LoadLightWorldSongBank_do_load = $80891D +EnableForceBlank = $80893D +DungeonMask = $8098C0 +DecompSwordGfx = $80D308 +DecompShieldGfx = $80D348 +Tagalong_LoadGfx = $80D463 +GetAnimatedSpriteTile = $80D51B +GetAnimatedSpriteTile_variable = $80D52D +Attract_DecompressStoryGfx = $80D84E +InitializeTilesets = $80E1DB +LoadSelectScreenGfx = $80E529 +CopyFontToVRAM = $80E596 +PrepDungeonExit = $80F945 +Mirror_InitHdmaSettings = $80FDEE +Dungeon_LoadRoom = $81873A +Underworld_HandleRoomTags = $81C2FD +Module_PreDungeon = $82821E +Module_PreDungeon_setAmbientSfx = $828296 +Dungeon_SaveRoomData = $82A0A8 +Dungeon_SaveRoomData_justKeys = $82A0BE +Dungeon_SaveRoomQuadrantData = $82B861 +LoadGearPalettes_bunny = $82FD8A +LoadGearPalettes_variable = $82FD95 +Filter_Majorly_Whiten_Color = $82FEAB +MasterSword_InPedestal = $858908 +MasterSword_InPedestal_exit = $85894C +Ancilla_SpawnFallingPrize = $85A51D +Sprite_DrawMultiple = $85DF6C +Sprite_DrawMultiple_quantity_preset = $85DF70 +Sprite_DrawMultiple_player_deferred = $85DF75 +Sprite_ShowSolicitedMessageIfPlayerFacing = $85E1A7 +Sprite_ShowMessageFromPlayerContact = $85E1F0 +Sprite_ShowMessageUnconditional = $85E219 +Sprite_ZeldaLong = $85EC96 +Sprite_EA_HeartContainer = $85EF3F +Sprite_EB_HeartPiece_handle_flags = $85F0C0 +Player_ApplyRumbleToSprites = $8680FA +Sprite_Main = $868328 +Utility_CheckIfHitBoxesOverlapLong = $8683E6 +Sprite_PrepAndDrawSingleLargeLong = $86DBF8 +Sprite_PrepAndDrawSingleSmallLong = $86DC00 +Sprite_DrawShadowLong = $86DC5C +DashKey_Draw = $86DD40 +Sprite_ApplySpeedTowardsPlayerLong = $86EA18 +Sprite_DirectionToFacePlayerLong = $86EAA6 +Sprite_CheckDamageToPlayerSameLayerLong = $86F12F +OAM_AllocateDeferToPlayerLong = $86F86A +Player_HaltDashAttackLong = $8791B3 +Link_ReceiveItem = $87999D +Sprite_CheckIfPlayerPreoccupied = $87F4AA +Sprite_AttemptDamageToPlayerPlusRecoilLong = $86F425 +Ancilla_Main = $888242 +Ancilla_ReceiveItem = $88C3AE +Ancilla_BreakTowerSeal_draw_single_crystal = $88CE93 +Ancilla_BreakTowerSeal_stop_spawning_sparkles = $88CEC3 +BreakTowerSeal_ExecuteSparkles = $88CF59 +Ancilla_SetOam_XY_Long = $88F710 +AddReceivedItem = $8985E2 +AncillaAdd_ItemReceipt_not_crystal = $898605 +AncillaAdd_FallingPrize = $898BAD +AncillaAdd_FallingPrize_not_medallion = $898BD6 +AddWeathervaneExplosion = $898CFD +AddDashTremor = $8993DF +AddAncillaLong = $899D04 +Ancilla_CheckIfAlreadyExistsLong = $899D1A +GiveRupeeGift = $89AD58 +Sprite_SetSpawnedCoords = $89AE64 +OverworldMap_InitGfx = $8ABA4F +OverworldMap_DarkWorldTilemap = $8ABA99 +OverworldMap_LoadSprGfx = $8ABAB9 +NameFile_MakeScreenVisible = $8CD7D1 +InitializeSaveFile = $8CDB3E +InitializeSaveFile_build_checksum = $8CDBC0 +InitializeSaveFile_checksum_done = $8CDBDB +GetRandomInt = $8DBA71 +OAM_AllocateFromRegionA = $8DBA80 +OAM_AllocateFromRegionB = $8DBA84 +OAM_AllocateFromRegionC = $8DBA88 +OAM_AllocateFromRegionD = $8DBA8C +OAM_AllocateFromRegionE = $8DBA90 +OAM_AllocateFromRegionF = $8DBA94 +Sound_SetSfxPanWithPlayerCoords = $8DBB67 +Sound_SetSfx1PanLong = $8DBB6E +Sound_SetSfx2PanLong = $8DBB7C +Sound_SetSfx3PanLong = $8DBB8A +HUD_RefreshIconLong = $8DDB7F +Equipment_UpdateEquippedItemLong = $8DDD32 +BottleMenu_movingOn = $8DE01E +RestoreNormalMenu = $8DE346 +Equipment_SearchForEquippedItemLong = $8DE395 +HUD_RebuildLong = $8DFA78 +HUD_RebuildIndoor_Palace = $8DFA88 +HUD_RebuildLong2 = $8DFA88 +RebuildHUD_update = $8DFAA5 +Messaging_Text = $8EEE10 +AfterDeathCounterOutput = $8E8FD +Overworld_TileAttr = $8FFD94 +Overworld_DrawPersistentMap16 = $9BC97C +Palette_Sword = $9BED03 +Palette_Shield = $9BED29 +Palette_ArmorAndGloves = $9BEDF9 +Palette_Hud = $9BEE52 +Palette_SelectScreen = $9BEF96 +Sprite_NullifyHookshotDrag = $9CF500 +Ancilla_CheckForAvailableSlot = $9CF537 +ShopKeeper_RapidTerminateReceiveItem = $9CFAAA +Filter_MajorWhitenMain = $9DE9B6 +Sprite_SpawnDynamically = $9DF65D +Sprite_SpawnDynamically_arbitrary = $9DF65F +DiggingGameGuy_AttemptPrizeSpawn = $9DFD4B +Sprite_GetEmptyBottleIndex = $9EDE28 +CrystalCutscene_Initialize_skip_palette = $9ECD39 +Sprite_PlayerCantPassThrough = $9EF4E7 +;=================================================================================================== +; Local routines (use JSR) +;=================================================================================================== +LoadBackgroundGraphics = $80E649 +LoadBackgroundGraphics_arbitrary = $80E64D +RoomTag_PrizeTriggerDoor_open = $81C529 +RoomTag_PrizeTriggerDoor_exit = $81C529 +RoomTag_GetHeartForPrize = $81C709 +RoomTag_GetHeartForPrize_spawn_prize = $81C731 +RoomTag_GetHeartForPrize_delete_tag = $81C749 +Chicken_SpawnAvengerChicken = $86A7DB +Link_UseHammer = $879F82 +Link_PerformOpenChest_no_replacement = $87B59F +Sprite_EA_HeartContainer_main = $85EF47 +Ancilla_ExecuteAll = $88832B +Ancilla_ExecuteOne = $88833C +Ancilla22_ItemReceipt_is_pendant = $88C421 +Ancilla22_ItemReceipt_wait_for_music = $88C42B +ItemReceipt_Animate_continue = $88C637 +AncillaDraw_ItemReceipt = $88C6B4 +Ancilla29_MilestoneItemReceipt = $88CAB0 +Ancilla29_MilestoneItemReceipt_skip_crystal_sfx = $88CAE5 +Ancilla29_MilestoneItemReceipt_no_sparkle = $88CB2E +Ancilla_SetOAM_XY = $88F6F3 +Ancilla_AddAncilla = $899CCE +DrawProgressIcons = $8DE9C8 +ItemMenu_DrawEquippedYItem = $8DEB3A +ItemMenu_DrawEquippedYItem_exit = $8DECE6 +ItemMenu_DrawEquipment_dungeonitems = $8DEDCC +DrawEquipment = $8DED29 +DrawEquipment_in_a_dungeon = $8DEDFE +UpdateHUDBuffer_update_item_check_arrows = $8DFB41 +RenderText_DecompressAndDrawSingle = $8EF4FB +DecompressFontGFX = $8EF572 +CopyDecompressedCharToTransferBuffer = $8EF5BC +CopyDecompressedToFullBuffer = $8EF6A8 +Trinexx_FinalPhase = $9DADB5 +Trinexx_PreFinalPhase = $9DB0D2 -UseImplicitRegIndexedLocalJumpTable = $008781 -UseImplicitRegIndexedLongJumpTable = $00879C -Vram_EraseTilemaps_triforce = 008333 -Sound_LoadLightWorldSongBank = $008913 -Sound_LoadLightWorldSongBank_do_load = $00891D -EnableForceBlank = $00893D -SaveGameFile = $00894A ; long -DungeonMask = $0098C0 -DecompSwordGfx = $00D308 -DecompShieldGfx = $00D348 -Tagalong_LoadGfx = $00D463 -GetAnimatedSpriteTile = $00D51B -GetAnimatedSpriteTile_variable = $00D52D -Attract_DecompressStoryGfx = $00D84E -LoadSelectScreenGfx = $00E529 -PrepDungeonExit = $00F945 -Mirror_InitHdmaSettings = $00FDEE -Dungeon_LoadRoom = $01873A -Module_PreDungeon = $02821E -Module_PreDungeon_setAmbientSfx = $028296 -Dungeon_SaveRoomData = $02A0A8 -Dungeon_SaveRoomData_justKeys = $02A0BE -Dungeon_SaveRoomQuadrantData = $02B861 -LoadGearPalettes_bunny = $02FD8A -LoadGearPalettes_variable = $02FD95 -Filter_Majorly_Whiten_Color = $02FEAB -Sprite_SpawnFallingItem = $05A51D -Sprite_DrawMultiple = $05DF6C -Sprite_DrawMultiple_quantity_preset = $05DF70 -Sprite_DrawMultiple_player_deferred = $05DF75 -Sprite_ShowSolicitedMessageIfPlayerFacing = $05E1A7 -Sprite_ShowMessageFromPlayerContact = $05E1F0 -Sprite_ShowMessageUnconditional = $05E219 -Sprite_ZeldaLong = $05EC96 -Sprite_EB_HeartPiece_handle_flags = $05F0C0 -Player_ApplyRumbleToSprites = $0680FA -Utility_CheckIfHitBoxesOverlapLong = $0683E6 -Chicken_SpawnAvengerChicken = $06A7DB ; returns short -Sprite_DrawShadowLong = $06DC5C -DashKey_Draw = $06DD40 -Sprite_PrepAndDrawSingleLargeLong = $06DBF8 -Sprite_PrepAndDrawSingleSmallLong = $06DC00 -Sprite_ApplySpeedTowardsPlayerLong = $06EA18 -Sprite_DirectionToFacePlayerLong = $06EAA6 -Sprite_CheckDamageToPlayerSameLayerLong = $06F12F -OAM_AllocateDeferToPlayerLong = $06F86A -Player_HaltDashAttackLong = $0791B3 -Link_ReceiveItem = $07999D -Link_UseHammer = $079F82 -Sprite_CheckIfPlayerPreoccupied = $07F4AA -Ancilla_ReceiveItem = $08C3AE -Ancilla_BreakTowerSeal_draw_single_crystal = $08CE93 -Ancilla_BreakTowerSeal_stop_spawning_sparkles = $08CEC3 -BreakTowerSeal_ExecuteSparkles = $08CF59 -Ancilla_SetOam_XY_Long = $08F710 -AddReceivedItem = $0985E2 -AddPendantOrCrystal = $098BAD -AddWeathervaneExplosion = $098CFD -AddDashTremor = $0993DF -AddAncillaLong = $099D04 -Ancilla_CheckIfAlreadyExistsLong = $099D1A -Sprite_SetSpawnedCoords = $09AE64 -GiveRupeeGift = $09AD58 -OverworldMap_InitGfx = $0ABA4F -OverworldMap_DarkWorldTilemap = $0ABA99 -OverworldMap_LoadSprGfx = $0ABAB9 -NameFile_MakeScreenVisible = $0CD7D1 -InitializeSaveFile = $0CDB3E -InitializeSaveFile_build_checksum = $0CDBC0 -InitializeSaveFile_done = $0CDBDB -GetRandomInt = $0DBA71 -OAM_AllocateFromRegionA = $0DBA80 -OAM_AllocateFromRegionB = $0DBA84 -OAM_AllocateFromRegionC = $0DBA88 -OAM_AllocateFromRegionD = $0DBA8C -OAM_AllocateFromRegionE = $0DBA90 -OAM_AllocateFromRegionF = $0DBA94 -Sound_SetSfxPanWithPlayerCoords = $0DBB67 -Sound_SetSfx1PanLong = $0DBB6E -Sound_SetSfx2PanLong = $0DBB7C -Sound_SetSfx3PanLong = $0DBB8A -HUD_RefreshIconLong = $0DDB7F -Equipment_UpdateEquippedItemLong = $0DDD32 -BottleMenu_movingOn = $0DE01E -RestoreNormalMenu = $0DE346 -Equipment_SearchForEquippedItemLong = $0DE395 -DrawProgressIcons = $0DE9C8 ; returns short -ItemMenu_DrawEquippedYItem = $0DEB3A ; returns short -ItemMenu_DrawEquippedYItem_exit = $0DECE6 ; returns short -ItemMenu_DrawEquipment_dungeonitems = $0DEDCC ; returns short -DrawEquipment = $0DED29 ; returns short -HUD_RebuildLong = $0DFA78 -HUD_RebuildIndoor_Palace = $0DFA88 -HUD_RebuildLong2 = $0DFA88 -Messaging_Text = $0EEE10 -Overworld_TileAttr = $0FFD94 -Overworld_DrawPersistentMap16 = $1BC97C -Palette_Sword = $1BED03 -Palette_Shield = $1BED29 -Palette_ArmorAndGloves = $1BEDF9 -Palette_Hud = $1BEE52 -Palette_SelectScreen = $1BEF96 -ShopKeeper_RapidTerminateReceiveItem = $1CFAAA -Sprite_NullifyHookshotDrag = $1CF500 -Ancilla_CheckForAvailableSlot = $1CF537 -Filter_MajorWhitenMain = $1DE9B6 -Sprite_SpawnDynamically = $1DF65D -Sprite_SpawnDynamically_arbitrary = $1DF65F -DiggingGameGuy_AttemptPrizeSpawn = $1DFD4B -Sprite_GetEmptyBottleIndex = $1EDE28 -Sprite_PlayerCantPassThrough = $1EF4E7 +;=================================================================================================== +; Palettes +;=================================================================================================== +PalettesVanillaBank = $9B0000 +PalettesVanilla_none = $9B0000 +PalettesVanilla_red_melon = $9BD218 +PalettesVanilla_blue_ice = $9BD236 +PalettesVanilla_green_blue_guard = $9BD272 +PalettesVanilla_dark_world_melon = $9BD290 +PalettesVanilla_blue_dark_ice = $9BD2BC +PalettesVanilla_spraux09 = $9BD47E +;=================================================================================================== +; Misc. Data +;=================================================================================================== +WorldMapIcon_AdjustCoordinate = $8AC59B +WorldMap_CalculateOAMCoordinates = $8AC3B1 +WorldMap_HandleSpriteBlink = $8AC52E +WorldMap_RedXChars = $8ABF70 +TextCharMasks = $8EB844 diff --git a/zsnes.asm b/zsnes.asm deleted file mode 100644 index a6441bb..0000000 --- a/zsnes.asm +++ /dev/null @@ -1,15 +0,0 @@ -;-------------------------------------------------------------------------------- -CheckZSNES: - SEP #$28 - LDA.b #$FF - CLC - ADC.b #$FF - CMP.b #$64 - CLD - BEQ .zsnes - REP #$20 - LDA.w #$01FF : TCS ; thing we wrote over - initialize stack -JML.l ReturnCheckZSNES -.zsnes - JML DontUseZSNES -;--------------------------------------------------------------------------------