diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index ee2bb39..9b94ef2 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -36,41 +36,11 @@ dw !ROM_VERSION_LOW dw !ROM_VERSION_HIGH ;================================================================================ - !ADD = "CLC : ADC" !SUB = "SEC : SBC" !BLT = "BCC" !BGE = "BCS" -!MS_GOT = "$7F5031" - -!REDRAW = "$7F5000" -!GANON_WARP_CHAIN = "$7F5032"; - -!TILE_UPLOAD_BUFFER = "$7EA180"; - -!FORCE_HEART_SPAWN = "$7F5033"; -!SKIP_HEART_SAVE = "$7F5034"; - -; MSU-1 -!REG_MSU_FALLBACK_TABLE = $7F50A0 ; 8 bytes -!REG_MSU_DELAYED_COMMAND = $7F50A9 -!REG_MSU_PACK_COUNT = $7F50AA -!REG_MSU_PACK_CURRENT = $7F50AB -!REG_MSU_PACK_REQUEST = $7F50AC -!REG_MSU_LOADED_TRACK = $7F50AD ; 2 bytes -!REG_SPC_LOADING = $7F50AF -!MSU_LOADED_TRACK = $7F5400 -!MSU_RESUME_TRACK = $7F5401 -!MSU_RESUME_TIME = $7F5402 ; 4 bytes -!MSU_RESUME_CONTROL = $7F5406 -!REG_MUSIC_CONTROL = $012B -;!REG_MUSIC_CONTROL = $012C -!REG_MUSIC_CONTROL_REQUEST = $012C - -!ONEMIND_ID = $7F5072 -!ONEMIND_TIMER = $7F5073 - 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 @@ -79,12 +49,13 @@ function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<< ;================================================================================ incsrc hooks.asm -incsrc treekid.asm incsrc spriteswap.asm incsrc hashalphabethooks.asm incsrc sharedplayerpalettefix.asm incsrc ram.asm incsrc sram.asm +incsrc registers.asm +incsrc vanillalabels.asm ;org $208000 ; bank #$20 org $A08000 ; bank #$A0 @@ -108,22 +79,15 @@ incsrc fairyfixes.asm incsrc rngfixes.asm incsrc medallions.asm incsrc inventory.asm -incsrc ganonfixes.asm incsrc zelda.asm incsrc maidencrystals.asm -incsrc zoraking.asm -incsrc catfish.asm incsrc flute.asm incsrc dungeondrops.asm incsrc halfmagicbat.asm -incsrc mantle.asm incsrc swordswap.asm incsrc stats.asm -incsrc scratchpad.asm -incsrc map.asm incsrc dialog.asm incsrc entrances.asm -incsrc clock.asm incsrc accessibility.asm incsrc heartbeep.asm incsrc capacityupgrades.asm @@ -132,11 +96,10 @@ incsrc doorframefixes.asm incsrc music.asm incsrc roomloading.asm incsrc icepalacegraphics.asm -incsrc firebarlayer.asm warnpc $A18000 org $1C8000 ; text tables for translation -incbin i18n_en.bin +incbin "data/i18n_en.bin" warnpc $1CF356 org $A18000 ; static mapping area @@ -170,7 +133,6 @@ incsrc goalitem.asm incsrc quickswap.asm incsrc endingsequence.asm incsrc cuccostorm.asm -incsrc compression.asm incsrc retro.asm incsrc controllerjank.asm incsrc boots.asm @@ -199,9 +161,7 @@ if !FEATURE_NEW_TEXT endif warnpc $A58000 -;org $228000 ; contrib area -org $A28000 ; contrib area -incsrc contrib.asm +org $A28000 org $A38000 incsrc stats/main.asm @@ -212,89 +172,86 @@ incsrc tables.asm org $348000 incsrc spc.asm -; uncomment for inverted adjustments -;incsrc sandbox.asm - org $318000 ; bank #$31 GFX_Mire_Bombos: -incbin 99ff1_bombos.gfx +incbin "data/99ff1_bombos.gfx" warnpc $318800 org $318800 GFX_Mire_Quake: -incbin 99ff1_quake.gfx +incbin "data/99ff1_quake.gfx" warnpc $319000 org $319000 GFX_TRock_Bombos: -incbin a6fc4_bombos.gfx +incbin "data/a6fc4_bombos.gfx" warnpc $319800 org $319800 GFX_TRock_Ether: -incbin a6fc4_ether.gfx +incbin "data/a6fc4_ether.gfx" warnpc $31A000 org $31A000 GFX_HUD_Items: -incbin c2807_v4.gfx +incbin "data/c2807_v4.gfx" warnpc $31A800 org $31A800 GFX_New_Items: -incbin newitems.gfx +incbin "data/newitems.gfx" ;incbin eventitems.gfx ; *EVENT* warnpc $31B000 org $31B000 GFX_HUD_Main: -incbin c2e3e.gfx +incbin "data/c2e3e.gfx" warnpc $31B800 org $31C000 IcePalaceFloorGfx: -incbin ice_palace_floor.bin +incbin "data/ice_palace_floor.bin" warnpc $31C801 org $31C800 Damage_Table: -incbin damage_table.bin +incbin "data/damage_table.bin" warnpc $31D001 org $31D000 FileSelectNewGraphics: -incbin fileselect.chr.gfx +incbin "data/fileselect.chr.gfx" warnpc $31E001 org $31E000 InvertedCastleHole: ;address used by front end. DO NOT MOVE! -incbin sheet73.gfx +incbin "data/sheet73.gfx" warnpc $31E501 org $338000 GFX_HUD_Palette: -incbin hudpalette.pal +incbin "data/hudpalette.pal" warnpc $338041 org $339000 -incbin sheet178.gfx +incbin "data/sheet178.gfx" warnpc $339600 org $339600 BossMapIconGFX: -incbin bossicons.4bpp +incbin "data/bossicons.4bpp" if !FEATURE_NEW_TEXT org $339C00 NewFont: - incbin newfont.bin + incbin "data/newfont.bin" NewFontInverted: - incbin newfont_inverted.bin + incbin "data/newfont_inverted.bin" org $0CD7DF - incbin text_unscramble1.bin + incbin "data/text_unscramble1.bin" org $0CE4D5 - incbin text_unscramble2.bin + incbin "data/text_unscramble2.bin" endif org $328000 @@ -304,7 +261,7 @@ incsrc itemtext.asm incsrc externalhooks.asm ;================================================================================ org $119100 ; PC 0x89100 -incbin map_icons.gfx +incbin "data/map_icons.gfx" warnpc $119401 ;================================================================================ org $AF8000 ; PC 0x178000 @@ -320,7 +277,7 @@ warnpc $B08000 ;Bank Map ;$20 Code Bank ;$21 Reserved (Frame Hook & Init) -;$22 Contrib Code +;$22 Unused ;$23 Stats & Credits ;$24 Code Bank ;$29 External hooks (rest of bank not used) @@ -336,18 +293,18 @@ warnpc $B08000 ;$3F reserved for internal debugging ;================================================================================ ;RAM -;$7E021B[0x1]: Used by race game instead of $0ABF to avoid witch item conflict -;$7EC900[0x1F00]: BIGRAM buffer +;See ram.asm for label assignments +;$7EC900[0x1F00]: BigRAM buffer ;$7EF000[0x500]: SRAM mirror First 0x500 bytes of SRAM ; See sram.asm for labels and assignments ;$7F5000[0x800]: Rando's main free ram region -; See tables.asm for specific assignments +; See ram.asm for specific assignments ;$7F6000[0x1000]: SRAM buffer mapped to vanilla save slots 1 and 2 ; See sram.asm for labels and assignments ;$7F7667[0x6719] - free ram ;================================================================================ ;SRAM Map -;See sram.asm for rando-specific assignments +;See sram.asm for label assignments and documentation ;$70:0000 (5K) Game state ; 0000-04FF Vanilla Slot 1 (mirrored at $7EF000) ; 0500-14FF Ext Slot 1 (mirrored at $7F6000) @@ -355,44 +312,6 @@ warnpc $B08000 ;$70:3000 (0x16) Password ;$70:6000 (8K) Scratch buffers ;================================================================================ -;org $0080DC ; <- 0xDC - Bank00.asm:179 - Kill Music -;db #$A9, #$00, #$EA -;LDA.b #$00 : NOP -;================================================================================ -;org $0AC53E ; <- 5453E - Bank0A.asm:1103 - (LDA $0AC51F, X) - i have no idea what this is for anymore -;LDA.b #$7F -;NOP #2 -;================================================================================ -;org $05DF8B ; <- 2DF8B - Bank05.asm : 2483 -;AND.w #$0100 ; allow Sprite_DrawMultiple to access lower half of sprite tiles -;================================================================================ -;org $0DF8F1 ; this is required for the X-indicator in the HUD except not anymore obviously -; -;;red pendant -;db $2B, $31, $2C, $31, $3D, $31, $2E, $31 -;db $2B, $25, $2C, $25, $2D, $25, $2E, $25 -; -;;blue pendant -;db $2B, $31, $2C, $31, $3D, $31, $2E, $31 -;db $2B, $2D, $2C, $2D, $2D, $2D, $2E, $2D -; -;;green pendant -;db $2B, $31, $2C, $31, $3D, $31, $2E, $31 -;db $2B, $3D, $2C, $3D, $2D, $3D, $2E, $3D -;================================================================================ -;org $00CFF2 ; 0x4FF2 - Mire H -;db GFX_Mire_Bombos>>16 -;org $00D0D1 ; 0x50D1 - Mire M -;db GFX_Mire_Bombos>>8 -;org $00D1B0 ; 0x51B0 - Mire L -;db GFX_Mire_Bombos - -;org $00D020 ; 0x5020 - Trock H -;db GFX_TRock_Bombos>>16 -;org $00D0FF ; 0x50FF - Trock M -;db GFX_TRock_Bombos>>8 -;org $00D1DE ; 0x51DE - Trock L -;db GFX_TRock_Bombos org $00D09C ; 0x509C - HUD Items H db GFX_HUD_Items>>16 @@ -416,308 +335,3 @@ db GFX_HUD_Main>>8 org $00D25B ; 0x525B - HUD Main L db GFX_HUD_Main ;================================================================================ -org $008781 -UseImplicitRegIndexedLocalJumpTable: - -org $00879c -UseImplicitRegIndexedLongJumpTable: - -org $008333 -Vram_EraseTilemaps_triforce: - -org $008913 -Sound_LoadLightWorldSongBank: -org $00891D - .do_load - -org $00893D -EnableForceBlank: - -DungeonMask = $0098C0 - -org $00D308 -DecompSwordGfx: - -org $00D348 -DecompShieldGfx: - -org $00D463 -Tagalong_LoadGfx: - -org $00D51B -GetAnimatedSpriteTile: - -org $00D52D -GetAnimatedSpriteTile_variable: - -org $00D84E -Attract_DecompressStoryGfx: - -org $00E529 -LoadSelectScreenGfx: - -org $00F945 -PrepDungeonExit: - -org $00FDEE -Mirror_InitHdmaSettings: - -org $01873A -Dungeon_LoadRoom: - -org $02821E -Module_PreDungeon: -org $028296 - .setAmbientSfx - -org $02A0A8 -Dungeon_SaveRoomData: - -org $02A0BE -Dungeon_SaveRoomData_justKeys: - -org $02B861 -Dungeon_SaveRoomQuadrantData: - -org $02FD8A ; 17D8A - Bank0E.asm: 3732 Note: Different bank -LoadGearPalettes_bunny: - -org $02FD95 ; 17D95 - Bank0E.asm: 3742 Note: Different bank -LoadGearPalettes_variable: - -org $02FEAB -Filter_Majorly_Whiten_Color: - -org $05A51D -Sprite_SpawnFallingItem: - -org $05DF6C ; 02DF6C - Bank05.asm : 2445 -Sprite_DrawMultiple: - -org $05DF70 ; 02DF70 - Bank05.asm : 2454 -Sprite_DrawMultiple_quantity_preset: - -org $05DF75 ; 02DF75 - Bank05.asm : 2461 -Sprite_DrawMultiple_player_deferred: - -org $05E1A7 ; 02E1A7 - Bank05.asm : 2592 -Sprite_ShowSolicitedMessageIfPlayerFacing: - -org $05E1F0 -Sprite_ShowMessageFromPlayerContact: - -org $05E219 -Sprite_ShowMessageUnconditional: - -org $05EC96 -Sprite_ZeldaLong: - -org $0680FA -Player_ApplyRumbleToSprites: - -org $0683E6 -Utility_CheckIfHitBoxesOverlapLong: - -org $06A7DB -Chicken_SpawnAvengerChicken: ; returns short - -org $06DC5C -Sprite_DrawShadowLong: - -org $06DD40 -DashKey_Draw: - -org $06DBF8 -Sprite_PrepAndDrawSingleLargeLong: - -org $06DC00 -Sprite_PrepAndDrawSingleSmallLong: - -org $06EA18 -Sprite_ApplySpeedTowardsPlayerLong: - -org $06EAA6 -Sprite_DirectionToFacePlayerLong: - -org $06F12F -Sprite_CheckDamageToPlayerSameLayerLong: - -org $06F86A -OAM_AllocateDeferToPlayerLong: - -org $0791B3 -Player_HaltDashAttackLong: - -org $07999D -Link_ReceiveItem: - -org $07E68F -Unknown_Method_0: ; In US version disassembly simply called "$3E6A6 IN ROM" - -org $07F4AA -Sprite_CheckIfPlayerPreoccupied: - -org $08C3AE -Ancilla_ReceiveItem: - -org $08CE93 -Ancilla_BreakTowerSeal_draw_single_crystal: - -org $08CEC3 -Ancilla_BreakTowerSeal_stop_spawning_sparkles: - -org $08CF59 -BreakTowerSeal_ExecuteSparkles: - -org $08F710 -Ancilla_SetOam_XY_Long: - -org $0985E2 ; (break on $0985E4) -AddReceivedItem: - -org $098BAD -AddPendantOrCrystal: - -org $098CFD -AddWeathervaneExplosion: - -org $0993DF -AddDashTremor: - -org $099D04 -AddAncillaLong: - -org $099D1A -Ancilla_CheckIfAlreadyExistsLong: - -org $09AE64 -Sprite_SetSpawnedCoords: - -org $09AD58 -GiveRupeeGift: - -org $0ABA4F -OverworldMap_InitGfx: - -org $0ABA99 -OverworldMap_DarkWorldTilemap: - -org $0ABAB9 -OverworldMap_LoadSprGfx: - -org $0CD7D1 -NameFile_MakeScreenVisible: -org $0CDB3E -InitializeSaveFile: -org $0CDBC0 -InitializeSaveFile_build_checksum: - -org $0DBA71 -GetRandomInt: - -org $0DBA80 -OAM_AllocateFromRegionA: -org $0DBA84 -OAM_AllocateFromRegionB: -org $0DBA88 -OAM_AllocateFromRegionC: -org $0DBA8C -OAM_AllocateFromRegionD: -org $0DBA90 -OAM_AllocateFromRegionE: -org $0DBA94 -OAM_AllocateFromRegionF: - -org $0DBB67 -Sound_SetSfxPanWithPlayerCoords: - -org $0DBB6E -Sound_SetSfx1PanLong: - -org $0DBB7C -Sound_SetSfx2PanLong: - -org $0DBB8A -Sound_SetSfx3PanLong: - -org $0DDB7F -HUD_RefreshIconLong: - -org $0DDD32 -Equipment_UpdateEquippedItemLong: - -org $0DE01E ; 6E10E - equipment.asm : 787 -BottleMenu_movingOn: - -org $0DE346 -RestoreNormalMenu: - -org $0DE395 -Equipment_SearchForEquippedItemLong: - -org $0DE9C8 -DrawProgressIcons: ; this returns short - -org $0DED29 -DrawEquipment: ; this returns short - -org $0DFA78 -HUD_RebuildLong: - -org $0DFA88 -HUD_RebuildIndoor_Palace: - -org $0DFA88 -HUD_RebuildLong2: - -org $0EEE10 -Messaging_Text: - -org $0FFD94 -Overworld_TileAttr: - -org $1BC97C -Overworld_DrawPersistentMap16: - -org $1BED03 -Palette_Sword: - -org $1BED29 -Palette_Shield: - -org $1BEDF9 -Palette_ArmorAndGloves: - -org $1BEE52 -Palette_Hud: - -org $1BEF96 -Palette_SelectScreen: - -org $1CFAAA -ShopKeeper_RapidTerminateReceiveItem: - -org $1CF500 -Sprite_NullifyHookshotDrag: - -org $1CF537 -Ancilla_CheckForAvailableSlot: - -org $1DE9B6 -Filter_MajorWhitenMain: - -org $1DF65D -Sprite_SpawnDynamically: - -org $1DF65F -Sprite_SpawnDynamically_arbitrary: - -org $1DFD4B -DiggingGameGuy_AttemptPrizeSpawn: - -org $1EDE28 -Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm - -org $1EF4E7 -Sprite_PlayerCantPassThrough: -;================================================================================ diff --git a/accessibility.asm b/accessibility.asm index 6e88345..d02de7e 100644 --- a/accessibility.asm +++ b/accessibility.asm @@ -1,127 +1,118 @@ ;================================================================================ ; Accessibility Fixes ;================================================================================ -FlipGreenPendant: - LDA $0C : CMP #$38 : BNE + ; check if we have green pendant - ORA #$40 : STA $0C ; flip it - + - - LDA $0D : STA $0802, X ; stuff we wrote over "Set CHR, palette, and priority of the sprite" - LDA $0C : STA $0803, X -RTL -;================================================================================ ConditionalLightning: CMP.b #$05 : BEQ ++ CMP.b #$2C : BEQ ++ CMP.b #$5A : BEQ ++ LDA.l DisableFlashing : BNE ++ - LDA.b #$32 : STA.w $9A + LDA.b #$32 : STA.w CGADSUBQ RTL ++ LDA.b #$72 - STA $9A + STA.b CGADSUBQ RTL ;================================================================================ ConditionalWhitenBg: LDX.b #$00 LDA.l DisableFlashing : REP #$20 : BNE + - LDA $00,X + LDA.b Scrap00,X JSR WhitenLoopReal RTL + - LDA $00 + LDA.b Scrap00 JSR WhitenLoopDummy RTL ;================================================================================ WhitenLoopReal: - - LDA $7EC340, X : JSL Filter_Majorly_Whiten_Color : STA $7EC540, X - LDA $7EC350, X : JSL Filter_Majorly_Whiten_Color : STA $7EC550, X - LDA $7EC360, X : JSL Filter_Majorly_Whiten_Color : STA $7EC560, X - LDA $7EC370, X : JSL Filter_Majorly_Whiten_Color : STA $7EC570, X - LDA $7EC380, X : JSL Filter_Majorly_Whiten_Color : STA $7EC580, X - LDA $7EC390, X : JSL Filter_Majorly_Whiten_Color : STA $7EC590, X - LDA $7EC3A0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5A0, X - LDA $7EC3B0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5B0, X - LDA $7EC3C0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5C0, X - LDA $7EC3D0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5D0, X - LDA $7EC3E0, X : JSL Filter_Majorly_Whiten_Color : STA $7EC5E0, X + LDA.l PaletteBufferAux+$40, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$40, X + LDA.l PaletteBufferAux+$50, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$50, X + LDA.l PaletteBufferAux+$60, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$60, X + LDA.l PaletteBufferAux+$70, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$70, X + LDA.l PaletteBufferAux+$80, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$80, X + LDA.l PaletteBufferAux+$90, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$90, X + LDA.l PaletteBufferAux+$A0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$A0, X + LDA.l PaletteBufferAux+$B0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$B0, X + LDA.l PaletteBufferAux+$C0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$C0, X + LDA.l PaletteBufferAux+$D0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$D0, X + LDA.l PaletteBufferAux+$E0, X : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$E0, X INX #2 : CPX.b #$10 : BEQ + JMP - + - LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F0 - LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F2 - LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F4 - LDA $10 : CMP.w #$07 : BNE + - LDA $048E - CMP.w #$3C : BEQ ++ - CMP.w #$9D : BEQ ++ - CMP.w #$9C : BEQ ++ - CMP.w #$A5 : BEQ ++ + LDA.l PaletteBufferAux+$F0 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F0 + LDA.l PaletteBufferAux+$F2 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F2 + LDA.l PaletteBufferAux+$F4 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F4 + LDA.b GameMode : CMP.w #$0007 : BNE + + LDA.b RoomIndex + CMP.w #$003C : BEQ ++ + CMP.w #$009D : BEQ ++ + CMP.w #$009C : BEQ ++ + CMP.w #$00A5 : BEQ ++ + - LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 - LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 + LDA.l PaletteBufferAux+$F6 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F6 + LDA.l PaletteBufferAux+$F8 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F8 BRA +++ ++ - LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 - LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 + LDA.l PaletteBuffer+$F6 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F6 + LDA.l PaletteBuffer+$F8 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F8 BRA +++ +++ - LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : STA $7EC5FA - LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : STA $7EC5FC - LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : STA $7EC5FE + LDA.l PaletteBufferAux+$FA : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$FA + LDA.l PaletteBufferAux+$FC : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$FC + LDA.l PaletteBufferAux+$FE : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$FE REP #$10 - LDA $7EC540 : TAY - LDA $7EC300 : BNE + + LDA.l PaletteBuffer+$40 : TAY + LDA.l PaletteBufferAux : BNE + TAY + - TYA : STA $7EC500 + TYA : STA.l PaletteBuffer SEP #$30 RTS ;================================================================================ WhitenLoopDummy: - - LDA $7EC340, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC540, X - LDA $7EC350, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC550, X - LDA $7EC360, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC560, X - LDA $7EC370, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC570, X - LDA $7EC380, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC580, X - LDA $7EC390, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC590, X - LDA $7EC3A0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5A0, X - LDA $7EC3B0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5B0, X - LDA $7EC3C0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5C0, X - LDA $7EC3D0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5D0, X - LDA $7EC3E0, X : JSL Filter_Majorly_Whiten_Color : LDA $7EC5E0, X + LDA.l PaletteBufferAux+$40, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$40, X + LDA.l PaletteBufferAux+$50, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$50, X + LDA.l PaletteBufferAux+$60, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$60, X + LDA.l PaletteBufferAux+$70, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$70, X + LDA.l PaletteBufferAux+$80, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$80, X + LDA.l PaletteBufferAux+$90, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$90, X + LDA.l PaletteBufferAux+$A0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$A0, X + LDA.l PaletteBufferAux+$B0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$B0, X + LDA.l PaletteBufferAux+$C0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$C0, X + LDA.l PaletteBufferAux+$D0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$D0, X + LDA.l PaletteBufferAux+$E0, X : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$E0, X INX #2 : CPX.b #$10 : BEQ + JMP - + - LDA $7EC3F0 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F0 - LDA $7EC3F2 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F2 - LDA $7EC3F4 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F4 - LDA $10 : CMP.w #$07 : BNE + ; only light invisifloor if we're in dungeon submodule - LDA $048E - CMP.w #$3C : BEQ ++ ; hookshot cave - CMP.w #$9D : BEQ ++ ; gt right - CMP.w #$9C : BEQ ++ ; gt big room - CMP.w #$A5 : BEQ ++ ; wizzrobes 1 + LDA.l PaletteBufferAux+$F0 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F0 + LDA.l PaletteBufferAux+$F2 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F2 + LDA.l PaletteBufferAux+$F4 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F4 + LDA.b GameMode : CMP.w #$0007 : BNE + ; only light invisifloor if we're in dungeon submodule + LDA.b RoomIndex + CMP.w #$003C : BEQ ++ ; hookshot cave + CMP.w #$009D : BEQ ++ ; gt right + CMP.w #$009C : BEQ ++ ; gt big room + CMP.w #$00A5 : BEQ ++ ; wizzrobes 1 + - LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F6 - LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : LDA $7EC5F8 + LDA.l PaletteBufferAux+$F6 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F6 + LDA.l PaletteBufferAux+$F8 : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$F8 BRA +++ ++ - LDA $7EC3F6 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F6 - LDA $7EC3F8 : JSL Filter_Majorly_Whiten_Color : STA $7EC5F8 + LDA.l PaletteBufferAux+$F6 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F6 + LDA.l PaletteBufferAux+$F8 : JSL Filter_Majorly_Whiten_Color : STA.l PaletteBuffer+$F8 BRA +++ +++ - LDA $7EC3FA : JSL Filter_Majorly_Whiten_Color : LDA $7EC5FA - LDA $7EC3FC : JSL Filter_Majorly_Whiten_Color : LDA $7EC5FC - LDA $7EC3FE : JSL Filter_Majorly_Whiten_Color : LDA $7EC5FE + LDA.l PaletteBufferAux+$FA : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$FA + LDA.l PaletteBufferAux+$FC : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$FC + LDA.l PaletteBufferAux+$FE : JSL Filter_Majorly_Whiten_Color : LDA.l PaletteBuffer+$FE REP #$10 - LDA $7EC540 : TAY - LDA $7EC300 : BNE + + LDA.l PaletteBuffer+$40 : TAY + LDA.l PaletteBufferAux : BNE + TAY + - TYA : STA $7EC500 + TYA : STA.l PaletteBuffer SEP #$30 RTS ;================================================================================ @@ -129,36 +120,36 @@ RestoreBgEther: LDX.b #$00 LDA.l DisableFlashing : REP #$20 : BNE + - - LDA $00,X - LDA $7EC340, X : STA $7EC540, X - LDA $7EC350, X : STA $7EC550, X - LDA $7EC360, X : STA $7EC560, X - LDA $7EC370, X : STA $7EC570, X - LDA $7EC380, X : STA $7EC580, X - LDA $7EC390, X : STA $7EC590, X - LDA $7EC3A0, X : STA $7EC5A0, X - LDA $7EC3B0, X : STA $7EC5B0, X - LDA $7EC3C0, X : STA $7EC5C0, X - LDA $7EC3D0, X : STA $7EC5D0, X - LDA $7EC3E0, X : STA $7EC5E0, X - LDA $7EC3F0, X : STA $7EC5F0, X + LDA.b Scrap00,X + LDA.l PaletteBufferAux+$40, X : STA.l PaletteBuffer+$40, X + LDA.l PaletteBufferAux+$50, X : STA.l PaletteBuffer+$50, X + LDA.l PaletteBufferAux+$60, X : STA.l PaletteBuffer+$60, X + LDA.l PaletteBufferAux+$70, X : STA.l PaletteBuffer+$70, X + LDA.l PaletteBufferAux+$80, X : STA.l PaletteBuffer+$80, X + LDA.l PaletteBufferAux+$90, X : STA.l PaletteBuffer+$90, X + LDA.l PaletteBufferAux+$A0, X : STA.l PaletteBuffer+$A0, X + LDA.l PaletteBufferAux+$B0, X : STA.l PaletteBuffer+$B0, X + LDA.l PaletteBufferAux+$C0, X : STA.l PaletteBuffer+$C0, X + LDA.l PaletteBufferAux+$D0, X : STA.l PaletteBuffer+$D0, X + LDA.l PaletteBufferAux+$E0, X : STA.l PaletteBuffer+$E0, X + LDA.l PaletteBufferAux+$F0, X : STA.l PaletteBuffer+$F0, X INX #2 : CPX.b #$10 : BNE - BRA ++ + - - LDA $00 - LDA $7EC340, X : LDA $7EC540, X - LDA $7EC350, X : LDA $7EC550, X - LDA $7EC360, X : LDA $7EC560, X - LDA $7EC370, X : LDA $7EC570, X - LDA $7EC380, X : LDA $7EC580, X - LDA $7EC390, X : LDA $7EC590, X - LDA $7EC3A0, X : LDA $7EC5A0, X - LDA $7EC3B0, X : LDA $7EC5B0, X - LDA $7EC3C0, X : LDA $7EC5C0, X - LDA $7EC3D0, X : LDA $7EC5D0, X - LDA $7EC3E0, X : LDA $7EC5E0, X - LDA $7EC3F0, X : LDA $7EC5F0, X + LDA.b Scrap00 + LDA.l PaletteBufferAux+$40, X : LDA.l PaletteBuffer+$40, X + LDA.l PaletteBufferAux+$50, X : LDA.l PaletteBuffer+$50, X + LDA.l PaletteBufferAux+$60, X : LDA.l PaletteBuffer+$60, X + LDA.l PaletteBufferAux+$70, X : LDA.l PaletteBuffer+$70, X + LDA.l PaletteBufferAux+$80, X : LDA.l PaletteBuffer+$80, X + LDA.l PaletteBufferAux+$90, X : LDA.l PaletteBuffer+$90, X + LDA.l PaletteBufferAux+$A0, X : LDA.l PaletteBuffer+$A0, X + LDA.l PaletteBufferAux+$B0, X : LDA.l PaletteBuffer+$B0, X + LDA.l PaletteBufferAux+$C0, X : LDA.l PaletteBuffer+$C0, X + LDA.l PaletteBufferAux+$D0, X : LDA.l PaletteBuffer+$D0, X + LDA.l PaletteBufferAux+$E0, X : LDA.l PaletteBuffer+$E0, X + LDA.l PaletteBufferAux+$F0, X : LDA.l PaletteBuffer+$F0, X INX #2 : CPX.b #$10 : BNE - BRA ++ ++ @@ -168,105 +159,105 @@ DDMConditionalLightning: LDA.l DisableFlashing REP #$20 BNE + - LDA.w $0000 + LDA.w Scrap LDX.b #$02 JML $07FA7F ; Bank0E.asm : 4738 vanilla loop equivalent to below beginning at LDY #$00 + - LDA.b $00 : LDX.b #$02 : LDY #$00 + LDA.b Scrap00 : LDX.b #$02 : LDY.b #$00 - - LDA $F4EB, Y : LDA $7EC560, X - LDA $F4F9, Y : LDA $7EC570, X - LDA $F507, Y : LDA $7EC590, X - LDA $F515, Y : LDA $7EC5E0, X - LDA $F523, Y : LDA $7EC5F0, X + LDA.w $F4EB, Y : LDA.l PaletteBuffer+$60, X + LDA.w $F4F9, Y : LDA.l PaletteBuffer+$70, X + LDA.w $F507, Y : LDA.l PaletteBuffer+$90, X + LDA.w $F515, Y : LDA.l PaletteBuffer+$E0, X + 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 ;================================================================================ ConditionalGTFlash: LDA.l DisableFlashing : REP #$20 : BNE + - LDA $0000 + LDA.w Scrap - - LDA $F9C1, Y : STA $7EC5D0, X + LDA.w $F9C1, Y : STA.l PaletteBuffer+$D0, X INY #2 INX #2 : CPX.b #$10 : BNE - RTL + - LDA $00 + LDA.b Scrap00 - - LDA $F9C1, Y : LDA $7EC5D0, X + LDA.w $F9C1, Y : LDA.l PaletteBuffer+$D0, X INY #2 INX #2 : CPX.b #$10 : BNE - RTL ;================================================================================ ConditionalRedFlash: LDA.l DisableFlashing : REP #$20 : BNE + - LDA $00,X - LDA.w #$1D59 : STA $7EC5DA - LDA.w #$25FF : STA $7EC5DC + LDA.b Scrap,X + LDA.w #$1D59 : STA.l PaletteBuffer+$DA + LDA.w #$25FF : STA.l PaletteBuffer+$DC LDA.w #$001A RTL + - LDA $00 - LDA.w #$1D59 : LDA $7EC5DA - LDA.w #$25FF : LDA $7EC5DC + LDA.b Scrap00 + LDA.w #$1D59 : LDA.l PaletteBuffer+$DA + LDA.w #$25FF : LDA.l PaletteBuffer+$DC LDA.w #$0000 RTL ;================================================================================ ConditionalPedAncilla: LDA.l DisableFlashing : REP #$20 : BNE + - LDA $00,X - LDA $00 : STA $04 - LDA $02 : STA $06 + LDA.b Scrap,X + LDA.b Scrap00 : STA.b Scrap04 + LDA.b Scrap02 : STA.b Scrap06 RTL + - LDA $00 - LDA $00 : LDA $04 - LDA $02 : LDA $06 + LDA.b Scrap + LDA.b Scrap00 : LDA.b Scrap04 + LDA.b Scrap02 : LDA.b Scrap06 RTL ;================================================================================ LoadElectroPalette: REP #$20 - LDA.w #$0202 : STA $0C - LDA.w #$0404 : STA $0E - LDA.w #$001B : STA $02 + LDA.w #$0202 : STA.b Scrap0C + LDA.w #$0404 : STA.b Scrap0E + LDA.w #$001B : STA.b Scrap02 SEP #$10 - LDX $0C : LDA $1BEBB4, X : AND.w #$00FF : ADC #$D630 + LDX.b Scrap0C : LDA.l $1BEBB4, X : AND.w #$00FF : ADC.w #$D630 REP #$10 : LDX.w #$01B2 : LDY.w #$0002 JSR ConditionalLoadGearPalette SEP #$10 - LDX $0D - LDA $1BEBC1, X : AND.w #$00FF : ADC #$D648 + LDX.b Scrap0D + LDA.l $1BEBC1, X : AND.w #$00FF : ADC.w #$D648 REP #$10 : LDX.w #$01B8 : LDY.w #$0003 JSR ConditionalLoadGearPalette SEP #$10 - LDX $0E - LDA $1BEC06, X : AND.w #$00FF : ASL A : ADC #$D308 + LDX.b Scrap0E + LDA.l $1BEC06, X : AND.w #$00FF : ASL A : ADC.w #$D308 REP #$10 : LDX.w #$01E2 : LDY.w #$000E JSR ConditionalLoadGearPalette SEP #$30 - INC $15 + INC.b NMICGRAM RTL ;================================================================================ ConditionalLoadGearPalette: - STA $00 + STA.b Scrap00 SEP #$20 LDA.l DisableFlashing : REP #$20 : BNE + - LDA $00,X + LDA.b Scrap,X - - LDA [$00] - STA $7EC500, X - INC $00 : INC $00 + LDA.b [Scrap00] + STA.l PaletteBuffer, X + INC.b Scrap00 : INC.b Scrap00 INX #2 DEY BPL - RTS + - LDA $00 + LDA.b Scrap - - LDA [$00] - LDA $7EC500, X - INC $00 : INC $00 + LDA.b [Scrap00] + LDA.l PaletteBuffer, X + INC.b Scrap00 : INC.b Scrap00 INX #2 DEY BPL - @@ -281,13 +272,13 @@ RestoreElectroPalette: LDX.w #$01E2 : LDY.w #$000E JSR FillPaletteBufferFromAux SEP #$30 - INC $15 + INC.b NMICGRAM RTL ;================================================================================ FillPaletteBufferFromAux: - - LDA $7EC300, X - STA $7EC500, X + LDA.l PaletteBufferAux, X + STA.l PaletteBuffer, X INX #2 DEY BPL - diff --git a/bookofmudora.asm b/bookofmudora.asm index 6149763..399b98a 100644 --- a/bookofmudora.asm +++ b/bookofmudora.asm @@ -2,21 +2,21 @@ ; Randomize Book of Mudora ;-------------------------------------------------------------------------------- LoadLibraryItemGFX: - %GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues) - STA $0E80, X ; Store item type - JSL.l PrepDynamicTile + %GetPossiblyEncryptedItem(LibraryItem, SpriteItemValues) + STA.w SpriteItemType, X ; Store item type + JSL.l PrepDynamicTile RTL ;-------------------------------------------------------------------------------- DrawLibraryItemGFX: - PHA - LDA $0E80, X ; Retrieve stored item type - JSL.l DrawDynamicTile - PLA + PHA + LDA.w SpriteItemType, X ; Retrieve stored item type + JSL.l DrawDynamicTile + PLA RTL ;-------------------------------------------------------------------------------- SetLibraryItem: - LDY $0E80, X ; Retrieve stored item type - JSL.l ItemSet_Library ; contains thing we wrote over + LDY.w SpriteItemType, X ; Retrieve stored item type + JSL.l ItemSet_Library ; contains thing we wrote over RTL ;-------------------------------------------------------------------------------- @@ -24,37 +24,34 @@ RTL ;================================================================================ ; Randomize Bonk Keys ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" -;-------------------------------------------------------------------------------- LoadBonkItemGFX: - LDA.b #$08 : STA $0F50, X ; thing we wrote over + LDA.b #$08 : STA.w SpriteOAMProp, X ; thing we wrote over LoadBonkItemGFX_inner: - LDA.b #$00 : STA !REDRAW + LDA.b #$00 : STA.l RedrawFlag JSR LoadBonkItem JSL.l PrepDynamicTile RTL ;-------------------------------------------------------------------------------- DrawBonkItemGFX: - PHA - LDA !REDRAW : BEQ .skipInit ; skip init if already ready - JSL.l LoadBonkItemGFX_inner - BRA .done ; don't draw on the init frame - + PHA + LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready + JSL.l LoadBonkItemGFX_inner + BRA .done ; don't draw on the init frame + .skipInit - - JSR LoadBonkItem - JSL.l DrawDynamicTileNoShadow - - .done - PLA + JSR LoadBonkItem + JSL.l DrawDynamicTileNoShadow + + .done + PLA RTL ;-------------------------------------------------------------------------------- GiveBonkItem: JSR LoadBonkItem - CMP #$24 : BNE .notKey + CMP.b #$24 : BNE .notKey .key PHY : LDY.b #$24 : JSL.l AddInventory : PLY ; do inventory processing for a small key - LDA CurrentSmallKeys : INC A : STA CurrentSmallKeys + LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys LDA.b #$2F : JSL.l Sound_SetSfx3PanLong JSL CountBonkItem RTL @@ -64,11 +61,11 @@ RTL RTL ;-------------------------------------------------------------------------------- LoadBonkItem: - LDA $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte - CMP #115 : BNE + ; Desert Bonk Key + 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 #140 : BNE + ; GTower Bonk Key + + : CMP.b #140 : BNE + ; GTower Bonk Key LDA.l BonkKey_GTower BRA ++ + diff --git a/boots.asm b/boots.asm index 219c445..3943a43 100644 --- a/boots.asm +++ b/boots.asm @@ -1,28 +1,27 @@ ;================================================================================ ; Boots State Modifier ;-------------------------------------------------------------------------------- -!BOOTS_MODIFIER = "$7F50CE" ModifyBoots: PHA - LDA !BOOTS_MODIFIER : CMP.b #$01 : BNE + - PLA : AND AbilityFlags : ORA.b #$04 : RTL ; yes boots + LDA.l BootsModifier : CMP.b #$01 : BNE + + PLA : AND.l AbilityFlags : ORA.b #$04 : RTL ; yes boots + : CMP.b #$02 : BNE + - PLA : AND AbilityFlags : AND.b #$FB : RTL ; no boots - + : LDA FakeBoots : CMP.b #$01 : BNE + - LDA $5B : BEQ ++ : LDA $59 : BNE + ; hover check - ++ : PLA : AND AbilityFlags : ORA.b #$04 : RTL ; yes boots, not hovering + PLA : AND.l AbilityFlags : AND.b #$FB : RTL ; no boots + + : LDA.l FakeBoots : CMP.b #$01 : BNE + + LDA.b LinkSlipping : BEQ ++ : LDA.b $59 : BNE + ; hover check + ++ : PLA : AND.l AbilityFlags : ORA.b #$04 : RTL ; yes boots, not hovering + PLA - AND AbilityFlags ; regular boots + AND.l AbilityFlags ; regular boots RTL ;-------------------------------------------------------------------------------- AddBonkTremors: PHA - LDA $46 : BNE + ; Check for incapacitated Link + LDA.b $46 : BNE + ; Check for incapacitated Link JSL.l IncrementBonkCounter + - LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + - LDA BootsEquipment : BNE + ; Check for Boots + LDA.l BootsModifier : CMP.b #$01 : BEQ + + LDA.l BootsEquipment : BNE + ; Check for Boots PLA : RTL + PLA @@ -32,46 +31,46 @@ RTL BonkBreakableWall: PHX : PHP SEP #$30 ; set 8-bit accumulator and index registers - LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + - LDA BootsEquipment : BNE + ; Check for Boots + LDA.l BootsModifier : CMP.b #$01 : BEQ + + LDA.l BootsEquipment : BNE + ; Check for Boots PLP : PLX : LDA.w #$0000 : RTL + PLP : PLX - LDA $0372 : AND.w #$00FF ; things we wrote over + LDA.w $0372 : AND.w #$00FF ; things we wrote over RTL ;-------------------------------------------------------------------------------- BonkRockPile: - LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + - LDA BootsEquipment : BNE + ; Check for Boots + LDA.l BootsModifier : CMP.b #$01 : BEQ + + LDA.l BootsEquipment : BNE + ; Check for Boots LDA.b #$00 : RTL + - LDA $02EF : AND.b #$70 ; things we wrote over + LDA.w TileActBE : AND.b #$70 ; things we wrote over RTL ;-------------------------------------------------------------------------------- GravestoneHook: - LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + - LDA BootsEquipment : BEQ .done ; Check for Boots + LDA.l BootsModifier : CMP.b #$01 : BEQ + + LDA.l BootsEquipment : BEQ .done ; Check for Boots + - LDA $0372 : BEQ .done ; things we wrote over + LDA.w $0372 : BEQ .done ; things we wrote over JML.l moveGravestone .done JML.l GravestoneHook_continue ;-------------------------------------------------------------------------------- JumpDownLedge: - LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + - LDA BootsEquipment : BNE + ; Check for Boots + LDA.l BootsModifier : CMP.b #$01 : BEQ + + LDA.l BootsEquipment : BNE + ; Check for Boots ; Disarm Waterwalk - LDA $5B : CMP.b #$01 : BNE + - STZ $5B + LDA.b LinkSlipping : CMP.b #$01 : BNE + + STZ.b LinkSlipping + - LDA $1B : BNE .done : LDA.b #$02 : STA $EE ; things we wrote over + LDA.b IndoorsFlag : BNE .done : LDA.b #$02 : STA.b LinkLayer ; things we wrote over .done RTL ;-------------------------------------------------------------------------------- BonkRecoil: - LDA !BOOTS_MODIFIER : CMP.b #$01 : BEQ + - LDA BootsEquipment : BNE + ; Check for Boots - LDA.b #$16 : STA $29 : RTL + LDA.l BootsModifier : CMP.b #$01 : BEQ + + LDA.l BootsEquipment : BNE + ; Check for Boots + LDA.b #$16 : STA.b LinkRecoilZ : RTL + - LDA.b #$24 : STA $29 ; things we wrote over + LDA.b #$24 : STA.b LinkRecoilZ ; things we wrote over RTL diff --git a/bugfixes.asm b/bugfixes.asm index 85ff9d6..e8a6b88 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -2,8 +2,8 @@ ;-------------------------------------------------------------------------------- AssignKiki: - LDA.b #$00 : STA FollowerDropped ; defuse bomb - LDA.b #$0A : STA FollowerIndicator ; assign kiki as follower + LDA.b #$00 : STA.l FollowerDropped ; defuse bomb + LDA.b #$0A : STA.l FollowerIndicator ; assign kiki as follower RTL ;-------------------------------------------------------------------------------- @@ -11,10 +11,9 @@ RTL ; Name: AllowSQ ; Returns: Accumulator = 0 if S&Q is disallowed, 1 if allowed ;-------------------------------------------------------------------------------- -!ITEM_BUSY = "$7F5091" AllowSQ: - LDA ProgressIndicator : BEQ .done ; thing we overwrote - check if link is in his bed - LDA !ITEM_BUSY : EOR #$01 + LDA.l ProgressIndicator : BEQ .done ; thing we overwrote - check if link is in his bed + LDA.l BusyItem : EOR.b #$01 .done RTL ;-------------------------------------------------------------------------------- @@ -23,8 +22,8 @@ RTL ;0 = Reset Music ;1 = Don't Reset Music MSMusicReset: - LDA $8A : CMP.b #$80 : BNE + - LDA $23 + LDA.b OverworldIndex : CMP.b #$80 : BNE + + LDA.b LinkPosX+1 + RTL ;-------------------------------------------------------------------------------- @@ -32,11 +31,11 @@ RTL ;-------------------------------------------------------------------------------- ;0 = Become (Perma)bunny DecideIfBunny: - LDA MoonPearlEquipment : BNE .done - LDA CurrentWorld : AND.b #$40 + LDA.l MoonPearlEquipment : BNE .done + LDA.l CurrentWorld : AND.b #$40 PHA : LDA.l InvertedMode : BNE .inverted .normal - PLA : EOR #$40 + PLA : EOR.b #$40 BRA .done .inverted PLA @@ -47,9 +46,9 @@ RTL DecideIfBunnyByScreenIndex: ; If indoors we don't have a screen index. Return non-bunny to make mirror-based ; superbunny work - LDA $1B : BNE .done - LDA MoonPearlEquipment : BNE .done - LDA $8A : AND.b #$40 : PHA + LDA.b IndoorsFlag : BNE .done + LDA.l MoonPearlEquipment : BNE .done + LDA.b OverworldIndex : AND.b #$40 : PHA LDA.l InvertedMode : BNE .inverted .normal PLA : EOR #$40 @@ -58,21 +57,12 @@ DecideIfBunnyByScreenIndex: PLA .done RTL -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -;ReadInventoryPond: -; CPX.b #$1B : BNE + : LDA.b #$01 : RTL : + -; LDA EquipmentWRAM, X -;RTL -;-------------------------------------------------------------------------------- - ;-------------------------------------------------------------------------------- FixBunnyOnExitToLightWorld: - LDA.w $02E0 : BEQ + + LDA.w BunnyFlag : BEQ + JSL.l DecideIfBunny : BEQ + - STZ $5D ; set player mode to Normal - STZ $02E0 : STZ $56 ; return player graphics to normal + STZ.b LinkState ; set player mode to Normal + STZ.w BunnyFlag : STZ.b BunnyFlagDP ; return player graphics to normal + RTS ;-------------------------------------------------------------------------------- @@ -83,17 +73,17 @@ RTS FixAga2Bunny: LDA.l FixFakeWorld : BEQ + ; Only use this fix is fakeworld fix is in use LDA.l InvertedMode : BEQ +++ - LDA.b #$00 : STA CurrentWorld ; Switch to light world + LDA.b #$00 : STA.l CurrentWorld ; Switch to light world BRA ++ +++ - LDA.b #$40 : STA CurrentWorld ; Switch to dark world + LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world ++ JSL DecideIfBunny : BNE + JSR MakeBunny - LDA.b #$04 : STA.w $012C ; play bunny music + LDA.b #$04 : STA.w MusicControlRequest ; play bunny music BRA .done + - LDA.b #$09 : STA.w $012C ; what we wrote over + LDA.b #$09 : STA.w MusicControlRequest ; what we wrote over .done RTL ;-------------------------------------------------------------------------------- @@ -101,8 +91,8 @@ RTL ;-------------------------------------------------------------------------------- MakeBunny: PHX : PHY - LDA.b #$17 : STA $5D ; set player mode to permabunny - LDA.b #$01 : STA $02E0 : STA $56 ; make player look like bunny + LDA.b #$17 : STA.b LinkState ; set player mode to permabunny + LDA.b #$01 : STA.w BunnyFlag : STA.b BunnyFlagDP ; make player look like bunny JSL LoadGearPalettes_bunny PLY : PLX RTS @@ -130,27 +120,27 @@ RTS ; Fix for SQ jumping causing accidental Exploration Glitch SQEGFix: LDA.l Bugfix_PodEG : BEQ ++ - STZ.w $047A ; disarm exploration glitch + STZ.w LayerAdjustment ; disarm exploration glitch ++ RTL ;-------------------------------------------------------------------------------- ; Fix crystal not spawning when using somaria vs boss TryToSpawnCrystalUntilSuccess: - STX $02D8 ; what we overwrote + STX.w ItemReceiptID ; what we overwrote JSL AddAncillaLong : BCS .failed ; a clear carry flag indicates success .spawned - STZ $AE ; the "trying to spawn crystal" flag - STZ $AF ; the "trying to spawn pendant" flag + STZ.b RoomTag ; the "trying to spawn crystal" flag + STZ.b RoomTag+1 ; the "trying to spawn pendant" flag .failed RTL ;-------------------------------------------------------------------------------- ; Fix crystal not spawning when using somaria vs boss WallmasterCameraFix: - STZ $A7 ; disable vertical camera scrolling for current room + STZ.b CameraBoundV ; disable vertical camera scrolling for current room REP #$20 - STZ $0618 ; something about scrolling, setting these to 0 tricks the game - STZ $061A ; into thinking we're at the edge of the room so it doesn't scroll. + STZ.w CameraScrollN ; something about scrolling, setting these to 0 tricks the game + STZ.w CameraScrollS ; into thinking we're at the edge of the room so it doesn't scroll. SEP #$20 JML Sound_SetSfx3PanLong ; what we wrote over, also this will RTL @@ -158,8 +148,8 @@ WallmasterCameraFix: ; Fix losing glove colors LoadActualGearPalettesWithGloves: REP #$20 -LDA SwordEquipment : STA $0C -LDA ArmorEquipment : AND.w #$00FF +LDA.l SwordEquipment : STA.b Scrap0C +LDA.l ArmorEquipment : AND.w #$00FF JSL LoadGearPalettes_variable JSL SpriteSwap_Palette_ArmorAndGloves_part_two RTL @@ -167,24 +157,24 @@ RTL ;-------------------------------------------------------------------------------- ; Fix Bunny Palette Map Bug LoadGearPalette_safe_for_bunny: -LDA $10 +LDA.b GameMode CMP.w #$030E : BEQ .new ; opening dungeon map CMP.w #$070E : BEQ .new ; opening overworld map .original - - LDA [$00] - STA $7EC300, X - STA $7EC500, X - INC $00 : INC $00 + LDA.b [Scrap00] + STA.l PaletteBufferAux, X + STA.l PaletteBuffer, X + INC.b Scrap00 : INC.b Scrap00 INX #2 DEY BPL - RTL .new - - LDA [$00] - STA $7EC500, X - INC $00 : INC $00 + LDA.b [Scrap00] + STA.l PaletteBuffer, X + INC.b Scrap00 : INC.b Scrap00 INX #2 DEY BPL - @@ -193,16 +183,16 @@ RTL ;-------------------------------------------------------------------------------- ; Fix pedestal pull overlay PedestalPullOverlayFix: -LDA.b #$09 : STA $039F, X ; the thing we wrote over -LDA $1B : BNE + - LDA $8A : CMP.b #$80 : BNE + - LDA $8C : CMP.b #$97 +LDA.b #$09 : STA.w AncillaGeneral, X ; the thing we wrote over +LDA.b IndoorsFlag : BNE + + LDA.b OverworldIndex : CMP.b #$80 : BNE + + LDA.b OverlayID : CMP.b #$97 + RTL ;-------------------------------------------------------------------------------- FixJingleGlitch: - LDA.b $11 + LDA.b GameSubMode BEQ .set_doors LDA.l AllowAccidentalMajorGlitch @@ -210,7 +200,7 @@ FixJingleGlitch: .set_doors LDA.b #$05 - STA.b $11 + STA.b GameSubMode .exit RTL @@ -222,7 +212,36 @@ pushpc pullpc ;-------------------------------------------------------------------------------- SetOverworldTransitionFlags: - LDA #$01 - STA $0ABF ; used by witch - STA $021B ; used by race game + LDA.b #$01 + STA.w OWTransitionFlag + STA.w RaceGameFlag RTL +;-------------------------------------------------------------------------------- +ParadoxCaveGfxFix: + ; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF) + LDA.b IndoorsFlag : BEQ .uploadLine + LDX.b RoomIndex : CPX.w #$00FF : BNE .uploadLine + LDX.b PreviousRoom : CPX.w #$00EF : BNE .uploadLine + + ;Ignore uploading four specific lines of tiles to VRAM + LDX.w VRAMUploadAddress + ; Line 1 + CPX.w #$1800 : BEQ .skipMostOfLine + ; Line 2 + CPX.w #$1A00 : BEQ .skipMostOfLine + ; Line 3 + CPX.w #$1C00 : BEQ .uploadLine + ; Line 4 + CPX.w #$1E00 : BEQ .uploadLine + +.uploadLine + LDA.b #$01 : STA.w MDMAEN + +.skipLine + RTL + +.skipMostOfLine + ; Set line length to 192 bytes (the first 6 8x8 tiles in the line) + LDX.w #$00C0 : STX.w DAS0L + BRA .uploadLine +;-------------------------------------------------------------------------------- diff --git a/catfish.asm b/catfish.asm deleted file mode 100644 index 4754600..0000000 --- a/catfish.asm +++ /dev/null @@ -1,34 +0,0 @@ -;================================================================================ -; Randomize Catfish -;-------------------------------------------------------------------------------- -!HEART_REDRAW = "$7F5000" -LoadCatfishItemGFX: - LDA.l $1DE185 ; location randomizer writes catfish item to - JML PrepDynamicTile -;-------------------------------------------------------------------------------- -DrawThrownItem: - LDA $8A : CMP.b #$81 : BNE .catfish - - .zora - LDA.b #$01 : STA !HEART_REDRAW - LDA.l $1DE1C3 ; location randomizer writes zora item to - BRA .draw - - .catfish - LDA.l $1DE185 ; location randomizer writes catfish item to - - .draw - JML DrawDynamicTile -;-------------------------------------------------------------------------------- -MarkThrownItem: - JSL Link_ReceiveItem ; thing we wrote over - - LDA $8A : CMP.b #$81 : BNE .catfish - - .zora - JML ItemSet_ZoraKing - - .catfish - JML ItemSet_Catfish - -;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/clock.asm b/clock.asm deleted file mode 100644 index 4e853d1..0000000 --- a/clock.asm +++ /dev/null @@ -1,248 +0,0 @@ -;-------------------------------------------------------------------------------- -; http://problemkaputt.de/fullsnes.htm -; 2800h-2801h S-RTC Real Time Clock I/O Ports -; cartridge type change from #$02 to #$55 to enable S-RTC -; SNES Cart S-RTC (Realtime Clock) (1 game) -; -; PCB "SHVC-LJ3R-01" with 24pin "Sharp S-RTC" chip. Used only by one japanese game: -; Dai Kaiju Monogatari 2 (1996) Birthday/Hudson Soft (JP) -; -; S-RTC I/O Ports -; 002800h S-RTC Read (R) -; 002801h S-RTC Write (W) -; Both registers are 4bits wide. When writing: Upper 4bit should be zero. When reading: Upper 4bit should be masked-off (they do possibly contain garbage, eg. open-bus). -; -; S-RTC Communication -; The sequence for setting, and then reading the time is: -; Send <0Eh,04h,0Dh,0Eh,00h,Timestamp(12 digits),0Dh> to [002801h] -; If ([002800h] AND 0F)=0Fh then read -; If ([002800h] AND 0F)=0Fh then read -; If ([002800h] AND 0F)=0Fh then read -; If ([002800h] AND 0F)=0Fh then read -; etc. -; The exact meaning of the bytes is unknown. 0Eh/0Dh seems to invoke/terminate commands, 04h might be some configuration stuff (like setting 24-hour mode). 00h is apparently the set-time command. There might be further commands (such like setting interrupts, alarm, 12-hour mode, reading battery low & error flags, etc.). When reading, 0Fh seems to indicate sth like "time available". -; The 12/13-digit "SSMMHHDDMYYY(D)" Timestamps are having the following format: -; Seconds.lo (BCD, 0..9) -; Seconds.hi (BCD, 0..5) -; Minutes.lo (BCD, 0..9) -; Minutes.hi (BCD, 0..5) -; Hours.lo (BCD, 0..9) -; Hours.hi (BCD, 0..2) -; Day.lo (BCD, 0..9) -; Day.hi (BCD, 0..3) -; Month (HEX, 01h..0Ch) -; Year.lo (BCD, 0..9) -; Year.hi (BCD, 0..9) -; Century (HEX, 09h..0Ah for 19xx..20xx) -; When READING the time, there is one final extra digit (the existing software doesn't transmit that extra digit on WRITING, though maybe it's possible to do writing, too): -; Day of Week? (0..6) (unknown if RTC assigns sth like 0=Sunday or 0=Monday) -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -macro A_x10() - ASL #1 : PHA - ASL #2 : !ADD 1,s - STA 1,s : PLA -endmacro -;-------------------------------------------------------------------------------- -macro A_x24() - ASL #3 : PHA - ASL #1 : !ADD 1,s - STA 1,s : PLA -endmacro -;-------------------------------------------------------------------------------- -macro A_x60() - ASL #2 : PHA - ASL #4 : !SUB 1,s - STA 1,s : PLA -endmacro -;-------------------------------------------------------------------------------- -macro Clock_ReadBCD() - LDA $002800 : PHA - LDA $002800 : %A_x10() : !ADD 1,s - STA 1,s : PLA -endmacro -;-------------------------------------------------------------------------------- - -Clock_Test: - JSL.l Clock_Init - JML.l Clock_IsSupported - -;-------------------------------------------------------------------------------- -; Clock_Init -;-------------------------------------------------------------------------------- -Clock_Init: - LDA.b #$0E : STA $002801 - LDA.b #$04 : STA $002801 - LDA.b #$0D : STA $002801 - LDA.b #$0E : STA $002801 - LDA.b #$00 : STA $002801 - - LDA.b #$00 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$01 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$01 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$00 : STA $002801 - LDA.b #$0A : STA $002801 - - LDA.b #$0D : STA $002801 -RTL -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; Clock_IsSupported -;-------------------------------------------------------------------------------- -; Input: None (8-bit accumulator) -;-------------------------------------------------------------------------------- -; Output: -; Carry - unset if unsupported, set if supported -; Zero - Undefined -;-------------------------------------------------------------------------------- -; Side Effects: -; S-RTC is ready for reading upon exit if supported -;-------------------------------------------------------------------------------- -Clock_IsSupported: - PHA : PHX - LDX #$00; - - - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .done ; check for clock chip ready signal - CPX.b #$0E : BCC ++ : CLC : BRA .done ; if we've read 14 bytes with no success, unset carry and exit - ++ INX - BRA - - .done - PLX : PLA -RTL -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; Clock_QuickStamp -;-------------------------------------------------------------------------------- -; Input: None -;-------------------------------------------------------------------------------- -; Output: -; $00.b - 24-bit timestamp (low) -; $01.b - 24-bit timestamp (mid) -; $02.b - 24-bit timestamp (high) -; $03.b - zero -; Carry - Unset if error, Set if success -; Zero - Undefined -;-------------------------------------------------------------------------------- -; Side Effects: -; Requires Mode-7 Matrix Registers -;-------------------------------------------------------------------------------- -Clock_QuickStamp: - PHA : PHX : PHP - SEP #$30 ; set 8-bit accumulator and index registers - LDX #$00; - - - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit - INX - BRA - - SEC ; indicate success - - .ready - %Clock_ReadBCD() : STA $00 ; seconds - %Clock_ReadBCD() : STA $01 ; minutes - %Clock_ReadBCD() : STA $02 ; hours - %Clock_ReadBCD() : STA $03 ; days - - REP $20 ; set 16-bit accumulator - LDA $01 : AND #$00FF : %A_x60() ; convert minutes to seconds - STZ $01 : !ADD $00 : STA $00 ; store running total seconds to $00 - - LDA $03 : AND #$00FF : %A_x24() ; convert days to hours - STZ $03 : !ADD $02 ; get total hours - %A_x60() ; get total minutes - - LDY #$60 - JSL.l Multiply_A16Y8 - STY $02 : STZ $03 - !ADD $00 : BCC + : INC $02 : + - - .done - PLP : PLX : PLA -RTL -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; Multiply_A16Y8: -;-------------------------------------------------------------------------------- -; Expects: -; Accumulator - 16-bit -; Index Registers - 8-bit -;-------------------------------------------------------------------------------- -; Notes: -; Found a (wrong) version of this on wikibooks. This is cleaned up and fixed. -;-------------------------------------------------------------------------------- -Multiply_A16Y8: - SEP #$20 ; set 8-bit accumulator - STY $4202 - STA $4203 - NOP #4 - LDA $4216 - LDY $4217 - XBA - STA $4203 - NOP #2 - TYA - CLC - ADC $4216 - LDY $4217 - BCC .carry_bit - INY -.carry_bit: - XBA - REP #$20 ; set 16-bit accumulator -RTL -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; Clock_GetTime -;-------------------------------------------------------------------------------- -; Input: None -;-------------------------------------------------------------------------------- -; Output: -; $00.b - Seconds -; $01.b - Minutes -; $02.b - Hours -; $03.b - Days -; $04.b - Months -; $05.w - Years -; Carry - Unset if error, Set if success -; Zero - Undefined -;-------------------------------------------------------------------------------- -Clock_GetTime: - PHA : PHX : PHY : PHP - SEP #$30 ; set 8-bit accumulator and index registers - LDX #$00; - - - LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal - CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit - INX - BRA - - SEC ; indicate success - - .ready - %Clock_ReadBCD() : STA $00 ; seconds - %Clock_ReadBCD() : STA $01 ; minutes - %Clock_ReadBCD() : STA $02 ; hours - %Clock_ReadBCD() : STA $03 ; days - LDA $002800 : STA $04 ; months - %Clock_ReadBCD() : STA $05 ; years - LDA $002800 : STA $06 ; century - - REP $20 ; set 16-bit accumulator - STA $06 : AND #$00FF : %A_x10() : %A_x10() : !ADD #1000 ; multiply century digit by 100 and add 1000 - STZ $06 : !ADD $05 : STA $05 ; add lower 2 digits of the year and store - - .done - PLP : PLY : PLX : PLA -RTL -;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/compasses.asm b/compasses.asm index 99622e2..b9b418a 100644 --- a/compasses.asm +++ b/compasses.asm @@ -1,19 +1,15 @@ -;-------------------------------------------------------------------------------- -; $7F5010 - Scratch Space -;-------------------------------------------------------------------------------- - DrawDungeonCompassCounts: - LDX $1B : BNE + : RTL : + ; Skip if outdoors + LDX.b IndoorsFlag : BNE + : RTL : + ; Skip if outdoors ; extra hard safeties for getting dungeon ID to prevent crashes PHA - LDA.w $040C : AND.w #$00FE : TAX ; force dungeon ID to be multiple of 2 + 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 BIT.w #$0002 : BNE ++ ; if CompassMode==2, we don't check for the compass - LDA CompassField : AND.l DungeonItemMasks, X ; Load compass values to A, mask with dungeon item masks + 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 ++ @@ -21,23 +17,23 @@ DrawDungeonCompassCounts: BNE + INC + - LDA.l CompassTotalsWRAM, X : AND #$00FF + LDA.l CompassTotalsWRAM, X : AND.w #$00FF SEP #$20 JSR HudHexToDec2Digit REP #$20 PHX - LDX.b $06 : TXA : ORA #$2400 : STA $7EC79A - LDX.b $07 : TXA : ORA #$2400 : STA $7EC79C + LDX.b Scrap06 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$9A + LDX.b Scrap07 : TXA : ORA.w #$2400 : STA.l HUDTileMapBuffer+$9C PLX - LDA DungeonLocationsChecked, X : AND #$00FF + LDA.l DungeonLocationsChecked, X : AND.w #$00FF SEP #$20 JSR HudHexToDec2Digit REP #$20 - LDX.b $06 : TXA : ORA #$2400 : STA $7EC794 ; Draw the item count - LDX.b $07 : TXA : ORA #$2400 : STA $7EC796 + 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 $7EC798 ; draw the slash + LDA.w #$2830 : STA.l HUDTileMapBuffer+$98 ; draw the slash .done RTL @@ -47,10 +43,10 @@ DungeonItemMasks: ; these are dungeon correlations to $7EF364 - $7EF369 so it kn dw $0080, $0040, $0020, $0010, $0008, $0004 ;-------------------------------------------------------------------------------- InitCompassTotalsRAM: - LDX #$00 + LDX.b #$00 - - LDA CompassTotalsROM, X : STA CompassTotalsWRAM, X + LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X INX - CPX #$0F : !BLT - + CPX.b #$0F : !BLT - RTL diff --git a/compression.asm b/compression.asm deleted file mode 100644 index 454e96a..0000000 --- a/compression.asm +++ /dev/null @@ -1,29 +0,0 @@ -;-------------------------------------------------------------------------------- -ParadoxCaveGfxFix: - ; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF) - LDA $1B : BEQ .uploadLine - LDX $A0 : CPX #$00FF : BNE .uploadLine - LDX $A2 : CPX #$00EF : BNE .uploadLine - - ;Ignore uploading four specific lines of tiles to VRAM - LDX $0118 - ; Line 1 - CPX #$1800 : BEQ .skipMostOfLine - ; Line 2 - CPX #$1A00 : BEQ .skipMostOfLine - ; Line 3 - CPX #$1C00 : BEQ .uploadLine - ; Line 4 - CPX #$1E00 : BEQ .uploadLine - -.uploadLine - LDA.b #$01 : STA $420B - -.skipLine - RTL - -.skipMostOfLine - ; Set line length to 192 bytes (the first 6 8x8 tiles in the line) - LDX.w #$00C0 : STX $4305 - BRA .uploadLine -;-------------------------------------------------------------------------------- diff --git a/contrib.asm b/contrib.asm deleted file mode 100644 index 52adbcd..0000000 --- a/contrib.asm +++ /dev/null @@ -1,182 +0,0 @@ -;================================================================ -; Contributor: Myramong -;================================================================ -;Sprite_ShowMessageFromPlayerContact_Edit: -;{ -; STZ $1CE8 -; JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC .dont_show -; -; LDA $4D : CMP.b #$02 : BEQ .dont_show -; -; JSL.l Sprite_DirectionToFacePlayerLong : TYA : EOR.b #$03 -; SEC -;RTL -;.dont_show -; LDA $0DE0, X -; CLC -;RTL -;} -;================================================================ -;Sprite_ShowSolicitedMessageIfPlayerFacing_Edit: -;{ -; JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha -; JSL.l Sprite_CheckIfPlayerPreoccupied : BCS .alpha -; LDA $F6 : BPL .alpha -; LDA $0F10, X : BNE .alpha -; -; LDA $4D : CMP.b #$02 : BEQ .alpha -; -; STZ $1CE8 ; set text choice to 1st option (usually yes/confirm/etc) -; JSL.l Sprite_DirectionToFacePlayerLong : PHX : TYX -; -; ; Make sure that the sprite is facing towards the player, otherwise -; ; talking can't happen. (What sprites actually use this???) -; LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other -; PHY -; LDA.b #$40 : STA $0F10, X -; PLA : EOR.b #$03 -; SEC -;RTL -;.not_facing_each_other -;.alpha -; LDA $0DE0, X -; CLC -;RTL -;} -;================================================================ -;OldMountainMan_TransitionFromTagalong_Edit: -;{ -; PHA -; -; LDA.b #$AD : JSL Sprite_SpawnDynamically -; -; PLA : PHX : TAX -; -; LDA $1A64, X : AND.b #$03 : STA $0EB0, Y -; STA $0DE0, Y -; -; LDA $1A00, X : CLC : ADC.b #$02 : STA $0D00, Y -; LDA $1A14, X : ADC.b #$00 : STA $0D20, Y -; -; LDA $1A28, X : CLC : ADC.b #$02 : STA $0D10, Y -; LDA $1A3C, X : ADC.b #$00 : STA $0D30, Y -; -; LDA $EE : STA $0F20, Y -; -; LDA.b #$01 : STA $0BA0, Y -; STA $0E80, Y -; -; LDA.b #$01 : STA $02E4 ; OldMountainMan_FreezePlayer -; STA $037B ; ^ -; -; PLX -; -; LDA.b #$00 : STA FollowerIndicator -; -; STZ $5E -; -; JML $09A6B6 ; <- 4A6B6 tagalong.asm:1194 (SEP #$30 : RTS) -;} -;================================================================ -Sprite_ShowSolicitedMessageIfPlayerFacing_Alt: -{ - STA $1CF0 - STY $1CF1 - - JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha - JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha - - LDA $F6 : BPL .alpha - LDA $0F10, X : BNE .alpha - LDA $4D : CMP.b #$02 : BEQ .alpha - - JSL Sprite_DirectionToFacePlayerLong : PHX : TYX - - ; Make sure that the sprite is facing towards the player, otherwise - ; talking can't happen. (What sprites actually use this???) - LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other - - PHY - - LDA $1CF0 - LDY $1CF1 - - ; Check what room we're in so we know which npc we're talking to - LDA.b $A0 : CMP #$05 : BEQ .SahasrahlaDialogs - CMP #$1C : BEQ .BombShopGuyDialog - BRA .SayNothing - - .SahasrahlaDialogs - REP #$20 : LDA.l MapReveal_Sahasrahla : ORA MapOverlay : STA MapOverlay : SEP #$20 - JSL DialogSahasrahla : BRA .SayNothing - - .BombShopGuyDialog - REP #$20 : LDA.l MapReveal_BombShop : ORA MapOverlay : STA MapOverlay : SEP #$20 - JSL DialogBombShopGuy - - .SayNothing - - LDA.b #$40 : STA $0F10, X - - PLA : EOR.b #$03 - - SEC - - RTL - -.not_facing_each_other -.alpha - - LDA $0DE0, X - - CLC - - RTL -} -;================================================================ -Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage: -{ - PHY - PHA - - JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha - JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha - - LDA $F6 : BPL .alpha - LDA $0F10, X : BNE .alpha - LDA $4D : CMP.b #$02 : BEQ .alpha - - JSL Sprite_DirectionToFacePlayerLong : PHX : TYX - - ; Make sure that the sprite is facing towards the player, otherwise - ; talking can't happen. (What sprites actually use this???) - LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other - - PLA : XBA : PLA - - PHY - - TAY : XBA - - JSL Sprite_ShowMessageUnconditional - - LDA.b #$40 : STA $0F10, X - - PLA : EOR.b #$03 - - SEC - - RTL - -.not_facing_each_other -.alpha - PLY - PLA - - LDA $0DE0, X - - CLC - - RTL -} -;================================================================ diff --git a/controllerjank.asm b/controllerjank.asm index b3ecf79..5ff3da7 100644 --- a/controllerjank.asm +++ b/controllerjank.asm @@ -4,29 +4,28 @@ ;-------------------------------------------------------------------------------- ; Filtered Joypad 1 Register: [AXLR | ????] ; Filtered Joypad 1 Register: [BYST | udlr] [AXLR | ????] -!INVERT_DPAD = "$7F50CB" InvertDPad: LDA.l OneMindPlayerCount : BEQ .crowd_control - LDA.l !ONEMIND_ID + LDA.l OneMindId AND.b #$03 TAX LDA.l .onemind_controller_offset, X TAX - LDA.w $4218,X : STA.w $00 - LDA.w $4219,X : STA.w $01 + LDA.w JOY1L,X : STA.w Scrap00 + LDA.w JOY1H,X : STA.w Scrap01 - LDA #$80 : STA $4201 ; reset this so latch can read it, otherwise RNG breaks + LDA.b #$80 : STA.w WRIO ; reset this so latch can read it, otherwise RNG breaks JML.l InvertDPadReturn .crowd_control - LDA !INVERT_DPAD : BNE + + LDA.l ControllerInverter : BNE + - LDA $4218 : STA $00 - LDA $4219 : STA $01 + LDA.w JOY1L : STA.b Scrap00 + LDA.w JOY1H : STA.b Scrap01 JML.l InvertDPadReturn + DEC : BEQ .dpadOnly @@ -34,47 +33,47 @@ InvertDPad: DEC : BEQ .invertBoth .swapSides REP #$20 ; set 16-bit accumulator - LDA $4218 + LDA.w JOY1L BIT.w #$0840 : BEQ + : EOR.w #$0840 : + ; swap X/up BIT.w #$0180 : BEQ + : EOR.w #$0180 : + ; swap A/right BIT.w #$4200 : BEQ + : EOR.w #$4200 : + ; swap Y/left BIT.w #$8400 : BEQ + : EOR.w #$8400 : + ; swap B/down - STA $00 + STA.b Scrap00 SEP #$20 ; set 8-bit accumulator JML.l InvertDPadReturn .invertBoth REP #$20 ; set 16-bit accumulator - LDA $4218 + LDA.w JOY1L BIT.w #$8040 : BEQ + : EOR.w #$8040 : + ; swap X/B BIT.w #$4080 : BEQ + : EOR.w #$4080 : + ; swap Y/A BIT.w #$0C00 : BEQ + : EOR.w #$0C00 : + ; swap up/down BIT.w #$0300 : BEQ + : EOR.w #$0300 : + ; swap left/right - STA $00 + STA.b Scrap00 SEP #$20 ; set 8-bit accumulator JML.l InvertDPadReturn .buttonsOnly REP #$20 ; set 16-bit accumulator - LDA $4218 + LDA.w JOY1L BIT.w #$8040 : BEQ + : EOR.w #$8040 : + ; swap X/B BIT.w #$4080 : BEQ + : EOR.w #$4080 : + ; swap Y/A - STA $00 + STA.b Scrap00 SEP #$20 ; set 8-bit accumulator JML.l InvertDPadReturn .dpadOnly - LDA $4218 : STA $00 - LDA $4219 + LDA.w JOY1L : STA.b Scrap00 + LDA.w JOY1H BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right - STA $01 + STA.b Scrap01 JML.l InvertDPadReturn .onemind_controller_offset - db 0 ; player 0 - $4218 - joy1d1 - db 0 ; player 1 - $4218 - joy1d1 - db 2 ; player 2 - $421A - joy2d1 - db 6 ; player 3 - $421E - joy2d2 - db 2 ; player 4 - $421A - joy2d1 - db 6 ; player 5 - $421E - joy2d2 + db 0 ; player 0 - JOY1L - joy1d1 + db 0 ; player 1 - JOY1L - joy1d1 + db 2 ; player 2 - JOY2L - joy2d1 + db 6 ; player 3 - JOY4L - joy2d2 + db 2 ; player 4 - JOY2L - joy2d1 + db 6 ; player 5 - JOY4L - joy2d2 @@ -86,12 +85,12 @@ HandleOneMindController: REP #$20 - LDA.l !ONEMIND_TIMER + LDA.l OneMindTimerRAM DEC BPL .no_switch SEP #$20 - LDA.l !ONEMIND_ID + LDA.l OneMindId INC CMP.l OneMindPlayerCount BCC .no_wrap @@ -99,29 +98,26 @@ HandleOneMindController: LDA.b #$01 ; reset to player 1 .no_wrap - STA.l !ONEMIND_ID + STA.l OneMindId REP #$20 - LDA.l OneMindTimer + LDA.l OneMindTimerInit .no_switch - STA.l !ONEMIND_TIMER + STA.l OneMindTimerRAM SEP #$20 - LDA.l !ONEMIND_ID + LDA.l OneMindId CMP.b #$04 ; is it player 4 or 5? BCC .no_multitap_switch - STZ.w $4201 + STZ.w WRIO .no_multitap_switch .no_onemind - STZ.b $12 + STZ.b NMIDoneFlag JML $008034 ; reset frame loop - - - diff --git a/crypto.asm b/crypto.asm index 120344f..4f0d5f0 100644 --- a/crypto.asm +++ b/crypto.asm @@ -1,21 +1,6 @@ -; $7F50D0 - $7F50FF - Block Cypher Parameters -; $7F5100 - $7F51FF - Block Cypher Buffer -!v = "$7F5100" -!n = "$04" -!MXResult = "$08" ; an alternate name for the lower 32 bits of dpScratch -!dpScratch = "$08" -!keyBase = "$7F50D0" - - -!y = "$7F50E0" -!z = "$7F50E4" -!sum = "$7F50E8" - -!p = "$7F50EC" -!rounds = "$06" -!e = "$7F50F0" - -!upperScratch = "$7F50F2" +; Scrap04 used for n +; Scrap06 used for rounds +; Scrap08 use for dpScratch/MXResult (lower 32 of dpScratch) CryptoDelta: dd #$9e3779b9 @@ -35,164 +20,144 @@ macro ASL32Single(value) ; ROL handles the carry from the lower byte for us endmacro -;macro LSR32(value,k) -; LDX.b -; ?loop: -; %LSR32Single(,) -; DEX : CPX.b #$00 : BNE ?loop -;endmacro - -;macro ASL32(value,k) -; LDX.b -; ?loop: -; %LSR32Single(,) -; DEX : CPX.b #$00 : BNE ?loop -;endmacro - CryptoMX: PHX ; upperScratch = (z>>5 ^ y <<2) - LDA.w !z : STA.b !dpScratch - LDA.w !z+2 : STA.b !dpScratch+2 - %LSR32Single(!dpScratch) - %LSR32Single(!dpScratch) - %LSR32Single(!dpScratch) - %LSR32Single(!dpScratch) - %LSR32Single(!dpScratch) - ;%LSR32(!dpScratch,#$05) + LDA.w z : STA.b Scrap08 + LDA.w z+2 : STA.b Scrap08+2 + %LSR32Single(Scrap08) + %LSR32Single(Scrap08) + %LSR32Single(Scrap08) + %LSR32Single(Scrap08) + %LSR32Single(Scrap08) + ;%LSR32(Scrap08,#$05) - LDA.w !y : STA.b !dpScratch+4 - LDA.w !y+2 : STA.b !dpScratch+6 - %ASL32Single(!dpScratch+4) - %ASL32Single(!dpScratch+4) - ;%ASL32(!dpScratch+4,#$02) + LDA.w y : STA.b Scrap08+4 + LDA.w y+2 : STA.b Scrap08+6 + %ASL32Single(Scrap08+4) + %ASL32Single(Scrap08+4) + ;%ASL32(Scrap08+4,#$02) - LDA.b !dpScratch : EOR.b !dpScratch+4 : STA.w !upperScratch - LDA.b !dpScratch+2 : EOR.b !dpScratch+6 : STA.w !upperScratch+2 + LDA.b Scrap08 : EOR.b Scrap08+4 : STA.w CryptoScratch + LDA.b Scrap08+2 : EOR.b Scrap08+6 : STA.w CryptoScratch+2 ;================================ ; upperscratch2 = (y>>3^z<<4) - LDA.w !z : STA.b !dpScratch - LDA.w !z+2 : STA.b !dpScratch+2 - %ASL32Single(!dpScratch) - %ASL32Single(!dpScratch) - %ASL32Single(!dpScratch) - %ASL32Single(!dpScratch) - ;%ASL32(!dpScratch,#$04) + LDA.w z : STA.b Scrap08 + LDA.w z+2 : STA.b Scrap08+2 + %ASL32Single(Scrap08) + %ASL32Single(Scrap08) + %ASL32Single(Scrap08) + %ASL32Single(Scrap08) + ;%ASL32(Scrap08,#$04) - LDA.w !y : STA.b !dpScratch+4 - LDA.w !y+2 : STA.b !dpScratch+6 - %LSR32Single(!dpScratch+4) - %LSR32Single(!dpScratch+4) - %LSR32Single(!dpScratch+4) - ;%LSR32(!dpScratch+4,#$03) + LDA.w y : STA.b Scrap08+4 + LDA.w y+2 : STA.b Scrap08+6 + %LSR32Single(Scrap08+4) + %LSR32Single(Scrap08+4) + %LSR32Single(Scrap08+4) + ;%LSR32(Scrap08+4,#$03) - LDA.b !dpScratch : EOR.b !dpScratch+4 : STA.w !upperScratch+4 - LDA.b !dpScratch+2 : EOR.b !dpScratch+6 : STA.w !upperScratch+6 + LDA.b Scrap08 : EOR.b Scrap08+4 : STA.w CryptoScratch+4 + LDA.b Scrap08+2 : EOR.b Scrap08+6 : STA.w CryptoScratch+6 ;================================ ; upperscratch = upperscratch + upperscratch2 ( == (z>>5^y<<2) + (y>>3^z<<4) ) - LDA.w !upperScratch : !ADD.w !upperScratch+4 : STA.w !upperScratch - LDA.w !upperScratch+2 : ADC.w !upperScratch+6 : STA.w !upperScratch+2 + LDA.w CryptoScratch : !ADD.w CryptoScratch+4 : STA.w CryptoScratch + LDA.w CryptoScratch+2 : ADC.w CryptoScratch+6 : STA.w CryptoScratch+2 ;================================ ; dpscratch = sum^y - LDA.w !sum : EOR.w !y : STA.b !dpScratch - LDA.w !sum+2 : EOR.w !y+2 : STA.b !dpScratch+2 + LDA.w Sum : EOR.w y : STA.b Scrap08 + LDA.w Sum+2 : EOR.w y+2 : STA.b Scrap08+2 ;================================ ; dpscratch2 = (k[p&3^e]^z) - LDA.w !p : AND.w #$0003 : EOR.w !e : ASL #2 : TAX ; put (p&3)^e into X - LDA.w !keyBase, X : EOR.w !z : STA.b !dpScratch+4 - LDA.w !keyBase+2, X : EOR.w !z+2 : STA.b !dpScratch+6 + LDA.w p : AND.w #$0003 : EOR.w e : ASL #2 : TAX ; put (p&3)^e into X + LDA.w KeyBase, X : EOR.w z : STA.b Scrap08+4 + LDA.w KeyBase+2, X : EOR.w z+2 : STA.b Scrap08+6 ;================================ ; upperscratch2 = dpscratch + dpscratch2 (== (sum^y) + (k[p&3^e]^z)) - LDA.b !dpScratch : !ADD.b !dpScratch+4 : STA.w !upperScratch+4 - LDA.b !dpScratch+2 : ADC.b !dpScratch+6 : STA.w !upperScratch+6 + LDA.b Scrap08 : !ADD.b Scrap08+4 : STA.w CryptoScratch+4 + LDA.b Scrap08+2 : ADC.b Scrap08+6 : STA.w CryptoScratch+6 ;================================ ; MXResult = uppserscratch ^ upperscratch2 - LDA.w !upperScratch : EOR.w !upperScratch+4 : STA.b !MXResult - LDA.w !upperScratch+2 : EOR.w !upperScratch+6 : STA.b !MXResult+2 + LDA.w CryptoScratch : EOR.w CryptoScratch+4 : STA.b Scrap08 + LDA.w CryptoScratch+2 : EOR.w CryptoScratch+6 : STA.b Scrap08+2 PLX RTS -;!DIVIDEND_LOW = $4204 -;!DIVIDEND_HIGH = $4205 -;!DIVISOR = $4206 -;!QUOTIENT_LOW = $4214 -;!QUOTIENT_HIGH = $4215 - XXTEA_Decode: PHP : PHB SEP #$30 ; set 8-bit accumulator and index LDA.b #$7F : PHA : PLB - STZ.b !n+1 ; set upper byte of n to be zero, so it can safely be accessed in 16-bit mode + STZ.b Scrap04+1 ; set upper byte of n to be zero, so it can safely be accessed in 16-bit mode ; search for lookup table index to avoid division and multiplication LDX.b #0 - LDA.l .n_lookup, X - CMP.b !n : !BLT + + CMP.b Scrap04 : !BLT + INX BRA - + ; rounds = 6 + 52/n; - LDA.l .round_counts, X : STA.b !rounds : STZ.b !rounds+1 + LDA.l .round_counts, X : STA.b Scrap06 : STZ.b Scrap06+1 REP #$20 ; set 16-bit accumulator ; sum = rounds*DELTA; TXA : ASL #2 : TAX - LDA.l .initial_sums, X : STA.w !sum - LDA.l .initial_sums+2, X : STA.w !sum+2 + LDA.l .initial_sums, X : STA.w Sum + LDA.l .initial_sums+2, X : STA.w Sum+2 ; y = v[0]; - LDA.w !v : STA.w !y - LDA.w !v+2 : STA.w !y+2 + LDA.w v : STA.w y + LDA.w v+2 : STA.w y+2 --- - LDA.w !sum : LSR #2 : AND.w #$0003 : STA.w !e ; e = (sum >> 2) & 3; + LDA.w Sum : LSR #2 : AND.w #$0003 : STA.w e ; e = (sum >> 2) & 3; - LDA.b !n : DEC : STA.w !p + LDA.b Scrap04 : DEC : STA.w p -- BEQ + ; for (p=n-1; p>0; p--) { ; z = v[p-1]; ASL #2 : TAX - LDA.w !v-4, X : STA.w !z - LDA.w !v-4+2, X : STA.w !z+2 + LDA.w v-4, X : STA.w z + LDA.w v-4+2, X : STA.w z+2 ; y = v[p] -= MX; JSR CryptoMX - LDA.w !p : ASL #2 : TAX - LDA.w !v, X : !SUB.b !MXResult : STA.w !v, X : STA.w !y - LDA.w !v+2, X : SBC.b !MXResult+2 : STA.w !v+2, X : STA.w !y+2 + LDA.w p : ASL #2 : TAX + LDA.w v, X : !SUB.b Scrap08 : STA.w v, X : STA.w y + LDA.w v+2, X : SBC.b Scrap08+2 : STA.w v+2, X : STA.w y+2 - LDA.w !p : DEC : STA.w !p : BRA -- ; } + LDA.w p : DEC : STA.w p : BRA -- ; } + ; z = v[n-1]; - LDA.b !n : DEC : ASL #2 : TAX - LDA.w !v, X : STA.w !z - LDA.w !v+2, X : STA.w !z+2 + LDA.b Scrap04 : DEC : ASL #2 : TAX + LDA.w v, X : STA.w z + LDA.w v+2, X : STA.w z+2 ; y = v[0] -= MX; JSR CryptoMX - LDA.w !v : !SUB.b !MXResult : STA.w !v : STA.w !y - LDA.w !v+2 : SBC.b !MXResult+2 : STA.w !v+2 : STA.w !y+2 + LDA.w v : !SUB.b Scrap08 : STA.w v : STA.w y + LDA.w v+2 : SBC.b Scrap08+2 : STA.w v+2 : STA.w y+2 ; sum -= DELTA; - LDA.w !sum : !SUB.l CryptoDelta : STA.w !sum - LDA.w !sum+2 : SBC.l CryptoDelta+2 : STA.w !sum+2 + LDA.w Sum : !SUB.l CryptoDelta : STA.w Sum + LDA.w Sum+2 : SBC.l CryptoDelta+2 : STA.w Sum+2 - DEC !rounds : BEQ + : JMP --- : + ; } while (--rounds); + DEC.b Scrap06 : BEQ + : JMP --- : + ; } while (--rounds); PLB : PLP RTL @@ -243,69 +208,3 @@ db 32 ; n is 2 ;dd (23*$9e3779b9)&$ffffffff ; n is 3 dd (32*$9e3779b9)&$ffffffff ; n is 2 -;void btea(uint32_t *v, int n, uint32_t const key[4]) { -; uint32_t y, z, sum; -; unsigned p, rounds, e; - -; } else if (n < -1) { /* Decoding Part */ -; n = -n; -; rounds = 6 + 52/n; -; sum = rounds*DELTA; -; y = v[0]; -; do { -; e = (sum >> 2) & 3; -; for (p=n-1; p>0; p--) { -; z = v[p-1]; -; y = v[p] -= MX; -; } -; z = v[n-1]; -; y = v[0] -= MX; -; sum -= DELTA; -; } while (--rounds); -; } - -;BTEA will encode or decode n words as a single block where n > 1 -; -;v is the n word data vector -;k is the 4 word key -;n is negative for decoding -;if n is zero result is 1 and no coding or decoding takes place, otherwise the result is zero -;assumes 32 bit 'long' and same endian coding and decoding -;#include -;#define DELTA 0x9e3779b9 -;#define MX ((((z>>5)^(y<<2)) + ((y>>3)^(z<<4))) ^ ((sum^y) + (key[(p&3)^e] ^ z))) -; -;void btea(uint32_t *v, int n, uint32_t const key[4]) { -; uint32_t y, z, sum; -; unsigned p, rounds, e; -; if (n > 1) { /* Coding Part */ -; rounds = 6 + 52/n; -; sum = 0; -; z = v[n-1]; -; do { -; sum += DELTA; -; e = (sum >> 2) & 3; -; for (p=0; p> 2) & 3; -; for (p=n-1; p>0; p--) { -; z = v[p-1]; -; y = v[p] -= MX; -; } -; z = v[n-1]; -; y = v[0] -= MX; -; sum -= DELTA; -; } while (--rounds); -; } -;} diff --git a/cuccostorm.asm b/cuccostorm.asm index 2d40f39..d01f282 100644 --- a/cuccostorm.asm +++ b/cuccostorm.asm @@ -1,49 +1,35 @@ ;================================================================================ -!CUCCO_STORM = "$7F50C5" -!IS_INDOORS = "$7E001B" -!ENEMY_STATE_TABLE = "$7E0DD0" -!ENEMY_TYPE_TABLE = "$7E0E20" -!ENEMY_AUX1_TABLE = "$7E0DA0" -!ENEMY_AUX2_TABLE = "$7E0DB0" -!ENEMY_DIRECTION_TABLE = "$7E0EB0" -!CUCCO = "#$0B" -!INERT = "#$00" -!INIT = "#$08" -!ALIVE = "#$09" -!CUCCO_ENRAGED = "#$23" -!LINK_POS_Y_LOW = "$20" -!LINK_POS_Y_HIGH = "$21" -!LINK_POS_X_LOW = "$22" -!LINK_POS_X_HIGH = "$23" -!ENEMY_POS_Y_LOW = "$7E0D00" -!ENEMY_POS_X_LOW = "$7E0D10" -!ENEMY_POS_Y_HIGH = "$7E0D20" -!ENEMY_POS_X_HIGH = "$7E0D30" +!CUCCO = $0B +!INERT = $00 +!INIT = $08 +!ALIVE = $09 +!CUCCO_ENRAGED = $23 + CuccoStorm: - + SEP #$30 ; set 8-bit accumulator index registers - LDA.l !CUCCO_STORM : BEQ + ; only if storm is on - LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors + LDA.l CuccoStormer : BEQ + ; only if storm is on + LDA.b GameMode : CMP.b #$09 : BNE + ; only if outdoors LDA.l LoopFrames : AND.b #$7F : BNE + ; check every 128 frames - + - ;==== Find a Cucco - + LDY.b #$FF : PHY ; push "cucco not found" - + LDX.b #$00 : -- : CPX.b #$10 : !BGE .ldone - LDA.w !ENEMY_STATE_TABLE, X : CMP.b !ALIVE : BEQ +++ + LDA.w SpriteAITable, X : CMP.b #!ALIVE : BEQ +++ ; enemy not found - CMP.b !INERT : BNE ++ + CMP.b #!INERT : BNE ++ ; log inert enemy slot PLA : PHX BRA ++ +++ ; found an enemy - LDA.l !ENEMY_TYPE_TABLE, X : CMP.b !CUCCO : BNE ++ + LDA.l SpriteTypeTable, X : CMP.b #!CUCCO : BNE ++ ; it's a cucco TXY ; record where we found the living cucco in case we don't find any angry ones - LDA.w !ENEMY_AUX1_TABLE, X : CMP.b !CUCCO_ENRAGED : !BLT ++ + LDA.w SpriteAuxTable, X : CMP.b #!CUCCO_ENRAGED : !BLT ++ PLA : BRA + ; we found an angry cucco, done ++ : INX : BRA -- : .ldone @@ -53,22 +39,22 @@ CuccoStorm: ; we didn't find a cucco, so try to create one PLY CPY.b #$FF : BEQ + ; fail if no slots found - LDA.b !CUCCO : STA.w !ENEMY_TYPE_TABLE, Y - LDA.b !INIT : STA.w !ENEMY_STATE_TABLE, Y - LDA.b !LINK_POS_Y_LOW : STA.w !ENEMY_POS_Y_LOW, Y - LDA.b !LINK_POS_Y_HIGH : STA.w !ENEMY_POS_Y_HIGH, Y - LDA.b !LINK_POS_X_LOW : STA.w !ENEMY_POS_X_LOW, Y - LDA.b !LINK_POS_X_HIGH : STA.w !ENEMY_POS_X_HIGH, Y + LDA.b #!CUCCO : STA.w SpriteTypeTable, Y + LDA.b #!INIT : STA.w SpriteAITable, Y + LDA.b LinkPosY : STA.w SpritePosYLow, Y + LDA.b LinkPosY+1 : STA.w SpritePosYHigh, Y + LDA.b LinkPosX : STA.w SpritePosXLow, Y + LDA.b LinkPosX+1 : STA.w SpritePosXHigh, Y BRA +++ ++ PLA +++ - + ;==== Enrage a Cucco - - LDA.b !CUCCO_ENRAGED : STA.w !ENEMY_AUX1_TABLE, Y ; enrage the cucco - LDA.b #$00 : STA.w !ENEMY_AUX2_TABLE, Y : STA.w !ENEMY_DIRECTION_TABLE, Y - + + LDA.b #!CUCCO_ENRAGED : STA.w SpriteAuxTable, Y ; enrage the cucco + LDA.b #$00 : STA.w SpriteAuxTable+$10, Y : STA.w SpriteDirectionTable, Y + ;==== + RTL diff --git a/darkroomitems.asm b/darkroomitems.asm index a2d1474..41be787 100644 --- a/darkroomitems.asm +++ b/darkroomitems.asm @@ -1,6 +1,6 @@ CheckReceivedItemPropertiesBeforeLoad: - LDA $A0 : BEQ .normalCode - LDA $7EC005 : BNE .lightOff + LDA.b RoomIndex : BEQ .normalCode + LDA.l RoomFade : BNE .lightOff .normalCode LDA.l AddReceivedItemExpanded_properties, X ;Restore Rando Code RTL @@ -10,18 +10,18 @@ CheckReceivedItemPropertiesBeforeLoad: LDA.l AddReceivedItemExpanded_properties, X ; get palette REP #$30 - AND #$0007 ; mask out palette + AND.w #$0007 ; mask out palette ASL #5 ; multiply by 32 - ADC #$C610 ; offset to latter half + ADC.w #$C610 ; offset to latter half TAX ; give to destination - LDY #$C610 ; target palette SP0 colors 8-F + LDY.w #$C610 ; target palette SP0 colors 8-F - LDA #$000F ; 16 bytes + LDA.w #$000F ; 16 bytes MVN $7E, $7E ; move palette SEP #$30 PLB : PLY : PLX - INC $15 - LDA #$00 + INC.b NMICGRAM + LDA.b #$00 RTL diff --git a/darkworldspawn.asm b/darkworldspawn.asm index 3ec0293..98339a8 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -7,77 +7,77 @@ DarkWorldSaveFix: JML.l StatSaveCounter ;-------------------------------------------------------------------------------- DoWorldFix: - LDA InvertedMode : BEQ + + LDA.l InvertedMode : BEQ + JMP DoWorldFix_Inverted + LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check - LDA.l FollowerIndicator : CMP #$04 : BEQ .setLightWorld ; check if old man is following - LDA MirrorEquipment : BEQ .noMirror ; check if we have the mirror + LDA.l FollowerIndicator : CMP.b #$04 : BEQ .setLightWorld ; check if old man is following + LDA.l MirrorEquipment : BEQ .noMirror ; check if we have the mirror .skip_mirror_check ; alt entrance point - LDA ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive + LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .setLightWorld - LDA #$00 + LDA.b #$00 .noMirror - STA CurrentWorld ; set flag to light world - LDA FollowerIndicator : CMP #$07 : BNE .done : INC : STA FollowerIndicator ; convert frog to dwarf + STA.l CurrentWorld ; set flag to light world + LDA.l FollowerIndicator : CMP.b #$07 : BNE .done : INC : STA.l FollowerIndicator ; convert frog to dwarf .done RTL ;-------------------------------------------------------------------------------- SetDeathWorldChecked: - LDA InvertedMode : BEQ + + LDA.l InvertedMode : BEQ + JMP SetDeathWorldChecked_Inverted + - LDA $1B : BEQ .outdoors - LDA $040C : CMP #$FF : BNE .dungeon - LDA $A0 : ORA $A1 : BNE ++ - LDA GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon + LDA.b IndoorsFlag : BEQ .outdoors + LDA.w DungeonID : CMP.b #$FF : BNE .dungeon + LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++ + LDA.l GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors JMP DoWorldFix .dungeon - LDA Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon + LDA.l Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon JMP DoWorldFix_skip_mirror_check .pyramid - LDA #$40 : STA CurrentWorld ; set flag to dark world - LDA FollowerIndicator : CMP #$08 : BNE .done : DEC : STA FollowerIndicator : + ; convert dwarf to frog + LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world + LDA.l FollowerIndicator : CMP.b #$08 : BNE .done : DEC : STA.l FollowerIndicator : + ; convert dwarf to frog .done RTL ;================================================================================ DoWorldFix_Inverted: LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check - LDA.l FollowerIndicator : CMP #$04 : BEQ .setDarkWorld ; check if old man is following - LDA MirrorEquipment : BEQ .setDarkWorld ; check if we have the mirror + LDA.l FollowerIndicator : CMP.b #$04 : BEQ .setDarkWorld ; check if old man is following + LDA.l MirrorEquipment : BEQ .setDarkWorld ; check if we have the mirror .skip_mirror_check ; alt entrance point - LDA ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive + LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive .setDarkWorld - LDA #$40 : STA CurrentWorld ; set flag to dark world - LDA FollowerIndicator - CMP #$07 : BEQ .clear ; clear frog - CMP #$08 : BEQ .clear ; clear dwarf - consider flute implications + LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world + LDA.l FollowerIndicator + CMP.b #$07 : BEQ .clear ; clear frog + CMP.b #$08 : BEQ .clear ; clear dwarf - consider flute implications BRA .done .clear - LDA.b #$00 : STA FollowerIndicator ; clear follower + LDA.b #$00 : STA.l FollowerIndicator ; clear follower .done RTL ;-------------------------------------------------------------------------------- SetDeathWorldChecked_Inverted: - LDA $1B : BEQ .outdoors - LDA $040C : CMP #$FF : BNE .dungeon - LDA $A0 : ORA $A1 : BNE ++ - LDA GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon + LDA.b IndoorsFlag : BEQ .outdoors + LDA.w DungeonID : CMP.b #$FF : BNE .dungeon + LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++ + LDA.l GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon ++ .outdoors JMP DoWorldFix .dungeon - LDA Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon + LDA.l Bugfix_PreAgaDWDungeonDeathToFakeDW : BNE .done ; if the bugfix is enabled, we do nothing on death in dungeon JMP DoWorldFix_Inverted_skip_mirror_check .castle - LDA #$00 : STA CurrentWorld ; set flag to dark world - LDA FollowerIndicator : CMP #$07 : BNE + : LDA.b #$08 : STA FollowerIndicator : + ; convert frog to dwarf + LDA.b #$00 : STA.l CurrentWorld ; set flag to dark world + LDA.l FollowerIndicator : CMP.b #$07 : BNE + : LDA.b #$08 : STA.l FollowerIndicator : + ; convert frog to dwarf .done RTL ;================================================================================ @@ -85,20 +85,20 @@ RTL ;-------------------------------------------------------------------------------- FakeWorldFix: - LDA FixFakeWorld : BEQ + - LDA $8A : AND.b #$40 : STA CurrentWorld + LDA.l FixFakeWorld : BEQ + + LDA.b OverworldIndex : AND.b #$40 : STA.l CurrentWorld + RTL ;-------------------------------------------------------------------------------- MasterSwordFollowerClear: - LDA FollowerIndicator - CMP #$0E : BNE .exit ; clear master sword follower - LDA.b #$00 : STA FollowerIndicator ; clear follower + LDA.l FollowerIndicator + CMP.b #$0E : BNE .exit ; clear master sword follower + LDA.b #$00 : STA.l FollowerIndicator ; clear follower .exit RTL ;-------------------------------------------------------------------------------- FixAgahnimFollowers: - LDA.b #$00 : STA FollowerIndicator ; clear follower + LDA.b #$00 : STA.l FollowerIndicator ; clear follower JML PrepDungeonExit ; thing we wrote over ;-------------------------------------------------------------------------------- @@ -108,10 +108,10 @@ macro SetMinimum(base,filler,compare) ?done: endmacro RefreshRainAmmo: - LDA ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state + LDA.l ProgressIndicator : CMP.b #$01 : BEQ .rain ; check if we're in rain state RTL .rain - LDA StartingEntrance + LDA.l StartingEntrance + CMP.b #$03 : BNE + ; Uncle %SetMinimum(CurrentMagic,MagicFiller,RainDeathRefillMagic_Uncle) %SetMinimum(BombsEquipment,BombsFiller,RainDeathRefillBombs_Uncle) @@ -130,28 +130,25 @@ RefreshRainAmmo: .done RTL ;-------------------------------------------------------------------------------- -!INFINITE_ARROWS = "$7F50C8" -!INFINITE_BOMBS = "$7F50C9" -!INFINITE_MAGIC = "$7F50CA" SetEscapeAssist: - LDA ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state + LDA.l ProgressIndicator : CMP.b #$01 : BNE .no_train ; check if we're in rain state .rain LDA.l EscapeAssist - BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + - BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + - BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + + BIT.b #$04 : BEQ + : STA.l InfiniteArrows : + + BIT.b #$02 : BEQ + : STA.l InfiniteBombs : + + BIT.b #$01 : BEQ + : STA.l InfiniteArrows : + BRA ++ .no_train ; choo choo - LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : + - LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA !INFINITE_BOMBS : + - LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : + + LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA.l InfiniteMagic : + + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA.l InfiniteBombs : + + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : + ++ RTL ;-------------------------------------------------------------------------------- SetSilverBowMode: - LDA SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode - LDA BowEquipment : CMP.b #$3 : BCC + - SBC.b #$02 : STA BowEquipment + LDA.l SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode + LDA.l BowEquipment : CMP.b #$3 : BCC + + SBC.b #$02 : STA.l BowEquipment + RTL ;================================================================================ diff --git a/99ff1_bombos.gfx b/data/99ff1_bombos.gfx similarity index 100% rename from 99ff1_bombos.gfx rename to data/99ff1_bombos.gfx diff --git a/99ff1_quake.gfx b/data/99ff1_quake.gfx similarity index 100% rename from 99ff1_quake.gfx rename to data/99ff1_quake.gfx diff --git a/a6fc4_bombos.gfx b/data/a6fc4_bombos.gfx similarity index 100% rename from a6fc4_bombos.gfx rename to data/a6fc4_bombos.gfx diff --git a/a6fc4_ether.gfx b/data/a6fc4_ether.gfx similarity index 100% rename from a6fc4_ether.gfx rename to data/a6fc4_ether.gfx diff --git a/bossicons.4bpp b/data/bossicons.4bpp similarity index 100% rename from bossicons.4bpp rename to data/bossicons.4bpp diff --git a/bsodencode.txt b/data/bsodencode.txt similarity index 100% rename from bsodencode.txt rename to data/bsodencode.txt diff --git a/bsodfont.1bpp b/data/bsodfont.1bpp similarity index 100% rename from bsodfont.1bpp rename to data/bsodfont.1bpp diff --git a/bsodhex.2bpp b/data/bsodhex.2bpp similarity index 100% rename from bsodhex.2bpp rename to data/bsodhex.2bpp diff --git a/c2807_v3.bin b/data/c2807_v3.bin similarity index 100% rename from c2807_v3.bin rename to data/c2807_v3.bin diff --git a/c2807_v3.gfx b/data/c2807_v3.gfx similarity index 100% rename from c2807_v3.gfx rename to data/c2807_v3.gfx diff --git a/c2807_v4.bin b/data/c2807_v4.bin similarity index 100% rename from c2807_v4.bin rename to data/c2807_v4.bin diff --git a/c2807_v4.gfx b/data/c2807_v4.gfx similarity index 100% rename from c2807_v4.gfx rename to data/c2807_v4.gfx diff --git a/c2e3e.bin b/data/c2e3e.bin similarity index 100% rename from c2e3e.bin rename to data/c2e3e.bin diff --git a/c2e3e.gfx b/data/c2e3e.gfx similarity index 100% rename from c2e3e.gfx rename to data/c2e3e.gfx diff --git a/credits.txt b/data/credits.txt similarity index 100% rename from credits.txt rename to data/credits.txt diff --git a/creditscharmapbighi.txt b/data/creditscharmapbighi.txt similarity index 100% rename from creditscharmapbighi.txt rename to data/creditscharmapbighi.txt diff --git a/creditscharmapbiglo.txt b/data/creditscharmapbiglo.txt similarity index 100% rename from creditscharmapbiglo.txt rename to data/creditscharmapbiglo.txt diff --git a/creditscharmapsmall_green.txt b/data/creditscharmapsmall_green.txt similarity index 100% rename from creditscharmapsmall_green.txt rename to data/creditscharmapsmall_green.txt diff --git a/creditscharmapsmall_red.txt b/data/creditscharmapsmall_red.txt similarity index 100% rename from creditscharmapsmall_red.txt rename to data/creditscharmapsmall_red.txt diff --git a/creditscharmapsmall_yellow.txt b/data/creditscharmapsmall_yellow.txt similarity index 100% rename from creditscharmapsmall_yellow.txt rename to data/creditscharmapsmall_yellow.txt diff --git a/damage_table.bin b/data/damage_table.bin similarity index 100% rename from damage_table.bin rename to data/damage_table.bin diff --git a/eventitems.bin b/data/eventitems.bin similarity index 100% rename from eventitems.bin rename to data/eventitems.bin diff --git a/eventitems.gfx b/data/eventitems.gfx similarity index 100% rename from eventitems.gfx rename to data/eventitems.gfx diff --git a/fileselect.chr.gfx b/data/fileselect.chr.gfx similarity index 100% rename from fileselect.chr.gfx rename to data/fileselect.chr.gfx diff --git a/hudpalette.pal b/data/hudpalette.pal similarity index 100% rename from hudpalette.pal rename to data/hudpalette.pal diff --git a/i18n_en.bin b/data/i18n_en.bin similarity index 100% rename from i18n_en.bin rename to data/i18n_en.bin diff --git a/ice_bombos.bin b/data/ice_bombos.bin similarity index 100% rename from ice_bombos.bin rename to data/ice_bombos.bin diff --git a/ice_palace_floor.bin b/data/ice_palace_floor.bin similarity index 100% rename from ice_palace_floor.bin rename to data/ice_palace_floor.bin diff --git a/map_icons.gfx b/data/map_icons.gfx similarity index 100% rename from map_icons.gfx rename to data/map_icons.gfx diff --git a/newfont.bin b/data/newfont.bin similarity index 100% rename from newfont.bin rename to data/newfont.bin diff --git a/newfont_inverted.bin b/data/newfont_inverted.bin similarity index 100% rename from newfont_inverted.bin rename to data/newfont_inverted.bin diff --git a/newitems.bin b/data/newitems.bin similarity index 100% rename from newitems.bin rename to data/newitems.bin diff --git a/newitems.gfx b/data/newitems.gfx similarity index 100% rename from newitems.gfx rename to data/newitems.gfx diff --git a/newitems.pal b/data/newitems.pal similarity index 100% rename from newitems.pal rename to data/newitems.pal diff --git a/newitems2.bin b/data/newitems2.bin similarity index 100% rename from newitems2.bin rename to data/newitems2.bin diff --git a/newitems2.gfx b/data/newitems2.gfx similarity index 100% rename from newitems2.gfx rename to data/newitems2.gfx diff --git a/output.txt b/data/output.txt similarity index 100% rename from output.txt rename to data/output.txt diff --git a/sheet178.gfx b/data/sheet178.gfx similarity index 100% rename from sheet178.gfx rename to data/sheet178.gfx diff --git a/sheet73.bin b/data/sheet73.bin similarity index 100% rename from sheet73.bin rename to data/sheet73.bin diff --git a/sheet73.gfx b/data/sheet73.gfx similarity index 100% rename from sheet73.gfx rename to data/sheet73.gfx diff --git a/text_unscramble1.bin b/data/text_unscramble1.bin similarity index 100% rename from text_unscramble1.bin rename to data/text_unscramble1.bin diff --git a/text_unscramble2.bin b/data/text_unscramble2.bin similarity index 100% rename from text_unscramble2.bin rename to data/text_unscramble2.bin diff --git a/zsnes_pal.bin b/data/zsnes_pal.bin similarity index 100% rename from zsnes_pal.bin rename to data/zsnes_pal.bin diff --git a/zsnes_tilemap.bin b/data/zsnes_tilemap.bin similarity index 100% rename from zsnes_tilemap.bin rename to data/zsnes_tilemap.bin diff --git a/zsnes_tiles.bin b/data/zsnes_tiles.bin similarity index 100% rename from zsnes_tiles.bin rename to data/zsnes_tiles.bin diff --git a/decryption.asm b/decryption.asm index 71d1a92..3500c21 100644 --- a/decryption.asm +++ b/decryption.asm @@ -1,13 +1,10 @@ -!CryptoBuffer = "$7F5100" -;!keyBase = "$7F50D0" - ;-------------------------------------------------------------------------------- LoadStaticDecryptionKey: PHB : PHA : PHX : PHY : PHP REP #$30 ; set 16-bit accumulator & index registers LDX.w #StaticDecryptionKey ; Source - LDY.w #!keyBase ; Target + LDY.w #KeyBase ; Target LDA.w #$000F ; Length MVN $307F @@ -23,65 +20,63 @@ RetrieveValueFromEncryptedTable: ;Returns result in A PHX : PHY PHA - LDY $04 : PHY : LDY $06 : PHY : LDY $08 : PHY - LDY $0A : PHY : LDY $0C : PHY : LDY $0E : PHY + LDY.b Scrap04 : PHY : LDY.b Scrap06 : PHY : LDY.b Scrap08 : PHY + LDY.b Scrap0A : PHY : LDY.b Scrap0C : PHY : LDY.b Scrap0E : PHY AND.w #$FFF8 : TAY - LDA [$00], Y : STA.l !CryptoBuffer : INY #2 - LDA [$00], Y : STA.l !CryptoBuffer+2 : INY #2 - LDA [$00], Y : STA.l !CryptoBuffer+4 : INY #2 - LDA [$00], Y : STA.l !CryptoBuffer+6 + LDA.b [$00], Y : STA.l CryptoBuffer : INY #2 + LDA.b [$00], Y : STA.l CryptoBuffer+2 : INY #2 + LDA.b [$00], Y : STA.l CryptoBuffer+4 : INY #2 + LDA.b [$00], Y : STA.l CryptoBuffer+6 - LDA.w #$0002 : STA $04 ;set block size + LDA.w #$0002 : STA.b Scrap04 ;set block size JSL.l XXTEA_Decode - PLA : STA $0E : PLA : STA $0C : PLA : STA $0A - PLA : STA $08 : PLA : STA $06 : PLA : STA $04 + PLA : STA.b Scrap0E : PLA : STA.b Scrap0C : PLA : STA.b Scrap0A + PLA : STA.b Scrap08 : PLA : STA.b Scrap06 : PLA : STA.b Scrap04 PLA : AND.w #$0007 : TAX - LDA.l !CryptoBuffer, X + LDA.l CryptoBuffer, X PHA LDA.w #$0000 - STA.l !CryptoBuffer - STA.l !CryptoBuffer+2 - STA.l !CryptoBuffer+4 - STA.l !CryptoBuffer+6 + STA.l CryptoBuffer + STA.l CryptoBuffer+2 + STA.l CryptoBuffer+4 + STA.l CryptoBuffer+6 PLA PLY : PLX RTL ;-------------------------------------------------------------------------------- - -!ChestData = "$01E96C" -!ChestData_Payload = "$1EABC" ; !ChestData+$0150 - +ChestData = $01E96C +ChestDataPayload = $01EABC ; ChestData+$0150 ;-------------------------------------------------------------------------------- GetChestData: LDA.l IsEncrypted : BNE .encrypted - INC $0E : LDX.w #$FFFD ; what we wrote over + INC.b Scrap0E : LDX.w #$FFFD ; what we wrote over JML.l Dungeon_OpenKeyedObject_nextChest .encrypted - INC $0E : LDX.w #$FFFE + INC.b Scrap0E : LDX.w #$FFFE .nextChest INX #2 : CPX.w #$0150 : BEQ .couldntFindChest - LDA !ChestData, X : AND.w #$7FFF : CMP $A0 : BNE .nextChest + LDA.l ChestData, X : AND.w #$7FFF : CMP.b RoomIndex : BNE .nextChest - DEC $0E : BNE .nextChest + DEC.b Scrap0E : BNE .nextChest - LDA $00 : PHA : LDA $02 : PHA + LDA.b Scrap00 : PHA : LDA.b Scrap02 : PHA - LDA.w #!ChestData_Payload : STA $00 - LDA.w #!ChestData_Payload>>16 : STA $02 + LDA.w #ChestDataPayload : STA.b Scrap00 + LDA.w #ChestDataPayload>>16 : STA.b Scrap02 TXA : LSR JSL RetrieveValueFromEncryptedTable - STA $0C + STA.b Scrap0C - PLA : STA $02 : PLA : STA $00 + PLA : STA.b Scrap02 : PLA : STA.b Scrap00 - LDA !ChestData, X : ASL A : BCC .smallChest + LDA.l ChestData, X : ASL A : BCC .smallChest JML.l Dungeon_OpenKeyedObject_bigChest ;(bank01.asm line #13783) diff --git a/dialog.asm b/dialog.asm index 67954aa..a8d35cf 100644 --- a/dialog.asm +++ b/dialog.asm @@ -2,200 +2,138 @@ ; Dialog Pointer Override ;-------------------------------------------------------------------------------- DialogOverride: - LDA $7F5035 : BEQ .skip - LDA $7F5700, X ; use alternate buffer + LDA.l AltTextFlag : BEQ .skip + LDA.l DialogBuffer, X ; use alternate buffer RTL .skip - LDA $7F1200, X + LDA.l DecompressionBuffer+$1200, X RTL -;-------------------------------------------------------------------------------- -; $7F5035 - Alternate Text Pointer Flag ; 0=Disable -; $7F5036 - Padding Byte (Must be Zero) -; $7F5700 - $7F57FF - Dialog Buffer -;-------------------------------------------------------------------------------- + ResetDialogPointer: - STZ $1CF0 : STZ $1CF1 ; reset decompression buffer - LDA.b #$00 : STA $7F5035 ; zero out the alternate flag - LDA.b #$1C : STA $1CE9 ; thing we wrote over + STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer + LDA.b #$00 : STA.l AltTextFlag ; zero out the alternate flag + LDA.b #$1C : STA.w DelayTimer ; thing we wrote over RTL -;-------------------------------------------------------------------------------- -;macro LoadDialog(index,table) -; PHA : PHX : PHY -; PHB : PHK : PLB -; LDA $00 : PHA -; LDA $01 : PHA -; LDA $02 : PHA -; LDA.b #$01 : STA $7F5035 ; set flag -; -; LDA : ASL : !ADD.l : TAX ; get quote offset *3, move to X -; LDA , X : STA $00 ; write pointer to direct page -; LDA
+1, X : STA $01 -; LDA
+2, X : STA $02 -; -; LDX.b #$00 : LDY.b #$00 -; - -; LDA [$00], Y ; load the next character from the pointer -; STA $7F5700, X ; write to the buffer -; INX : INY -; CMP.b #$7F : BNE - -; PLA : STA $02 -; PLA : STA $01 -; PLA : STA $00 -; PLB -; PLY : PLX : PLA -;endmacro -;-------------------------------------------------------------------------------- -;macro LoadDialogAddress(address) -; PHA : PHX : PHY -; PHP -; PHB : PHK : PLB -; SEP #$30 ; set 8-bit accumulator and index registers -; LDA $00 : PHA -; LDA $01 : PHA -; LDA $02 : PHA -; LDA.b #$01 : STA $7F5035 ; set flag -; -; LDA.b #
: STA $00 ; write pointer to direct page -; LDA.b #
>>8 : STA $01 -; LDA.b #
>>16 : STA $02 -; -; LDX.b #$00 : LDY.b #$00 -; - -; LDA [$00], Y ; load the next character from the pointer -; STA $7F5700, X ; write to the buffer -; INX : INY -; CMP.b #$7F : BNE - -; PLA : STA $02 -; PLA : STA $01 -; PLA : STA $00 -; PLB -; PLP -; PLY : PLX : PLA -;endmacro -;-------------------------------------------------------------------------------- -!OFFSET_POINTER = "$7F5094" -!OFFSET_RETURN = "$7F5096" -!DIALOG_BUFFER = "$7F5700" + macro LoadDialogAddress(address) PHA : PHX : PHY PHP PHB : PHK : PLB SEP #$20 ; set 8-bit accumulator REP #$10 ; set 16-bit index registers - PEI ($00) - LDA $02 : PHA - STZ $1CF0 : STZ $1CF1 ; reset decompression buffer - LDA.b #$01 : STA $7F5035 ; set flag + PEI.b ($00) + LDA.b Scrap02 : PHA + STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer + LDA.b #$01 : STA.l AltTextFlag ; set flag %CopyDialog(
) - PLA : STA $02 + PLA : STA.b Scrap02 REP #$20 - PLA : STA $00 + PLA : STA.b Scrap00 PLB PLP PLY : PLX : PLA endmacro ;-------------------------------------------------------------------------------- macro CopyDialog(address) - LDA.b #
: STA $00 ; write pointer to direct page - LDA.b #
>>8 : STA $01 - LDA.b #
>>16 : STA $02 + LDA.b #
: STA.b Scrap00 ; write pointer to direct page + LDA.b #
>>8 : STA.b Scrap01 + LDA.b #
>>16 : STA.b Scrap02 %CopyDialogIndirect() endmacro ;-------------------------------------------------------------------------------- macro CopyDialogIndirect() - REP #$20 : LDA !OFFSET_POINTER : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0 + REP #$20 : LDA.l DialogOffsetPointer : TAX : LDY.w #$0000 : SEP #$20 ; copy 2-byte offset pointer to X and set Y to 0 ?loop: - LDA [$00], Y ; load the next character from the pointer - STA !DIALOG_BUFFER, X ; write to the buffer + LDA.b [$00], Y ; load the next character from the pointer + STA.l DialogBuffer, X ; write to the buffer INX : INY CMP.b #$7F : BNE ?loop REP #$20 ; set 16-bit accumulator - TXA : INC : STA !OFFSET_RETURN ; copy out X into - LDA.w #$0000 : STA !OFFSET_POINTER + TXA : INC : STA.l DialogReturnPointer ; copy out X into + LDA.w #$0000 : STA.l DialogOffsetPointer SEP #$20 ; set 8-bit accumulator endmacro ;-------------------------------------------------------------------------------- LoadDialogAddressIndirect: - STZ $1CF0 : STZ $1CF1 ; reset decompression buffer - LDA.b #$01 : STA $7F5035 ; set flag + STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer + LDA.b #$01 : STA.l AltTextFlag ; set flag %CopyDialogIndirect() - ;%LoadDialogAddress(UncleText) RTL ;-------------------------------------------------------------------------------- -!ITEM_TEMPORARY = "$7F5040" FreeDungeonItemNotice: - STA !ITEM_TEMPORARY + STA.w ScratchBufferV - PHA : PHX : PHY - PHP - PHB : PHK : PLB - SEP #$20 ; set 8-bit accumulator - REP #$10 ; set 16-bit index registers - PEI ($00) - LDA $02 : PHA + PHA : PHX : PHY + PHP + PHB : PHK : PLB + SEP #$20 ; set 8-bit accumulator + REP #$10 ; set 16-bit index registers + PEI.b (Scrap00) + LDA.b Scrap02 : PHA + LDA.w ScratchBufferNV : PHA + LDA.w ScratchBufferNV+1 : PHA ;-------------------------------- LDA.l FreeItemText : BNE + : JMP .skip : + - LDA #$00 : STA $7F5010 ; initialize scratch + LDA.b #$00 : STA.w ScratchBufferNV ; initialize scratch LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key - LDA !ITEM_TEMPORARY : CMP.b #$24 : BNE + ; general small key + LDA.w ScratchBufferV : CMP.b #$24 : BNE + ; general small key %CopyDialog(Notice_SmallKeyOf) - LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER + LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass - LDA !ITEM_TEMPORARY : CMP.b #$25 : BNE + ; general compass + LDA.w ScratchBufferV : CMP.b #$25 : BNE + ; general compass %CopyDialog(Notice_CompassOf) - LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER + LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map - LDA !ITEM_TEMPORARY : CMP.b #$33 : BNE + ; general map + LDA.w ScratchBufferV : CMP.b #$33 : BNE + ; general map %CopyDialog(Notice_MapOf) - LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER + LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key - LDA !ITEM_TEMPORARY : CMP.b #$32 : BNE + ; general big key + LDA.w ScratchBufferV : CMP.b #$32 : BNE + ; general big key %CopyDialog(Notice_BigKeyOf) - LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER + LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map - LDA !ITEM_TEMPORARY : AND.b #$F0 ; looking at high bits only + LDA.w ScratchBufferV : AND.b #$F0 ; looking at high bits only CMP.b #$70 : BNE + ; map of... %CopyDialog(Notice_MapOf) JMP .dungeon + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass - LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... + LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... %CopyDialog(Notice_CompassOf) JMP .dungeon + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key - LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... + LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) BRA .dungeon + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key - LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... - LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : JMP .skip : ++ + 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) - PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA - LDA #$01 : STA $7F5010 ; set up a flip for small keys + LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys BRA .dungeon + JMP .skip ; it's not something we are going to give a notice for .dungeon - LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER - LDA !ITEM_TEMPORARY + LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer + LDA.w ScratchBufferV AND.b #$0F ; looking at low bits only - STA $7F5011 - LDA $7F5010 : BEQ + - LDA $7F5010 - LDA #$0F : !SUB $7F5011 : STA $7F5011 ; flip the values for small keys + 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 $7F5011 + LDA.w ScratchBufferNV+1 CMP.b #$00 : BNE + ; ...light world %CopyDialog(Notice_LightWorld) : JMP .done + : CMP.b #$01 : BNE + ; ...dark world @@ -231,30 +169,31 @@ FreeDungeonItemNotice: + .done - STZ $1CF0 : STZ $1CF1 ; reset decompression buffer - LDA.b #$01 : STA $7F5035 ; set alternate dialog flag - STA $7F509F + STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer + LDA.b #$01 : STA.l AltTextFlag ; set alternate dialog flag + STA.l TextBoxDefer ;-------------------------------- .skip - PLA : STA $02 - REP #$20 - PLA : STA $00 - PLB - PLP - PLY : PLX : PLA - ;JSL.l Main_ShowTextMessage_Alt ; .skip can be here so long as this line remains commented out + PLA : STA.w ScratchBufferNV+1 + PLA : STA.w ScratchBufferNV + PLA : STA.b Scrap02 + REP #$20 + PLA : STA.b Scrap00 + PLB + PLP + PLY : PLX : PLA RTL ;-------------------------------------------------------------------------------- DialogResetSelectionIndex: JSL.l Attract_DecompressStoryGfx ; what we wrote over - STZ $1CE8 + STZ.w MessageCursor RTL ;-------------------------------------------------------------------------------- DialogItemReceive: BCS .nomessage ; if doubling the item value overflowed it must be a rando item - CPY #$98 : BCC ++ ;if the item is $4C or greater it must be a rando item + CPY.b #$98 : BCC ++ ;if the item is $4C or greater it must be a rando item .nomessage LDA.w #$FFFF @@ -267,11 +206,11 @@ RTL ;-------------------------------------------------------------------------------- DialogFairyThrow: LDA.l Restrict_Ponds : BEQ .normal - LDA BottleContentsOne - ORA BottleContentsTwo : ORA BottleContentsThree : ORA BottleContentsFour : BNE .normal + LDA.l BottleContentsOne + ORA.l BottleContentsTwo : ORA.l BottleContentsThree : ORA.l BottleContentsFour : BNE .normal .noInventory - LDA $0D80, X : !ADD #$08 : STA $0D80, X + LDA.w SpriteActivity, X : !ADD #$08 : STA.w SpriteActivity, X LDA.b #$51 LDY.b #$01 RTL @@ -286,7 +225,7 @@ DialogGanon1: LDA.w #$018C BCC + LDA.w #$016D -+ STA $1CF0 ++ STA.w TextID SEP #$20 JSL.l Sprite_ShowMessageMinimal_Alt RTL @@ -322,22 +261,22 @@ DialogGanon2: + LDA.w #$016E ++ - STA $1CF0 + STA.w TextID SEP #$20 JSL.l Sprite_ShowMessageMinimal_Alt RTL ;-------------------------------------------------------------------------------- DialogEtherTablet: PHA - LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped + LDA.w ItemCursor : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped - PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text + - BIT $F4 : BVC - ; Show normal text if Y is not pressed + BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed LDA.l AllowHammerTablets : BEQ ++ - LDA HammerEquipment : BEQ .yesText : BRA .noText + LDA.l HammerEquipment : BEQ .yesText : BRA .noText ++ - LDA SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText + LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText ;++ .yesText PLA @@ -351,15 +290,15 @@ RTL ;-------------------------------------------------------------------------------- DialogBombosTablet: PHA - LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped + LDA.w ItemCursor : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped - PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text + - BIT $F4 : BVC - ; Show normal text if Y is not pressed + BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed LDA.l AllowHammerTablets : BEQ ++ - LDA HammerEquipment : BEQ .yesText : BRA .noText + LDA.l HammerEquipment : BEQ .yesText : BRA .noText ++ - LDA SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText + LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText ;++ .yesText PLA @@ -372,7 +311,7 @@ DialogBombosTablet: RTL ;-------------------------------------------------------------------------------- DialogSahasrahla: - LDA.l PendantsField : AND #$04 : BEQ + ;Check if player has green pendant + LDA.l PendantsField : AND.b #$04 : BEQ + ;Check if player has green pendant LDA.b #$2F LDY.b #$00 JML Sprite_ShowMessageUnconditional @@ -381,7 +320,7 @@ RTL ;-------------------------------------------------------------------------------- DialogBombShopGuy: LDY.b #$15 - LDA.l CrystalsField : AND #$05 : CMP #$05 : BNE + ;Check if player has crystals 5 & 6 + LDA.l CrystalsField : AND.b #$05 : CMP.b #$05 : BNE + ;Check if player has crystals 5 & 6 INY ; from 15 to 16 + TYA @@ -399,54 +338,54 @@ AgahnimAsksAboutPed: BNE .vanilla LDA.b #$8C ; message 018C for no ped - STA.w $1CF0 + STA.w TextID .vanilla JML $05FA8E ; Sprite_ShowMessageMinimal ;-------------------------------------------------------------------------------- Main_ShowTextMessage_Alt: ; Are we in text mode? If so then end the routine. - LDA $10 : CMP.b #$0E : BEQ .already_in_text_mode + LDA.b GameMode : CMP.b #$0E : BEQ .already_in_text_mode Sprite_ShowMessageMinimal_Alt: - STZ $11 + STZ.b GameSubMode PHX : PHY - PEI ($00) - LDA.b $02 : PHA + PEI.b (Scrap00) + LDA.b Scrap02 : PHA - LDA.b #$1C : STA.b $02 + LDA.b #$1C : STA.b Scrap02 REP #$30 - LDA.w $1CF0 : ASL : TAX + LDA.w TextID : ASL : TAX LDA.l $7F71C0, X - STA.b $00 + STA.b Scrap00 SEP #$30 LDY.b #$00 - LDA [$00], Y : CMP.b #$FE : BNE + - INY : LDA [$00], Y : CMP.b #$6E : BNE + - INY : LDA [$00], Y : : BNE + - INY : LDA [$00], Y : CMP.b #$FE : BNE + - INY : LDA [$00], Y : CMP.b #$6B : BNE + - INY : LDA [$00], Y : CMP.b #$04 : BNE + - STZ $1CE8 + LDA.b [Scrap00], Y : CMP.b #$FE : BNE + + INY : LDA.b [Scrap00], Y : CMP.b #$6E : BNE + + INY : LDA.b [Scrap00], Y : : BNE + + INY : LDA.b [Scrap00], Y : CMP.b #$FE : BNE + + INY : LDA.b [Scrap00], Y : CMP.b #$6B : BNE + + INY : LDA.b [Scrap00], Y : CMP.b #$04 : BNE + + STZ.w MessageCursor JMP .end + - STZ $0223 ; Otherwise set it so we are in text mode. - STZ $1CD8 ; Initialize the step in the submodule + STZ.w MessageJunk ; Otherwise set it so we are in text mode. + STZ.w MessageSubModule ; Go to text display mode (as opposed to maps, etc) - LDA.b #$02 : STA $11 + LDA.b #$02 : STA.b GameSubMode ; Store the current module in the temporary location. - LDA $10 : STA $010C + LDA.b GameMode : STA.w GameModeCache ; Switch the main module ($10) to text mode. - LDA.b #$0E : STA $10 + LDA.b #$0E : STA.b GameMode .end - PLA : STA.b $02 - PLA : STA.b $01 - PLA : STA.b $00 + PLA : STA.b Scrap02 + PLA : STA.b Scrap01 + PLA : STA.b Scrap00 PLY : PLX Main_ShowTextMessage_Alt_already_in_text_mode: @@ -458,15 +397,15 @@ CalculateSignIndex: ; And we do this in a way that will likely give the right value even ; with major glitches. - LDA $8A : ASL A : TAY ;what we wrote over + LDA.b OverworldIndex : ASL A : TAY ;what we wrote over - LDA $0712 : 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 $21 : AND.w #$0002 : ASL #2 : EOR $8A : AND.w #$0008 : BEQ + + 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 $23 : AND.w #$0002 : LSR : EOR $8A : AND.w #$0001 : BEQ + + 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: @@ -475,6 +414,112 @@ CalculateSignIndex: .done RTL +;================================================================ +; Contributor: Myramong +;================================================================ +Sprite_ShowSolicitedMessageIfPlayerFacing_Alt: +{ + STA.w TextID + STY.w TextID+1 + + JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha + JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha + + LDA.b Joy1B_New : BPL .alpha + LDA.w SpriteTimerE, X : BNE .alpha + LDA.b LinkJumping : CMP.b #$02 : BEQ .alpha + + JSL Sprite_DirectionToFacePlayerLong : PHX : TYX + + ; 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 + + PHY + + LDA.w TextID + 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 + + .SahasrahlaDialogs + REP #$20 : LDA.l MapReveal_Sahasrahla : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20 + JSL DialogSahasrahla : BRA .SayNothing + + .BombShopGuyDialog + REP #$20 : LDA.l MapReveal_BombShop : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20 + JSL DialogBombShopGuy + + .SayNothing + + LDA.b #$40 : STA.w SpriteTimerE, X + + PLA : EOR.b #$03 + + SEC + + RTL + +.not_facing_each_other +.alpha + + LDA.w SpriteMoveDirection, X + + CLC + + RTL +} +;================================================================ +Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage: +{ + PHY + PHA + + JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha + JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha + + LDA.b Joy1B_New : BPL .alpha + LDA.w SpriteTimerE, X : BNE .alpha + LDA.b LinkJumping : CMP.b #$02 : BEQ .alpha + + JSL Sprite_DirectionToFacePlayerLong : PHX : TYX + + ; 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 + + PLA : XBA : PLA + + PHY + + TAY : XBA + + JSL Sprite_ShowMessageUnconditional + + LDA.b #$40 : STA.w SpriteTimerE, X + + PLA : EOR.b #$03 + + SEC + + RTL + +.not_facing_each_other +.alpha + PLY + PLA + + LDA.w SpriteMoveDirection, X + + CLC + + RTL +} + ;-------------------------------------------------------------------------------- ; A0 - A9 - 0 - 9 ; AA - C3 - A - Z diff --git a/doorframefixes.asm b/doorframefixes.asm index 921dee5..4e73ab2 100644 --- a/doorframefixes.asm +++ b/doorframefixes.asm @@ -7,8 +7,8 @@ ;-------------------------------------------------------------------------------- StoreLastOverworldDoorID: TXA : INC - STA $7F5099 - LDA $1BBB73, X : STA $010E + STA.l PreviousOverworldDoor + LDA.l $1BBB73, X : STA.w EntranceIndex RTL ;-------------------------------------------------------------------------------- @@ -16,14 +16,14 @@ RTL ; CacheDoorFrameData ;-------------------------------------------------------------------------------- CacheDoorFrameData: - LDA $7F5099 : BEQ .originalBehaviour + LDA.l PreviousOverworldDoor : BEQ .originalBehaviour DEC : ASL : TAX - LDA EntranceDoorFrameTable, X : STA $0696 - LDA EntranceAltDoorFrameTable, X : STA $0698 + LDA.l EntranceDoorFrameTable, X : STA.w TileMapEntranceDoors + LDA.l EntranceAltDoorFrameTable, X : STA.w TileMapTile32 BRA .done .originalBehaviour - LDA $D724, X : STA $0696 - STZ $0698 + LDA.w $D724, X : STA.w TileMapEntranceDoors + STZ.w TileMapTile32 .done RTL ;-------------------------------------------------------------------------------- @@ -32,8 +32,8 @@ RTL ; WalkDownIntoTavern ;-------------------------------------------------------------------------------- WalkDownIntoTavern: - LDA $7F5099 + LDA.l PreviousOverworldDoor ; tavern door has index 0x42 (saved off value is incremented by one) - CMP #$43 + CMP.b #$43 RTL ;-------------------------------------------------------------------------------- diff --git a/dungeondrops.asm b/dungeondrops.asm index c33e1cc..aaeb8f7 100644 --- a/dungeondrops.asm +++ b/dungeondrops.asm @@ -2,8 +2,8 @@ ; Dungeon & Boss Drop Fixes ;-------------------------------------------------------------------------------- DropSafeDungeon: - LDA $040C : CMP #$08 : BEQ + - LDA $01C6FC, X : JML Sprite_SpawnFallingItem + LDA.w DungeonID : CMP.b #$08 : BEQ + + LDA.l $01C6FC, X : JML Sprite_SpawnFallingItem + RTL -;-------------------------------------------------------------------------------- \ No newline at end of file +;-------------------------------------------------------------------------------- diff --git a/dungeonmap.asm b/dungeonmap.asm index 39b4624..275c76a 100644 --- a/dungeonmap.asm +++ b/dungeonmap.asm @@ -1,5 +1,5 @@ DoDungeonMapBossIcon: - LDA.b $14 + LDA.b NMISTRIPES CMP.b #$09 BEQ .dungeonmap @@ -9,16 +9,9 @@ DoDungeonMapBossIcon: .dungeonmap - LDX.w $040C + LDX.w DungeonID BMI .cave -; LDA.l DungeonMapIcons -; AND.b #$01 -; BNE ++ -; -; INC ; so it's not equal to $01 -; BRA .cave - ; get dungeon boss room ++ REP #$30 LDA.l $8AE817,X @@ -57,7 +50,7 @@ DoDungeonMapBossIcon: .match LDA.b #$80 - STA.w $2121 + STA.w CGADD REP #$30 @@ -74,14 +67,14 @@ DoDungeonMapBossIcon: ASL ; x128 for graphics ASL ADC.w #BossMapIconGFX - STA.w $4312 + STA.w A1T1L PHY LDY.w #32 SEP #$20 -- LDA.l .boss_palettes,X - STA.w $2122 + STA.w CGDATA INX DEY BNE -- @@ -94,24 +87,24 @@ DoDungeonMapBossIcon: SEP #$10 LDA.w #$1801 - STA.w $4310 + STA.w DMAP1 LDX.b #BossMapIconGFX>>16 - STX.w $4314 + STX.w A1B1 LDA.w #$A060>>1 - STA.w $2116 + STA.w VMADDL LDA.w #$0040 - STA.w $4315 + STA.w DAS1L LDX.b #$02 - STX.w $420B + STX.w MDMAEN - STA.w $4315 + STA.w DAS1L LDA.w #$A260>>1 - STA.w $2116 + STA.w VMADDL - STX.w $420B + STX.w MDMAEN ; done SEP #$30 diff --git a/elder.asm b/elder.asm index 5c4a6a6..f66817d 100644 --- a/elder.asm +++ b/elder.asm @@ -1,11 +1,11 @@ NewElderCode: { -LDA $8A : CMP #$1B : BEQ .newCodeContinue +LDA.b OverworldIndex : CMP.b #$1B : BEQ .newCodeContinue ;Restore Jump we can keep the RTL so JML JML $05F0CD .newCodeContinue PHB : PHK : PLB -LDA.b #$07 : STA $0F50, X ;Palette +LDA.b #$07 : STA.w SpriteOAMProp, X ; Palette JSR Elder_Draw JSL Sprite_PlayerCantPassThrough JSR Elder_Code @@ -17,12 +17,12 @@ RTL Elder_Draw: { - LDA.b #$02 : STA $06 : STZ $07 ;Number of Tiles + LDA.b #$02 : STA.b Scrap06 : STZ.b Scrap07 ;Number of Tiles - LDA $0DC0, X : ASL #04 + LDA.w SpriteGFXControl, X : ASL #04 - ADC.b #.animation_states : STA $08 - LDA.b #.animation_states>>8 : ADC.b #$00 : STA $09 + ADC.b #.animation_states : STA.b Scrap08 + LDA.b #.animation_states>>8 : ADC.b #$00 : STA.b Scrap09 JSL Sprite_DrawMultiple_player_deferred JSL Sprite_DrawShadowLong @@ -46,11 +46,11 @@ RTL LDA.l TurnInGoalItems : AND.w #$00FF : BNE + .despawn SEP #$20 - STZ $0DD0, X ; despawn self + STZ.w SpriteAITable, X ; despawn self RTS + SEP #$20 - LDA.b $11 + LDA.b GameSubMode BNE .done LDA.b #$96 LDY.b #$01 @@ -66,6 +66,6 @@ RTL .done SEP #$20 - LDA.b $1A : LSR #5 : AND.b #$01 : STA.w $0DC0, X + LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X RTS } diff --git a/endingsequence.asm b/endingsequence.asm index 1603305..83f506b 100644 --- a/endingsequence.asm +++ b/endingsequence.asm @@ -7,7 +7,7 @@ EndingSequenceTableOverride: TYX LDA.l EndingSequenceText, X PLX - STA $1008, X + STA.w $1008, X PLY RTL ;-------------------------------------------------------------------------------- @@ -15,7 +15,7 @@ EndingSequenceTableLookupOverride: PHY PHX TYX - LDA.l EndingSequenceText, X : AND #$00FF + LDA.l EndingSequenceText, X : AND.w #$00FF PLX PLY RTL diff --git a/enemy_adjustments.asm b/enemy_adjustments.asm index ec0411f..ee33204 100644 --- a/enemy_adjustments.asm +++ b/enemy_adjustments.asm @@ -3,21 +3,25 @@ ; make sure bats always load LW stats ;-------------------------------------------------------------------------------- NewBatInit: - CPY #$00 : BEQ .light_world + CPY.b #$00 : BEQ .light_world ;check if map id == 240 or 241 - LDA $A0 : CMP #$F0 : BEQ .light_world ;oldman cave1 - CMP #$F1 : BEQ .light_world ;oldman cave2 - CMP #$B0 : BEQ .light_world ;agahnim statue keese - CMP #$D0 : BEQ .light_world ;agahnim darkmaze + LDA.b RoomIndex : CMP.b #$F0 : BEQ .light_world ;oldman cave1 + CMP.b #$F1 : BEQ .light_world ;oldman cave2 + CMP.b #$B0 : BEQ .light_world ;agahnim statue keese + CMP.b #$D0 : BEQ .light_world ;agahnim darkmaze - LDA.b #$85 : STA $0CD2, X - LDA.b #$04 : STA $0E50, X + LDA.b #$85 : STA.w SpriteBump, X + LDA.b #$04 : STA.w SpriteHitPoints, X RTL - .light_world - LDA.b #$80 : STA $0CD2, X - LDA.b #$01 : STA $0E50, X + LDA.b #$80 : STA.w SpriteBump, X + LDA.b #$01 : STA.w SpriteHitPoints, X RTL ;-------------------------------------------------------------------------------- - +NewFireBarDamage: + LDA.w $00EE : CMP.w SpriteLayer, X : BNE .NotSameLayer + JSL Sprite_AttemptDamageToPlayerPlusRecoilLong + RTL +.NotSameLayer +RTL diff --git a/entrances.asm b/entrances.asm index e3e6bb0..8bd634b 100644 --- a/entrances.asm +++ b/entrances.asm @@ -8,7 +8,7 @@ LockAgahnimDoors: ;#$0 = Never Locked LDA.w #$0000 : RTL + : CMP.w #$0001 : BNE + - LDA ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip + LDA.l ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip JSR.w LockAgahnimDoorsCore : RTL + : CMP.w #$0002 : BNE + JSR.w LockAgahnimDoorsCore : BEQ .unlock @@ -18,20 +18,20 @@ LockAgahnimDoors: REP #$30 PLY : PLX !BGE .crystalOrUnlock - LDA #$0001 : RTL + LDA.w #$0001 : RTL .crystalOrUnlock - LDA InvertedMode : AND.w #$00FF : BEQ .unlock + LDA.l InvertedMode : AND.w #$00FF : BEQ .unlock - LDA OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not - LDA $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item + LDA.l OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not + LDA.w AButtonAct : AND.w #$0080 : BEQ ++ ;If we are holding an item .locked - LDA #$0001 : RTL ;Keep the door locked + LDA.w #$0001 : RTL ;Keep the door locked ++ SEP #$30 JSL $099B6F ;Add tower break seal REP #$30 - LDA #$0001 ;Prevent door from opening that frame otherwise it glitchy + LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy RTL + @@ -44,18 +44,18 @@ RTL FlagAgahnimDoor: LDA.l InvertedMode : BEQ .vanilla - LDA OverworldEventDataWRAM+$43 : ORA #$20 : STA OverworldEventDataWRAM+$43 ; activate GT overlay + LDA.l OverworldEventDataWRAM+$43 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$43 ; activate GT overlay .vanilla - LDA.b #$28 : STA.b $72 + LDA.b #$28 : STA.b ScrapBuffer72 RTL ;-------------------------------------------------------------------------------- LockAgahnimDoorsCore: - LDA $22 : CMP.w #1992 : !BLT + ; door too far left, skip + LDA.b LinkPosX : CMP.w #1992 : !BLT + ; door too far left, skip CMP.w #2088 : !BGE + ; door too rat right, skip - LDA $20 : CMP.w #1720 : !BGE + ; door too low, skip + LDA.b LinkPosY : CMP.w #1720 : !BGE + ; door too low, skip LDA.w #$0001 RTS + @@ -77,7 +77,7 @@ JML.l Overworld_Entrance_BRANCH_RHO AllowStartFromSingleEntranceCave: ; 16 Bit A, 16 bit XY ; do not need to preserve A or X or Y - LDA StartingEntrance : AND.w #$00FF ; What we wrote over + LDA.l StartingEntrance : AND.w #$00FF ; What we wrote over PHA TAX LDA.l StartingAreaExitOffset, X @@ -86,46 +86,45 @@ AllowStartFromSingleEntranceCave: BNE + JMP .done + - DEC - STA $00 - ASL #2 : !ADD $00 : ASL #2 ; mult by 20 + STA.b Scrap00 + ASL #2 : !ADD Scrap00 : ASL #2 ; mult by 20 TAX - LDA #$0016 : STA $7EC142 ; Cache the main screen designation - LDA.l StartingAreaExitTable+$05, X : STA $7EC144 ; Cache BG1 V scroll - LDA.l StartingAreaExitTable+$07, X : STA $7EC146 ; Cache BG1 H scroll - LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA $7EC148 ; Cache Link's Y coordinate - LDA.l StartingAreaExitTable+$0B, X : STA $7EC14A ; Cache Link's X coordinate - LDA.l StartingAreaExitTable+$0D, X : STA $7EC150 ; Cache Camera Y coord lower bound. - LDA.l StartingAreaExitTable+$0F, X : STA $7EC152 ; Cache Camera X coord lower bound. - LDA.l StartingAreaExitTable+$03, X : STA $7EC14E ; Cache Link VRAM Location + LDA.w #$0016 : STA.l EN_MAINDESQ ; Cache the main screen designation + LDA.l StartingAreaExitTable+$05, X : STA.l EN_BG2VERT ; Cache BG1 V scroll + LDA.l StartingAreaExitTable+$07, X : STA.l EN_BG2HORZ ; Cache BG1 H scroll + LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA.l EN_POSY ; Cache Link's Y coordinate + LDA.l StartingAreaExitTable+$0B, X : STA.l EN_POSX ; Cache Link's X coordinate + LDA.l StartingAreaExitTable+$0D, X : STA.l EN_SCROLLATN ; Cache Camera Y coord lower bound. + LDA.l StartingAreaExitTable+$0F, X : STA.l EN_SCROLLATW ; Cache Camera X coord lower bound. + LDA.l StartingAreaExitTable+$03, X : STA.l EN_OWTMAPI ; Cache Link VRAM Location ; Handle the 2 "unknown" bytes, which control what area of the backgound ; relative to the camera? gets loaded with new tile data as the player moves around ; (because some overworld areas like Kak are too big for a single VRAM tilemap) LDA.l StartingAreaExitTable+$11, X : AND.w #$00FF - BIT.w #$0080 : BEQ + : ORA #$FF00 : + ; Sign extend - STA.l $7EC16A + BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend + STA.l EN_SCRMODYA LDA.l StartingAreaExitTable+$12, X : AND.w #$00FF - BIT.w #$0080 : BEQ + : ORA #$FF00 : + ; Sign extend - STA.l $7EC16E + BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend + STA.l EN_SCRMODXA - LDA.w #$0000 : !SUB.l $7EC16A : STA $7EC16C - LDA.w #$0000 : !SUB.l $7EC16E : STA $7EC170 + LDA.w #$0000 : !SUB.l EN_SCRMODYA : STA.l EN_SCRMODYB + LDA.w #$0000 : !SUB.l EN_SCRMODXA : STA.l EN_SCRMODXB LDA.l StartingAreaExitTable+$02, X : AND.w #$00FF - STA $7EC14C ; Cache the overworld area number - STA $7EC140 ; Cache the aux overworld area number + STA.l EN_OWSCR ; Cache the overworld area number + STA.l EN_OWSCR2 ; Cache the aux overworld area number - STZ $0698 ;zero out door overlays in case starting overworld door is not set - STZ $0699 ;zero out door overlays in case starting overworld door is not set + STZ.w TileMapTile32 ;zero out door overlays in case starting overworld door is not set + STZ.w TileMapTile32+1 ;zero out door overlays in case starting overworld door is not set SEP #$20 ; set 8-bit accumulator - LDA $7EF3C8 : TAX - LDA.l StartingAreaOverworldDoor, X : STA.l $7F5099 ;Load overworld door + LDA.l StartingEntrance : TAX + LDA.l StartingAreaOverworldDoor, X : STA.l PreviousOverworldDoor ;Load overworld door REP #$20 ; reset 16-bit accumulator JSL.l CacheDoorFrameData @@ -135,7 +134,7 @@ RTL ;-------------------------------------------------------------------------------- AllowStartFromExit: - LDX $1CE8 + LDX.w MessageCursor LDA.l ShouldStartatExit, X : BNE .doStart LDA.l StartingEntrance ; what we wrote over @@ -146,39 +145,38 @@ JML.l AllowStartFromExitReturn LDA.l $028481, X ;Module_LocationMenu_starting_points ASL : TAX - LDA.l $02D8D2, X : STA $A0 - LDA.l $02D8D3, X : STA $A1 + LDA.l $02D8D2, X : STA.b RoomIndex + LDA.l $02D8D3, X : STA.b RoomIndex+1 ; Go to pre-overworld mode - LDA.b #$08 : STA $10 + LDA.b #$08 : STA.b GameMode - STZ $11 - STZ $B0 + STZ.b GameSubMode + STZ.b SubSubModule + STZ.w DeathReloadFlag + STZ.w RespawnFlag - STZ $010A - - STZ $04AA JSL Equipment_SearchForEquippedItemLong JSL HUD_RebuildLong2 - JSL $0DDD32 ; Equipment_UpdateEquippedItemLong + JSL Equipment_UpdateEquippedItemLong RTL ;-------------------------------------------------------------------------------- CheckHole: LDX.w #$0024 .nextHoleClassic - LDA.b $00 : CMP.l $1BB800, X + LDA.b Scrap00 : CMP.l $1BB800, X BNE .wrongMap16Classic - LDA.w $040A : CMP.l $1BB826, X + LDA.b OverworldIndex : CMP.l $1BB826, X BEQ .matchedHoleClassic .wrongMap16Classic DEX #2 : BPL .nextHoleClassic LDX.w #$001E .nextHoleExtra - LDA.b $00 : CMP.l ExtraHole_Map16, X + LDA.b Scrap00 : CMP.l ExtraHole_Map16, X BNE .wrongMap16Extra - LDA.w $040A : CMP.l ExtraHole_Area, X + LDA.b OverworldIndex : CMP.l ExtraHole_Area, X BEQ .matchedHoleExtra .wrongMap16Extra DEX #2 : BPL .nextHoleExtra @@ -189,14 +187,14 @@ CheckHole: .matchedHoleExtra SEP #$30 TXA : LSR A : TAX - LDA.l ExtraHole_Entrance, X : STA.w $010E : STZ.w $010F + LDA.l ExtraHole_Entrance, X : STA.w EntranceIndex : STZ.w EntranceIndex+1 JML Overworld_Hole_End ;-------------------------------------------------------------------------------- PreventEnterOnBonk: - STA $00 ; part of what we wrote over + STA.b Scrap00 ; part of what we wrote over LDA.l InvertedMode : AND.w #$00FF : BEQ .done - LDA.l $5D : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode? - LDA.b $8A : AND.w #$0040 : CMP $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch? + LDA.b LinkState : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode? + LDA.b OverworldIndex : AND.w #$0040 : CMP.b WorldCache : BEQ .done ; Are we bonking, or doing the superbunny glitch? ; If in inverted, are in mirror mode, and are bonking then do not enter JML.l PreventEnterOnBonk_BRANCH_IX @@ -206,8 +204,8 @@ PreventEnterOnBonk: JML.l PreventEnterOnBonk_return ;-------------------------------------------------------------------------------- TurtleRockEntranceFix: - LDA TurtleRockAutoOpenFix : BEQ .done - LDA $8A : CMP.b #$47 : BNE .done + LDA.l TurtleRockAutoOpenFix : BEQ .done + LDA.b OverworldIndex : CMP.b #$47 : BNE .done ;If exiting to turtle rock ensure the entrance is open LDA.l OverworldEventDataWRAM+$47 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$47 .done @@ -216,14 +214,14 @@ RTL AnimatedEntranceFix: ;when an entrance animation tries to start PHA LDA.l InvertedMode : BEQ + ;If we are in inverted mode - LDA $8A : AND.b #$40 : BNE + ;and in the light world + LDA.b OverworldIndex : AND.b #$40 : BNE + ;and in the light world PLA - STZ $04C6 ; skip it. - LDA #$00 + STZ.w OWEntranceCutscene ; skip it. + LDA.b #$00 RTL + PLA - STA $02E4 ;what we wrote over - STA $0FC1 ;what we wrote over - STA $0710 ;what we wrote over + STA.w CutsceneFlag ;what we wrote over + STA.w FreezeSprites ;what we wrote over + STA.w SkipOAM ;what we wrote over RTL diff --git a/events.asm b/events.asm index e2988ff..0380d1c 100644 --- a/events.asm +++ b/events.asm @@ -1,13 +1,6 @@ -;-------------------------------------------------------------------------------- -; OnLoadOW -;-------------------------------------------------------------------------------- -;OnLoadMap: -; LDA OverworldEventDataWRAM+$5B ; thing we wrote over -;RTL -;-------------------------------------------------------------------------------- OnPrepFileSelect: - LDA $11 : CMP.b #$03 : BNE + - LDA.b #$06 : STA $14 ; thing we wrote over + LDA.b GameSubMode : CMP.b #$03 : BNE + + LDA.b #$06 : STA.b NMISTRIPES ; thing we wrote over RTL + JSL.l LoadAlphabetTilemap @@ -22,7 +15,7 @@ OnDrawHud: JML.l ReturnFromOnDrawHud ;-------------------------------------------------------------------------------- OnDungeonEntrance: - STA $7EC172 ; thing we wrote over + STA.l PegColor ; thing we wrote over JSL MaybeFlagCompassTotalEntrance RTL ;-------------------------------------------------------------------------------- @@ -40,7 +33,7 @@ OnDungeonExit: JSL.l SQEGFix PLP : PLA - STA $040C : STZ $04AC ; thing we wrote over + STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over PHA : PHP JSL.l HUD_RebuildLong @@ -51,17 +44,17 @@ RTL ;-------------------------------------------------------------------------------- OnQuit: JSL.l SQEGFix - LDA.b #$00 : STA $7F5035 ; bandaid patch bug with mirroring away from text - LDA.b #$10 : STA $1C ; thing we wrote over + LDA.b #$00 : STA.l AltTextFlag ; bandaid patch bug with mirroring away from text + LDA.b #$10 : STA.b MAINDESQ ; thing we wrote over RTL ;-------------------------------------------------------------------------------- OnUncleItemGet: PHA LDA.l EscapeAssist - BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : + - BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : + - BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : + + BIT.b #$04 : BEQ + : STA.l InfiniteMagic : + + BIT.b #$02 : BEQ + : STA.l InfiniteBombs : + + BIT.b #$01 : BEQ + : STA.l InfiniteArrows : + PLA JSL.l Link_ReceiveItem @@ -91,15 +84,15 @@ 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 ; | 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 ; / PLB ; resolve instant post-aga if standard @@ -111,33 +104,31 @@ OnFileCreation: REP #$20 ; Set validity value and do some cleanup. Jump to checksum. - LDA.w #$55AA : STA.l $7003E1 - STZ $00 - STZ $01 - LDX.b $00 + LDA.w #$55AA : STA.l FileValiditySRAM + STZ.b Scrap00 + STZ.b Scrap01 + LDX.b Scrap00 LDY.w #$0000 TYA JML.l InitializeSaveFile_build_checksum ;-------------------------------------------------------------------------------- -!RNG_ITEM_LOCK_IN = "$7F5090" OnFileLoad: REP #$10 ; set 16 bit index registers JSL.l EnableForceBlank ; what we wrote over - LDA.b #$07 : STA $210C ; Restore screen 3 to normal tile area + LDA.b #$07 : STA.w BG34NBA ; Restore screen 3 to normal tile area LDA.l FileMarker : BNE + JSL.l OnNewFile LDA.b #$FF : STA.l FileMarker + - LDA.w $010A : BNE + ; don't adjust the worlds for "continue" or "save-continue" - LDA.l $7EC011 : BNE + ; don't adjust worlds if mosiac is enabled (Read: mirroring in dungeon) + LDA.w DeathReloadFlag : BNE + ; don't adjust the worlds for "continue" or "save-continue" + LDA.l MosaicLevel : BNE + ; don't adjust worlds if mosiac is enabled (Read: mirroring in dungeon) JSL.l DoWorldFix + JSL.l MasterSwordFollowerClear - LDA.b #$FF : STA !RNG_ITEM_LOCK_IN ; reset rng item lock-in - LDA.b #$00 : STA $7F5001 ; mark fake flipper softlock as impossible + LDA.b #$FF : STA.l RNGLockIn ; reset rng item lock-in LDA.l GenericKeys : BEQ + LDA.l CurrentGenericKeys : STA.l CurrentSmallKeys ; copy generic keys to key counter + @@ -152,86 +143,78 @@ OnFileLoad: SEP #$10 ; restore 8 bit index registers RTL ;-------------------------------------------------------------------------------- -!RNG_ITEM_LOCK_IN = "$7F5090" OnNewFile: PHX : PHP ; reset some values on new file that are otherwise only reset on hard reset SEP #$20 ; set 8-bit accumulator - STZ $03C4 ; ancilla slot index - STZ $047A ; EG - STZ $0B08 : STZ $0B09 ; arc variable - STZ $0CFB ; enemies killed (pull trees) - STZ $0CFC ; times taken damage (pull trees) - STZ $0FC7 : STZ $0FC8 : STZ $0FC9 : STZ $0FCA : STZ $0FCB : STZ $0FCC : STZ $0FCD ; prize packs - LDA #$00 : STA $7EC011 ; mosaic - JSL InitRNGPointerTable ; boss RNG + STZ.w AncillaSearch + STZ.w LayerAdjustment ; EG + STZ.w ArcVariable : STZ.w ArcVariable+1 + STZ.w TreePullKills + STZ.w TreePullHits + STZ.w PrizePackIndexes + STZ.w PrizePackIndexes+1 + STZ.w PrizePackIndexes+2 + STZ.w PrizePackIndexes+3 + STZ.w PrizePackIndexes+4 + STZ.w PrizePackIndexes+5 + STZ.w PrizePackIndexes+6 + LDA.b #$00 : STA.l MosaicLevel + JSL InitRNGPointerTable PLP : PLX RTL ;-------------------------------------------------------------------------------- OnInitFileSelect: - ; LDA.b #$10 : STA $BC ; init sprite pointer - does nothing unless spriteswap.asm is included - ; JSL.l SpriteSwap_SetSprite - LDA.b #$51 : STA $0AA2 ;<-- Line missing from JP1.0, needed to ensure "extra" copy of naming screen graphics are loaded. + LDA.b #$51 : STA.w $0AA2 ;<-- Line missing from JP1.0, needed to ensure "extra" copy of naming screen graphics are loaded. JSL.l EnableForceBlank RTL ;-------------------------------------------------------------------------------- OnLinkDamaged: JSL.l IncrementDamageTakenCounter_Arb - ;JSL.l FlipperKill JML.l OHKOTimer - ;-------------------------------------------------------------------------------- -OnEnterWater: - JSL.l RegisterWaterEntryScreen - - JSL.l MysteryWaterFunction - LDX.b #$04 -RTL +;OnEnterWater: +; JSL.l UnequipCapeQuiet ; what we wrote over +;RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPit: JSL.l OHKOTimer LDA.l AllowAccidentalMajorGlitch BEQ ++ --- LDA.b #$14 : STA $11 ; thing we wrote over +-- LDA.b #$14 : STA.b GameSubMode ; thing we wrote over RTL -++ LDA.b $10 : CMP.b #$12 : BNE -- +++ LDA.b GameMode : CMP.b #$12 : BNE -- - STZ.b $11 + STZ.b GameSubMode RTL ;-------------------------------------------------------------------------------- OnLinkDamagedFromPitOutdoors: JML.l OHKOTimer ; make sure this is last - ;-------------------------------------------------------------------------------- -!RNG_ITEM_LOCK_IN = "$7F5090" OnOWTransition: JSL.l FloodGateReset - JSL.l FlipperFlag JSL.l StatTransitionCounter PHP SEP #$20 ; set 8-bit accumulator - LDA.b #$FF : STA !RNG_ITEM_LOCK_IN ; clear lock-in + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in PLP RTL ;-------------------------------------------------------------------------------- -!DARK_DUCK_TEMP = "$7F509C" OnLoadDuckMap: - LDA !DARK_DUCK_TEMP + LDA.l DuckMapFlag BNE + - INC : STA !DARK_DUCK_TEMP - JSL OverworldMap_InitGfx : DEC $0200 - + INC : STA.l DuckMapFlag + JSL OverworldMap_InitGfx : DEC.w SubModuleInterface RTL + - LDA.b #$00 : STA !DARK_DUCK_TEMP + LDA.b #$00 : STA.l DuckMapFlag JML OverworldMap_DarkWorldTilemap - ;-------------------------------------------------------------------------------- PreItemGet: - LDA.b #$01 : STA !ITEM_BUSY ; mark item as busy + LDA.b #$01 : STA.l BusyItem ; mark item as busy RTL ;-------------------------------------------------------------------------------- PostItemGet: @@ -239,19 +222,19 @@ PostItemGet: RTL ;-------------------------------------------------------------------------------- PostItemAnimation: - LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished + LDA.b #$00 : STA.l BusyItem ; mark item as finished - LDA $7F509F : BEQ + - STZ $1CF0 : STZ $1CF1 ; reset decompression buffer + LDA.l TextBoxDefer : BEQ + + STZ.w TextID : STZ.w TextID+1 ; reset decompression buffer JSL.l Main_ShowTextMessage_Alt - LDA.b #$00 : STA $7F509F + LDA.b #$00 : STA.l TextBoxDefer + - LDA.w $02E9 : CMP.b #$01 : BNE + - LDA.b $2F : BEQ + + LDA.w ItemReceiptMethod : CMP.b #$01 : BNE + + LDA.b LinkDirection : BEQ + JSL.l IncrementChestTurnCounter + - STZ $02E9 : LDA $0C5E, X ; thing we wrote over to get here + STZ.w ItemReceiptMethod : LDA.w AncillaGet, X ; thing we wrote over to get here RTL ;-------------------------------------------------------------------------------- diff --git a/failure.asm b/failure.asm index 863c557..d5e07b8 100644 --- a/failure.asm +++ b/failure.asm @@ -1,9 +1,9 @@ pushtable -table "bsodencode.txt" +table "data/bsodencode.txt" ; Uncomment this to force a crash to test message -;pushpc : org $008132 : db 0 : pullpc +; pushpc : org $008132 : db 0 : pullpc ;=================================================================================================== @@ -11,29 +11,29 @@ DontUseZSNES: SEP #$35 ; sets carry and I flag too LDA.b #$00 - STA.l $4200 ; disable NMI and IRQ - STA.l $420C ; disable HDMA + STA.l NMITIMEN ; disable NMI and IRQ + STA.l HDMAEN ; disable HDMA ROR ; A = 0x80 from carry - STA.l $2100 - STA.l $2115 + STA.l INIDISP + STA.l VMAIN ; Empty VRAM - LDA.b #AllZeros>>16 : STA.l $4304 + LDA.b #AllZeros>>16 : STA.l A1B0 REP #$20 LDA.w #AllZeros - STA.l $4302 + STA.l A1T0L LDA.w #$1809 - STA.l $4300 + STA.l DMAP0 LDA.w #$0000 - STA.l $4305 + STA.l DAS0L LDA.w #$0001 - STA.l $420B + STA.l MDMAEN JSR ConfigurePPUForFailureReport JSR ConfigureBSODVWF @@ -43,7 +43,7 @@ DontUseZSNES: JSR DrawVWFMessage LDA.w #$0F0F - STA.w $2100 + STA.w INIDISP -- BRA -- @@ -77,29 +77,29 @@ Crashed: SEP #$35 ; sets carry and I flag too LDA.b #$00 - STA.l $4200 ; disable NMI and IRQ - STA.l $420C ; disable HDMA + STA.l NMITIMEN ; disable NMI and IRQ + STA.l HDMAEN ; disable HDMA ROR ; A = 0x80 from carry - STA.l $2100 - STA.l $2115 + STA.l INIDISP + STA.l VMAIN ; Empty VRAM - LDA.b #AllZeros>>16 : STA.l $4304 + LDA.b #AllZeros>>16 : STA.l A1B0 REP #$38 LDA.w #AllZeros - STA.l $4302 + STA.l A1T0L LDA.w #$1809 - STA.l $4300 + STA.l DMAP0 LDA.w #$0000 - STA.l $4305 + STA.l DAS0L LDA.w #$0001 - STA.l $420B + STA.l MDMAEN ;=================================================================================================== @@ -113,32 +113,32 @@ Crashed: ; stack pointer LDA.w #$0C38>>1 - STA.b $2116 + STA.b VMADDL TSC XBA AND.w #$00FF ORA.w #$0100 - STA.b $2118 + STA.b VMDATAL TSC AND.w #$00FF ORA.w #$0100 - STA.l $2118 + STA.l VMDATAL ; game module LDA.w #$0C78>>1 - STA.b $2116 + STA.b VMADDL - LDA.l $10 + LDA.l GameMode AND.w #$00FF ORA.w #$0100 - STA.b $2118 + STA.b VMDATAL - LDA.l $11 + LDA.l GameSubMode AND.w #$00FF ORA.w #$0100 - STA.b $2118 + STA.b VMDATAL ;--------------------------------------------------------------------------------------------------- @@ -176,7 +176,7 @@ Crashed: .next_row STA.l $7F0004 - STA.b $2116 + STA.b VMADDL LDY.w #20 @@ -194,7 +194,7 @@ Crashed: AND.w #$01FF .in_stack - STA.b $2118 + STA.b VMDATAL DEX TXA @@ -235,16 +235,10 @@ Crashed: JSR DrawVWFMessage LDA.w #$0F0F - STA.w $2100 + STA.w INIDISP -- BRA -- -; LDA.w #$0000 -; TCD -; -; TSC - - BSODMessage: db "A fatal error has occurred and resulted in an", $80 db "unrecoverable crash. ?", $80 @@ -260,11 +254,11 @@ BSODMessage: ;=================================================================================================== DrawVWFMessage: - STA.b $06 + STA.b Scrap06 .next - LDA.b ($06) - INC.b $06 + LDA.b (Scrap06) + INC.b Scrap06 AND.w #$00FF CMP.w #$0080 BEQ .done_row @@ -284,26 +278,26 @@ DrawVWFMessage: ASL TAX LDA.w .row_offset,X - STA.w $2116 + STA.w VMADDL INC.b VWFR LDA.w #$1800 - STA.w $4300 + STA.w DMAP0 LDA.w #20*16 - STA.w $4305 + STA.w DAS0L LDA.w #$1000 - STA.w $4302 + STA.w A1T0L SEP #$20 - STZ.w $2115 - STZ.w $4304 + STZ.w VMAIN + STZ.w A1B0 LDA.b #$01 - STA.w $420B + STA.w MDMAEN REP #$20 @@ -347,7 +341,7 @@ DrawFailureVWFChar: ASL ASL ADC.w #BSODFontGFX - STA.b $08 + STA.b Scrap08 LDA.b VWFP AND.w #$FFF8 @@ -402,23 +396,23 @@ LoadBSODHexFont: REP #$20 LDA.w #BSODHex - STA.w $4302 + STA.w A1T0L LDA.w #$1801 - STA.w $4300 + STA.w DMAP0 LDA.w #$1000 - STA.w $4305 + STA.w DAS0L LDA.w #$2800 - STA.w $2116 + STA.w VMADDL SEP #$20 LDA.b #BSODHex>>16 - STA.w $4304 + STA.w A1B0 LDA.b #$01 - STA.w $420B + STA.w MDMAEN REP #$30 @@ -437,21 +431,21 @@ ConfigureBSODVWF: LDX.b #$FF LDY.b #$7F - STZ.b $2121 - STZ.b $2122 : STZ.b $2122 + STZ.b CGADD + STZ.b CGDATA : STZ.b CGDATA - STX.b $2122 : STY.b $2122 + STX.b CGDATA : STY.b CGDATA LDA.b #$05 - STA.b $2121 + STA.b CGADD - LDA.b #$11 : STA.b $2122 : STY.b $2122 + LDA.b #$11 : STA.b CGDATA : STY.b CGDATA - LDA.b #$21 : STA.b $2121 - STX.b $2122 : STY.b $2122 + LDA.b #$21 : STA.b CGADD + STX.b CGDATA : STY.b CGDATA - LDA.b #$25 : STA.b $2121 - LDA.b #$11 : STA.b $2122 : STY.b $2122 + LDA.b #$25 : STA.b CGADD + LDA.b #$11 : STA.b CGDATA : STY.b CGDATA REP #$30 @@ -473,14 +467,14 @@ ConfigureBSODVWF: .start STA.w $20 - STA.b $2116 + STA.b VMADDL PLA LDY.w #30 .next_char - STA.b $2118 + STA.b VMDATAL INC DEY BNE .next_char @@ -516,39 +510,39 @@ ConfigurePPUForFailureReport: PHK PLB - STZ.w $2105 ; BG mode 0 - STZ.w $2106 ; no mosaic - STZ.w $2107 ; BG1 tilemap to $0000 - STZ.w $212D + STZ.w BGMODE ; BG mode 0 + STZ.w MOSAIC ; no mosaic + STZ.w BG1SC ; BG1 tilemap to $0000 + STZ.w TS - STZ.w $210D : STZ.w $210D - STZ.w $210E : STZ.w $210E - STZ.w $210F : STZ.w $210F - STZ.w $2110 : STZ.w $2110 + STZ.w BG1HOFS : STZ.w BG1HOFS + STZ.w BG1VOFS : STZ.w BG1VOFS + STZ.w BG2HOFS : STZ.w BG2HOFS + STZ.w BG2VOFS : STZ.w BG2VOFS - STZ.w $2123 - STZ.w $2131 - STZ.w $2133 + STZ.w W12SEL + STZ.w CGADSUB + STZ.w SETINI LDA.b #$04 - STA.w $2108 ; BG1 tilemap to $0800 + STA.w BG2SC ; BG1 tilemap to $0800 LDA.b #$21 - STA.w $210B + STA.w BG12NBA LDA.b #$03 - STA.w $212C + STA.w TM RTS ;=================================================================================================== BSODHex: -incbin "bsodhex.2bpp" +incbin "data/bsodhex.2bpp" BSODFontGFX: -incbin "bsodfont.1bpp" +incbin "data/bsodfont.1bpp" BSODCharWidths: ; [space] diff --git a/fairyfixes.asm b/fairyfixes.asm index 2305cd7..8057bdb 100644 --- a/fairyfixes.asm +++ b/fairyfixes.asm @@ -2,20 +2,20 @@ ; Fairy Changes & Fixes ;-------------------------------------------------------------------------------- RefillHealthPlusMagic: - LDA BigFairyHealth : STA HeartsFiller + LDA.l BigFairyHealth : STA.l HeartsFiller RTL ;-------------------------------------------------------------------------------- RefillHealthPlusMagic8bit: - LDA BigFairyHealth : STA HeartsFiller - LDA BigFairyMagic : STA MagicFiller + LDA.l BigFairyHealth : STA.l HeartsFiller + LDA.l BigFairyMagic : STA.l MagicFiller RTL ;-------------------------------------------------------------------------------- CheckFullHealth: - LDA BigFairyHealth : BEQ + - LDA CurrentHealth : CMP MaximumHealth : BNE .player_hp_not_full_yet + LDA.l BigFairyHealth : BEQ + + LDA.l CurrentHealth : CMP.l MaximumHealth : BNE .player_hp_not_full_yet + - LDA BigFairyMagic : BEQ + - LDA CurrentMagic : CMP.b #$80 : BNE .player_mp_not_full_yet + LDA.l BigFairyMagic : BEQ + + LDA.l CurrentMagic : CMP.b #$80 : BNE .player_mp_not_full_yet + LDA.b #$00 RTL @@ -30,57 +30,56 @@ FairyPond_Init: JML.l Sprite_ShowMessageFromPlayerContact + PHY : JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC + - LDA BottleContentsOne : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++ - LDA BottleContentsTwo : CMP.b #$02 : BNE ++ : LDA.b #$1D : PHA : BRA .emptyBottle : ++ - LDA BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++ - LDA BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++ + LDA.l BottleContentsOne : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++ + LDA.l BottleContentsTwo : CMP.b #$02 : BNE ++ : LDA.b #$1D : PHA : BRA .emptyBottle : ++ + LDA.l BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++ + LDA.l BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++ .noInventory - LDA.b #$0A : STA $0D80, X + LDA.b #$0A : STA.w SpriteActivity, X LDA.b #$51 LDY.b #$01 JSL.l Sprite_ShowMessageFromPlayerContact JMP .cleanup .emptyBottle - LDA.b #$02 : STA $0D80, X - ;JSL Player_ResetState ; If we continue to have issues, add this in too. (After determining the address for it) - STZ $2F - LDA.b #$01 : STA $02E4 - PLA : STA $1CE8 + LDA.b #$02 : STA.w SpriteActivity, X + STZ.b LinkDirection + LDA.b #$01 : STA.w CutsceneFlag + PLA : STA.w MessageCursor .cleanup - STZ $0EB0, X ; Clear the sprite's item-given variable + STZ.w SpriteDirectionTable, X ; Clear the sprite's item-given variable CLC ; skip rest of original function + : PLY RTL ;-------------------------------------------------------------------------------- HappinessPond_Check: - LDA $A0 : CMP.b #$15 ;what we wrote over + LDA.b RoomIndex : CMP.b #$15 ;what we wrote over BNE .done PHP LDA.b #$72 JSL Sprite_SpawnDynamically - LDA $0FD8 : STA $0D10, Y - LDA $0FD9 : STA $0D30, Y + LDA.w SpriteCoordCacheX : STA.w SpritePosXLow, Y + LDA.w SpriteCoordCacheX+1 : STA.w SpritePosXHigh, Y - LDA $0FDA : !SUB.b #$40 : STA $0D00, Y - LDA $0FDB : SBC.b #$00 : STA $0D20, Y + LDA.w SpriteCoordCacheY : !SUB.b #$40 : STA.w SpritePosYLow, Y + LDA.w SpriteCoordCacheY+1 : SBC.b #$00 : STA.w SpritePosYHigh, Y - LDA.b #$01 : STA $0DA0, Y + LDA.b #$01 : STA.w SpriteAuxTable, Y LDA.b #$BB JSL Sprite_SpawnDynamically - LDA.b #$08 : STA $0DD0, Y ; ensure we run prep for the shopkeeper + LDA.b #$08 : STA.w SpriteAITable, Y ; ensure we run prep for the shopkeeper - LDA $0FD8 : STA $0D10, Y - LDA $0FD9 : STA $0D30, Y + LDA.w SpriteCoordCacheX : STA.w SpritePosXLow, Y + LDA.w SpriteCoordCacheX+1 : STA.w SpritePosXHigh, Y - LDA $0FDA : !SUB.b #$20 : STA $0D00, Y - LDA $0FDB : SBC.b #$00 : STA $0D20, Y + LDA.w SpriteCoordCacheY : !SUB.b #$20 : STA.w SpritePosYLow, Y + LDA.w SpriteCoordCacheY+1 : SBC.b #$00 : STA.w SpritePosYHigh, Y - STZ $0DD0, X ; self terminate + STZ.w SpriteAITable, X ; self terminate PLP .done diff --git a/fastcredits.asm b/fastcredits.asm index 82702f3..4d39a83 100644 --- a/fastcredits.asm +++ b/fastcredits.asm @@ -1,21 +1,21 @@ ;=================================================================================================== FastCreditsCutsceneTimer: - BIT.b $F2-1 : BVC .slow + BIT.b Joy1B_All-1 : BVC .slow LDA.w #$0001 : STA.b $50 - LDA.b $C8 + LDA.b ScrapBufferBD+$0B CLC ADC.w #$0004 AND.w #$FFFE - STA.b $C8 + STA.b ScrapBufferBD+$0B SEP #$20 RTL .slow - INC.b $C8 + INC.b ScrapBufferBD+$0B SEP #$20 RTL @@ -51,16 +51,16 @@ FastCreditsCutsceneScroll: LDA.w $00E2,Y CMP.l $0EC308,X ; compare to target - ROL.b $00 ; put carry in here + ROL.b Scrap00 ; put carry in here LDA.l $0EC348,X ; get movement BPL ++ ; if positive, leave saved carry alone - INC.b $00 ; otherwise, flip it -++ ROR.b $00 ; recover carry + INC.b Scrap00 ; otherwise, flip it +++ ROR.b Scrap00 ; recover carry BCC ++ ; scroll if carry not set LDA.w #$0000 -++ BIT.b $F2-1 : BVC .slow ; check for X held +++ BIT.b Joy1B_All-1 : BVC .slow ; check for X held AND.w #$FFFF ; get sign of A BPL .positive @@ -90,8 +90,8 @@ FastCreditsCutsceneScroll: FastCreditsCutsceneUnderworldX: JSR FastCreditsCutsceneScrollX CLC - ADC.b $E2 - STA.b $E2 + ADC.b BG2H + STA.b BG2H RTL @@ -99,15 +99,15 @@ FastCreditsCutsceneUnderworldX: FastCreditsCutsceneUnderworldY: JSR FastCreditsCutsceneScrollY CLC - ADC.b $E8 - STA.b $E8 + ADC.b BG2V + STA.b BG2V RTL FastTextScroll: - LDA.b $1A - BIT.b $F2-1 : BVC .slow + LDA.b FrameCounter + BIT.b Joy1B_All-1 : BVC .slow AND.w #$0000 RTL diff --git a/fileselect.asm b/fileselect.asm index 4494ffc..dc7361f 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -1,18 +1,17 @@ -!ValidKeyLoaded = "$7F509E" ;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" -!FS_COLOR_BLUE = "$0C00" -!FS_COLOR_GRAY = "$1000" ;(Used to gray out items) -!FS_COLOR_BOOTS = "$1400" -!FS_COLOR_GREEN = "$1800" -!FS_COLOR_BW = "$1C00" +!FS_COLOR_BROWN = $0000 ;(only used for: Shovel, hammer, powder) +!FS_COLOR_RED = $0400 +!FS_COLOR_YELLOW = $0800 +!FS_COLOR_BLUE = $0C00 +!FS_COLOR_GRAY = $1000 ;(Used to gray out items) +!FS_COLOR_BOOTS = $1400 +!FS_COLOR_GREEN = $1800 +!FS_COLOR_BW = $1C00 -!FS_HFLIP = "$4000" -!FS_VFLIP = "$8000" +!FS_HFLIP = $4000 +!FS_VFLIP = $8000 macro fs_draw8x8(screenrow,screencol) ;Note due to XKAS's screwy math this formula is misleading. @@ -83,45 +82,45 @@ JMP DrawItemGray DrawBottle: AND.w #$00FF : BNE + - LDX #FileSelectItems_empty_bottle + LDX.w #FileSelectItems_empty_bottle JMP DrawItemGray + : DEC #2 : BNE + - LDX #FileSelectItems_empty_bottle + LDX.w #FileSelectItems_empty_bottle JMP DrawItem + : DEC : BNE + - LDX #FileSelectItems_red_potion + LDX.w #FileSelectItems_red_potion JMP DrawItem + : DEC : BNE + - LDX #FileSelectItems_green_potion + LDX.w #FileSelectItems_green_potion JMP DrawItem + : DEC : BNE + - LDX #FileSelectItems_blue_potion + LDX.w #FileSelectItems_blue_potion JMP DrawItem + : DEC : BNE + - LDX #FileSelectItems_fairy_bottle + LDX.w #FileSelectItems_fairy_bottle JMP DrawItem + : DEC : BNE + - LDX #FileSelectItems_bee_bottle + LDX.w #FileSelectItems_bee_bottle JMP DrawItem + - LDX #FileSelectItems_good_bee_bottle + LDX.w #FileSelectItems_good_bee_bottle JMP DrawItem DrawPlayerFile: - LDA $1A : AND.w #$0001 : BNE .normal + LDA.b FrameCounter : AND.w #$0001 : BNE .normal JSR DrawPlayerFileShared - INC $0710 ; Suppress animated tile updates for this frame + INC.w SkipOAM ; Suppress animated tile updates for this frame ; re-enable Stripe Image format upload on this frame ; Value loaded must match what gets set by AltBufferTable - LDA.w #$0161 : STA $1002 + LDA.w #$0161 : STA.w GFXStripes+2 BRA .done .normal - STZ $0710 ; ensure core animated tile updates are not suppressed - LDA #$FFFF : STA.w $1002 ; Suppress Stripe Image format upload on this frame + STZ.w SkipOAM ; ensure core animated tile updates are not suppressed + LDA.w #$FFFF : STA.w GFXStripes+2 ; Suppress Stripe Image format upload on this frame .done - LDA.w #$0004 : STA $02 ; thing we wrote over + LDA.w #$0004 : STA.b Scrap02 ; thing we wrote over RTL @@ -132,29 +131,29 @@ DrawPlayerFileShared: LDA.b #FileSelectItems>>16 : PHA : PLB REP #$20 ; restore 16 bit accumulator - LDA ExtendedFileNameSRAM+$08 : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$08 : ORA.w #!FS_COLOR_BW %fs_draw8x16(6,5) - LDA ExtendedFileNameSRAM+$0A : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$0A : ORA.w #!FS_COLOR_BW %fs_draw8x16(6,6) - LDA ExtendedFileNameSRAM+$0C : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$0C : ORA.w #!FS_COLOR_BW %fs_draw8x16(6,7) - LDA ExtendedFileNameSRAM+$0E : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$0E : ORA.w #!FS_COLOR_BW %fs_draw8x16(6,8) - LDA ExtendedFileNameSRAM+$10 : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$10 : ORA.w #!FS_COLOR_BW %fs_draw8x16(9,5) - LDA ExtendedFileNameSRAM+$12 : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$12 : ORA.w #!FS_COLOR_BW %fs_draw8x16(9,6) - LDA ExtendedFileNameSRAM+$14 : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$14 : ORA.w #!FS_COLOR_BW %fs_draw8x16(9,7) - LDA ExtendedFileNameSRAM+$16 : ORA.w #!FS_COLOR_BW + LDA.l ExtendedFileNameSRAM+$16 : ORA.w #!FS_COLOR_BW %fs_draw8x16(9,8) JSR FileSelectDrawHudBar ; Bow LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ + - LDA EquipmentSRAM+$00 : AND.w #$00FF : BEQ ++ + LDA.l EquipmentSRAM+$00 : AND.w #$00FF : BEQ ++ %fs_drawItem(3,12,FileSelectItems_silver_bow) BRA .bow_end ++ @@ -327,10 +326,10 @@ DrawPlayerFileShared: %fs_drawItem(9,26,FileSelectItems_heart_piece_3_of_4) ++ - LDA EquipmentSRAM+$0108 : AND.w #$00FF + LDA.l EquipmentSRAM+$0108 : AND.w #$00FF JSL.l HexToDec - LDA $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,26) - LDA $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,27) + 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) ; Boots %fs_drawItemBasic(EquipmentSRAM+$15,3,28,FileSelectItems_boots) @@ -353,21 +352,21 @@ DrawPlayerFileShared: %fs_drawItemBasic(EquipmentSRAM+$17,9,28,FileSelectItems_pearl) ; Pendants - LDA EquipmentSRAM+$34 : AND.w #$0004 : BEQ + + LDA.l EquipmentSRAM+$34 : AND.w #$0004 : BEQ + %fs_drawItem(12,12,FileSelectItems_green_pendant) BRA ++ + %fs_drawItem(12,12,FileSelectItems_no_pendant) ++ - LDA EquipmentSRAM+$34 : AND.w #$0002 : BEQ + + LDA.l EquipmentSRAM+$34 : AND.w #$0002 : BEQ + %fs_drawItem(12,14,FileSelectItems_blue_pendant) BRA ++ + %fs_drawItem(12,14,FileSelectItems_no_pendant) ++ - LDA EquipmentSRAM+$34 : AND.w #$0001 : BEQ + + LDA.l EquipmentSRAM+$34 : AND.w #$0001 : BEQ + %fs_drawItem(12,16,FileSelectItems_red_pendant) BRA ++ + @@ -375,49 +374,49 @@ DrawPlayerFileShared: ++ ; Crystals - LDA EquipmentSRAM+$3A : AND.w #$0002 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0002 : BEQ + LDA.w #$0297|!FS_COLOR_BLUE BRA ++ + LDA.w #$0287|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,18) - LDA EquipmentSRAM+$3A : AND.w #$0010 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0010 : BEQ + LDA.w #$0297|!FS_COLOR_BLUE BRA ++ + LDA.w #$0287|!FS_COLOR_GRAY ++ : %fs_draw16x8(12,19) - LDA EquipmentSRAM+$3A : AND.w #$0040 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0040 : BEQ + LDA.w #$0297|!FS_COLOR_BLUE BRA ++ + LDA.w #$0287|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,20) - LDA EquipmentSRAM+$3A : AND.w #$0020 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0020 : BEQ + LDA.w #$0297|!FS_COLOR_BLUE BRA ++ + LDA.w #$0287|!FS_COLOR_GRAY ++ : %fs_draw16x8(12,21) - LDA EquipmentSRAM+$3A : AND.w #$0004 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0004 : BEQ + LDA.w #$0297|!FS_COLOR_RED BRA ++ + LDA.w #$0287|!FS_COLOR_GRAY ++ : %fs_draw16x8(13,22) - LDA EquipmentSRAM+$3A : AND.w #$0001 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0001 : BEQ + LDA.w #$0297|!FS_COLOR_RED BRA ++ + LDA.w #$0287|!FS_COLOR_GRAY ++ : %fs_draw16x8(12,23) - LDA EquipmentSRAM+$3A : AND.w #$0008 : BEQ + + LDA.l EquipmentSRAM+$3A : AND.w #$0008 : BEQ + LDA.w #$0297|!FS_COLOR_BLUE BRA ++ + @@ -558,104 +557,103 @@ FileSelectItems: ;-------------------------------------------------------------------------------- FileSelectDrawHudBar: - LDA #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10) - LDA EquipmentSRAM+$22 + LDA.w #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10) + LDA.l DisplayRupeesSRAM JSL.l HexToDec - LDA $7F5004 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9) - LDA $7F5005 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10) - LDA $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) - LDA $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) + LDA.l HexToDecDigit2 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9) + LDA.l HexToDecDigit3 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10) + LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11) + LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12) - LDA #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) - LDA EquipmentSRAM+$03 : AND.w #$00FF + LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14) + LDA.l BombsEquipmentSRAM : AND.w #$00FF JSL.l HexToDec - LDA $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14) - LDA $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15) + LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14) + LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15) LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ + - LDA #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17) + LDA.w #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17) BRA ++ + - LDA #$0289|!FS_COLOR_BROWN : %fs_draw16x8(0,17) + LDA.w #$0289|!FS_COLOR_BROWN : %fs_draw16x8(0,17) ++ - LDA EquipmentSRAM+$37 : AND.w #$00FF + LDA.l CurrentArrowsSRAM : AND.w #$00FF JSL.l HexToDec - LDA $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17) - LDA $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18) + 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) RTS ;-------------------------------------------------------------------------------- AltBufferTable: - LDA.b #$02 : STA $210c ; Have Screen 3 use same tile area as screens 1 + 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 $1000, X + STA.w GFXStripes, X DEX : DEX : BNE - ; set vram offsets - LDA.w #$0161 : STA $1002 ;file 1 top row - LDA.w #$2161 : STA $1042 ;file 1 bottom row + 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 $1082 ;gap row top - LDA.w #$6161 : STA $10C2 ;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 $1102 ;file 2 top row - LDA.w #$A161 : STA $1142 ;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 $1182 ;gap row top - LDA.w #$E161 : STA $11c2 ;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 $1202 ;file 3 top row - LDA.w #$2162 : STA $1242 ;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 $1282 ;extra gap row top - LDA.w #$6162 : STA $12c2 ;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 $1302 ;extra gap row top - LDA.w #$A162 : STA $1342 ;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 $1382 ;extra gap row top - LDA.w #$E162 : STA $13C2 ;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 $1004 ;file 1 top row - STA $1044 ;file 1 bottom row - STA $1084 ;gap row top - STA $10C4 ;gap row bottom - STA $1104 ;file 2 top row - STA $1144 ;file 2 bottom row - STA $1184 ;gap row top - STA $11C4 ;gap row bottom - STA $1204 ;file 3 top row - STA $1244 ;file 3 bottom row - STA $1284 ;extra gap row top - STA $12C4 ;extra gap row bottom - STA $1304 ;extra gap row top - STA $1344 ;extra gap row bottom - STA $1384 ;extra gap row top - STA $13C4 ;extra gap row bottom + 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 $1402 + LDA.w #$00FF : STA.w GFXStripes+$0402 ; Draw Unlock option if applicable - LDA $10 : 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 + 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 ;-------------------------------------------------------------------------------- @@ -663,36 +661,36 @@ AltBufferTable_credits: JSL AltBufferTable_noScreen3Change REP #$20 - LDA.w #$6168 : STA $1002 ;file 1 top row - LDA.w #$8168 : STA $1042 ;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 $1082 ;gap row top - LDA.w #$C168 : STA $10C2 ;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 $1102 ;file 2 top row - LDA.w #$0169 : STA $1142 ;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 $1182 ;gap row top - LDA.w #$4169 : STA $11c2 ;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 $1202 ;file 3 top row - LDA.w #$8169 : STA $1242 ;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 $1282 ;extra gap row top - LDA.w #$C169 : STA $12c2 ;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 $1302 ;extra gap row top - LDA.w #$016A : STA $1342 ;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 $1382 ;extra gap row top - LDA.w #$416A : STA $13C2 ;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 RTL ;-------------------------------------------------------------------------------- macro LayoutPriority(address) LDX.w #$003C -- : LDA.w
, X : ORA #$2000 : STA.w
, X +- : LDA.w
, X : ORA.w #$2000 : STA.w
, X DEX : DEX : BNE - endmacro @@ -718,47 +716,47 @@ RTL ;-------------------------------------------------------------------------------- LoadFullItemTiles: PHA : PHX - LDA $4300 : PHA ; preserve DMA parameters - LDA $4301 : PHA ; preserve DMA parameters - LDA $4302 : PHA ; preserve DMA parameters - LDA $4303 : PHA ; preserve DMA parameters - LDA $4304 : PHA ; preserve DMA parameters - LDA $4305 : PHA ; preserve DMA parameters - LDA $4306 : PHA ; preserve DMA parameters + 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 $2115 ; write read increment on $2119 - LDA.b #$01 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode - LDA.b #$18 : STA $4301 ; set bus B destination to VRAM register + 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 $2116 ; write VRAM destination address - LDA.b #$30 : STA $2117 ; write VRAM destination address + LDA.b #$00 : STA.w VMADDL ; write VRAM destination address + LDA.b #$30 : STA.w VMADDH ; write VRAM destination address - LDA.b #$31 : STA $4304 ; set bus A source bank - LDA.b #FileSelectNewGraphics : STA $4302 ; set bus A source address to ROM - LDA.b #FileSelectNewGraphics>>8 : STA $4303 ; set bus A source address to ROM + 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 $2100 : PHA : LDA.b #$80 : STA $2100 ; save screen state & turn screen off + LDA.w INIDISP : PHA : LDA.b #$80 : STA.w INIDISP ; save screen state & turn screen off - STZ $4305 : LDA.b #$10 : STA $4306 ; set transfer size to 0x1000 - LDA #$01 : STA $420B ; begin DMA transfer + 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 $2100 ; put screen back however it was before + PLA : STA.w INIDISP ; put screen back however it was before ;-------------------------------------------------------------------------------- - PLA : STA $4306 ; restore DMA parameters - PLA : STA $4305 ; restore DMA parameters - PLA : STA $4304 ; restore DMA parameters - PLA : STA $4303 ; restore DMA parameters - PLA : STA $4302 ; restore DMA parameters - PLA : STA $4301 ; restore DMA parameters - PLA : STA $4300 ; restore DMA parameters + 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 RTL ;-------------------------------------------------------------------------------- SetFileSelectPalette: - LDA $10 : CMP.b #$04 : BNE + + LDA.b GameMode : CMP.b #$04 : BNE + ; load the vanilla file select screen BG3 palette for naming screen - LDA.b #$01 : STA $0AB2 + LDA.b #$01 : STA.w $0AB2 JSL.l Palette_Hud BRA .done + @@ -774,12 +772,12 @@ LoadCustomHudPalette: LDX.b #$40 - LDA.l GFX_HUD_Palette, X - STA.l $7EC500, X + STA.l PaletteBuffer, X DEX : DEX BPL - SEP #$20 - INC $15 ; ensure CGRAM gets updated + INC.b NMICGRAM ; ensure CGRAM gets updated PLX : PLA RTL ;-------------------------------------------------------------------------------- @@ -787,16 +785,16 @@ DrawPlayerFile_credits: ; see $6563C for drawing first file name and hearts REP #$20 ; set 16 bit accumulator - LDA EquipmentSRAM+$99 : ORA.w #!FS_COLOR_BW + LDA.l EquipmentSRAM+$99 : ORA.w #!FS_COLOR_BW %fs_draw8x16(3,5) - LDA EquipmentSRAM+$9B : ORA.w #!FS_COLOR_BW + LDA.l EquipmentSRAM+$9B : ORA.w #!FS_COLOR_BW %fs_draw8x16(3,6) - LDA EquipmentSRAM+$9D : ORA.w #!FS_COLOR_BW + LDA.l EquipmentSRAM+$9D : ORA.w #!FS_COLOR_BW %fs_draw8x16(3,7) - LDA EquipmentSRAM+$9F : ORA.w #!FS_COLOR_BW + LDA.l EquipmentSRAM+$9F : ORA.w #!FS_COLOR_BW %fs_draw8x16(3,8) - - LDA EquipmentSRAM+$2C : AND.w #$00FF : LSR #3 : STA $02 + + LDA.l EquipmentSRAM+$2C : AND.w #$00FF : LSR #3 : STA.b Scrap02 %fs_LDY_screenpos(0,20) LDA.w #$028F|!FS_COLOR_RED LDX.w #$000A @@ -810,60 +808,61 @@ DrawPlayerFile_credits: TYA : !ADD.w #$40-$14 : TAY PLA + - DEC $02 : BNE .nextHeart + DEC.b Scrap02 : BNE .nextHeart JSR DrawPlayerFileShared RTL ;-------------------------------------------------------------------------------- FSCursorUp: - LDA $C8 : BNE + - LDA #$04 ; up from file becomes delete + LDA.b FileSelectPosition : BNE + + LDA.b #$04 ; up from file becomes delete BRA .done - + : CMP #$03 : BNE + - LDA #$00 ; up from unlock is the file + + : CMP.b #$03 : BNE + + LDA.b #$00 ; up from unlock is the file BRA .done + LDA.l IsEncrypted : CMP.b #$02 : BNE + - LDA.l !ValidKeyLoaded : BNE + - LDA #$03 ; up from delete is unlock for password protected seeds + LDA.l ValidKeyLoaded : BNE + + LDA.b #$03 ; up from delete is unlock for password protected seeds BRA .done + - LDA #$00 ;otherwise up from delete is file + LDA.b #$00 ;otherwise up from delete is file .done - STA $C8 + STA.b FileSelectPosition RTL + FSCursorDown: - LDA $C8 : BNE + + LDA.b FileSelectPosition : BNE + LDA.l IsEncrypted : CMP.b #$02 : BNE ++ - LDA.l !ValidKeyLoaded : BNE ++ - LDA #$03 ; down from file is unlock for password protected seeds + LDA.l ValidKeyLoaded : BNE ++ + LDA.b #$03 ; down from file is unlock for password protected seeds BRA .done ++ - LDA #$04 ;otherwise down from file is delete + LDA.b #$04 ;otherwise down from file is delete BRA .done - + : CMP #$03 : BNE + - LDA #$04 ; down from unlock is delete + + : CMP.b #$03 : BNE + + LDA.b #$04 ; down from unlock is delete BRA .done + - LDA #$00 ; down from delete is file + LDA.b #$00 ; down from delete is file .done - STA $C8 + STA.b FileSelectPosition RTL ;-------------------------------------------------------------------------------- FSSelectFile: LDA.l IsEncrypted : CMP.b #$02 : BNE .normal - STZ $012E ; temporarily cancel file screen selection sound + STZ.w SFX2 ; temporarily cancel file screen selection sound PHX : PHY JSL ValidatePassword : BEQ .must_unlock PLY : PLX - LDA.b #$2C : STA $012E ;file screen selection sound + LDA.b #$2C : STA.w SFX2 ;file screen selection sound .normal - LDA.b #$F1 : STA $012C + LDA.b #$F1 : STA.w MusicControlRequest JML FSSelectFile_continue .must_unlock PLY : PLX - LDA #$03 : STA $C8 ;set cursor to unlock - LDA.b #$3C : STA $012E ; play error sound + LDA.b #$03 : STA.b FileSelectPosition ;set cursor to unlock + LDA.b #$3C : STA.w SFX2 ; play error sound JML FSSelectFile_return ;-------------------------------------------------------------------------------- MaybeForceFileName: @@ -873,8 +872,8 @@ MaybeForceFileName: - INX : INX LDA.l StaticFileName, X : STA.l ExtendedFileNameSRAM, X - CPX #$16 : BEQ .done - CPX #$08 : BCS - + CPX.b #$16 : BEQ .done + CPX.b #$08 : BCS - STA.l FileNameVanillaSRAM, X BRA - .done diff --git a/firebarlayer.asm b/firebarlayer.asm deleted file mode 100644 index f7118b2..0000000 --- a/firebarlayer.asm +++ /dev/null @@ -1,8 +0,0 @@ -NewFireBarDamage: -{ - LDA $00EE : CMP $0F20, X : BNE .NotSameLayer - JSL Sprite_AttemptDamageToPlayerPlusRecoilLong - RTL - .NotSameLayer - RTL -} \ No newline at end of file diff --git a/flipperkill.asm b/flipperkill.asm index b7a9c53..e32b5a5 100644 --- a/flipperkill.asm +++ b/flipperkill.asm @@ -1,78 +1,14 @@ ;================================================================================ ; Fake Flippers Softlock Fix ;-------------------------------------------------------------------------------- -FlipperKill: - PHP - LDA $5D : CMP #$04 : BNE .done ; skip if we're not swimming - LDA FlippersEquipment : BNE .done ; skip if we have the flippers - LDA $7F5001 : BEQ .done ; skip if we're not marked in danger for softlock - LDA $8A : CMP $7F5098 : BEQ .done ; skip if we're on the same screen we entered the water on - ;JSL.l KillFairies ; take away fairies - LDA IgnoreFaeries : ORA.b #$04 : STA IgnoreFaeries - LDA.b #$00 : STA CurrentHealth ; kill link - LDA.b #$00 : STA $7F5001 ; mark fake flipper softlock as impossible - .done - PLP - LDA CurrentHealth ; thing we wrote over -RTL -;-------------------------------------------------------------------------------- -IgnoreFairyCheck: - LDX.b #$00 ; thing we wrote over - LDA IgnoreFaeries : BIT.b #$04 : BEQ .normal - - AND.b #$FB : STA IgnoreFaeries ; clear ignore fairy flag - LDA.b #$F0 ; set check to invalid entry -RTL - .normal - LDA.b #$06 ; set check to fairy -RTL -;-------------------------------------------------------------------------------- -;KillFairies: -; LDA BottleContentsOne : CMP #$06 : BNE + -; LDA #$02 : STA BottleContentsOne -; + LDA BottleContentsTwo : CMP #$06 : BNE + -; LDA #$02 : STA BottleContentsTwo -; + LDA BottleContentsThree : CMP #$06 : BNE + -; LDA #$02 : STA BottleContentsThree -; + LDA BottleContentsFour : CMP #$06 : BNE + -; LDA #$02 : STA BottleContentsFour -; + -;RTL -;-------------------------------------------------------------------------------- -FlipperReset: - JSL $0998E8 ; AddTransitionSplash - LDA #$00 : STA $7F5001 ; mark fake flipper softlock as impossible - .done -RTL -;-------------------------------------------------------------------------------- -FlipperFlag: - LDA $5D : CMP #$04 : BNE .done ; skip if we're not swimming - LDA FlippersEquipment : BNE .safe ; skip if we have the flippers - LDA #$01 : STA $7F5001 ; mark fake flipper softlock as possible - BRA .done - .safe - LDA #$00 : STA $7F5001 ; mark fake flipper softlock as impossible - .done -RTL -;-------------------------------------------------------------------------------- -RegisterWaterEntryScreen: - PHA - LDA $8A : STA $7F5098 ; store ow index - PLA -RTL -;-------------------------------------------------------------------------------- -MysteryWaterFunction: ; *$3AE54 ALTERNATE ENTRY POINT - LDA.b #$20 : STA $02E2 - STZ $037B - STZ $55 - STZ $0360 -RTL -;-------------------------------------------------------------------------------- - -;=================================================================================================== -; More elegant solution -;=================================================================================================== +; Written over and used by OnEnterWater hook. +UnequipCapeQuiet: + LDA.b #$20 : STA.w PoofTimer + STZ.w NoDamage + STZ.b CapeOn + STZ.w LinkZap +RTL protectff: LDA.l AllowAccidentalMajorGlitch @@ -83,16 +19,16 @@ protectff: .yes_protect REP #$30 - LDA.b $20 + LDA.b LinkPosY AND.w #$1E00 ASL ASL ASL - STA.b $06 + STA.b Scrap06 - LDA.b $22 + LDA.b LinkPosX AND.w #$1E00 - ORA.b $06 + ORA.b Scrap06 XBA LSR @@ -103,7 +39,7 @@ protectff: ; Remove dark world bit ; in game table that converts coordinates to actual screen ID ; special case for other areas - LDA.b $8A + LDA.b OverworldIndex BMI .special_overworld AND.b #$3F @@ -112,17 +48,17 @@ protectff: .protect LDA.b #$15 - STA.b $5D + STA.b LinkState - STZ.b $2E - STZ.b $67 + STZ.b LinkAnimationStep + STZ.b LinkWalkDirection LDA.b #$02 - STA.b $2F + STA.b LinkDirection - STZ.w $0112 - STZ.w $02E4 - STZ.w $0FFC + STZ.w MedallionFlag + STZ.w CutsceneFlag + STZ.w NoMenu ++ RTL diff --git a/floodgatesoftlock.asm b/floodgatesoftlock.asm index e593344..daefa04 100644 --- a/floodgatesoftlock.asm +++ b/floodgatesoftlock.asm @@ -5,21 +5,21 @@ FloodGateAndMasterSwordFollowerReset: JSL.l MasterSwordFollowerClear FloodGateReset: LDA.l PersistentFloodgate : BNE + - LDA OverworldEventDataWRAM+$3B : AND.b #$DF : STA OverworldEventDataWRAM+$3B ; reset water outside floodgate - LDA OverworldEventDataWRAM+$7B : AND.b #$DF : STA OverworldEventDataWRAM+$7B ; reset water outside swamp palace - LDA RoomDataWRAM[$010B].low : AND.b #$7F : STA RoomDataWRAM[$010B].low ; clear water inside floodgate - LDA RoomDataWRAM[$28].high : AND.b #$FE : STA RoomDataWRAM[$28].high ; clear water front room (room 40) + LDA.l OverworldEventDataWRAM+$3B : AND.b #$DF : STA.l OverworldEventDataWRAM+$3B ; reset water outside floodgate + LDA.l OverworldEventDataWRAM+$7B : AND.b #$DF : STA.l OverworldEventDataWRAM+$7B ; reset water outside swamp palace + LDA.l RoomDataWRAM[$010B].low : AND.b #$7F : STA.l RoomDataWRAM[$010B].low ; clear water inside floodgate + LDA.l RoomDataWRAM[$28].high : AND.b #$FE : STA.l RoomDataWRAM[$28].high ; clear water front room (room 40) + FloodGateResetInner: LDA.l Bugfix_SwampWaterLevel : BEQ +++ - LDA RoomDataWRAM[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected. - LDA FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset. + LDA.l RoomDataWRAM[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected. + LDA.l FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset. + - LDA RoomDataWRAM[$37].low : AND.b #$7F : STA RoomDataWRAM[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches + LDA.l RoomDataWRAM[$37].low : AND.b #$7F : STA.l RoomDataWRAM[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches ++ - LDA RoomDataWRAM[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected. + LDA.l RoomDataWRAM[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected. ; no need to check for flippers on the inner room, as you can't get to the west door no matter what, without flippers. - LDA RoomDataWRAM[$35].low : AND.b #$7F : STA RoomDataWRAM[$35].low ; clear water room 53 - inner room with the easy key flood softlock + LDA.l RoomDataWRAM[$35].low : AND.b #$7F : STA.l RoomDataWRAM[$35].low ; clear water room 53 - inner room with the easy key flood softlock +++ RTL ;================================================================================ diff --git a/flute.asm b/flute.asm index fe88520..46b171e 100644 --- a/flute.asm +++ b/flute.asm @@ -2,38 +2,38 @@ ; Randomize Flute Dig Item ;-------------------------------------------------------------------------------- SpawnHauntedGroveItem: - LDA $8A : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove - LDA $1B : BEQ + : RTL : + ; Skip if indoors + 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 $7FFE00 + STA.l MiniGameTime JSL Sprite_SpawnDynamically LDX.b #$00 - LDA $2F : CMP.b #$04 : BEQ + : INX : + + LDA.b LinkDirection : CMP.b #$04 : BEQ + : INX : + - LDA.l .x_speeds, X : STA $0D50, Y + LDA.l .x_speeds, X : STA.w SpriteVelocityX, Y - LDA.b #$00 : STA $0D40, Y - LDA.b #$18 : STA $0F80, Y - LDA.b #$FF : STA $0B58, Y - LDA.b #$30 : STA $0F10, Y + LDA.b #$00 : STA.w SpriteVelocityY, Y + LDA.b #$18 : STA.w SpriteVelocityZ, Y + LDA.b #$FF : STA.w EnemyStunTimer, Y + LDA.b #$30 : STA.w SpriteTimerE, Y - LDA $22 : !ADD.l .x_offsets, X - AND.b #$F0 : STA $0D10, Y - LDA $23 : ADC.b #$00 : STA $0D30, Y + LDA.b LinkPosX : !ADD.l .x_offsets, X + AND.b #$F0 : STA.w SpritePosXLow, Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh, Y - LDA $20 : !ADD.b #$16 : AND.b #$F0 : STA $0D00, Y - LDA $21 : ADC.b #$00 : STA $0D20, Y + LDA.b LinkPosY : !ADD.b #$16 : AND.b #$F0 : STA.w SpritePosYLow, Y + LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh, Y - LDA.b #$00 : STA $0F20, Y + LDA.b #$00 : STA.w SpriteLayer, Y TYX - LDX $8A ; haunted grove (208D0A) - LDA OverworldEventDataWRAM, X : AND.b #$40 : BNE + + LDX.b OverworldIndex ; haunted grove (208D0A) + LDA.l OverworldEventDataWRAM, X : AND.b #$40 : BNE + LDA.b #$1B : JSL Sound_SetSfx3PanLong + RTL @@ -52,30 +52,30 @@ RTL } ;-------------------------------------------------------------------------------- FluteBoy: - LDA $10 : CMP.b #$1A : BEQ + - LDA.b #$01 : STA $0FDD + LDA.b GameMode : CMP.b #$1A : BEQ + + LDA.b #$01 : STA.w $0FDD JML.l FluteBoy_Abort + - LDA $0D80, X : CMP.b #$03 ; thing we wrote over + LDA.w SpriteActivity, X : CMP.b #$03 ; thing we wrote over JML.l FluteBoy_Continue ;-------------------------------------------------------------------------------- FreeDuckCheck: LDA.l InvertedMode : BEQ .done - LDA FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active + LDA.l FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active ; check the area, is it #$18 = 30? - LDA $8A : CMP.b #$18 : BNE .done + LDA.b OverworldIndex : CMP.b #$18 : BNE .done REP #$20 ; Y coordinate boundaries for setting it off. - LDA $20 + LDA.b LinkPosY CMP.w #$0760 : BCC .done CMP.w #$07E0 : BCS .done ; do if( (Ycoord >= 0x0760) && (Ycoord < 0x07e0 - LDA $22 + LDA.b LinkPosX CMP.w #$01CF : BCC .done CMP.w #$0230 : BCS .done @@ -84,7 +84,7 @@ FreeDuckCheck: SEP #$20 ; Apparently a special Overworld mode for doing this? - LDA.b #$2D : STA $11 + LDA.b #$2D : STA.b GameSubMode ; Trigger the sequence to start the weathervane explosion. LDY.b #$00 @@ -94,12 +94,12 @@ FreeDuckCheck: BRA .skipSong .done SEP #$20 - LDA.b #$80 : STA $03F0 ; thing we wrote over, load flute timer + LDA.b #$80 : STA.w FluteTimer ; thing we wrote over LDA.b #$13 RTL .skipSong SEP #$20 - LDA.b #$80 : STA $03F0 ; thing we wrote over, load flute timer + LDA.b #$80 : STA.w FluteTimer ; thing we wrote over LDA.b #$00 RTL ;-------------------------------------------------------------------------------- diff --git a/framehook.asm b/framehook.asm index 0da5dba..dc7751c 100644 --- a/framehook.asm +++ b/framehook.asm @@ -2,58 +2,40 @@ ; Frame Hook ;-------------------------------------------------------------------------------- FrameHookAction: - JSL $0080B5 ; Module_MainRouting - JSL CheckMusicLoadRequest - PHP : REP #$30 : PHA - - SEP #$20 - - LDA StatsLocked : BNE ++ - REP #$20 ; set 16-bit accumulator - LDA LoopFrames : INC : STA LoopFrames : BNE + - LDA LoopFrames+2 : INC : STA LoopFrames+2 - + - LDA $10 : CMP.w #$010E : BNE + ; move this to nmi hook? - LDA MenuFrames : INC : STA MenuFrames : BNE + - LDA MenuFrames+2 : INC : STA MenuFrames+2 - + - ++ - REP #$30 : PLA : PLP + JSL $0080B5 ; Module_MainRouting + JSL CheckMusicLoadRequest + PHP : REP #$30 : PHA + SEP #$20 + LDA.l StatsLocked : BNE ++ + REP #$20 ; set 16-bit accumulator + LDA.l LoopFrames : INC : STA.l LoopFrames : BNE + + LDA.l LoopFrames+2 : INC : STA.l LoopFrames+2 + + + LDA.l GameMode : CMP.w #$010E : BNE ++ ; move this to nmi hook? + LDA.l MenuFrames : INC : STA.l MenuFrames : BNE ++ + LDA.l MenuFrames+2 : INC : STA.l MenuFrames+2 + ++ + REP #$30 : PLA : PLP + RTL ;-------------------------------------------------------------------------------- NMIHookAction: - PHA : PHX : PHY : PHD ; thing we wrote over, push stuff - - LDA StatsLocked : AND.w #$00FF : BNE ++ - LDA NMIFrames : INC : STA NMIFrames : BNE + - LDA NMIFrames+2 : INC : STA NMIFrames+2 - + - ++ - + PHA : PHX : PHY : PHD ; thing we wrote over, push stuff + LDA.l StatsLocked : AND.w #$00FF : BNE + + LDA.l NMIFrames : INC : STA.l NMIFrames : BNE + + LDA.l NMIFrames+2 : INC : STA.l NMIFrames+2 + + + JML.l NMIHookReturn ;-------------------------------------------------------------------------------- -!NMI_AUX = "$7F5044" PostNMIHookAction: - LDA !NMI_AUX : BEQ + - LDA $00 : PHA ; preserve DP ram - LDA $01 : PHA - LDA $02 : PHA - - LDA !NMI_AUX+2 : STA $02 ; set up jump pointer - LDA !NMI_AUX+1 : STA $01 - LDA !NMI_AUX+0 : STA $00 - - PHK : PER .return-1 ; push stack for RTL return - JMP [$0000] - - .return - LDA.b #$00 : STA !NMI_AUX ; zero bank byte of NMI hook pointer - - PLA : STA $02 - PLA : STA $01 - PLA : STA $00 - + - - LDA $13 : STA $2100 ; thing we wrote over, turn screen back on + LDA.w NMIAux : BEQ + + PHK : PEA .return-1 ; push stack for RTL return + JMP.w [NMIAux] + .return + STZ.w NMIAux ; zero bank byte of NMI hook pointer + + + LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on + JML.l PostNMIHookReturn ;-------------------------------------------------------------------------------- diff --git a/ganonfixes.asm b/ganonfixes.asm deleted file mode 100644 index 976cbad..0000000 --- a/ganonfixes.asm +++ /dev/null @@ -1,16 +0,0 @@ -;================================================================================ -; Ganon Fixes -;================================================================================ - -;-------------------------------------------------------------------------------- -; GanonWarpRNG -; out: Accumulator - #$00 or #01 randomly, with no repeated #$01s -;-------------------------------------------------------------------------------- -;GanonWarpRNG: -; JSL GetRandomInt : AND.b #$01 : BEQ .zero -; LDA !GANON_WARP_CHAIN : EOR #$01 : STA !GANON_WARP_CHAIN -;RTL -; .zero -; STA !GANON_WARP_CHAIN -;RTL -;-------------------------------------------------------------------------------- \ No newline at end of file diff --git a/glitched.asm b/glitched.asm index 76901b2..82eaf42 100644 --- a/glitched.asm +++ b/glitched.asm @@ -2,7 +2,7 @@ ; Glitched Mode Fixes ;================================================================================ GetAgahnimPalette: - LDA $A0 ; get room id + LDA.b RoomIndex ; get room id CMP.b #13 : BNE + ; Agahnim 2 room LDA.b #$07 ; Use Agahnim 2 RTL @@ -11,25 +11,25 @@ GetAgahnimPalette: RTL ;-------------------------------------------------------------------------------- GetAgahnimDeath: - STA $0BA0, X ; thing we wrote over - LDA $A0 ; get room id + STA.w $0BA0, X ; thing we wrote over + LDA.b RoomIndex ; get room id CMP.b #13 : BNE + ; Agahnim 2 room LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++ LDA.l InvertedMode : BEQ +++ - LDA.b #$00 : STA CurrentWorld ; Switch to light world + LDA.b #$00 : STA.l CurrentWorld ; Switch to light world BRA ++ +++ - LDA.b #$40 : STA CurrentWorld ; Switch to dark world + LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world ++ LDA.b #$01 ; Use Agahnim 2 RTL + ; Elsewhere LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++ LDA.l InvertedMode : BEQ +++ - LDA.b #$40 : STA CurrentWorld ; Switch to dark world + LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world BRA ++ +++ - LDA.b #$00 : STA CurrentWorld ; Switch to light world + LDA.b #$00 : STA.l CurrentWorld ; Switch to light world ; (This will later get flipped to DW when Agahnim 1 ; warps us to the pyramid) ++ @@ -37,7 +37,7 @@ GetAgahnimDeath: RTL ;-------------------------------------------------------------------------------- GetAgahnimType: - LDA $A0 ; get room id + LDA.b RoomIndex ; get room id CMP.b #13 : BNE + ; Agahnim 2 room LDA.b #$0006 ; Use Agahnim 2 BRA .done @@ -48,7 +48,7 @@ RTL ;-------------------------------------------------------------------------------- GetAgahnimSlot: PHX ; thing we wrote over - LDA $A0 ; get room id + LDA.b RoomIndex ; get room id CMP.b #13 : BNE + ; Agahnim 2 room LDA.b #$01 ; Use Agahnim 2 JML.l GetAgahnimSlotReturn @@ -57,8 +57,8 @@ GetAgahnimSlot: JML.l GetAgahnimSlotReturn ;-------------------------------------------------------------------------------- GetAgahnimLightning: - INC $0E30, X ; thing we wrote over - LDA $A0 ; get room id + INC.w SpriteAux, X ; thing we wrote over + LDA.b RoomIndex ; get room id CMP.b #13 : BNE + ; Agahnim 2 room LDA.b #$01 ; Use Agahnim 2 RTL @@ -69,11 +69,11 @@ GetAgahnimLightning: ;0 = Allow ;1 = Forbid AllowJoypadInput: - LDA PermitSQFromBosses : BEQ .fullCheck - LDA $0403 : AND.b #$80 : BEQ .fullCheck - LDA $0112 : ORA $02E4 ; we have heart container, do short check + LDA.l PermitSQFromBosses : BEQ .fullCheck + LDA.w ItemsTaken : AND.b #$80 : BEQ .fullCheck + LDA.w MedallionFlag : ORA.w CutsceneFlag ; we have heart container, do short check RTL .fullCheck - LDA $0112 : ORA $02E4 : ORA $0FFC + LDA.w MedallionFlag : ORA.w CutsceneFlag : ORA.w NoMenu RTL ;-------------------------------------------------------------------------------- diff --git a/goalitem.asm b/goalitem.asm index 9d112f8..50f62cd 100644 --- a/goalitem.asm +++ b/goalitem.asm @@ -1,21 +1,14 @@ -;-------------------------------------------------------------------------------- -; $7F5010 - Scratch Space (Callee Preserved) -;-------------------------------------------------------------------------------- -!GOAL_DRAW_ADDRESS = "$7EC72A" -;-------------------------------------------------------------------------------- -; DrawGoalIndicator moved to newhud.asm -;-------------------------------------------------------------------------------- GoalItemGanonCheck: - LDA $0E20, X : CMP.b #$D6 : BNE .success ; skip if not ganon + LDA.w SpriteTypeTable, X : CMP.b #$D6 : BNE .success ; skip if not ganon JSL.l CheckGanonVulnerability BCS .success .fail - LDA $0D80, X : CMP.b #17 : !BLT .success ; decmial 17 because Acmlm's chart is decimal + LDA.w SpriteActivity, X : CMP.b #17 : !BLT .success ; decmial 17 because Acmlm's chart is decimal LDA.b #$00 RTL .success - LDA $44 : CMP.b #$80 ; thing we wrote over + LDA.b OAMOffsetY : CMP.b #$80 ; thing we wrote over RTL ;-------------------------------------------------------------------------------- ;Carry clear = ganon invincible @@ -125,12 +118,12 @@ GetRequiredCrystalsInX: RTL ;-------------------------------------------------------------------------------- CheckEnoughCrystalsForGanon: - LDA CrystalCounter + LDA.l CrystalCounter CMP.l NumberOfCrystalsRequiredForGanon RTL ;-------------------------------------------------------------------------------- CheckEnoughCrystalsForTower: - LDA CrystalCounter + LDA.l CrystalCounter CMP.l NumberOfCrystalsRequiredForTower RTL @@ -145,13 +138,13 @@ CheckAgaForPed: BEQ .force_blue_ball .vanilla ; run vanilla check for phase - LDA.w $0E30, X + LDA.w SpriteAux, X CMP.b #$02 RTL .force_blue_ball - LDA.b #$01 : STA.w $0DA0, Y - LDA.b #$20 : STA.w $0DF0, Y + LDA.b #$01 : STA.w SpriteAuxTable, Y + LDA.b #$20 : STA.w SpriteTimer, Y CLC ; skip the RNG check RTL @@ -182,7 +175,7 @@ CheckForCrystalBossesDefeated: REP #$30 ; count of number of bosses killed - STZ.b $00 + STZ.b Scrap00 LDY.w #10 @@ -202,7 +195,7 @@ CheckForCrystalBossesDefeated: AND.w #$0800 BEQ ++ - INC.b $00 + INC.b Scrap00 ++ DEY BPL .next_check @@ -210,7 +203,7 @@ CheckForCrystalBossesDefeated: SEP #$30 PLY : PLX : PLB - LDA.b $00 : CMP.l NumberOfCrystalsRequiredForGanon + LDA.b Scrap00 : CMP.l NumberOfCrystalsRequiredForGanon RTS diff --git a/halfmagicbat.asm b/halfmagicbat.asm index 19772fc..fca8950 100644 --- a/halfmagicbat.asm +++ b/halfmagicbat.asm @@ -6,10 +6,10 @@ GetMagicBatItem: %GetPossiblyEncryptedItem(MagicBatItem, SpriteItemValues) CMP.b #$FF : BEQ .normalLogic TAY - STZ $02E9 ; 0 = Receiving item from an NPC or message + STZ.b ItemReceiptMethod ; 0 = Receiving item from an NPC or message JML.l Link_ReceiveItem .normalLogic - LDA HalfMagic - STA MagicConsumption + LDA.l HalfMagic + STA.l MagicConsumption RTL ;-------------------------------------------------------------------------------- diff --git a/hardmode.asm b/hardmode.asm index 65c934a..97dde1b 100644 --- a/hardmode.asm +++ b/hardmode.asm @@ -3,22 +3,22 @@ ;================================================================================ CalculateSpikeFloorDamage: REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #279 SEP #$20 ; set 8-bit accumulator BNE + LDA.l ByrnaCaveSpikeDamage - STA $0373 + STA.w DamageReceived RTL + - LDA $D055, Y - STA $0373 + LDA.w $D055, Y + STA.w DamageReceived RTL ;-------------------------------------------------------------------------------- CalculateByrnaUsage: - LDA $1B : BEQ ++ + LDA.b IndoorsFlag : BEQ ++ REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #95 : BEQ + ; Ice Palace Spike Room CMP.w #172 : BEQ + ; Blind Boss Room CMP.w #179 : BEQ + ; Room in Misery Mire @@ -29,16 +29,16 @@ CalculateByrnaUsage: + SEP #$20 ; set 8-bit accumulator PHX : TYX - LDA.l HardModeExclusionCaneOfByrnaUsage, X : STA $00 + LDA.l HardModeExclusionCaneOfByrnaUsage, X : STA.b Scrap00 PLX ++ - LDA CurrentMagic ; thing we wrote over + LDA.l CurrentMagic ; thing we wrote over JML IncrementMagicUseCounterByrna ;-------------------------------------------------------------------------------- CalculateCapeUsage: - LDA $1B : BEQ ++ + LDA.b IndoorsFlag : BEQ ++ REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #95 : BEQ + ; Ice Palace Spike Room CMP.w #179 : BEQ + ; Room in Misery Mire CMP.w #213 : BEQ + ; Laser Bridge @@ -48,15 +48,15 @@ CalculateCapeUsage: + SEP #$20 ; set 8-bit accumulator PHX : TYX - LDA.l HardModeExclusionCapeUsage, X : STA $4C ; set cape decrement timer + LDA.l HardModeExclusionCapeUsage, X : STA.b CapeTimer ; set cape decrement timer PLX ++ JML IncrementMagicUseCounterOne ;-------------------------------------------------------------------------------- ActivateInvulnerabilityOrDont: - LDA $1B : BEQ .nowhere_special + LDA.b IndoorsFlag : BEQ .nowhere_special REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #95 : BEQ .somewhere_cool ; Ice Palace Spike Room CMP.w #179 : BEQ .somewhere_cool ; Room in Misery Mire CMP.w #213 : BEQ .somewhere_cool ; Laser Bridge @@ -66,9 +66,9 @@ ActivateInvulnerabilityOrDont: BRA .nowhere_special .somewhere_cool SEP #$20 ; set 8-bit accumulator - LDA.b #$01 : STA $037B : RTL + LDA.b #$01 : STA.w NoDamage : RTL .nowhere_special - LDA.l ByrnaInvulnerability : STA $037B + LDA.l ByrnaInvulnerability : STA.w NoDamage RTL ;-------------------------------------------------------------------------------- GetItemDamageValue: @@ -81,13 +81,13 @@ GetItemDamageValue: CPX.b #$3d : BEQ .hookshot .normal - lda $0db8f1,x ;what we wrote over + LDA.l $0db8f1,x ;what we wrote over RTL .boomerang - LDA.l StunItemAction : AND #$01 : BNE .normal + LDA.l StunItemAction : AND.b #$01 : BNE .normal BRA .noDamage .hookshot - LDA.l StunItemAction : AND #$02 : BNE .normal + LDA.l StunItemAction : AND.b #$02 : BNE .normal .noDamage LDA.b #$00 RTL @@ -95,17 +95,17 @@ RTL ;Argument : A = id we want to find return 00 if none found, 01 if found SearchAncilla: { - STA $05 + STA.b Scrap05 PHX - LDX #$00 + LDX.b #$00 .loop - LDA $0C4A, X + LDA.w AncillaID, X INX : CPX #$0A : BEQ .notFound - CMP $05 : BNE .loop - LDA #$01 + CMP.b Scrap05 : BNE .loop + LDA.b #$01 BRA .return .notFound - LDA #$00 + LDA.b #$00 .return PLX RTS diff --git a/hashalphabet.asm b/hashalphabet.asm index 3bf5f05..5e4c4e4 100644 --- a/hashalphabet.asm +++ b/hashalphabet.asm @@ -1,41 +1,39 @@ ;-------------------------------------------------------------------------------- -;Hash Alphabet -!ALPHA_BOW = "#$0000" -!ALPHA_BOOM = "#$0001" -!ALPHA_HOOK = "#$0002" -!ALPHA_BOMB = "#$0003" -!ALPHA_SHROOM = "#$0004" -!ALPHA_POWDER = "#$0005" -!ALPHA_ROD = "#$0006" -!ALPHA_PENDANT = "#$0007" -!ALPHA_BOMBOS = "#$0008" -!ALPHA_ETHER = "#$0009" -!ALPHA_QUAKE = "#$000A" -!ALPHA_LAMP = "#$000B" -!ALPHA_HAMMER = "#$000C" -!ALPHA_SHOVEL = "#$000D" -!ALPHA_FLUTE = "#$000E" -!ALPHA_NET = "#$000F" -!ALPHA_BOOK = "#$0010" -!ALPHA_BOTTLE = "#$0011" -!ALPHA_POTION = "#$0012" -!ALPHA_CANE = "#$0013" -!ALPHA_CAPE = "#$0014" -!ALPHA_MIRROR = "#$0015" -!ALPHA_BOOTS = "#$0016" -!ALPHA_GLOVES = "#$0017" -!ALPHA_FLIPPERS = "#$0018" -!ALPHA_PEARL = "#$0019" -!ALPHA_SHIELD = "#$001A" -!ALPHA_TUNIC = "#$001B" -!ALPHA_HEART = "#$001C" -!ALPHA_MAP = "#$001D" -!ALPHA_COMPASS = "#$001E" -!ALPHA_KEY = "#$001F" +; Hash Alphabet +; ALPHA_BOW = $0000 +; ALPHA_BOOM = $0001 +; ALPHA_HOOK = $0002 +; ALPHA_BOMB = $0003 +; ALPHA_SHROOM = $0004 +; ALPHA_POWDER = $0005 +; ALPHA_ROD = $0006 +; ALPHA_PENDANT = $0007 +; ALPHA_BOMBOS = $0008 +; ALPHA_ETHER = $0009 +; ALPHA_QUAKE = $000A +; ALPHA_LAMP = $000B +; ALPHA_HAMMER = $000C +; ALPHA_SHOVEL = $000D +; ALPHA_FLUTE = $000E +; ALPHA_NET = $000F +; ALPHA_BOOK = $0010 +; ALPHA_BOTTLE = $0011 +; ALPHA_POTION = $0012 +; ALPHA_CANE = $0013 +; ALPHA_CAPE = $0014 +; ALPHA_MIRROR = $0015 +; ALPHA_BOOTS = $0016 +; ALPHA_GLOVES = $0017 +; ALPHA_FLIPPERS = $0018 +; ALPHA_PEARL = $0019 +; ALPHA_SHIELD = $001A +; ALPHA_TUNIC = $001B +; ALPHA_HEART = $001C +; ALPHA_MAP = $001D +; ALPHA_COMPASS = $001E +; ALPHA_KEY = $001F ;-------------------------------------------------------------------------------- -;-------------------------------------------------------------------------------- -!BIGRAM = "$7EC900"; ;-------------------------------------------------------------------------------- LoadAlphabetTilemap: PHB : PHA : PHX : PHY : PHP @@ -45,9 +43,9 @@ LoadAlphabetTilemap: LDX.b #$00 : - LDA.w FileSelect_PlayerSelectText_Top, X - STA !BIGRAM, X + STA.l BigRAM, X INX #2 - CPX #128 : !BLT - + CPX.b #128 : !BLT - LDY.b #00 LDX.b #$00 : - @@ -55,12 +53,12 @@ LoadAlphabetTilemap: AND.w #$001F ; mask to alphabet of 32 ASL #3 : PHY : TAY - LDA.w HashAlphabetTiles,Y : STA !BIGRAM+24, X - LDA.w HashAlphabetTiles+2,Y : STA !BIGRAM+24+2, X - LDA.w HashAlphabetTiles+4,Y : STA !BIGRAM+24+64, X - LDA.w HashAlphabetTiles+6,Y : STA !BIGRAM+24+64+2, X + LDA.w HashAlphabetTiles,Y : STA.l BigRAM+24, X + LDA.w HashAlphabetTiles+2,Y : STA.l BigRAM+24+2, X + LDA.w HashAlphabetTiles+4,Y : STA.l BigRAM+24+64, X + LDA.w HashAlphabetTiles+6,Y : STA.l BigRAM+24+64+2, X PLY : INX #6 : INY - CPX #25 : !BLT - + CPX.b #25 : !BLT - SEP #$20 ; 8-bit accumulator @@ -72,38 +70,38 @@ RTL ;-------------------------------------------------------------------------------- DMAAlphabetTilemap: PHA : PHX - LDA $4300 : PHA ; preserve DMA parameters - LDA $4301 : PHA ; preserve DMA parameters - LDA $4302 : PHA ; preserve DMA parameters - LDA $4303 : PHA ; preserve DMA parameters - LDA $4304 : PHA ; preserve DMA parameters - LDA $4305 : PHA ; preserve DMA parameters - LDA $4306 : PHA ; preserve DMA parameters + 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 $4300 ; set DMA transfer direction A -> B, bus A auto increment, double-byte mode - LDA.b #$80 : STA $2115 ; write read increment on $2119 - LDA.b #$18 : STA $4301 ; set bus B destination to VRAM register + 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 $2116 ; write VRAM destination address - STA $2117 ; write VRAM destination address + LDA.b #$60 : STA.w VMADDL ; write VRAM destination address + STA.w VMADDH ; write VRAM destination address - LDA.b #!BIGRAM : STA $4302 ; set bus A source address to WRAM - LDA.b #!BIGRAM>>8 : STA $4303 ; set bus A source address to WRAM - LDA.b #!BIGRAM>>16 : STA $4304 ; set bus A source bank + 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 $4305 : STZ $4306 ; set transfer size to 0x40 + LDA.b #$80 : STA.w DAS0L : STZ.w DAS0H ; set transfer size to 0x40 - LDA $2100 : PHA : LDA.b #$80 : STA $2100 ; save screen state & turn screen off - LDA #$01 : STA $420B ; begin DMA transfer - PLA : STA $2100 ; put screen back however it was before + 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 $4306 ; restore DMA parameters - PLA : STA $4305 ; restore DMA parameters - PLA : STA $4304 ; restore DMA parameters - PLA : STA $4303 ; restore DMA parameters - PLA : STA $4302 ; restore DMA parameters - PLA : STA $4301 ; restore DMA parameters - PLA : STA $4300 ; restore DMA parameters + 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 RTS ;-------------------------------------------------------------------------------- diff --git a/hashalphabethooks.asm b/hashalphabethooks.asm index 3bc9879..f2e094a 100644 --- a/hashalphabethooks.asm +++ b/hashalphabethooks.asm @@ -1,106 +1,80 @@ ;-------------------------------------------------------------------------------- -!FSTILE_SPACE = "$0188" +!FSTILE_SPACE = $0188 -!FSTILE_BRACKET_OPEN_TOP = "$1D8A" -!FSTILE_BRACKET_OPEN_BOTTOM = "$1D9A" +!FSTILE_BRACKET_OPEN_TOP = $1D8A +!FSTILE_BRACKET_OPEN_BOTTOM = $1D9A -!FSTILE_BRACKET_CLOSE_TOP = "$1D8B" -!FSTILE_BRACKET_CLOSE_BOTTOM = "$1D9B" +!FSTILE_BRACKET_CLOSE_TOP = $1D8B +!FSTILE_BRACKET_CLOSE_BOTTOM = $1D9B -!FSTILE_A_TOP = "$1D4A" -!FSTILE_A_BOTTOM = "$1D5A" +!FSTILE_A_TOP = $1D4A +!FSTILE_A_BOTTOM = $1D5A -!FSTILE_C_TOP = "$1D4C" -!FSTILE_C_BOTTOM = "$1D5C" +!FSTILE_C_TOP = $1D4C +!FSTILE_C_BOTTOM = $1D5C -!FSTILE_D_TOP = "$1D4D" -!FSTILE_D_BOTTOM = "$1D5D" +!FSTILE_D_TOP = $1D4D +!FSTILE_D_BOTTOM = $1D5D -!FSTILE_E_TOP = "$1D4E" -!FSTILE_E_BOTTOM = "$1D5E" +!FSTILE_E_TOP = $1D4E +!FSTILE_E_BOTTOM = $1D5E -!FSTILE_F_TOP = "$1D4F" -!FSTILE_F_BOTTOM = "$1D5F" +!FSTILE_F_TOP = $1D4F +!FSTILE_F_BOTTOM = $1D5F -!FSTILE_H_TOP = "$1D61" -!FSTILE_H_BOTTOM = "$1D71" +!FSTILE_H_TOP = $1D61 +!FSTILE_H_BOTTOM = $1D71 -!FSTILE_I_TOP = "$1D62" -!FSTILE_I_BOTTOM = "$1D72" +!FSTILE_I_TOP = $1D62 +!FSTILE_I_BOTTOM = $1D72 -!FSTILE_K_TOP = "$1D64" -!FSTILE_K_BOTTOM = "$1D74" +!FSTILE_K_TOP = $1D64 +!FSTILE_K_BOTTOM = $1D74 -!FSTILE_L_TOP = "$1D65" -!FSTILE_L_BOTTOM = "$1D75" +!FSTILE_L_TOP = $1D65 +!FSTILE_L_BOTTOM = $1D75 -!FSTILE_N_TOP = "$1D67" -!FSTILE_N_BOTTOM = "$1D77" +!FSTILE_N_TOP = $1D67 +!FSTILE_N_BOTTOM = $1D77 -!FSTILE_O_TOP = "$1D68" -!FSTILE_O_BOTTOM = "$1D78" +!FSTILE_O_TOP = $1D68 +!FSTILE_O_BOTTOM = $1D78 -!FSTILE_P_TOP = "$1D69" -!FSTILE_P_BOTTOM = "$1D79" +!FSTILE_P_TOP = $1D69 +!FSTILE_P_BOTTOM = $1D79 -!FSTILE_S_TOP = "$1D6C" -!FSTILE_S_BOTTOM = "$1D7C" +!FSTILE_S_TOP = $1D6C +!FSTILE_S_BOTTOM = $1D7C -!FSTILE_T_TOP = "$1D6D" -!FSTILE_T_BOTTOM = "$1D7D" +!FSTILE_T_TOP = $1D6D +!FSTILE_T_BOTTOM = $1D7D -!FSTILE_U_TOP = "$1D6E" -!FSTILE_U_BOTTOM = "$1D7E" +!FSTILE_U_TOP = $1D6E +!FSTILE_U_BOTTOM = $1D7E -!FSTILE_Y_TOP = "$1D82" -!FSTILE_Y_BOTTOM = "$1D92" +!FSTILE_Y_TOP = $1D82 +!FSTILE_Y_BOTTOM = $1D92 ;-------------------------------------------------------------------------------- org $0CDE60 ; <- 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 -;dw !FSTILE_C_TOP, !FSTILE_SPACE, !FSTILE_O_TOP, !FSTILE_SPACE, !FSTILE_P_TOP, !FSTILE_SPACE, !FSTILE_Y_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -;dw $1CAC, !FSTILE_SPACE, $1D23, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D04, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D07 ;-------------------------------------------------------------------------------- org $0CDE7A ; <- 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 -;dw !FSTILE_C_BOTTOM, !FSTILE_SPACE, !FSTILE_O_BOTTOM, !FSTILE_SPACE, !FSTILE_P_BOTTOM, !FSTILE_SPACE, !FSTILE_Y_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -;dw $1CBC, !FSTILE_SPACE, $1D33, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D14, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D17 ;-------------------------------------------------------------------------------- org $0CDE94 ; <- 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 -;dw !FSTILE_D_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_T_TOP, !FSTILE_SPACE, !FSTILE_E_TOP, !FSTILE_SPACE, !FSTILE_SPACE -;dw !FSTILE_K_TOP, !FSTILE_SPACE, !FSTILE_I_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -;dw !FSTILE_K_TOP, !FSTILE_SPACE, !FSTILE_I_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, !FSTILE_L_TOP, !FSTILE_SPACE, $1D04, !FSTILE_SPACE, $1D89, !FSTILE_SPACE, $1D07 -;-------------------------------------------------------------------------------- + org $0CDEB2 ; <- 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 -;dw !FSTILE_D_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_T_BOTTOM, !FSTILE_SPACE, !FSTILE_E_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE -;dw !FSTILE_K_BOTTOM, !FSTILE_SPACE, !FSTILE_I_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE -;dw !FSTILE_K_BOTTOM, !FSTILE_SPACE, !FSTILE_I_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, !FSTILE_L_BOTTOM, !FSTILE_SPACE, $1D14, !FSTILE_SPACE, $1D99, !FSTILE_SPACE, $1D17 -;-------------------------------------------------------------------------------- -;org $0CDDE8 ; <- 65DE8 -;FileSelect_PlayerSelectText_Top: -;db $60, $62, $00, $37 -;db $8A, $1D, $88, $01, $69, $1D, $88, $01, $65, $1D, $88, $01, $4A, $1D, $88, $01 -;db $82, $1D, $88, $01, $4E, $1D, $88, $01, $6B, $1D, $88, $01, $88, $01, $6C, $1D -;db $88, $01, $4E, $1D, $88, $01, $65, $1D, $88, $01, $4E, $1D, $88, $01, $4C, $1D -;db $88, $01, $6D, $1D, $88, $01, $8B, $1D -;-------------------------------------------------------------------------------- -;org $0CDE24 ; <- 65E24 -;FileSelect_PlayerSelectText_Bottom: -;db $60, $82, $00, $37 -;db $9A, $1D, $88, $01, $79, $1D, $88, $01, $75, $1D, $88, $01, $5A, $1D, $88, $01 -;db $92, $1D, $88, $01, $5E, $1D, $88, $01, $7B, $1D, $88, $01, $88, $01, $7C, $1D -;db $88, $01, $5E, $1D, $88, $01, $75, $1D, $88, $01, $5E, $1D, $88, $01, $5C, $1D -;db $88, $01, $7D, $1D, $88, $01, $9B, $1D -;-------------------------------------------------------------------------------- + ;CopyFile_Header: org $0CE228 ; <- 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 @@ -140,10 +114,8 @@ dw !FSTILE_BRACKET_OPEN_BOTTOM, !FSTILE_SPACE, !FSTILE_D_BOTTOM, !FSTILE_E_BOTTO ;KillFile_Which: org $0CE04E ; <- 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 -;dw $0D4D, $0D4E, $0D65, $0D4E, $0D6D, $0D4E, !FSTILE_SPACE, $0D80, $0D61, $0D62, $0D4C, $0D61, !FSTILE_SPACE, $0D4F, $0D62, $0D65, $0D4E, $0D86, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE org $0CE084 ; <- 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 -;dw $0D5D, $0D5E, $0D75, $0D5E, $0D7D, $0D5E, !FSTILE_SPACE, $0D90, $0D71, $0D72, $0D5C, $0D71, !FSTILE_SPACE, $0D5F, $0D72, $0D75, $0D5E, $0D96, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE, !FSTILE_SPACE ;KillFile_Execute: org $0CD328 ; <- 65328 diff --git a/heartbeep.asm b/heartbeep.asm index e8f9bd1..64a8925 100644 --- a/heartbeep.asm +++ b/heartbeep.asm @@ -3,10 +3,10 @@ ;================================================================================ BeepLogic: LDA.l HeartBeep : BEQ + - STA $04CA - LDA.b #$2B : STA $012E + STA.w HeartBeepTimer + LDA.b #$2B : STA.w SFX2 RTL + - LDA.b #$FF : STA $04CA + LDA.b #$FF : STA.w HeartBeepTimer RTL -;================================================================================ \ No newline at end of file +;================================================================================ diff --git a/heartpieces.asm b/heartpieces.asm index 08aaea2..79924b2 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -2,43 +2,41 @@ ; Randomize Heart Pieces ;-------------------------------------------------------------------------------- HeartPieceGet: - PHX : PHY - LDY $0E80, 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 MaybeMarkDigSpotCollected + 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 MaybeMarkDigSpotCollected - .skipLoad + .skipLoad - STZ $02E9 ; 0 = Receiving item from an NPC or message + 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 HeartPieceQuarter : INC A : AND.b #$03 : STA HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters - BRA .giveItem + 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 + .notHeart + .giveItem + JSL.l $0791B3 ; Player_HaltDashAttackLong + JSL.l Link_ReceiveItem + CLC ; return false + JMP .done ; finished - .giveItem - JSL.l $0791B3 ; Player_HaltDashAttackLong - JSL.l Link_ReceiveItem - CLC ; return false - JMP .done ; finished + .unfinished_heart + SEC ; return true + .done + JSL MaybeUnlockTabletAnimation - .unfinished_heart - SEC ; return true - .done - - JSL MaybeUnlockTabletAnimation - - PLY : PLX + PLY : PLX RTL ;-------------------------------------------------------------------------------- HeartContainerGet: PHX : PHY JSL.l AddInventory_incrementBossSwordLong - LDY $0E80, X ; load item value into Y register + 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 LoadHeartContainerRoomValue : TAY @@ -46,27 +44,24 @@ HeartContainerGet: BRA HeartPieceGet_skipLoad ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" DrawHeartPieceGFX: PHP JSL.l Sprite_IsOnscreen : BCC .offscreen PHA : PHY - LDA !REDRAW : BEQ .skipInit ; skip init if already ready + LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready JSL.l HeartPieceSpritePrep JMP .done ; don't draw on the init frame .skipInit - LDA $0E80, X ; Retrieve stored item type + LDA.w SpriteItemType, X ; Retrieve stored item type .skipLoad PHA JSL.l IsNarrowSprite : BCC + - LDA $0E60, X : ORA.b #$20 : STA $0E60, X + LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X + - ;LDA $0E60, X : ORA.b #$10 : STA $0E60, X - PLA JSL.l DrawDynamicTile @@ -78,18 +73,17 @@ DrawHeartPieceGFX: PLP RTL ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" DrawHeartContainerGFX: PHP JSL.l Sprite_IsOnscreen : BCC DrawHeartPieceGFX_offscreen PHA : PHY - LDA !REDRAW : BEQ .skipInit ; skip init if already ready + LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready JSL.l HeartContainerSpritePrep BRA DrawHeartPieceGFX_done ; don't draw on the init frame .skipInit - LDA $0E80, X ; Retrieve stored item type + LDA.w SpriteItemType, X ; Retrieve stored item type BRA DrawHeartPieceGFX_skipLoad ;-------------------------------------------------------------------------------- @@ -107,7 +101,7 @@ HeartContainerSound: RTL ;-------------------------------------------------------------------------------- NormalItemSkipSound: - LDA $0C5E, X ; thing we wrote over + LDA.w AncillaGet, X ; thing we wrote over CPY.b #$20 : BEQ + ; Skip for Crystal CPY.b #$37 : BEQ + ; Skip for Pendants @@ -115,66 +109,43 @@ NormalItemSkipSound: CPY.b #$39 : BEQ + PHA - JSL.l CheckIfBossRoom + JSL.l CheckIfBossRoom PLA RTL + CLC RTL ;-------------------------------------------------------------------------------- -HeartUpgradeSpawnDecision: ; this should return #$00 to make the hp spawn - LDA !FORCE_HEART_SPAWN : BEQ .normal_behavior - - DEC : STA !FORCE_HEART_SPAWN - LDA #$00 -RTL - - .normal_behavior - LDA OverworldEventDataWRAM, X -RTL -;-------------------------------------------------------------------------------- -SaveHeartCollectedStatus: - LDA !SKIP_HEART_SAVE : BEQ .normal_behavior - - DEC : STA !SKIP_HEART_SAVE -RTL - - .normal_behavior - LDA OverworldEventDataWRAM, X : ORA.b #$40 : STA OverworldEventDataWRAM, X -RTL -;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" HeartPieceSpritePrep: PHA - LDA ServerRequestMode : BEQ + : : + + LDA.l ServerRequestMode : BEQ + : : + - LDA #$01 : STA !REDRAW - LDA $5D : CMP #$14 : BEQ .skip ; skip if we're mid-mirror + LDA.b #$01 : STA.l RedrawFlag + LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror - LDA #$00 : STA !REDRAW + LDA.b #$00 : STA.l RedrawFlag JSL.l LoadHeartPieceRoomValue ; load item type - STA $0E80, X ; Store item type + STA.w SpriteItemType, X ; Store item type JSL.l PrepDynamicTile .skip PLA RTL ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" HeartContainerSpritePrep: PHA - LDA #$00 : STA !REDRAW + LDA.b #$00 : STA.l RedrawFlag JSL.l LoadHeartContainerRoomValue ; load item type - STA $0E80, X ; Store item type + STA.w SpriteItemType, X ; Store item type JSL.l PrepDynamicTile PLA RTL ;-------------------------------------------------------------------------------- LoadHeartPieceRoomValue: - LDA $1B : BEQ .outdoors ; check if we're indoors or outdoors + LDA.b IndoorsFlag : BEQ .outdoors ; check if we're indoors or outdoors .indoors JSL.l LoadIndoorValue JMP .done @@ -183,38 +154,37 @@ LoadHeartPieceRoomValue: .done RTL ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" HPItemReset: JSL $09AD58 ; GiveRupeeGift - thing we wrote over - PHA : LDA #$01 : STA !REDRAW : PLA + PHA : LDA.b #$01 : STA.l RedrawFlag : PLA RTL ;-------------------------------------------------------------------------------- MaybeMarkDigSpotCollected: PHA : PHP - LDA $1B : BNE + + LDA.b IndoorsFlag : BNE + REP #$20 ; set 16-bit accumulator - LDA $8A + LDA.b OverworldIndex CMP.w #$2A : BNE + - LDA HasGroveItem : ORA.w #$0001 : STA HasGroveItem + LDA.l HasGroveItem : ORA.w #$0001 : STA.l HasGroveItem + PLP : PLA RTL ;-------------------------------------------------------------------------------- macro GetPossiblyEncryptedItem(ItemLabel,TableLabel) - LDA IsEncrypted : BNE ?encrypted + LDA.l IsEncrypted : BNE ?encrypted LDA.l BRA ?done ?encrypted: PHX : PHP REP #$30 ; set 16-bit accumulator & index registers - LDA $00 : PHA : LDA $02 : PHA + LDA.b Scrap00 : PHA : LDA.b Scrap02 : PHA - LDA.w # : STA $00 - LDA.w #>>16 : STA $02 + LDA.w # : STA.b Scrap00 + LDA.w #>>16 : STA.b Scrap02 LDA.w #- JSL RetrieveValueFromEncryptedTable - PLX : STX $02 : PLX : STX $01 + PLX : STX.b Scrap02 : PLX : STX.b Scrap01 PLP : PLX ?done: endmacro @@ -222,7 +192,7 @@ endmacro LoadIndoorValue: PHP REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #225 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Forest_Thieves, HeartPieceIndoorValues) JMP .done @@ -233,7 +203,7 @@ LoadIndoorValue: %GetPossiblyEncryptedItem(HeartPiece_Spectacle_Cave, HeartPieceIndoorValues) JMP .done + CMP.w #283 : BNE + - LDA $22 : XBA : AND.w #$0001 ; figure out where link is + LDA.b LinkPosX : XBA : AND.w #$0001 ; figure out where link is BNE ++ %GetPossiblyEncryptedItem(HeartPiece_Circle_Bushes, HeartPieceIndoorValues) JMP .done @@ -247,7 +217,7 @@ LoadIndoorValue: %GetPossiblyEncryptedItem(HeartPiece_Smith_Pegs, HeartPieceIndoorValues) JMP .done + CMP.w #135 : BNE + - LDA StandingKey_Hera + LDA.l StandingKey_Hera JMP .done + LDA.w #$0017 ; default to a normal hp @@ -267,9 +237,9 @@ RTL LoadOutdoorValue: PHP REP #$20 ; set 16-bit accumulator - LDA $8A + LDA.b OverworldIndex CMP.w #$03 : BNE + - LDA $22 : CMP.w #1890 : !BLT ++ + LDA.b LinkPosX : CMP.w #1890 : !BLT ++ %GetPossiblyEncryptedItem(HeartPiece_Spectacle, HeartPieceOutdoorValues) JMP .done ++ @@ -285,7 +255,7 @@ LoadOutdoorValue: %GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues) JMP .done + CMP.w #$30 : BNE + - LDA $22 : CMP.w #512 : !BGE ++ + LDA.b LinkPosX : CMP.w #512 : !BGE ++ %GetPossiblyEncryptedItem(HeartPiece_Desert, HeartPieceOutdoorValues) JMP .done ++ @@ -335,7 +305,7 @@ LoadHeartContainerRoomValue: LoadBossValue: PHP REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #200 : BNE + %GetPossiblyEncryptedItem(HeartContainer_ArmosKnights, HeartContainerBossValues) JMP .done @@ -378,7 +348,7 @@ CheckIfBossRoom: ; Carry set if we're in a boss room, unset otherwise. ;-------------------------------------------------------------------------------- REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #200 : BEQ .done CMP.w #51 : BEQ .done CMP.w #7 : BEQ .done diff --git a/hooks.asm b/hooks.asm index ede0106..36ea38a 100755 --- a/hooks.asm +++ b/hooks.asm @@ -56,9 +56,12 @@ org $00FFB7 SoftwareInterrupt: JML Crashed -org $00FFE4 : dw SoftwareInterrupt -org $00FFE6 : dw SoftwareInterrupt -org $00FFF4 : dw SoftwareInterrupt +org $00FFE4 +dw SoftwareInterrupt +org $00FFE6 +dw SoftwareInterrupt +org $00FFF4 +dw SoftwareInterrupt ;================================================================================ ; Dungeon Entrance Hook (works, but not needed at the moment) @@ -70,8 +73,6 @@ JSL.l OnDungeonEntrance ;================================================================================ ; D-Pad Invert ;-------------------------------------------------------------------------------- -;org $0083D9 ; <- 3D9 - Bank00.asm : 611 (LDA $4219 : STA $01) -;JSL.l InvertDPad : NOP org $0083D1 ; <- 3D1 - Bank00.asm (STZ.w JOYPAD - useless instruction here) JML.l InvertDPad : SKIP 9 InvertDPadReturn: @@ -199,8 +200,6 @@ org $00833A ; <- 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 -;dw $0012, $0112, $0212 ; vanilla-ish positions of file names -;dw $0026, $0126, $0226 ; vanilla-ish positions of hearts names 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] @@ -272,7 +271,7 @@ db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 1 : db $09 : SKIP 5 : db $05 ; Remove code that tries to hide non-selected player files org $0CD435 ; <- 65435 - Bank0C.asm : 2772 (LDX.b #$64) [LDX.b #$50] LDX.b #$44 -LDA $D324, X +LDA.w $D324, X org $0CD446 ; <- 65446 - Bank0C.asm : 2782 (LDX $C8 : CPX.b #$02 : BEQ BRANCH_11) db $80 ; BRA ;-------------------------------------------------------------------------------- @@ -291,9 +290,7 @@ 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 -BRA + - NOP #18 -+ +BRA + : NOP #18 : + ;-------------------------------------------------------------------------------- ;================================================================================ @@ -307,7 +304,7 @@ JSL CopyExtendedWRAMSaveFileToSRAM ;-------------------------------------------------------------------------------- org $00899C ; <- bank_00.asm : #_00899C (CLC) JSL WriteSaveChecksumAndBackup -LDA.w #$01F3 : TCS : SEP #$30 : PLB : RTL ; Get the stack and data bank correct +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) @@ -337,8 +334,7 @@ org $0CCE85 ; <- 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) -JML OnFileCreation -NOP +JML OnFileCreation : NOP ;-------------------------------------------------------------------------------- org $09F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2) LDA.w #$0002 : NOP @@ -353,7 +349,6 @@ LDA.w #$0002 : NOP org $068891 ; Sprite_Prep.asm : 378 //LDA .damage_class, Y : STA $0CD2, X nop #$08 JSL.l NewBatInit -;-------------------------------------------------------------------------------- ;================================================================================ ; Damage table Relocation from WRAM @@ -361,11 +356,10 @@ JSL.l NewBatInit org $06EDB5 ;<- 36DBE - Bank06.asm : 4882 (LDA $7F6000, X : STA $02) JSL.l LookupDamageLevel ;-------------------------------------------------------------------------------- -!StalfosBombDamage = "$7F509D" -org $1eab5e ;<- 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) -STA.l !StalfosBombDamage +org $1EAB5E ;<- 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) +STA.l StalfosBombDamage ;-------------------------------------------------------------------------------- ;================================================================================ @@ -423,30 +417,25 @@ JML.l AllowStartFromExit AllowStartFromExitReturn: ;-------------------------------------------------------------------------------- org $1bc2a7 ; <- DC2A7 - Bank1B.asm : 1143 (Overworld_CreatePyramidHole:) -JSL.l Overworld_CreatePyramidHoleModified -RTL +JSL.l Overworld_CreatePyramidHoleModified : RTL C9DE_LONG: -JSR $C9DE ; surprisingly same address as US -RTL +JSR $C9DE : RTL ; surprisingly same address as US ;-------------------------------------------------------------------------------- org $07ff5f ; <- 3ff5f - Bank0E.asm : 5252 (LDA.w #$0E3F : STA $23BC) -JSL.l Draw_PyramidOverlay -RTS +JSL.l Draw_PyramidOverlay : RTS ;-------------------------------------------------------------------------------- ;Remove Electric Barrier Hook org $06891E ; <- 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) -JSL GanonTowerAnimation -NOP #05 +JSL GanonTowerAnimation : NOP #05 ;-------------------------------------------------------------------------------- org $1AF5C1 ; <- 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) -JSL HardcodedRocks -NOP #19 ;23 bytes removed with the JSL +JSL HardcodedRocks : NOP #19 ;23 bytes removed with the JSL ;-------------------------------------------------------------------------------- org $04E7AE ; <- bank0E.asm : 4230 (LDA $7EF287 : AND.w #$0020) JSL.l TurtleRockPegSolved @@ -466,9 +455,9 @@ PegProbability: db $00 ; Probability out of 255. 0 = Vanilla behavior TurtleRockTrollPegs: SEP #$20 - LDX.w $04C8 : CPX.w #$FFFF : BEQ .vanilla - JSL.l GetRandomInt - LDA.l PegProbability : BEQ .vanilla : CMP.l $7E0FA1 +LDX.w $04C8 : CPX.w #$FFFF : BEQ .vanilla +JSL.l GetRandomInt +LDA.l PegProbability : BEQ .vanilla : CMP.l $7E0FA1 REP #$20 : !BGE .succeed .fail JMP.w TurtleRockPegFail @@ -478,8 +467,7 @@ JMP.w TurtleRockPegSuccess REP #$20 : JMP.w TurtleRockPegCheck ;-------------------------------------------------------------------------------- org $1BBD05 ; <- bank1B.asm : 261 (TYA : STA $00) ; hook starts at the STA -JML.l PreventEnterOnBonk -NOP +JML.l PreventEnterOnBonk : NOP PreventEnterOnBonk_return: org $1BBD77 ; <- bank1B.asm : 308 (SEP #$30) PreventEnterOnBonk_BRANCH_IX: @@ -489,13 +477,11 @@ PreventEnterOnBonk_BRANCH_IX: ; Crystals Mode ;-------------------------------------------------------------------------------- org $099B7B ; <- ancilla_init.asm : 4136 (LDA $7EF37A : AND.b #$7F : CMP.b #$7F) -JSL.l CheckEnoughCrystalsForTower -NOP #4 +JSL.l CheckEnoughCrystalsForTower : NOP #4 db #$90 ; BCC ;-------------------------------------------------------------------------------- org $08CE0C ; <- 44E0C - ancilla_break_tower_seal.asm : 168 (BEQ #$03 : JSR BreakTowerSeal_ExecuteSparkles : LDX.b #$06) -JML.l GetRequiredCrystalsForTower -NOP #3 +JML.l GetRequiredCrystalsForTower : NOP #3 GetRequiredCrystalsForTower_continue: ;-------------------------------------------------------------------------------- org $08CF19 ; <- 44F19 - ancilla_break_tower_seal.asm : 336 (TXA : AND.b #$07 : TAX) @@ -510,12 +496,10 @@ db #$6B ;-------------------------------------------------------------------------------- org $0CCDB5 ; <- 64DB5 - Bank0C.asm : 1776 (LDA.b #$06 : STA $14) JSL.l OnPrepFileSelect -;-------------------------------------------------------------------------------- ;================================================================================ ; Light speed ;-------------------------------------------------------------------------------- - ; Message org $1ED4FF JSL AgahnimAsksAboutPed @@ -529,20 +513,11 @@ JSL CheckAgaForPed : NOP org $00F970 JSL KillGanon - - -;-------------------------------------------------------------------------------- - ;================================================================================ ; Zelda Sprite Fixes ;-------------------------------------------------------------------------------- org $05EBCF ; <- 2EBCF - sprite_zelda.asm : 23 (LDA $7EF359 : CMP.b #$02 : BCS .hasMasterSword) JSL.l SpawnZelda : NOP #2 -;NOP #8 -;-------------------------------------------------------------------------------- -;org $06C06F ; <- 3406F - Bank06.asm : 1794 (JSL Sprite_ZeldaLong) -;JSL.l SpawnZelda -;-------------------------------------------------------------------------------- ;================================================================================ ; Alternate Goal @@ -566,13 +541,7 @@ org $07A95B ; <- 3A95B - Bank07.asm : 6565 (JSL Dungeon_SaveRoomDataWRAM) JSL.l IncrementUWMirror ;-------------------------------------------------------------------------------- org $0288D1 ; <- 108D1 - Bank02.asm : 1690 (STZ $0646) -JSL.l IndoorSubtileTransitionCounter -NOP #2 -;-------------------------------------------------------------------------------- -;org $05FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F) -;JSL.l IncrementSmallKeys -;-------------------------------------------------------------------------------- -;org $06D18D ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA $7EF36F) +JSL.l IndoorSubtileTransitionCounter : NOP #2 org $06D192 ; <- 35192 - sprite_absorbable.asm : 274 (STA $7EF36F) JSL.l IncrementSmallKeysNoPrimary ;-------------------------------------------------------------------------------- @@ -610,10 +579,6 @@ JSL.l IncrementBigChestCounter ;================================================================================ ; Dialog Override ;-------------------------------------------------------------------------------- -;org $0EEE8D ; 0x76E8D <- vwf.asm : 152 (LDA $7F71C0, X : STA $04) -;JSL.l DialogOverride -;NOP #7 -;-------------------------------------------------------------------------------- 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 @@ -644,20 +609,16 @@ org $0EFB11 JSL.l DialogOverride ;-------------------------------------------------------------------------------- org $0EFBC6 ; <- 77BC6 - vwf.asm : 2717 (LDA.b #$1C : STA $1CE9) -JSL.l ResetDialogPointer -RTS +JSL.l ResetDialogPointer : RTS ;-------------------------------------------------------------------------------- org $0EED0B ; <- PC 0x76D0B - Bank0E.asm : 3276 (LDA $E924, Y : STA $1008, X) -JSL.l EndingSequenceTableOverride -NOP #2 +JSL.l EndingSequenceTableOverride : NOP #2 ;-------------------------------------------------------------------------------- org $0EED15 ; <- PC 0x76D15 - Bank0E.asm : 3282 (LDA $E924, Y : STA $1008, X) -JSL.l EndingSequenceTableOverride -NOP #2 +JSL.l EndingSequenceTableOverride : NOP #2 ;-------------------------------------------------------------------------------- org $0EED2A ; <- PC 0x76D2A - Bank0E.asm : 3295 (LDA $E924, Y : AND.w #$00FF) -JSL.l EndingSequenceTableLookupOverride -NOP #2 +JSL.l EndingSequenceTableLookupOverride : NOP #2 ;-------------------------------------------------------------------------------- ;================================================================================ @@ -678,7 +639,6 @@ NOP #3 ;-------------------------------------------------------------------------------- org $0CCC89 ; <- 0x64C89 Bank0C.asm : 1598 (JSL EnableForceBlank) JSL.l OnInitFileSelect -;-------------------------------------------------------------------------------- ;================================================================================ ; Hyrule Castle Rain Sequence Guards (allowing Gloves in Link's house) @@ -695,15 +655,12 @@ db $06, $1F, $40, $12, $01, $3F, $14, $01, $3F, $13, $1F, $42, $1A, $1F, $4B, $1 ;-------------------------------------------------------------------------------- org $05DFB1 ; <- 2DFB1 - Bank05.asm : 2499 JSL.l SkipDrawEOR -;-------------------------------------------------------------------------------- ;================================================================================ ; Kiki Big Bomb Fix ;-------------------------------------------------------------------------------- org $1EE4AF ; <- f64af sprite_kiki.asm : 285 (LDA.b #$0A : STA $7EF3CC) -JSL.l AssignKiki -NOP #2 -;-------------------------------------------------------------------------------- +JSL.l AssignKiki : NOP #2 ;================================================================================ ; Wallmaster camera fix @@ -740,11 +697,7 @@ org $029E2E ; <- 11E2E - module_ganon_emerges.asm : 59 (JSL Dungeon_SaveRoomData JSL.l OnAga2Defeated ;-------------------------------------------------------------------------------- org $0DDBDE ; <- 6DBDE - headsup_display.asm : 105 (DEC A : BPL .subtractRupees) -JSL.l IncrementSpentRupees -NOP #6 -;org $0DDBF7 ; <- 6DBF7 - headsup_display.asm : 121 (STA $7EF362) -;RefillLogic_subtractRupees: -;-------------------------------------------------------------------------------- +JSL.l IncrementSpentRupees : NOP #6 ;================================================================================ ; Remove Item Menu Text @@ -754,24 +707,22 @@ JMP DrawItem_finished org $0DECE6 ; <- 6ECE6 - equipment.asm : 1934 (SEP #$30) DrawItem_finished: org $0DEB48 ; <- 6EB48 - equipment.asm : 1784 (LDA $0000) -LDA $0000, Y : STA $11F2 -LDA $0002, Y : STA $11F4 -LDA $0040, Y : STA $1232 -LDA $0042, Y : STA $1234 +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) -LDA $0000, Y : STA $11F2 -LDA $0002, Y : STA $11F4 -LDA $0040, Y : STA $1232 -LDA $0042, Y : STA $1234 +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) JMP UpdateBottleMenu_return org $0DE2F1 ; <- 6E2F1 - equipment.asm : 1000 (SEP #$30) UpdateBottleMenu_return: ;-------------------------------------------------------------------------------- -;org $0DDDC3 ; <- 6DDC3 - equipment.asm : 131 (JSR DrawAbilityText) -;NOP #3 org $0DE6F4 ; <- 6E6F4 - equipment.asm : 1474 (BCC .lacksAbility) db #$80 ; BRA org $0DE81A ; <- 6E81A - equipment.asm : 1597 (STA $00) @@ -784,36 +735,16 @@ 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 $0DE9D8 ; <- 6E9D8 - equipment.asm : 1635 (LDA $E860, X : STA $12EA, X) -;BRA DrawProgressIcons_initPendantDiagram_notext -;org $0DEA0E ; <- 6EA0E - equipment.asm : 1645 (INX #2) -;DrawProgressIcons_initPendantDiagram_notext: -;-------------------------------------------------------------------------------- - -;================================================================================ -; Map Always Zoomed -;-------------------------------------------------------------------------------- -;org $0ABA49 ; <- 53A49 - Bank0A.asm : 447 (LDA.b #$80 : STA $211A) -;JSL.l PrepMapZoom : RTL -;org $0ABB32 ; <- 53B32 - Bank0A.asm : 626 (LDA $F6 : AND.b #$70) -;JSL.l ForceMapZoom -;-------------------------------------------------------------------------------- ;================================================================================ ; Zelda S&Q Mirror Fix ;-------------------------------------------------------------------------------- org $02D9A4 ; <- 159A4 - Bank02.asm : 11077 (dw $0000, $0002, $0002, $0032, $0004, $0006, $0030) dw $0000, $0002, $0004, $0032, $0004, $0006, $0030 -;-------------------------------------------------------------------------------- ;================================================================================ ; Accessibility ;-------------------------------------------------------------------------------- -;org $0AC574 ; <- 54574 - Bank0A.asm : 1797 (LDA $0D : STA $0802, X) -;JSL FlipGreenPendant -;NOP #6 -;-------------------------------------------------------------------------------- org $02A3F4 ; <- 123F4 - Bank02.asm : 6222 (LDA.b #$72 : BRA .setBrightness) BRA + : NOP #2 : + org $02A3FD ; <- 123FD - Bank02.asm : 6233 (LDA.b #$32 : STA $9a) @@ -854,7 +785,6 @@ JSL.l LoadElectroPalette ;-------------------------------------------------------------------------------- org $07997C ; <- 03997C - Bank07.asm : 4015 (JSL LoadActualGearPalettes) JSL.l RestoreElectroPalette -;-------------------------------------------------------------------------------- ;================================================================================ ; Ice Floor Toggle @@ -864,7 +794,6 @@ JSL.l LoadModifiedIceFloorValue_a11 : NOP ;-------------------------------------------------------------------------------- org $07D26E ; <- 3D26E - Bank07.asm : 12786 (LDA $0348 : AND.b #$01 : BNE BRANCH_RESH) JSL.l LoadModifiedIceFloorValue_a01 : NOP -;-------------------------------------------------------------------------------- ;================================================================================ ; Sword Upgrade Randomization @@ -874,29 +803,18 @@ db $B1, $C6, $F9, $C9, $C6, $F9 ; data insert - 2 chests, fat fairy room org $01E97E ; <- E97E ($280016, $250016) dl $080116, $070116; <- E97E ;-------------------------------------------------------------------------------- -;org $06C9BC ; <- 349BC - sprite_ponds.asm : 1066 -;org $06C9C0 ; <- 349C0 - sprite_ponds.asm : 1068 -;org $06C926 ; <- 34926 - sprite_ponds.asm : 945 -;JML.l GetFairySword -;NOP #12 org $06C936 ; <- 34936 - sprite_ponds.asm : 952 PyramidFairy_BRANCH_IOTA: org $06C948 ; <- 34948 - sprite_ponds.asm : 961 PyramidFairy_BRANCH_GAMMA: ;-------------------------------------------------------------------------------- -;org $0EF7BD ; <- 777BD - sprite_ponds.asm : 1890 (LDA $7EF340, X : BMI .invalidValue : BNE VWF_ChangeItemTiles) -;JSL.l ReadInventoryPond -;org $0EF7E4 ; <- 777E4 - sprite_ponds.asm : 1922 (LDA $7EF340, X : BMI .invalidValue : BNE VWF_ChangeItemTiles) -;JSL.l ReadInventoryPond -;-------------------------------------------------------------------------------- org $1EE16E ; <- F616E - sprite_bomb_shop_entity.asm : 73 NOP #8 ; fix bomb shop dialog for dwarfless big bomb org $068A14 ; <- 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 +JML.l GetSmithSword : NOP #4 Smithy_DoesntHaveSword: org $06B49D ; <- 3349D - sprite_smithy_bros.asm : 485 (.tempered_sword_or_better) Smithy_AlreadyGotSword: @@ -909,10 +827,6 @@ 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 -;LDA $8A : CMP.b #$80 : NOP -; $22 = $0000 - $00FF - MS Pedestal -; $22 = $0100 - $00FF - Hobo -;-------------------------------------------------------------------------------- ;================================================================================ ; Temporary Nerfs and Buffs @@ -940,7 +854,6 @@ JSL.l 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 -;-------------------------------------------------------------------------------- ;================================================================================ ; Faster Great Fairies @@ -952,17 +865,12 @@ org $06C896 ; <- sprite_ponds.asm : 844 ( LDA $1A : AND.b #$07 : BNE BRANCH_ALPH 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 ) db $03 ; fade out speed. Should be power of 2 minus 1 -;-------------------------------------------------------------------------------- ;================================================================================ ; New Items ;-------------------------------------------------------------------------------- -;org $07B57B ; <- 3B57B - Bank07.asm : 8523 (BMI .cantOpen) -;NOP #2 -;-------------------------------------------------------------------------------- org $07B574 ; <- 3B574 - Bank07.asm : 8519 (LDA.b #$01 : STA $02E9) -JSL.l ChestPrep -NOP #3 +JSL.l ChestPrep : NOP #3 db $90 ; !BCC .cantOpen ;-------------------------------------------------------------------------------- org $00D531 ; 5531 - Bank00.asm:3451 (LDY.b #$5D) @@ -972,8 +880,7 @@ org $00D547 ; 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 +JSL.l GetAnimatedSpriteBufferPointer : NOP org $0799F7 ; 399F7 - Bank07.asm:4107 (JSL AddReceivedItem) JSL.l AddReceivedItemExpanded @@ -1024,12 +931,10 @@ org $08C70F ; 4470F - ancilla_receive_item.asm : 582 - (LDA.b #$00 : STA ($92), JSL.l LoadNarrowObject org $0985ED ; 485ED - ancilla_init.asm:693 (LDA $02E9 : CMP.b #$01) -JSL.l AddReceivedItemExpandedGetItem -NOP +JSL.l AddReceivedItemExpandedGetItem : NOP org $07B57D ; 3B57D - Bank07.asm:8527 (LDA Link_ReceiveItemAlternates, Y : STA $03) -JSL.l Link_ReceiveItemAlternatesExpanded_loadAlternate -NOP +JSL.l Link_ReceiveItemAlternatesExpanded_loadAlternate : NOP ;-------------------------------------------------------------------------------- org $09892E ; 4892E - ancilla_init.asm:1307 (LDA BottleList, X) LDA.w BottleListExpanded, X @@ -1037,15 +942,8 @@ LDA.w BottleListExpanded, X org $09895C ; 4895C - ancilla_init.asm:1344 (LDA PotionList, X) LDA.w PotionListExpanded, X ;-------------------------------------------------------------------------------- -;org $098A36 ; <- 48A36 - ancilla_init.asm:1432 (LDA AddReceiveItem.item_graphics_indices, Y : STA $72) -;LDA AddReceivedItemExpanded_item_graphics_indices, Y -;-------------------------------------------------------------------------------- org $06D1EB ; 351EB - sprite_absorbable.asm:364 (STA $7EF375) ; bugbug commented out until i figure out why it doesn't work JSL HandleBombAbsorbtion -;-------------------------------------------------------------------------------- -;org $09873F ; <- 04873F - ancilla_init.asm : 960 (ADC [$00] : STA [$00] ) -;JSL.l AddToStock -;-------------------------------------------------------------------------------- ;================================================================================ ; Kholdstare Shell Fix @@ -1054,21 +952,11 @@ org $00EC88 ; <- 6C88 - Bank00.asm:6671 - (LDA $7EC380, X : STA $7EC580, X) LDA $7EC3A0, X : STA $7EC5A0, X ;-------------------------------------------------------------------------------- org $00ECEB ; <- 6CEB - Bank00.asm:6730 - (LDX.w #$0080) -LDX.w #$00A0 -LDA.w #$00B0 -;-------------------------------------------------------------------------------- +LDX.w #$00A0 : LDA.w #$00B0 ;================================================================================ ; Potion Refill Fixes ;-------------------------------------------------------------------------------- -;org $0DF1B3 ; <- 6F1B3 - headsup_display.asm:492 - (SEP #$30) -;JSL.l RefillMagic -;RTL -;-------------------------------------------------------------------------------- -;org $0DF128 ; <- 6F128 - headsup_display.asm:407 - (LDA $7EF36D : CMP $7EF36C : BCC .refillAllHealth) -;JSL.l RefillHealth -;RTL -;-------------------------------------------------------------------------------- org $00F8FB ; <- 78FB - Bank00.asm:8507 - (JSL HUD.RefillHealth : BCC BRANCH_ALPHA) JSL.l RefillHealth ;-------------------------------------------------------------------------------- @@ -1080,14 +968,12 @@ JSL.l RefillHealth ;-------------------------------------------------------------------------------- org $00F922 ; <- 7922 - Bank00.asm:8543 - (JSL HUD.RefillMagicPower : BCC .beta) JSL.l RefillMagic -;-------------------------------------------------------------------------------- ;================================================================================ ; Early Bottle Fix ;-------------------------------------------------------------------------------- org $09894C ; <- 4894C - ancilla_init.asm:1327 JSL.l InitializeBottles -;-------------------------------------------------------------------------------- ;================================================================================ ; Agahnim Doors Fix @@ -1103,8 +989,7 @@ 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 +JSL.l DropSafeDungeon : NOP #4 ;-------------------------------------------------------------------------------- ;================================================================================ @@ -1119,36 +1004,9 @@ db 80 ; BRA org $05DA81 ; <- 2DA81 - sprite_uncle_and_priest.asm : 65 (BCC .dontHaveMasterSword) db 80 ; BRA ;-------------------------------------------------------------------------------- -;org $05DE1D ; <- 2DE1D - sprite_uncle_and_priest.asm : 725 (LDA.b #$A0 : STA $7EF372) -;JSL.l RefillHealthPlusMagic8bit -;NOP #2 -;-------------------------------------------------------------------------------- org $05DEF8 ; <- 2DEF8 - sprite_uncle_and_priest.asm : 917 (LDA.b #$05) LDA.b #$00 ;-------------------------------------------------------------------------------- -;org $1EEAB6 ; <- F6AB6 - sprite_old_mountain_man.asm : 338 (LDA.b #$A0 : STA $7EF372) -;JSL.l RefillHealthPlusMagic8bit -;NOP #2 -;-------------------------------------------------------------------------------- -;org $01E5B2 ; <- E5B8 - lower pot link's house -;db $14 ; fairy -;org $01E5B5 ; <- E5B8 - lower pot link's house -;db $14 ; fairy -;org $01E5B8 ; <- E5B8 - lower pot link's house -;db $0D ; big magic -;-------------------------------------------------------------------------------- - -;================================================================================ -; Ganon's Tower Basement Door Fix -;-------------------------------------------------------------------------------- -;org $1FF3F4 ; <- 0FF3F4 -;db $00 -;-------------------------------------------------------------------------------- -; Misery Mire Basement Door Fix -;-------------------------------------------------------------------------------- -;org $1FB8E4 ; <- 0FB8E4 -;db $00 -;-------------------------------------------------------------------------------- ;0xFE465 -> 0x1E org $1FE465 db #$1E @@ -1158,17 +1016,13 @@ db #$1E ; Bomb & Arrow Capacity Updates ;-------------------------------------------------------------------------------- org $0DDC27 ; <- 6DC27 - headsup_display.asm:151 (LDA $7EF370 : TAY) -JSL.l IncrementBombs -NOP #15 +JSL.l IncrementBombs : NOP #15 ;-------------------------------------------------------------------------------- org $0DDC49 ; <- 6DC49 - headsup_display.asm:169 (LDA $7EF371 : TAY) -JSL.l IncrementArrows -NOP #15 +JSL.l IncrementArrows : NOP #15 ;-------------------------------------------------------------------------------- org $1EE199 ; <- F6199 - sprite_bomb_shop_entity.asm:102 (LDA $7EF370 : PHX : TAX) -JSL.l CompareBombsToMax -NOP #11 -;-------------------------------------------------------------------------------- +JSL.l CompareBombsToMax : NOP #11 ;================================================================================ ; Bonk Items @@ -1183,7 +1037,6 @@ JSL.l LoadBonkItemGFX ;-------------------------------------------------------------------------------- org $05FC04 ; <- 2FC04 - sprite_dash_item.asm : 38 - (JSL DashKey_Draw) JSL.l DrawBonkItemGFX -;-------------------------------------------------------------------------------- ;================================================================================ ; Library Item @@ -1199,7 +1052,6 @@ JSL.l DrawLibraryItemGFX ;-------------------------------------------------------------------------------- org $068D0E ; <- 30D0E - sprite_prep.asm : 1401 - (LDA $7EF34E : BEQ .book_of_mudora) JSL.l ItemCheck_Library -;-------------------------------------------------------------------------------- ;================================================================================ ; Inventory Updates @@ -1208,7 +1060,6 @@ org $0DDF38 ; <- 6DF38 - equipment.asm : 480 JSL.l ProcessMenuButtons BCC _equipment_497 JMP.w _equipment_544 -;NOP #7 ResetEquipment: JSR.w RestoreNormalMenu ; (short) RTL @@ -1217,21 +1068,14 @@ NOP #3 warnpc $0DDF49 org $0DDF49 ; <- 6DF49 - equipment.asm : 497 _equipment_497: ; LDA $F4 : AND.b #$08 : BEQ .notPressingUp - NO BUTTON CAPTURE -;org $0DDF7E ; <- 6DF7E - equipment.asm : 539 org $0DDF88 ; <- 6DF88 - equipment.asm : 544 -;org $0DE10E ; <- 6E10E - equipment.asm : 806 _equipment_544: ;-------------------------------------------------------------------------------- org $0DEB98 ; <- 6EB98 - equipment.asm : 1803 -;LDA.w #$3C60 : STA $FFBE, Y -;ORA.w #$4000 : STA $FFC4, Y -;ORA.w #$8000 : STA $0084, Y -;EOR.w #$4000 : STA $007E, Y LDA.w #$3C60 : STA $FFBE, Y ORA.w #$8000 : STA $007E, Y ORA.w #$4000 : STA $0084, Y -JSL.l AddYMarker -NOP #2 +JSL.l AddYMarker : NOP #2 ;-------------------------------------------------------------------------------- org $0DF789+6 ; <- 6F789+6 (not in disassembly) - red bottle hud tile, lower right dw #$2413 ; (Orig: #$24E3) @@ -1248,9 +1092,6 @@ dw #$2C4F ; (Orig: #$6C78) org $0DF8A1+6+16 ; red mail tile, lower right dw #$242F ; (Orig: #$6478) ;-------------------------------------------------------------------------------- -;org $0DDE9B ; <- 6DE9B equipment.asm:296 - LDA $0202 : CMP.b #$10 : BNE .notOnBottleMenu (CMP instruction) -;CMP.b #$FF -;-------------------------------------------------------------------------------- org $0DDE9F ; <- 6DE9F equipment.asm:300 - LDA.b #$0A : STA $0200 LDA.b #$04 ;-------------------------------------------------------------------------------- @@ -1264,8 +1105,7 @@ org $0DDE3D ; <- 6DE3D equipment.asm:217 - BNE .equippedItemIsntBottle db $80 ; BRA ;-------------------------------------------------------------------------------- org $0DDF9A ; <- 6DF9A - equipment.asm : 554 -JSL.l OpenBottleMenu -NOP +JSL.l OpenBottleMenu : NOP ;-------------------------------------------------------------------------------- org $0DE12D ; <- 6E12D - equipment.asm : 828 JSL.l CloseBottleMenu @@ -1274,32 +1114,26 @@ org $0DDF1E ; <- 6DF1E - equipment.asm : 462 - LDA $F4 : AND.b #$10 : BEQ .dontL JSL.l CheckCloseItemMenu ;-------------------------------------------------------------------------------- org $0DEE70 ; <- 6EE70 - equipment.asm : 2137 -JSL.l PrepItemScreenBigKey -NOP +JSL.l PrepItemScreenBigKey : NOP ;-------------------------------------------------------------------------------- org $08D395 ; <- 45395 - ancilla_bird_travel_intro.asm : 253 -JSL.l UpgradeFlute -NOP #2 +JSL.l UpgradeFlute : NOP #2 ;-------------------------------------------------------------------------------- org $05E4D7 ; <- 2E4D7 - sprite_witch.asm : 213 -JSL.l RemoveMushroom -NOP #2 +JSL.l RemoveMushroom : NOP #2 ;-------------------------------------------------------------------------------- org $05F55F ; <- 2F55F - sprite_potion_shop.asm : 59 JSL.l LoadPowder ;-------------------------------------------------------------------------------- org $05F681 ; <- 2F681 - sprite_potion_shop.asm : 234 -JSL.l DrawPowder -RTS +JSL.l DrawPowder : RTS NOP #8 ;-------------------------------------------------------------------------------- org $05F65D ; <- 2F65D - sprite_potion_shop.asm : 198 -JSL.l CollectPowder -NOP #5 +JSL.l CollectPowder : NOP #5 ;-------------------------------------------------------------------------------- org $05EE5F ; <- 2EE5F - sprite_mushroom.asm : 30 -JSL.l LoadMushroom -NOP +JSL.l LoadMushroom : NOP ;-------------------------------------------------------------------------------- org $05EE78 ; <- 2EE78 - sprite_mushroom.asm : 58 JSL.l DrawMushroom @@ -1312,20 +1146,14 @@ NOP #5 org $07A379 ; <- 3A379 - Bank07.asm : 5687 JSL.l SpawnHauntedGroveItem ;-------------------------------------------------------------------------------- -org $07A303 ; 3A303 - Bank07.asm : 5622 -;JSL.l FixShovelLock -;-------------------------------------------------------------------------------- org $07A3A2 ; 3A3A2 - Bank07.asm : 5720 - JSL DiggingGameGuy_AttemptPrizeSpawn JSL.l SpawnShovelItem BRA _Bank07_5726 org $07A3AB ; 3A3AB - Bank07.asm : 5726 - LDA.b #$12 : JSR Player_DoSfx2 _Bank07_5726: -;org $07A381 ; 3A381 - Bank07.asm : 5693 - ORA $035B -;ORA $035B ;-------------------------------------------------------------------------------- org $079A0E ; 39A0E - Bank07.asm : 4117 - JSL HUD.RefreshIconLong JSL.l Link_ReceiveItem_HUDRefresh -;-------------------------------------------------------------------------------- ;================================================================================ ; Swordless Mode @@ -1358,22 +1186,19 @@ JSL.l ItemCheck_BombosTablet org $05F285 ; <- 2F285 JSL.l ItemCheck_EtherTablet ;-------------------------------------------------------------------------------- -;org $098BCC ; <- 48BCC - ancilla_init.asm : 1679 (LDA AddReceiveItem.item_graphics_indices, Y : STA $72) -;;JSL.l SetTabletItem -;JSL SpawnTabletItem : PLX : PLB : RTL -;-------------------------------------------------------------------------------- org $07859F ; <- 3859F - Bank07.asm : 965 (JSL AddPendantOrCrystal) JSL SpawnTabletItem org $07862A ; <- 3862A - Bank07.asm : 1064 (JSL AddPendantOrCrystal) JSL SpawnTabletItem ;-------------------------------------------------------------------------------- +org $05EF1E ; 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 +JSL.l MedallionTrigger_Bombos : NOP ;-------------------------------------------------------------------------------- org $08ACC8 ; <- 42CC8 - ancilla_ether_spell.asm : 350 JSL.l MedallionTrigger_Ether @@ -1391,7 +1216,6 @@ RTL warnpc $08B708 org $08B708 ; <- 43708 - ancilla_quake_spell.asm : 83 _ancilla_quake_spell_83: -;-------------------------------------------------------------------------------- ;================================================================================ ; Animated Entrances @@ -1402,18 +1226,15 @@ BNE + RTL NOP #2 + -;-------------------------------------------------------------------------------- ;================================================================================ ; Big & Great Fairies ;-------------------------------------------------------------------------------- org $1DC475 ; <- EC475 - sprite_big_fairie.asm : 70 (LDA.w #$00A0 : ADD $7EF372 : STA $7EF372) -JSL.l RefillHealthPlusMagic -NOP #8 +JSL.l 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 +NOP #4 : JSL.l CheckFullHealth ;-------------------------------------------------------------------------------- ;================================================================================ @@ -1441,9 +1262,6 @@ JSL RNG_Ganon_Extra_Warp org $1D9488 ; <- E9488 - sprite_ganon.asm JSL RNG_Ganon ;-------------------------------------------------------------------------------- -;org $01EDB2 ; <- EDB2 - Bank01.asm : 14038 -;INC $04C4 -;-------------------------------------------------------------------------------- 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) @@ -1522,28 +1340,16 @@ JSL.l 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 +JML.l OnDrawHud : NOP #197 ReturnFromOnDrawHud: SEP #$30 LDX.b #$FF ; vanilla hud code ends with #$FF in X, and it's required for unknown reasons. - -;org $0DFD0A ; <- 6FD0A - headsup_display.asm : 900 -;STA $7EC766 ; nudge key digit right - -;org $0DFD13 ; <- 6FD13 - headsup_display.asm : 905 -;STA $7EC726 ; key icon blank - org $0DFC37 ; <- 6FC37 - headsup_display.asm : 828 (LDA.w #$28F7) JSL.l DrawMagicHeader BRA + : NOP #15 : + ;-------------------------------------------------------------------------------- org $0DFB29 ; <- headsup_display.asm : 688 (LDA.b #$86 : STA $7EC71E) -;LDA.b #$86 : STA $7EC720 ; nudge silver arrow right - remember to update this in newit -;LDA.b #$24 : STA $7EC721 -;LDA.b #$87 : STA $7EC722 -;LDA.b #$24 : STA $7EC723 JSL.l DrawHUDArrows : BRA + NOP #18 + @@ -1560,44 +1366,43 @@ LDX.w #HUD_TileMap org $0DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700) MVN $217E ;-------------------------------------------------------------------------------- -;org $0DE48E ; <- 6E48E - equipment.asm : 1233 (LDA.w #$11CE : STA $00) - HOOK HERE TO DRAW ON THE ITEM SCREEN -;JSL.l DrawHUDDungeonItems -;NOP -;-------------------------------------------------------------------------------- org $0DFB1F ; 6FB1F - headsup_display.asm : 681 (LDA $7EF340 : BEQ .hastNoBow) JSL.l CheckHUDSilverArrows -;-------------------------------------------------------------------------------- ;================================================================================ ; 300 Rupee NPC ;-------------------------------------------------------------------------------- org $1EF060 ; <- F7060 - sprite_shopkeeper.asm:242 (INC $0D80, X) -JSL.l Set300RupeeNPCItem -NOP +JSL.l Set300RupeeNPCItem : NOP + +;================================================================================ +; Tree Kid Fix ;-------------------------------------------------------------------------------- +org $06B12B ; <- 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 +;================================================================================ ;================================================================================ ; Glitched Mode Fixes ;-------------------------------------------------------------------------------- org $0691AC ; <- 311AC - sprite_prep.asm:2453 (LDY $0FFF) -JSL.l GetAgahnimPalette -NOP #2 +JSL.l GetAgahnimPalette : NOP #2 ;-------------------------------------------------------------------------------- org $06F0DD ; <- 370DD - Bank06.asm:5399 (STA $0BA0, X) -JSL.l GetAgahnimDeath -NOP #2 +JSL.l GetAgahnimDeath : NOP #2 ;-------------------------------------------------------------------------------- org $1ED4E6 ; <- F54E6 - sprite_agahnim.asm:314 (LDY $0FFF) -JSL.l GetAgahnimType -NOP #2 +JSL.l GetAgahnimType : NOP #2 ;-------------------------------------------------------------------------------- org $1ED577 ; <- F5577 - sprite_agahnim.asm:418 (PHX) JML.l GetAgahnimSlot GetAgahnimSlotReturn: ;-------------------------------------------------------------------------------- org $1ED678 ; <- F5678 - sprite_agahnim.asm:587 (INC $0E30, X) -NOP #2 -JSL.l GetAgahnimLightning +NOP #2 : JSL.l GetAgahnimLightning ;-------------------------------------------------------------------------------- org $0287E0 ; <- 107E0 - Bnak02.asm:1507 (LDA $0112 : ORA $02E4 : ORA $0FFC : BEQ .allowJoypadInput) JSL.l AllowJoypadInput : NOP #5 @@ -1607,7 +1412,6 @@ JSL.l AllowJoypadInput : NOP #5 ;-------------------------------------------------------------------------------- org $05FBD3 ; <- 2FBD3 - sprite_mad_batter.asm:209 - (STA $7EF37B) JSL.l GetMagicBatItem -;-------------------------------------------------------------------------------- ;================================================================================ ; MSU Music @@ -1645,25 +1449,21 @@ JML FanfarePreload : NOP org $09F2A7 ; <- 8F27C27E - module_death.asm:56 (STA $7EC227) JSL.l StoreMusicOnDeath -org $0CC100 ; <- A511 C904 - Bank0C.asm:07 (LDA $11 : CMP.b #$04) -;JSL.l StartupWait - org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C) JSL.l EndingMusicWait ; Process music commands in NMI from new location after muting is processed org $0080DD -dw !REG_MUSIC_CONTROL +dw MusicControl org $008101 -dw !REG_MUSIC_CONTROL +dw MusicControl org $09F512 -dw !REG_MUSIC_CONTROL +dw MusicControl org $0CF05F -dw !REG_MUSIC_CONTROL -;-------------------------------------------------------------------------------- +dw MusicControl ;================================================================================ ; Replacement Shopkeeper @@ -1675,28 +1475,24 @@ ShopkeeperFinishInit: org $1EEEE3 ; <- F6EE3 - sprite_shopkeeper.asm:7 - (LDA $0E80, X) JSL.l Sprite_ShopKeeper : RTS : NOP ShopkeeperJumpTable: -;-------------------------------------------------------------------------------- ;================================================================================ ; Tile Target Loader ;-------------------------------------------------------------------------------- org $00D55E ; <- 555E - Bank00.asm:3491 (LDX.w #$2D40) JSL.l LoadModifiedTileBufferAddress : NOP #2 -;-------------------------------------------------------------------------------- ;================================================================================ ; Permabunny Fix ;-------------------------------------------------------------------------------- org $078F32 ; <- 38F32 - Bank07.asm:2420 - (LDA $7EF357) JSL.l DecideIfBunny ; for bunny beams -;-------------------------------------------------------------------------------- ;================================================================================ ; Other bunny Fixes ;-------------------------------------------------------------------------------- org $029E7C; <- 11E7C - module_ganon_emerges.asm:127 - (LDA.b #$09 : STA $012C) JSL.l FixAga2Bunny : NOP -;-------------------------------------------------------------------------------- ;================================================================================ ; Open Mode Fixes @@ -1704,15 +1500,11 @@ JSL.l FixAga2Bunny : NOP org $05DF65 ; <- 2DF65 - sprite_uncle_and_priest.asm:994 - (LDA.b #$01 : STA $7EF3C5) NOP #6 ;-------------------------------------------------------------------------------- -;org $0280DD ; <- 100DD - Bank02.asm:298 - (LDA $7EF3C5 : CMP.b #$02 : BCC .indoors) -;JSL.l ForceLinksHouse -;-------------------------------------------------------------------------------- org $05EDDF ; <- 2EDDF - sprite_zelda.asm:398 - (LDA.b #$02 : STA $7EF3C5) JSL.l EndRainState : NOP #2 ;-------------------------------------------------------------------------------- org $05DF49 ; <- 2DF49 - sprite_uncle_and_priest.asm:984 - (JSL Link_ReceiveItem) JSL.l OnUncleItemGet -;-------------------------------------------------------------------------------- ;================================================================================ ; Generic Keys @@ -1740,25 +1532,18 @@ JSL.l HUDRebuildIndoor : NOP #4 ;-------------------------------------------------------------------------------- org $029A35 ; <- 11A35 : Bank02.asm:4789 - (JSL HUD.RebuildIndoor.palace) JSL.l HUDRebuildIndoorHole -;-------------------------------------------------------------------------------- ;================================================================================ ; Pendant / Crystal Fixes ;-------------------------------------------------------------------------------- -;org $0DE9C8 ; <- 6E9C8 - original check for agahnim 1 being defeated -;;LDA $7EF3CA : CMP.b #$40 ; check for dark world instead -;JSL.l CheckPendantHUD -;NOP #2 ;================================================================================ org $098BB0 ; <- 048BB0 - ancilla_init.asm:1663 - (STX $02D8 : JSR AddAncilla) -JSL.l TryToSpawnCrystalUntilSuccess -NOP +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 $0DE9C8 ; <- 6E9C8 - equipment.asm:1623 - (LDA $7EF3C5 : CMP.b #$03 : BCC .beforeAgahnim) JSL.l DrawPendantCrystalDiagram : RTS -;NOP #11 ;================================================================================ org $0DEDCC ; <- 6EDCC - equipment.asm:2043 - (LDA $040C : AND.w #$00FF : CMP.w #$00FF : BNE .inSpecificDungeon) JSL.l ShowDungeonItems : NOP #5 @@ -1772,22 +1557,12 @@ JSL.l 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 $0DEA5F ; <- 6EA5F - equipment.asm:1679 - (SEP #$30) -;NOP #5 -;JMP .skipCrystalInit -;org $0DEAA4 ; <- 6EAA4 - equipment.asm:1706 - (LDA $7EF37A : AND.w #$0001) -;.skipCrystalInit -;================================================================================ -org $0DE9D8 ; <- 6E9D8 - equipment.asm:1635 - (LDA $E860, X : STA $12EA, X) -org $0DEA15 ; <- 6EA15 - equipment.asm:1647 - (LDA.w #$13B2 : STA $00) -;================================================================================ org $00F97E ; <- 797E - Bank00.asm:8586 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA) JSL.l FlipLWDWFlag : NOP #6 ;================================================================================ org $02B15C ; <- 1315C - Bank02.asm:7672 - (LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA) JSL.l IncrementOWMirror -JSL.l FlipLWDWFlag -NOP #2 +JSL.l FlipLWDWFlag : NOP #2 ;================================================================================ ;Clear level to open doors org $01C50D ; 0xC50D - Bank01.asm:10032 - (LDA $7EF3CA : BNE .inDarkWorld) @@ -1796,11 +1571,6 @@ LDA CrystalPendantFlags_2, X ;Kill enemy to clear level org $01C715 ; <- C715 - Bank01.asm:10358 - (LDA $7EF3CA : BNE .inDarkWorld) LDA CrystalPendantFlags_2, X -;JSL.l GetPendantCrystalWorld -;================================================================================ -;org $0AC5C3 ; <- 545C3 - Bank0A.asm:1859 - (LDA $7EF374 : AND $0AC5A6, X : BEQ .fail) -;NOP #10 -;CLC ;================================================================================ org $0AC5BB ; < 545BB - Bank0A.asm:1856 - (LDA $7EF3C7 : CMP.b #$03 : BNE .fail) JSL.l OverworldMap_CheckObject : RTS @@ -1878,17 +1648,15 @@ JSL.l GetMapMode ;================================================================================ org $0AC012 ; <- 54012 - Bank0A.asm:1039 (LDA $7EF2DB : AND.b #$20 : BNE BRANCH_DELTA) NOP #8 -;org $0AC012 ; <- 54012 - Bank0A.asm:1039 - (LDA $7EF2DB) -;JSL.l OnLoadMap ;================================================================================ org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A : BCS BRANCH_BETA) JSL CheckHeraBossDefeated : BNE + : NOP -LDX.b #$F1 : STX $012C +LDX.b #$F1 : STX.w MusicControlRequest + ;================================================================================ org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA) JSL CheckHeraBossDefeated : BNE + : NOP -STX $012C ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS +STX.w MusicControlRequest ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS + ;================================================================================ org $029798 ; <- 11798 - Bank02.asm:4287 (CMP $02895C, X : BNE BRANCH_ALPHA) @@ -1898,9 +1666,6 @@ NOP #6 ; remove crystal room cutscene check that causes softlocks ;================================================================================ ; Text Changes ;-------------------------------------------------------------------------------- -;org $06C7D3 ; <- 347D3 - sprite_ponds.asm:720 (LDA.b #$8A) -;JSL.l DialogFairyThrow -;-------------------------------------------------------------------------------- org $06C7BB ; <- 347BB - sprite_ponds.asm:702 (JSL Sprite_ShowMessageFromPlayerContact : BCC BRANCH_ALPHA) JSL.l FairyPond_Init ;-------------------------------------------------------------------------------- @@ -1958,10 +1723,6 @@ org $05FA8E Sprite_ShowMessageMinimal: JML.l Sprite_ShowMessageMinimal_Alt ;-------------------------------------------------------------------------------- -;org $1CFD69 -;Main_ShowTextMessage: -;JML.l Main_ShowTextMessage_Alt -;-------------------------------------------------------------------------------- org $07b0cc ; <- 3b0d0 - Bank 07.asm : 7767 (JSL Main_ShowTextMessage) JSL.l Main_ShowTextMessage_Alt ;-------------------------------------------------------------------------------- @@ -1987,9 +1748,7 @@ org $1ECD39 SkipCrystalPalette: ;-------------------------------------------------------------------------------- org $08C3FD ; <- 443FD - ancilla_receive_item.asm : 89 -!MS_GOT = "$7F5031" -LDA #$40 : STA !MS_GOT -;;NOP #6 ; don't set master sword follower +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 @@ -2007,12 +1766,10 @@ JSL.l DialogResetSelectionIndex ;-- Agahnim 1 Defeated org $068475 ; <- 30475 Bank06.asm : 762 - (JSL Sprite_ShowMessageMinimal) JSL.l AddInventory_incrementBossSwordLong -;NOP #4 ;---------------------------------------------------------- ;-- We'll take your sword org $06B4F3 ; <- 334F3 sprite_smithy_bros.asm : 556 (JSL Sprite_ShowMessageUnconditional) JSL ItemSet_SmithSword -;NOP #4 ;---------------------------------------------------------- ;=================================== @@ -2033,24 +1790,10 @@ dw $1BD8, $16FC, $0001, $0122, $00F0 ; Blind (maiden) "don't take me outside!" dw $1520, $167C, $0001, $0122, $00F0 ; Blind (maiden) "don't take me outside!" dw $05AC, $04FC, $0001, $0027, $00F0 ; Zelda in the water room ;---------------------------------------------------------- -;---------------------------------------------------------- -;-- Speed up Walls (Desert, Mire, and Palace of Darkness) -; org $01CA66 ; <- CA66 Bank01.asm : 10864 - (LDA.w #$2200 : ADD $041C : STA $041C) -; LDA.w #$4400 ; #$2200 is the normal speed, $#FF00 is max. -;---------------------------------------------------------- ;-- New Sign table offet calculation org $07b4fe ; <- 3b4fe - bank07.asm : 8454 (LDA $8A : ASL A : TAY) JSL CalculateSignIndex -;================================================================================ -; Ganon Fixes -;-------------------------------------------------------------------------------- -;org $1D91E3 ; <- E91E3 - sprite_ganon.asm : 778 -;JSL.l GanonWarpRNG -;NOP #2 -;LDA #$00 : NOP #4 -;-------------------------------------------------------------------------------- - ;================================================================================ ; Dark World Spawn Location Fix & Follower Fixes ;-------------------------------------------------------------------------------- @@ -2062,11 +1805,7 @@ JSL.l 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 $02D61A ; <- 1561A -;LDA.b #$01 : STA $1B ; fix something i wrote over i shouldn't have +JSL.l IncrementDeathCounter : NOP #6 ;-------------------------------------------------------------------------------- org $1ED379 ; <- F5379 - sprite_agahnim.asm:75 - JSL PrepDungeonExit JSL FixAgahnimFollowers @@ -2082,12 +1821,10 @@ org $08C45F ; <- 4445F - ancilla_recieve_item.asm:157 (STZ $02E9) JSL.l PostItemAnimation : NOP #2 ;-------------------------------------------------------------------------------- org $1EE90A ; <- F690A -JSL.l ItemCheck_OldMan -NOP #2 +JSL.l ItemCheck_OldMan : NOP #2 ;-------------------------------------------------------------------------------- org $0280F2 ; <- 100F2 -JSL.l ItemCheck_OldMan -NOP #2 +JSL.l ItemCheck_OldMan : NOP #2 ;-------------------------------------------------------------------------------- org $1EE9FE ; <- F69FE JSL.l ItemSet_OldMan @@ -2099,8 +1836,7 @@ org $059ACA ; <- 29ACA JSL $1DE1AA ; Sprite_SpawnFlippersItem ;-------------------------------------------------------------------------------- org $1DE1E4 ; <- EE1E4 - sprite_great_catfish.asm : 489 -JSL.l LoadZoraKingItemGFX -NOP #2 +JSL.l LoadZoraKingItemGFX : NOP #2 ;-------------------------------------------------------------------------------- org $068D86 ; <- 30D86 JSL.l ItemCheck_SickKid @@ -2112,25 +1848,20 @@ org $068BAC ; <- 30BAC - SpritePrep_FluteBoy : 1068 JSL.l ItemCheck_TreeKid2 org $06908D ; <- 3108D - SpritePrep_FluteBoy : 2175 -JSL.l ItemCheck_TreeKid -CMP.b #$08 -BEQ $0A +JSL.l ItemCheck_TreeKid : CMP.b #$08 : BEQ $0A org $069095 ; <- 31095 - SpritePrep_FluteBoy : 2177 -JSL.l ItemCheck_TreeKid -CMP.b #$08 +JSL.l ItemCheck_TreeKid : CMP.b #$08 org $0690BD ; <- 310BD - SpritePrep_FluteBoy : 2202 JSL.l ItemCheck_TreeKid2 org $06AF9B ; <- 32F9B - FluteBoy_Chillin : 73 : LDA $7EF34C : CMP.b #$02 : BCS .player_has_flute -;NOP #8 LDA HasGroveItem : AND.b #$01 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 +JSL.l ItemCheck_TreeKid2 : NOP #$02 ; remove pointless AND org $06B048 ; <- 33048 JSL.l ItemCheck_TreeKid3 @@ -2141,8 +1872,6 @@ FluteBoy_Abort: RTS FluteBoy_Continue: -;org $1E9968 ; <- F1968 - sprite_flute_boy_ostrich.asm : 14 (dw FluteBoyOstrich_Chillin) -;dw #$9991 ; FluteBoyOstrich_RunAway ;-------------------------------------------------------------------------------- org $06B0C9 ; <- 330C9 JSL.l ItemSet_TreeKid @@ -2159,8 +1888,7 @@ org $1DE11C ; <- EE11C JSL.l ItemCheck_Catfish ;-------------------------------------------------------------------------------- org $1DE1A1 ; <- EE1A1 - sprite_great_catfish.asm : 445 -JSL.l LoadCatfishItemGFX -NOP #2 +JSL.l LoadCatfishItemGFX : NOP #2 ;-------------------------------------------------------------------------------- org $1DDF49 ; <- EDF49 - sprite_great_catfish.asm : 19 JML.l JumpToSplashItemTarget : NOP @@ -2174,41 +1902,23 @@ LDA.b #$FF org $1DDF81 ; <- EDF81 - sprite_great_catfish.asm : 61 JSL.l DrawThrownItem ;-------------------------------------------------------------------------------- -;org $1DE1B0 ; <- EE1B0 - sprite_great_catfish.asm : 461 -;NOP #2 -;-------------------------------------------------------------------------------- org $05EE53 ; <- 2EE53 - mushroom.asm : 22 -JSL.l ItemCheck_Mushroom -NOP #2 +JSL.l ItemCheck_Mushroom : NOP #2 ;-------------------------------------------------------------------------------- org $05EE8C ; <- 2EE8C - mushroom.asm : 69 -JSL.l ItemSet_Mushroom -NOP +JSL.l ItemSet_Mushroom : NOP ;-------------------------------------------------------------------------------- org $05F53E ; <- 2F53E - sprite_potion_shop.asm : 40 -JSL.l ItemCheck_Powder -CMP.b #$20 +JSL.l ItemCheck_Powder : CMP.b #$20 ;-------------------------------------------------------------------------------- ; the quake medallion AND FLIPPERS org $1DDF71 ; <- EDF71 - sprite_great_catfish.asm : 47 JSL.l MarkThrownItem ;-------------------------------------------------------------------------------- -;org $05F65D ; <- 2F65D - DONE IN INVENTORY -;JSL.l ItemSet_Powder -;NOP #2 -;-------------------------------------------------------------------------------- -;JSL.l ItemCheck_RupeeNPC -;-------------------------------------------------------------------------------- -;JSL.l ItemSet_RupeeNPC -;-------------------------------------------------------------------------------- -;org $08D01B ; PC 0x4501B - ancilla_flute.asm - 55 -;JSL.l ItemSet_Flute -;-------------------------------------------------------------------------------- org $05FAFF ; <- 2FAFF - sprite_mad_batter.asm:57 (LDA $7EF37B : CMP.b #$01 : BCS .magic_already_doubled) JSL.l ItemCheck_MagicBat : BEQ + : RTS : NOP : + ;================================================================================ - ;================================================================================ ; Boss Hearts ;-------------------------------------------------------------------------------- @@ -2219,21 +1929,16 @@ org $05EF79 ; <- 2EF79 - sprite_heart_upgrades.asm:128 (JSL Sprite_PrepAndDrawSi JSL.l DrawHeartContainerGFX ;-------------------------------------------------------------------------------- org $05EFCE ; <- 2EFCE - sprite_heart_upgrades.asm:176 (JSL Link_ReceiveItem) -;org $05EFEE ; <- 2EFEE - sprite_heart_upgrades.asm:202 (JSL Link_ReceiveItem) JSL.l HeartContainerGet ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- org $0799B1 ; 399B1 - Bank07.asm:4063 (CPY.b #$3E : BNE .notHeartContainer) -JSL.l HeartContainerSound -BCC Link_ReceiveItem_notHeartContainer -; JSR Player_DoSfx3 +JSL.l HeartContainerSound : BCC Link_ReceiveItem_notHeartContainer org $0799BA ; 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) -JSL NormalItemSkipSound -NOP -BCS AddReceivedItem_doneWithSoundEffects +JSL NormalItemSkipSound : NOP : BCS AddReceivedItem_doneWithSoundEffects org $0988AE ; <- 488AE - ancilla_init.asm : 1193 (LDA.b #$0A : STA $02) AddReceivedItem_doneWithSoundEffects: ;================================================================================ @@ -2244,29 +1949,23 @@ JSL.l DrawHeartPieceGFX ;-------------------------------------------------------------------------------- org $05F08A ; <- 2F08A - sprite_heart_upgrades.asm : 324 - (LDA $7EF36B : INC A : AND.b #$03 : STA $7EF36B : BNE .got_4_piecese) item determination JSL.l HeartPieceGet -BCS $18 ; reinsert the near branch that appears midway through what we overrode -NOP #22 +JSL.l IsMedallion +BCS + : BRA Sprite_EB_HeartPiece_handle_flags : + ; Don't change OW flags if we're +STZ.w SpriteAITable, X : RTS ; getting a tablet item ;-------------------------------------------------------------------------------- org $06C0B0 ; <- 340B0 - sprite prep JSL.l HeartPieceSpritePrep ;-------------------------------------------------------------------------------- org $08C45B ; <- 4445B - ancilla_receive_item.asm : 152 JSL.l HPItemReset -;-------------------------------------------------------------------------------- -org $05EF1E ; <- 2EF1E - sprite_heart_upgrades.asm : 48 (LDA $7EF280, X : AND.b #$40 : BEQ .dont_self_terminate) -JSL.l HeartUpgradeSpawnDecision -;-------------------------------------------------------------------------------- -org $05EFFA ; <- 2EFFA - sprite_heart_upgrades.asm : 216 (LDA $7EF280, X : ORA.b #$40 : STA $7EF280, X) -JSL.l SaveHeartCollectedStatus -NOP #6 ;================================================================================ ;================================================================================ ; Fake Flippers Softlock Fix + General Damage Hooks ;-------------------------------------------------------------------------------- org $078091 ; <- 38091 - Bank07.asm:138 (LDA $037B : BNE .linkNotDamaged) -LDA $0373 : STA $00 : STZ $0373 ; store and zero damage -LDA $037B : BNE LinkDamaged_linkNotDamaged ; skip if immune +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 @@ -2280,50 +1979,38 @@ JSL.l OnLinkDamagedFromPit org $01FFE7 ; <- FFE7 - Bank01.asm:16375 (LDA $7EF36D) JSL.l OnLinkDamagedFromPitOutdoors ;-------------------------------------------------------------------------------- -org $078F27 ; <- 38F27 -JSL.l FlipperReset -;-------------------------------------------------------------------------------- org $02B468 - dw FakeFlipperProtection +dw FakeFlipperProtection org $02FFC7 FakeFlipperProtection: JSR.w $029485 JSL protectff RTS - ;-------------------------------------------------------------------------------- -;org $09F40B ; <- 4F40B - module_death.asm:222 (LDX.b #$00) -;JSL.l IgnoreFairyCheck -;-------------------------------------------------------------------------------- -org $078F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM) -JSL.l OnEnterWater : NOP -;-------------------------------------------------------------------------------- - +;org $078F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM) +;JSL.l OnEnterWater : NOP ;================================================================================ ; Floodgate Softlock Fix ;-------------------------------------------------------------------------------- org $0AB8E5 ; <- 538E5 JSL.l FloodGateAndMasterSwordFollowerReset JSL.l IncrementFlute -STZ $1000 : STZ $1001 +STZ.w GFXStripes : STZ.w GFXStripes+1 NOP #26 ;-------------------------------------------------------------------------------- org $02AA87 ; <- 12A87 -JSL.l OnOWTransition -NOP #36 +JSL.l OnOWTransition : NOP #36 ;================================================================================ ;Inverted mode tile map update (executed right after the original tile load) ;-------------------------------------------------------------------------------- org $02ED51 ; <- 16D51 -JSL.l Overworld_LoadNewTiles -NOP #$02 +JSL.l Overworld_LoadNewTiles : NOP #$02 ;-------------------------------------------------------------------------------- ;Same as above org $02EC2E ;<- 016C2E -JSL.l Overworld_LoadNewTiles -NOP #$02 +JSL.l Overworld_LoadNewTiles : NOP #$02 ;================================================================================ org $07A3E2 ;<- 3A3E2 Bank07.asm:5764 (LDA.b #$80 : STA $03F0) JSL.l FreeDuckCheck : BEQ + @@ -2344,7 +2031,6 @@ MirrorBonk_BranchGamma: org $1DFDA8 ; <- EFDA9 - sprite_digging_game_guy.asm:309 (STA $7FFE00) JSL.l SpawnShovelGamePrizeSFX ;-------------------------------------------------------------------------------- -;org $01EEB6 ; <- EEB6 - Bank01.asm:14138 (ORA.b #$40 : STA $0403) org $01EECD ; <- EECD - Bank01.asm:14160 (LDA.b #$0E : STA $012F) JSL.l SpawnChestGamePrizeSFX : NOP ;================================================================================ @@ -2353,8 +2039,7 @@ JSL.l SpawnChestGamePrizeSFX : NOP ; Heart Beep Timer ;-------------------------------------------------------------------------------- org $0DDC9B ; <- 6DC9B -JSL.l BeepLogic -NOP #6 +JSL.l BeepLogic : NOP #6 ;================================================================================ ;================================================================================ @@ -2395,16 +2080,13 @@ JSL.l SetOverlayIfLamp ; 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 +JSL.l StoreLastOverworldDoorID : NOP #3 ;-------------------------------------------------------------------------------- org $02D754 ; <- Bank02.asm:10847 (LDA $D724, X : STA $0696 : STZ $0698) -JSL.l CacheDoorFrameData -NOP #5 +JSL.l CacheDoorFrameData : NOP #5 ;-------------------------------------------------------------------------------- org $0298AD ; <- Bank02.asm:4495 (LDA $010E : CMP.b #$43) -JSL.l WalkDownIntoTavern -NOP #1 +JSL.l WalkDownIntoTavern : NOP #1 ;================================================================================ ;================================================================================ @@ -2419,8 +2101,6 @@ Overworld_Hole_matchedHole: org $1BB8BD ; <- DB8BD - Bank1B.asm:85 (PLB) Overworld_Hole_End: -;-------------------------------------------------------------------------------- - ;================================================================================ ; Replace pyramid hole check for killing aga2 ; @@ -2445,57 +2125,53 @@ org $02A9B0 ; (BCS $A9B7) NOP #2 org $02C1C8 ; (BCS $C1CC) NOP #2 -; org $02ADA0 ; (LDA.b #$F1 : STA $012C) JSL Overworld_MosaicDarkWorldChecks : NOP ;-------------------------------------------------------------------------------- org $05CC58 ; <- Bank05.asm:1307 (LDA $040A : CMP.b #$18) -JSL PsychoSolder_MusicCheck -NOP #1 +JSL PsychoSolder_MusicCheck : NOP #1 ;-------------------------------------------------------------------------------- org $02B13A ; <- Bank02.asm:7647 dl Overworld_FinishMirrorWarp ;-------------------------------------------------------------------------------- org $0AB949 ; <- Bank0A.asm:270 (Different from US ROM) -JSL BirdTravel_LoadTargetAreaMusic -NOP #16 +JSL BirdTravel_LoadTargetAreaMusic : NOP #16 ;================================================================================ ;================================================================================ ; Hooks for roomloading.asm ;-------------------------------------------------------------------------------- org $02895D ; <- Bank02.asm:1812 (JSL Dungeon_LoadRoom) - JSL LoadRoomHook +JSL LoadRoomHook ;-------------------------------------------------------------------------------- org $028BE7 ; <- Bank02.asm:2299 (JSL Dungeon_LoadRoom) - JSL LoadRoomHook_noStats +JSL LoadRoomHook_noStats ;-------------------------------------------------------------------------------- org $029309 ; <- Bank02.asm:3533 (JSL Dungeon_LoadRoom) - JSL LoadRoomHook_noStats +JSL LoadRoomHook_noStats ;-------------------------------------------------------------------------------- org $02C2F3 ; <- Bank02.asm:10391 (JSL Dungeon_LoadRoom) - JSL LoadRoomHook_noStats +JSL LoadRoomHook_noStats ;================================================================================ ;================================================================================ ; Hooks into the "Reloading all graphics" routine ;-------------------------------------------------------------------------------- org $00E64D ; <- Bank00.asm:5656 (STZ $00 : STX $01 : STA $02) - JML BgGraphicsLoading - BgGraphicsLoadingCancel: - RTS : NOP - BgGraphicsLoadingResume: +JML BgGraphicsLoading +BgGraphicsLoadingCancel: +RTS : NOP +BgGraphicsLoadingResume: ;================================================================================ ;================================================================================ ; Hook when updating the floor tileset in dungeons (such as between floors) ;-------------------------------------------------------------------------------- org $00DF62 ; <- Bank00.asm:4672 (LDX.w #$0000 : LDY.w #$0040) - JML ReloadingFloors - NOP : NOP - ReloadingFloorsResume: +JML ReloadingFloors : NOP #2 +ReloadingFloorsResume: org $00DF6E ; <- A few instructions later, right after JSR Do3To.high16Bit - ReloadingFloorsCancel: +ReloadingFloorsCancel: ;================================================================================ ;================================================================================ @@ -2542,9 +2218,8 @@ Overworld_Entrance_BRANCH_RHO: ; branch here to continue into door ;================================================================================ ; Paradox Cave Shopkeeper Fixes ;-------------------------------------------------------------------------------- -org $008C19 ; Bank00.asm@1633 (LDA.b #$01 : STA $420B) -JSL ParadoxCaveGfxFix -NOP +org $008C19 ; Bank00.asm@1633 (LDA.b #$01 : STA MDMAEN) +JSL ParadoxCaveGfxFix : NOP ;================================================================================ ;================================================================================ @@ -2552,14 +2227,13 @@ NOP ;-------------------------------------------------------------------------------- ; Change race game to use $021B instead of $0ABF for detecting cheating org $0DCB9D ; STZ.w $0ABF -STZ $021B +STZ.w RaceGameFlag org $0DCBFE ; LDA.w $0ABF -LDA $021B +LDA.w RaceGameFlag org $02BFE0 ; LDA.b #$01 : STA.w $0ABF -JSL SetOverworldTransitionFlags -NOP +JSL SetOverworldTransitionFlags : NOP ; For mirroring, the new flag is set in IncrementOWMirror in stats.asm ;================================================================================ @@ -2571,18 +2245,16 @@ org $0DA9C8 ; <- 06A9C8 - player_oam.asm: 1663 (AND.w #$00FF : CMP.w #$00F8 : BC ; 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 ; to the link sprite). -LDA $02 ; always zero! (this replaces the BCC) +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 -JSL LoadActualGearPalettesWithGloves -RTL +JSL LoadActualGearPalettesWithGloves : RTL ;-------------------------------------------------------------------------------- ; Bunny Palette/Overworld Map Bugfix ;-------------------------------------------------------------------------------- org $02FDF0 ; <- 017df0 - bank0E (LDA [$00] : STA $7EC300, X : STA $7EC500, X) -JSL LoadGearPalette_safe_for_bunny -RTS +JSL LoadGearPalette_safe_for_bunny : RTS ;================================================================================ ;================================================================================ @@ -2609,7 +2281,7 @@ 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 #$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 @@ -2632,7 +2304,7 @@ db #$3F ;-------------------------------------------------------------------------------- ; Updated evil barrier animation table ;-------------------------------------------------------------------------------- -org $1DF0E1;Evil Barrier new draw code +org $1DF0E1 ;Evil Barrier new draw code dw 0, 0 : db $CC, $00, $00, $02 dw -29, 3 : db $EA, $00, $00, $00 @@ -2702,8 +2374,8 @@ BunnyRead: org $07FFF4 CheckIfReading: JSR.w $07D36C ; check action - LDA #$80 : TRB $3B - CPX #$04 + LDA.b #$80 : TRB.b $3B + CPX.b #$04 RTS ;================================================================================ @@ -2728,7 +2400,6 @@ JSL NewFireBarDamage org $0DDB60 db $00, $00 - ;================================================================================ ; Fast credits @@ -2736,8 +2407,7 @@ org $02A096 JSL DumbFlagForMSU org $0EC3AF -JSL FastCreditsScrollOW -JMP.w $0EC3C7 +JSL FastCreditsScrollOW : JMP.w $0EC3C7 org $0EC41F JSL FastCreditsCutsceneUnderworldY @@ -2745,7 +2415,6 @@ JSL FastCreditsCutsceneUnderworldY org $0EC42C JSL FastCreditsCutsceneUnderworldX - org $0EC488 JSL FastCreditsCutsceneTimer @@ -2764,22 +2433,25 @@ org $0AEEDF : db $02 ; big icon org $0AEAFF : db $48 ; X position org $0AEED4 ; disable flashing - BRA ++ : NOP #6 : ++ +BRA ++ : NOP #6 : ++ org $0AEEF2 - SBC.b #$03 : STA.w $0801,X - LDA.b #$03 : STA.w $0802,X - LDA.b #$31 : STA.w $0803,X +SBC.b #$03 : STA.w $0801,X +LDA.b #$03 : STA.w $0802,X +LDA.b #$31 : STA.w $0803,X org $008BE5 ; hijack stripes for boss GFX transfer - JSL DoDungeonMapBossIcon +JSL DoDungeonMapBossIcon ;================================================================================ - -org $01C4B8 : JSL FixJingleGlitch -org $01C536 : JSL FixJingleGlitch -org $01C592 : JSL FixJingleGlitch -org $01C65F : JSL FixJingleGlitch +org $01C4B8 +JSL FixJingleGlitch +org $01C536 +JSL FixJingleGlitch +org $01C592 +JSL FixJingleGlitch +org $01C65F +JSL FixJingleGlitch ;================================================================================ ; Text Renderer diff --git a/hudtext.asm b/hudtext.asm index ebebe9d..880cb4b 100644 --- a/hudtext.asm +++ b/hudtext.asm @@ -9,17 +9,17 @@ PHP ; $7EC026 = When we find an empty item get set on 1 ; $7EC027 = character data - LDX #$80 : STX $2100 + LDX.b #$80 : STX.w INIDISP REP #$20 - LDA #$6000+$0340 : STA $2116 + LDA.w #$6000+$0340 : STA.w VMADDL - LDA.w #$C027 : STA $4342 - LDX.b #$7E : STX $4344 - LDA #$0040 : STA $4345 - LDA #$1801 : STA $4340 - LDX #$10 : STX $420B + LDA.w #$C027 : STA.w A1T4L + LDX.b #$7E : STX.w A1B4 + LDA.w #$0040 : STA.w DAS4L + LDA.w #$1801 : STA.w DMAP4 + LDX.b #$10 : STX.w MDMAEN - LDX #$0F : STX $2100 + LDX.b #$0F : STX.w INIDISP PLP RTL } @@ -28,17 +28,17 @@ RTL ClearBG: { PHP - LDX #$80 : STX $2100 + LDX.b #$80 : STX.w INIDISP REP #$20 - LDA #$6000+$0340 : STA $2116 - LDA.w #clearTable : STA $4342 - LDX.b #clearTable>>16 : STX $4344 + LDA.w #$6000+$0340 : STA.w VMADDL + LDA.w #clearTable : STA.w A1T4L + LDX.b #clearTable>>16 : STX.w A1B4 - LDA #$0040 : STA $4345 - LDA #$1801 : STA $4340 - LDX #$10 : STX $420B + LDA.w #$0040 : STA.w DAS4L + LDA.w #$1801 : STA.w DMAP4 + LDX.b #$10 : STX.w MDMAEN - LDX #$0F : STX $2100 + LDX.b #$0F : STX.w INIDISP PLP RTL -} \ No newline at end of file +} diff --git a/icepalacegraphics.asm b/icepalacegraphics.asm index 22d5903..284b36d 100644 --- a/icepalacegraphics.asm +++ b/icepalacegraphics.asm @@ -3,8 +3,8 @@ ShouldOverrideFileLoad: CPY #$0A ; 0A = Ice/Mire floor file BNE .no - LDA $040C ; Dungeon number - CMP #$12 ; Ice Palace + LDA.w DungeonID ; Dungeon number + CMP.b #$12 ; Ice Palace BEQ .yes .no CLC : RTS @@ -13,9 +13,9 @@ ShouldOverrideFileLoad: BgGraphicsLoading: ; Instructions overwritten - STZ $00 - STX $01 - STA $02 + STZ.b Scrap00 + STX.b Scrap01 + STA.b Scrap02 JSR ShouldOverrideFileLoad BCS .useSpecialIcePalaceFile @@ -25,24 +25,22 @@ BgGraphicsLoading: ; We're loading the floor tiles in Ice Palace. Instead of the normal file, ; load another one that replaces the bridge tiles with the Bombos medallion - ;LDA $FFFFFF - LDA.b #IcePalaceFloorGfx>>16 - STA $02 + STA.b Scrap02 REP #$20 LDA.w #IcePalaceFloorGfx - STA $00 + STA.b Scrap00 LDX.b #64*2 ; Tiles to load * 2 - ; Unrolled loop to upload half a tile - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 - LDA [$00] : STA $2118 : INC $00 : INC $00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 + LDA.b [$00] : STA.w VMDATAL : INC.b Scrap00 : INC.b Scrap00 DEX BNE - @@ -51,7 +49,7 @@ BgGraphicsLoading: ReloadingFloors: SEP #$30 ; 8 AXY - LDA $7EC2F8 ; Floor file that has been decompressed + LDA.l LastBGSet ; Floor file that has been decompressed TAY JSR ShouldOverrideFileLoad REP #$30 ; 16 AXY @@ -76,6 +74,6 @@ ReloadingFloors: ; Pretend that we ran the original routine LDX.w #$0800 LDA.w #$6600 - STA $03 + STA.b Scrap03 JML ReloadingFloorsCancel diff --git a/init.asm b/init.asm index 36bb4b5..0f1d33a 100644 --- a/init.asm +++ b/init.asm @@ -5,57 +5,57 @@ ; called and it only gets called once ever during RESET. ;-------------------------------------------------------------------------------- Init_Primary: - LDA #$00 + LDA.b #$00 - LDX #$00 ; initalize our ram + LDX.b #$00 ; initalize our ram - - STA $7EC025, X - STA $7F5000, X + STA.l $7EC025, X + STA.l $7F5000, X INX - CPX #$10 : !BLT - + CPX.b #$10 : !BLT - - LDX #$10 ; initalize more ram + LDX.b #$10 ; initalize more ram - - STA $7F5000, X + STA.l $7F5000, X INX - CPX #$FF : !BLT - + CPX.b #$FF : !BLT - - LDX #$00 + LDX.b #$00 - - LDA RomNameSRAM, X : CMP $00FFC0, X : BNE .clear + LDA.l RomNameSRAM, X : CMP.w $FFC0, X : BNE .clear INX - CPX #$15 : !BLT - + CPX.b #$15 : !BLT - BRA .done .clear REP #$30 ; set 16-bit accumulator & index registers LDA.w #$0000 - - STA $700000, X + STA.l $700000, X INX - CPX #$2000 : !BLT - + CPX.w #$2000 : !BLT - SEP #$30 ; set 8-bit accumulator & index registers - LDX #$00 + LDX.b #$00 - - LDA $00FFC0, X : STA RomNameSRAM, X + LDA.w $FFC0, X : STA.l RomNameSRAM, X INX CPX #$15 : !BLT - - LDX #$00 + LDX.b #$00 - - LDA RomVersion, X : STA RomVersionSRAM, X + LDA.w RomVersion, X : STA.l RomVersionSRAM, X INX - CPX #$04 : !BLT - + CPX.b #$04 : !BLT - .done REP #$20 - LDA.l OneMindTimer : STA.l !ONEMIND_TIMER + LDA.l OneMindTimerInit : STA.l OneMindTimerRAM SEP #$20 - LDA.b #$01 : STA $420D ; enable fastrom access on upper banks - STA.l !ONEMIND_ID + LDA.b #$01 : STA.w MEMSEL ; enable fastrom access on upper banks + STA.l OneMindId - LDA.b #$10 : STA $BC ; set default player sprite bank + LDA.b #$10 : STA.b PlayerSpriteBank ; set default player sprite bank - LDA.b #$81 : STA $4200 ; thing we wrote over, turn on NMI & gamepad + LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad RTL ;-------------------------------------------------------------------------------- ; Init_PostRAMClear diff --git a/initsramtable.asm b/initsramtable.asm index db09b08..68d27ec 100644 --- a/initsramtable.asm +++ b/initsramtable.asm @@ -20,7 +20,7 @@ InitRoomDataWRAM: org $30B060 ; PC 0x183060 InitATAltarRoom: dw $0000 ; aga curtains org $30B092 ; PC 0x183092 -InitSWBackEntryRoom: dw $0000 ; skull woods curtains (?) +InitSWBackEntryRoom: dw $0000 ; skull woods curtains org $30B20C dw $F000, $F000 ; Pre-open kak bomb hut & brewery diff --git a/inventory.asm b/inventory.asm index 2c0a3ad..f314bed 100644 --- a/inventory.asm +++ b/inventory.asm @@ -28,16 +28,14 @@ ; out: Carry - 0 = No Button, 1 = Yes Button ;-------------------------------------------------------------------------------- ProcessMenuButtons: - ;LDA #$FD : STA InventoryTracking ; DEBUG MODE - ;LDA $F6 : BIT #$20 : BNE .l_pressed ; check for P1 L-button - LDA $F4 : BIT #$40 : BNE .y_pressed ; check for P1 Y-button + LDA.b Joy1A_New : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button BIT #$20 : BNE .sel_pressed ; check for P1 Select button - LDA $F0 : BIT #$20 : BNE .sel_held + LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held .sel_unheld - LDA HudFlag : AND #$20 : BEQ + - LDA HudFlag : AND #$DF : STA HudFlag ; select is released, unset hud flag - LDA $1B : BEQ + ; skip if outdoors - LDA.b #$20 : STA $012F ; menu select sound + 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 + JSL.l ResetEquipment + @@ -45,72 +43,71 @@ ProcessMenuButtons: CLC ; no buttons RTL .sel_pressed - LDA HudFlag : ORA #$20 : STA HudFlag ; set hud flag - LDA.b #$20 : STA $012F ; menu select sound + LDA.l HudFlag : ORA.b #$20 : STA.l HudFlag ; set hud flag + LDA.b #$20 : STA.w SFX3 ; menu select sound JSL.l ResetEquipment RTL .y_pressed ; Note: used as entry point by quickswap code. Must preserve X. - LDA.b #$10 : STA $0207 - LDA $0202 ; check selected item - CMP #$02 : BNE + ; boomerang - LDA InventoryTracking : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both boomerangs - LDA BoomerangEquipment : EOR #$03 : STA BoomerangEquipment ; swap blue & red boomerang - LDA.b #$20 : STA $012F ; menu select sound + LDA.b #$10 : STA.w MenuBlink + LDA.w ItemCursor ; check selected item + CMP.b #$02 : BNE + ; boomerang + LDA.l InventoryTracking : AND.b #$C0 : CMP.b #$C0 : BNE .errorJump ; make sure we have both boomerangs + LDA.l BoomerangEquipment : EOR.b #$03 : STA.l BoomerangEquipment ; swap blue & red boomerang + LDA.b #$20 : STA.w SFX3 ; menu select sound JMP .captured - + CMP #$01 : BNE + ; bow - LDA BowTracking : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both bows + + CMP.b #$01 : BNE + ; bow + LDA.l BowTracking : AND.b #$C0 : CMP.b #$C0 : BNE .errorJump ; make sure we have both bows PHX : LDX.b #$00 ; scan ancilla table for arrows -- : CPX.b #$0A : !BGE ++ - LDA $0C4A, X : CMP.b #$09 : BNE +++ + LDA.w AncillaID, X : CMP.b #$09 : BNE +++ PLX : BRA .errorJump2 ; found an arrow, don't allow the swap +++ INX : BRA -- : ++ PLX LDA.l SilverArrowsUseRestriction : BEQ ++ - LDA $A0 : ORA $A1 : BEQ ++ ; not in ganon's room in restricted mode - LDA BowEquipment : CMP.b #$03 : !BLT .errorJump : !SUB #$02 : STA BowEquipment + LDA.b RoomIndex : ORA.b RoomIndex+1 : BEQ ++ ; not in ganon's room in restricted mode + LDA.l BowEquipment : CMP.b #$03 : !BLT .errorJump : !SUB #$02 : STA.l BowEquipment BRA .errorJump2 ++ - LDA BowEquipment : !SUB #$01 : EOR #$02 : !ADD #$01 : STA BowEquipment ; swap bows - LDA.b #$20 : STA $012F ; menu select sound + LDA.l BowEquipment : !SUB #$01 : EOR.b #$02 : !ADD #$01 : STA.l BowEquipment ; swap bows + LDA.b #$20 : STA.w SFX3 ; menu select sound JMP .captured + BRA + .errorJump BRA .errorJump2 - + CMP #$05 : BNE + ; powder - LDA InventoryTracking : AND #$30 : CMP #$30 : BNE .errorJump ; make sure we have mushroom & magic powder - LDA PowderEquipment : EOR #$03 : STA PowderEquipment ; swap mushroom & magic powder - LDA.b #$20 : STA $012F ; menu select sound + + CMP.b #$05 : BNE + ; powder + LDA.l InventoryTracking : AND.b #$30 : CMP.b #$30 : BNE .errorJump ; make sure we have mushroom & magic powder + LDA.l PowderEquipment : EOR.b #$03 : STA.l PowderEquipment ; swap mushroom & magic powder + LDA.b #$20 : STA.w SFX3 ; menu select sound JMP .captured + BRA + .errorJump2 BRA .error - + CMP #$0D : BNE + ; flute - LDA $037A : CMP #$01 : BEQ .midShovel ; inside a shovel animation, force the shovel & make error sound - LDA InventoryTracking : BIT #$04 : BEQ .error ; make sure we have shovel - AND #$03 : BEQ .error ; make sure we have one of the flutes - LDA FluteEquipment : CMP #01 : BNE .toShovel ; not shovel + + CMP.b #$0D : BNE + ; flute + LDA.w UseY2 : CMP.b #$01 : BEQ .midShovel ; inside a shovel animation, force the shovel & make error sound + LDA.l InventoryTracking : BIT.b #$04 : BEQ .error ; make sure we have shovel + AND.b #$03 : BEQ .error ; make sure we have one of the flutes + LDA.l FluteEquipment : CMP.b #01 : BNE .toShovel ; not shovel - LDA InventoryTracking : AND #$01 : BEQ .toFakeFlute ; check for real flute - LDA #$03 ; set real flute + LDA.l InventoryTracking : AND.b #$01 : BEQ .toFakeFlute ; check for real flute + LDA.b #$03 ; set real flute BRA .fluteSuccess .toFakeFlute - LDA #$02 ; set fake flute + LDA.b #$02 ; set fake flute BRA .fluteSuccess .toShovel - LDA #$01 ; set shovel + LDA.b #$01 ; set shovel .fluteSuccess - STA FluteEquipment ; store set item - LDA.b #$20 : STA $012F ; menu select sound + STA.l FluteEquipment ; store set item + LDA.b #$20 : STA.w SFX3 ; menu select sound BRA .captured + - CMP #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : + + CMP.b #$10 : BNE .error : JSL.l ProcessBottleMenu : BRA .captured : + CLC RTL .midShovel - ; LDA #$01 : STA FluteEquipment ; set shovel .error - LDA.b #$3C : STA $012E ; error sound + LDA.b #$3C : STA.w SFX2 ; error sound .captured SEC RTL @@ -120,23 +117,20 @@ RTL ;ProcessBottleMenu: ;-------------------------------------------------------------------------------- ProcessBottleMenu: -; LDA $F6 : AND #$30 : CMP.b #$30 : BEQ .double_shoulder_pressed -; LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down -; .double_shoulder_pressed - LDA BottleIndex ; check bottle state + LDA.l BottleIndex ; check bottle state BEQ .no_bottles ; skip if we have no bottles PHX - INC : CMP #$05 : !BLT + : LDA #$01 : + ;increment and wrap 1-4 - TAX : LDA BottleContents-1, X ; check bottle - BNE + : LDX #$01 : + ; wrap if we reached the last bottle - TXA : STA BottleIndex ; set bottle index - LDA.b #$20 : STA $012F ; menu select sound + INC : CMP.b #$05 : !BLT + : LDA.b #$01 : + ;increment and wrap 1-4 + TAX : LDA.l BottleContents-1, X ; check bottle + BNE + : LDX.b #$01 : + ; wrap if we reached the last bottle + TXA : STA.l BottleIndex ; set bottle index + LDA.b #$20 : STA.w SFX3 ; menu select sound PLX .no_bottles - LDA #$00 ; pretend like the controller state was 0 from the overridden load + LDA.b #$00 ; pretend like the controller state was 0 from the overridden load RTL ; .y_not_pressed -; LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state +; LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over - load controller state ;RTL ;-------------------------------------------------------------------------------- @@ -144,104 +138,94 @@ RTL ;OpenBottleMenu: ;-------------------------------------------------------------------------------- OpenBottleMenu: - LDA $F6 : AND #$40 : BEQ .x_not_pressed ; skip if X is not down - LDA.b #$10 : STA $0207 ; set 16 frame cool off - LDA.b #$20 : STA $012F ; make menu sound - LDA.b #$07 : STA $0200 ; thing we wrote over - opens bottle menu + LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down + LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off + LDA.b #$20 : STA.w SFX3 ; make menu sound + LDA.b #$07 : STA.w SubModuleInterface ; thing we wrote over - opens bottle menu .x_not_pressed RTL -;-------------------------------------------------------------------------------- - ;-------------------------------------------------------------------------------- ;CloseBottleMenu: ;-------------------------------------------------------------------------------- CloseBottleMenu: - LDA $F6 : AND #$40 : BEQ .x_not_pressed ; skip if X is not down + LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down + LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off + LDA.b #$20 : STA.w SFX3 ; make menu sound - LDA.b #$10 : STA $0207 ; set 16 frame cool off - LDA.b #$20 : STA $012F ; make menu sound - - INC $0200 ; return to normal menu - STZ $0205 - - LDA #$00 + INC.w SubModuleInterface ; return to normal menu + STZ.w BottleMenuCounter + LDA.b #$00 RTL - .x_not_pressed - LDA $F4 : AND.b #$0C ; thing we wrote over (probably) + .x_not_pressed + LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over (probably) RTL -;-------------------------------------------------------------------------------- - ;-------------------------------------------------------------------------------- ; AddInventory: ;-------------------------------------------------------------------------------- macro TopHalf(address) - LDA
: !ADD #$10 : STA
+ LDA.l
: !ADD #$10 : STA.l
endmacro macro BottomHalf(address) PHA : PHX - LDA
: INC : AND #$0F : TAX - LDA
: AND #$F0 : STA
- TXA : ORA
: STA
+ LDA.l
: INC : AND.b #$0F : TAX + LDA.l
: AND.b #$F0 : STA.l
+ TXA : ORA.l
: STA.l
PLX : PLA endmacro ;-------------------------------------------------------------------------------- -;FullInventoryExternal: -; LDA StatsLocked : BEQ + : RTL : + -; PHA : PHX : PHP : JMP AddInventory_fullItemCounts -;-------------------------------------------------------------------------------- FullInventoryExternal: - LDA StatsLocked : BEQ + : RTL : + + LDA.l StatsLocked : BEQ + : RTL : + PHA : PHX : PHP : JMP AddInventory_incrementCounts ;-------------------------------------------------------------------------------- AddInventory: PHA : PHX : PHP CPY.b #$0C : BNE + ; Blue Boomerang - LDA InventoryTracking : ORA #$80 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$80 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$2A : BNE + ; Red Boomerang - LDA InventoryTracking : ORA #$40 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$40 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$29 : BNE + ; Mushroom - LDA InventoryTracking : ORA #$28 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$28 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$0D : BNE + ; Magic Powder - LDA InventoryTracking : ORA #$10 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$10 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$13 : BNE + ; Shovel - LDA InventoryTracking : ORA #$04 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$04 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$14 : BNE + ; Flute (Inactive) - LDA InventoryTracking : ORA #$02 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$02 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$4A : BNE + ; Flute (Active) - LDA InventoryTracking : ORA #$01 : STA InventoryTracking + LDA.l InventoryTracking : ORA.b #$01 : STA.l InventoryTracking JMP .incrementCounts + CPY.b #$0B : BNE + ; Bow - LDA ArrowMode : BNE +++ - LDA BowTracking : ORA #$80 : STA BowTracking + LDA.l ArrowMode : BNE +++ + LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking +++ JMP .incrementCounts + CPY.b #$3A : BNE + ; Bow & Arrows - LDA BowTracking : ORA #$80 : STA BowTracking + LDA.l BowTracking : ORA.b #$80 : STA.l BowTracking JMP .incrementCounts + CPY.b #$3B : BNE + ; Bow & Silver Arrows - LDA BowTracking : ORA #$40 : STA BowTracking - LDA ArrowMode : BNE +++ - LDA BowTracking : ORA #$80 : STA BowTracking ; activate wood arrows when not in rupee bow + 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 ArrowMode : BEQ +++ - LDA BowTracking : ORA #$80 : STA BowTracking ; activate wood arrows in quick-swap + 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 BowTracking : ORA #$40 : STA BowTracking + LDA.l BowTracking : ORA.b #$40 : STA.l BowTracking + .incrementCounts - LDA StatsLocked : BEQ + : JMP .done : + + LDA.l StatsLocked : BEQ + : JMP .done : + ; don't count any of this stuff CPY.b #$20 : BNE + : JMP .itemCounts : + ; Crystal @@ -263,10 +247,10 @@ AddInventory: + CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow - LDA $1B : BEQ ++ ; skip shop check if outdoors - LDA $02E9 : CMP.b #$01 : BEQ ++ ; skip shop check for chests + 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 $048E + 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 @@ -284,10 +268,10 @@ AddInventory: ++ .dungeonCounts - LDA $1B : BNE + : JMP .fullItemCounts : + + LDA.b IndoorsFlag : BNE + : JMP .fullItemCounts : + SEP #$20 ; Set 8-bit Accumulator - LDA $040C ; get dungeon id + LDA.w DungeonID ; get dungeon id CMP.b #$FF : BEQ .fullItemCounts CMP.l BallNChainDungeon : BNE + @@ -295,63 +279,63 @@ AddInventory: JMP .done + CMP.b #$04 : BCS + - LDA SewersLocations : INC : STA SewersLocations - LDA HCLocations : INC : STA HCLocations + LDA.l SewersLocations : INC : STA.l SewersLocations + LDA.l HCLocations : INC : STA.l HCLocations BRA .fullItemCounts - + LSR : TAX : LDA DungeonLocationsChecked, X : INC : STA DungeonLocationsChecked, X + + LSR : TAX : LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X ++ CPX.b #$0D : BNE + - LDA BigKeyField : AND #$04 : BNE ++ + LDA.l BigKeyField : AND.b #$04 : BNE ++ JSR .incrementGTowerPreBigKey ++ + ; == END INDOOR-ONLY SECTION .fullItemCounts - LDA BootsEquipment : BNE + ; Check for Boots - LDA PreBootsLocations : INC : STA PreBootsLocations ; Increment Pre Boots Counter + LDA.l BootsEquipment : BNE + ; Check for Boots + LDA.l PreBootsLocations : INC : STA.l PreBootsLocations ; Increment Pre Boots Counter + - LDA MirrorEquipment : BNE + ; Check for Mirror - LDA PreMirrorLocations : INC : STA PreMirrorLocations ; Increment Pre Mirror Counter + LDA.l MirrorEquipment : BNE + ; Check for Mirror + LDA.l PreMirrorLocations : INC : STA.l PreMirrorLocations ; Increment Pre Mirror Counter + - LDA FluteEquipment : BNE + ; Check for Flute - LDA PreFluteLocations : INC : STA PreFluteLocations ; 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 TotalItemCounter : INC : STA TotalItemCounter ; Increment Item Total + LDA.l TotalItemCounter : INC : STA.l TotalItemCounter ; Increment Item Total SEP #$20 .itemCounts CPY.b #$00 : BNE + ; Fighter's Sword & Fighter's Shield - LDX #$01 + LDX.b #$01 JSR .incrementSword JSR .incrementShield JMP .done + CPY.b #$01 : BNE + ; Master Sword - LDX #$02 + LDX.b #$02 JSR .incrementSword JMP .done + CPY.b #$02 : BNE + ; Tempered Sword - LDX #$03 + LDX.b #$03 JSR .incrementSword JMP .done + CPY.b #$03 : BNE + ; Golden Sword - LDX #$04 + LDX.b #$04 JSR .incrementSword JMP .done + CPY.b #$04 : BNE + ; Fighter's Shield - LDX #$01 + LDX.b #$01 JSR .incrementShield JMP .done + CPY.b #$05 : BNE + ; Red Shield - LDX #$02 + LDX.b #$02 JSR .incrementShield JMP .done + CPY.b #$06 : BNE + ; Mirror Shield - LDX #$03 + LDX.b #$03 JSR .incrementShield JMP .done + CPY.b #$07 : !BLT + ; Items $07 - $0D @@ -380,7 +364,7 @@ AddInventory: + CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat JSR .incrementY JMP .done - + CPY.b #$1B : !BLT + ; Items $1B - $1F + + CPY.b #$1B : !BLT + ; Items IndoorsFlag - $1F CPY.b #$20 : !BGE + JSR .incrementA JMP .done @@ -392,10 +376,10 @@ AddInventory: JSR .incrementY JMP .done + CPY.b #$22 : BNE + ; Blue Mail - LDX #$01 + LDX.b #$01 JSR .incrementMail + CPY.b #$23 : BNE + ; Red Mail - LDX #$02 + LDX.b #$02 JSR .incrementMail + CPY.b #$24 : BNE + ; Small Key JSR .incrementKey @@ -452,7 +436,7 @@ AddInventory: JSR .incrementY JMP .done + CPY.b #$49 : BNE + ; Fighter's Sword - LDX #$01 + LDX.b #$01 JSR .incrementSword JMP .done + CPY.b #$4A : BNE + ; Flute (Active) @@ -472,15 +456,15 @@ AddInventory: JSR .incrementCapacity JMP .done + CPY.b #$50 : BNE + ; Master Sword (Safe) - LDX #$02 + LDX.b #$02 JSR .incrementSword JMP .done + CPY.b #$51 : BNE + ; 5 Bomb Capacity Upgrade - LDX #$02 + LDX.b #$02 JSR .maybeIncrementBombs JMP .done + CPY.b #$52 : BNE + ; 10 Bomb Capacity Upgrade - LDX #$02 + LDX.b #$02 JSR .maybeIncrementBombs JMP .done + CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades @@ -491,15 +475,15 @@ AddInventory: JSR .incrementBow JMP .done + CPY.b #$5E : BNE + ; Progressive Sword - LDA SwordEquipment : INC : TAX + LDA.l SwordEquipment : INC : TAX JSR .incrementSword JMP .done + CPY.b #$5F : BNE + ; Progressive Shield - LDA ShieldEquipment : INC : TAX + LDA.l ShieldEquipment : INC : TAX JSR .incrementShield JMP .done + CPY.b #$60 : BNE + ; Progressive Armor - LDA ArmorEquipment : INC : TAX + LDA.l ArmorEquipment : INC : TAX JSR .incrementMail JMP .done + CPY.b #$61 : BNE + ; Progressive Lifting Glove @@ -535,96 +519,96 @@ RTL .stampSword REP #$20 ; set 16-bit accumulator - LDA SwordTime : BNE + - LDA SwordTime+2 : BNE + - LDA NMIFrames : STA SwordTime - LDA NMIFrames+2 : STA SwordTime+2 + 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 RTS .stampBoots REP #$20 ; set 16-bit accumulator - LDA BootsTime : BNE + - LDA BootsTime+2 : BNE + - LDA NMIFrames : STA BootsTime - LDA NMIFrames+2 : STA BootsTime+2 + 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 RTS .stampFlute REP #$20 ; set 16-bit accumulator - LDA FluteTime : BNE + - LDA FluteTime+2 : BNE + - LDA NMIFrames : STA FluteTime - LDA NMIFrames+2 : STA FluteTime+2 + 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 RTS .stampMirror REP #$20 ; set 16-bit accumulator - LDA MirrorTime : BNE + - LDA MirrorTime+2 : BNE + - LDA NMIFrames : STA MirrorTime - LDA NMIFrames+2 : STA MirrorTime+2 + LDA.l MirrorTime : BNE + + LDA.l MirrorTime+2 : BNE + + LDA.l NMIFrames : STA.l MirrorTime + LDA.l NMIFrames+2 : STA.l MirrorTime+2 + SEP #$20 ; set 8-bit accumulator RTS .incrementSword JSR .stampSword - LDA HighestSword - INC : STA $04 : CPX $04 : !BLT + ; don't increment unless we're getting a better sword - TXA : STA HighestSword + 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 + RTS .incrementShield - LDA HighestShield - INC : STA $04 : CPX $04 : !BLT + ; don't increment unless we're getting a better shield - TXA : STA HighestShield + 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 + RTS .incrementBow - LDA BowEquipment : BNE .dontCount ; Don't increment Y item count for extra bows + LDA.l BowEquipment : BNE .dontCount ; Don't increment Y item count for extra bows .incrementY - LDA YAItemCounter : !ADD #$08 : STA YAItemCounter + LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter .dontCount RTS .incrementA - LDA YAItemCounter : INC : AND #$07 : TAX - LDA YAItemCounter : AND #$F8 : STA YAItemCounter - TXA : ORA YAItemCounter : STA YAItemCounter + 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 PendantCounter : INC : STA PendantCounter + LDA.l PendantCounter : INC : STA.l PendantCounter RTS .incrementCapacity - LDA CapacityUpgrades : INC : STA CapacityUpgrades + LDA.l CapacityUpgrades : INC : STA.l CapacityUpgrades RTS .incrementHeartPiece - LDA HeartPieceCounter : INC : STA HeartPieceCounter + LDA.l HeartPieceCounter : INC : STA.l HeartPieceCounter RTS .incrementHeartContainer - LDA HeartContainerCounter : INC : STA HeartContainerCounter + LDA.l HeartContainerCounter : INC : STA.l HeartContainerCounter RTS .incrementCrystal - LDA CrystalCounter : INC : STA CrystalCounter + LDA.l CrystalCounter : INC : STA.l CrystalCounter RTS .incrementMail - LDA HighestMail - INC : STA $04 : CPX $04 : !BLT + ; don't increment unless we're getting a better mail - TXA : STA HighestMail + 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 @@ -633,7 +617,7 @@ RTS RTL .incrementKey - LDA SmallKeyCounter : INC : STA SmallKeyCounter + LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter RTS .incrementCompass @@ -645,12 +629,12 @@ RTS RTS .incrementGTowerPreBigKey - LDA PreGTBKLocations : INC : STA PreGTBKLocations + LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations RTS .maybeIncrementBombs - LDA InventoryTracking+1 : AND #$02 : BNE + - LDA InventoryTracking+1 : ORA #$02 : STA InventoryTracking+1 + LDA.l InventoryTracking+1 : AND.b #$02 : BNE + + LDA.l InventoryTracking+1 : ORA.b #$02 : STA.l InventoryTracking+1 JSR .incrementY + RTS @@ -664,27 +648,27 @@ RTS RTL .incrementBossSword - LDA SwordEquipment + LDA.l SwordEquipment BNE + : - - LDA SwordlessBossKills : INC : STA SwordlessBossKills + LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills RTS - + CMP #$FF : BEQ - - + CMP #$01 : BNE + + + CMP.b #$FF : BEQ - + + CMP.b #$01 : BNE + %TopHalf(SwordBossKills) : RTS - + CMP #$02 : BNE + + + CMP.b #$02 : BNE + %BottomHalf(SwordBossKills) : RTS - + CMP #$03 : BNE + + + CMP.b #$03 : BNE + %TopHalf(SwordBossKills+1) : RTS - + CMP #$04 : BNE + + + CMP.b #$04 : BNE + %BottomHalf(SwordBossKills+1) + RTS .setDungeonCompletion - LDX $040C : BMI + + LDX.w DungeonID : BMI + REP #$20 ; 16 bit LDA.l DungeonMask, X - ORA DungeonsCompleted : STA DungeonsCompleted + ORA.l DungeonsCompleted : STA.l DungeonsCompleted SEP #$20 ; 8 bit + RTS @@ -694,11 +678,11 @@ RTS ; Link_ReceiveItem_HUDRefresh: ;-------------------------------------------------------------------------------- Link_ReceiveItem_HUDRefresh: - LDA BombsEquipment : BNE + ; skip if we have bombs - LDA BombCapacity : BEQ + ; skip if we can't have bombs - LDA BombsFiller : BEQ + ; skip if we are filling no bombs - DEC : STA BombsFiller ; decrease bomb fill count - LDA.b #$01 : STA BombsEquipment ; increase actual bomb count + LDA.l BombsEquipment : BNE + ; skip if we have bombs + LDA.l BombCapacity : BEQ + ; skip if we can't have bombs + LDA.l BombsFiller : BEQ + ; skip if we are filling no bombs + DEC : STA.l BombsFiller ; decrease bomb fill count + LDA.b #$01 : STA.l BombsEquipment ; increase actual bomb count + JSL.l HUD_RefreshIconLong ; thing we wrote over @@ -710,11 +694,11 @@ RTL ; HandleBombAbsorbtion: ;-------------------------------------------------------------------------------- HandleBombAbsorbtion: - STA BombsFiller ; thing we wrote over - LDA $0303 : BNE + ; skip if we already have some item selected - LDA BombCapacity : BEQ + ; skip if we can't have bombs - LDA.b #$04 : STA $0202 ; set selected item to bombs - LDA.b #$01 : STA $0303 ; set selected item to bombs + STA.l BombsFiller ; thing we wrote over + LDA.w CurrentYItem : BNE + ; skip if we already have some item selected + LDA.l BombCapacity : BEQ + ; skip if we can't have bombs + 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 + RTL @@ -723,17 +707,16 @@ RTL ;-------------------------------------------------------------------------------- ; AddYMarker: ;-------------------------------------------------------------------------------- -;!JAR_STATUS = "$7F5030"; AddYMarker: - LDA $0202 : AND.w #$FF ; load item value + LDA.w ItemCursor : AND.w #$FF ; load item value CMP.w #$02 : BNE + ; boomerang - LDA InventoryTracking : AND.w #$C0 : CMP.w #$C0 : BEQ .drawYBubble : BRA .drawNormal + LDA.l InventoryTracking : AND.w #$C0 : CMP.w #$C0 : BEQ .drawYBubble : BRA .drawNormal + CMP.w #$01 : BNE + ; bow - LDA BowTracking : AND.w #$C0 : CMP.w #$C0 : BEQ .drawYBubble : BRA .drawNormal + LDA.l BowTracking : AND.w #$C0 : CMP.w #$C0 : BEQ .drawYBubble : BRA .drawNormal + CMP.w #$05 : BNE + ; powder - LDA InventoryTracking : AND.w #$30 : CMP.w #$30 : BEQ .drawYBubble : BRA .drawNormal + LDA.l InventoryTracking : AND.w #$30 : CMP.w #$30 : BEQ .drawYBubble : BRA .drawNormal + CMP.w #$0D : BNE + ; flute - LDA InventoryTracking : BIT.w #$04 : BEQ .drawNormal ; make sure we have shovel + LDA.l InventoryTracking : BIT.w #$04 : BEQ .drawNormal ; make sure we have shovel AND.w #$03 : BNE .drawYBubble ; make sure we have one of the flutes BRA .drawNormal + CMP.w #$10 : BEQ .drawJarMarker @@ -743,8 +726,7 @@ AddYMarker: BRA .drawTile .drawJarMarker - ;SEP #$20 : LDA !JAR_STATUS : INC : AND.b #$01 : STA !JAR_STATUS : REP #$20 : BEQ .drawXBubble - LDA $0207 : AND.w #$0020 : BNE .drawXBubble + LDA.w MenuBlink : AND.w #$0020 : BNE .drawXBubble .drawYBubble LDA.w #$3D4F @@ -755,7 +737,7 @@ AddYMarker: LDA.w #$2D3E .drawTile - STA $FFC4, Y + STA.w $FFC4, Y RTL ;-------------------------------------------------------------------------------- @@ -764,22 +746,22 @@ RTL ; this is horrible, make it better ;-------------------------------------------------------------------------------- MakeCircleBlue: - LDA $FFC0, Y : AND.w #$EFFF : STA $FFC0, Y - LDA $FFC2, Y : AND.w #$EFFF : STA $FFC2, Y + LDA.w $FFC0, Y : AND.w #$EFFF : STA.w $FFC0, Y + LDA.w $FFC2, Y : AND.w #$EFFF : STA.w $FFC2, Y + + LDA.w $FFFE, Y : AND.w #$EFFF : STA.w $FFFE, Y + LDA.w $0004, Y : AND.w #$EFFF : STA.w $0004, Y + + LDA.w $003E, Y : AND.w #$EFFF : STA.w $003E, Y + LDA.w $0044, Y : AND.w #$EFFF : STA.w $0044, Y + + LDA.w $0080, Y : AND.w #$EFFF : STA.w $0080, Y + LDA.w $0082, Y : AND.w #$EFFF : STA.w $0082, Y - LDA $FFFE, Y : AND.w #$EFFF : STA $FFFE, Y - LDA $0004, Y : AND.w #$EFFF : STA $0004, Y - - LDA $003E, Y : AND.w #$EFFF : STA $003E, Y - LDA $0044, Y : AND.w #$EFFF : STA $0044, Y - - LDA $0080, Y : AND.w #$EFFF : STA $0080, Y - LDA $0082, Y : AND.w #$EFFF : STA $0082, Y - - LDA $FFBE, Y : AND.w #$EFFF : STA $FFBE, Y - LDA $FFC4, Y : AND.w #$EFFF : STA $FFC4, Y - LDA $0084, Y : AND.w #$EFFF : STA $0084, Y - LDA $007E, Y : AND.w #$EFFF : STA $007E, Y + LDA.w $FFBE, Y : AND.w #$EFFF : STA.w $FFBE, Y + LDA.w $FFC4, Y : AND.w #$EFFF : STA.w $FFC4, Y + LDA.w $0084, Y : AND.w #$EFFF : STA.w $0084, Y + LDA.w $007E, Y : AND.w #$EFFF : STA.w $007E, Y RTS ;-------------------------------------------------------------------------------- @@ -787,8 +769,8 @@ RTS ; UpgradeFlute: ;-------------------------------------------------------------------------------- UpgradeFlute: - LDA InventoryTracking : AND #$FC : ORA #$01 : STA InventoryTracking ; switch to the working flute - LDA.b #$03 : STA FluteEquipment ; upgrade primary inventory + LDA.l InventoryTracking : AND.b #$FC : ORA.b #$01 : STA.l InventoryTracking ; switch to the working flute + LDA.b #$03 : STA.l FluteEquipment ; upgrade primary inventory RTL ;-------------------------------------------------------------------------------- @@ -797,7 +779,7 @@ RTL ;-------------------------------------------------------------------------------- CheckKeys: LDA.l GenericKeys : BEQ + : RTL : + - LDA $040C : CMP.b #$FF + LDA.w DungeonID : CMP.b #$FF RTL ;-------------------------------------------------------------------------------- @@ -805,8 +787,8 @@ RTL ; DrawKeyIcon: ;-------------------------------------------------------------------------------- DrawKeyIcon: - LDA $04 : AND.w #$00FF : CMP.w #$0090 : BNE + : LDA.w #$007F : + : ORA.w #$2400 : STA $7EC764 - LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC766 + LDA.b Scrap04 : AND.w #$00FF : CMP.w #$0090 : BNE + : LDA.w #$007F : + : ORA.w #$2400 : STA.l HUDKeyDigits + LDA.b Scrap05 : AND.w #$00FF : ORA.w #$2400 : STA.l HUDTileMapBuffer+$66 RTL ;-------------------------------------------------------------------------------- @@ -815,10 +797,10 @@ RTL ;-------------------------------------------------------------------------------- LoadKeys: LDA.l GenericKeys : BEQ + - LDA CurrentGenericKeys + LDA.l CurrentGenericKeys RTL + - LDA DungeonKeys, X + LDA.l DungeonKeys, X RTL ;-------------------------------------------------------------------------------- @@ -828,10 +810,10 @@ RTL SaveKeys: PHA LDA.l GenericKeys : BEQ + - PLA : STA CurrentGenericKeys + PLA : STA.l CurrentGenericKeys RTL + - PLA : STA DungeonKeys, X + PLA : STA.l DungeonKeys, X RTL ;-------------------------------------------------------------------------------- @@ -845,53 +827,19 @@ ClearOWKeys: JSL.l FakeWorldFix JSR.w FixBunnyOnExitToLightWorld LDA.l GenericKeys : BEQ + - PLA : LDA CurrentGenericKeys : STA CurrentSmallKeys + PLA : LDA.l CurrentGenericKeys : STA.l CurrentSmallKeys RTL + - PLA : STA CurrentSmallKeys + PLA : STA.l CurrentSmallKeys RTL ;-------------------------------------------------------------------------------- -;-------------------------------------------------------------------------------- -; GetWitchLootOAMTableIndex -; in: A - Loot ID -; out: A - Loot OAM Table Index -; check if this is even still referenced anywhere -;-------------------------------------------------------------------------------- -;GetWitchLootOAMTableIndex: -; PHX -; PHB : PHK : PLB -; ;-------- -; TAX : LDA .gfxSlots, X ; look up item gfx -; PLB : PLX -;RTL -; -;;DATA - Loot Identifier to Sprite ID -;{ -; .gfxSlots -; db $FF, $FF, $FF, $FF, $05, $06, $FF, $0C -; db $0B, $0D, $0A, $07, $13, $0E, $FF, $FF -; -; db $FF, $FF, $FF, $FF, $FF, $09, $FF, $FF -; db $08, $FF, $FF, $10, $11, $12, $FF, $FF -; -; db $FF, $FF, $03, $04, $FF, $FF, $02, $FF -; db $FF, $FF, $14, $15, $17, $16, $15, $17 -; -; db $16, $0F, $FF, $FF, $FF, $FF, $FF, $FF -; db $FF, $FF, $FF, $FF, $FF, $FF, $02, $02 -; -; db $FF, $FF, $FF, $FF, $01, $FF, $FF, $FF -; db $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF -;} -;-------------------------------------------------------------------------------- - ;-------------------------------------------------------------------------------- ; PrepItemScreenBigKey: ;-------------------------------------------------------------------------------- PrepItemScreenBigKey: - STZ $02 - STZ $03 + STZ.b Scrap02 + STZ.b Scrap03 REP #$30 ; thing we wrote over - set 16-bit accumulator RTL ;-------------------------------------------------------------------------------- @@ -902,7 +850,7 @@ RTL LoadPowder: JSL.l Sprite_SpawnDynamically ; thing we wrote over %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) - STA $0DA0, Y ; Store item type + STA.w SpriteAuxTable, Y ; Store item type JSL.l PrepDynamicTile RTL ;-------------------------------------------------------------------------------- @@ -911,10 +859,10 @@ RTL ; InitializeBottles: ;-------------------------------------------------------------------------------- InitializeBottles: - STA BottleContents, X ; thing we wrote over + STA.l BottleContents, X ; thing we wrote over PHA - LDA BottleIndex : BNE + - TXA : INC : STA BottleIndex ; write bottle index to menu properly + LDA.l BottleIndex : BNE + + TXA : INC : STA.l BottleIndex ; write bottle index to menu properly + PLA RTL @@ -923,17 +871,15 @@ RTL ;-------------------------------------------------------------------------------- ; DrawPowder: ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" -;-------------------------------------------------------------------------------- DrawPowder: - LDA $02DA : BNE .defer ; defer if link is buying a potion - LDA.l !REDRAW : BEQ + - LDA $0DA0, X ; Retrieve stored item type + 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 #$00 : STA.l !REDRAW ; reset redraw flag + LDA.b #$00 : STA.l RedrawFlag ; reset redraw flag BRA .defer + - LDA $0DA0, X ; Retrieve stored item type + LDA.w SpriteAuxTable, X ; Retrieve stored item type JSL.l DrawDynamicTile .defer RTL @@ -943,19 +889,17 @@ RTL ; LoadMushroom: ;-------------------------------------------------------------------------------- LoadMushroom: - LDA.b #$00 : STA $0DC0, X ; thing we wrote over + LDA.b #$00 : STA.w SpriteGFXControl, X ; thing we wrote over .justGFX - ;LDA MushroomItem - ;JSL.l PrepDynamicTile PHA - LDA #$01 : STA !REDRAW - LDA $5D : CMP #$14 : BEQ .skip ; skip if we're mid-mirror + LDA.b #$01 : STA.l RedrawFlag + LDA.b LinkState : CMP.b #$14 : BEQ .skip ; skip if we're mid-mirror - LDA #$00 : STA !REDRAW + LDA.b #$00 : STA.l RedrawFlag %GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) - STA $0E80, X ; Store item type + STA.w SpriteItemType, X ; Store item type JSL.l PrepDynamicTile .skip @@ -966,16 +910,14 @@ RTL ;-------------------------------------------------------------------------------- ; DrawMushroom: ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" -;-------------------------------------------------------------------------------- DrawMushroom: PHA : PHY - LDA !REDRAW : BEQ .skipInit ; skip init if already ready + LDA.l RedrawFlag : BEQ .skipInit ; skip init if already ready JSL.l LoadMushroom_justGFX BRA .done ; don't draw on the init frame .skipInit - LDA $0E80, X ; Retrieve stored item type + LDA.w SpriteItemType, X ; Retrieve stored item type JSL.l DrawDynamicTile .done @@ -987,12 +929,12 @@ RTL ; CollectPowder: ;-------------------------------------------------------------------------------- CollectPowder: - LDY $0DA0, X ; Retrieve stored item type + LDY.w SpriteAuxTable, 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 $02E9 ; item from NPC + STZ.w ItemReceiptMethod ; item from NPC JSL.l Link_ReceiveItem ;JSL.l FullInventoryExternal JSL.l ItemSet_Powder @@ -1003,12 +945,12 @@ RTL ; RemoveMushroom: ;-------------------------------------------------------------------------------- RemoveMushroom: - LDA InventoryTracking : AND #$DF : STA InventoryTracking ; remove the mushroom - AND #$10 : BEQ .empty ; check if we have powder - LDA.b #$02 : STA PowderEquipment ; give powder if we have it + LDA.l InventoryTracking : AND.b #$DF : STA.l InventoryTracking ; remove the mushroom + AND.b #$10 : BEQ .empty ; check if we have powder + LDA.b #$02 : STA.l PowderEquipment ; give powder if we have it RTL .empty - LDA.b #$00 : STA PowderEquipment ; clear the inventory slot if we don't have powder + LDA.b #$00 : STA.l PowderEquipment ; clear the inventory slot if we don't have powder RTL ;-------------------------------------------------------------------------------- @@ -1016,37 +958,26 @@ RTL ; DrawMagicHeader: ;-------------------------------------------------------------------------------- DrawMagicHeader: - LDA MagicConsumption : AND.w #$00FF : CMP.w #$0002 : BEQ .quarterMagic + LDA.l MagicConsumption : AND.w #$00FF : CMP.w #$0002 : BEQ .quarterMagic .halfMagic - LDA.w #$28F7 : STA $7EC704 - LDA.w #$2851 : STA $7EC706 - LDA.w #$28FA : STA $7EC708 + LDA.w #$28F7 : STA.l HUDTileMapBuffer+$04 + LDA.w #$2851 : STA.l HUDTileMapBuffer+$06 + LDA.w #$28FA : STA.l HUDTileMapBuffer+$08 +RTL + .quarterMagic + LDA.w #$28F7 : STA.l HUDTileMapBuffer+$04 + LDA.w #$2800 : STA.l HUDTileMapBuffer+$06 + LDA.w #$2801 : STA.l HUDTileMapBuffer+$08 RTL - .quarterMagic - LDA.w #$28F7 : STA $7EC704 - LDA.w #$2800 : STA $7EC706 - LDA.w #$2801 : STA $7EC708 -RTL -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -; FixShovelLock: -;-------------------------------------------------------------------------------- -;FixShovelLock: -; LDA $037A : CMP #$01 : BEQ + ; skip if link is shoveling -; LDA FluteEquipment ; load shovel/flute item ID -; + -; CMP #$00 -;RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; SpawnShovelGamePrizeSFX: ;-------------------------------------------------------------------------------- SpawnShovelGamePrizeSFX: - STA $7FFE00 ; thing we wrote over + STA.l MiniGameTime ; thing we wrote over PHA - LDA.b #$1B : STA $012F ; play puzzle sound + LDA.b #$1B : STA.w SFX3 ; play puzzle sound PLA RTL ;-------------------------------------------------------------------------------- @@ -1056,38 +987,37 @@ RTL ;-------------------------------------------------------------------------------- SpawnChestGamePrizeSFX: CPX.b #$07 : BNE .normal - LDA $A0 : CMP.b #$06 : BNE .normal + LDA.b RoomIndex : CMP.b #$06 : BNE .normal .prize - LDA.b #$1B : STA $012F : RTL ; play puzzle sound + LDA.b #$1B : STA.w SFX3 : RTL ; play puzzle sound .normal - LDA.b #$0E : STA $012F ; play chest sound + LDA.b #$0E : STA.w SFX3 ; play chest sound RTL ;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; SpawnShovelItem: ;-------------------------------------------------------------------------------- -!REDRAW = "$7F5000" SpawnShovelItem: - LDA.b #$01 : STA !REDRAW + LDA.b #$01 : STA.l RedrawFlag - LDA $03FC : BEQ + + LDA.w YButtonOverride : BEQ + JSL DiggingGameGuy_AttemptPrizeSpawn JMP .skip + - LDA $035B : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix + LDA.w TileActDig : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix PHY : PHP PHB : PHK : PLB SEP #$30 ; set 8-bit accumulator and index registers - LDA $1B : BEQ + : JMP .no_drop : + ; skip if indoors + LDA.b IndoorsFlag : BEQ + : JMP .no_drop : + ; skip if indoors - LDA $8A : CMP #$2A : BEQ .no_drop ; don't drop in the haunted grove - CMP #$68 : BEQ .no_drop ; don't drop in the digging game area + LDA.b OverworldIndex : CMP.b #$2A : BEQ .no_drop ; don't drop in the haunted grove + CMP.b #$68 : BEQ .no_drop ; don't drop in the digging game area - JSL GetRandomInt : BIT #$03 : BNE .no_drop ; drop with 1/4 chance + JSL GetRandomInt : BIT.b #$03 : BNE .no_drop ; drop with 1/4 chance LSR #2 : TAX ; clobber lower 2 bis - we have 64 slots now @@ -1095,27 +1025,27 @@ SpawnShovelItem: ;most of this part below is copied from the digging game - STA $7FFE00 + STA.l MiniGameTime JSL Sprite_SpawnDynamically LDX.b #$00 - LDA $2F : CMP.b #$04 : BEQ + : INX : + + LDA.b LinkDirection : CMP.b #$04 : BEQ + : INX : + - LDA.l .x_speeds, X : STA $0D50, Y + LDA.l .x_speeds, X : STA.w SpriteVelocityX, Y - LDA.b #$00 : STA $0D40, Y - LDA.b #$18 : STA $0F80, Y - LDA.b #$FF : STA $0B58, Y - LDA.b #$30 : STA $0F10, Y + LDA.b #$00 : STA.w SpriteVelocityY, Y + LDA.b #$18 : STA.w SpriteVelocityZ, Y + LDA.b #$FF : STA.w EnemyStunTimer, Y + LDA.b #$30 : STA.w SpriteTimerE, Y - LDA $22 : !ADD.l .x_offsets, X - AND.b #$F0 : STA $0D10, Y - LDA $23 : ADC.b #$00 : STA $0D30, Y + LDA.b LinkPosX : !ADD.l .x_offsets, X + AND.b #$F0 : STA.w SpritePosXLow, Y + LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh, Y - LDA $20 : !ADD.b #$16 : AND.b #$F0 : STA $0D00, Y - LDA $21 : ADC.b #$00 : STA $0D20, Y + LDA.b LinkPosY : !ADD.b #$16 : AND.b #$F0 : STA.w SpritePosYLow, Y + LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh, Y - LDA.b #$00 : STA $0F20, Y + LDA.b #$00 : STA.w SpriteLayer, Y TYX LDA.b #$30 : JSL Sound_SetSfx3PanLong diff --git a/inverted.asm b/inverted.asm index 1aeb772..8114db1 100644 --- a/inverted.asm +++ b/inverted.asm @@ -35,7 +35,7 @@ Overworld_CreatePyramidHoleModified: JSL C9DE_LONG JSL C9DE_LONG - LDA.w #$FFFF : STA $1012, Y + LDA.w #$FFFF : STA.w GFXStripes+$12, Y JMP .ending .originalBehaviour @@ -64,33 +64,33 @@ Overworld_CreatePyramidHoleModified: JSL C9DE_LONG JSL C9DE_LONG - LDA.w #$FFFF : STA $1012, Y + LDA.w #$FFFF : STA.w GFXStripes+$12, Y .ending - LDA.w #$3515 : STA $012D + LDA.w #$3515 : STA.w SFX1 SEP #$30 - LDA OverworldEventDataWRAM+$5B : ORA.b #$20 : STA OverworldEventDataWRAM+$5B + LDA.l OverworldEventDataWRAM+$5B : ORA.b #$20 : STA.l OverworldEventDataWRAM+$5B - LDA.b #$03 : STA $012F + LDA.b #$03 : STA.w SFX3 - LDA.b #$01 : STA $14 + LDA.b #$01 : STA.b NMISTRIPES RTL ;------------------------------------------------------------------------------ Draw_PyramidOverlay: LDA.l InvertedMode : AND.w #$00FF : BNE .done .normal - LDA.w #$0E39 : STA $23BC - INC A : STA $23BE - INC A : STA $23C0 - INC A : STA $243C - INC A : STA $243E - INC A : STA $2440 - INC A : STA $24BC - INC A : STA $24BE - INC A : STA $24C0 + LDA.w #$0E39 : STA.w $23BC + INC A : STA.w $23BE + INC A : STA.w $23C0 + INC A : STA.w $243C + INC A : STA.w $243E + INC A : STA.w $2440 + INC A : STA.w $24BC + INC A : STA.w $24BE + INC A : STA.w $24C0 .done RTL ;------------------------------------------------------------------------------ @@ -130,43 +130,44 @@ db $02, $02, $02, $00, $08, $02, $02, $00, $00, $00, $00, $01, $00, $00, $20, $0 db $02, $02, $02, $02, $02, $02, $02, $00, $00, $01, $01, $01, $02, $00, $08, $00 Electric_Barrier: - LDA InvertedMode : BEQ .done - LDA OverworldEventDataWRAM, X : ORA #$40 : STA OverworldEventDataWRAM, X ;set barrier dead + LDA.l InvertedMode : BEQ .done + LDA.l OverworldEventDataWRAM, X : ORA.b #$40 : STA.l OverworldEventDataWRAM, X ;set barrier dead .done - LDA OverworldEventDataWRAM, X ; what we wrote over + LDA.l OverworldEventDataWRAM, X ; what we wrote over RTL GanonTowerAnimation: - LDA InvertedMode : BEQ .done - LDA.b #$1B : STA $012F - STZ $04C6 - STZ $B0 - STZ $0710 - STZ $02E4 - - STZ $0FC1 - - STZ $011A - STZ $011B - STZ $011C - STZ $011D - LDA.b #$02 : STA $012C - LDA.b #$09 : STA $012D - RTL - .done - LDA.b #$05 : STA $04C6 ;what we wrote over - STZ $B0 ; (continued) - STZ $C8 ; (continued) + LDA.l InvertedMode : BEQ .done + LDA.b #$1B : STA.w SFX3 + STZ.w OWEntranceCutscene + STZ.b SubSubModule + STZ.w SkipOAM + STZ.w CutsceneFlag + + STZ.w FreezeSprites + + STZ.w BG1ShakeV + STZ.w BG1ShakeV+1 + STZ.w BG1ShakeH + STZ.w BG1ShakeH+1 + LDA.b #$02 : STA.w MusicControlRequest + LDA.b #$09 : STA.w SFX1 + RTL + + .done + LDA.b #$05 : STA.w OWEntranceCutscene ; what we wrote over + STZ.b SubSubModule ; (continued) + STZ.b ScrapBufferBD+$0B ; (continued) RTL GanonTowerInvertedCheck: { - LDA InvertedMode : BEQ .done - LDA #$01 ; Load a random value so it doesn't BEQ + LDA.l InvertedMode : BEQ .done + LDA.b #$01 ; Load a random value so it doesn't BEQ RTL .done - LDA $8A : CMP.b #$43 ;what we wrote over + LDA.b OverworldIndex : CMP.b #$43 ;what we wrote over RTL } @@ -174,14 +175,14 @@ GanonTowerInvertedCheck: ;Hard coded rock removed in LW for Inverted mode HardcodedRocks: - LDA InvertedMode : AND.w #$00FF : BEQ .normalrocks + LDA.l InvertedMode : AND.w #$00FF : BEQ .normalrocks BRA .noRock2 .normalrocks - LDA.w #$020F : LDX $8A : CPX.w #$0033 : BNE .noRock - STA $7E22A8 + LDA.w #$020F : LDX.b OverworldIndex : CPX.w #$0033 : BNE .noRock + STA.l $7E22A8 .noRock CPX.w #$002F : BNE .noRock2 - STA $7E2BB2 + STA.l $7E2BB2 .noRock2 RTL @@ -194,44 +195,44 @@ TurtleRockPegSolved: RTL MirrorBonk: - ; must preserve X/Y, and must preserve $00-$0F - LDA.l InvertedMode : BEQ .normal + ; must preserve X/Y, and must preserve $00-$0F + LDA.l InvertedMode : BEQ .normal - ; Goal: use $20 and $22 to decide to force a bonk - ; if we want to bonk branch to .forceBonk - ; otherwise fall through to .normal + ; Goal: use $20 and $22 to decide to force a bonk + ; if we want to bonk branch to .forceBonk + ; otherwise fall through to .normal PHX : PHP PHB : PHK : PLB - LDA $8A : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks + LDA.b OverworldIndex : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks REP #$30 - LDX #$0000 + LDX.w #$0000 .loop LDA.l .bonkRectanglesTable, X ;Load X1 - CMP $22 : !BGE ++ + CMP.b LinkPosX : !BGE ++ ;IF X > X1 LDA.l .bonkRectanglesTable+2, X ; Load X2 - CMP $22 : !BLT ++ + CMP.b LinkPosX : !BLT ++ ;IF X < X2 LDA.l .bonkRectanglesTable+4, X ;Load Y1 - CMP $20 : !BGE ++ + CMP.b LinkPosY : !BGE ++ ;IF Y > Y1 LDA.l .bonkRectanglesTable+6, X ; Load Y2 - CMP $20 : !BLT ++ + CMP.b LinkPosY : !BLT ++ ;IF Y < Y2 ;Bonk Here PLB : PLP : PLX BRA .forceBonk - ++ - TXA : !ADD #$0008 : CMP #.tableEnd-.bonkRectanglesTable : BEQ .endLoop - TAX - BRA .loop - .endbonkRectanglesTable + ++ + TXA : !ADD #$0008 : CMP.w #.tableEnd-.bonkRectanglesTable : BEQ .endLoop + TAX + BRA .loop + .endbonkRectanglesTable - .endLoop - PLB : PLP : PLX + .endLoop + PLB : PLP : PLX .normal - ;Not forcing a bonk, so the vanilla bonk detection run. - LDA $0C : ORA $0E + ;Not forcing a bonk, so the vanilla bonk detection run. + LDA.b Scrap0C : ORA.b Scrap0E JML.l MirrorBonk_NormalReturn .forceBonk JML.l MirrorBonk_BranchGamma diff --git a/invertedmaps.asm b/invertedmaps.asm index 7ff1fdb..37abb0e 100644 --- a/invertedmaps.asm +++ b/invertedmaps.asm @@ -1,32 +1,32 @@ Overworld_LoadNewTiles: { ; add sign to EDM for OWG people to read - LDA $040A : AND #$00FF : CMP #$0005 : BNE + - LDA #$0101 : STA $7E2E18 ; #$0101 is the sign tile16 id, $7E2D98 is the position of the tile16 on map + 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 InvertedMode : AND #$00FF : BNE + - LDA $040A : AND #$00FF : CMP #$0043 : BNE + - LDA #$0101 : STA $7E2550 + 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 InvertedMode : AND #$00FF : BNE + - LDA $040A : AND #$00FF : CMP #$005B : BNE + - LDA #$0101 : STA $7E27B6 ;Moved sign near statue - LDA #$05C2 : STA $7E27B4 ;added a pyramid peg on the left of the sign + LDA.l InvertedMode : AND.w #$00FF : BNE + + LDA.b OverworldIndex : AND.w #$00FF : CMP.w #$005B : BNE + + LDA.w #$0101 : STA.w $7E27B6 ; Moved sign near statue + LDA.w #$05C2 : STA.w $7E27B4 ; added a pyramid peg on the left of the sign + SEP #$30 - LDA InvertedMode : BEQ .notInverted + 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 $8A : CMP #$0080 : !BGE .noData + LDA.b OverworldIndex : CMP.w #$0080 : !BGE .noData ASL A : TAX JSR (Overworld_NewTilesTable, X) @@ -34,7 +34,7 @@ Overworld_LoadNewTiles: PLB .notInverted REP #$30 - LDX #$001E : LDA #$0DBE + LDX.w #$001E : LDA.w #$0DBE RTL } @@ -82,1039 +82,1039 @@ RTS map003: { -LDA #$021A : STA $29B6 -LDA #$01F3 : STA $29B8 -LDA #$00A0 : STA $29BA -LDA #$0104 : STA $29BC -LDA #$00C6 : STA $2A34 -STA $2A38 -STA $2A3A -LDA #$0034 : STA $2BE0 +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 #$0111 : STA $206E -STA $20EC -LDA #$0113 : STA $2070 -STA $2072 -LDA #$0112 : STA $2074 -STA $20EE -STA $216C -LDA #$0116 : STA $20F0 -STA $216E -LDA #$0117 : STA $20F2 -LDA #$0118 : STA $20F4 -LDA #$011C : STA $2170 -LDA #$011D : STA $2172 -LDA #$011E : STA $2174 -LDA #$0130 : STA $21E2 -STA $21F0 -STA $22E2 -STA $22F0 -LDA #$0123 : STA $21EC -LDA #$0124 : STA $21EE -LDA #$0034 : STA $21F2 -LDA #$0126 : STA $21F4 -LDA #$0135 : STA $2262 -STA $2270 -STA $2362 -STA $2370 -LDA #$0136 : STA $2264 -STA $2266 -STA $226C -STA $226E -LDA #$0137 : STA $2268 -STA $226A -LDA #$013C : STA $22E4 -STA $22E6 -STA $22EC -STA $22EE -LDA #$013D : STA $22E8 -STA $22EA -LDA #$0144 : STA $2364 -LDA #$0145 : STA $2366 -LDA #$0146 : STA $2368 -LDA #$0147 : STA $236A -LDA #$01B3 : STA $236C -LDA #$01B4 : STA $236E -LDA #$0139 : STA $2970 -STA $2C6C -LDA #$014B : STA $2972 -STA $2C6E -LDA #$016B : STA $29F0 -STA $2CEC -LDA #$0182 : STA $29F2 -STA $2CEE +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 #$0034 : STA $3D4A +LDA.w #$0034 : STA.w $3D4A RTS } map007: { -LDA #$021B : STA $259E -STA $25A2 -STA $25A4 -STA $261C -STA $2626 -STA $269A -STA $26A8 -STA $271A -STA $2728 -STA $279A -STA $27A8 -STA $281E -STA $2820 -STA $2822 -STA $2824 -STA $2828 -STA $289C -STA $28A6 -STA $291E -STA $2924 -LDA #$0134 : STA $269E -STA $26A4 -LDA #$0034 : STA $2826 +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 #$0034 : STA $2B2E +LDA.w #$0034 : STA.w $2B2E RTS } map020: { -LDA #$02F1 : STA $2422 -LDA #$02F2 : STA $2424 -LDA #$0184 : STA $24A2 -STA $2522 -LDA #$0185 : STA $24A4 -STA $2524 +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 #$0485 : STA $2424 -STA $2426 -LDA #$0454 : STA $24A4 -STA $24A6 -LDA #$0476 : STA $2522 -LDA #$0460 : STA $2524 -STA $2526 -LDA #$04D7 : STA $2528 -LDA #$04DD : STA $2624 -LDA #$04DE : STA $2626 -LDA #$04E0 : STA $26A4 -LDA #$04E1 : STA $26A6 -LDA #$04E4 : STA $2724 -LDA #$04E5 : STA $2726 -LDA #$0034 : STA $27A4 -STA $27A6 +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 #$046D : STA $243E -STA $24BC -STA $24BE -STA $253E -STA $2440 -STA $24C0 -STA $24C2 -STA $2540 +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 #$0035 : STA $2C28 -STA $2FAE -LDA #$0034 : STA $2C2C -STA $2C2E -STA $2CB6 -STA $2D36 -STA $2DB6 -STA $2EB6 -STA $2F30 -STA $2F36 -STA $2FAA -STA $2FB0 -STA $2FB4 -STA $2FB6 -LDA #$00E2 : STA $2C36 -STA $2FA8 -LDA #$00AE : STA $2CAC -LDA #$00AF : STA $2CAE -LDA #$007E : STA $2CB0 -LDA #$007F : STA $2CB2 -LDA #$04BA : STA $2CB4 -STA $2DB4 -STA $2EB4 -LDA #$00B0 : STA $2D2C -LDA #$0014 : STA $2D2E -LDA #$0015 : STA $2D30 -LDA #$00A8 : STA $2D32 -LDA #$04BB : STA $2D34 -STA $2E34 -STA $2F34 -LDA #$0089 : STA $2DAC -LDA #$001C : STA $2DAE -LDA #$001D : STA $2DB0 -LDA #$0076 : STA $2DB2 -LDA #$00F1 : STA $2E2C -LDA #$004E : STA $2E2E -LDA #$004F : STA $2E30 -LDA #$00D9 : STA $2E32 -LDA #$009A : STA $2EAC -LDA #$009B : STA $2EAE -LDA #$009C : STA $2EB0 -LDA #$0095 : STA $2EB2 +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 #$0034 -STA $3028 -STA $302C -LDA #$0035 : STA $302A -STA $3032 -LDA #$00DA : STA $302E -LDA #$00E2 : STA $3030 +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 #$0485 : STA $2424 -STA $2426 -LDA #$0454 : STA $24A4 -STA $24A6 -LDA #$0476 : STA $2522 -LDA #$0460 : STA $2524 -STA $2526 -LDA #$04D7 : STA $2528 -LDA #$04DD : STA $2624 -LDA #$04DE : STA $2626 -LDA #$04E0 : STA $26A4 -LDA #$04E1 : STA $26A6 -LDA #$04E4 : STA $2724 -LDA #$04E5 : STA $2726 -LDA #$0034 : STA $27A4 -STA $27A6 +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 #$0486 : STA $26B0 -LDA #$0487 : STA $26B2 -LDA #$0454 : STA $272C -STA $272E -LDA #$048E : STA $2730 -LDA #$048F : STA $2732 -LDA #$04CA : STA $27AC -LDA #$045E : STA $27AE -LDA #$0494 : STA $27B0 -LDA #$0495 : STA $27B2 -LDA #$049E : STA $27B4 -LDA #$0499 : STA $282C -LDA #$0451 : STA $2830 -LDA #$0034 : STA $28AC -STA $28AE -STA $28B0 -LDA #$0454 : STA $274E -STA $2750 -LDA #$0608 : STA $2752 -LDA #$0459 : STA $27CE -STA $27D0 -LDA #$045E : STA $27D2 -LDA #$0451 : STA $284E -STA $2850 -STA $2852 -STA $282E -LDA #$0034 : STA $28CE -STA $28D0 -STA $28D2 +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 $7EF2DB : AND #$0020 : BEQ .agahnim2Alive -LDA #$046D : STA $243E -LDA #$0E3A : STA $24BC -LDA #$0E3B : STA $24BE -LDA #$0E3E : STA $253C -LDA #$0E3F : STA $253E -LDA #$0490 : STA $25BE -LDA #$0E39 : STA $2440 -LDA #$0E3C : STA $24C0 -LDA #$0E3D : STA $24C2 -LDA #$0E40 : STA $2540 -LDA #$0E41 : STA $2542 -LDA #$0491 : STA $25C0 +LDA.w OverworldEventDataWRAM+$2B : 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 #$0101 : STA $7E222C -LDA #$0101 : STA $7E2252 +LDA.w #$0101 : STA.w $7E222C +LDA.w #$0101 : STA.w $7E2252 RTS } map041: { -LDA #$0034 : STA $2288 -STA $2308 -STA $2388 -STA $2408 -STA $2488 -STA $248A -LDA #$0036 : STA $2386 +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 #$017E : STA $2050 -STA $20CE -LDA #$00D1 : STA $2052 -STA $2054 -STA $2056 -STA $2058 -STA $205A -STA $205C -STA $205E -STA $21E6 -STA $21E8 -STA $21EA -STA $21EC -STA $21EE -STA $21F0 -LDA #$00D2 : STA $2060 -STA $20E2 -STA $2164 -LDA #$0183 : STA $20D0 -STA $214E -LDA #$00C9 : STA $20D2 -STA $20D4 -STA $20D6 -STA $20D8 -STA $20DA -STA $20DC -STA $20DE -STA $2152 -STA $2154 -STA $2156 -STA $2158 -STA $215A -STA $215C -STA $215E -STA $2266 -STA $2268 -STA $226A -STA $226C -STA $226E -STA $2270 -STA $22CC -LDA #$00D0 : STA $20E0 -STA $2162 -STA $21E4 -LDA #$0153 : STA $2150 -STA $21CE -STA $21D0 -STA $2250 -STA $22CE -LDA #$00C8 : STA $2160 -STA $21E2 -STA $2264 -STA $28DA -STA $295C -LDA #$00DC : STA $21D2 -STA $21D4 -STA $21D6 -STA $21D8 -STA $21DA -STA $21DC -STA $21DE -STA $224C -LDA #$00CA : STA $21E0 -STA $2262 -STA $285A -STA $28DC -LDA #$0178 : STA $224E -LDA #$00E3 : STA $2252 -STA $2254 -LDA #$0186 : STA $22D0 -STA $234E -LDA #$0034 : STA $22D2 -STA $22D4 -STA $22D6 -STA $2350 -STA $2352 -STA $2354 -STA $2356 -STA $23D0 -STA $23D2 -STA $23D4 -STA $23D6 -STA $2452 -STA $2454 -STA $2456 -STA $2458 -STA $24D4 -STA $24D6 -STA $2554 -STA $2556 -STA $25D4 -STA $25D6 -STA $2656 -LDA #$00D3 : STA $22E2 -LDA #$0302 : STA $22E4 -LDA #$00CC : STA $22E6 -STA $22E8 -STA $22EA -STA $22EC -STA $22EE -STA $22F0 -STA $234C -LDA #$00CE : STA $2362 -STA $23E2 -STA $25D8 -STA $2658 -STA $26D8 -STA $2758 -LDA #$00C5 : STA $2364 -STA $23E4 -STA $25DC -STA $265C -STA $26DC -STA $275C -LDA #$06AB : STA $2366 -STA $23E6 -STA $2466 -STA $24E4 -STA $24E6 -STA $2760 -LDA #$00AA : STA $2368 -LDA #$0384 : STA $236A -STA $236E -STA $23EC -STA $246A -STA $24E8 -STA $24EA -STA $24EC -STA $24EE -LDA #$00AB : STA $236C -LDA #$0759 : STA $23C8 -STA $244A -STA $24CC -STA $254E -STA $26D0 -STA $2752 -STA $27D4 -LDA #$0757 : STA $23CA -STA $244C -STA $24CE -STA $2550 -STA $26D2 -STA $2754 -LDA #$01FF : STA $23CC -STA $244E -STA $24D0 -STA $2652 -STA $26D4 -STA $2756 -LDA #$017C : STA $23CE -STA $2450 -STA $24D2 -STA $2654 -STA $26D6 -LDA #$015C : STA $23E0 -LDA #$0100 : STA $245A -STA $24D8 -LDA #$01C2 : STA $245C -LDA #$0218 : STA $245E -LDA #$0162 : STA $2460 -LDA #$0106 : STA $2462 -STA $24E0 -STA $255C -LDA #$0107 : STA $2464 -STA $24E2 -LDA #$0104 : STA $24DA -STA $2558 -LDA #$01D4 : STA $24DC -LDA #$0219 : STA $24DE -LDA #$0179 : STA $2552 -STA $25D2 -LDA #$0105 : STA $255A -LDA #$0166 : STA $255E -LDA #$0766 : STA $2560 -LDA #$06B4 : STA $2562 -STA $2564 -STA $2566 -STA $2568 -STA $256A -STA $256C -STA $256E -STA $2570 -LDA #$06E5 : STA $25D0 -STA $2650 -LDA #$00C4 : STA $25DA -STA $265A -STA $26DA -STA $275A -LDA #$0171 : STA $25DE -LDA #$0165 : STA $25E4 -STA $25E6 -STA $25E8 -STA $25EA -STA $25EC -STA $25EE -STA $25F0 -LDA #$06E4 : STA $27D2 -STA $2852 -STA $2854 -STA $2856 -STA $28D4 -STA $28D6 -STA $2956 -STA $2958 -STA $29D8 -STA $29DA -LDA #$06E1 : STA $27D6 -LDA #$02FD : STA $27D8 -STA $2858 -LDA #$00CF : STA $27DA -LDA #$06E7 : STA $28D8 -STA $295A -STA $29DC +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 #$0769 : STA $38F8 -LDA #$06E1 : STA $38FA -STA $38FC -STA $38FE -LDA #$06E3 : STA $3978 -LDA #$02E5 : STA $397A -STA $397E -LDA #$02EC : STA $397C -LDA #$02F0 : STA $39F8 -LDA #$02F3 : STA $39FA -STA $39FC -STA $39FE +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 #$0034 : STA $3D94 +LDA.w #$0034 : STA.w $3D94 RTS } map060: { -LDA #$02E5 : STA $27AE -STA $282C -STA $282E -STA $2832 -STA $28AC -STA $28AE -STA $2928 -STA $292C -STA $29A8 -STA $29B0 -STA $2A28 -STA $2A30 -STA $2AAC -STA $2AB2 -LDA #$078A : STA $28AA -STA $28B0 -STA $2AAA -STA $2B2A -STA $2B30 -STA $2BAE -LDA #$02EB : STA $28B4 -STA $2930 -STA $29AE -STA $2A2C -STA $2A32 -STA $2AAE -LDA #$02EC : STA $2934 -STA $2B28 -STA $2B2C -STA $2B2E -STA $2B32 +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 #$01D5 : STA $2486 -LDA #$0165 : STA $2506 -LDA #$0166 : STA $2508 -STA $258A -LDA #$00C6 : STA $2586 -STA $2608 -STA $2688 -STA $2708 -STA $2788 -STA $2806 -STA $2808 -LDA #$0171 : STA $2588 -LDA #$021C : STA $260A -STA $268A -STA $270A -STA $278A -LDA #$0034 : STA $270E -STA $278E -STA $2790 -STA $280E -STA $2810 -STA $2812 -STA $2814 -STA $2816 -STA $2818 -STA $281A -STA $281C -STA $288E -STA $2892 -STA $2894 -STA $2896 -STA $2898 -STA $289A -STA $289C -STA $289E -STA $290E -STA $2910 -STA $2912 -STA $2918 -STA $291A -STA $291C -STA $291E -STA $2920 -STA $298C -STA $298E -STA $2990 -STA $2992 -STA $2998 -STA $299A -STA $299E -STA $29A0 -STA $2A06 -STA $2A08 -STA $2A0A -STA $2A0C -STA $2A10 -STA $2A12 -STA $2A14 -STA $2A16 -STA $2A18 -STA $2A1C -STA $2A1E -STA $2A84 -STA $2A86 -STA $2A88 -STA $2A8C -STA $2A8E -STA $2A90 -STA $2A92 -STA $2A94 -STA $2A96 -STA $2A98 -STA $2A9A -STA $2A9C -STA $2B06 -STA $2B0A -STA $2B0E -STA $2B12 -STA $2B1A -STA $2B84 -STA $2B86 -STA $2B88 -STA $2B8A -STA $2B8E -STA $2B92 -STA $2B94 -STA $2B98 -STA $2B9A -STA $2C04 -STA $2C08 -STA $2C0A -STA $2C0E -STA $2C12 -STA $2C14 -STA $2C18 -STA $2C86 -STA $2C88 -STA $2C8A -STA $2C90 -STA $2C92 -STA $2C94 -STA $2C98 -STA $2D0A -STA $2D0C -STA $2D10 -STA $2D14 -STA $2D16 -STA $2D8A -STA $2D8C -STA $2D8E -STA $2D94 -LDA #$016A : STA $278C -STA $280C -STA $2A82 -STA $2B02 -STA $2B82 -STA $2C02 -STA $2C82 -LDA #$01FA : STA $288C -LDA #$00DA : STA $2890 -STA $299C -STA $2B14 -STA $2B16 -STA $2B18 -STA $2B96 -STA $2C16 -STA $2C96 -STA $2D08 -STA $2D92 -LDA #$0186 : STA $290C -STA $298A -STA $2A04 -LDA #$0036 : STA $2914 -STA $2916 -STA $2994 -STA $2996 -STA $2D12 -LDA #$00E4 : STA $2986 -LDA #$00E5 : STA $2988 -LDA #$0100 : STA $29A2 -LDA #$0071 : STA $2A0E -STA $2A1A -STA $2C8C -LDA #$015C : STA $2A20 -STA $2A9E -STA $2B1C -STA $2C9A -STA $2D18 -STA $2D96 -LDA #$0104 : STA $2A22 -LDA #$01D4 : STA $2A24 -LDA #$0035 : STA $2A8A -STA $2B08 -STA $2C06 -STA $2D0E -STA $2D90 -LDA #$0162 : STA $2AA0 -STA $2B1E -STA $2B9C -STA $2D1A -STA $2D98 -LDA #$00E2 : STA $2B04 -STA $2B0C -STA $2B10 -STA $2B8C -STA $2B90 -STA $2C0C -STA $2C10 -STA $2C8E -LDA #$00F8 : STA $2C1A -LDA #$00CE : STA $2C1C -STA $2C9C -LDA #$0160 : STA $2C84 -STA $2D06 -STA $2D88 -LDA #$0167 : STA $2D04 -STA $2D86 -LDA #$0172 : STA $2E08 -LDA #$015E : STA $2E0A -STA $2E0C -STA $2E0E -STA $2E10 -STA $2E12 -STA $2E14 -LDA #$0174 : STA $2E16 +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 #$0034 : STA $22A8 +LDA.w #$0034 : STA.w $22A8 RTS } map053: { -LDA #$02F1 : STA $2BB0 -LDA #$02F2 : STA $2BB2 -LDA #$0184 : STA $2C30 -LDA #$0185 : STA $2C32 -LDA #$0392 : STA $2CB0 -LDA #$0393 : STA $2CB2 -LDA #$0394 : STA $2D30 -LDA #$0395 : STA $2D32 -LDA #$0034 : STA $2F56 +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 #$0774 : STA $2800 -LDA #$06E1 : STA $2802 -LDA #$0757 : STA $2804 -STA $2886 -LDA #$0779 : STA $2880 -LDA #$02EC : STA $2882 -LDA #$0759 : STA $2884 -STA $2906 -LDA #$02E5 : STA $2900 -STA $2902 -STA $2904 -LDA #$076A : STA $2908 -LDA #$02F3 : STA $2980 -STA $2982 -LDA #$02F1 : STA $2984 -LDA #$02F2 : STA $2986 -LDA #$038A : STA $2988 -LDA #$0184 : STA $2A04 -STA $2A84 -STA $2B04 -STA $2B84 -LDA #$0185 : STA $2A06 -STA $2A86 -STA $2B06 -STA $2B86 +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 #$0E96 : STA $235E -STA $23DE -STA $245E -STA $24DE -STA $255E -LDA #$0E97 : STA $2360 -STA $23E0 -STA $2460 -STA $24E0 -STA $2560 -LDA #$0E94 : STA $25DE -LDA #$0E95 : STA $25E0 -LDA #$0180 : STA $275E -LDA #$0181 : STA $2760 -LDA #$0184 : STA $27DE -STA $285E -LDA #$0185 : STA $27E0 -STA $2860 -LDA #$0212 : STA $2BE0 +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 #$0398 : STA $25A0 -LDA #$0522 : STA $25A2 -LDA #$0125 : STA $2620 -LDA #$0126 : STA $2622 -LDA #$0239 : STA $269E -STA $26A4 +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 #$0239 : STA $3D4A +LDA.w #$0239 : STA.w $3D4A RTS } map080: { -LDA #$020F : STA $2B2E +LDA.w #$020F : STA.w $2B2E RTS } map084: { -LDA #$02F3 : STA $2422 -STA $2424 -LDA #$00C9 : STA $24A2 -STA $24A4 -LDA #$00E3 : STA $2522 -STA $2524 +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 #$0323 : STA $39B6 -LDA #$0324 : STA $39B8 -STA $39BA -STA $39BC -STA $39BE -LDA #$02FE : STA $3A34 -LDA #$02FF : STA $3A36 -LDA #$0326 : STA $3A38 -STA $3A3A -STA $3A3C -STA $3A3E -LDA #$039D : STA $3AB2 -LDA #$0303 : STA $3AB4 -LDA #$0232 : STA $3AB6 -STA $3B34 -LDA #$0233 : STA $3AB8 -STA $3ABA -STA $3ABC -STA $3ABE -LDA #$03A2 : STA $3B32 -LDA #$0235 : STA $3B36 -STA $3BB4 -LDA #$046A : STA $3B38 -LDA #$0333 : STA $3B3A -STA $3B3C -STA $3B3E -LDA #$0034 : STA $3BB6 -STA $3BBA -STA $3BBC -STA $3C3A -STA $3C3C -STA $3C3E +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 $321C -STA $329C -STA $32A0 +STA.w $321C +STA.w $329C +STA.w $32A0 -LDA #$0071 : STA $321E -LDA #$00DA : STA $3220 -STA $329A -LDA #$00E1 : STA $329E -LDA #$0382 : STA $3318 -LDA #$037C : STA $3322 +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 #$021B : STA $3218 -STA $3222 -STA $3298 -STA $32A2 -STA $331A -STA $331C -STA $331E -STA $3320 -LDA #$00E2 : STA $321A +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 #$00F2 : STA $3BB8 -LDA #$0108 : STA $3C38 +LDA.w #$00F2 : STA.w $3BB8 +LDA.w #$0108 : STA.w $3C38 ;Warp Tile agah defeated -LDA #$0034 : STA $3BBE ;Tile when no warp -LDA ProgressIndicator : AND #$00FF : CMP #$0003 : BNE .agahnimAlive -LDA #$0212 : STA $3BBE ;warp +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 #$0324 : STA $39C0 -STA $39C2 -STA $39C4 -LDA #$0325 : STA $39C6 -LDA #$02D5 : STA $39C8 -STA $39D2 -LDA #$02CC : STA $39CC -STA $39D4 -LDA #$0326 : STA $3A40 -STA $3A42 -STA $3A44 -LDA #$0327 : STA $3A46 -LDA #$02F7 : STA $3A48 -LDA #$02E3 : STA $3A4C -STA $3A4E -LDA #$0233 : STA $3AC0 -STA $3AC2 -STA $3AC4 -LDA #$0234 : STA $3AC6 -STA $3B48 -LDA #$02F6 : STA $3AC8 -LDA #$0396 : STA $3ACA -LDA #$0333 : STA $3B40 -STA $3B42 -LDA #$03AA : STA $3B44 -LDA #$03A3 : STA $3B46 -STA $3BC8 -LDA #$0397 : STA $3B4A -LDA #$0034 : STA $3BC0 -STA $3BC2 -STA $3BC6 -STA $3C40 -STA $3C42 -LDA #$029C : STA $3BC4 -LDA #$010A : STA $3C44 -LDA #$010B : STA $3C46 -STA $3C48 -STA $3C4A -STA $3C4C -STA $3C4E -STA $3C50 -STA $3C52 -STA $3C54 -STA $3C56 -STA $3C58 -STA $3C5A -STA $3C5C -STA $3C5E -STA $3C60 -STA $3C62 -STA $3C64 -STA $3C66 +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 #$020F : STA $2BB2 +LDA.w #$020F : STA.w $2BB2 RTS } map115: { -LDA #$020F : STA $22A8 +LDA.w #$020F : STA.w $22A8 RTS } map120: { -LDA #$0239 : STA $3D94 +LDA.w #$0239 : STA.w $3D94 RTS } map117: { ;118 -LDA #$0239 : STA $2F50 -LDA #$0BA3 : STA $2F52 -STA $2FCE -STA $2FD0 +LDA.w #$0239 : STA.w $2F50 +LDA.w #$0BA3 : STA.w $2F52 +STA.w $2FCE +STA.w $2FD0 ;126 -LDA #$0BA3 : STA $3054 -STA $3056 -STA $3058 -STA $305A -STA $3254 -STA $3256 -STA $3258 -STA $325A -LDA #$0BAC : STA $30D4 -LDA #$0BAD : STA $30D6 -STA $3156 -STA $31D6 -LDA #$0BA9 : STA $30D8 -STA $3158 -STA $31D8 -LDA #$0BAA : STA $30DA -LDA #$0BC5 : STA $3154 -LDA #$0BC8 : STA $315A -LDA #$0BCA : STA $31D4 -LDA #$0BCD : STA $31DA +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 } diff --git a/invertedstatic.asm b/invertedstatic.asm index 01c4f52..60efb83 100644 --- a/invertedstatic.asm +++ b/invertedstatic.asm @@ -1,9 +1,9 @@ ;Statically mapped at $A1A000 Referenced by the front end. Do not move without coordination. InvertedTileAttributeLookup: SEP #$20 - LDA $8A : CMP.b #$47 : BEQ .turtleRock - LDA Overworld_TileAttr, X + LDA.b OverworldIndex : CMP.b #$47 : BEQ .turtleRock + LDA.l Overworld_TileAttr, X JML.l Overworld_GetTileAttrAtLocation_continue .turtleRock - LDA Inverted_TR_TileAttributes, X + LDA.l Inverted_TR_TileAttributes, X JML.l Overworld_GetTileAttrAtLocation_continue diff --git a/itemdowngrade.asm b/itemdowngrade.asm index a1f19f6..53efeec 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -32,7 +32,7 @@ ItemDowngradeFixMain: CPY.b #$00 : BEQ .isUncleSwordShield ; Fighter's Sword & Shield .done - STA [$00] ; thing we wrote over part 2 + STA.b [Scrap00] ; thing we wrote over part 2 .dontWrite RTS .isPowerGloves @@ -41,8 +41,8 @@ RTS .isBlueBoomerang .isBow .isBowAndArrows - CMP [$00] : !BGE .done ; finished if we're upgrading - LDA [$00] ; reload old value + CMP.b [$00] : !BGE .done ; finished if we're upgrading + LDA.b [$00] ; reload old value RTS .isSilverArrowBow .isRedBoomerang @@ -51,31 +51,31 @@ RTS .isShovel .isMushroom PHA - LDA [$00] : BNE + ; don't upgrade if we already have the toggle for it + LDA.b [Scrap00] : BNE + ; don't upgrade if we already have the toggle for it PLA - STA [$00] + STA.b [Scrap00] RTS + PLA RTS .isSword PHA - LDA HighestSword : STA $04 + LDA.l HighestSword : STA.b Scrap04 TYA ; load sword item CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert extra fighter's sword to normal one CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert extra master sword to normal one - INC : CMP $04 : !BGE + ; skip if highest is lower (this is an upgrade) - LDA $04 : DEC ; convert to item id - TAY : PLA : LDA $04 ; put sword id into the thing to write + INC : CMP.b Scrap04 : !BGE + ; skip if highest is lower (this is an upgrade) + LDA.b Scrap04 : DEC ; convert to item id + TAY : PLA : LDA.b Scrap04 ; put sword id into the thing to write JMP .done + PLA JMP .done .isUncleSwordShield PHA - LDA HighestSword : STA [$00] ; already set to 1 if we had no sword, always keep highest - INC $00 - LDA HighestShield : STA [$00] + LDA.l HighestSword : STA.b [Scrap00] ; already set to 1 if we had no sword, always keep highest + INC.b Scrap00 + LDA.l HighestShield : STA.b [Scrap00] PLA RTS ;================================================================================ diff --git a/lampmantlecone.asm b/lampmantlecone.asm index 1262087..f897b97 100644 --- a/lampmantlecone.asm +++ b/lampmantlecone.asm @@ -4,39 +4,39 @@ ; Output: 0 for darkness, 1 for lamp cone ;-------------------------------------------------------------------------------- LampCheck: - LDA $7F50C4 : CMP.b #$01 : BNE + : RTL : + - CMP.b #$FF : BNE + : INC : RTL : + - - LDA LampEquipment : BNE .done ; skip if we already have lantern - - LDA CurrentWorld : BNE + - .lightWorld - LDA $040C : BNE ++ ; check if we're in sewers - LDA LampConeSewers : BRA .done - ++ - LDA LampConeLightWorld : BRA .done - + - .darkWorld - LDA LampConeDarkWorld - .done - ;BNE + : STZ $1D : + ; remember to turn cone off after a torch + LDA.l LightConeModifier : CMP.b #$01 : BNE + : RTL : + + CMP.b #$FF : BNE + : INC : RTL : + + LDA.l LampEquipment : BNE .lamp ; skip if we already have lantern + LDA.w DungeonID : BNE + ; check if we're in sewers + LDA.l LampConeSewers : RTL + + : TDC + .lamp RTL ;================================================================================ ;-------------------------------------------------------------------------------- ; Output: 0 locked, 1 open ;-------------------------------------------------------------------------------- CheckForZelda: - LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling - LDA.b #$01 ; pretend we have zelda anyway - RTL - + - LDA FollowerIndicator + LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling + LDA.b #$01 ; pretend we have zelda anyway + RTL + + + LDA.l FollowerIndicator RTL ;================================================================================ -;-------------------------------------------------------------------------------- SetOverlayIfLamp: - JSL.l LampCheck - STA $1D ; write it directly to the overlay, this isn't a terrible idea at all + JSL.l LampCheck + STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all RTL ;================================================================================ -;LDA CurrentWorld : EOR #$40 : LSR #6 : AND #$01 ; return the same result as having the lantern in the light world +; Mantle Object Changes +;-------------------------------------------------------------------------------- +Mantle_CorrectPosition: + LDA.l ProgressFlags : AND.b #$04 : BEQ + + LDA.b #$0A : STA.w SpritePosXLow, X ; just spawn it off to the side where we know it should be + LDA.b #$03 : STA.w SpritePosXHigh, X + LDA.b #$90 : STA.w SpriteSpawnStep, X + + + LDA.w SpritePosYLow, X : !ADD.b #$03 ; thing we did originally +RTL +;-------------------------------------------------------------------------------- diff --git a/maidencrystals.asm b/maidencrystals.asm index b02ae1b..1ee421d 100644 --- a/maidencrystals.asm +++ b/maidencrystals.asm @@ -6,20 +6,13 @@ ; MaidenCrystalScript ;-------------------------------------------------------------------------------- MaidenCrystalScript: - LDA.b #$00 : STA $7F5091 - STZ $02D8 - STZ $02DA - STZ $2E - LDA #$02 : STA $2F - - ; Load the dungeon index. Is it the Dark Palace? - ;LDA $040C : !SUB.b #$0A : TAY : CPY.b #$02 : BNE + - ; LDA MapIcons : CMP.b #$07 : BCS ++ : LDA.b #$07 : STA MapIcons : ++ - ;+ - - LDA CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals - LDA.b #$08 : STA MapIcons ; Update the map icon to just be Ganon's Tower + LDA.b #$00 : STA.l BusyItem + STZ.w ItemReceiptID + STZ.w ItemReceiptPose + STZ.b LinkAnimationStep + LDA.b #$02 : STA.w LinkDirection + 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 ;-------------------------------------------------------------------------------- diff --git a/mantle.asm b/mantle.asm deleted file mode 100644 index 5b60c1b..0000000 --- a/mantle.asm +++ /dev/null @@ -1,12 +0,0 @@ -;================================================================================ -; Mantle Object Changes -;-------------------------------------------------------------------------------- -Mantle_CorrectPosition: - LDA ProgressFlags : AND.b #$04 : BEQ + - LDA.b #$0A : STA $0D10, X ; just spawn it off to the side where we know it should be - LDA.b #$03 : STA $0D30, X - LDA.b #$90 : STA $0ED0, X - + - LDA $0D00, X : !ADD.b #$03 ; thing we did originally -RTL -;-------------------------------------------------------------------------------- diff --git a/map.asm b/map.asm deleted file mode 100644 index c682a0c..0000000 --- a/map.asm +++ /dev/null @@ -1,16 +0,0 @@ -; ============================================================================== -;PrepMapZoom: -; LDA.b #$80 : STA $211A ; thing we wrote over -; -; LDA.b #$00 : STA !MAP_ZOOM -;RTL -; ============================================================================== -;ForceMapZoom: -; LDA !MAP_ZOOM : BNE .isPreset -; LDA.b #$01 -; LDA.b #$01 : STA !MAP_ZOOM -;RTL -; .isPreset -; LDA $F6 : AND.b #$70 -;RTL -; ============================================================================== \ No newline at end of file diff --git a/medallions.asm b/medallions.asm index c70a57c..cd3ceb3 100644 --- a/medallions.asm +++ b/medallions.asm @@ -3,45 +3,45 @@ ;-------------------------------------------------------------------------------- TryOpenMire: ; Checks if we're in the Swamp of Evil. - LDA $8A : CMP.b #$70 : BNE .untriggered + LDA.b OverworldIndex : CMP.b #$70 : BNE .untriggered ; Checks whether the Misery Mire dungeon is already revealed. - LDA OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .untriggered + LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .untriggered ; You have to be in the trigger window. LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered ; Do the 3rd animation for opening entrances - LDA.b #$03 : STA $04C6 + LDA.b #$03 : STA.w OWEntranceCutscene - STZ $B0 ; reset the sub-submodule index - STZ $C8 ; reset this other index. + STZ.b SubSubModule ; reset the sub-submodule index + STZ.b ScrapBufferBD+$0B ; reset this other index. .untriggered RTL ;-------------------------------------------------------------------------------- TryOpenTRock: ; Checks if we're at Turtle Rock. - LDA $8A : CMP.b #$47 : BNE .untriggered + LDA.b OverworldIndex : CMP.b #$47 : BNE .untriggered ; Checks whether the Turtle Rock dungeon is already revealed. - LDA OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .untriggered + LDA.l OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .untriggered ; You have to be in the trigger window. LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered ; Do the 4rd animation for opening entrances - LDA.b #$04 : STA $04C6 + LDA.b #$04 : STA.w OWEntranceCutscene - STZ $B0 ; reset the sub-submodule index - STZ $C8 ; reset this other index. + STZ.b SubSubModule ; reset the sub-submodule index + STZ.b ScrapBufferBD+$0B ; reset this other index. .untriggered RTL ;-------------------------------------------------------------------------------- MedallionTrigger_Bombos: - STZ $50 ; stuff we wrote over - STZ $0FC1 + STZ.b Strafe ; stuff we wrote over + STZ.w FreezeSprites PHA LDA.l MireRequiredMedallion : BNE + @@ -52,10 +52,8 @@ MedallionTrigger_Bombos: PLA RTL ;-------------------------------------------------------------------------------- -!EPILEPSY_TIMER = "$7F5041" MedallionTrigger_Ether: PHA - LDA.b #$00 : STA !EPILEPSY_TIMER LDA.l MireRequiredMedallion : CMP.b #$01 : BNE + JSL.l TryOpenMire + LDA.l TRockRequiredMedallion : CMP.b #$01 : BNE + diff --git a/msu.asm b/msu.asm index c4d1318..2ca3da8 100644 --- a/msu.asm +++ b/msu.asm @@ -81,86 +81,48 @@ ; ;======================================= -!REG_MSU_STATUS = $2000 +!VAL_MSU_ID_01 = $2D53 ; 'S-' +!VAL_MSU_ID_23 = $534D ; 'MS' +!VAL_MSU_ID_45 = $3155 ; 'U1' -!REG_MSU_ID_0 = $2002 -!REG_MSU_ID_1 = $2003 -!REG_MSU_ID_2 = $2004 -!REG_MSU_ID_3 = $2005 -!REG_MSU_ID_4 = $2006 -!REG_MSU_ID_5 = $2007 +!FLAG_MSU_PLAY = $01 +!FLAG_MSU_REPEAT = $02 +!FLAG_MSU_RESUME = $04 +!FLAG_MSU_STATUS_TRACK_MISSING = $08 +!FLAG_MSU_STATUS_AUDIO_PLAYING = $10 +!FLAG_MSU_STATUS_AUDIO_REPEATING = $20 +!FLAG_MSU_STATUS_AUDIO_BUSY = $40 +!FLAG_MSU_STATUS_DATA_BUSY = $80 -!REG_MSU_ID_01 = $2002 -!REG_MSU_ID_23 = $2004 -!REG_MSU_ID_45 = $2006 +!FLAG_RESUME_CANCEL = $01 +!FLAG_RESUME_FADEIN = $02 +!VAL_COMMAND_STOP_PLAYBACK = $F0 +!VAL_COMMAND_FADE_OUT = $F1 +!VAL_COMMAND_FADE_HALF = $F2 +!VAL_COMMAND_FULL_VOLUME = $F3 +!VAL_COMMAND_MUTE_SPC = $FA +!VAL_COMMAND_UNMUTE_SPC = $FB +!VAL_COMMAND_LOAD_NEW_BANK = $FF -!VAL_MSU_ID_0 = #$53 ; 'S' -!VAL_MSU_ID_1 = #$2D ; '-' -!VAL_MSU_ID_2 = #$4D ; 'M' -!VAL_MSU_ID_3 = #$53 ; 'S' -!VAL_MSU_ID_4 = #$55 ; 'U' -!VAL_MSU_ID_5 = #$31 ; '1' - -!VAL_MSU_ID_01 = #$2D53 ; 'S-' -!VAL_MSU_ID_23 = #$534D ; 'MS' -!VAL_MSU_ID_45 = #$3155 ; 'U1' - - -!REG_MSU_TRACK = $2004 -!REG_MSU_TRACK_LO = $2004 -!REG_MSU_TRACK_HI = $2005 -!REG_MSU_VOLUME = $2006 -!REG_MSU_CONTROL = $2007 - - -!FLAG_MSU_PLAY = #$01 -!FLAG_MSU_REPEAT = #$02 -!FLAG_MSU_RESUME = #$04 -!FLAG_MSU_STATUS_TRACK_MISSING = #$08 -!FLAG_MSU_STATUS_AUDIO_PLAYING = #$10 -!FLAG_MSU_STATUS_AUDIO_REPEATING = #$20 -!FLAG_MSU_STATUS_AUDIO_BUSY = #$40 -!FLAG_MSU_STATUS_DATA_BUSY = #$80 - -!FLAG_RESUME_CANCEL = #$01 -!FLAG_RESUME_FADEIN = #$02 - -!REG_CURRENT_MSU_TRACK = $010B -!REG_CURRENT_VOLUME = $0127 -!REG_TARGET_VOLUME = $0129 -!REG_CURRENT_TRACK = $0130 -!REG_CURRENT_COMMAND = $0133 - -!REG_SPC_CONTROL = $2140 -!REG_NMI_FLAGS = $4210 - -!VAL_COMMAND_STOP_PLAYBACK = #$F0 -!VAL_COMMAND_FADE_OUT = #$F1 -!VAL_COMMAND_FADE_HALF = #$F2 -!VAL_COMMAND_FULL_VOLUME = #$F3 -!VAL_COMMAND_MUTE_SPC = #$FA -!VAL_COMMAND_UNMUTE_SPC = #$FB -!VAL_COMMAND_LOAD_NEW_BANK = #$FF - -!VAL_VOLUME_INCREMENT = #$10 -!VAL_VOLUME_DECREMENT = #$02 -!VAL_VOLUME_HALF = #$80 -!VAL_VOLUME_FULL = #$FF +!VAL_VOLUME_INCREMENT = $10 +!VAL_VOLUME_DECREMENT = $02 +!VAL_VOLUME_HALF = $80 +!VAL_VOLUME_FULL = $FF ;================================================================================ ; Check if A has an overworld track ;-------------------------------------------------------------------------------- IsOverworldTrack: - CMP #02 : BEQ .yes ; 2 - Hyrule Field - CMP #03 : BEQ .yes ; 3 - Time of Falling Rain - CMP #04 : BEQ .yes ; 4 - The Silly Pink Rabbit - CMP #05 : BEQ .yes ; 5 - Forest of Mystery - CMP #07 : BEQ .yes ; 7 - Kakariko Village - CMP #09 : BEQ .yes ; 9 - Dark Golden Land - CMP #15 : BEQ .yes ; 15 - Dark Woods - CMP #60 : BEQ .yes ; 60 - Light World OW (after ped pull) - CMP #61 : BEQ .yes ; 61 - Dark World OW (with all crystals) + CMP.b #02 : BEQ .yes ; 2 - Hyrule Field + CMP.b #03 : BEQ .yes ; 3 - Time of Falling Rain + CMP.b #04 : BEQ .yes ; 4 - The Silly Pink Rabbit + CMP.b #05 : BEQ .yes ; 5 - Forest of Mystery + CMP.b #07 : BEQ .yes ; 7 - Kakariko Village + CMP.b #09 : BEQ .yes ; 9 - Dark Golden Land + CMP.b #15 : BEQ .yes ; 15 - Dark Woods + CMP.b #60 : BEQ .yes ; 60 - Light World OW (after ped pull) + CMP.b #61 : BEQ .yes ; 61 - Dark World OW (with all crystals) .no CLC : RTS .yes @@ -172,7 +134,7 @@ SEC : RTS ;-------------------------------------------------------------------------------- IsResumableTrack: PHA - LDA MSUResumeType : BEQ + + LDA.l MSUResumeType : BEQ + PLA JSR IsOverworldTrack RTS @@ -187,54 +149,54 @@ RTS ;-------------------------------------------------------------------------------- CheckMusicLoadRequest: PHP : PHB : PHD : REP #$30 : PHA : PHX : PHY - LDA #$0000 : TCD : SEP #$20 : PHA : PLB - LDA !REG_MUSIC_CONTROL_REQUEST : BEQ .skip+3 : BMI .skip+3 - CMP !REG_CURRENT_COMMAND : BNE .continue + LDA.w #$0000 : TCD : SEP #$20 : PHA : PLB + LDA.w MusicControlRequest : BEQ .skip+3 : BMI .skip+3 + CMP.w CurrentControlRequest : BNE .continue CMP.b #22 : BNE .skip ; Check GT when mirroring from upstairs - LDA !REG_CURRENT_MSU_TRACK : CMP.b #59 : BNE .skip - LDA.b #$00 : STA !REG_CURRENT_COMMAND + LDA.w CurrentMSUTrack : CMP.b #59 : BNE .skip + LDA.b #$00 : STA.w CurrentControlRequest BRA .continue .skip - LDA !REG_MUSIC_CONTROL_REQUEST - STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST + LDA.w MusicControlRequest + STA.w MusicControl : STZ.w MusicControlRequest REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP RTL .continue - LDA TournamentSeed : BNE +++ - LDA !REG_MSU_PACK_REQUEST - CMP !REG_MSU_PACK_CURRENT : BEQ +++ - CMP !REG_MSU_PACK_COUNT : !BLT ++ - CMP #$FE : !BLT + - STA !REG_MSU_PACK_CURRENT + LDA.l TournamentSeed : BNE +++ + LDA.w MSUPackRequest + CMP.w MSUPackCurrent : BEQ +++ + CMP.w MSUPackCount : !BLT ++ + CMP.b #$FE : !BLT + + STA.w MSUPackCurrent SEP #$10 - LDA #$00 - LDX #$07 + LDA.b #$00 + LDX.b #$07 - - STA !REG_MSU_FALLBACK_TABLE,X + STA.w MSUFallbackTable,X DEX : BPL - REP #$10 BRA +++ - + : LDA !REG_MSU_PACK_CURRENT : STA !REG_MSU_PACK_REQUEST - ++ : STA !REG_MSU_PACK_CURRENT + + : LDA.w MSUPackCurrent : STA.w MSUPackRequest + ++ : STA.w MSUPackCurrent JSL MSUInit_check_fallback +++ - LDA !REG_MUSIC_CONTROL_REQUEST : CMP #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE - LDA NoBGM : BNE + - LDA !REG_MSU_PACK_CURRENT : CMP #$FE : BNE ++ + LDA.w MusicControlRequest : CMP.b #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE + LDA.l NoBGM : BNE + + LDA.w MSUPackCurrent : CMP.b #$FE : BNE ++ + : JMP .mute ++ - LDX !REG_MSU_ID_01 : CPX !VAL_MSU_ID_01 : BEQ + + LDX.w MSUID : CPX.w #!VAL_MSU_ID_01 : BEQ + - : JMP .unmute + - LDX !REG_MSU_ID_23 : CPX !VAL_MSU_ID_23 : BNE - - LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE - + LDX.w MSUID+2 : CPX.w #!VAL_MSU_ID_23 : BNE - + LDX.w MSUID+4 : CPX.w #!VAL_MSU_ID_45 : BNE - SEP #$10 ; Load alternate or dungeon-specific tracks - LDA !REG_MUSIC_CONTROL_REQUEST + LDA.w MusicControlRequest CMP.b #02 : BEQ .lightworld CMP.b #09 : BEQ .darkworld @@ -246,39 +208,39 @@ CheckMusicLoadRequest: CMP.b #21 : BNE .check_fallback ;.boss - LDA $040C : LSR : !ADD.b #45 + LDA.w DungeonID : LSR : !ADD.b #45 BRA .check_fallback-3 .lightworld PHA - LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ + + LDA.l OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ + PLA LDA.b #60 : BRA .check_fallback-3 + -- : PLA : BRA .check_fallback-3 .darkworld PHA - LDA CrystalsField : CMP.b #$7F : BNE -- + LDA.l CrystalsField : CMP.b #$7F : BNE -- - : PLA LDA.b #61 : BRA .check_fallback-3 .darkwoods PHA - LDA CrystalsField : CMP.b #$7F : BEQ - - LDA CurrentWorld : BEQ -- - LDA $8A : CMP #$40 : BNE -- + LDA.l CrystalsField : CMP.b #$7F : BEQ - + LDA.l CurrentWorld : BEQ -- + LDA.b OverworldIndex : CMP #$40 : BNE -- PLA LDA.b #15 : BRA .check_fallback-3 .castle - LDA $040C + LDA.w DungeonID CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2 .dungeon - LDA $040C : LSR : !ADD.b #33 : STA !REG_MUSIC_CONTROL_REQUEST + LDA.w DungeonID : LSR : !ADD.b #33 : STA.w MusicControlRequest .check_fallback - LDX !REG_MUSIC_CONTROL_REQUEST - LDA MusicShuffleTable-1,X : DEC : PHA + LDX.w MusicControlRequest + LDA.l MusicShuffleTable-1,X : DEC : PHA AND.b #$07 : TAY PLA : LSR #3 : TAX - LDA !REG_MSU_FALLBACK_TABLE,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute + LDA.w MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute - : CPY #$00 : BEQ + LSR : DEY : BRA - @@ -287,49 +249,49 @@ CheckMusicLoadRequest: AND.b #$01 : BEQ .secondary_fallback .mute - LDA.b !VAL_COMMAND_MUTE_SPC + LDA.b #!VAL_COMMAND_MUTE_SPC BRA .load .secondary_fallback - LDX !REG_MUSIC_CONTROL_REQUEST : LDA MSUExtendedFallbackList-1,X + LDX.w MusicControlRequest : LDA.l MSUExtendedFallbackList-1,X PHX - TAX : LDA MusicShuffleTable-1,X + TAX : LDA.l MusicShuffleTable-1,X PLX - CMP !REG_MUSIC_CONTROL_REQUEST : BEQ .unmute + CMP.w MusicControlRequest : BEQ .unmute CPX #35 : !BLT + CPX #47 : !BLT .dungeon_fallback + - STA !REG_MUSIC_CONTROL_REQUEST + STA.w MusicControlRequest BRA .check_fallback .dungeon_fallback PHB : REP #$10 - LDX $040C + LDX.w DungeonID LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers - LDY $00 : PHY + LDY.b Scrap00 : PHY REP #$20 - LDA MSUDungeonFallbackList,X : STA $00 + LDA.l MSUDungeonFallbackList,X : STA.b Scrap00 SEP #$20 - LDA ($00) - PLY : STY $00 : SEP #$10 : PLB - TAX : LDA MusicShuffleTable-1,X - STA !REG_MUSIC_CONTROL_REQUEST + LDA.b (Scrap00) + PLY : STY.b Scrap00 : SEP #$10 : PLB + TAX : LDA.l MusicShuffleTable-1,X + STA.w MusicControlRequest JMP .check_fallback .unmute - LDA.b !VAL_COMMAND_UNMUTE_SPC + LDA.b #!VAL_COMMAND_UNMUTE_SPC .load REP #$10 - STZ $4200 - - : STA !REG_SPC_CONTROL : CMP !REG_SPC_CONTROL : BNE - ; Wait until mute/unmute command is ACK'ed - - : STZ !REG_SPC_CONTROL : LDA !REG_SPC_CONTROL : BNE - ; Wait until mute/unmute command is completed - LDA.b #$81 : STA $4200 + STZ.w NMITIMEN + - : STA.w APUIO0 : CMP.w APUIO0 : BNE - ; Wait until mute/unmute command is ACK'ed + - : STZ.w APUIO0 : LDA.w APUIO0 : BNE - ; Wait until mute/unmute command is completed + LDA.b #$81 : STA.w NMITIMEN - LDA !REG_MUSIC_CONTROL_REQUEST : CMP.b #08 : BEQ .done+3 ; No SFX during warp track + LDA.w MusicControlRequest : CMP.b #08 : BEQ .done+3 ; No SFX during warp track - LDA $10 + LDA.b GameMode CMP.b #$07 : BEQ .sfx_indoors CMP.b #$0E : BEQ .sfx_indoors CMP.b #$09 : BNE .done @@ -338,30 +300,30 @@ CheckMusicLoadRequest: SEP #$10 LDX.b #$09 - LDA $8A ; Dark Death Mountain + LDA.b OverworldIndex ; Dark Death Mountain CMP.b #$43 : BEQ + : CMP.b #$45 : BEQ + : CMP.b #$47 : BEQ + LDX.b #$05 + CMP.b #$70 : BNE + ; Misery Mire - LDA OverworldEventDataWRAM+$70 : AND.b #$20 : BEQ .rain + LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BEQ .rain + - LDA ProgressIndicator : CMP.b #$02 : BCS + + LDA.l ProgressIndicator : CMP.b #$02 : BCS + .rain LDX.b #$01 + - STX $012D + STX.w SFX1 REP #$10 .done - LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST + LDA.w MusicControlRequest : STA.w MusicControl : STZ.w MusicControlRequest REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP RTL .sfx_indoors - LDA !REG_MUSIC_CONTROL_REQUEST : STA !REG_MUSIC_CONTROL : STZ !REG_MUSIC_CONTROL_REQUEST - SEP #$20 : LDA.b #$05 : STA $012D + LDA.w MusicControlRequest : STA.w MusicControl : STZ.w MusicControlRequest + SEP #$20 : LDA.b #$05 : STA.w SFX1 REP #$30 : PLY : PLX : PLA : PLD : PLB : PLP JML Module_PreDungeon_setAmbientSfx ;-------------------------------------------------------------------------------- @@ -371,28 +333,28 @@ CheckMusicLoadRequest: ;-------------------------------------------------------------------------------- SpiralStairsPreCheck: REP #$20 ; thing we wrote over - LDA $A0 + LDA.b RoomIndex CMP.w #$000C : BNE + - LDA !REG_CURRENT_MSU_TRACK : AND.w #$00FF : CMP.w #59 : BNE .done + LDA.w CurrentMSUTrack : AND.w #$00FF : CMP.w #59 : BNE .done BRA .fade + CMP.w #$006B : BNE .done+2 - LDA TournamentSeed : CMP.w #$0001 : BEQ + - LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .done - LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .done - LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done + LDA.l TournamentSeed : CMP.w #$0001 : BEQ + + LDA.w MSUID : CMP.w #!VAL_MSU_ID_01 : BNE .done + LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .done + LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .done + - LDA BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key - LDA !REG_MSU_FALLBACK_TABLE+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track + LDA.l BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key + LDA.w MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track .fade - LDX.b #$F1 : STX !REG_MUSIC_CONTROL_REQUEST + LDX.b #$F1 : STX.w MusicControlRequest .done - LDA $A0 ; thing we wrote over + LDA.b RoomIndex ; thing we wrote over RTL ;-------------------------------------------------------------------------------- @@ -400,24 +362,24 @@ SpiralStairsPreCheck: ; Change music on stair transition (ToH/GT) ;-------------------------------------------------------------------------------- SpiralStairsPostCheck: - LDA $A0 + LDA.b RoomIndex CMP.w #$000C : BNE + ; Ganon's tower entrance - LDX $0130 : CPX.b #$F1 : BNE .done ; Check that we were fading out + LDX.w LastAPUCommand : CPX.b #$F1 : BNE .done ; Check that we were fading out - LDX #22 : STX !REG_MUSIC_CONTROL_REQUEST + LDX.b #22 : STX.w MusicControlRequest BRA .done + CMP.w #$006B : BNE .done ; Ganon's tower upstairs (with big key) - LDX $0130 : CPX.b #$F1 : BNE .done ; Check that we were fading out + LDX.w LastAPUCommand : CPX.b #$F1 : BNE .done ; Check that we were fading out - LDX #59 : STX !REG_MUSIC_CONTROL_REQUEST + LDX.b #59 : STX.w MusicControlRequest .done - LDX.b #$1C : LDA $A0 ; thing we wrote over + LDX.b #$1C : LDA.b RoomIndex ; thing we wrote over RTL ;-------------------------------------------------------------------------------- @@ -425,9 +387,9 @@ SpiralStairsPostCheck: ; Make sure expanded OST tracks load properly after death/fairy revival ;-------------------------------------------------------------------------------- StoreMusicOnDeath: - STA.l $7EC227 ; thing we wrote over - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done - LDA !REG_CURRENT_MSU_TRACK : STA.l $7EC227 + STA.l GameOverSongCache ; thing we wrote over + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done + LDA.w CurrentMSUTrack : STA.l GameOverSongCache .done RTL ;-------------------------------------------------------------------------------- @@ -438,19 +400,19 @@ StoreMusicOnDeath: MSUInit: PHP - LDA #$00 - STA !MSU_LOADED_TRACK - STA !MSU_RESUME_TRACK - STA !MSU_RESUME_TIME : STA !MSU_RESUME_TIME+1 : STA !MSU_RESUME_TIME+2 : STA !MSU_RESUME_TIME+3 - STA !MSU_RESUME_CONTROL + LDA.b #$00 + STA.w MSULoadedTrack + STA.w MSUResumeTrack + STA.w MSUResumeTime : STA.w MSUResumeTime+1 : STA.w MSUResumeTime+2 : STA.w MSUResumeTime+3 + STA.w MSUResumeControl - LDA NoBGM : BNE .done + LDA.l NoBGM : BNE .done REP #$20 - LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .done - LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .done - LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done + LDA.w MSUID : CMP.w #!VAL_MSU_ID_01 : BNE .done + LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .done + LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .done ; Count the number of available MSU-1 packs LDA.w #$0000 @@ -461,37 +423,37 @@ MSUInit: .check_pack TYA REP #$20 - STA !REG_MSU_TRACK + STA.w MSUTRACK !ADD.w #100 INX SEP #$20 TAY .wait_pack - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack - TXA : STA !REG_MSU_PACK_COUNT + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack + TXA : STA.w MSUPackCount BRA + ; Check the current MSU-1 pack for tracks that require SPC fallback .check_fallback PHP : SEP #$10 - LDA NoBGM : BNE .done + LDA.l NoBGM : BNE .done + : LDA.b #64 LDX.b #7 LDY.b #7 .check_track - STA !REG_MSU_TRACK_LO - STZ !REG_MSU_TRACK_HI + STA.w MSUTRACK + STZ.w MSUTRACK+1 PHA CLC .wait_track - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_track - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE + + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_track + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE + SEC + - LDA !REG_MSU_FALLBACK_TABLE,X : ROL : STA !REG_MSU_FALLBACK_TABLE,X + LDA.w MSUFallbackTable,X : ROL : STA.w MSUFallbackTable,X DEY : BPL .next_track DEX : BPL + @@ -512,32 +474,32 @@ MSUInit: ;-------------------------------------------------------------------------------- MSUStopPlaying: PHA : XBA : PHA - LDA !MSU_LOADED_TRACK + LDA.w MSULoadedTrack JSR IsResumableTrack : BCC + ; dont save if we already saved recently REP #$20 - LDA !MSU_RESUME_TRACK : AND #$00FF : BEQ ++ - LDA NMIFrames : !SUB !MSU_RESUME_TIME : PHA - LDA NMIFrames+2 : SBC !MSU_RESUME_TIME+2 : BNE +++ - PLA : CMP MSUResumeTimer : !BLT .too_early + LDA.w MSUResumeTrack : AND #$00FF : BEQ ++ + LDA.l NMIFrames : !SUB MSUResumeTime : PHA + LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE +++ + PLA : CMP.l MSUResumeTimer : !BLT .too_early BRA ++ +++ PLA ++ ; saving - LDA NMIFrames : STA !MSU_RESUME_TIME - LDA NMIFrames+2 : STA !MSU_RESUME_TIME+2 + LDA.l NMIFrames : STA.w MSUResumeTime + LDA.l NMIFrames+2 : STA.w MSUResumeTime+2 SEP #$20 - LDA !MSU_LOADED_TRACK : STA !MSU_RESUME_TRACK - LDA #$00 : STA !MSU_LOADED_TRACK ; dont take this path if we're calling again - LDA !FLAG_MSU_RESUME : STA !REG_MSU_CONTROL ; save this track's position + LDA.w MSULoadedTrack : STA.w MSUResumeTrack + LDA.b #$00 : STA.w MSULoadedTrack ; dont take this path if we're calling again + LDA.b #!FLAG_MSU_RESUME : STA.w MSUCTL ; save this track's position PLA : XBA : PLA RTS .too_early SEP #$20 + - LDA #$00 : STA !REG_MSU_CONTROL + LDA.b #$00 : STA.w MSUCTL PLA : XBA : PLA RTS ;-------------------------------------------------------------------------------- @@ -547,124 +509,124 @@ RTS ;-------------------------------------------------------------------------------- MSUMain: SEP #$20 ; set 8-BIT accumulator - LDA $4210 ; thing we wrote over + LDA.w RDNMI ; thing we wrote over REP #$20 ; set 16-BIT accumulator - LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BEQ .continue + LDA.w MSUID : CMP.w #!VAL_MSU_ID_01 : BEQ .continue .nomsu SEP #$30 - JML SPCContinue .continue - LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .nomsu - LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu + LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .nomsu + LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .nomsu SEP #$30 - LDX !REG_MUSIC_CONTROL : BEQ + + LDX.w MusicControl : BEQ + JMP .command_ff + - LDA !REG_MSU_DELAYED_COMMAND : BEQ .do_fade + LDA.w MSUDelayedCommand : BEQ .do_fade .check_busy - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BNE - + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE - .ready - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE - + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE - .start - LDA !MSU_RESUME_CONTROL : BIT !FLAG_RESUME_CANCEL : BEQ + - EOR !FLAG_RESUME_CANCEL : STA !MSU_RESUME_CONTROL - REP #$20 : LDA !REG_MSU_LOADED_TRACK : STA !REG_MSU_TRACK : SEP #$20 + LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ + + EOR.b #!FLAG_RESUME_CANCEL : STA.w MSUResumeControl + REP #$20 : LDA.w MSULoadedTrack : STA.w MSUTRACK : SEP #$20 BRA - + - LDA !VAL_VOLUME_FULL - STA !REG_TARGET_VOLUME + LDA.b #!VAL_VOLUME_FULL + STA.w TargetVolume - LDA !MSU_RESUME_CONTROL : BIT !FLAG_RESUME_FADEIN : BEQ + - EOR !FLAG_RESUME_FADEIN : STA !MSU_RESUME_CONTROL - LDA #$00 + LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ + + EOR.b #!FLAG_RESUME_FADEIN : STA.w MSUResumeControl + LDA.b #$00 BRA ++ + - LDA !VAL_VOLUME_FULL + LDA.b #!VAL_VOLUME_FULL ++ - STA !REG_CURRENT_VOLUME - STA !REG_MSU_VOLUME + STA.w CurrentVolume + STA.w MSUVOL - LDA !REG_CURRENT_MSU_TRACK : DEC : PHA + LDA.w CurrentMSUTrack : DEC : PHA AND.b #$07 : TAY PLA : LSR #3 : TAX - LDA !REG_MSU_FALLBACK_TABLE,X : BEQ +++ : CMP.b #$FF : BEQ ++ + LDA.w MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++ - : CPY #$00 : BEQ + LSR : DEY : BRA - + AND.b #$01 : BEQ +++ - ++ : LDA !REG_MSU_DELAYED_COMMAND - +++ : STA !REG_MSU_CONTROL + ++ : LDA.w MSUDelayedCommand + +++ : STA.w MSUCTL LDA.b #$00 - STA !REG_MSU_DELAYED_COMMAND + STA.w MSUDelayedCommand JML SPCContinue .do_fade: - LDA !REG_CURRENT_VOLUME : CMP !REG_TARGET_VOLUME : BNE + + LDA.w CurrentVolume : CMP.w TargetVolume : BNE + JML SPCContinue + : BCC .increment .decrement - SBC !VAL_VOLUME_DECREMENT : BCC .mute - CMP !REG_TARGET_VOLUME : !BGE .set - LDA !REG_TARGET_VOLUME : BRA .set + SBC.b #!VAL_VOLUME_DECREMENT : BCC .mute + CMP.w TargetVolume : !BGE .set + LDA.w TargetVolume : BRA .set .mute - STZ !REG_CURRENT_VOLUME + STZ.w CurrentVolume JSR MSUStopPlaying BRA .set .increment - ADC !VAL_VOLUME_INCREMENT : BCS .max - CMP !REG_TARGET_VOLUME : !BLT .set - LDA !REG_TARGET_VOLUME : BRA .set + ADC.b #!VAL_VOLUME_INCREMENT : BCS .max + CMP.w TargetVolume : !BLT .set + LDA.w TargetVolume : BRA .set .max - LDA !VAL_VOLUME_FULL + LDA.b #!VAL_VOLUME_FULL .set - STA !REG_CURRENT_VOLUME - STA !REG_MSU_VOLUME + STA.w CurrentVolume + STA.w MSUVOL JML SPCContinue .command_ff: - CPX !VAL_COMMAND_LOAD_NEW_BANK : BNE .command_f3 + CPX.b #!VAL_COMMAND_LOAD_NEW_BANK : BNE .command_f3 JML SPCContinue .command_f3: - CPX !VAL_COMMAND_FULL_VOLUME : BNE .command_f2 - LDA !VAL_VOLUME_FULL - STA !REG_TARGET_VOLUME + CPX.b #!VAL_COMMAND_FULL_VOLUME : BNE .command_f2 + LDA.b #!VAL_VOLUME_FULL + STA.w TargetVolume JML SPCContinue .command_f2: - CPX !VAL_COMMAND_FADE_HALF : BNE .command_f1 - LDA !VAL_VOLUME_HALF - STA !REG_TARGET_VOLUME + CPX.b #!VAL_COMMAND_FADE_HALF : BNE .command_f1 + LDA.b #!VAL_VOLUME_HALF + STA.w TargetVolume JML SPCContinue .command_f1: - CPX !VAL_COMMAND_FADE_OUT : BNE .command_f0 - STZ !REG_TARGET_VOLUME - STZ !REG_CURRENT_MSU_TRACK + CPX.b #!VAL_COMMAND_FADE_OUT : BNE .command_f0 + STZ.w TargetVolume + STZ.w CurrentMSUTrack JML SPCContinue .command_f0: - CPX !VAL_COMMAND_STOP_PLAYBACK : !BLT .load_track - CPX !VAL_COMMAND_MUTE_SPC : BEQ + ; Don't allow executing the mute/umute - CPX !VAL_COMMAND_UNMUTE_SPC : BNE ++ ; commands during NMI like this - + : LDA.b #$00 : STA !REG_MUSIC_CONTROL + CPX.b #!VAL_COMMAND_STOP_PLAYBACK : !BLT .load_track + CPX.b #!VAL_COMMAND_MUTE_SPC : BEQ + ; Don't allow executing the mute/umute + CPX.b #!VAL_COMMAND_UNMUTE_SPC : BNE ++ ; commands during NMI like this + + : LDA.b #$00 : STA.w MusicControl ++ : JML SPCContinue .load_track: - CPX !REG_CURRENT_MSU_TRACK : BNE + - - : CPX #27 : BEQ + + CPX.w CurrentMSUTrack : BNE + + - : CPX.b #27 : BEQ + TXA JMP .done+1 + - CPX !REG_CURRENT_COMMAND : BEQ - + CPX.w CurrentControlRequest : BEQ - LDA.b #$00 : XBA - LDA !REG_MSU_PACK_CURRENT : BEQ + - - : CMP !REG_MSU_PACK_COUNT : !BLT + - !SUB !REG_MSU_PACK_COUNT : BRA - + LDA.w MSUPackCurrent : BEQ + + - : CMP.w MSUPackCount : !BLT + + !SUB.w MSUPackCount : BRA - + JSR MSUStopPlaying @@ -676,62 +638,62 @@ MSUMain: !ADD.w #100 DEX : BNE - + - STA !REG_MSU_TRACK - STA !REG_MSU_LOADED_TRACK + STA.w MSUTRACK + STA.w MSULoadedTrack SEP #$20 PLX - TXA : CMP !MSU_RESUME_TRACK : BNE + ; dont resume if too late + TXA : CMP.w MSUResumeTrack : BNE + ; dont resume if too late REP #$20 - LDA NMIFrames : !SUB !MSU_RESUME_TIME : PHA - LDA NMIFrames+2 : SBC !MSU_RESUME_TIME+2 : BNE ++ - PLA : CMP MSUResumeTimer : !BGE +++ + LDA.l NMIFrames : !SUB MSUResumeTime : PHA + LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE ++ + PLA : CMP.l MSUResumeTimer : !BGE +++ SEP #$20 - LDA !FLAG_RESUME_FADEIN : BRA .done_resume + LDA.b #!FLAG_RESUME_FADEIN : BRA .done_resume ++ PLA +++ SEP #$20 - LDA !FLAG_RESUME_CANCEL + LDA.b #!FLAG_RESUME_CANCEL .done_resume: - STA !MSU_RESUME_CONTROL - LDA #$00 : STA !MSU_RESUME_TRACK + STA.w MSUResumeControl + LDA.b #$00 : STA.w MSUResumeTrack + CPX #07 : BNE + ; Kakariko Village - LDA $10 : CMP #$07 : BNE + + LDA.b GameMode : CMP #$07 : BNE + ; we're in link's house -> ignore - LDA #$00 + LDA.b #$00 BRA ++ + TXA ++ - STA !MSU_LOADED_TRACK - STX !REG_CURRENT_MSU_TRACK - LDA !REG_MSU_PACK_CURRENT : CMP #$FE : !BLT + - LDA #$00 : BRA ++ - + : LDA MSUTrackList-1,X - ++ : STA !REG_MSU_DELAYED_COMMAND - LDA MSUExtendedFallbackList-1,X + STA.w MSULoadedTrack + STX.w CurrentMSUTrack + LDA.w MSUPackCurrent : CMP #$FE : !BLT + + LDA.b #$00 : BRA ++ + + : LDA.l MSUTrackList-1,X + ++ : STA.w MSUDelayedCommand + LDA.l MSUExtendedFallbackList-1,X CMP.b #17 : BEQ + CMP.b #22 : BEQ + CMP.b #35 : !BLT .done CMP.b #47 : !BGE .done + : PHB : REP #$10 - LDX $040C + LDX.w DungeonID LDA.b #Music_Eastern>>16 : PHA : PLB ; Set bank to music pointers - LDY $00 : PHY + LDY.b Scrap00 : PHY REP #$20 - LDA MSUDungeonFallbackList,X : STA $00 + LDA.l MSUDungeonFallbackList,X : STA.b Scrap00 SEP #$20 - LDA ($00) - PLY : STY $00 : SEP #$10 : PLB + LDA.b (Scrap00) + PLY : STY.b Scrap00 : SEP #$10 : PLB .done - - : TAX : CMP MSUExtendedFallbackList-1,X : BEQ + - LDA MSUExtendedFallbackList-1,X : BRA - + - : TAX : CMP.l MSUExtendedFallbackList-1,X : BEQ + + LDA.l MSUExtendedFallbackList-1,X : BRA - + - STA !REG_MUSIC_CONTROL + STA.w MusicControl JML SPCContinue ;-------------------------------------------------------------------------------- @@ -740,12 +702,12 @@ MSUMain: ; Wait for the fanfare music to start, or else it can get skipped entirely ;-------------------------------------------------------------------------------- FanfarePreload: - STA.l !REG_MUSIC_CONTROL_REQUEST ; thing we wrote over + STA.w MusicControlRequest ; thing we wrote over PHA JSL CheckMusicLoadRequest WAI PLA - - : CMP.l !REG_SPC_CONTROL : BNE - + - : CMP.w APUIO0 : BNE - JML AddReceivedItem_doneWithSoundEffects ;-------------------------------------------------------------------------------- @@ -753,22 +715,22 @@ FanfarePreload: ; Wait for pendant fanfare to finish ;-------------------------------------------------------------------------------- PendantFanfareWait: - LDA TournamentSeed : BNE .spc - LDA FastFanfare : BNE .done + LDA.l TournamentSeed : BNE .spc + LDA.l FastFanfare : BNE .done REP #$20 - LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .spc - LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .spc - LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc + LDA.w MSUID : CMP.w #!VAL_MSU_ID_01 : BNE .spc + LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc + LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc SEP #$20 - LDA !REG_MSU_PACK_CURRENT : CMP #$FE : !BGE .spc - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc - LDA !REG_MSU_DELAYED_COMMAND : BNE .continue - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done + LDA.w MSUPackCurrent : CMP #$FE : !BGE .spc + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc + LDA.w MSUDelayedCommand : BNE .continue + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done .continue jml PendantFanfareContinue .spc SEP #$20 - LDA.l !REG_SPC_CONTROL : BNE .continue + LDA.l APUIO0 : BNE .continue .done jml PendantFanfareDone ;-------------------------------------------------------------------------------- @@ -777,32 +739,32 @@ PendantFanfareWait: ; Wait for crystal fanfare to finish ;-------------------------------------------------------------------------------- CrystalFanfareWait: - LDA TournamentSeed : BNE .spc - LDA FastFanfare : BNE .done + LDA.l TournamentSeed : BNE .spc + LDA.l FastFanfare : BNE .done REP #$20 - LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .spc - LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .spc - LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc + LDA.w MSUID : CMP.w #!VAL_MSU_ID_01 : BNE .spc + LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc + LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc SEP #$20 - LDA !REG_MSU_PACK_CURRENT : CMP #$FE : !BGE .spc - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc - LDA !REG_MSU_DELAYED_COMMAND : BNE .continue - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done + LDA.w MSUPackCurrent : CMP.b #$FE : !BGE .spc + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc + LDA.w MSUDelayedCommand : BNE .continue + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done .continue jml CrystalFanfareContinue .spc SEP #$20 - LDA.l !REG_SPC_CONTROL : BNE .continue + LDA.l APUIO0 : BNE .continue .done - jml CrystalFanfareDone + JML CrystalFanfareDone ;-------------------------------------------------------------------------------- ;================================================================================ ; Delay input scanning on startup/S&Q to avoid hard-lock from button mashing ;-------------------------------------------------------------------------------- StartupWait: - LDA $11 : CMP.b #$04 : BCC .done ; thing we wrote over - LDA !REG_SPC_CONTROL : BEQ .done-1 + LDA.b GameSubMode : CMP.b #$04 : BCC .done ; thing we wrote over + LDA.w APUIO0 : BEQ .done-1 CMP.b #$01 : BEQ .done CLC .done @@ -814,13 +776,13 @@ StartupWait: ;-------------------------------------------------------------------------------- EndingMusicWait: REP #$20 - LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .done - LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .done - LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done + LDA.w MSUID : CMP.w #!VAL_MSU_ID_01 : BNE .done + LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .done + LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .done SEP #$20 .wait - LDA.b $50 : BNE .done - LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait + LDA.b Strafe : BNE .done + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait .done SEP #$20 LDA.b #$22 diff --git a/music.asm b/music.asm index 2a9b1b8..94992eb 100644 --- a/music.asm +++ b/music.asm @@ -9,7 +9,7 @@ PreOverworld_LoadProperties_ChooseMusic: LDX.b #$02 ; Default light world theme - LDA $8A : ORA #$40 ; check both light and dark world DM at the same time + LDA.b OverworldIndex : ORA.b #$40 ; check both light and dark world DM at the same time CMP.b #$43 : BEQ .endOfLightWorldChecks CMP.b #$45 : BEQ .endOfLightWorldChecks CMP.b #$47 : BEQ .endOfLightWorldChecks @@ -17,47 +17,42 @@ PreOverworld_LoadProperties_ChooseMusic: LDY.b #$5A ; Main overworld animated tileset ; Skip village and lost woods checks if entering dark world or a special area - LDA $8A : CMP.b #$40 : !BGE .notVillageOrWoods + LDA.b OverworldIndex : CMP.b #$40 : !BGE .notVillageOrWoods LDX.b #$07 ; Default village theme - ; Check what phase we're in - ;LDA ProgressIndicator : CMP.b #$03 : !BLT + - ; LDX.b #$02 ; Default light world theme (phase >=3) - ;+ - ; Check if we're entering the village - LDA $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks + LDA.b OverworldIndex : CMP.b #$18 : BEQ .endOfLightWorldChecks ; For NA release would we also branch on indexes #$22 #$28 #$29 LDX.b #$05 ; Lost woods theme ; check if we've pulled from the master sword pedestal - LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ + + LDA.b OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ + LDX.b #$02 ; Default light world theme + ; check if we are entering lost woods - LDA $8A : BEQ .endOfLightWorldChecks + LDA.b OverworldIndex : BEQ .endOfLightWorldChecks .notVillageOrWoods ; Use the normal overworld (light world) music LDX.b #$02 ; Check phase ; In phase >= 2 - LDA ProgressIndicator : CMP.b #$02 : !BGE + + LDA.l ProgressIndicator : CMP.b #$02 : !BGE + ; If phase < 2, play the legend music LDX.b #$03 + .endOfLightWorldChecks ; if we are in the light world go ahead and set chosen selection - LDA CurrentWorld : BEQ .checkInverted+4 + LDA.l CurrentWorld : BEQ .checkInverted+4 LDX.b #$0F ; dark woods theme ; This music is used in dark woods - LDA $8A + LDA.b OverworldIndex CMP.b #$40 : BEQ + LDX.b #$0D ; dark death mountain theme @@ -68,18 +63,18 @@ PreOverworld_LoadProperties_ChooseMusic: ; if not inverted and light world, or inverted and dark world, skip moon pearl check .checkInverted - LDA CurrentWorld : CLC : ROL #$03 : CMP InvertedMode : BEQ .lastCheck + LDA.l CurrentWorld : CLC : ROL #$03 : CMP.l InvertedMode : BEQ .lastCheck ; Does Link have a moon pearl? - LDA MoonPearlEquipment : BNE + + LDA.l MoonPearlEquipment : BNE + LDX.b #$04 ; bunny theme + .lastCheck - LDA $0132 : CMP.b #$F2 : BNE + - CPX $0130 : BNE + - ; If the last played command ($0132) was half volume (#$F2) - ; and the actual song playing ($0130) is same as the one for this area (X) + LDA.w MusicControlQueue : CMP.b #$F2 : BNE + + CPX.w LastAPUCommand : BNE + + ; If the last played command (MusicControlQueue) was half volume (#$F2) + ; and the actual song playing (LastAPUCommand) is same as the one for this area (X) ; then play the full volume command (#F3) instead of restarting the song LDX.b #$F3 + @@ -91,7 +86,7 @@ PreOverworld_LoadProperties_ChooseMusic: Overworld_FinishMirrorWarp: REP #$20 - LDA.w #$2641 : STA $4370 + LDA.w #$2641 : STA.w DMAP7 LDX.b #$3E @@ -99,37 +94,33 @@ Overworld_FinishMirrorWarp: .clear_hdma_table - STA $1B00, X : STA $1B40, X - STA $1B80, X : STA $1BC0, X - STA $1C00, X : STA $1C40, X - STA $1C80, X + STA.w IrisPtr+$0000, X : STA.w IrisPtr+$0040, X + STA.w IrisPtr+$0080, X : STA.w IrisPtr+$00C0, X + STA.w IrisPtr+$0100, X : STA.w IrisPtr+$0140, X + STA.w IrisPtr+$0180, X DEX #2 : BPL .clear_hdma_table - - LDA.w #$0000 : STA $7EC007 : STA $7EC009 + LDA.w #$0000 : STA.l FadeTimer : STA.l FadeDirection SEP #$20 - - JSL $00D7C8 ; $57C8 IN ROM - - LDA.b #$80 : STA $9B - + JSL $00D7C8 + LDA.b #$80 : STA.b HDMAENQ LDX.b #$04 ; bunny theme ; if not inverted and light world, or inverted and dark world, skip moon pearl check - LDA CurrentWorld : CLC : ROL #$03 : CMP InvertedMode : BEQ + - LDA MoonPearlEquipment : BEQ .endOfLightWorldChecks + LDA.l CurrentWorld : CLC : ROL #$03 : CMP.l InvertedMode : BEQ + + LDA.l MoonPearlEquipment : BEQ .endOfLightWorldChecks + LDX.b #$09 ; default dark world theme - LDA $8A : CMP.b #$40 : !BGE .endOfLightWorldChecks + LDA.b OverworldIndex : CMP.b #$40 : !BGE .endOfLightWorldChecks LDX.b #$02 ; hyrule field theme ; Check if we're entering the lost woods CMP.b #$00 : BNE + - LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BNE .endOfLightWorldChecks + LDA.l OverworldEventDataWRAM+$80 : AND.b #$40 : BNE .endOfLightWorldChecks LDX.b #$05 ; lost woods theme BRA .endOfLightWorldChecks + @@ -138,14 +129,13 @@ Overworld_FinishMirrorWarp: CMP.b #$18 : BNE .endOfLightWorldChecks ; Check what phase we're in - ; LDA ProgressIndicator : CMP.b #$03 : !BGE .endOfLightWorldChecks LDX.b #$07 ; Default village theme (phase <3) .endOfLightWorldChecks - STX $012C + STX.w MusicControlRequest - LDA $8A : CMP.b #$40 : BNE + - LDX #$0F ; dark woods theme + LDA.b OverworldIndex : CMP.b #$40 : BNE + + LDX.b #$0F ; dark woods theme BRA .bunny + @@ -154,24 +144,24 @@ Overworld_FinishMirrorWarp: CMP.b #$47 : BNE .notDarkMountain .darkMountain - LDA.b #$09 : STA $012D ; set storm ambient SFX + LDA.b #$09 : STA.w SFX1 ; set storm ambient SFX LDX.b #$0D ; dark mountain theme .bunny - LDA MoonPearlEquipment : ORA InvertedMode : BNE + - LDX #$04 ; bunny theme + LDA.l MoonPearlEquipment : ORA.l InvertedMode : BNE + + LDX.b #$04 ; bunny theme + - STX $012C + STX.w MusicControlRequest .notDarkMountain - LDA $11 : STA $010C + LDA.b GameSubMode : STA.w GameSubModeCache ; GameModeCache - STZ $11 - STZ $B0 - STZ $0200 - STZ $0710 + STZ.b GameSubMode + STZ.b SubSubModule + STZ.w SubModuleInterface + STZ.w SkipOAM RTL ;-------------------------------------------------------------------------------- @@ -179,73 +169,59 @@ Overworld_FinishMirrorWarp: ;-------------------------------------------------------------------------------- BirdTravel_LoadTargetAreaMusic: ; Skip village and lost woods checks if entering dark world or a special area - LDA $8A : CMP.b #$43 : BEQ .endOfLightWorldChecks + LDA.b OverworldIndex : CMP.b #$43 : BEQ .endOfLightWorldChecks CMP.b #$40 : !BGE .notVillageOrWoods LDX.b #$07 ; Default village theme - ; Check what phase we're in - ;LDA ProgressIndicator : CMP.b #$03 : !BLT + - ; LDX.b #$02 ; Default light world theme (phase >=3) - ;+ - ; Check if we're entering the village - LDA $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks + LDA.b OverworldIndex : CMP.b #$18 : BEQ .endOfLightWorldChecks ; For NA release would we also branch on indexes #$22 #$28 #$29 - ;LDX.b #$05 ; Lost woods theme - - ; check if we've pulled from the master sword pedestal - ;LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ + - ; LDX.b #$02 ; Default light world theme - ;+ - ; check if we are entering lost woods - LDA $8A : BEQ .endOfLightWorldChecks + LDA.b OverworldIndex : BEQ .endOfLightWorldChecks .notVillageOrWoods ; Use the normal overworld (light world) music LDX.b #$02 ; Check phase ; In phase >= 2 - LDA ProgressIndicator : CMP.b #$02 : !BGE + + LDA.l ProgressIndicator : CMP.b #$02 : !BGE + ; If phase < 2, play the legend music LDX.b #$03 + .endOfLightWorldChecks ; if we are in the light world go ahead and set chosen selection - LDA CurrentWorld : BEQ .checkInverted+4 + LDA.l CurrentWorld : BEQ .checkInverted+4 LDX.b #$09 ; dark overworld theme - LDA $8A + LDA.b OverworldIndex ; Misery Mire rain SFX CMP.b #$70 : BNE ++ - LDA OverworldEventDataWRAM+$70 : AND.b #$20 : BNE ++ - LDA.b #$01 : CMP $0131 : BEQ + - STA $012D + LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE ++ + LDA.b #$01 : CMP.w LastSFX1 : BEQ + + STA.w SFX1 + : BRA .checkInverted ++ ; This music is used in dark death mountain CMP.b #$43 : BEQ .darkMountain - ; CMP.b #$45 : BEQ .darkMountain - ; CMP.b #$47 : BEQ .darkMountain - LDA.b #$05 : STA $012D + LDA.b #$05 : STA.w SFX1 BRA .checkInverted .darkMountain - LDA CrystalsField : CMP.b #$7F : BEQ + + LDA.l CrystalsField : CMP.b #$7F : BEQ + LDX.b #$0D ; dark death mountain theme - + : LDA.b #$09 : STA $012D + + : LDA.b #$09 : STA.w SFX1 ; if not inverted and light world, or inverted and dark world, skip moon pearl check .checkInverted - LDA CurrentWorld : CLC : ROL #$03 : CMP InvertedMode : BEQ .lastCheck + LDA.l CurrentWorld : CLC : ROL #$03 : CMP.l InvertedMode : BEQ .lastCheck ; Does Link have a moon pearl? - LDA MoonPearlEquipment : BNE + + LDA.l MoonPearlEquipment : BNE + LDX.b #$04 ; bunny theme + @@ -257,8 +233,8 @@ BirdTravel_LoadTargetAreaMusic: ;0 = Is Kakariko Overworld ;1 = Not Kakariko Overworld PsychoSolder_MusicCheck: - LDA $040A : CMP.b #$18 : BNE .done ; thing we overwrote - check if overworld location is Kakariko - LDA $1B ; Also check that we are outdoors + LDA.b OverworldIndex : CMP.b #$18 : BNE .done ; thing we overwrote - check if overworld location is Kakariko + LDA.b IndoorsFlag ; Also check that we are outdoors .done RTL ;-------------------------------------------------------------------------------- @@ -275,10 +251,10 @@ Overworld_MosaicDarkWorldChecks: CMP.b #$51 : bne .doFade .checkCrystals - LDA CrystalsField : CMP.b #$7F : BEQ .done + LDA.l CrystalsField : CMP.b #$7F : BEQ .done .doFade - LDA.b #$F1 : STA $012C ; thing we wrote over, fade out music + LDA.b #$F1 : STA.w MusicControlRequest ; thing we wrote over, fade out music .done RTL @@ -287,6 +263,6 @@ Overworld_MosaicDarkWorldChecks: ;-------------------------------------------------------------------------------- ; Check if the boss in ToH has been defeated (16-bit accumulator) CheckHeraBossDefeated: - LDA.l RoomDataWRAM[$07].l : AND #$FF00 + LDA.l RoomDataWRAM[$07].l : AND.w #$FF00 RTL ;-------------------------------------------------------------------------------- diff --git a/musicvolumes.asm b/musicvolumes.asm index c046558..7cb61de 100644 --- a/musicvolumes.asm +++ b/musicvolumes.asm @@ -26,1184 +26,1184 @@ ;== File select == org $1A9D28 ; <- D1D28 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1A9D41 ; <- D1D41 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1A9D5C ; <- D1D5C . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1A9D77 ; <- D1D77 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1A9D92 ; <- D1D92 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1A9DBD ; <- D1DBD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1A9DEB ; <- D1DEB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;org $1A9EEE ; <- D1EEE . (silent track) -;db !VOLUME_8C ; $8C +;db #!VOLUME_8C ; $8C ;== Title Theme (Triforce jingle) == org $1A9F5D ; <- D1F5D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1A9F9F ; <- D1F9F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1A9FBD ; <- D1FBD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1A9FDC ; <- D1FDC . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1A9FEA ; <- D1FEA . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Light World == org $1AA047 ; <- D2047 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AA085 ; <- D2085 . -db !VOLUME_FF ; $FF +db #!VOLUME_FF ; $FF org $1AA0CA ; <- D20CA . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA10A ; <- D210A . -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1AA13F ; <- D213F . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AA174 ; <- D2174 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AA1BB ; <- D21BB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA1C5 ; <- D21C5 . -db !VOLUME_FF ; $FF +db #!VOLUME_FF ; $FF org $1AA1CD ; <- D21CD . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AA279 ; <- D2279 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AA29E ; <- D229E . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AA2C9 ; <- D22C9 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA2DC ; <- D22DC . -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1AA349 ; <- D2349 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1AA426 ; <- D2426 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AA447 ; <- D2447 . -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1AA49C ; <- D249C . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AA4C2 ; <- D24C2 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AA4CD ; <- D24CD . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AA4EC ; <- D24EC . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AA5A4 ; <- D25A4 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AA754 ; <- D2754 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Escape == org $1AA84C ; <- D284C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA866 ; <- D2866 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA887 ; <- D2887 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA8A0 ; <- D28A0 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA8BA ; <- D28BA . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA8DB ; <- D28DB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA8F4 ; <- D28F4 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AA93E ; <- D293E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAB88 ; <- D2B88 . -db !VOLUME_D2 ; $D2 +db #!VOLUME_D2 ; $D2 ;== Bunny == org $1AABF3 ; <- D2BF3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAC09 ; <- D2C09 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AAC1F ; <- D2C1F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAC53 ; <- D2C53 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AAC69 ; <- D2C69 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;org $1AACA1 ; <- D2CA1 . (silent track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 org $1AACAF ; <- D2CAF . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AACC5 ; <- D2CC5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AACEB ; <- D2CEB . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AAD05 ; <- D2D05 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAD73 ; <- D2D73 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAD91 ; <- D2D91 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AADAF ; <- D2DAF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Lost Woods == org $1AAE3D ; <- D2E3D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAE66 ; <- D2E66 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AAE70 ; <- D2E70 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AAEAB ; <- D2EAB . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AAEE6 ; <- D2EE6 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AAF00 ; <- D2F00 . -db !VOLUME_82 ; $82 +db #!VOLUME_82 ; $82 org $1AAF36 ; <- D2F36 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAF46 ; <- D2F46 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AAF6F ; <- D2F6F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;org $1AAFCF ; <- D2FCF . (unused track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 ;org $1AAFDF ; <- D2FDF . (unused track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 ;org $1AB02B ; <- D302B . (unused track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 org $1AB086 ; <- D3086 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB099 ; <- D3099 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB0A5 ; <- D30A5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB0CD ; <- D30CD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB0F6 ; <- D30F6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB11D ; <- D311D . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AB154 ; <- D3154 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB184 ; <- D3184 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB1D1 ; <- D31D1 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C ;== Episode III - A Link to the Past randomizer == org $1AB33A ; <- D333A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB3D9 ; <- D33D9 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB49F ; <- D349F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB54A ; <- D354A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB5E5 ; <- D35E5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB624 ; <- D3624 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB63C ; <- D363C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB64A ; <- D364A . -db !VOLUME_D2 ; $D2 +db #!VOLUME_D2 ; $D2 org $1AB672 ; <- D3672 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB691 ; <- D3691 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB69F ; <- D369F . -db !VOLUME_D2 ; $D2 +db #!VOLUME_D2 ; $D2 org $1AB6B4 ; <- D36B4 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB6C6 ; <- D36C6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB724 ; <- D3724 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;org $1AB73B ; <- D373B . (muted track) -;db !VOLUME_00 ; $00 +;db #!VOLUME_00 ; $00 org $1AB747 ; <- D3747 . -db !VOLUME_D2 ; $D2 +db #!VOLUME_D2 ; $D2 ;org $1AB75B ; <- D375B . (muted track) -;db !VOLUME_00 ; $00 +;db #!VOLUME_00 ; $00 org $1AB767 ; <- D3767 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Kakariko == org $1AB8CB ; <- D38CB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AB8ED ; <- D38ED . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ABB1D ; <- D3B1D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABB2F ; <- D3B2F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABB55 ; <- D3B55 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABB70 ; <- D3B70 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABB81 ; <- D3B81 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABB97 ; <- D3B97 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABBAC ; <- D3BAC . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABBBF ; <- D3BBF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABBE8 ; <- D3BE8 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABC0D ; <- D3C0D . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABC39 ; <- D3C39 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABC68 ; <- D3C68 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABC91 ; <- D3C91 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ABC9F ; <- D3C9F . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABCBC ; <- D3CBC . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ABCD3 ; <- D3CD3 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ABCE8 ; <- D3CE8 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 ;== Mirror Sounds == org $1ABD34 ; <- D3D34 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABD55 ; <- D3D55 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABD6E ; <- D3D6E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABDAA ; <- D3DAA . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1ABDC6 ; <- D3DC6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABE04 ; <- D3E04 . (this track sounds awesome on its own) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABE38 ; <- D3E38 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Dark World == org $1ABF0C ; <- D3F0C . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ABF45 ; <- D3F45 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1ABF65 ; <- D3F65 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ABF82 ; <- D3F82 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ABFA6 ; <- D3FA6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC01E ; <- D401E . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AC04F ; <- D404F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC05F ; <- D405F . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC087 ; <- D4087 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC139 ; <- D4139 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC148 ; <- D4148 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AC17A ; <- D417A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC198 ; <- D4198 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC1A0 ; <- D41A0 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC1D5 ; <- D41D5 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC1F6 ; <- D41F6 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC22B ; <- D422B . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC25C ; <- D425C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC270 ; <- D4270 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC290 ; <- D4290 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AC2B1 ; <- D42B1 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC2EB ; <- D42EB . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1AC306 ; <- D4306 (Volume fade) . -db !VOLUME_5A ; $5A +db #!VOLUME_5A ; $5A org $1AC319 ; <- D4319 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC334 ; <- D4334 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC33C ; <- D433C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC371 ; <- D4371 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC3A6 ; <- D43A6 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC3DB ; <- D43DB . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC3EF ; <- D43EF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC40C ; <- D440C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC41E ; <- D441E . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC43E ; <- D443E . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AC452 ; <- D4452 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC494 ; <- D4494 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC4B5 ; <- D44B5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC512 ; <- D4512 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC56F ; <- D456F . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AC597 ; <- D4597 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AC5D1 ; <- D45D1 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC5EF ; <- D45EF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC682 ; <- D4682 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC6C3 ; <- D46C3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Getting Master Sword == org $1AC731 ; <- D4731 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AC753 ; <- D4753 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AC774 ; <- D4774 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AC795 ; <- D4795 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AC7B6 ; <- D47B6 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AC7D3 ; <- D47D3 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 ;== Hostile Kakariko Guards == org $1AC83C ; <- D483C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC848 ; <- D4848 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC855 ; <- D4855 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC862 ; <- D4862 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC86F ; <- D486F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC87C ; <- D487C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AC8B9 ; <- D48B9 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1AC8FF ; <- D48FF . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 ;== Title theme (after triforce jingle) == org $1ACA1C ; <- D4A1C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACA3B ; <- D4A3B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACA60 ; <- D4A60 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACAA5 ; <- D4AA5 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1ACAE4 ; <- D4AE4 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1ACB27 ; <- D4B27 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACB3C ; <- D4B3C . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ACB96 ; <- D4B96 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1ACBAB ; <- D4BAB . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ACC03 ; <- D4C03 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ACC53 ; <- D4C53 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ACC7A ; <- D4C7A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACC7F ; <- D4C7F . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ACCA5 ; <- D4CA5 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC ;== Skull Woods == org $1ACD12 ; <- D4D12 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACD43 ; <- D4D43 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ACD81 ; <- D4D81 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACD9C ; <- D4D9C . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1ACDCC ; <- D4DCC . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ACE90 ; <- D4E90 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACEBA ; <- D4EBA . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ACED6 ; <- D4ED6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACEE2 ; <- D4EE2 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ACF0B ; <- D4F0B . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ACFE5 ; <- D4FE5 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD005 ; <- D5005 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD012 ; <- D5012 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD02E ; <- D502E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD03C ; <- D503C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD081 ; <- D5081 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Minigame == org $1AD1A8 ; <- D51A8 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AD1B1 ; <- D51B1 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD1C7 ; <- D51C7 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD1CF ; <- D51CF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD1E6 ; <- D51E6 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AD1EF ; <- D51EF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD20C ; <- D520C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD214 ; <- D5214 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD231 ; <- D5231 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD24E ; <- D524E . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AD257 ; <- D5257 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD26D ; <- D526D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD275 ; <- D5275 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD29E ; <- D529E . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1AD2AF ; <- D52AF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD2BD ; <- D52BD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD2CD ; <- D52CD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD2DB ; <- D52DB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Triforce Chamber == org $1AD424 ; <- D5424 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AD43F ; <- D543F . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1AD477 ; <- D5477 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AD49C ; <- D549C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD4BC ; <- D54BC . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD4D5 ; <- D54D5 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD4F0 ; <- D54F0 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD509 ; <- D5509 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD543 ; <- D5543 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C ;== Credits fuck it i'm not testing this, they look right though. === org $1AD7D8 ; <- D57D8 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AD801 ; <- D5801 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD817 ; <- D5817 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1AD8A4 ; <- D58A4 -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AD954 ; <- D5954 -db !VOLUME_3C ; $3C +db #!VOLUME_3C ; $3C org $1AD957 ; <- D5957 (Volume fade) -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1AD9B9 ; <- D59B9 -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ADA2F ; <- D5A2F (maybe a silent track?) -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ADA3D ; <- D5A3D -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1ADA4D ; <- D5A4D -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1ADA68 ; <- D5A68 -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADA7F ; <- D5A7F -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADACB ; <- D5ACB -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1ADAE8 ; <- D5AE8 -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1ADAEB ; <- D5AEB (Volume fade) -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ADB47 ; <- D5B47 -db !VOLUME_50 ; $50 +db #!VOLUME_50 ; $50 org $1ADB4A ; <- D5B4A (Volume fade) -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1ADB5E ; <- D5B5E -db !VOLUME_50 ; $50 +db #!VOLUME_50 ; $50 org $1ADB6F ; <- D5B6F (Volume fade) -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1ADC12 ; <- D5C12 -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADD71 ; <- D5D71 -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADDDC ; <- D5DDC -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1ADE10 ; <- D5E10 -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADE5E ; <- D5E5E -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1ADE9A ; <- D5E9A -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADF28 ; <- D5F28 -db !VOLUME_FF ; $FF +db #!VOLUME_FF ; $FF org $1ADF8B ; <- D5F8B -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADFA4 ; <- D5FA4 -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1ADFE9 ; <- D5FE9 -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AE045 ; <- D6045 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA ;== Pre-credits == org $1AE51A ; <- D651A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE53B ; <- D653B (Volume Fade) . -db !VOLUME_3C ; $3C +db #!VOLUME_3C ; $3C org $1AE542 ; <- D6542 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE566 ; <- D6566 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AE58F ; <- D658F . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AE5B3 ; <- D65B3 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AE5D2 ; <- D65D2 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AE5ED ; <- D65ED . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE61D ; <- D661D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE64F ; <- D664F . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AE698 ; <- D6698 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AE6D7 ; <- D66D7 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE6FF ; <- D66FF . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AE72C ; <- D672C . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AE74A ; <- D674A . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AE760 ; <- D6760 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AE776 ; <- D6776 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE7C0 ; <- D67C0 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AE827 ; <- D6827 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AE878 ; <- D6878 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1AE883 ; <- D6883 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1AE8BD ; <- D68BD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Holding the Triforce (part 1, more below) == org $1AE8E5 ; <- D68E5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== More pre-credits stuff == org $1AE956 ; <- D6956 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE973 ; <- D6973 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE985 ; <- D6985 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AE9A8 ; <- D69A8 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AE9B8 ; <- D69B8 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AE9D6 ; <- D69D6 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AE9F5 ; <- D69F5 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AEA05 ; <- D6A05 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AEA51 ; <- D6A51 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AEA86 ; <- D6A86 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AEAB1 ; <- D6AB1 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AEAE9 ; <- D6AE9 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AEB6B ; <- D6B6B . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AEB96 ; <- D6B96 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AEC05 ; <- D6C05 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AEC3E ; <- D6C3E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AEC5C ; <- D6C5C . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AEC6F ; <- D6C6F . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AEC8E ; <- D6C8E . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AECB4 ; <- D6CB4 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AED4A ; <- D6D4A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AED7D ; <- D6D7D . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1AEDB3 ; <- D6DB3 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AEDCF ; <- D6DCF . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AEDF6 ; <- D6DF6 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AEE0D ; <- D6E0D . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1AEE20 ; <- D6E20 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AEE48 ; <- D6E48 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1AEE76 ; <- D6E76 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1AEE9C ; <- D6E9C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AEECB ; <- D6ECB . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AEEFB ; <- D6EFB . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1AEF2D ; <- D6F2D . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1AEF80 ; <- D6F80 (i think this is unused, but i don't feel like confirming this one) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AF17E ; <- D717E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Holding the Triforce (part 2) == org $1AF190 ; <- D7190 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AF1AB ; <- D71AB . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1AF1B9 ; <- D71B9 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1AF1D4 ; <- D71D4 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AF1E6 ; <- D71E6 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AF203 ; <- D7203 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1AF21E ; <- D721E . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 ;== More Credits == org $1AF3A1 ; <- D73A1 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C ;== Hyrule Castle == org $1B811D ; <- D811D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;org $1B8139 ; <- D8139 . (silent track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 ;org $1B814C ; <- D814C . (silent track) -;db !VOLUME_8C ; $8C +;db #!VOLUME_8C ; $8C org $1B816B ; <- D816B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B818A ; <- D818A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B819E ; <- D819E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B81BE ; <- D81BE . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B81DE ; <- D81DE . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1B821E ; <- D821E . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1B825D ; <- D825D . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B827D ; <- D827D . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1B829C ; <- D829C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B82BE ; <- D82BE . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B82E1 ; <- D82E1 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8306 ; <- D8306 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B830E ; <- D830E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8340 ; <- D8340 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B835E ; <- D835E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8394 ; <- D8394 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B83AB ; <- D83AB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B83CA ; <- D83CA . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B83F0 ; <- D83F0 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B83F8 ; <- D83F8 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B842C ; <- D842C . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B844B ; <- D844B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8479 ; <- D8479 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B849E ; <- D849E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B84CB ; <- D84CB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B84EB ; <- D84EB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B84F3 ; <- D84F3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B854A ; <- D854A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8573 ; <- D8573 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B859D ; <- D859D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B85B4 ; <- D85B4 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B85CE ; <- D85CE . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B862A ; <- D862A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8681 ; <- D8681 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8724 ; <- D8724 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B8732 ; <- D8732 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B8796 ; <- D8796 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B87E3 ; <- D87E3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B87FF ; <- D87FF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B887B ; <- D887B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B88C6 ; <- D88C6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B88E3 ; <- D88E3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;org $1B8903 ; <- D8903 . (silent track) -;db !VOLUME_8C ; $8C +;db #!VOLUME_8C ; $8C org $1B892A ; <- D892A . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B8944 ; <- D8944 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B897B ; <- D897B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Pendant Dungeon == org $1B8C97 ; <- D8C97 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8CA4 ; <- D8CA4 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8CB3 ; <- D8CB3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8CC2 ; <- D8CC2 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8CD1 ; <- D8CD1 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8D01 ; <- D8D01 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B8E2D ; <- D8E2D . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1B8F0D ; <- D8F0D . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC ;org $1B90F8 ; <- D90F8 (muted track) -;db !VOLUME_00 ; $00 +;db #!VOLUME_00 ; $00 ;== Caves == org $1B917B ; <- D917B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B918C ; <- D918C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B919A ; <- D919A . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B91B5 ; <- D91B5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B91D0 ; <- D91D0 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B91DD ; <- D91DD . (splashy sound) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B91E8 ; <- D91E8 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B9220 ; <- D9220 . (splashy sound) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B922B ; <- D922B . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B9273 ; <- D9273 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9284 ; <- D9284 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9292 ; <- D9292 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B92AD ; <- D92AD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B92C8 ; <- D92C8 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B92D5 ; <- D92D5 . (splashy sound) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B92E0 ; <- D92E0 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B9311 ; <- D9311 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9322 ; <- D9322 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9330 ; <- D9330 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B934B ; <- D934B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9366 ; <- D9366 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9373 ; <- D9373 . (splashy sound) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B937E ; <- D937E . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1B93B6 ; <- D93B6 . (splashy sound) -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B93C1 ; <- D93C1 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C ;== Crystal/Pendant get == org $1B945E ; <- D945E . -db !VOLUME_F0 ; $F0 +db #!VOLUME_F0 ; $F0 org $1B94AA ; <- D94AA . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA org $1B94E0 ; <- D94E0 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1B9544 ; <- D9544 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1B95A8 ; <- D95A8 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1B960C ; <- D960C . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1B9652 ; <- D9652 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B967D ; <- D967D . -db !VOLUME_F0 ; $F0 +db #!VOLUME_F0 ; $F0 org $1B9698 ; <- D9698 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B96C2 ; <- D96C2 . -db !VOLUME_F0 ; $F0 +db #!VOLUME_F0 ; $F0 ;== Sanctuary == org $1B97A6 ; <- D97A6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B97C2 ; <- D97C2 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B97DC ; <- D97DC . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B97FB ; <- D97FB . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9811 ; <- D9811 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9828 ; <- D9828 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 ;== Boss == ;org $1B98FF ; <- D98FF . (silent track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 org $1B996F ; <- D996F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9982 ; <- D9982 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1B99A8 ; <- D99A8 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B99D5 ; <- D99D5 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9A02 ; <- D9A02 . -db !VOLUME_AA ; $AA +db #!VOLUME_AA ; $AA org $1B9A30 ; <- D9A30 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9A4E ; <- D9A4E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9A6B ; <- D9A6B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9A88 ; <- D9A88 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9A9E ; <- D9A9E . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA ;org $1B9AE4 ; <- D9AE4 . (unused track) these three tracks go together -;db !VOLUME_FA ; $FA +;db #!VOLUME_FA ; $FA ;org $1B9AF7 ; <- D9AF7 . (unused track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 ;org $1B9B1D ; <- D9B1D . (unused track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 org $1B9B43 ; <- D9B43 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9B56 ; <- D9B56 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1B9B7C ; <- D9B7C . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9BA9 ; <- D9BA9 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9BD6 ; <- D9BD6 . -db !VOLUME_AA ; $AA +db #!VOLUME_AA ; $AA ;== Crystal Dungeon == org $1B9C84 ; <- D9C84 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9C8D ; <- D9C8D . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9C95 ; <- D9C95 . -db !VOLUME_F0 ; $F0 +db #!VOLUME_F0 ; $F0 org $1B9CAC ; <- D9CAC . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9CBC ; <- D9CBC . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B9CE8 ; <- D9CE8 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9CF3 ; <- D9CF3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9CFD ; <- D9CFD . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9D46 ; <- D9D46 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1B9DC0 ; <- D9DC0 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B9E49 ; <- D9E49 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1B9EE6 ; <- D9EE6 . -db !VOLUME_F0 ; $F0 +db #!VOLUME_F0 ; $F0 ;== Fortuneteller == org $1BA211 ; <- DA211 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA233 ; <- DA233 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA251 ; <- DA251 . -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1BA26C ; <- DA26C . -db !VOLUME_E6 ; $E6 +db #!VOLUME_E6 ; $E6 org $1BA289 ; <- DA289 . -db !VOLUME_FA ; $FA +db #!VOLUME_FA ; $FA ;== Zelda's Lullaby == org $1BA35B ; <- DA35B . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA35E ; <- DA35E (Volume fade) . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA37B ; <- DA37B . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA37E ; <- DA37E (Volume fade) . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA38E ; <- DA38E . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA391 ; <- DA391 (Volume fade) . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA39F ; <- DA39F . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA3A2 ; <- DA3A2 (Volume fade) . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA3D5 ; <- DA3D5 . -db !VOLUME_82 ; $82 +db #!VOLUME_82 ; $82 org $1BA478 ; <- DA478 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA49E ; <- DA49E . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA4C3 ; <- DA4C3 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA4D7 ; <- DA4D7 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA4F6 ; <- DA4F6 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA515 ; <- DA515 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Maidens == org $1BA5C3 ; <- DA5C3 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA5C6 ; <- DA5C6 (Volume fade) . -db !VOLUME_F0 ; $F0 +db #!VOLUME_F0 ; $F0 org $1BA5DE ; <- DA5DE . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA608 ; <- DA608 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA635 ; <- DA635 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA662 ; <- DA662 . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA691 ; <- DA691 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA694 ; <- DA694 (Volume fade) . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1BA6A8 ; <- DA6A8 . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA6AB ; <- DA6AB (Volume fade) . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1BA6DF ; <- DA6DF . -db !VOLUME_64 ; $64 +db #!VOLUME_64 ; $64 org $1BA6E2 ; <- DA6E2 (Volume fade) . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA710 ; <- DA710 . -db !VOLUME_14 ; $14 +db #!VOLUME_14 ; $14 org $1BA71F ; <- DA71F (Volume fade) . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA72B ; <- DA72B . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA736 ; <- DA736 (Volume fade) . -db !VOLUME_3C ; $3C +db #!VOLUME_3C ; $3C org $1BA745 ; <- DA745 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA752 ; <- DA752 (Volume fade) . -db !VOLUME_3C ; $3C +db #!VOLUME_3C ; $3C org $1BA765 ; <- DA765 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA772 ; <- DA772 (Volume fade) . -db !VOLUME_3C ; $3C +db #!VOLUME_3C ; $3C org $1BA785 ; <- DA785 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BA792 ; <- DA792 (Volume fade) . -db !VOLUME_3C ; $3C +db #!VOLUME_3C ; $3C org $1BA7A4 ; <- DA7A4 . -db !VOLUME_14 ; $14 +db #!VOLUME_14 ; $14 org $1BA7AF ; <- DA7AF (Volume fade) . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA7BB ; <- DA7BB . -db !VOLUME_14 ; $14 +db #!VOLUME_14 ; $14 org $1BA7C6 ; <- DA7C6 (Volume fade) . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 org $1BA7D2 ; <- DA7D2 . -db !VOLUME_14 ; $14 +db #!VOLUME_14 ; $14 org $1BA7DD ; <- DA7DD (Volume fade) . -db !VOLUME_78 ; $78 +db #!VOLUME_78 ; $78 ;== Fairy Fountain == org $1BA958 ; <- DA958 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1BA971 ; <- DA971 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1BA98C ; <- DA98C . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1BA9A7 ; <- DA9A7 . -db !VOLUME_8C ; $8C +db #!VOLUME_8C ; $8C org $1BA9C2 ; <- DA9C2 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BA9ED ; <- DA9ED . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAA1B ; <- DAA1B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAA57 ; <- DAA57 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAA68 ; <- DAA68 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1BAA77 ; <- DAA77 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1BAA88 ; <- DAA88 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1BAA99 ; <- DAA99 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 ;== Pre-Ganon Fight == org $1BABAF ; <- DABAF . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BABC9 ; <- DABC9 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BABE2 ; <- DABE2 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BABF6 ; <- DABF6 . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BAC0D ; <- DAC0D . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BAC28 ; <- DAC28 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAC46 ; <- DAC46 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAC63 ; <- DAC63 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Agah 2 defeated == ;org $1BACB8 ; <- DACB8 . (silent track) -;db !VOLUME_C8 ; $C8 +;db #!VOLUME_C8 ; $C8 org $1BACEC ; <- DACEC . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAD08 ; <- DAD08 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAD25 ; <- DAD25 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAD42 ; <- DAD42 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAD5F ; <- DAD5F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 ;== Ganon == org $1BAE17 ; <- DAE17 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAE34 ; <- DAE34 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAE51 ; <- DAE51 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAE88 ; <- DAE88 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1BAEBE ; <- DAEBE . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 org $1BAEC8 ; <- DAEC8 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1BAEE6 ; <- DAEE6 . -db !VOLUME_DC ; $DC +db #!VOLUME_DC ; $DC org $1BAF04 ; <- DAF04 . -db !VOLUME_B4 ; $B4 +db #!VOLUME_B4 ; $B4 org $1BAF2E ; <- DAF2E . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAF55 ; <- DAF55 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAF6B ; <- DAF6B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAF81 ; <- DAF81 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BAFAC ; <- DAFAC . -db !VOLUME_A0 ; $A0 +db #!VOLUME_A0 ; $A0 ;== Falling into the Ganon fight == org $1BB14F ; <- DB14F . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BB16B ; <- DB16B . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BB180 ; <- DB180 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BB195 ; <- DB195 . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BB1AA ; <- DB1AA . -db !VOLUME_C8 ; $C8 +db #!VOLUME_C8 ; $C8 org $1BB1BF ; <- DB1BF . -db !VOLUME_DC ; $DC \ No newline at end of file +db #!VOLUME_DC ; $DC diff --git a/newhud.asm b/newhud.asm index 6b78fa8..68a0b12 100644 --- a/newhud.asm +++ b/newhud.asm @@ -1,64 +1,58 @@ NewDrawHud: -SEP #$30 + SEP #$30 ;================================================================================ ; Draw bomb count -!BOMBCOUNT_DRAW_ADDRESS = "$7EC75A" -!INFINITE_BOMBS = "$7F50C9" ;================================================================================ - LDA !INFINITE_BOMBS : BNE .infinite_bombs + LDA.l InfiniteBombs : BNE .infinite_bombs .finite_bombs LDA.l BombsEquipment ; bombs JSR HudHexToDec2Digit ;requires 8 bit registers! REP #$20 - LDX.b $06 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS ; Draw bombs 10 digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; Draw bombs 1 digit + 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 + .infinite_bombs REP #$20 - LDA.w #$2431 : STA !BOMBCOUNT_DRAW_ADDRESS ; infinity (left half) - INC A : STA !BOMBCOUNT_DRAW_ADDRESS+2 ; infinity (right half) + LDA.w #$2431 : STA.l HUDBombCount ; infinity (left half) + INC A : STA.l HUDBombCount+2 ; infinity (right half) + ;================================================================================ ; Draw rupee counter -!RUPEE_DRAW_ADDRESS = "$7EC750" ;================================================================================ LDA.l DisplayRupees ; Drawing bombs (above) always ends with 16-bit A, so, no need to REP here JSR HudHexToDec4Digit - LDX.b $04 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS ; 1000s - LDX.b $05 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+2 ; 100s - LDX.b $06 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+4 ; 10s - LDX.b $07 : TXA : ORA.w #$2400 : STA !RUPEE_DRAW_ADDRESS+6 ; 1s + 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 -!ARROWCOUNT_DRAW_ADDRESS = "$7EC760" -!INFINITE_ARROWS = "$7F50C8" ;================================================================================ SEP #$20 LDA.l ArrowMode : BNE + - LDA !INFINITE_ARROWS : BNE .infinite_arrows + LDA.l InfiniteArrows : BNE .infinite_arrows .finite_arrows LDA.l CurrentArrows ; arrows JSR HudHexToDec2Digit REP #$20 - LDX.b $06 : TXA : ORA.w #$2400 : STA !ARROWCOUNT_DRAW_ADDRESS ; Draw arrows 10 digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !ARROWCOUNT_DRAW_ADDRESS+2 ; Draw arrows 1 digit + 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 !ARROWCOUNT_DRAW_ADDRESS ; infinity (left half) - INC A : STA !ARROWCOUNT_DRAW_ADDRESS+2 ; infinity (right half) + LDA.w #$2431 : STA.l HUDArrowCount ; infinity (left half) + INC A : STA.l HUDArrowCount+2 ; infinity (right half) + ;================================================================================ ; Draw Goal Item Indicator -!GOAL_DRAW_ADDRESS = "$7EC72A" ;================================================================================ REP #$20 @@ -67,38 +61,36 @@ SEP #$30 LDA.l GoalCounter JSR HudHexToDec4Digit - LDA.l GoalItemIcon : STA.l !GOAL_DRAW_ADDRESS ; draw star icon + LDA.l GoalItemIcon : STA.l HUDGoalIndicator ; draw star icon - LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit - LDX.b $06 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+4 ; draw 10's digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+6 ; draw 1's digit + 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 !GOAL_DRAW_ADDRESS+8 ; draw slash - LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+10 ; draw 100's digit - LDX.b $06 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+12 ; draw 10's digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+14 ; draw 1's digit + 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 !GOAL_DRAW_ADDRESS+8 - STA !GOAL_DRAW_ADDRESS+10 - STA !GOAL_DRAW_ADDRESS+12 + STA.l HUDGoalIndicator+8 + STA.l HUDGoalIndicator+10 + STA.l HUDGoalIndicator+12 .done ;================================================================================ ; Draw Dungeon Compass Counts ;================================================================================ - LDA.l CompassMode : AND #$00FF : BEQ + ; skip if CompassMode is 0. + LDA.l CompassMode : AND.w #$00FF : BEQ + ; skip if CompassMode is 0. JSL.l DrawDungeonCompassCounts ; compasses.asm + ;================================================================================ ; Draw key count -!KEY_DIGITS_ADDRESS = "$7EC764" -!KEY_ICON_ADDRESS = "$7EC726" ;================================================================================ SEP #$20 LDA.l CurrentSmallKeys : CMP.b #$FF : BEQ .not_in_dungeon @@ -106,21 +98,21 @@ SEP #$30 JSR HudHexToDec2Digit : REP #$20 ; if 10s digit is 0, draw transparent tile instead of 0 - LDX.b $06 : TXA : CPX.b #$90 : BNE + + LDX.b Scrap06 : TXA : CPX.b #$90 : BNE + LDA.w #$007F + - ORA.w #$2400 : STA !KEY_DIGITS_ADDRESS + ORA.w #$2400 : STA.l HUDKeyDigits ; 1s digit - LDX.b $07 : TXA : ORA.w #$2400 : STA !KEY_DIGITS_ADDRESS+2 + 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 !KEY_DIGITS_ADDRESS : STA !KEY_DIGITS_ADDRESS+2 - STA !KEY_ICON_ADDRESS + LDA.w #$247F : STA.l HUDKeyDigits : STA.l HUDKeyDigits+2 + STA.l HUDKeyIcon .done_keys @@ -130,19 +122,18 @@ SEP #$30 ;-------------------------------------------------------------------------------- ; Draw pendant/crystal icon ;-------------------------------------------------------------------------------- -!PRIZE_ICON = $7EC742 !P_ICON = $296C !C_ICON = $295F SEP #$20 - LDA.b $1B : BEQ .noprize + LDA.b IndoorsFlag : BEQ .noprize - LDX.w $040C + LDX.w DungeonID CPX #$1A : !BGE .noprize CPX #$04 : !BLT .noprize CPX #$08 : BEQ .noprize - LDA $10 : CMP #$12 : BEQ .noprize + LDA.b GameMode : CMP.b #$12 : BEQ .noprize LDA.l MapMode REP #$20 @@ -169,54 +160,53 @@ SEP #$30 LDA.w #$207F .doneprize - STA.l !PRIZE_ICON + STA.l HUDPrizeIcon ;-------------------------------------------------------------------------------- ; Draw Magic Meter -!INFINITE_MAGIC = "$7F50CA" -!DrawMagicMeter_mp_tilemap = "$0DFE0F" +DrawMagicMeter_mp_tilemap = $0DFE0F ;-------------------------------------------------------------------------------- - LDA CurrentMagic : AND #$00FF ; crap we wrote over when placing the hook for OnDrawHud + LDA.l CurrentMagic : AND.w #$00FF ; crap we wrote over when placing the hook for OnDrawHud !ADD #$0007 - AND #$FFF8 + AND.w #$FFF8 TAX ; end of crap - LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : JMP .green : + - SEP #$20 : LDA.b #$80 : STA CurrentMagic : REP #$30 ; set magic to max + 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 $1A : AND.w #$000C : LSR #2 + LDA.b FrameCounter : AND.w #$000C : LSR #2 BEQ .red CMP.w #0001 : BEQ .yellow CMP.w #0002 : BNE + : JMP .green : + .blue - LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$EFFF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$EFFF : STA $7EC806 - RTL + 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 !DrawMagicMeter_mp_tilemap+0, X : AND.w #$E7FF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$E7FF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$E7FF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$E7FF : STA $7EC806 - RTL + 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 !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EBFF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EBFF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$EBFF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$EBFF : STA $7EC806 - RTL + 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 !DrawMagicMeter_mp_tilemap+0, X : AND.w #$E3FF : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$E3FF : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : AND.w #$E3FF : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : AND.w #$E3FF : STA $7EC806 - RTL + 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 !DrawMagicMeter_mp_tilemap+0, X : STA $7EC746 - LDA !DrawMagicMeter_mp_tilemap+2, X : STA $7EC786 - LDA !DrawMagicMeter_mp_tilemap+4, X : STA $7EC7C6 - LDA !DrawMagicMeter_mp_tilemap+6, X : STA $7EC806 + 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 ;================================================================================ @@ -231,54 +221,27 @@ HudHexToDec4Digit: INY SBC.w #1000 : BRA - + - STY $04 : LDY #$90 ; Store 1000s digit & reset Y + STY.b Scrap04 : LDY.b #$90 ; Store 1000s digit & reset Y - CMP.w #100 : !BLT + INY SBC.w #100 : BRA - + - STY $05 : LDY #$90 ; Store 100s digit & reset Y + STY.b Scrap05 : LDY.b #$90 ; Store 100s digit & reset Y - CMP.w #10 : !BLT + INY SBC.w #10 : BRA - + - STY $06 : LDY #$90 ; Store 10s digit & reset Y + STY.b Scrap06 : LDY.b #$90 ; Store 10s digit & reset Y CMP.w #1 : !BLT + - INY DEC : BNE - + - STY $07 ; Store 1s digit + STY.b Scrap07 ; Store 1s digit RTS -;================================================================================ -; 8-bit registers -; in: A(b) - Byte to Convert -; out: $05 - $07 (high - low) -;================================================================================ -;HudHexToDec3Digit: ; this may be overkill, could have used the 4 digit one... -; LDY.b #$90 -; - -; CMP.b #100 : !BLT + -; INY -; SBC.b #100 : BRA - -; + -; STY $05 : LDY.b #$90 ; Store 100s digit and reset Y -; - -; CMP.b #10 : !BLT + -; INY -; SBC.b #10 : BRA - -; + -; STY $06 : LDY #$90 ; Store 10s digit and reset Y -; CMP.b #1 : !BLT + -; - -; INY -; DEC : BNE - -; + -; STY $07 ; Store 1s digit -;RTS - ;================================================================================ ; 8-bit registers ; in: A(b) - Byte to Convert @@ -291,11 +254,11 @@ HudHexToDec2Digit: INY SBC.b #10 : BRA - + - STY $06 : LDY #$90 ; Store 10s digit and reset Y + STY.b Scrap06 : LDY.b #$90 ; Store 10s digit and reset Y CMP.b #1 : !BLT + - INY DEC : BNE - + - STY $07 ; Store 1s digit + STY.b Scrap07 ; Store 1s digit RTS diff --git a/newitems.asm b/newitems.asm index 2891759..6d53808 100755 --- a/newitems.asm +++ b/newitems.asm @@ -48,25 +48,6 @@ ; 0xF1 - freestanding heart 2 / boss heart / npc ; 0xF3 - tablet/pedestal ;-------------------------------------------------------------------------------- -;GetAnimatedSpriteGfxFile: -; LDY.b #$32 -; CMP.b #$39 : BCS + ; If tile index >= 0x39, use sprite file 0x32 (Blank file) -; -; LDY.b #$5D -; -; CMP.b #$23 : BEQ + ; If tile index is 0x23 (Pendant)... -; CMP.b #$37 : BCS + ; ...or tile index >= 0x37, use sprite file 0x5D (Pendant, Boots, 20 Rupees) -; -; LDY.b #$5C -; -; CMP.b #$0C : BEQ + ; If tile index is 0x0C (Flute)... -; CMP.b #$24 : BCS + ; ...or tile index >= 24, use sprite file 0x5C (Rupees, Crystal, Heart Piece ... ...) -; -; ; Otherwise, use sprite file 0x5B (Medallions, Mirror, Flippers, Lantern, Compass...) -; LDY.b #$5B -;+ -;JML GetAnimatedSpriteGfxFile_return -;-------------------------------------------------------------------------------- GetAnimatedSpriteGfxFile: CMP.b #$0C : BNE + LDY.b #$5C : JML GetAnimatedSpriteGfxFile_return @@ -119,7 +100,7 @@ dw $0A50 ; Power Star GetAnimatedSpriteBufferPointer: ;PHB : PHK : PLB - LDA.b $00 : ADC.l GetAnimatedSpriteBufferPointer_table, X + LDA.b Scrap00 : ADC.l GetAnimatedSpriteBufferPointer_table, X ;PLB RTL ;-------------------------------------------------------------------------------- @@ -146,30 +127,29 @@ endmacro ;carry set if caught ;incsrc eventdata.asm ProcessEventItems: - ;STA $FFFFFF - LDA $00 : PHA - LDA $01 : PHA - LDA $02 : PHA + LDA.b Scrap00 : PHA + LDA.b Scrap01 : PHA + LDA.b Scrap02 : PHA PHY : PHP PHB : LDA.b #$AF : PHA : PLB - LDA $02D8 + LDA.w ItemReceiptID CMP.b #$E0 : BNE + REP #$30 ; set 16-bit accumulator & index registers - LDA RNGItem : ASL : TAX - LDA.l EventDataOffsets, X : !ADD #EventDataTable : STA $00 + LDA.l RNGItem : ASL : TAX + LDA.l EventDataOffsets, X : !ADD #EventDataTable : STA.b Scrap00 SEP #$20 ; set 8-bit accumulator - LDA.b #$AF : STA $02 + LDA.b #$AF : STA.b Scrap02 JSL.l LoadDialogAddressIndirect - LDA RNGItem : INC : STA RNGItem + LDA.l RNGItem : INC : STA.l RNGItem SEP #$10 ; set 8-bit index registers REP #$20 ; set 16-bit accumulator - LDA GoalItemRequirement : BEQ ++ - LDA GoalCounter : INC : STA GoalCounter - CMP GoalItemRequirement : !BLT ++ - LDA TurnInGoalItems : AND.w #$00FF : BNE ++ + LDA.l GoalItemRequirement : BEQ ++ + LDA.l GoalCounter : INC : STA.l GoalCounter + CMP.l GoalItemRequirement : !BLT ++ + LDA.l TurnInGoalItems : AND.w #$00FF : BNE ++ JSL.l ActivateGoal ++ SEP #$20 ; set 8-bit accumulator @@ -179,71 +159,71 @@ ProcessEventItems: .done PLB PLP : PLY - PLA : STA $02 - PLA : STA $01 - PLA : STA $00 + PLA : STA.b Scrap02 + PLA : STA.b Scrap01 + PLA : STA.b Scrap00 RTS ;-------------------------------------------------------------------------------- AddReceivedItemExpandedGetItem: PHX - LDA $02D8 ; check inventory + LDA.w ItemReceiptID ; check inventory JSL.l FreeDungeonItemNotice CMP.b #$0B : BNE + ; Bow - LDA BowTracking : AND.b #$40 : BEQ ++ + LDA.l BowTracking : AND.b #$40 : BEQ ++ LDA.l SilverArrowsUseRestriction : BNE ++ - LDA.b #03 : STA BowEquipment ; set bow to silver + 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 ArrowsFiller : BNE ++ ; check arrows + LDA.l ArrowsFiller : BNE ++ ; check arrows LDA.b #$03 : BRA +++ ; bow without arrow ++ LDA.b #$04 ; bow with arrow +++ - STA BowEquipment + STA.l BowEquipment .noequip - LDA BowTracking : ORA #$40 : STA BowTracking ; mark silver bow on y-toggle + 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 BombCapacity ; upgrade bombs - LDA.b #50 : STA BombsFiller ; fill 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 ArrowCapacity ; upgrade arrows - LDA.b #70 : STA ArrowsFiller ; fill 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 MagicConsumption : CMP #$02 : !BGE ++ - INC : STA MagicConsumption ; upgrade magic + LDA.l MagicConsumption : CMP.b #$02 : !BGE ++ + INC : STA.l MagicConsumption ; upgrade magic ++ - LDA.b #$80 : STA MagicFiller ; fill magic + LDA.b #$80 : STA.l MagicFiller ; fill magic JMP .done + CMP.b #$4F : BNE + ; 1/4 magic - LDA.b #$02 : STA MagicConsumption ; upgrade magic - LDA.b #$80 : STA MagicFiller ; fill 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 SwordEquipment : CMP.b #$02 : !BGE + ; skip if we have a better sword - LDA.b #$02 : STA SwordEquipment ; set master sword + 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 BombCapacity : !ADD.b #$05 : STA BombCapacity ; upgrade bombs +5 - LDA.l Upgrade5BombsRefill : STA BombsFiller ; fill 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 BombCapacity : !ADD.b #$0A : STA BombCapacity ; upgrade bombs +10 - LDA.l Upgrade10BombsRefill : STA BombsFiller ; fill 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 ArrowCapacity : !ADD.b #$05 : STA ArrowCapacity ; upgrade arrows +5 - LDA.l Upgrade5ArrowsRefill : STA ArrowsFiller ; fill 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 ArrowCapacity : !ADD.b #$0A : STA ArrowCapacity ; upgrade arrows +10 - LDA.l Upgrade10ArrowsRefill : STA ArrowsFiller ; fill 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) @@ -257,34 +237,34 @@ AddReceivedItemExpandedGetItem: + CMP.b #$58 : BNE + ; Upgrade-Only Sivler Arrows LDA.l SilverArrowsUseRestriction : BNE +++ LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ +++ - LDA BowEquipment : BEQ ++ : CMP.b #$03 : !BGE ++ - !ADD.b #$02 : STA BowEquipment ; switch to silver bow + 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 ArrowsFiller + LDA.b #$01 : STA.l ArrowsFiller ++ + CMP.b #$59 : BNE + ; 1 Rupoor - REP #$20 : LDA CurrentRupees : !SUB RupoorDeduction : STA CurrentRupees : SEP #$20 ; Take 1 rupee + 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 ChallengeTimer : !ADD.l RedClockAmount : STA ChallengeTimer - LDA ChallengeTimer+2 : ADC.l RedClockAmount+2 : STA ChallengeTimer+2 + 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 ChallengeTimer : !ADD.l BlueClockAmount : STA ChallengeTimer - LDA ChallengeTimer+2 : ADC.l BlueClockAmount+2 : STA ChallengeTimer+2 + 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 ChallengeTimer : !ADD.l GreenClockAmount : STA ChallengeTimer - LDA ChallengeTimer+2 : ADC.l GreenClockAmount+2 : STA ChallengeTimer+2 + 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 @@ -332,73 +312,67 @@ AddReceivedItemExpandedGetItem: ; JSL.l ItemGetServiceRequest ; JMP .done + CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map - AND #$0F : CMP #$08 : !BGE ++ + AND.b #$0F : CMP.b #$08 : !BGE ++ %ValueShift() - ORA MapField : STA MapField ; Map 1 + 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 MapField+1 : STA MapField+1 ; Map 2 + ORA.l MapField+1 : STA.l MapField+1 ; Map 2 JMP .done + CMP.b #$80 : !BLT + : CMP.b #$90 : !BGE + ; Free Compass - AND #$0F : CMP #$08 : !BGE ++ + AND.b #$0F : CMP.b #$08 : !BGE ++ %ValueShift() - ORA CompassField : STA CompassField ; Compass 1 + 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 CompassField+1 : STA CompassField+1 ; Compass 2 + ORA.l CompassField+1 : STA.l CompassField+1 ; Compass 2 JMP .done + CMP.b #$90 : !BLT + : CMP.b #$A0 : !BGE + ; Free Big Key - AND #$0F : CMP #$08 : !BGE ++ + AND.b #$0F : CMP.b #$08 : !BGE ++ %ValueShift() - ORA BigKeyField : STA BigKeyField ; Big Key 1 + 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 BigKeyField+1 : STA BigKeyField+1 ; Big Key 2 + 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 #$0F : TAX - LDA DungeonKeys, X : INC : STA DungeonKeys, X ; Increment Key Count + AND.b #$0F : TAX + LDA.l DungeonKeys, X : INC : STA.l DungeonKeys, X ; Increment Key Count CPX.b #$00 : BNE ++ - STA HyruleCastleKeys ; copy HC to sewers + STA.l HyruleCastleKeys ; copy HC to sewers ++ : CPX.b #$01 : BNE ++ - STA SewerKeys ; copy sewers to HC + STA.l SewerKeys ; copy sewers to HC ++ LDA.l GenericKeys : BEQ + .generic - LDA CurrentSmallKeys : INC : STA CurrentSmallKeys + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys JMP .done .normal - TXA : ASL : CMP $040C : BNE ++ - LDA CurrentSmallKeys : INC : STA CurrentSmallKeys + TXA : ASL : CMP.w DungeonID : BNE ++ + LDA.l CurrentSmallKeys : INC : STA.l CurrentSmallKeys ++ JMP .done + .done PLX - LDA $02E9 : CMP.b #$01 ; thing we wrote over + LDA.w ItemReceiptMethod : CMP.b #$01 ; thing we wrote over RTL ; #$70 - Maps ; #$80 - Compasses ; #$90 - Big Keys ; #$A0 - Small Keys ;-------------------------------------------------------------------------------- -!SCRATCH_AREA = "$7F5020" -!SINGLE_INDEX_TEMP = "$7F5020" -!SINGLE_INDEX_OFFSET_TEMP = "$7F5021" -!SINGLE_INDEX_BITMASK_TEMP = "$7F5022" -!LOCK_IN = "$7F5090" -!ITEM_BUSY = "$7F5091" ;2B:Bottle Already Filled w/ Red Potion ;2C:Bottle Already Filled w/ Green Potion ;2D:Bottle Already Filled w/ Blue Potion @@ -410,97 +384,97 @@ AddReceivedItemExpanded: PHA : PHX JSL.l PreItemGet - LDA $02D8 ; Item Value + LDA.w ItemReceiptID ; Item Value JSR AttemptItemSubstitution - STA $02D8 + STA.w ItemReceiptID JSR IncrementItemCounters CMP.b #$16 : BNE ++ ; Bottle JSR.w CountBottles : CMP.l BottleLimit : !BLT +++ - LDA.l BottleLimitReplacement : STA $02D8 + 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 $02D8 + 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 $02D8 + 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 $02D8 + 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 $02D8 + 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 $02D8 + 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 $02D8 + LDA.l BottleLimitReplacement : STA.w ItemReceiptID +++ : JMP .done ++ : CMP.b #$4E : BNE ++ ; Progressive Magic - LDA MagicConsumption : BEQ +++ - LDA.b #$4F : STA $02D8 + LDA.l MagicConsumption : BEQ +++ + LDA.b #$4F : STA.w ItemReceiptID +++ : JMP .done ++ : CMP.b #$5E : BNE ++ ; Progressive Sword - LDA HighestSword : CMP.l ProgressiveSwordLimit : !BLT + - LDA.l ProgressiveSwordReplacement : STA $02D8 : JMP .done + 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 $02D8 : JMP .done + LDA.b #$49 : STA.w ItemReceiptID : JMP .done + : CMP.b #$01 : BNE + ; Fighter Sword - LDA.b #$50 : STA $02D8 : JMP .done + LDA.b #$50 : STA.w ItemReceiptID : JMP .done + : CMP.b #$02 : BNE + ; Master Sword - LDA.b #$02 : STA $02D8 : JMP .done + LDA.b #$02 : STA.w ItemReceiptID : JMP .done + ; Everything Else - LDA.b #$03 : STA $02D8 : JMP .done + LDA.b #$03 : STA.w ItemReceiptID : JMP .done ++ : CMP.b #$5F : BNE ++ ; Progressive Shield - LDA HighestShield : CMP.l ProgressiveShieldLimit : !BLT + - LDA.l ProgressiveShieldReplacement : STA $02D8 : JMP .done + 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 $02D8 : JMP .done + LDA.b #$04 : STA.w ItemReceiptID : JMP .done + : CMP.b #$01 : BNE + ; Fighter Shield - LDA.b #$05 : STA $02D8 : JMP .done + LDA.b #$05 : STA.w ItemReceiptID : JMP .done + ; Everything Else - LDA.b #$06 : STA $02D8 : JMP .done + LDA.b #$06 : STA.w ItemReceiptID : JMP .done ++ : CMP.b #$60 : BNE ++ ; Progressive Armor - LDA HighestMail : CMP.l ProgressiveArmorLimit : !BLT + - LDA.l ProgressiveArmorReplacement : STA $02D8 : JMP .done + 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 $02D8 : JMP .done + LDA.b #$22 : STA.w ItemReceiptID : JMP .done + ; Everything Else - LDA.b #$23 : STA $02D8 : JMP .done + LDA.b #$23 : STA.w ItemReceiptID : JMP .done ++ : CMP.b #$61 : BNE ++ ; Progressive Lifting Glove - LDA GloveEquipment : BNE + ; No Lift - LDA.b #$1B : STA $02D8 : BRA .done + LDA.l GloveEquipment : BNE + ; No Lift + LDA.b #$1B : STA.w ItemReceiptID : BRA .done + ; Everything Else - LDA.b #$1C : STA $02D8 : BRA .done + LDA.b #$1C : STA.w ItemReceiptID : BRA .done ++ : CMP.b #$64 : BNE ++ : -- ; Progressive Bow - LDA BowEquipment : INC : LSR : CMP.l ProgressiveBowLimit : !BLT + - LDA.l ProgressiveBowReplacement : STA $02D8 : JMP .done + 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 $02D8 : BRA .done + LDA.b #$3A : STA.w ItemReceiptID : BRA .done + ; Any Bow - LDA.b #$3B : STA $02D8 : BRA .done + LDA.b #$3B : STA.w ItemReceiptID : BRA .done ++ : CMP.b #$65 : BNE ++ ; Progressive Bow 2 - LDA.l BowTracking : ORA #$20 : STA.l BowTracking + 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 $02D8 + JSL.l GetRNGItemSingle : STA.w ItemReceiptID XBA : JSR.w MarkRNGItemSingle - LDA #$FF : STA !LOCK_IN ; clear lock-in + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in BRA .done ++ : CMP.b #$63 : BNE ++ ; RNG Item (Multi) - JSL.l GetRNGItemMulti : STA $02D8 - LDA #$FF : STA !LOCK_IN ; clear lock-in + JSL.l GetRNGItemMulti : STA.w ItemReceiptID + LDA.b #$FF : STA.l RNGLockIn ; clear lock-in BRA .done ++ .done @@ -892,37 +866,24 @@ Link_ReceiveItemAlternatesExpanded: ;-------------------------------------------------------------------------------- .loadAlternate PHB : PHK : PLB - ;TYA : JSR IncrementItemCounters - ;LDA Link_ReceiveItemAlternatesExpanded, Y : STA $03 - TYA : JSR AttemptItemSubstitution : STA $03 - CPY $03 : BNE + : LDA.b #$FF : STA $03 : + + TYA : JSR AttemptItemSubstitution : STA.b Scrap03 + CPY.b Scrap03 : BNE + : LDA.b #$FF : STA.b Scrap03 : + PLB RTL ;-------------------------------------------------------------------------------- -;DrawHUDSilverArrows: -; LDA BowEquipment : AND.w #$00FF : BNE + -; LDA BowTracking : AND.w #$0040 : BEQ + -; LDA.w #$2810 : STA $11C8 -; LDA.w #$2811 : STA $11CA -; LDA.w #$2820 : STA $1208 -; LDA.w #$2821 : STA $120A -; + -; LDA.w #$11CE : STA $00 ; thing we wrote over -;RTL -;-------------------------------------------------------------------------------- ;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 BowEquipment + LDA.l BowEquipment RTL .normal - LDA BowEquipment : BNE + - LDA BowTracking : AND.b #$40 : BEQ ++ + LDA.l BowEquipment : BNE + + LDA.l BowTracking : AND.b #$40 : BEQ ++ JSL.l DrawHUDArrows ++ - LDA BowEquipment + LDA.l BowEquipment + RTL ;-------------------------------------------------------------------------------- @@ -930,73 +891,68 @@ DrawHUDArrows: LDA.l ArrowMode : BEQ .normal .rupee_arrows - LDA CurrentArrows : BEQ .none ; assuming silvers will increment this. if we go with something else, reorder these checks - LDA BowEquipment : BNE + - LDA BowTracking : AND.b #$40 : BNE .silver + LDA.l CurrentArrows : BEQ .none ; assuming silvers will increment this. if we go with something else, reorder these checks + LDA.l BowEquipment : BNE + + LDA.l BowTracking : AND.b #$40 : BNE .silver BRA .wooden + CMP.b #03 : !BGE .silver .wooden - LDA.b #$A7 : STA $7EC720 ; draw wooden arrow marker - LDA.b #$20 : STA $7EC721 - LDA.b #$A9 : STA $7EC722 - LDA.b #$20 : STA $7EC723 + LDA.b #$A7 : STA.l HUDTileMapBuffer+$20 ; draw wooden arrow marker + LDA.b #$20 : STA.l HUDTileMapBuffer+$21 + LDA.b #$A9 : STA.l HUDTileMapBuffer+$22 + LDA.b #$20 : STA.l HUDTileMapBuffer+$23 RTL .normal ; in normal arrow mode this function is only ever called for silvers .silver - LDA.b #$86 : STA $7EC720 ; draw silver arrow marker - LDA.b #$24 : STA $7EC721 - LDA.b #$87 : STA $7EC722 - LDA.b #$24 : STA $7EC723 + LDA.b #$86 : STA.l HUDTileMapBuffer+$20 ; draw silver arrow marker + LDA.b #$24 : STA.l HUDTileMapBuffer+$21 + LDA.b #$87 : STA.l HUDTileMapBuffer+$22 + LDA.b #$24 : STA.l HUDTileMapBuffer+$23 RTL .none - LDA.b #$7F : STA $7EC720 ; draw no arrow marker - LDA.b #$24 : STA $7EC721 - LDA.b #$7F : STA $7EC722 - LDA.b #$24 : STA $7EC723 + LDA.b #$7F : STA.l HUDTileMapBuffer+$20 ; draw no arrow marker + LDA.b #$24 : STA.l HUDTileMapBuffer+$21 + LDA.b #$7F : STA.l HUDTileMapBuffer+$22 + LDA.b #$24 : STA.l HUDTileMapBuffer+$23 RTL ;-------------------------------------------------------------------------------- -!SCRATCH_AREA = "$7F5020" -!SINGLE_INDEX_TEMP = "$7F5020" -!SINGLE_INDEX_OFFSET_TEMP = "$7F5021" -!SINGLE_INDEX_BITMASK_TEMP = "$7F5022" -!LOCK_IN = "$7F5090" GetRNGItemSingle: PHY - LDA !LOCK_IN : CMP.b #$FF : BEQ + : TAX : XBA : LDA.l RNGSingleItemTable, X : RTL : + + LDA.l RNGLockIn : CMP.b #$FF : BEQ + : TAX : XBA : LDA.l RNGSingleItemTable, X : RTL : + LDX.b #$00 .single_reroll JSL.l GetRandomInt : AND.b #$7F ; select random value - INX : CPX #$7F : !BLT + : LDA.b #$00 : BRA +++ : + ; default to 0 if too many attempts + INX : CPX.b #$7F : !BLT + : LDA.b #$00 : BRA +++ : + ; default to 0 if too many attempts CMP.l RNGSingleTableSize : !BGE .single_reroll +++ - STA !SINGLE_INDEX_TEMP ; put our index value here - LDX #$00 + STA.w ScratchBufferV ; put our index value here + LDX.b #$00 TAY .recheck TYA JSR.w CheckSingleItem : BEQ .single_unused ; already used - LDA !SINGLE_INDEX_TEMP : INC ; increment index + LDA.w ScratchBufferV : INC ; increment index CMP.l RNGSingleTableSize : !BLT +++ : LDA.b #$00 : +++ ; rollover index if needed - STA !SINGLE_INDEX_TEMP ; store index + STA.w ScratchBufferV ; store index INX : TAY : TXA : CMP.l RNGSingleTableSize : !BLT .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 - LDA !SINGLE_INDEX_TEMP + LDA.w ScratchBufferV .single_done TAX : LDA.l RNGSingleItemTable, X - XBA : LDA.l !SINGLE_INDEX_TEMP : STA !LOCK_IN : XBA + XBA : LDA.w ScratchBufferV : STA.l RNGLockIn : XBA PLY RTL ;-------------------------------------------------------------------------------- CheckSingleItem: LSR #3 : TAX - LDA.l RNGItem, X : STA !SINGLE_INDEX_BITMASK_TEMP ; load value to temporary + LDA.l RNGItem, X : STA.w ScratchBufferV+2 ; load value to temporary PHX - LDA !SINGLE_INDEX_TEMP : AND #$07 : TAX ; load 0-7 part into X - LDA !SINGLE_INDEX_BITMASK_TEMP + LDA.w ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X + LDA.w ScratchBufferV+2 --- CPX.b #$00 : BEQ +++ LSR @@ -1008,12 +964,10 @@ CheckSingleItem: RTS ;-------------------------------------------------------------------------------- MarkRNGItemSingle: - ;STA !SINGLE_INDEX_TEMP - - LSR #3 : STA !SINGLE_INDEX_OFFSET_TEMP : TAX + LSR #3 : STA.w ScratchBufferV+1 : TAX LDA.l RNGItem, X - STA.l !SINGLE_INDEX_BITMASK_TEMP - LDA.l !SINGLE_INDEX_TEMP : AND #$07 : TAX ; load 0-7 part into X + STA.w ScratchBufferV+2 + LDA.w ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X LDA.b #01 --- CPX.b #$00 : BEQ +++ @@ -1023,21 +977,21 @@ MarkRNGItemSingle: +++ PHA - LDA.l !SINGLE_INDEX_OFFSET_TEMP : TAX + LDA.w ScratchBufferV+1 : TAX PLA - ORA.l !SINGLE_INDEX_BITMASK_TEMP + ORA.w ScratchBufferV+2 STA.l RNGItem, X RTS ;-------------------------------------------------------------------------------- GetRNGItemMulti: - LDA !LOCK_IN : CMP #$FF : BEQ + : TAX : XBA : LDA.l RNGMultiItemTable, X : RTL : + + LDA.l RNGLockIn : CMP.b #$FF : BEQ + : TAX : XBA : LDA.l RNGMultiItemTable, X : RTL : + LDX.b #$00 - ; reroll JSL.l GetRandomInt : AND.b #$7F ; select random value - INX : CPX #$7F : !BLT + : LDA.b 00 : BRA .done : + ; default to 0 if too many attempts + INX : CPX.b #$7F : !BLT + : LDA.b 00 : BRA .done : + ; default to 0 if too many attempts CMP.l RNGMultiTableSize : !BGE - .done - STA !LOCK_IN + STA.l RNGLockIn TAX : XBA : LDA.l RNGMultiItemTable, X RTL ;-------------------------------------------------------------------------------- @@ -1047,11 +1001,11 @@ IncrementItemCounters: - LDA.l ItemSubstitutionRules, X CMP.b #$FF : BEQ .exit - CMP 1,s : BNE .noMatch + CMP.b 1,s : BNE .noMatch .match PHX TXA : LSR #2 : TAX - LDA ItemLimitCounts, X : INC : STA ItemLimitCounts, X + LDA.l ItemLimitCounts, X : INC : STA.l ItemLimitCounts, X PLX BEQ .exit .noMatch @@ -1062,53 +1016,52 @@ IncrementItemCounters: RTS ;-------------------------------------------------------------------------------- AttemptItemSubstitution: - PHX : PHA - LDX.b #$00 - - - LDA.l ItemSubstitutionRules, X - CMP.b #$FF : BEQ .exit - CMP 1,s : BNE .noMatch - .match - PHX - TXA : LSR #2 : TAX - LDA ItemLimitCounts, X - PLX - CMP.l ItemSubstitutionRules+1, X : !BLT + - LDA.l ItemSubstitutionRules+2, X : STA 1,s - + - BEQ .exit - .noMatch - INX #4 - BRA - -.exit - PLA : PLX + 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 ;-------------------------------------------------------------------------------- CountBottles: - PHX + PHX LDX.b #$00 - LDA BottleContentsOne : BEQ ++ : INX - ++ : LDA BottleContentsTwo : BEQ ++ : INX - ++ : LDA BottleContentsThree : BEQ ++ : INX - ++ : LDA 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 ;-------------------------------------------------------------------------------- ActivateGoal: - STZ $11 - STZ $B0 + STZ.b GameSubMode + STZ.b SubSubModule JML.l StatsFinalPrep ;-------------------------------------------------------------------------------- ChestPrep: - LDA.b #$01 : STA $02E9 + LDA.b #$01 : STA.w ItemReceiptMethod JSL.l IncrementChestCounter LDA.l ServerRequestMode : BEQ + JSL.l ChestItemServiceRequest RTL + - LDY $0C ; get item value + LDY.b Scrap0C ; get item value SEC RTL ;-------------------------------------------------------------------------------- @@ -1116,44 +1069,44 @@ RTL ; counts on MaybeFlagCompassTotalPickup: LDA.l CompassMode : AND.b #$0F : BEQ .done - LDA $040C : CMP #$FF : BEQ .done - LSR : STA $04 : LDA #$0F : !SUB $04 ; Compute flag "index" - CPY #$25 : BEQ .setFlag ; Set flag if it's a compass for this dungeon - STA $04 - TYA : AND #$0F : CMP $04 : BNE .done ; Check if compass is for this dungeon + 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 #$08 : !BGE ++ + CMP.b #$08 : !BGE ++ %ValueShift() - ORA CompassCountDisplay : STA CompassCountDisplay + 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 CompassCountDisplay+1 : STA CompassCountDisplay+1 + ORA.l CompassCountDisplay+1 : STA.l CompassCountDisplay+1 .done RTL ;-------------------------------------------------------------------------------- ; Set the compass count display flag if we're entering a dungeon and alerady have ; that compass MaybeFlagCompassTotalEntrance: - LDX $040C : CPX #$FF : BEQ .done ; Skip if we're not entering dungeon + LDX.w DungeonID : CPX.b #$FF : BEQ .done ; Skip if we're not entering dungeon LDA.l CompassMode : AND.w #$000F : BEQ .done ; Skip if we're not showing compass counts CMP.w #$0002 : BEQ .countShown - LDA CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass + LDA.l CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass .countShown SEP #$20 - TXA : LSR : STA.b $04 : LDA.b #$0F : !SUB $04 ; Compute flag "index" - CMP #$08 : !BGE ++ + TXA : LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag index + CMP.b #$08 : !BGE ++ %ValueShift() - ORA CompassCountDisplay : STA CompassCountDisplay + 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 CompassCountDisplay+1 : STA CompassCountDisplay+1 + ORA.l CompassCountDisplay+1 : STA.l CompassCountDisplay+1 REP #$20 .done RTL diff --git a/npcitems.asm b/npcitems.asm index 8aa788a..96c8d43 100644 --- a/npcitems.asm +++ b/npcitems.asm @@ -23,148 +23,127 @@ ;-------------------------------------------------------------------------------- ItemCheck_FairySword: - LDA NpcFlags+1 : AND.b #$08 + LDA.l NpcFlags+1 : AND.b #$08 RTL ItemCheck_SmithSword: - LDA NpcFlags+1 : AND.b #$04 + LDA.l NpcFlags+1 : AND.b #$04 RTL ItemCheck_MagicBat: - LDA NpcFlags+1 : AND.b #$80 + LDA.l NpcFlags+1 : AND.b #$80 RTL ItemCheck_OldMan: - LDA NpcFlags : AND.b #$01 : CMP #$01 + LDA.l NpcFlags : AND.b #$01 : CMP.b #$01 RTL ItemCheck_ZoraKing: - LDA NpcFlags : AND.b #$02 + LDA.l NpcFlags : AND.b #$02 RTL ItemCheck_SickKid: - LDA NpcFlags : AND.b #$04 + LDA.l NpcFlags : AND.b #$04 RTL ItemCheck_TreeKid: - LDA NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment + LDA.l NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment RTL ItemCheck_TreeKid2: - LDA NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 + LDA.l NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 RTL ItemCheck_TreeKid3: JSL $0DD030 ; FluteAardvark_Draw - thing we wrote over - LDA NpcFlags : AND.b #$08 + LDA.l NpcFlags : AND.b #$08 BEQ .normal BRA .done LDA.b #$05 .normal - LDA $0D80, X + LDA.w SpriteActivity, X .done RTL ItemCheck_Sahasrala: - LDA NpcFlags : AND.b #$10 + LDA.l NpcFlags : AND.b #$10 RTL ItemCheck_Library: - LDA NpcFlags : AND.b #$80 + LDA.l NpcFlags : AND.b #$80 RTL ItemCheck_Mushroom: - LDA NpcFlags+1 : ROL #4 ; does the same thing as below -; LDA NpcFlags+1 : AND.b #$10 : BEQ .clear -; SEC -;RTL -; .clear -; CLC + LDA.l NpcFlags+1 : ROL #4 ; does the same thing as below RTL ItemCheck_Powder: - LDA NpcFlags+1 : AND.b #$20 + LDA.l NpcFlags+1 : AND.b #$20 RTL ItemCheck_Catfish: - ;LDA CatfishGoodItem : BEQ .junk - ;PHX - ; LDA CatfishGoodItem+1 : TAX - ; LDA BowEquipment-1, X - ;PLX - ;-- - ;CMP CatfishGoodItem : !BLT .oursNewer - ;.theirsNewer - ;LDA #$20 : RTL ; don't give item - ;.oursNewers - ;LDA #$00 : RTL ; give item - ;.junk - LDA NpcFlags : AND.b #$20 + LDA.l NpcFlags : AND.b #$20 RTL ;-------------------------------------------------------------------------------- ItemSet_FairySword: - PHA : LDA NpcFlags+1 : ORA.b #$08 : STA NpcFlags+1 : PLA + PHA : LDA.l NpcFlags+1 : ORA.b #$08 : STA.l NpcFlags+1 : PLA RTL ItemSet_SmithSword: - PHA : LDA NpcFlags+1 : ORA.b #$04 : STA NpcFlags+1 : PLA + PHA : LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1 : PLA RTL ItemSet_MagicBat: - PHA : LDA NpcFlags+1 : ORA.b #$80 : STA NpcFlags+1 : PLA + PHA : LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1 : PLA RTL ItemSet_OldMan: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA NpcFlags : ORA.b #$01 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$01 : STA.l NpcFlags : PLA RTL ItemSet_ZoraKing: - ;JSL $1DE1AA ; Sprite_SpawnFlippersItem ; thing we wrote over - PHA : LDA NpcFlags : ORA.b #$02 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$02 : STA.l NpcFlags : PLA RTL ItemSet_SickKid: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA NpcFlags : ORA.b #$04 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags : PLA RTL ItemSet_TreeKid: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA NpcFlags : ORA.b #$08 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$08 : STA.l NpcFlags : PLA RTL ItemSet_Sahasrala: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA NpcFlags : ORA.b #$10 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags : PLA RTL ItemSet_Catfish: - ;JSL $00D52D ; GetAnimatedSpriteTile.variable ; thing we wrote over - ;JSL.l LoadCatfishItemGFX - PHA : LDA NpcFlags : ORA.b #$20 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$20 : STA.l NpcFlags : PLA RTL ItemSet_Library: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA NpcFlags : ORA.b #$80 : STA NpcFlags : PLA + PHA : LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags : PLA RTL ItemSet_Mushroom: PHA - LDA NpcFlags+1 : ORA.b #$10 : STA NpcFlags+1 - LDY $0E80, X ; Retrieve stored item type + LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1 + LDY.w SpriteItemType, X ; Retrieve stored item type BNE + ; if for any reason the item value is 0 reload it, just in case %GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY + PLA - ;LDY.b #$29 - STZ $02E9 ; thing we wrote over - the mushroom is an npc for item purposes apparently + STZ.w ItemReceiptMethod ; thing we wrote over - the mushroom is an npc for item purposes apparently RTL ItemSet_Powder: - PHA : LDA NpcFlags+1 : ORA.b #$20 : STA NpcFlags+1 : PLA + PHA : LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1 : PLA RTL ;================================================================================ @@ -172,11 +151,11 @@ RTL ; Randomize 300 Rupee NPC ;-------------------------------------------------------------------------------- Set300RupeeNPCItem: - INC $0D80, X ; thing we wrote over + INC.w SpriteActivity, X ; thing we wrote over PHA : PHP REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #291 : BNE + %GetPossiblyEncryptedItem(RupeeNPC_MoldormCave, SpriteItemValues) TAY ; load moldorm cave value into Y @@ -190,4 +169,42 @@ Set300RupeeNPCItem: .done PLP : PLA RTL + ;================================================================================ +; Randomize Zora King +;-------------------------------------------------------------------------------- +LoadZoraKingItemGFX: + LDA.l $1DE1C3 ; location randomizer writes zora item to + JML.l PrepDynamicTile +;-------------------------------------------------------------------------------- +JumpToSplashItemTarget: + LDA.w SpriteMovement, X + CMP.b #$FF : BNE + : JML.l SplashItem_SpawnSplash : + + CMP.b #$00 : JML.l SplashItem_SpawnOther + +;================================================================================ +; Randomize Catfish +;-------------------------------------------------------------------------------- +LoadCatfishItemGFX: + LDA.l $1DE185 ; location randomizer writes catfish item to + JML PrepDynamicTile +;-------------------------------------------------------------------------------- +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 + JML DrawDynamicTile +;-------------------------------------------------------------------------------- +MarkThrownItem: + JSL Link_ReceiveItem ; thing we wrote over + LDA.b OverworldIndex : CMP.b #$81 : BNE .catfish + .zora + JML ItemSet_ZoraKing + .catfish + JML ItemSet_Catfish +;-------------------------------------------------------------------------------- diff --git a/password.asm b/password.asm index 4e71af0..edf77c7 100644 --- a/password.asm +++ b/password.asm @@ -1,8 +1,5 @@ -!PASSWORD_CODE_POSITION = "$C8" -!PASSWORD_SELECTION_POSITION = "$C9" - Module_Password: - LDA $11 + LDA.b GameSubMode JSL.l UseImplicitRegIndexedLongJumpTable @@ -13,36 +10,35 @@ Module_Password: dl Password_Return ; 4 Password_BeginInit: - LDA.b #$80 : STA $0710 ;skip animated sprite updates in NMI + LDA.b #$80 : STA.w $0710 ;skip animated sprite updates in NMI JSL EnableForceBlank JSL Vram_EraseTilemaps_triforce - ;JSL Palette_SelectScreen JSL LoadCustomHudPalette ; replace the 2bpp palettes, and trigger upload - LDA.b #$07 : STA $14 ; have NMI load up the initial tilemap from Password_Tilemap + LDA.b #$07 : STA.b NMISTRIPES ; have NMI load up the initial tilemap from Password_Tilemap - INC $11 + INC.b GameSubMode RTL Password_EndInit: - JSR LoadPasswordStripeTemplate + JSR LoadPasswordStripeTemplate - ;reset the variables used by this screen - STZ !PASSWORD_CODE_POSITION - STZ !PASSWORD_SELECTION_POSITION + ;reset the variables used by this screen + STZ.b PasswordCodePosition + STZ.b PasswordSelectPosition - JSL ValidatePassword : BNE + - ; zero out password if not valid - LDX.b #$0F - LDA.b #$00 - - - STA.l PasswordSRAM, X - DEX : BPL - + JSL ValidatePassword : BNE + + ; zero out password if not valid + LDX.b #$0F + LDA.b #$00 + - + STA.l PasswordSRAM, X + DEX : BPL - + - LDA.b #$0F : STA $13 - INC $11 + LDA.b #$0F : STA.b INIDISPQ + INC.b GameSubMode RTL Password_Main: @@ -52,78 +48,78 @@ Password_Main: JSR PasswordEraseOldCursors ; handle joypad input - LDA $F6 : AND.b #$10 : BEQ + ; R Button + LDA.b $F6 : AND.b #$10 : BEQ + ; R Button JSR PasswordMoveCursorRight + - LDA $F6 : AND.b #$20 : BEQ + ; L Button + LDA.b $F6 : AND.b #$20 : BEQ + ; L Button JSR PasswordMoveCursorLeft + - LDA $F4 : AND.b #$01 : BEQ + ; right - LDA !PASSWORD_SELECTION_POSITION : INC A : CMP.b #$24 : !BLT ++ + LDA.b $F4 : AND.b #$01 : BEQ + ; right + LDA.b PasswordSelectPosition : INC A : CMP.b #$24 : !BLT ++ !SUB.b #$24 ++ - STA !PASSWORD_SELECTION_POSITION - LDA.b #$20 : STA $012F + STA.b PasswordSelectPosition + LDA.b #$20 : STA.w SFX3 + - LDA $F4 : AND.b #$02 : BEQ + ; left - LDA !PASSWORD_SELECTION_POSITION : DEC A : BPL ++ + LDA.b $F4 : AND.b #$02 : BEQ + ; left + LDA.b PasswordSelectPosition : DEC A : BPL ++ !ADD.b #$24 ++ - STA !PASSWORD_SELECTION_POSITION - LDA.b #$20 : STA $012F + STA.b PasswordSelectPosition + LDA.b #$20 : STA.w SFX3 + - LDA $F4 : AND.b #$04 : BEQ + ; down - LDA !PASSWORD_SELECTION_POSITION : !ADD.b #$09 : CMP.b #$24 : !BLT ++ + LDA.b $F4 : AND.b #$04 : BEQ + ; down + LDA.b PasswordSelectPosition : !ADD.b #$09 : CMP.b #$24 : !BLT ++ !SUB.b #$24 ++ - STA !PASSWORD_SELECTION_POSITION - LDA.b #$20 : STA $012F + STA.b PasswordSelectPosition + LDA.b #$20 : STA.w SFX3 + - LDA $F4 : AND.b #$08 : BEQ + ; up - LDA !PASSWORD_SELECTION_POSITION : !SUB.b #$09 : BPL ++ + LDA.b $F4 : AND.b #$08 : BEQ + ; up + LDA.b PasswordSelectPosition : !SUB.b #$09 : BPL ++ !ADD.b #$24 ++ - STA !PASSWORD_SELECTION_POSITION - LDA.b #$20 : STA $012F + STA.b PasswordSelectPosition + LDA.b #$20 : STA.w SFX3 + - LDA $F4 : ORA $F6 : AND.b #$C0 : BEQ + ; face button - LDX !PASSWORD_SELECTION_POSITION + LDA.b $F4 : ORA.b $F6 : AND.b #$C0 : BEQ + ; face button + LDX.b PasswordSelectPosition LDA.l .selectionValues, X : BPL ++ - CMP #$F0 : BNE +++ - INC $11 + CMP.b #$F0 : BNE +++ + INC.b GameSubMode BRA .endOfButtonChecks - +++ : CMP #$F1 : BNE +++ + +++ : CMP.b #$F1 : BNE +++ JSR PasswordMoveCursorLeft BRA + - +++ : CMP #$F2 : BNE +++ + +++ : CMP.b #$F2 : BNE +++ JSR PasswordMoveCursorRight BRA + - +++ : CMP #$F3 : BNE +++ - INC $11 : INC $11 ; skip to return submodule - LDA.b #$2C : STA $012E ;file screen selection sound + +++ : CMP.b #$F3 : BNE +++ + INC.b GameSubMode : INC.b GameSubMode ; skip to return submodule + LDA.b #$2C : STA.w SFX2 ;file screen selection sound BRA .endOfButtonChecks +++ BRA + ++ - LDX !PASSWORD_CODE_POSITION - STA PasswordSRAM,X - TXA : INC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION + LDX.b PasswordCodePosition + STA.l PasswordSRAM,X + TXA : INC A : AND.b #$0F : STA.b PasswordCodePosition BNE ++ - STZ $012E - INC $11 + STZ.w SFX2 + INC.b GameSubMode BRA .endOfButtonChecks ++ - LDA.b #$2B : STA $012E + LDA.b #$2B : STA.w SFX2 + - LDA $F4 : AND.b #$10 : BEQ + ; start - INC $11 + LDA.b $F4 : AND.b #$10 : BEQ + ; start + INC.b GameSubMode + .endOfButtonChecks JSR UpdatePasswordTiles JSR PasswordSetNewCursors - LDA.b #$01 : STA $14 + LDA.b #$01 : STA.b NMISTRIPES PLB RTL .selectionValues @@ -134,21 +130,21 @@ db $19, $1A, $1B, $1C, $1D, $1E, $1F, $20, $F3 Password_Check: JSL.l ValidatePassword : BNE .correct - LDA.b #$3C : STA $012E ; error - DEC $11 + LDA.b #$3C : STA.w SFX2 ; error + DEC.b GameSubMode RTL .correct - LDA.b #$1B : STA $012F ; solved puzzle sound - INC $11 + LDA.b #$1B : STA.w SFX3 ; solved puzzle sound + INC.b GameSubMode RTL Password_Return: - LDA.b #$01 : STA $10 ; select screen - LDA.b #$01 : STA $11 ; Skip the first submodule - STZ $B0 - STZ $0B9D ; Reset file screen cursor pre-selection - STZ $C8 - STZ $C9 + LDA.b #$01 : STA.b GameMode ; select screen + LDA.b #$01 : STA.b GameSubMode ; Skip the first submodule + STZ.b SubSubModule + STZ.w SaveFileIndex + STZ.b PasswordCodePosition + STZ.b PasswordCodePosition+1 RTL ;-------------------------------------------------------------------------------- @@ -162,7 +158,7 @@ ValidatePassword: PHX : PHY ;check for incomplete password - LDX #$0F + LDX.b #$0F - LDA.l PasswordSRAM, X : BNE + JMP .incorrect @@ -174,45 +170,45 @@ ValidatePassword: ; Clear out any existing encryption key LDX.b #$0E LDA.w #$0000 - - : STA.l !keyBase, X : DEX #2 : BPL - + - : STA.l KeyBase, X : DEX #2 : BPL - JSR PasswordToKey - LDA.l StaticDecryptionKey+$0A : STA.l !keyBase+$0A - LDA.l StaticDecryptionKey+$0C : STA.l !keyBase+$0C - LDA.l StaticDecryptionKey+$0E : STA.l !keyBase+$0E + LDA.l StaticDecryptionKey+$0A : STA.l KeyBase+$0A + LDA.l StaticDecryptionKey+$0C : STA.l KeyBase+$0C + LDA.l StaticDecryptionKey+$0E : STA.l KeyBase+$0E - LDA.l KnownEncryptedValue : STA.l !CryptoBuffer - LDA.l KnownEncryptedValue+2 : STA.l !CryptoBuffer+2 - LDA.l KnownEncryptedValue+4 : STA.l !CryptoBuffer+4 - LDA.l KnownEncryptedValue+6 : STA.l !CryptoBuffer+6 + LDA.l KnownEncryptedValue : STA.l CryptoBuffer + LDA.l KnownEncryptedValue+2 : STA.l CryptoBuffer+2 + LDA.l KnownEncryptedValue+4 : STA.l CryptoBuffer+4 + LDA.l KnownEncryptedValue+6 : STA.l CryptoBuffer+6 - LDA.w #$0002 : STA $04 ;set block size + LDA.w #$0002 : STA.b $04 ;set block size JSL.l XXTEA_Decode SEP #$20 ; 8 bit accumulator - LDA !CryptoBuffer+0 : CMP #$31 : BNE .incorrect - LDA !CryptoBuffer+1 : CMP #$41 : BNE .incorrect - LDA !CryptoBuffer+2 : CMP #$59 : BNE .incorrect - LDA !CryptoBuffer+3 : CMP #$26 : BNE .incorrect - LDA !CryptoBuffer+4 : CMP #$53 : BNE .incorrect - LDA !CryptoBuffer+5 : CMP #$58 : BNE .incorrect - LDA !CryptoBuffer+6 : CMP #$97 : BNE .incorrect - LDA !CryptoBuffer+7 : CMP #$93 : BNE .incorrect + LDA.l CryptoBuffer+0 : CMP.b #$31 : BNE .incorrect + LDA.l CryptoBuffer+1 : CMP.b #$41 : BNE .incorrect + LDA.l CryptoBuffer+2 : CMP.b #$59 : BNE .incorrect + LDA.l CryptoBuffer+3 : CMP.b #$26 : BNE .incorrect + LDA.l CryptoBuffer+4 : CMP.b #$53 : BNE .incorrect + LDA.l CryptoBuffer+5 : CMP.b #$58 : BNE .incorrect + LDA.l CryptoBuffer+6 : CMP.b #$97 : BNE .incorrect + LDA.l CryptoBuffer+7 : CMP.b #$93 : BNE .incorrect ;trial decrypt the known plaintext, and verify if result is correct .correct PLY : PLX - LDA #$01 : STA.l !ValidKeyLoaded + LDA.b #$01 : STA.l ValidKeyLoaded RTL .incorrect PLY : PLX - LDA #$00 + LDA.b #$00 RTL ;-------------------------------------------------------------------------------- @@ -223,75 +219,69 @@ PasswordToKey: ; $00 input offset ; $02 output offset ; $04 shift amount - LDA.w #$0000 : STA $00 : STA $02 - LDA.w #$000B : STA $04 + LDA.w #$0000 : STA.b $00 : STA.b $02 + LDA.w #$000B : STA.b $04 - - LDX $00 - LDA PasswordSRAM, X : DEC : AND #$001F - LDY $04 + LDX.b $00 + LDA.l PasswordSRAM, X : DEC : AND.w #$001F + LDY.b $04 -- : BEQ + : ASL : DEY : BRA -- : + ; Shift left by Y XBA - LDX $02 - ORA !keyBase, X - STA !keyBase, X + LDX.b $02 + ORA.l KeyBase, X + STA.l KeyBase, X - LDA $04 : !SUB.w #$0005 : BPL + + LDA.b $04 : !SUB.w #$0005 : BPL + !ADD.w #$0008 INC $02 - + : STA $04 + + : STA.b $04 - LDA $00 : INC : STA $00 : CMP.w #$0010 : !BLT - + LDA.b $00 : INC : STA.b $00 : CMP.w #$0010 : !BLT - RTS LoadPasswordStripeTemplate: - LDA $4300 : PHA : LDA $4301 : PHA : LDA $4302 : PHA ; preserve DMA parameters - LDA $4303 : PHA : LDA $4304 : PHA : LDA $4305 : PHA ; preserve DMA parameters - LDA $4306 : PHA ; preserve DMA parameters + LDA.w DMAP0 : PHA : LDA.w BBAD0 : PHA : LDA.w A1T0L : PHA ; preserve DMA parameters + LDA.w A1T0H : PHA : LDA.w A1B0 : PHA : LDA.w DAS0L : PHA ; preserve DMA parameters + LDA.w DAS0H : PHA ; preserve DMA parameters + + 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 destination to WRAM register - LDA.b #$00 : STA $4300 ; set DMA transfer direction A -> B, bus A auto increment, single-byte mode - LDA.b #$80 : STA $4301 ; set bus B destination to WRAM register + LDA.b #$02 : STA.w WMADDL ; set WRAM register source address + LDA.b #$10 : STA.w WMADDH + LDA.b #$7E : STA.w WMADDB - LDA.b #$02 : STA $2181 ; set WRAM register source address - LDA.b #$10 : STA $2182 - LDA.b #$7E : STA $2183 - - LDA.b #Password_StripeImageTemplate : STA $4302 ; set bus A source address - LDA.b #Password_StripeImageTemplate>>8 : STA $4303 ; set bus A source address - LDA.b #Password_StripeImageTemplate>>16 : STA $4304 ; set bus A source bank + LDA.b #Password_StripeImageTemplate : STA.w A1T0L ; set bus A source address + LDA.b #Password_StripeImageTemplate>>8 : STA.w A1T0H ; set bus A source address + LDA.b #Password_StripeImageTemplate>>16 : STA.w A1B0 ; set bus A source bank LDA.b #Password_StripeImageTemplate_end-Password_StripeImageTemplate - STA $4305 ; + STA.w DAS0L ; LDA.b #Password_StripeImageTemplate_end-Password_StripeImageTemplate>>8 - STA $4306 ; set transfer size + STA.w DAS0H ; set transfer size - LDA #$01 : STA $420B ; begin DMA transfer + LDA.b #$01 : STA.w MDMAEN ; begin DMA transfer - PLA : STA $4306 : PLA : STA $4305 : PLA : STA $4304 ; restore DMA parameters - PLA : STA $4303 : PLA : STA $4302 : PLA : STA $4301 ; restore DMA parameters - PLA : STA $4300 ; restore DMA parameters + PLA : STA.w DAS0H : PLA : STA.w DAS0L : PLA : STA.w A1B0 ; restore DMA parameters + PLA : STA.w A1T0H : PLA : STA.w A1T0L : PLA : STA.w BBAD0 ; restore DMA parameters + PLA : STA.w DMAP0 ; restore DMA parameters RTS -!PASSWORD_INPUT_START_X = $03 -!PASSWORD_INPUT_START_Y = $0D - -!PASSWORD_DISPLAY_START_X = $04 -!PASSWORD_DISPLAY_START_Y = $04 - PasswordEraseOldCursors: REP #$20 ; set 16-bit accumulator ;Code Cursor - LDA !PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX + LDA.b PasswordCodePosition : AND.w #$00FF : ASL : TAX LDA.l .code_offsets, X - !ADD.w #$20*!PASSWORD_DISPLAY_START_Y+!PASSWORD_DISPLAY_START_X+$6000 + !ADD.w #$20*Scrap04+Scrap04+$6000 XBA ; because big endian is needed STA.l $1002+Password_StripeImageTemplate_CodeCursorErase-Password_StripeImageTemplate ;selection cursor - LDA !PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX + LDA.b PasswordSelectPosition : AND.w #$00FF : ASL : TAX LDA.l .selection_offsets, X - !ADD.w #$20*!PASSWORD_INPUT_START_Y+!PASSWORD_INPUT_START_X+$6000 + !ADD.w #$20*Scrap0D+Scrap03+$6000 XBA ; because big endian is needed STA.l $1002+Password_StripeImageTemplate_SelectionCursorErase-Password_StripeImageTemplate XBA : !ADD.w #$0020 : XBA @@ -315,16 +305,16 @@ RTS PasswordSetNewCursors: REP #$20 ; set 16-bit accumulator ;Code Cursor - LDA !PASSWORD_CODE_POSITION : AND.w #$00FF : ASL : TAX + LDA.b PasswordCodePosition : AND.w #$00FF : ASL : TAX LDA.l PasswordEraseOldCursors_code_offsets, X - !ADD.w #$20*!PASSWORD_DISPLAY_START_Y+!PASSWORD_DISPLAY_START_X+$6000 + !ADD.w #$20*Scrap04+Scrap04+$6000 XBA ; because big endian is needed STA.l $1002+Password_StripeImageTemplate_CodeCursorDraw-Password_StripeImageTemplate ;Selection cursor - LDA !PASSWORD_SELECTION_POSITION : AND.w #$00FF : ASL : TAX + LDA.b PasswordSelectPosition : AND.w #$00FF : ASL : TAX LDA.l PasswordEraseOldCursors_selection_offsets, X - !ADD.w #$20*!PASSWORD_INPUT_START_Y+!PASSWORD_INPUT_START_X+$6000 + !ADD.w #$20*Scrap0D+Scrap03+$6000 XBA ; because big endian is needed STA.l $1002+Password_StripeImageTemplate_SelectionCursorDraw-Password_StripeImageTemplate XBA : !ADD.w #$0020 : XBA @@ -342,16 +332,16 @@ UpdatePasswordTiles: LDX.w #$000F - LDA.l PasswordSRAM, X : AND.w #$00FF : TXY - ASL #3 : STA $00 - TYA : ASL #4 : STA $03 - LDX $00 : LDA.l HashAlphabetTilesWithBlank, X - LDX $03 : STA $1006, X - LDX $00 : LDA.l HashAlphabetTilesWithBlank+$02, X - LDX $03 : STA $1008, X - LDX $00 : LDA.l HashAlphabetTilesWithBlank+$04, X - LDX $03 : STA $100E, X - LDX $00 : LDA.l HashAlphabetTilesWithBlank+$06, X - LDX $03 : STA $1010, X + ASL #3 : STA.b $00 + TYA : ASL #4 : STA.b $03 + LDX.b $00 : LDA.l HashAlphabetTilesWithBlank, X + LDX.b $03 : STA.w $1006, X + LDX.b $00 : LDA.l HashAlphabetTilesWithBlank+$02, X + LDX.b $03 : STA.w $1008, X + LDX.b $00 : LDA.l HashAlphabetTilesWithBlank+$04, X + LDX.b $03 : STA.w $100E, X + LDX.b $00 : LDA.l HashAlphabetTilesWithBlank+$06, X + LDX.b $03 : STA.w $1010, X TYX : DEX : BMI + : BRA - + @@ -360,13 +350,13 @@ RTS PasswordMoveCursorRight: ; return new code position - LDA.b #$2B : STA $012E - LDA !PASSWORD_CODE_POSITION : INC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION + LDA.b #$2B : STA.w SFX2 + LDA.b PasswordCodePosition : INC A : AND.b #$0F : STA.b PasswordCodePosition RTS PasswordMoveCursorLeft: ; return new code position - LDA.b #$2B : STA $012E - LDA !PASSWORD_CODE_POSITION : DEC A : AND.b #$0F : STA !PASSWORD_CODE_POSITION + LDA.b #$2B : STA.w SFX2 + LDA.b PasswordCodePosition : DEC A : AND.b #$0F : STA.b PasswordCodePosition RTS macro dw_big_endian(value) @@ -380,7 +370,7 @@ endmacro Password_Tilemap: ;Add any graphics for background 0 here -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+0) +%Layer3_VRAM_Address(Scrap03,Scrap0D+0) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$0201|!FS_COLOR_YELLOW, #$0202|!FS_COLOR_YELLOW ;BOW dw #$0200 @@ -400,7 +390,7 @@ dw #$0285|!FS_COLOR_GREEN, #$0286|!FS_COLOR_GREEN ;PENDANT dw #$0200 dw #$02AB|!FS_COLOR_BW, #$02AB|!FS_COLOR_BW ;placeholder upper half action button -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+1) +%Layer3_VRAM_Address(Scrap03,Scrap0D+1) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$0211|!FS_COLOR_YELLOW, #$0212|!FS_COLOR_YELLOW ;BOW dw #$0200 @@ -420,7 +410,7 @@ dw #$0295|!FS_COLOR_GREEN, #$0296|!FS_COLOR_GREEN ;PENDANT dw #$0200 dw #$02AB|!FS_COLOR_BW, #$02AB|!FS_COLOR_BW ;placeholder lower half action button -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+3) +%Layer3_VRAM_Address(Scrap03,Scrap0D+3) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$0207|!FS_COLOR_YELLOW, #$0217|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;BOMBOS dw #$0200 @@ -440,7 +430,7 @@ dw #$0228|!FS_COLOR_YELLOW, #$0229|!FS_COLOR_YELLOW ;NET dw #$0200 dw #$018A|!FS_COLOR_BW, #$0200 ; Left -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+4) +%Layer3_VRAM_Address(Scrap03,Scrap0D+4) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$0217|!FS_COLOR_YELLOW, #$0207|!FS_COLOR_YELLOW|!FS_HFLIP|!FS_VFLIP ;BOMBOS dw #$0200 @@ -460,7 +450,7 @@ dw #$0238|!FS_COLOR_YELLOW, #$0239|!FS_COLOR_YELLOW ;NET dw #$0200 dw #$019A|!FS_COLOR_BW, #$0200 ; Left -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+6) +%Layer3_VRAM_Address(Scrap03,Scrap0D+6) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$022A|!FS_COLOR_GREEN, #$022B|!FS_COLOR_GREEN ;BOOK dw #$0200 @@ -480,7 +470,7 @@ dw #$024E|!FS_COLOR_BROWN, #$024F|!FS_COLOR_BROWN dw #$0200 dw #$0200, #$018B|!FS_COLOR_BW ; Right -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+7) +%Layer3_VRAM_Address(Scrap03,Scrap0D+7) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$023A|!FS_COLOR_GREEN, #$023B|!FS_COLOR_GREEN ;BOOK dw #$0200 @@ -500,7 +490,7 @@ dw #$025E|!FS_COLOR_BROWN, #$025F|!FS_COLOR_BROWN ;GLOVES dw #$0200 dw #$0200, #$019B|!FS_COLOR_BW ; Right -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+9) +%Layer3_VRAM_Address(Scrap03,Scrap0D+9) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$020E|!FS_COLOR_BLUE, #$020F|!FS_COLOR_BLUE ;FLIPPERS dw #$0200 @@ -520,7 +510,7 @@ dw #$022F|!FS_COLOR_YELLOW|!FS_HFLIP, #$022F|!FS_COLOR_YELLOW ;KEY dw #$0200 dw #$0267|!FS_COLOR_BW|!FS_HFLIP, #$0267|!FS_COLOR_BW ;cancel -%Layer3_VRAM_Address(!PASSWORD_INPUT_START_X,!PASSWORD_INPUT_START_Y+10) +%Layer3_VRAM_Address(Scrap03,Scrap0D+10) %dw_big_endian(51) ;(9*4)+(8*2)-1 dw #$021F|!FS_COLOR_BLUE|!FS_HFLIP, #$021F|!FS_COLOR_BLUE ;FLIPPERS dw #$0200 @@ -543,10 +533,10 @@ dw #$0267|!FS_COLOR_BW|!FS_HFLIP|!FS_VFLIP, #$0267|!FS_VFLIP|!FS_COLOR_BW ;cance dw $FFFF macro PasswordDisplaySlot(x,y) - %Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X+,!PASSWORD_DISPLAY_START_Y+) + %Layer3_VRAM_Address(Scrap04+,Scrap04+) %dw_big_endian(3) dw #$0186|!FS_COLOR_BW, #$0186|!FS_COLOR_BW - %Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X+,!PASSWORD_DISPLAY_START_Y+1+) + %Layer3_VRAM_Address(Scrap04+,Scrap04+1+) %dw_big_endian(3) dw #$0196|!FS_COLOR_BW, #$0196|!FS_COLOR_BW endmacro @@ -569,37 +559,37 @@ Password_StripeImageTemplate: %PasswordDisplaySlot(18,3) %PasswordDisplaySlot(21,3) .CodeCursorErase ; a code cursor erase (position get be updated) - %Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X,!PASSWORD_DISPLAY_START_Y+2) + %Layer3_VRAM_Address(Scrap04,Scrap04+2) %dw_big_endian(3) dw #$0200, #$0200 .CodeCursorDraw ; Then comes a code cursor draw (will override the erase if same position) - %Layer3_VRAM_Address(!PASSWORD_DISPLAY_START_X,!PASSWORD_DISPLAY_START_Y+2) + %Layer3_VRAM_Address(Scrap04,Scrap04+2) %dw_big_endian(3) dw #$0267|!FS_COLOR_BW|!FS_HFLIP|!FS_VFLIP, #$0267|!FS_VFLIP|!FS_COLOR_BW .SelectionCursorErase ; a selection cursor erase (position get be updated) - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y-1) + %Layer3_VRAM_Address(Scrap03-1,Scrap0D-1) %dw_big_endian(7) dw #$0200, #$0200, #$0200, #$0200 - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y) + %Layer3_VRAM_Address(Scrap03-1,Scrap0D) %dw_big_endian(3|!FS_VERT_STRIPE) dw #$0200, #$0200 - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X+2,!PASSWORD_INPUT_START_Y) + %Layer3_VRAM_Address(Scrap03+2,Scrap0D) %dw_big_endian(3|!FS_VERT_STRIPE) dw #$0200, #$0200 - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y+2) + %Layer3_VRAM_Address(Scrap03-1,Scrap0D+2) %dw_big_endian(7) dw #$0200, #$0200, #$0200, #$0200 .SelectionCursorDraw ; Then comes a selection cursor draw (will override the erase if same position) - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y-1) + %Layer3_VRAM_Address(Scrap03-1,Scrap0D-1) %dw_big_endian(7) dw #$02BB|!FS_COLOR_GREEN, #$02BC|!FS_COLOR_GREEN, #$02BC|!FS_COLOR_GREEN|!FS_HFLIP, #$02BB|!FS_COLOR_GREEN|!FS_HFLIP - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y) + %Layer3_VRAM_Address(Scrap03-1,Scrap0D) %dw_big_endian(3|!FS_VERT_STRIPE) dw #$02BD|!FS_COLOR_GREEN, #$02BD|!FS_COLOR_GREEN|!FS_VFLIP - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X+2,!PASSWORD_INPUT_START_Y) + %Layer3_VRAM_Address(Scrap03+2,Scrap0D) %dw_big_endian(3|!FS_VERT_STRIPE) dw #$02BD|!FS_COLOR_GREEN|!FS_HFLIP, #$02BD|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP - %Layer3_VRAM_Address(!PASSWORD_INPUT_START_X-1,!PASSWORD_INPUT_START_Y+2) + %Layer3_VRAM_Address(Scrap03-1,Scrap0D+2) %dw_big_endian(7) dw #$02BB|!FS_COLOR_GREEN|!FS_VFLIP, #$02BC|!FS_COLOR_GREEN|!FS_VFLIP, #$02BC|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP, #$02BB|!FS_COLOR_GREEN|!FS_HFLIP|!FS_VFLIP dw $FFFF diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index b9809a5..2a3b49e 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -1,20 +1,17 @@ ;================================================================================ ; Pendant / Crystal HUD Fix ;-------------------------------------------------------------------------------- -;CheckPendantHUD: -; LDA HudFlag : CMP.b #$40 ; check for hud flag instead -;RTL ;================================================================================ FlipLWDWFlag: PHP SEP #$20 ; set 8-bit accumulator - LDA CurrentWorld : EOR.b #$40 : STA CurrentWorld + LDA.l CurrentWorld : EOR.b #$40 : STA.l CurrentWorld BEQ + LDA.b #07 : BRA ++ ; dark world - crystals + LDA.b #03 ; light world - pendants ++ - STA MapIcons + STA.l MapIcons PLP RTL ;================================================================================ @@ -23,7 +20,7 @@ HUDRebuildIndoorHole: LDA.l GenericKeys : BEQ .normal .generic PLA - LDA CurrentGenericKeys ; generic key count + LDA.l CurrentGenericKeys ; generic key count JSL.l HUD_RebuildIndoor_Palace RTL .normal @@ -34,18 +31,18 @@ RTL HUDRebuildIndoor: LDA.l GenericKeys : BEQ .normal .generic - LDA.b #$00 : STA $7EC017 - LDA CurrentGenericKeys ; generic key count + LDA.b #$00 : STA.l RoomDarkness + LDA.l CurrentGenericKeys ; generic key count RTL .normal - LDA.b #$00 : STA $7EC017 + LDA.b #$00 : STA.l RoomDarkness LDA.b #$FF ; don't show keys RTL ;================================================================================ GetCrystalNumber: PHX TXA : ASL : TAX - LDA CurrentWorld : EOR.b #$40 : BNE + + LDA.l CurrentWorld : EOR.b #$40 : BNE + INX + LDA.l CrystalNumberTable-16, X @@ -55,13 +52,13 @@ RTL OverworldMap_CheckObject: PHX ;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail - LDA CurrentWorld : AND.b #$40 : BNE + + LDA.l CurrentWorld : AND.b #$40 : BNE + ;LW Map LDA.l MapMode : BEQ +++ - LDA MapField : ORA MapOverlay : AND.b #$01 : BNE +++ + LDA.l MapField : ORA.l MapOverlay : AND.b #$01 : BNE +++ PHX LDA.l .lw_map_offsets, X : TAX ; put map offset into X - LDA MapField, X : ORA MapOverlay, X + LDA.l MapField, X : ORA.l MapOverlay, X PLX AND.l .lw_map_masks, X : BNE +++ JMP .fail @@ -72,10 +69,10 @@ OverworldMap_CheckObject: + ;DW Map LDA.l MapMode : BEQ +++ - LDA MapField : ORA MapOverlay : AND.b #$02 : BNE +++ + 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 MapOverlay, X + LDA.l MapField, X : ORA.l MapOverlay, X PLX AND.l .dw_map_masks, X : BNE +++ JMP .fail @@ -90,11 +87,11 @@ RTL AND.b #$40 : BNE .checkCrystal .checkPendant - LDA PendantsField : AND.l CrystalPendantFlags, X : BNE .fail + LDA.l PendantsField : AND.l CrystalPendantFlags, X : BNE .fail CLC : BRA .done .checkCrystal - LDA CrystalsField : AND.l CrystalPendantFlags, X : BNE .fail + LDA.l CrystalsField : AND.l CrystalPendantFlags, X : BNE .fail CLC : BRA .done .fail @@ -119,33 +116,24 @@ db $02, $80, $08, $10, $01, $40, $04 SetLWDWMap: PHP SEP #$20 ; set 8-bit accumulator - LDA CurrentWorld : EOR.b #$40 + LDA.l CurrentWorld : EOR.b #$40 BNE + LDA.b #07 : BRA ++ ; dark world - crystals + LDA.b #03 ; light world - pendants ++ - STA MapIcons + STA.l MapIcons PLP RTL ;================================================================================ GetMapMode: - LDA CurrentWorld : AND.b #$40 : BEQ + + LDA.l CurrentWorld : AND.b #$40 : BEQ + LDA.b #07 ; dark world - crystals RTL + LDA.b #03 ; light world - pendants RTL ;================================================================================ -;GetPendantCrystalWorld: -; PHB : PHK : PLB -; PHX -; LDA $040C : LSR : TAX -; LDA .dungeon_worlds, X -; PLX : PLB -; CMP.b #$00 -;RTL -;================================================================================ BringMenuDownEnhanced: REP #$20 ; set 16-bit accumulator LDA.l TournamentSeed : AND.w #$00FF @@ -157,13 +145,13 @@ BringMenuDownEnhanced: EOR.w #$FFFF : !ADD.w #$0001 ; negate menu speed - !ADD $EA : CMP.w #$FF18 : !BGE .noOvershoot + !ADD BG3VOFSQL : CMP.w #$FF18 : !BGE .noOvershoot LDA.w #$FF18 ; if we went past the limit, go to the limit .noOvershoot - STA $EA : CMP.w #$FF18 + STA.b BG3VOFSQL : CMP.w #$FF18 SEP #$20 ; set 8-bit accumulator BNE .notDoneScrolling - INC $0200 + INC.w SubModuleInterface .notDoneScrolling RTL ;================================================================================ @@ -175,41 +163,40 @@ RaiseHudMenu: LDA.l MenuSpeed : AND.w #$00FF ++ - !ADD $EA : BMI .noOvershoot + !ADD BG3VOFSQL : BMI .noOvershoot LDA.w #$0000 ; if we went past the limit, go to the limit .noOvershoot - STA $EA + STA.b BG3VOFSQL RTL ;================================================================================ CheckCloseItemMenu: LDA.l MenuCollapse : BNE + - LDA $F4 : AND.b #$10 : RTL + LDA.b Joy1A_New : AND.b #$10 : RTL + - LDA $F0 : AND.b #$10 : EOR.b #$10 + LDA.b Joy1A_All : AND.b #$10 : EOR.b #$10 RTL ;================================================================================ ShowDungeonItems: - LDA $040C : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave - ;LDA $F0 : AND.w #$0020 ; check for select - LDA HudFlag : AND.w #$0020 ; check hud flag + 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 $040C : AND.w #$00FF : CMP.w #$00FF ; original logic + LDA.w DungeonID : AND.w #$00FF : CMP.w #$00FF ; original logic RTL ;-------------------------------------------------------------------------------- UpdateKeys: PHX : PHP SEP #$30 ; set 8-bit accumulator & index registers - LDA $040C : CMP.b $1F : !BLT .skip + LDA.w DungeonID : CMP.b TSWQ : !BLT .skip LSR : TAX ; get dungeon index and store to X - LDA CurrentSmallKeys ; load current key count - STA DungeonKeys, X ; save to main counts + LDA.l CurrentSmallKeys ; load current key count + STA.l DungeonKeys, X ; save to main counts CPX.b #$00 : BNE + - STA HyruleCastleKeys ; copy HC to sewers + STA.l HyruleCastleKeys ; copy HC to sewers + : CPX.b #$01 : BNE + - STA SewerKeys ; copy sewers to HC + STA.l SewerKeys ; copy sewers to HC + .skip JSL.l PostItemGet @@ -232,39 +219,38 @@ RTL ;-------------------------------------------------------------------------------- DrawBootsInMenuLocation: LDA.l HUDDungeonItems : BNE + - LDA.w #$1608 : STA $00 + LDA.w #$1608 : STA.b Scrap00 RTL + - LDA.w #$1588 : STA $00 + LDA.w #$1588 : STA.b Scrap00 RTL ;-------------------------------------------------------------------------------- DrawGlovesInMenuLocation: LDA.l HUDDungeonItems : BNE + - LDA.w #$1610 : STA $00 + LDA.w #$1610 : STA.b Scrap00 RTL + - LDA.w #$1590 : STA $00 + LDA.w #$1590 : STA.b Scrap00 RTL ;-------------------------------------------------------------------------------- DrawFlippersInMenuLocation: LDA.l HUDDungeonItems : BNE + - LDA.w #$1618 : STA $00 + LDA.w #$1618 : STA.b Scrap00 RTL + - LDA.w #$1598 : STA $00 + LDA.w #$1598 : STA.b Scrap00 RTL ;-------------------------------------------------------------------------------- DrawMoonPearlInMenuLocation: LDA.l HUDDungeonItems : BNE + - LDA.w #$1620 : STA $00 + LDA.w #$1620 : STA.b Scrap00 RTL + - LDA.w #$15A0 : STA $00 + LDA.w #$15A0 : STA.b Scrap00 RTL ;-------------------------------------------------------------------------------- DrawHUDDungeonItems: LDA.l HUDDungeonItems : BNE .continue - RTL .dungeon_positions @@ -341,12 +327,12 @@ DrawHUDDungeonItems: ; dungeon names LDA.w #$2D50 - LDY.w #0 + LDY.w #00 .next_dungeon_name LDX.w .dungeon_positions,Y - STA.w $1646,X + STA.w GFXStripes+$0646,X INC @@ -357,9 +343,9 @@ DrawHUDDungeonItems: LDX.w #$001E LDA.w #$24F5 --- STA.w $1686,X - STA.w $16C6,X - STA.w $1706,X +-- STA.w GFXStripes+$0686,X + STA.w GFXStripes+$06C6,X + STA.w GFXStripes+$0706,X DEX : DEX : BPL -- @@ -371,10 +357,10 @@ DrawHUDDungeonItems: + ;------------------------------------------------------------------------------- - LDA HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys + LDA.l HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys .draw_small_keys - LDA.w #$2810 : STA $1684 ; small keys icon + LDA.w #$2810 : STA.w GFXStripes+$0684 ; small keys icon LDY.w #0 @@ -389,7 +375,7 @@ DrawHUDDungeonItems: LDX.w .dungeon_positions,Y ADC.w #$2816 - STA.w $1686,X + STA.w GFXStripes+$0686,X INY : INY CPY.w #26 : BCC .next_small_key @@ -399,10 +385,10 @@ DrawHUDDungeonItems: .skip_small_keys ; Big Keys - LDA HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys + LDA.l HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys - LDA.w #$2811 : STA $16C4 ; big key icon + LDA.w #$2811 : STA.w GFXStripes+$06C4 ; big key icon ; use X so we can BIT LDX.w #0 @@ -416,7 +402,7 @@ DrawHUDDungeonItems: LDY.w .dungeon_positions,X LDA.w #$2826 - STA.w $16C6,Y + STA.w GFXStripes+$06C6,Y ; reload LDA.l BigKeyField @@ -429,10 +415,8 @@ DrawHUDDungeonItems: .skip_big_keys - LDA HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills - - LDA.w #$280F : STA $1704 ; skull icon - + 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 @@ -443,7 +427,7 @@ DrawHUDDungeonItems: LDA.w #$2826 LDX.w .dungeon_positions,Y - STA.w $1706,X + STA.w GFXStripes+$0706,X ..skip_boss_kill INY : INY @@ -460,8 +444,8 @@ DrawHUDDungeonItems: .maps_and_compasses ; Maps - LDA HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps - LDA.w #$2821 : STA $1684 ; map icon + 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 @@ -475,7 +459,7 @@ DrawHUDDungeonItems: LDY.w .dungeon_positions,X LDA.w #$2826 - STA.w $1686,Y + STA.w GFXStripes+$0686,Y ; reload LDA.l MapField @@ -489,8 +473,8 @@ DrawHUDDungeonItems: .skip_maps ; Compasses - LDA HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses - LDA.w #$2C20 : STA $16C4 ; compass icon + 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 @@ -504,7 +488,7 @@ DrawHUDDungeonItems: LDY.w .dungeon_positions,X LDA.w #$2826 - STA.w $16C6,Y + STA.w GFXStripes+$06C6,Y ; reload LDA.l CompassField @@ -528,75 +512,72 @@ DrawPendantCrystalDiagram: REP #$30 ; Set 16-bit accumulator & index registers LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals - - LDA.l .row0, X : STA $12EA, X - LDA.l .row1, X : STA $132A, X - LDA.l .row2, X : STA $136A, X - LDA.l .row3, X : STA $13AA, X - LDA.l .row4, X : STA $13EA, X - LDA.l .row5, X : STA $142A, X - LDA.l .row6, X : STA $146A, X - LDA.l .row7, X : STA $14AA, X - LDA.l .row8, X : STA $14EA, X + LDA.l .row0, X : STA.w GFXStripes+$02EA, X + LDA.l .row1, X : STA.w GFXStripes+$032A, X + LDA.l .row2, X : STA.w GFXStripes+$036A, X + LDA.l .row3, X : STA.w GFXStripes+$03AA, X + LDA.l .row4, X : STA.w GFXStripes+$03EA, X + LDA.l .row5, X : STA.w GFXStripes+$042A, X + LDA.l .row6, X : STA.w GFXStripes+$046A, X + LDA.l .row7, X : STA.w GFXStripes+$04AA, X + LDA.l .row8, X : STA.w GFXStripes+$04EA, X INX #2 : CPX.w #$0014 : BCC - ; pendants - LDA PendantsField + LDA.l PendantsField LSR : BCC + ; pendant of wisdom (red) LDX.w #$252B - STX.w $13B6 - INX : STX.w $13B8 - INX : STX.w $13F6 - INX : STX.w $13F8 + STX.w GFXStripes+$03B6 + INX : STX.w GFXStripes+$03B8 + INX : STX.w GFXStripes+$03F6 + INX : STX.w GFXStripes+$03F8 + LSR : BCC + ; pendant of power (blue) LDX.w #$2D2B - STX.w $13AE - INX : STX.w $13B0 - INX : STX.w $13EE - INX : STX.w $13F0 + STX.w GFXStripes+$03AE + INX : STX.w GFXStripes+$03B0 + INX : STX.w GFXStripes+$03EE + INX : STX.w GFXStripes+$03F0 + LSR : BCC + ; pendant of courage (green) LDX.w #$3D2B - STX.w $1332 - INX : STX.w $1334 - INX : STX.w $1372 - INX : STX.w $1374 + STX.w GFXStripes+$0332 + INX : STX.w GFXStripes+$0334 + INX : STX.w GFXStripes+$0372 + INX : STX.w GFXStripes+$0374 + - - - ; crystals - LDA CrystalsField + LDA.l CrystalsField LDX.w #$2D44 LDY.w #$2D45 BIT.w #$0002 : BEQ + ; crystal 1 - STX.w $14AC - STY.w $14AE + STX.w GFXStripes+$04AC + STY.w GFXStripes+$04AE + BIT.w #$0010 : BEQ + ; crystal 2 - STX.w $146E - STY.w $1470 + STX.w GFXStripes+$046E + STY.w GFXStripes+$0470 + BIT.w #$0040 : BEQ + ; crystal 3 - STX.w $14B0 - STY.w $14B2 + STX.w GFXStripes+$04B0 + STY.w GFXStripes+$04B2 + BIT.w #$0020 : BEQ + ; crystal 4 - STX.w $1472 - STY.w $1474 + STX.w GFXStripes+$0472 + STY.w GFXStripes+$0474 + BIT.w #$0008 : BEQ + ; crystal 7 - STX.w $14B8 - STY.w $14BA + STX.w GFXStripes+$04B8 + STY.w GFXStripes+$04BA + LDX.w #$2544 LDY.w #$2545 BIT.w #$0004 : BEQ + ; crystal 5 - STX.w $14B4 - STY.w $14B6 + STX.w GFXStripes+$04B4 + STY.w GFXStripes+$04B6 + BIT.w #$0001 : BEQ + ; crystal 6 - STX.w $1476 - STY.w $1478 + STX.w GFXStripes+$0476 + STY.w GFXStripes+$0478 + PLB : PLP diff --git a/playername.asm b/playername.asm index 2a820b6..fe4c5be 100644 --- a/playername.asm +++ b/playername.asm @@ -15,20 +15,20 @@ WriteBlanksToPlayerName: STA.l ExtendedFileNameSRAM+20 STA.l ExtendedFileNameSRAM+22 - STA.l $7003D9, X ;What we wrote over (clear first byte of vanilla name slot) + STA.l FileNameVanillaSRAM, X ;What we wrote over (clear first byte of vanilla name slot) RTL WriteCharacterToPlayerName: - STA ExtendedFileNameSRAM, X + STA.l ExtendedFileNameSRAM, X CPX.w #$0008 : !BGE + - STA $7003D9, X ;what we wrote over + STA.l FileNameVanillaSRAM, X ;what we wrote over + RTL ReadCharacterFromPlayerName: ;Only for use on Name Screen - LDA ExtendedFileNameSRAM, X + LDA.l ExtendedFileNameSRAM, X CPX.w #$0008 : !BGE + - LDA $7003D9, X ;what we wrote over + LDA.l FileNameVanillaSRAM, X ;what we wrote over + RTL @@ -40,13 +40,13 @@ PLB RTL WrapCharacterPosition: - LDA $0B12 : BPL + + LDA.w PlayerNameCursor : BPL + LDA.b #$0B + CMP.b #$0C : !BLT + LDA.b #$00 + - STA $0B12 + STA.w PlayerNameCursor RTL CharacterPositions: diff --git a/potions.asm b/potions.asm index 1eddb15..7068c0f 100644 --- a/potions.asm +++ b/potions.asm @@ -2,32 +2,31 @@ ; $7F5092 - Potion Animation Busy Flags (Health) ; $7F5093 - Potion Animation Busy Flags (Magic) ;-------------------------------------------------------------------------------- -!BUSY_HEALTH = $7F5092 RefillHealth: REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #279 : BNE + ; Spike Cave bottles work normally SEP #$20 ; set 8-bit accumulator - LDA #$A0 + LDA.b #$A0 BRA .done + SEP #$20 ; set 8-bit accumulator LDA.l PotionHealthRefill : CMP.b #$A0 : !BGE .done - LDA !BUSY_HEALTH : BNE ++ + LDA.l BusyHealth : BNE ++ LDA.l PotionHealthRefill ; load refill amount !ADD CurrentHealth ; add to current health - CMP MaximumHealth : !BLT +++ : LDA MaximumHealth : +++ - STA !BUSY_HEALTH + CMP.l MaximumHealth : !BLT +++ : LDA.l MaximumHealth : +++ + STA.l BusyHealth ++ - LDA CurrentHealth : CMP.l !BUSY_HEALTH : !BLT ++ - LDA.b #$00 : STA HeartsFiller - LDA $020A : BNE .notDone - LDA.b #$00 : STA !BUSY_HEALTH + LDA.l CurrentHealth : CMP.l BusyHealth : !BLT ++ + LDA.b #$00 : STA.l HeartsFiller + LDA.w $020A : BNE .notDone + LDA.b #$00 : STA.l BusyHealth SEC RTL ++ - LDA.b #$08 : STA HeartsFiller ; refill some health + LDA.b #$08 : STA.l HeartsFiller ; refill some health .notDone CLC RTL @@ -35,54 +34,53 @@ RefillHealth: ; Check goal health versus actual health. ; if(actual < goal) then branch. - LDA CurrentHealth : CMP MaximumHealth : BCC .refillAllHealth - LDA MaximumHealth : STA CurrentHealth - LDA.b #$00 : STA HeartsFiller + LDA.l CurrentHealth : CMP.l MaximumHealth : BCC .refillAllHealth + LDA.l MaximumHealth : STA.l CurrentHealth + LDA.b #$00 : STA.l HeartsFiller ; ??? not sure what purpose this branch serves. - LDA $020A : BNE .beta + LDA.w $020A : BNE .beta SEC RTL .refillAllHealth ; Fill up ze health. - LDA.b #$A0 : STA HeartsFiller + LDA.b #$A0 : STA.l HeartsFiller .beta CLC RTL ;-------------------------------------------------------------------------------- -!BUSY_MAGIC = $7F5093 RefillMagic: REP #$20 ; set 16-bit accumulator - LDA $A0 ; these are all decimal because i got them that way + LDA.b RoomIndex ; these are all decimal because i got them that way CMP.w #279 : BNE + ; Spike Cave bottles work normally SEP #$20 ; set 8-bit accumulator - LDA #$80 + LDA.b #$80 BRA .done + SEP #$20 ; set 8-bit accumulator LDA.l PotionMagicRefill : CMP.b #$80 : !BGE .done - LDA !BUSY_MAGIC : BNE ++ + LDA.l BusyMagic : BNE ++ LDA.l PotionMagicRefill ; load refill amount !ADD CurrentMagic ; add to current magic CMP.b #$80 : !BLT +++ : LDA.b #$80 : +++ - STA !BUSY_MAGIC + STA.l BusyMagic ++ - LDA CurrentMagic : CMP.l !BUSY_MAGIC : !BLT ++ - LDA.b #$00 : STA !BUSY_MAGIC + LDA.l CurrentMagic : CMP.l BusyMagic : !BLT ++ + LDA.b #$00 : STA.l BusyMagic SEC RTL ++ - LDA.b #$01 : STA MagicFiller ; refill some magic + LDA.b #$01 : STA.l MagicFiller ; refill some magic CLC RTL .done SEP #$30 ; Check if Link's magic meter is full - LDA CurrentMagic : CMP.b #$80 + LDA.l CurrentMagic : CMP.b #$80 BCS .itsFull ; Tell the magic meter to fill up until it's full. - LDA.b #$80 : STA MagicFiller + LDA.b #$80 : STA.l MagicFiller SEP #$30 RTL .itsFull diff --git a/quickswap.asm b/quickswap.asm index 1331614..d9c1fa5 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -4,75 +4,89 @@ QuickSwap: ; We perform all other checks only if we are pushing L or R in order to have minimal ; perf impact, since this runs every frame - LDA.b $F6 : AND #$30 : BEQ .done + LDA.b Joy1B_New : AND.b #$30 : BEQ .done XBA ; stash away the value for after the checks. LDA.l QuickSwapFlag : BEQ .done - LDA.w $0202 : BEQ .done ; Skip everything if we don't have any items + LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items + LDY.b #$14 PHX XBA ; restore the stashed value CMP.b #$30 : BNE + ; If prossing both L and R this frame, then go directly to the special swap code - LDX.w $0202 : BRA .special_swap + LDX.w ItemCursor : BRA .special_swap + - BIT #$10 : BEQ + ; Only pressed R + BIT.b #$10 : BEQ + ; Only pressed R JSR.w RCode - LDA.b $F2 : BIT #$20 : BNE .special_swap ; Still holding L from a previous frame + LDA.b Joy1B_All : BIT.b #$20 : BNE .special_swap ; Still holding L from a previous frame BRA .store + ; Only pressed L JSR.w LCode - LDA.b $F2 : BIT #$10 : BNE .special_swap ; Still holding R from a previous frame + LDA.b Joy1B_All : BIT #$10 : BNE .special_swap ; Still holding R from a previous frame BRA .store .special_swap - LDA InventoryTracking+1 : ORA #$01 : STA InventoryTracking+1 + LDA.l InventoryTracking+1 : ORA.b #$01 : STA.l InventoryTracking+1 CPX.b #$02 : BEQ + ; boomerang CPX.b #$01 : BEQ + ; bow CPX.b #$05 : BEQ + ; powder CPX.b #$0D : BEQ + ; flute CPX.b #$10 : BEQ + ; bottle BRA .store - + STX $0202 : JSL ProcessMenuButtons_y_pressed + + STX.w ItemCursor : JSL ProcessMenuButtons_y_pressed .store - LDA.b #$20 : STA.w $012F - STX $0202 + LDA.b #$20 : STA.w SFX3 + STX.w ItemCursor JSL HUD_RefreshIconLong PLX .done - LDA.b $F6 : AND.b #$40 ;what we wrote over + LDA.b Joy1B_New : AND.b #$40 ;what we wrote over RTL RCode: - LDX.w $0202 - LDA.b $F2 : BIT #$20 : BNE ++ ; Still holding L from a previous frame - LDA InventoryTracking+1 : AND #$FE : STA InventoryTracking+1 + LDX.w ItemCursor + LDA.b Joy1B_All : BIT.b #$20 : BNE ++ ; Still holding L from a previous frame + LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1 BRA + ++ - LDA InventoryTracking+1 : BIT #$01 : BEQ + + LDA.l InventoryTracking+1 : BIT.b #$01 : BEQ + RTS - + CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1 + INX + DEY : BEQ + .nextItem JSL.l IsItemAvailable : BEQ - + + RTS LCode: - LDX.w $0202 - LDA.b $F2 : BIT #$10 : BNE ++ ; Still holding R from a previous frame - LDA InventoryTracking+1 : AND #$FE : STA InventoryTracking+1 + LDX.w ItemCursor + LDA.b Joy1B_All : BIT #$10 : BNE ++ ; Still holding R from a previous frame + LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1 BRA + ++ - LDA InventoryTracking+1 : BIT #$01 : BEQ + + LDA.l InventoryTracking+1 : BIT.b #$01 : BEQ + RTS - + CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14 + DEX + DEY : BEQ + .nextItem JSL.l IsItemAvailable : BEQ - + + RTS + +IsItemAvailable: + LDA.l InfiniteBombs : BEQ .finite + .infinite + CPX.b #$04 : BNE .finite + LDA.b #$01 : RTL + .finite + LDA.l EquipmentWRAM-1, X +RTL diff --git a/ram.asm b/ram.asm index 3510b8f..64a6ec3 100644 --- a/ram.asm +++ b/ram.asm @@ -1,12 +1,562 @@ ;================================================================================ ; RAM Labels & Assertions ;-------------------------------------------------------------------------------- -; Labels for values in WRAM and assertions that ensure they're correct and -; at the expected addresses. All values larger than one byte are little endian. +; This module is primarily concerned with labeling WRAM addresses used by the +; randomizer and documenting their usage. We use a combination of base $[address] +; and WRAMLabel = $[address] here, favoring the former when we have larger blocks +; of contiguous ram labeled. A line is skipped when the next address is non-cotiguous, +; but comments will go in the empty space if multi-line. In some cases the label +; name can be descriptive enough without documentation. Or I just didn't know what it was. +; +; See the JP 1.0 disassembly for reference, specifically symbols_wram.asm +; (https://github.com/spannerisms/jpdasm/ - 19/11/2022) ;-------------------------------------------------------------------------------- -; Placeholder and for compass item max count allocations, still WIP +pushpc +org 0 + +;================================================================================ +; Bank 7E ;-------------------------------------------------------------------------------- -CompassTotalsWRAM = $7F5410 +;================================================================================ +; Direct Page +;-------------------------------------------------------------------------------- +base $7E0000 +Scrap: +Scrap00: skip 1 ; Used as short-term scratch space. If you need some short-term +Scrap01: skip 1 ; RAM, you can often use these. Double check that the next use +Scrap02: skip 1 ; of the addresses you want to use is a write. +Scrap03: skip 1 ; +Scrap04: skip 1 ; +Scrap05: skip 1 ; +Scrap06: skip 1 ; +Scrap07: skip 1 ; +Scrap08: skip 1 ; +Scrap09: skip 1 ; +Scrap0A: skip 1 ; +Scrap0B: skip 1 ; +Scrap0C: skip 1 ; +Scrap0D: skip 1 ; +Scrap0E: skip 1 ; +Scrap0F: skip 1 ; +GameMode = $7E0010 ; Game mode & submode. Refer to disassembly. +GameSubMode = $7E0011 ; +NMIDoneFlag = $7E0012 ; $00 = Main loop done | $01 = Not done (lag) +INIDISPQ = $7E0013 ; Queue for INIDISP updates. Written during NMI. +NMISTRIPES = $7E0014 ; NMI update flags. +NMICGRAM = $7E0015 ; When non-zero, will trigger a specific gfx update +NMIHUD = $7E0016 ; during NMI. +NMIINCR = $7E0017 ; +NMIUP1100 = $7E0018 ; +UPINCVH = $7E0019 ; Incremental upload VRAM high byte +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 +SUBDESQ = $7E001D ; +TMWQ = $7E001E ; +TSWQ = $7E001F ; +LinkPosY = $7E0020 ; Link's absolute x/y coordinates. Both are word length. +LinkPosX = $7E0022 ; +LinkPosZ = $7E0024 ; $FFFF when on ground +LinkPushDirection = $7E0026 ; - - - - u d l r +LinkRecoilY = $7E0027 ; +LinkRecoilX = $7E0028 ; +LinkRecoilZ = $7E0029 ; +LinkSubPixelVelocty = $7E002A ; Word length +LinkAnimationStep = $7E002E ; +LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right + ; +OAMOffsetY = $7E0044 ; +OAMOffsetX = $7E0045 ; + ; +CapeTimer = $7E004C ; Countdown for cape sapping magic Countdown for cape sapping magic.. +LinkJumping = $7E004D ; $00 = None | $01 = Bonk/damage/water | $02 = Ledge + ; +Strafe = $7E0050 ; ??? + ; +CapeOn = $7E0055 ; Link invisible and untouchable when set. +BunnyFlagDP = $7E0056 ; $00 = Link | $01 = Bunny + ; +LinkSlipping = $7E005B ; $00 = None | $01 = Near pit + ; $02 = Falling | $03 = Falling "more" +FallTimer = $7E005C ; Timer for falling animation +LinkState = $7E005D ; Main Link state handler +LinkSpeed = $7E005E ; Main Link speed handler + ; +LinkWalkDirection = $7E0067 ; - - - - u d l r + ; +ScrapBuffer72 = $7E0072 ; Volatile scrap buffer. 5 bytes. + ; +WorldCache = $7E007B ; $00 = Light world | $40 bit set for dark world. + ; +OverworldIndex = $7E008A ; Overworld screen index. Word length. Dark world is OR $40 of + ; light world screen in same position. Zeroed on UW entry. +OverlayID = $7E008C ; Overworld overlay ID. One Byte. + ; +OAMPtr = $7E0090 ; Pointer used to indirectly address OAM buffer. 4 bytes. +BGMODEQ = $7E0094 ; Various PPU queues handled during NMI +MOSAICQ = $7E0095 ; +W12SELQ = $7E0096 ; +W34SELQ = $7E0097 ; +WOBJSELQ = $7E0098 ; +CGWSELQ = $7E0099 ; +CGADSUBQ = $7E009A ; +HDMAENQ = $7E009B ; HDMA enable flags + ; +RoomIndex = $7E00A0 ; Underworld room index. Word length. High byte: $00 = EG1 | $01 = EG2 + ; Not zeroed on exit to overworld. +PreviousRoom = $7E00A2 ; Stores previous value of RoomIndex + ; +CameraBoundH = $7E00A6 ; Which set of camera boundaries to use. +CameraBoundV = $7E00A7 ; + ; +RoomTag = $7E00AE ; Room effects; e.g. kill room, shutter switch, etc. Word length. + ; +SubSubModule = $7E00B0 ; Often used as a submodule, such as for transitions + ; +ObjPtr = $7E00B7 ; Pointer for drawing room objects. Three bytes. +ObjPtrOffset = $7E00BA ; Used as an offset for ObjPointer. Word Length. +PlayerSpriteBank = $7E00BC ; +ScrapBufferBD = $7E00BD ; Another scrap buffer. $23 bytes. +FileSelectPosition = $7E00C8 ; +PasswordCodePosition = $7E00C8 ; +PasswordSelectPosition = $7E00C9 ; + ; +BG1H = $7E00E0 ; Background scroll registers +BG2H = $7E00E2 ; For BG1 and BG2, these registers are used for calculations later for different writes to PPU. +BG3HOFSQL = $7E00E4 ; For BG3, the values are written directly to the PPU during NMI +BG1V = $7E00E6 ; Since BG1 and BG2 are not written directly to PPU they are given different names from BG3. +BG2V = $7E00E8 ; +BG3VOFSQL = $7E00EA ; + ; +LinkLayer = $7E00EE ; Layer that Link is on. $00 = BG2 (upper) | $02 = BG1 (lower) + ; +Joy1A_All = $7E00F0 ; Joypad input +Joy2A_All = $7E00F1 ; All = Current & previous frame +Joy1B_All = $7E00F2 ; New = Current frame +Joy2B_All = $7E00F3 ; Old = Previous frame +Joy1A_New = $7E00F4 ; +Joy2A_New = $7E00F5 ; +Joy1B_New = $7E00F6 ; +Joy2B_New = $7E00F7 ; +Joy1A_Old = $7E00F8 ; +Joy2A_Old = $7E00F9 ; +Joy1B_Old = $7E00FA ; +Joy2B_Old = $7E00FB ; + +;================================================================================ +; Mirrored WRAM +;-------------------------------------------------------------------------------- +; Pages 0x00–0x1F of Bank7E are mirrored to every program bank ALTTP uses. +;-------------------------------------------------------------------------------- + +DeathReloadFlag = $7E010A ; Flag set on death for dungeon reload +CurrentMSUTrack = $7E010B ; +GameModeCache = $7E010C ; +GameSubModeCache = $7E010D ; +EntranceIndex = $7E010E ; Entrance ID into underworld. Word length. + ; +MedallionFlag = $7E0112 ; Medallion cutscene flag. $01 = Cutscene active. + ; +VRAMUploadAddress = $7E0118 ; Incremental VRAM upload address. Low byte always 0. Word length. + ; +BG1ShakeV = $7E011A ; Applied to BG Scroll. Word Length. +BG1ShakeH = $7E011C ; + ; +CurrentVolume = $7E0127 ; +TargetVolume = $7E0129 ; +MusicControl = $7E012B ; +MusicControlRequest = $7E012C ; +SFX1 = $7E012D ; +SFX2 = $7E012E ; +SFX3 = $7E012F ; +LastAPUCommand = $7E0130 ; Last non-zero command given to SPC. +LastSFX1 = $7E0131 ; Last non-zero SFX1 +MusicControlQueue = $7E0132 ; Used to queue up writes to MusicControlRequest +CurrentControlRequest = $7E0133 ; Last thing written to MusicControlRequest +LastAPU = $7E0134 ; Stores last anything written to MusicControlRequest + ; +SubModuleInterface = $7E0200 ; Word length. High byte expected to be $00. +ItemCursor = $7E0202 ; Current location of the item menu cursor. + ; +BottleMenuCounter = $7E0205 ; Step counter for opening bottle menu +MenuFrameCounter = $7E0206 ; Incremented every menu frame. Never read. +MenuBlink = $7E0207 ; Incremented every frame and masked with $10 to blink cursor + ; +RaceGameFlag = $7E021B ; + ; +MessageJunk = $7E0223 ; Zeroed but never used (?) + ; +ItemReceiptID = $7E02D8 ; +ItemReceiptPose = $7E02DA ; $00 = No pose | $01 = One hand up | $02 = Two hands up + ; +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. + ; +ItemReceiptMethod = $7E02E9 ; + ; +TileActBE = $7E02EF ; Bitfield used by breakables and entrances. b b b b d d d d + ; b = Breakables | d = Entrances +UseY1 = $7E0301 ; Bitfield for Y-item usage: b p - a x z h r + ; b = Boomerang | p = Powder | a = Bow | x = Hammer (tested, never set) + ; z = Rods (tested, never set) | h = Hammer | r = Rods +CurrentYItem = $7E0303 ; + ; +AButtonAct = $7E0308 ; Bitfield for A-actions. $80 = Carry/toss | $02 Prayer | $01 = Tree pull +CarryAct = $7E0309 ; Bitfield for carrying. $02 = Tossing | $01 = Lifting + ; +TileActIce = $7E0348 ; Bitfield used by ice. Word length. + ; +TileActDig = $7E035B ; Bitfield used by diggable ground. Word length. High byte unused. + ; +LinkZap = $7E0360 ; When set, recoil zaps Link. + ; +DamageReceived = $7E0373 ; Damage to deal to Link. + ; +UseY2 = $7E037A ; - - b n c h - s + ; b = Book | n = Net | c = Canes | h = Hookshot | s = Shovel +NoDamage = $7E037B ; Prevents Link from receiving damage. + ; +AncillaGeneral = $7E039F ; General use buffer for front slot ancillae. $0F bytes. + ; +AncillaSearch = $7E03C4 ; Used to search through ancilla when every front slot is occupied. + ; +ForceSwordUp = $7E03EF ; $01 = Force sword up pose. +FluteTimer = $7E03F0 ; Countdown timer for being able to use the flute + ; +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 + ; 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 +DungeonID = $7E040C ; High byte mostly unused but sometimes read. Word length. + ; +LayerAdjustment = $7E047A ; Flags layer adjustments. Arms EG. + ; +RoomIndexMirror = $7E048E ; Mirrors RoomIndex + ; +RespawnFlag = $7E04AA ; If set, entrance loading is treated as a respawn. Word length. +Map16ChangeIndex = $7E04AC ; Word length. + ; +OWEntranceCutscene = $7E04C6 ; + ; +HeartBeepTimer = $7E04CA ; + ; +CameraScrollN = $7E0618 ; Camera scroll trigger areas for directions NSEW +CameraScrollS = $7E061A ; The higher boundary should always be +2 from the lower in +CameraScrollW = $7E061C ; underworld and -2 in overworld. +CameraScrollE = $7E061E ; + ; +NMIAux = $7E0632 ; Stores long address of NMI jump. Currently only used by shops. + ; +SpriteRoomTag = $7E0642 ; Set high by sprites triggering room tags. + ; +SomariaSwitchFlag = $7E0646 ; Set by Somaria when on a switch. + ; +TileMapEntranceDoors = $7E0696 ; Tilemap location of entrance doors. Word length. +TileMapTile32 = $7E0698 ; Tilemap location of new tile32 objects, such as from graves/rocks. Word length. + ; +SkipOAM = $7E0710 ; Set to skip OAM updates. High byte written $FF with exploding walls +OWScreenSize = $7E0712 ; Flags overworld screen size. + ; +OWTransitionFlag = $7E0ABF ; Used for certain transitions like smith, witch, etc. + ; +ArcVariable = $7E0B08 ; Arc variable. Word length. +OverlordXLow = $7E0B08 ; $08 bytes. +OverlordXHigh = $7E0B10 ; $08 bytes. +PlayerNameCursor = $7E0B12 ; Player name screen. +OverlordYLow = $7E0B18 ; $08 bytes. +OverlordYHigh = $7E0B20 ; $08 bytes. + ; +EnemyStunTimer = $7E0B58 ; Auto-decrementing timer for stunned enemies. $10 bytes. + ; +BowDryFire = $7E0B9A ; If set, arrows are deleted immediately + ; +SaveFileIndex = $7E0B9D ; + ; +SpriteAncillaInteract = $7E0BA0 ; If nonzero, ancillae do not interact with the sprite. $10 bytes. + ; +AncillaVelocityY = $7E0C22 ; $0A bytes. +AncillaVelocityX = $7E0C2C ; $0A bytes. + ; +AncillaID = $7E0C4A ; $0A bytes. + ; +AncillaGet = $7E0C5E ; Used by varius ancilla in various ways. $0F bytes. + ; +SpriteBump = $7E0CD2 ; See symbols_wram.asm. $10 bytes. + ; +TreePullKills = $7E0CFB ; Kills for tree pulls. +TreePullHits = $7E0CFC ; Hits taken for tree pulls. + ; +SpritePosYLow = $7E0D00 ; Sprite slot data. Each label has $10 bytes unless otherwise +SpritePosXLow = $7E0D10 ; specified. Some of these I'm not sure what they are. May +SpritePosYHigh = $7E0D20 ; have taken a guess or just made something up. +SpritePosXHigh = $7E0D30 ; +SpriteVelocityY = $7E0D40 ; +SpriteVelocityX = $7E0D50 ; +SpriteSubPixelY = $7E0D60 ; +SpriteSubPixelX = $7E0D70 ; +SpriteActivity = $7E0D80 ; Not sure what this is. +SpriteMovement = $7E0D90 ; Not sure what this is. + ; +SpriteAuxTable = $7E0DA0 ; $20 bytes. +SpriteGFXControl = $7E0DC0 ; +SpriteAITable = $7E0DD0 ; AI state of sprites. $10 bytes. +SpriteMoveDirection = $7E0DE0 ; $00 = Right | $01 = Left | $02 = Down | $03 = Up + ; +SpriteTimer = $7E0DF0 ; + ; +SpriteTypeTable = $7E0E20 ; Which sprite occupies this slot. $10 bytes. +SpriteAux = $7E0E30 ; +SpriteOAMProperties = $7E0E40 ; h m w o o o o o | h = Harmless | m = master sword? | w = walls? + ; | o = OAM allocation +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. + ; +SpriteSpawnStep = $7E0ED0 ; Related to enemies spawning other sprites (eg pikit, zirro) + ; +SpriteDirectionTable = $7E0EB0 ; Sprite direction. $10 bytes. + ; +SpriteHalt = $7E0F00 ; +SpriteTimerE = $7E0F10 ; ? + ; +SpriteLayer = $7E0F20 ; + ; +SpriteOAMProp = $7E0F50 ; + ; +SpriteZCoord = $7E0F70 ; +SpriteVelocityZ = $7E0F80 ; +SpriteSubPixelZ = $7E0F90 ; + ; +FreezeSprites = $7E0FC1 ; "Seems to freeze sprites" + ; +PrizePackIndexes = $7E0FC7 ; $07 bytes. One for each prize pack. + ; +SpriteCoordCacheX = $7E0FD8 ; +SpriteCoordCacheY = $7E0FDA ; + ; +NoMenu = $7E0FFC ; When set prevents menu, mirror, medallions + ; +GFXStripes = $7E1000 ; Used by stripes for arbitrary VRAM transfers. $100 bytes. +RoomStripes = $7E1100 ; Used for room drawing. + ; +IrisPtr = $7E1B00 ; Spotlight pointers for HDMA. $1C0 bytes (?). + ; +MessageSubModule = $7E1CD8 ; + ; +MessageCursor = $7E1CE8 ; Chosen option in message. +DelayTimer = $7E1CE9 ; + ; +TextID = $7E1CF0 ; Message ID and page. Word length. + ; +ToastBuffer = $7E1E0E ; Multiworld buffer. Word length. + ; +MSUResumeTime = $7E1E6B ; Mirrored MSU block +MSUResumeControl = $7E1E6F ; +MSUFallbackTable = $7E1E70 ; +MSUDelayedCommand = $7E1E79 ; +MSUPackCount = $7E1E7A ; +MSUPackCurrent = $7E1E7B ; +MSUPackRequest = $7E1E7C ; +MSULoadedTrack = $7E1E7D ; +MSUResumeTrack = $7E1E7F ; + +ClockHours = $7E1E90 ; Clock Hours +ClockMinutes = $7E1E94 ; Clock Minutes +ClockSeconds = $7E1E98 ; Clock Seconds +ClockBuffer = $7E1E9C ; Clock Temporary +ScratchBufferNV = $7E1EA0 ; Non-volatile scratch buffer. Must preserve values through return. +ScratchBufferV = $7E1EB0 ; Volatile scratch buffer. Can clobber at will. + +;================================================================================ +; UNMIRRORED WRAM +; Addresses from here on can only be accessed with long addressing +; or absolute addressing with the appropriate data bank set +;-------------------------------------------------------------------------------- + +TileUploadBuffer = $7EA180 ; 0x300 bytes + ; +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 +FadeLevel = $7EC00B ; Target fade level. Word length. + ; + ; +MosaicLevel = $7EC011 ; Word length. High byte unused + ; +RoomDarkness = $7EC017 ; Darkness level of a room. High byte unused. Word length. + ; +SpriteOAM = $7EC025 ; + ; +EN_OWSCR2 = $7EC140 ; $7EC140-$7EC171 Used for caching with entrances. +EN_MAINDESQ = $7EC142 ; Copied from the JP disassembly. +EN_SUBDESQ = $7EC143 ; +EN_BG2VERT = $7EC144 ; +EN_BG2HORZ = $7EC146 ; +EN_POSY = $7EC148 ; +EN_POSX = $7EC14A ; +EN_OWSCR = $7EC14C ; +EN_OWTMAPI = $7EC14E ; +EN_SCROLLATN = $7EC150 ; +EN_SCROLLATW = $7EC152 ; +EN_SCROLLAN = $7EC154 ; +EN_SCROLLBN = $7EC156 ; +EN_SCROLLAS = $7EC158 ; +EN_SCROLLBS = $7EC15A ; +EN_OWTARGN = $7EC15C ; +EN_OWTARGS = $7EC15E ; +EN_OWTARGW = $7EC160 ; +EN_OWTARGE = $7EC162 ; +EN_AA0 = $7EC164 ; +EN_BGSET1 = $7EC165 ; +EN_BGSET2 = $7EC166 ; +EN_SPRSET1 = $7EC167 ; + ; 2 bytes free RAM. +EN_SCRMODYA = $7EC16A ; +EN_SCRMODYB = $7EC16C ; +EN_SCRMODXA = $7EC16E ; +EN_SCRMODXB = $7EC170 ; +PegColor = $7EC172 ; + ; +GameOverSongCache = $7EC227 ; + ; +LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes. + ; +PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm +PaletteBuffer = $7EC500 ; in the disassembly. +HUDTileMapBuffer = $7EC700 ; HUD tile map buffer. $100 bytes (?) +HUDKeyIcon = $7EC726 ; +HUDGoalIndicator = $7EC72A ; +HUDPrizeIcon = $7EC742 ; +HUDRupees = $7EC750 ; +HUDBombCount = $7EC75A ; +HUDArrowCount = $7EC760 ; +HUDKeyDigits = $7EC764 ; + ; +BigRAM = $7EC900 ; Big buffer of free ram (0x1F00) + +;================================================================================ +; Bank 7F +;-------------------------------------------------------------------------------- +DecompressionBuffer = $7F0000 ; Decompression Buffer. $2000 bytes. + +base $7F5000 +RedrawFlag: skip 1 ; +skip 2 ; Unused +HexToDecDigit1: skip 1 ; Space for storing the result of hex to decimal conversion. +HexToDecDigit2: skip 1 ; Digits are stored from high to low. +HexToDecDigit3: skip 1 ; +HexToDecDigit4: skip 1 ; +HexToDecDigit5: skip 1 ; +SpriteSkipEOR: skip 2 ; Used in utilities.asm to determine when to skip drawing sprites. Zero-padded +skip $2B ; Unused +AltTextFlag: skip 2 ; dialog.asm: Determines whether to load from vanilla decompression buffer + ; or from a secondary buffer (used for things like free dungeon item text) +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 +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 +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 +ShopCapacity: skip 1 ; Four lower bits of shop_config in ShopTable, number of items 1-3 +ShopScratch: skip 1 ; Scratch byte used in shop drawing routines +ShopSRAMIndex: skip 1 ; SRAM index for purchase counts +ShopMerchant: skip 1 ; Loaded from ShopTable and used to jump to one of four drawing routines +skip 2 ; Unused +ShopPriceColumn: skip 3 ; Stores coordinates for drawing prices in shops +skip 7 ; +skip 2 ; Reserved for OneMind +OneMindId: skip 1 ; Current OneMind player +OneMindTimerRAM: skip 2 ; Frame counter for OneMind +skip 9 ; Unused +ClockStatus: skip 2 ; 2 bytes second always zero padding + ; ---- --dn + ; d - DNF mode + ; n - Negative +skip $10 ; Unused +RNGLockIn: skip 1 ; Used for RNG item (currently unused by rando) +BusyItem: skip 1 ; Flags for indicating when these things are "busy" +BusyHealth: skip 1 ; e.g. doing some animation +BusyMagic: skip 1 ; +DialogOffsetPointer: skip 2 ; Offset and return pointer into new dialog buffer used +DialogReturnPointer: skip 2 ; for e.g. free dungeon item text. +skip 1 ; Unused +PreviousOverworldDoor: skip 1 ; Previous overworld door is cached or initialized here +skip 1 ; Reserved +skip 1 ; Unused +DuckMapFlag: skip 1 ; Temporary flag used and reset by flute map drawing routine +StalfosBombDamage: skip 1 ; Relocated from damage table +ValidKeyLoaded: skip 1 ; +TextBoxDefer: skip 1 ; Flag used to defer post-item text boxes +skip $10 ; Unused +skip $10 ; Reserved for enemizer + ; Most of these modifiers are intended to be written to by + ; a 3rd party (e.g. Crowd Control.) Writer is responsible + ; for zeroing. +SwordModifier: skip 1 ; Adds level to current sword. Doesn't change graphics. +ShieldModifier: skip 1 ; Not implemented +ArmorModifier: skip 1 ; Adds level to current mail. Doesn't change graphics. +MagicModifier: skip 1 ; Adds level to magic consumption (1/2, 1/4.) +LightConeModifier: skip 1 ; Gives lamp cone when set to 1 +CuccoStormer: skip 1 ; Non-zero write causes storm. +OldManDash: skip 1 ; Unused +IceModifier: skip 1 ; - - - g - - - i | Flipping either sets ice physics +InfiniteArrows: skip 1 ; Setting these to $01 will give infinite ammo. Set by +InfiniteBombs: skip 1 ; EscapeAssist. +InfiniteMagic: skip 1 ; +ControllerInverter: skip 1 ; $01 = D-pad | $02 = Buttons | $03 = Buttons and D-Pad + ; >=$04 = Swap buttons and D-pad +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 + ; Crypto Block ($7F50D0 - $7F51FF) +KeyBase: skip $10 ; +y: skip 4 ; +z: skip 4 ; +Sum: skip 4 ; +p: skip 4 ; +e: skip 2 ; +CryptoScratch: skip $0E ; +CryptoBuffer: ; +v: skip $100 ; +RNGPointers: skip $100 ; Pointers for static RNG + ; Network I/O block. See servicerequest.asm. Rx and Tx channels + ; also allocated 8 persistent bytes each in sram.asm. +RxBuffer: skip $7F ; +RxStatus: skip 1 ; +TxBuffer: skip $7F ; +TxStatus: skip 1 ; +skip $10 ; Unused +CompassTotalsWRAM: skip $10 ; skip $10 +skip $40 ; Reserved for general dungeon tracking data. May have over + ; allocated here. Feel free to reassign. +skip $40 ; 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. + ; +MiniGameTime = $7FFE00 ; Time spent in mini game. 32-bits. +MiniGameTimeFinal = $7FFE04 ; Final mini game time. 32 bits. ;================================================================================ ; RAM Assertions @@ -15,4 +565,356 @@ macro assertRAM(label, address) assert