Files
yaze/docs/F4-overworld-agent-guide.md
2025-10-17 12:10:25 -04:00

737 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Overworld Agent Guide - AI-Powered Overworld Editing
**Version**: 1.0
**Last Updated**: October 6, 2025
**Audience**: AI Agents, z3ed users, automation developers
---
## Overview
This guide explains how AI agents can interact with YAZE's overworld editor through the `z3ed` CLI and automation APIs. It covers:
- Available tools and commands
- Multimodal vision workflows
- Proposal-based editing
- Best practices for AI-generated edits
---
## Quick Start
### Prerequisites
```bash
# Build YAZE with AI and gRPC support
cmake -B build -DZ3ED_AI=ON -DYAZE_WITH_GRPC=ON
cmake --build build --target z3ed
# Set up AI provider (Gemini recommended for vision)
export GEMINI_API_KEY="your-key-here"
```
### First Agent Interaction
```bash
# Ask AI about a map
z3ed agent simple-chat "What tiles are at position 10,10 on map 0?" --rom zelda3.sfc
# AI agent generates edits
z3ed agent run --prompt "Place trees in a 3x3 grid at position 10,10 on map 0" \
--rom zelda3.sfc --sandbox
# Review and accept
z3ed agent diff --proposal-id <id>
z3ed agent accept --proposal-id <id>
```
---
## Available Tools
### Read-Only Tools (Safe for AI)
#### overworld-get-tile
Query tile ID at coordinates.
**Purpose**: Analyze existing tile placement
**Safety**: Read-only, no ROM modification
**Rate Limit**: None
```json
{
"tool": "overworld-get-tile",
"parameters": {
"map": 0,
"x": 10,
"y": 10
}
}
```
**Response**:
```json
{
"tile_id": 66,
"tile_id_hex": "0x0042",
"position": {"x": 10, "y": 10}
}
```
**Use Cases**:
- Check what tile currently exists before painting
- Analyze patterns in tile placement
- Verify expected tiles after edits
---
#### overworld-get-visible-region
Get tiles currently visible on canvas.
**Purpose**: Understand what the user is looking at
**Safety**: Read-only
**Rate Limit**: None
```json
{
"tool": "overworld-get-visible-region",
"parameters": {
"map": 0
}
}
```
**Response**:
```json
{
"region": {
"x_start": 0,
"y_start": 0,
"x_end": 31,
"y_end": 31
},
"tiles": [
{"x": 0, "y": 0, "tile_id": 40},
{"x": 1, "y": 0, "tile_id": 40},
...
]
}
```
**Use Cases**:
- Analyze visible area before suggesting edits
- Generate context-aware suggestions
- Understand user's current focus
---
#### overworld-analyze-region
Get tile composition and patterns in a region.
**Purpose**: Deep analysis of tile distribution
**Safety**: Read-only
**Rate Limit**: Large regions (>1000 tiles) may be slow
```json
{
"tool": "overworld-analyze-region",
"parameters": {
"map": 0,
"x1": 0,
"y1": 0,
"x2": 31,
"y2": 31
}
}
```
**Response**:
```json
{
"tile_counts": {
"40": 512, // Grass
"66": 128, // Tree
"80": 64 // Water
},
"patterns": [
{
"type": "forest",
"center": {"x": 15, "y": 15},
"size": {"width": 10, "height": 10}
}
],
"statistics": {
"total_tiles": 1024,
"unique_tiles": 15,
"most_common_tile": 40
}
}
```
**Use Cases**:
- Understand map composition before edits
- Detect patterns (forests, water bodies, paths)
- Generate statistics for reports
---
### Write Tools (Sandboxed - Creates Proposals)
#### overworld-set-tile
Paint a single tile (creates proposal).
**Purpose**: Modify single tile
**Safety**: Sandboxed, creates proposal
**Rate Limit**: Reasonable (don't spam)
```json
{
"tool": "overworld-set-tile",
"parameters": {
"map": 0,
"x": 10,
"y": 10,
"tile_id": 66
}
}
```
**Response**:
```json
{
"proposal_id": "abc123",
"success": true,
"message": "Proposal created: Set tile at (10,10) to 0x0042"
}
```
**Use Cases**:
- Fix individual tiles
- Place objects at specific coordinates
- Correct tile placement errors
---
#### overworld-set-tiles-batch
Paint multiple tiles in one operation (creates proposal).
**Purpose**: Efficient multi-tile editing
**Safety**: Sandboxed, creates proposal
**Rate Limit**: Max 1000 tiles per batch
```json
{
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 10, "y": 10, "tile_id": 66},
{"x": 11, "y": 10, "tile_id": 66},
{"x": 12, "y": 10, "tile_id": 66}
]
}
}
```
**Response**:
```json
{
"proposal_id": "abc123",
"tiles_painted": 3,
"success": true
}
```
**Use Cases**:
- Create patterns (forests, paths, water bodies)
- Fill regions with specific tiles
- Generate complex map structures
---
## Multimodal Vision Workflow
### Step 1: Capture Canvas Screenshot
```bash
# From CLI
z3ed agent vision --capture-canvas "Overworld Canvas" \
--prompt "Analyze this overworld map" \
--rom zelda3.sfc
# From agent workflow
z3ed agent run --prompt "Analyze map 0 and suggest improvements" \
--rom zelda3.sfc --sandbox
```
### Step 2: AI Analyzes Screenshot
Gemini Vision API receives:
- Screenshot of canvas (PNG/JPEG)
- User prompt
- Context (map index, visible region)
AI returns:
```json
{
"analysis": {
"observations": [
"Grass tiles dominate the visible area",
"Tree tiles are sparse and unnatural",
"Water tiles at (15,15) have incorrect palette colors",
"Path from (5,5) to (25,5) is broken"
],
"composition_score": 6.5,
"issues": [
{
"type": "sparse_trees",
"severity": "medium",
"location": {"x": 10, "y": 10},
"suggestion": "Add more tree tiles for forest theme"
}
]
}
}
```
### Step 3: Generate Edit Plan
AI creates actionable plan:
```json
{
"plan": [
{
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 10, "y": 10, "tile_id": 66},
{"x": 11, "y": 10, "tile_id": 66},
{"x": 12, "y": 10, "tile_id": 66}
]
},
"reason": "Create denser forest area"
}
]
}
```
### Step 4: Execute Plan (Sandbox)
```bash
# z3ed executes plan in sandbox
z3ed agent run --plan plan.json --rom zelda3.sfc --sandbox
```
### Step 5: Human Review
```bash
# View proposed changes
z3ed agent diff --proposal-id abc123
# Accept or reject
z3ed agent accept --proposal-id abc123
# or
z3ed agent reject --proposal-id abc123
```
---
## Example Workflows
### Workflow 1: Create Forest Area
**User Prompt**: "Create a forest clearing at position 15,15 with grass in the center"
**AI Plan**:
```json
{
"steps": [
{
"step": 1,
"description": "Check current tiles in region",
"tool": "overworld-analyze-region",
"parameters": {
"map": 0,
"x1": 10,
"y1": 10,
"x2": 20,
"y2": 20
}
},
{
"step": 2,
"description": "Paint grass clearing (center 5x5)",
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 13, "y": 13, "tile_id": 40},
{"x": 14, "y": 13, "tile_id": 40},
...
]
}
},
{
"step": 3,
"description": "Plant trees around edges",
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 10, "y": 10, "tile_id": 66},
{"x": 11, "y": 10, "tile_id": 66},
...
]
}
}
]
}
```
**CLI Execution**:
```bash
z3ed agent run --prompt "Create a forest clearing at position 15,15 with grass in the center" \
--rom zelda3.sfc --sandbox
```
**Result**: Proposal created with 50+ tile changes
---
### Workflow 2: Fix Tile Placement Errors
**User Prompt**: "Fix any water tiles that should be grass in the visible region"
**AI Plan**:
```json
{
"steps": [
{
"step": 1,
"tool": "overworld-get-visible-region",
"parameters": {"map": 0}
},
{
"step": 2,
"tool": "overworld-analyze-region",
"parameters": {
"map": 0,
"x1": 0,
"y1": 0,
"x2": 31,
"y2": 31
}
},
{
"step": 3,
"description": "Identify misplaced water tiles",
"logic": "Find water tiles (80) surrounded by grass (40)"
},
{
"step": 4,
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 5, "y": 5, "tile_id": 40},
{"x": 12, "y": 8, "tile_id": 40}
]
}
}
]
}
```
---
### Workflow 3: Generate Path
**User Prompt**: "Create a path from (5,5) to (25,25) using path tiles"
**AI Plan**:
```json
{
"steps": [
{
"step": 1,
"description": "Calculate path coordinates",
"logic": "Line from (5,5) to (25,25)"
},
{
"step": 2,
"tool": "overworld-set-tiles-batch",
"parameters": {
"map": 0,
"tiles": [
{"x": 5, "y": 5, "tile_id": 50},
{"x": 6, "y": 6, "tile_id": 50},
{"x": 7, "y": 7, "tile_id": 50},
...
]
}
}
]
}
```
---
## Common Tile IDs Reference
### Grass & Ground
- `0x0028` (40) - Grass
- `0x0029` (41) - Dark grass
- `0x002A` (42) - Dirt
- `0x002B` (43) - Sand
### Trees & Plants
- `0x0042` (66) - Tree
- `0x0043` (67) - Bush
- `0x0044` (68) - Flower
### Water
- `0x0050` (80) - Water
- `0x0051` (81) - Deep water
- `0x0052` (82) - Shore
### Paths & Roads
- `0x0032` (50) - Path
- `0x0033` (51) - Road
- `0x0034` (52) - Bridge
### Structures
- `0x0060` (96) - Wall
- `0x0061` (97) - Door
- `0x0062` (98) - Window
---
## Best Practices for AI Agents
### 1. Always Analyze Before Editing
```bash
# GOOD: Check current state first
z3ed agent run --prompt "Analyze map 0 then suggest improvements" --rom zelda3.sfc --sandbox
# BAD: Blindly paint without context
z3ed agent run --prompt "Paint trees everywhere" --rom zelda3.sfc --sandbox
```
### 2. Use Batch Operations
```bash
# GOOD: Single batch operation
overworld-set-tiles-batch (50 tiles)
# BAD: 50 individual operations
overworld-set-tile (×50)
```
### 3. Provide Clear Reasoning
```json
{
"tool": "overworld-set-tile",
"parameters": {"x": 10, "y": 10, "tile_id": 66},
"reason": "Creating forest theme - tree tile at center"
}
```
### 4. Respect Tile Boundaries
Large maps (0x00-0x09, 0x80-0x89) are 512×512 pixels = 32×32 tiles.
Don't paint beyond `(31, 31)` for these maps.
### 5. Check Visibility
```json
{
"step": 1,
"tool": "overworld-get-visible-region",
"reason": "Ensure tiles are visible before analysis"
}
```
### 6. Create Reversible Edits
Always generate proposals that can be rejected:
```bash
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox # Creates proposal
z3ed agent reject --proposal-id abc123 # Can undo
```
---
## Error Handling
### "Tile ID out of range"
- **Cause**: Invalid tile ID (>4095 for Tile16)
- **Fix**: Validate tile IDs before `set-tile`
### "Coordinates out of bounds"
- **Cause**: Painting beyond map boundaries
- **Fix**: Check map dimensions (typically 32×32 tiles)
### "Proposal rejected"
- **Cause**: Human reviewer rejected changes
- **Fix**: Analyze feedback, adjust plan, try again
### "ROM file locked"
- **Cause**: ROM file open in another process
- **Fix**: Close other instances of YAZE
---
## Testing AI-Generated Edits
### Manual Testing
```bash
# Generate proposal
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox
# Review in YAZE GUI
yaze zelda3.sfc
# Open Debug → Agent Chat → Proposals
# Review proposal, accept/reject
```
### Automated Testing
```bash
# GUI automation test
z3ed agent test replay overworld_ai_edit.jsonl --rom zelda3.sfc --grpc localhost:50051
# Validate tile placement
z3ed agent test assert --tile-at 10,10 --expected-tile 66 --rom zelda3.sfc
```
---
## Advanced Techniques
### Technique 1: Pattern Recognition
Use multimodal vision to detect patterns:
```bash
z3ed agent vision --capture-canvas "Overworld Canvas" \
--prompt "Identify repeated tile patterns in this map" \
--rom zelda3.sfc
```
AI detects:
- Forest clusters
- Water bodies
- Paths and roads
- Building layouts
### Technique 2: Style Transfer
```bash
z3ed agent run --prompt "Make this map look like Kakariko Village from the dark world" \
--rom zelda3.sfc --sandbox
```
AI:
1. Analyzes Kakariko Village (map 0x18)
2. Extracts tile palette and patterns
3. Applies similar patterns to target map
### Technique 3: Procedural Generation
```bash
z3ed agent run --prompt "Generate a random forest area at 10,10 with natural-looking tree placement" \
--rom zelda3.sfc --sandbox
```
AI uses procedural algorithms:
- Perlin noise for natural randomness
- Clustering for realistic tree placement
- Edge smoothing for organic boundaries
---
## Integration with GUI Automation
### Record Human Edits
```bash
# Record editing session
z3ed agent test record --suite overworld_forest.jsonl --rom zelda3.sfc
```
### Replay for AI Training
```bash
# Replay recorded session
z3ed agent test replay overworld_forest.jsonl --rom zelda3.sfc
# AI learns from human edits
z3ed agent learn --from-recording overworld_forest.jsonl
```
### Validate AI Edits
```bash
# AI generates edits
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox
# GUI automation validates
z3ed agent test verify --proposal-id abc123 --suite validation_tests.jsonl
```
---
## Collaboration Features
### Network Collaboration
```bash
# Connect to yaze-server
z3ed net connect ws://localhost:8765
# Join session
z3ed net join ABC123 --username "ai-agent"
# AI agent edits, humans review in real-time
z3ed agent run --prompt "..." --rom zelda3.sfc --sandbox
# Proposal synced to all participants
```
### Proposal Voting
```bash
# Submit proposal to session
z3ed proposal submit --proposal-id abc123 --session ABC123
# Wait for votes
z3ed proposal wait --proposal-id abc123
# Check result
z3ed proposal status --proposal-id abc123
# Output: approved (3/3 votes)
```
---
## Troubleshooting
### Agent Not Responding
```bash
# Check AI provider
z3ed agent ping
# Test simple query
z3ed agent simple-chat "Hello" --rom zelda3.sfc
```
### Tools Not Available
```bash
# Verify z3ed build
z3ed agent describe --resource overworld
# Should show:
# - overworld-get-tile
# - overworld-set-tile
# - overworld-analyze-region
```
### gRPC Connection Failed
```bash
# Check YAZE is running with gRPC
z3ed agent test ping --grpc localhost:50051
# Start YAZE with gRPC enabled
yaze --enable-grpc zelda3.sfc
```
---
## See Also
- [Canvas Automation API](../canvas_automation_api.md) - C++ API reference
- [GUI Automation Scenarios](gui_automation_scenarios.md) - Test examples
- [z3ed README](README.md) - CLI documentation
- [Multimodal Vision](README.md#multimodal-vision-gemini) - Screenshot analysis