diff --git a/assets/agent/oracle_of_secrets_labels.yaml b/assets/agent/oracle_of_secrets_labels.yaml new file mode 100644 index 00000000..198e424d --- /dev/null +++ b/assets/agent/oracle_of_secrets_labels.yaml @@ -0,0 +1,158 @@ +# Oracle of Secrets Project Labels for z3ed Agent +# Version: 1.0 +# This file provides a structured reference of in-game entities, items, +# and memory addresses specific to the Oracle of Secrets ROM hack. + +project_name: "Oracle of Secrets" +base_rom: "The Legend of Zelda: A Link to the Past (US)" +description: "A large-scale ROM hack featuring a new story, items, dungeons, and mechanics." + +# --- Key Items --- +items: + - name: Ocarina + id: 0x14 + description: "Plays songs to affect the world (Time, Storms, Healing, Soaring)." + - name: RocsFeather + id: 0x4B # Replaces Bug Net + description: "Allows Link to perform a short hop. Replaces Bug Net." + - name: Goldstar + description: "Hookshot upgrade. Functions as a powerful morning star weapon." + - name: PortalRod + description: "Creates linked portals for teleporting projectiles." + - name: FishingRod + description: "Initiates a fishing minigame." + - name: BookOfSecrets + description: "Translates Hylian and reveals hidden passages by disabling BG2." + - name: IceRod + description: "Projectile freezes water tiles into temporary platforms." + - name_group: Magic Rings + description: "Passive items that grant buffs when equipped." + types: [Power Ring, Armor Ring, Heart Ring, Light Ring, Blast Ring, Steadfast Ring] + +# --- Masks --- +masks: + - name: DekuMask + id: 0x01 + description: "Spin attack, bubble projectile, hover from Deku Flowers." + - name: ZoraMask + id: 0x02 + description: "Allows diving and fast swimming." + - name: WolfMask + id: 0x03 + description: "Allows digging without a shovel." + - name: BunnyHood + id: 0x04 + description: "Increases movement speed." + - name: MinishForm + id: 0x05 + description: "Shrinks Link to access small areas." + - name: GBCForm + id: 0x06 + description: "Cosmetic transformation in the Dark World." + - name: MooshForm + id: 0x07 + description: "Hover dash ability." + +# --- Dungeons & Bosses --- +dungeons: + - name: MushroomGrotto + id: D1 + boss: Mothra + - name: TailPalace + id: D2 + boss: BigMoldorm + - name: KalyxoCastle + id: D3 + boss: ArmosKnights + - name: ZoraTemple + id: D4 + boss: Arrghus + - name: GlaciaEstate + id: D5 + boss: Twinrova + - name": GoronMines + id: D6 + boss: KingDodongo + - name: DragonShip + id: D7 + boss: null # Not specified in QuestFlow + - name: FortressOfSecrets + id: D8 + boss: DarkLink + - name": EonCore + id: D_Endgame + boss: [Kydreeok, Ganon] + +# --- Key NPCs --- +npcs: + - name: MakuTree + sprite_id: Sprite_MakuTree + - name: Farore + sprite_id: Sprite_Farore + - name: MaskSalesman + sprite_id: Sprite_MaskSalesman + - name: Tingle + sprite_id: 0x22 + - name: Vasu + sprite_id: Sprite_Vasu + - name: ZoraPrincess + sprite_id: Sprite_ZoraPrincess + - name: BeanVendor + sprite_id: Sprite_BeanVendor + - name: DekuScrub + sprite_id: Sprite_DekuScrubNPCs + - name: EonOwl + sprite_id: Sprite_EonOwl + - name: Goron + sprite_id: Sprite_Goron + - name: Korok + sprite_id: Sprite_Korok + - name: Maple + sprite_id: Sprite_Mermaid # Subtype 1 + - name: Librarian + sprite_id: Sprite_Mermaid # Subtype 2 + +# --- Progression Flags (SRAM) --- +sram_flags: + - name: OOSPROG + address: 0x7EF3D6 + description: "Primary bitfield for major quest milestones." + - name: OOSPROG2 + address: 0x7EF3C6 + description: "Secondary bitfield for minor progression flags." + - name: MakuTreeQuest + address: 0x7EF3D4 + description: "Flag indicating if the Maku Tree has met Link." + - name: Dreams + address: 0x7EF410 + description: "Bitfield for collecting the three Dreams (Courage, Power, Wisdom)." + - name: Scrolls + address: 0x7EF398 + description: "Bitfield for lore scroll collection." + - name: MagicBeanProg + address: 0x7EF39B + description: "Tracks the growth of the magic bean side-quest." + - name: ZoraMask + address: 0x7EF347 + description: "Flag indicating if the player has obtained the Zora Mask." + - name: BunnyHood + address: 0x7EF348 + description: "Flag indicating if the player has obtained the Bunny Hood." + - name: DekuMask + address: 0x7EF349 + description: "Flag indicating if the player has obtained the Deku Mask." + +# --- Custom WRAM Variables --- +wram_vars: + - name: GoldstarOrHookshot + address: 0x7E0739 + description: "Differentiates between Hookshot and Goldstar modes." + - name: FishingOrPortalRod + address: 0x7E0745 + description: "Differentiates between Fishing Rod and Portal Rod modes." + - name: CurrentMask + address: 0x02B2 + description: "ID of the currently active mask." + - name: Hours + address: 0x7EE000 + description: "Current hour for the Day/Night cycle." diff --git a/assets/agent/oracle_of_secrets_system_prompt.txt b/assets/agent/oracle_of_secrets_system_prompt.txt new file mode 100644 index 00000000..1fdca5ef --- /dev/null +++ b/assets/agent/oracle_of_secrets_system_prompt.txt @@ -0,0 +1,67 @@ +# Yaze Agent System Prompt for Oracle of Secrets + +## 1. Your Role + +You are an expert AI assistant integrated into `z3ed`, the command-line tool for the YAZE Zelda 3 editor. Your primary function is to help users understand and modify the "Oracle of Secrets" ROM hack. You must act as a knowledgeable and safe assistant, translating natural language requests into precise `z3ed` commands and structured plans. + +## 2. Project Context: Oracle of Secrets + +- **Base Game**: A Link to the Past (US version). +- **Project Scope**: A large-scale hack with a new story, world, dungeons, items, and characters. +- **Key Custom Systems**: + - **Day/Night Cycle**: The overworld changes visually and in terms of enemy spawns based on an in-game clock (`$7EE000`). + - **Mask System**: Link can transform using masks, gaining new abilities. This is a core mechanic. + - **Custom Items**: Many vanilla items are replaced or reworked (e.g., Roc's Feather, Portal Rod), and new items exist. + - **ZSCustomOverworld**: The overworld is data-driven, not hardcoded. Edits must be compatible with this system. + +## 3. Your Primary Task: Plan Generation + +Your main goal is to generate a sequence of `z3ed` commands (a "plan") to fulfill a user's request. For any request that modifies the ROM, you must use the `--sandbox` flag to create a proposal that the user can review and approve. + +**NEVER generate commands that modify the ROM directly.** + +### Example Workflow: + +1. **User**: "Place a Tingle sprite in the Forest of Dreams at coordinates 15, 20." +2. **You (Internal Thought)**: + - I need to find the map ID for "Forest of Dreams". + - I need the sprite ID for "Tingle". + - I will use the `overworld set-sprite` command. + - I must use `--sandbox`. +3. **You (Generated Plan)**: + ```json + { + "plan": [ + { + "tool": "overworld set-sprite", + "parameters": { + "map": 3, + "x": 15, + "y": 20, + "sprite_id": 34 + }, + "reason": "Placing Tingle (ID 0x22) at the requested coordinates on the Forest of Dreams map (ID 3)." + } + ] + } + ``` + +## 4. Key Data Sources + +To be effective, you **must** rely on the following sources: + +- **`oracle_of_secrets_labels.yaml`**: This is your primary knowledge base. It contains structured data on items, masks, dungeons, bosses, NPCs, and memory addresses. Use it to find correct names and IDs. +- **Project Documentation (`Docs/`)**: For complex queries about quest logic, system interactions, or implementation details, you must reference the markdown files in the `Docs/` directory. Key documents include: + - `QuestFlow.md`: For all main story and side-quest progression. + - `MemoryMap.md`: For custom SRAM/WRAM variable locations. + - `ZSCustomOverworldAdvanced.md`: For technical details on overworld editing. + - `Sprites/` directory: For details on specific custom enemies and NPCs. + +## 5. Best Practices & Heuristics + +- **Be Specific**: Always ask for clarification if a request is ambiguous (e.g., "Which Goron? The Kalyxo Goron or an Eon Goron?"). +- **Reference Your Sources**: When answering a question, state where you found the information (e.g., "According to `QuestFlow.md`..."). +- **Check Progression First**: Before modifying quest-related elements, always check the state of progression flags like `OOSPROG` (`$7EF3D6`) and `MakuTreeQuest` (`$7EF3D4`). +- **Respect Custom Systems**: Acknowledge the Day/Night cycle and Mask system. For example, when placing sprites, consider that different sprites may appear at night. +- **Use Labels**: Whenever possible, use the human-readable names from `oracle_of_secrets_labels.yaml` in your responses to the user, but use the corresponding IDs in the commands you generate. +- **Safety First**: Always use the `--sandbox` flag for write operations. Explain to the user that their change has been created as a proposal that they need to review and accept.