Files
oracle-of-secrets/oracle.org

19 KiB

Oracle of Secrets - Project Tracker

Project Dashboard & Epics

This section provides a high-level overview of the major development efforts (Epics). Each epic groups together numerous smaller tasks from the sections below.

  • Epic: Core Infrastructure Refactor

  • Epic: System Integration & Stability

    • Goal: Resolve all known conflicts between major systems like ZSOW, the Time System, and other custom logic to ensure a stable and bug-free experience.
    • Related Sections: System Integration & Bugs
  • Epic: Dungeon Polish & Completion

    • Goal: Finalize the design, puzzles, and presentation of all dungeons.
    • Related Sections: New Features & Content
  • Epic: Quest & Narrative Implementation

    • Goal: Implement all remaining main story quests, side-quests, and narrative sequences.
    • Related Sections: New Features & Content
  • Epic: Boss & Enemy Enhancements

    • Goal: Refine and improve all custom boss fights and enemy behaviors.
    • Related Sections: New Features & Content

Technical Debt & Refactoring

This section tracks tasks focused on improving the existing codebase's structure, readability, and maintainability. Per user feedback, these tasks should be tackled opportunistically alongside feature development and bug-fixing to allow for immediate testing and avoid regressions.

General Infrastructure

TODO [B] Reorganize All Patches into a Central File

  • Analysis: Patches are scattered across multiple files (time_system.asm, all_sprites.asm, etc.).
  • Task: Move all `org` patches that modify vanilla code into Core/patches.asm. This file should be organized by bank and functionality for clarity.
  • Benefit: Centralizes all direct modifications to the original ROM, making them easier to find, manage, and debug.

