7.0 KiB
7.0 KiB
Gemini Pro 3 Overworld Architecture Reference
Compact reference for YAZE Overworld/Dungeon systems. Use this to quickly locate code and understand patterns.
1. Overworld Editor Architecture (~8,900 lines across 7 modules)
Main Editor
| File | Lines | Purpose |
|---|---|---|
src/app/editor/overworld/overworld_editor.cc |
3,204 | Main coordinator, canvas, menus |
src/app/editor/overworld/overworld_editor.h |
350 | Class definition |
Sub-Modules
| File | Lines | Purpose |
|---|---|---|
map_properties.cc |
1,759 | MapPropertiesSystem - property panels |
tile16_editor.cc |
2,584 | Tile16Editor - tile editing popup |
entity.cc |
491 | OverworldEntity - entity containers |
entity_operations.cc |
239 | Entity CRUD helpers |
overworld_entity_renderer.cc |
151 | Entity drawing |
scratch_space.cc |
444 | Tile16 storage utilities |
Data Models
| File | Purpose |
|---|---|
src/zelda3/overworld/overworld.cc |
Main overworld class, loading logic |
src/zelda3/overworld/overworld_map.cc |
Individual map data |
src/zelda3/overworld/overworld_item.cc |
Item entities |
src/zelda3/overworld/overworld_version_helper.h |
Version detection API |
2. Completed Work (Gemini's Previous Session)
ASM Version Check Standardization
- Replaced raw
asm_version >= 3withOverworldVersionHelper::SupportsAreaEnum() - Fixed critical bug: vanilla ROMs (0xFF) incorrectly treated as v3+
- Applied consistently across:
overworld.cc,overworld_item.cc,overworld_map.cc
Tile16Editor Texture Queueing
- Fixed
tile16_editor.cclines 37-38, 44-45, 56-57 - Pattern:
QueueTextureCommand()instead ofRenderBitmap()during init
Test Infrastructure
- Created
test/unit/zelda3/overworld_regression_test.cc - Tests
OverworldVersionHelperlogic (passing)
3. Remaining Work Checklist
P0 - Must Complete
Texture Queueing TODOs in overworld_editor.cc
6 locations still use inline rendering instead of deferred queueing:
| Line | Current Code | Fix Pattern |
|---|---|---|
| 1392 | // TODO: Queue texture |
Use QueueTextureCommand() |
| 1397 | // TODO: Queue texture |
Use QueueTextureCommand() |
| 1740 | // TODO: Queue texture |
Use QueueTextureCommand() |
| 1809 | // TODO: Queue texture |
Use QueueTextureCommand() |
| 1819 | // TODO: Queue texture |
Use QueueTextureCommand() |
| 1962 | // TODO: Queue texture |
Use QueueTextureCommand() |
Pattern to follow (from tile16_editor.cc):
// BEFORE (blocking)
Renderer::Get().RenderBitmap(&some_bitmap_);
// AFTER (non-blocking)
gfx::Arena::Get().QueueTextureCommand(gfx::TextureCommand{
.operation = gfx::TextureOperation::kCreate,
.bitmap = &some_bitmap_,
.priority = gfx::TexturePriority::kHigh
});
Entity Deletion Pattern (entity.cc:319) - WORKING CORRECTLY
- Note: The TODO comment is misleading. The
deletedflag pattern IS CORRECT for ROM editors - Entities live at fixed ROM offsets, so marking
deleted = trueis the proper approach - Renderer correctly skips deleted entities (see
overworld_entity_renderer.cc) entity_operations.ccreuses deleted slots when creating new entities- No fix needed - just a cleanup of the misleading TODO comment
P1 - Should Complete
Tile16Editor Undo/Redo - ALREADY COMPLETE
- Location:
tile16_editor.cc:1681-1760 SaveUndoState()called before all edit operationsUndo()andRedo()fully implemented withabsl::Statusreturns- Ctrl+Z/Ctrl+Y handling at lines 224-231
- Stack management with
kMaxUndoStates_limit - No additional work needed
Overworld Regression Test Completion
- Location:
test/unit/zelda3/overworld_regression_test.cc - Current: Only tests version helper
- Need: Add more comprehensive mock ROM data
P2 - Stretch Goals
Dungeon Downwards Draw Routines
- Location:
src/zelda3/dungeon/object_drawer.cclines 160-185 - Missing implementations marked with stubs
- Need: Implement based on game ROM patterns
E2E Cinematic Tests
- Design doc:
docs/internal/testing/dungeon-gui-test-design.md - Framework: ImGuiTestEngine integration ready
- Need: Screenshot capture, visual verification
4. Key Patterns
Bitmap/Surface Synchronization
// CORRECT: Use set_data() for bulk replacement
bitmap.set_data(new_data); // Syncs both data_ and surface_->pixels
// WRONG: Direct assignment breaks sync
bitmap.mutable_data() = new_data; // NEVER DO THIS
Graphics Refresh Order
// 1. Update model
map.SetProperty(new_value);
// 2. Reload from ROM
map.LoadAreaGraphics();
// 3. Force render
Renderer::Get().RenderBitmap(&map_bitmap_); // Immediate
// OR
gfx::Arena::Get().QueueTextureCommand(...); // Deferred (preferred)
Version Helper Usage
#include "zelda3/overworld/overworld_version_helper.h"
auto version = OverworldVersionHelper::GetVersion(*rom_);
// Feature gates
if (OverworldVersionHelper::SupportsAreaEnum(version)) {
// v3+ only features
}
if (OverworldVersionHelper::SupportsExpandedSpace(version)) {
// v1+ features
}
Entity Rendering Colors (0.85f alpha)
ImVec4 entrance_color(1.0f, 0.85f, 0.0f, 0.85f); // Bright yellow-gold
ImVec4 exit_color(0.0f, 1.0f, 1.0f, 0.85f); // Cyan
ImVec4 item_color(1.0f, 0.0f, 0.0f, 0.85f); // Bright red
ImVec4 sprite_color(1.0f, 0.0f, 1.0f, 0.85f); // Bright magenta
5. File Quick Reference
Overworld Editor Entry Points
Initialize()→ overworld_editor.cc:64Load()→ overworld_editor.cc:150Update()→ overworld_editor.cc:203DrawFullscreenCanvas()→ overworld_editor.cc:472ProcessDeferredTextures()→ overworld_editor.cc:899
Tile16Editor Entry Points
Initialize()→ tile16_editor.cc:30Update()→ tile16_editor.cc:100DrawTile16Editor()→ tile16_editor.cc:200
Entity System Entry Points
OverworldEntity::Draw()→ entity.cc:50DeleteSelectedEntity()→ entity.cc:319- Entity containers:
entrances_,exits_,items_,sprites_
Dungeon System Entry Points
ObjectDrawer::DrawObject()→ object_drawer.cc:50- Draw routines: lines 100-300
- Downwards stubs: lines 160-185
6. Test Commands
# Run overworld regression test specifically
ctest --test-dir build_gemini -R "OverworldRegression" -V
# Run all zelda3 unit tests
ctest --test-dir build_gemini -R "zelda3" -L unit
# Run GUI E2E tests
ctest --test-dir build_gemini -L gui -V
7. Validation Criteria
For Texture Queueing Fix
- No
// TODOcomments remain at specified lines QueueTextureCommand()used consistently- UI doesn't freeze when loading maps
ctest -L stablepasses
For Entity Deletion Fix
- Items actually removed from vector
- No memory leaks (items properly destroyed)
- Undo can restore deleted items (if implementing undo)
For Dungeon Draw Routines
- Downwards objects render correctly
- Layer ordering maintained (BG1 → BG2 → BG3)
- Palette applied correctly after render