19 KiB
Oracle of Secrets - Project Tracker
- Project Dashboard & Epics
- Technical Debt & Refactoring
- System Integration & Bugs
- New Features & Content
- Reference
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
- Goal: Improve code quality, readability, and maintainability across all major systems.
- Related Sections: Technical Debt & Refactoring
-
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)
TODO
[B]
Refactor Time System [0/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/)
TODO
[B]
Refactor Menu System [0/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: Regression. The previous fix attempt introduced a `BRK` crash.
- 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.asmandOverworld/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.
- Design the UI for the journal in
ACTIVE
[B]
Implement Consumable Item Effects [2/6] quest
- Analysis: The Magic Bag jump table in
all_items.asmhas 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