TODO [C] Leverage struct for Complex Data Structures

  • Analysis: Many systems use parallel arrays or labeled offsets for complex data, which is functional but hard to read.
  • Task: Systematically refactor key data structures to use asar's `struct` directive.
  • Candidates:

    • Player Data (Link's state)
    • Sprite State (Generic sprite properties)
    • SRAM Layout (Quest flags, item data)

TODO [C] Convert Manual Jump Tables to Use table

  • Analysis: Jump tables are often created manually with `dw` directives.
  • Task: Convert these tables to use asar's `table` directive for simplicity and safety.
  • Candidates:

    • Items/all_items.asm (Link_ConsumeMagicBagItem)
    • Menu/menu.asm (Menu_Entry.vectors)

TODO [C] Document the Dialogue System

  • Goal: Create comprehensive documentation for the game's dialogue and text rendering system.
  • Blocker For: quest-goron-mines (Garo NPC).

Time System (Overworld/time_system.asm)

DONE [B] Refactor Time System [3/3]

  • Analysis: The system is functional but monolithic and uses many magic numbers.
  • Tasks:

    • Group all time-related variables (`Hours`, `Minutes`, `TimeSpeed`, color values) into a single `TimeState` struct.
    • Convert all logic blocks (`RunClock`, `DrawClockToHud`, `ColorSubEffect`) into proper `subroutine`s.
    • Break down the large `RunClock` routine into smaller, single-purpose functions (e.g., `TimeSystem_CheckCanRun`, `TimeSystem_IncrementTime`, `TimeSystem_UpdatePalettes`).

Minecart System (Sprites/Objects/minecart.asm)

TODO [B] Refactor Minecart System [0/4]

  • Analysis: An impressive but highly complex system that would benefit greatly from better organization and data-driven design.
  • Tasks:

    • Define a `MinecartTrack` struct and convert the SRAM tracking arrays into a `table` of these structs.
    • Refactor the four `Minecart_Move…` routines into a single `Minecart_Move` subroutine that uses a lookup table for speed and axis.
    • Refactor the `Minecart_SetDirection…` routines into a single `Minecart_SetDirection` subroutine that uses lookup tables.
    • Add high-level block comments to explain the purpose of major routines like `HandleTileDirections` and the track caching system.

Ice Block System (Sprites/Objects/ice_block.asm)

TODO [C] Refactor Ice Block Sprite

  • Analysis: The logic is straightforward but can be made more compact and readable.
  • Task: Refactor the `Sprite_ApplyPush` routine to use a lookup table for setting speed based on direction, instead of a chain of `CMP`/`BEQ` instructions.
  • Note: This is a code quality refactor. A separate bug for the collision mechanics is tracked in bug-ice-block-collision.

Menu System (Menu/)

DONE [B] Refactor Menu System [2/2]

  • Analysis: The menu system is robust but has some duplicated code and hardcoded values.
  • Tasks:

    • Refactor the input handling logic for the Magic Bag, Song Menu, and Ring Box sub-menus into a single, reusable subroutine.
    • Replace all hardcoded menu state values (e.g., `LDA.b #$0C`) with named constants (e.g., `!MENU_STATE_MAGIC_BAG = $0C`).

Music System (Music/)

TODO [C] Improve Music System Workflow [0/3]

  • Analysis: The macro-based system is powerful but could be even more user-friendly for composition.
  • Tasks:

    • Establish a clear naming convention for subroutines (e.g., `.MelodyVerseA`, `.BasslineIntro`) and refactor existing songs to use it.
    • Create a `Music/common_patterns.asm` library for reusable musical phrases like standard drum beats or arpeggios.
    • Develop advanced composition macros like `%DefineMeasure(Name, Notes…)` and `%PlayMeasure(Name, Repeats)` to abstract away subroutine creation and calling.

System Integration & Bugs

This section tracks known conflicts between systems and outstanding bugs.

ACTIVE [A] Fix Ice Block Collision and Push Mechanics

  • Problem: Collision logic was too sensitive, touch was unpredictable and the direction could shift while the player is moving.
  • Solution: Implemented an intent-based push system requiring Link to be aligned and hold contact for a short duration, with grid snapping for predictable movement.
  • Status: Awaiting emulator verification.

ACTIVE [C] Refactor Ice Block Sprite

  • Analysis: The logic is straightforward but can be made more compact and readable.
  • Task: Refactored the `Sprite_ApplyPush` routine to use a lookup table for setting speed based on direction. Converted `IceBlock_CheckForGround` and `Sprite_IceBlock_CheckForSwitch` to subroutines. Replaced magic numbers with constants.
  • Status: Awaiting emulator verification.

TODO [A] Resolve ZSOW vs. Lost Woods Conflict

  • Analysis: The `lost_woods.asm` puzzle directly conflicts with `ZSCustomOverworld.asm`'s transition handler.
  • Task: Refactor `lost_woods.asm` into a proper `JSL`-callable subroutine (`LostWoods_PuzzleHandler`).
  • Implementation: Modify the `OverworldHandleTransitions` routine in `ZSCustomOverworld.asm` to check if the current area is the Lost Woods (`#$29`) and call the new handler. The handler should return a status indicating if it has overridden the transition.

ACTIVE [A] ZSOW vs. Day/Night Sprites

  • Status: In progress.
  • Task: Triage the crash to identify the root cause and develop a new solution for integrating day/night sprite loading with ZSOW.

ACTIVE [A] ZSOW vs. Song of Storms

  • Status: In progress.
  • Blocker: This task is blocked by the `ZSOW vs. Day/Night Sprites` regression, as they may be related.

ACTIVE [B] Zora Temple Tasks [0/2]   code bugfix

  • Zora Follower Sprite Logic: Ensure the Zora Baby follower correctly transitions to a standard sprite and interacts with switches.
  • Fix Water Gate Collision: Debug collision issues with the water gates in the temple.

New Features & Content

Dungeons & Levels

TODO [A] Add Dungeon Maps [0/11]   assets map

  • Task: Create and integrate map data for all dungeons using the yaze dungeon map editor.
  • D1: Mushroom Grotto
  • D2: Tail Palace
  • D3: Kalyxo Castle
  • D4: Zora Temple
  • D5: Glacia Estate
  • D6: Goron Mines
  • D7: Dragon Ship
  • D8: Fortress of Secrets
  • S1: Shrine of Wisdom
  • S2: Shrine of Power
  • S3: Shrine of Courage

TODO [B] Glacia Estate Polish [0/4]   design polish

  • Improve Ice Block sprite collision detection (relates to bug-ice-block-collision).
  • Tune enemies in dungeon, adjust positioning for better challenge flow.
  • Exterior GFX improvements.
  • Add a visual indicator (e.g., a crack) for the pushable block in the ice puzzle.

TODO [A] Shrine of Power Tasks [0/1]   design

  • Fix collision of lava pit corner tiles.

TODO [C] Dragon Ship Tasks [0/1]   design

  • Flesh out ideas for an extended section.

TODO [C] Shrine of Wisdom Swamp Overworld Improvements   planning

  • Goal: Make the swamp area less frustrating and more rewarding to explore.
  • Ideas:

    • Add warp zones that return the player to the start of a section if they fall.
    • Place shrubs or enemies that drop magic vials to support item usage.
    • Add a friendly NPC who provides hints about the correct path.
    • Place a hidden heart piece or other treasure to reward players who explore off the main path.

TODO [B] Goron Mines Dungeon Ideas   design

  • Goal: Flesh out puzzle concepts for the Goron Mines.
  • Ideas:

    • Goron Follower: A Goron follows you who is heavy enough to trigger crumble floors. You must guide him safely.
    • Minecart Lift: A puzzle where you must lift an empty minecart and place it on a different track to proceed.
    • Fragile Floor Maze: A room with a mix of normal and crumbling floor tiles. You must find the safe path. Maybe use an item (Cane of Somaria?) to test the floor ahead.
    • Controlled Collapse: A puzzle where you must intentionally make a floor tile crumble to fall down to a specific spot on the floor below.

Quests & Narrative Sequences

ACTIVE [A] Zora Sanctuary Questline [2/3]   quest

  • Meet lone Sea Zora left at the Sanctuary, learn of Zora Princess.
  • Conflict over territory lead to Zora Princesses imprisonment.
  • Implement waterfall opening event using Song of Storms. This will require coordination between Items/ocarina.asm and Overworld/overlays.asm.

TODO [A] Kalyxo Castle Prison Sequence [0/4]   sequence code

  • Goal: Create a stealth-based escape sequence after obtaining the Meadow Blade.
  • Tasks:

    • Implement Overlord logic to swarm the player with guards after they get the Lv2 sword, triggering a warp to a dungeon room (prison cell).
    • Implement guard AI using probe_ref.asm. Some guards should have a simple "reset on sight" behavior, while others should give chase.
    • Design the prison escape path, requiring the use of Minish form to slip through small passages.
    • Create custom dungeon objects for Minish-only pathways.

ACTIVE [B] Goron Mines Quest [2/4]   quest

  • Collectible Goron Rock Meat from Lupo Mountain.
  • Kalyxian Goron NPC in the desert asks for five sirloins to open the mines.
  • Implement Garo NPC. This will be a dialogue-heavy NPC with mysterious warping behavior. (Depends on infra-dialogue-docs).
  • Add Gossip Stones that provide hints related to the Shrines or other world lore.

TODO [B] Tail Palace Kiki Quest [1/2]   quest code

  • Deku NPCs inhabit Tail Palace OW after dungeon completion.
  • Modify the Kiki follower logic to require Bananas instead of Rupees to open the palace.

TODO [B] Implement Dream Sequences [0/6]   sequence

  • Deku Business Scrub Dream
  • Twinrova Ranch Girl Dream
  • Hyrule Castle Dream (Song of Time)
  • River Zora King Dream
  • Kydrog Sealing Dream
  • Mine Collapse Dream

TODO [B] Implement Journal Feature   menu

  • Goal: Create a functional journal accessible from the menu.
  • Tasks:

    • Design the UI for the journal in Menu/menu_journal.asm.
    • Create a system to track completed quests and major events using SRAM flags.
    • Write the text entries for each event.

ACTIVE [B] Implement Consumable Item Effects [2/6]   quest

  • Analysis: The Magic Bag jump table in all_items.asm has several unimplemented items.
  • Tasks:

    • Banana (restores health)
    • Rock Meat
    • Pineapple
    • Seashells
    • Honeycombs
    • Deku Sticks

TODO [C] Design and Implement Custom End Credits Sequence

  • Goal: Create a unique end credits sequence for the game.
  • Note: Will be implemented using the custom C++ editor, yaze.

Sprites & Entities

TODO [A] Improve Various Sprites Behavior Quality

  • Goal: A general task to review and polish the AI and behavior of various custom sprites.
  • Note: This is a high-level task that should be broken down into specific sprite-by-sprite improvements as development continues.

TODO [A] Update Kydrog Boss Fight [1/3]   boss code

  • Track offspring sprites spawned for more dynamic spawns.
  • Improve Kydrog's movement AI and add a second phase to the fight.
  • Create a cinematic opening and ending cutscene with dialogue.

TODO [A] Update Kydreeok Boss Fight [0/9]   boss code

  • Goal: Make the fight more dynamic and challenging.
  • Tasks:

    • Improve fireball attack patterns (e.g., targeted shots, spreads).
    • Add a "neck stretch" lunge attack, similar to a Chain Chomp.
    • Add a "spin attack" where necks stretch and spin around the body while shooting fire.
    • Add a bone-throwing attack for the second phase.
    • Make defeated heads detach and float around the room before re-attaching, instead of just popping back.
    • Add a "bullet hell" phase where heads are retracted and the body shoots fireballs in all directions.
    • Modify the damage check to prevent electrocuting the player if they hit a head, reducing frustration.
    • Create a pre-fight transformation cutscene showing Kydrog turning into Kydreeok.
    • Improve head/neck rotation visuals.

TODO [B] Enhance Shrine of Courage Boss (Vaati) AI

  • Goal: Move the boss beyond a simple reskin of Vitreous.
  • Task: Design and implement new, Vaati-inspired attack patterns.
  • Inspiration: Could draw from the "Advanced Arrghus" custom boss logic.

Creative Ideas & Brainstorming

Sky Area Special Overworld Events

  • Goal: Design puzzles for a cloud-based area accessed with the Song of Soaring.
  • Ideas:

    • Weather Puzzles: Use the Ocarina to switch between sun and rain. Rain creates new cloud platforms by filling them with water. Sunshine makes electric clouds safe to walk on.
    • Form-Based Puzzles: Some clouds are thin and require Minish Form to not fall through. Others have strong winds that blow Minish Link away but not normal Link.
    • Conduction Puzzles: Use the Song of Storms to turn a normal cloud into a thundercloud to conduct electricity and power a mechanism.

Reference

Timeline

Event Items
Start Game Lamp
Shrine of Origins Moon Pearl
Forest of Dreams Lv1 Sword and Shield

ROM Map

Expanded space used by ZScream as of 1/16/2024 Addresses are PC unless stated otherwise. ZS reserves everything up to 1.5mb or up to 0x150000

Location Contents
0x100000 - 0x107FFF Nothing?
0x108000 - 0x10FFFF Title Screen, Dungeon Map
0x110000 - 0x117FFF Default room header location
0x118000 - 0x11FFFF Unknown
0x120000 - 0x127FFF Expanded overlay data
0x128000 - 0x12FFFF Custom collision data
0x130000 - 0x137FFF Overworld map data overflow
0x138000 - 0x13FFFF Expanded dungeon object data
0x140000 - 0x147FFF Custom overworld data
0x148000 - 0x14FFFF Expanded dungeon object data

Credits

Zarby89 - ZScream, Code, Graphics Jared Brian - Shrine of Power, ZScream, Code Jeimuzu - Shrine of Wisdom, Tail Palace Letterbomb - Shrine of Courage, Music, Graphics NEONswift - Legends of Hyrule Maps SePH - Overworld, Graphics Ghillie - Overworld, Graphics DarkLink45 - Deku Link GFX W*E*R*D*N*A - Graphics GameyFireBro - Graphics Fruttielicious - Beta Testing LEGO_Vince - Beta Testing Spacewiki - Beta Testing Evolvingfetus - Beta Testing Discodragn - Beta Testing BIGLOU - Beta Testing HonorThyFamily - Beta-Testing