diff --git a/Oracle_main.asm b/Oracle_main.asm index e8aaffc..6322124 100644 --- a/Oracle_main.asm +++ b/Oracle_main.asm @@ -2,29 +2,38 @@ ; The Legend of Zelda: Oracle of Secrets ; Composed by: Scawful ; -; Expanded Banks: -; 21-2A ZS Reserved -; 2B - Items: all_items.asm -; 2C - Underworld: dungeons.asm -; 2D - Menu -; 2E - HUD -; 2F - Expanded Message Bank -; 30-32 Sprites: all_sprites.asm -; 33 - Moosh Form Gfx and Palette -; 34 - Time System, Custom Overworld Overlays, Gfx -; 35 - Deku Link Gfx and Palette -; 36 - Zora Link Gfx and Palette -; 37 - Bunny Link Gfx and Palette -; 38 - Wolf Link Gfx and Palette -; 39 - Minish Link Gfx -; 3A - Mask Routines, Custom Ancillae (Deku Bubble) -; 3B - GBC Link Gfx -; 3C - Unused -; 3D - ZS Tile16 -; 3E - LW ZS Tile32 -; 3F - DW ZS Tile32 -; 40 - LW World Map -; 41 - DW World Map +; Custom Code and Data Memory Map: +; +; Bank $20 ($208000): Expanded Music (Music/all_music.asm) +; Bank $21-$27: ZS Reserved +; Bank $28 ($288000): ZSCustomOverworld (Overworld/ZSCustomOverworld.asm) +; Bank $29-$2A: ZS Reserved +; Bank $2B ($2B8000): Items (Items/all_items.asm) +; Bank $2C ($2C8000): Underworld/Dungeons (Dungeons/dungeons.asm) +; Bank $2D ($2D8000): Menu (Menu/menu.asm) +; Bank $2E ($2E8000): HUD (Menu/menu.asm) +; Bank $2F ($2F8000): Expanded Message Bank (Core/message.asm) +; Bank $30 ($308000): Sprites (Sprites/all_sprites.asm) +; Bank $31 ($318000): Sprites (Sprites/all_sprites.asm) +; Bank $32 ($328000): Sprites (Sprites/all_sprites.asm) +; Bank $33 ($338000): Moosh Form Gfx and Palette (Masks/all_masks.asm) +; Bank $34 ($348000): Time System, Custom Overworld Overlays, Gfx (Masks/all_masks.asm) +; Bank $35 ($358000): Deku Link Gfx and Palette (Masks/all_masks.asm) +; Bank $36 ($368000): Zora Link Gfx and Palette (Masks/all_masks.asm) +; Bank $37 ($378000): Bunny Link Gfx and Palette (Masks/all_masks.asm) +; Bank $38 ($388000): Wolf Link Gfx and Palette (Masks/all_masks.asm) +; Bank $39 ($398000): Minish Link Gfx (Masks/all_masks.asm) +; Bank $3A ($3A8000): Mask Routines, Custom Ancillae (Deku Bubble) (Masks/all_masks.asm) +; Bank $3B ($3B8000): GBC Link Gfx (Masks/all_masks.asm) +; Bank $3C: Unused +; Bank $3D: ZS Tile16 +; Bank $3E: LW ZS Tile32 +; Bank $3F: DW ZS Tile32 +; Bank $40 ($408000): LW World Map (Overworld/overworld.asm) +; Bank $41 ($418000): DW World Map (Overworld/overworld.asm) +; +; Patches: Core/patches.asm and Util/item_cheat.asm use pushpc/pullpc and org +; for targeted modifications within vanilla ROM addresses. ; ========================================================= incsrc "Util/macros.asm" @@ -42,43 +51,31 @@ namespace Oracle incsrc "Core/symbols.asm" incsrc "Core/message.asm" - %print_debug(" -- Music -- ") - %print_debug("") + %log_section("Music", !LOG_MUSIC) incsrc "Music/all_music.asm" - %print_debug("") - %print_debug(" -- Overworld -- ") - %print_debug("") + %log_section("Overworld", !LOG_OVERWORLD) incsrc "Overworld/overworld.asm" - %print_debug("") - %print_debug(" -- Dungeon -- ") - %print_debug("") + %log_section("Dungeon", !LOG_DUNGEON) incsrc "Dungeons/dungeons.asm" - %print_debug("") - %print_debug(" -- Sprites -- ") - %print_debug("") + %log_section("Sprites", !LOG_SPRITES) incsrc "Sprites/all_sprites.asm" - %print_debug("") - %print_debug(" -- Masks -- ") - %print_debug("") + %log_section("Masks", !LOG_MASKS) incsrc "Masks/all_masks.asm" - %print_debug("") - %print_debug(" -- Items -- ") - %print_debug("") + %log_section("Items", !LOG_ITEMS) incsrc "Items/all_items.asm" - %print_debug("") - %print_debug(" -- Menu -- ") - %print_debug("") + %log_section("Menu", !LOG_MENU) incsrc "Menu/menu.asm" + incsrc "Util/item_cheat.asm" incsrc "Core/patches.asm" + ; incsrc "Core/capture.asm" - %print_debug("") - %print_debug("Finished applying patches") + print "\nFinished applying patches" } namespace off diff --git a/Sprites/all_sprites.asm b/Sprites/all_sprites.asm index 6fae983..29e9b54 100644 --- a/Sprites/all_sprites.asm +++ b/Sprites/all_sprites.asm @@ -2,88 +2,117 @@ incsrc Core/sprite_macros.asm +; ========================================================= +; Bank $30 org $308000 +%log_start("Bank 30", !LOG_SPRITES) + incsrc Core/sprite_new_table.asm +%log_start("Sprite_Farore", !LOG_SPRITES) Sprite_Farore = $73 incsrc "Sprites/NPCs/farore.asm" -%print_debug("End of farore.asm ") -incsrc "Sprites/NPCs/hyrule_dream.asm" -%print_debug("End of hyrule_dream.asm ") +%log_end("Sprite_Farore", !LOG_SPRITES) +%log_start("hyrule_dream", !LOG_SPRITES) +incsrc "Sprites/NPCs/hyrule_dream.asm" +%log_end("hyrule_dream", !LOG_SPRITES) + +%log_start("Sprite_KydrogNPC", !LOG_SPRITES) Sprite_KydrogNPC = $7B incsrc "Sprites/Bosses/kydrog.asm" -%print_debug("End of kydrog.asm ") +%log_end("Sprite_KydrogNPC", !LOG_SPRITES) +%log_start("Sprite_MakuTree", !LOG_SPRITES) Sprite_MakuTree = $9E incsrc "Sprites/NPCs/maku_tree.asm" -%print_debug("End of maku_tree.asm ") +%log_end("Sprite_MakuTree", !LOG_SPRITES) +%log_start("Sprite_MaskSalesman", !LOG_SPRITES) Sprite_MaskSalesman = $E8 incsrc "Sprites/NPCs/mask_salesman.asm" -%print_debug("End of mask_salesman.asm ") +%log_end("Sprite_MaskSalesman", !LOG_SPRITES) +%log_start("village_elder", !LOG_SPRITES) Sprite_BeanVendor = $07 Sprite_VillageElder = $07 incsrc "Sprites/NPCs/village_elder.asm" incsrc "Sprites/NPCs/bean_vendor.asm" -%print_debug("End of bean_vendor.asm ") +%log_end("village_elder", !LOG_SPRITES) +%log_start("octoboss", !LOG_SPRITES) incsrc "Sprites/Bosses/octoboss.asm" -%print_debug("End of octoboss.asm ") +%log_end("octoboss", !LOG_SPRITES) +%log_start("mermaid", !LOG_SPRITES) Sprite_Mermaid = $F0 Sprite_Maple = $F0 ; Subtype 1 Sprite_Librarian = $F0 ; Subtype 2 incsrc "Sprites/NPCs/mermaid.asm" -%print_debug("End of mermaid.asm ") -incsrc "Sprites/NPCs/maple.asm" -%print_debug("End of maple.asm ") +%log_end("mermaid", !LOG_SPRITES) +%log_start("maple", !LOG_SPRITES) +incsrc "Sprites/NPCs/maple.asm" +%log_end("maple", !LOG_SPRITES) + +%log_start("manhandla", !LOG_SPRITES) Sprite_Manhandla = $88 incsrc "Sprites/Bosses/manhandla.asm" -%print_debug("End of manhandla.asm ") +%log_end("manhandla", !LOG_SPRITES) +%log_start("business_scrub", !LOG_SPRITES) Sprite_BusinessScrub = $14 incsrc "Sprites/Enemies/business_scrub.asm" -%print_debug("End of business_scrub.asm ") +%log_end("business_scrub", !LOG_SPRITES) +%log_start("eon_scrub", !LOG_SPRITES) incsrc "Sprites/Enemies/eon_scrub.asm" -%print_debug("End of eon_scrub.asm ") +%log_end("eon_scrub", !LOG_SPRITES) +%log_start("goriya", !LOG_SPRITES) Sprite_Goriya = $2C incsrc "Sprites/Enemies/goriya.asm" -%print_debug("End of goriya.asm ") +%log_end("goriya", !LOG_SPRITES) +%log_start("darknut", !LOG_SPRITES) Sprite_Darknut = $1D incsrc "Sprites/Enemies/darknut.asm" -%print_debug("End of darknut.asm ") +%log_end("darknut", !LOG_SPRITES) +%log_start("sea_urchin", !LOG_SPRITES) Sprite_SeaUrchin = $AE incsrc "Sprites/Enemies/sea_urchin.asm" -%print_debug("End of sea_urchin.asm ") +%log_end("sea_urchin", !LOG_SPRITES) +%log_start("korok", !LOG_SPRITES) Sprite_Korok = $F1 incsrc "Sprites/NPCs/korok.asm" -%print_debug("End of korok.asm ") +%log_end("korok", !LOG_SPRITES) +%log_start("vasu", !LOG_SPRITES) Sprite_Vasu = $D7 incsrc "Sprites/NPCs/vasu.asm" -%print_debug("End of vasu.asm ") +%log_end("vasu", !LOG_SPRITES) +%log_start("keese", !LOG_SPRITES) incsrc "Sprites/Enemies/keese.asm" -%print_debug("End of keese.asm ") +%log_end("keese", !LOG_SPRITES) + +%log_start("vampire_bat", !LOG_SPRITES) incsrc "Sprites/Bosses/vampire_bat.asm" -%print_debug("End of vampire_bat.asm ") +%log_end("vampire_bat", !LOG_SPRITES) +%log_start("bottle_vendor", !LOG_SPRITES) incsrc "Sprites/NPCs/bottle_vendor.asm" -%print_debug("End of bottle_vendor.asm ") +%log_end("bottle_vendor", !LOG_SPRITES) +%log_start("leever", !LOG_SPRITES) incsrc "Sprites/Enemies/leever.asm" -%print_debug("End of leever.asm ") +%log_end("leever", !LOG_SPRITES) +%log_start("pedestal", !LOG_SPRITES) incsrc "Sprites/Objects/pedestal.asm" -%print_debug("End of pedestal.asm ") +%log_end("pedestal", !LOG_SPRITES) DontTeleportWithoutFlippers: { @@ -112,174 +141,205 @@ Graphics_Transfer: RTL } -%print_debug("End of Sprites Bank 30 ") +%log_end("Bank 30", !LOG_SPRITES) ; ========================================================= - -%print_debug("") -%print_debug("Bank 31 Sprites") -%print_debug("") - +; Bank $31 org $318000 -incsrc Core/sprite_functions.asm -%print_debug("End of sprite_functions.asm ") +%log_start("Bank 31", !LOG_SPRITES) +incsrc Core/sprite_functions.asm + +%log_start("kydrog_boss", !LOG_SPRITES) Sprite_KydrogBoss = $CB incsrc "Sprites/Bosses/kydrog_boss.asm" -%print_debug("End of kydrog_boss.asm ") +%log_end("kydrog_boss", !LOG_SPRITES) +%log_start("deku_scrub", !LOG_SPRITES) Sprite_DekuScrubNPCs = $A0 incsrc "Sprites/NPCs/deku_scrub.asm" -%print_debug("End of deku_scrub.asm ") +%log_end("deku_scrub", !LOG_SPRITES) +%log_start("anti_kirby", !LOG_SPRITES) Sprite_AntiKirby = $A8 incsrc "Sprites/Enemies/anti_kirby.asm" -%print_debug("End of anti_kirby.asm ") +%log_end("anti_kirby", !LOG_SPRITES) +%log_start("helmet_chuchu", !LOG_SPRITES) Sprite_HelmetChuchu = $05 incsrc "Sprites/Enemies/helmet_chuchu.asm" -%print_debug("End of helmet_chuchu.asm ") +%log_end("helmet_chuchu", !LOG_SPRITES) +%log_start("booki", !LOG_SPRITES) Sprite_Booki = $CC incsrc "Sprites/Enemies/booki.asm" -%print_debug("End of booki.asm ") +%log_end("booki", !LOG_SPRITES) +%log_start("thunder_ghost", !LOG_SPRITES) Sprite_ThunderGhost = $CD incsrc "Sprites/Enemies/thunder_ghost.asm" -%print_debug("End of thunder_ghost.asm ") +%log_end("thunder_ghost", !LOG_SPRITES) +%log_start("switch_track", !LOG_SPRITES) Sprite_SwitchTrack = $B0 incsrc "Sprites/Objects/switch_track.asm" -%print_debug("End of switch_track.asm ") +%log_end("switch_track", !LOG_SPRITES) +%log_start("mineswitch", !LOG_SPRITES) Sprite_Mineswitch = $AF incsrc "Sprites/Objects/mineswitch.asm" -%print_debug("End of mineswitch.asm ") +%log_end("mineswitch", !LOG_SPRITES) +%log_start("village_dog", !LOG_SPRITES) Sprite_VillageDog = $25 incsrc "Sprites/NPCs/village_dog.asm" -%print_debug("End of village_dog.asm ") +%log_end("village_dog", !LOG_SPRITES) +%log_start("minecart", !LOG_SPRITES) Sprite_Minecart = $A3 incsrc "Sprites/Objects/minecart.asm" -%print_debug("End of minecart.asm ") +%log_end("minecart", !LOG_SPRITES) +%log_start("dark_link", !LOG_SPRITES) Sprite_DarkLink = $C1 incsrc "Sprites/Bosses/dark_link.asm" -%print_debug("End of dark_link.asm ") +%log_end("dark_link", !LOG_SPRITES) +%log_start("puffstool", !LOG_SPRITES) Sprite_Puffstool = $B1 incsrc "Sprites/Enemies/puffstool.asm" -%print_debug("End of puffstool.asm ") +%log_end("puffstool", !LOG_SPRITES) +%log_start("deku_leaf", !LOG_SPRITES) ; Also beach whirlpool Sprite_DekuLeaf = $77 incsrc "Sprites/Objects/deku_leaf.asm" -%print_debug("End of deku_leaf.asm ") +%log_end("deku_leaf", !LOG_SPRITES) +%log_start("portal_sprite", !LOG_SPRITES) Sprite_Portal = $03 incsrc "Sprites/Objects/portal_sprite.asm" -%print_debug("End of portal_sprite.asm ") +%log_end("portal_sprite", !LOG_SPRITES) +%log_start("impa", !LOG_SPRITES) incsrc "Sprites/NPCs/impa.asm" -%print_debug("End of impa.asm ") +%log_end("impa", !LOG_SPRITES) +%log_start("poltergeist", !LOG_SPRITES) Sprite_Poltergeist = $EF incsrc "Sprites/Enemies/poltergeist.asm" -%print_debug("End of poltergeist.asm ") +%log_end("poltergeist", !LOG_SPRITES) +%log_start("pols_voice", !LOG_SPRITES) Sprite_PolsVoice = $A4 incsrc "Sprites/Enemies/pols_voice.asm" -%print_debug("End of pols_voice.asm ") +%log_end("pols_voice", !LOG_SPRITES) +%log_start("wolfos", !LOG_SPRITES) Sprite_Wolfos = $A9 incsrc "Sprites/Bosses/wolfos.asm" -%print_debug("End of wolfos.asm ") +%log_end("wolfos", !LOG_SPRITES) +%log_start("ice_block", !LOG_SPRITES) ; TODO: Change from digging game guy? Sprite_IceBlock = $D5 incsrc "Sprites/Objects/ice_block.asm" -%print_debug("End of ice_block.asm ") +%log_end("ice_block", !LOG_SPRITES) +%log_start("ranch_girl", !LOG_SPRITES) incsrc "Sprites/NPCs/ranch_girl.asm" -%print_debug("End of Ranch Girl.asm ") +%log_end("ranch_girl", !LOG_SPRITES) assert pc() <= $328000 +%log_end("Bank 31", !LOG_SPRITES) + ; ========================================================= - -%print_debug("") -%print_debug("Bank 32 Sprites") -%print_debug("") - +; Bank $32 org $328000 +%log_start("Bank 32", !LOG_SPRITES) +%log_start("twinrova", !LOG_SPRITES) Sprite_Twinrova = $CE incsrc "Sprites/Bosses/twinrova.asm" -%print_debug("End of twinrova.asm ") +%log_end("twinrova", !LOG_SPRITES) +%log_start("kydreeok", !LOG_SPRITES) Sprite_Kydreeok = $7A incsrc "Sprites/Bosses/kydreeok.asm" -%print_debug("End of kydreeok.asm ") +%log_end("kydreeok", !LOG_SPRITES) +%log_start("kydreeok_head", !LOG_SPRITES) Sprite_KydreeokHead = $CF incsrc "Sprites/Bosses/kydreeok_head.asm" -%print_debug("End of kydreeok_head.asm ") - -; ========================================================= +%log_end("kydreeok_head", !LOG_SPRITES) +%log_start("bug_net_kid", !LOG_SPRITES) incsrc "Sprites/NPCs/bug_net_kid.asm" -%print_debug("End of bug_net_kid.asm ") +%log_end("bug_net_kid", !LOG_SPRITES) +%log_start("king_dodongo", !LOG_SPRITES) incsrc "Sprites/Bosses/king_dodongo.asm" -%print_debug("End of king_dodongo.asm ") +%log_end("king_dodongo", !LOG_SPRITES) +%log_start("arrghus", !LOG_SPRITES) incsrc "Sprites/Bosses/arrghus.asm" -%print_debug("End of arrghus.asm ") +%log_end("arrghus", !LOG_SPRITES) +%log_start("fortune_teller", !LOG_SPRITES) incsrc "Sprites/NPCs/fortune_teller.asm" -%print_debug("End of fortune_teller.asm ") +%log_end("fortune_teller", !LOG_SPRITES) + +%log_end("Bank 32", !LOG_SPRITES) ; ========================================================= +; Bank $2C +; Note: These sprites are located in the Dungeon bank -%print_debug("") -%print_debug("Bank 2C Sprites") -%print_debug("") - +%log_start("lanmola", !LOG_DUNGEON) incsrc "Sprites/Bosses/lanmola.asm" -%print_debug("End of Lanmola.asm ") +%log_end("lanmola", !LOG_DUNGEON) +%log_start("lanmola_expanded", !LOG_DUNGEON) incsrc "Sprites/Bosses/lanmola_Expanded.asm" -%print_debug("End of Lanmola_Expanded.asm ") +%log_end("lanmola_expanded", !LOG_DUNGEON) +%log_start("followers", !LOG_DUNGEON) incsrc "Sprites/NPCs/followers.asm" -%print_debug("End of followers.asm ") +%log_end("followers", !LOG_DUNGEON) +%log_start("octorok", !LOG_DUNGEON) incsrc "Sprites/Enemies/octorok.asm" -%print_debug("End of octorok.asm ") +%log_end("octorok", !LOG_DUNGEON) +%log_start("piratian", !LOG_DUNGEON) incsrc "Sprites/NPCs/piratian.asm" -%print_debug("End of piratian.asm ") +%log_end("piratian", !LOG_DUNGEON) +%log_start("collectible", !LOG_DUNGEON) incsrc "Sprites/Objects/collectible.asm" -%print_debug("End of collectible.asm ") +%log_end("collectible", !LOG_DUNGEON) +%log_start("eon_owl", !LOG_DUNGEON) Sprite_EonOwl = $0A Sprite_KaeporaGaebora = $0A incsrc "Sprites/NPCs/eon_owl.asm" -%print_debug("End of eon_owl.asm ") +%log_end("eon_owl", !LOG_DUNGEON) +%log_start("zora_princess", !LOG_DUNGEON) Sprite_ZoraPrincess = $B8 incsrc "Sprites/NPCs/eon_zora.asm" incsrc "Sprites/NPCs/eon_zora_elder.asm" incsrc "Sprites/NPCs/zora.asm" incsrc "Sprites/NPCs/zora_princess.asm" -%print_debug("End of zora_princess.asm ") +%log_end("zora_princess", !LOG_DUNGEON) +%log_start("tingle", !LOG_DUNGEON) incsrc "Sprites/NPCs/tingle.asm" -%print_debug("End of tingle.asm ") +%log_end("tingle", !LOG_DUNGEON) +%log_start("goron", !LOG_DUNGEON) incsrc "Sprites/NPCs/goron.asm" -%print_debug("End of goron.asm ") +%log_end("goron", !LOG_DUNGEON) ; ========================================================= \ No newline at end of file diff --git a/Util/macros.asm b/Util/macros.asm index cd63bd5..9dd5c37 100644 --- a/Util/macros.asm +++ b/Util/macros.asm @@ -1,8 +1,18 @@ ; Defines common macros for the project. -; Set to 1 to enable debug printing, 0 to disable. +; Set to 1 to enable global debug printing, 0 to disable. !DEBUG = 1 +; --- Section-specific Log Flags --- +; Set these to 1 to see detailed logs for that section, or 0 to hide them. +!LOG_MUSIC = 1 +!LOG_OVERWORLD = 1 +!LOG_DUNGEON = 1 +!LOG_SPRITES = 1 +!LOG_MASKS = 1 +!LOG_ITEMS = 1 +!LOG_MENU = 1 + ; Prints a message and the current PC value during assembly, but only if !DEBUG is enabled. ; Usage: %print_debug("My message") macro print_debug(message) @@ -10,3 +20,27 @@ macro print_debug(message) print " ", pc endif endmacro + +; Prints a header for a major section. +; Usage: %log_section("Sprites", !LOG_SPRITES) +macro log_section(name, flag) + if !DEBUG == 1 && == 1 + print "\n--- ---" + endif +endmacro + +; Prints a standardized log message for the start of a named block. +; Usage: %log_start("MySprite", !LOG_SPRITES) +macro log_start(name, flag) + if !DEBUG == 1 && == 1 + print "$", pc, " > " + endif +endmacro + +; Prints a standardized log message for the end of a named block. +; Usage: %log_end("MySprite", !LOG_SPRITES) +macro log_end(name, flag) + if !DEBUG == 1 && == 1 + print "$", pc, " < " + endif +endmacro