83 lines
3.3 KiB
Markdown
83 lines
3.3 KiB
Markdown
# Handoff: Dungeon Object Rendering Investigation
|
||
|
||
**Date**: 2025-11-26
|
||
**Status**: Fixes applied, awaiting user testing verification
|
||
**Plan File**: `/Users/scawful/.claude/plans/lexical-painting-tulip.md`
|
||
|
||
---
|
||
|
||
## Context
|
||
|
||
User reported that dungeon object rendering "still doesn't look right" after previous fixes. Investigation revealed a palette index out-of-bounds bug and UI accessibility issues with the emulator preview.
|
||
|
||
## Fixes Applied This Session
|
||
|
||
### 1. Palette Index Clamping (`src/zelda3/dungeon/object_drawer.cc:1091-1099`)
|
||
|
||
**Problem**: Tiles using palette indices 6-7 caused out-of-bounds color access.
|
||
- Dungeon palettes have 90 colors = 6 sub-palettes × 15 colors each (indices 0-5)
|
||
- SNES tilemaps allow palette 0-7, but palette 7 → offset 105 > 90 colors
|
||
|
||
**Fix**:
|
||
```cpp
|
||
uint8_t pal = tile_info.palette_ & 0x07;
|
||
if (pal > 5) {
|
||
pal = pal % 6; // Wrap palettes 6,7 to 0,1
|
||
}
|
||
uint8_t palette_offset = pal * 15;
|
||
```
|
||
|
||
### 2. Emulator Preview UI Accessibility
|
||
|
||
**Problem**: User said "emulator object render preview is difficult to access in the UI" - was buried in Object Editor → Preview tab → Enable checkbox.
|
||
|
||
**Fix**: Added standalone card registration:
|
||
- `src/app/editor/dungeon/dungeon_editor_v2.h`: Added `show_emulator_preview_` flag
|
||
- `src/app/editor/dungeon/dungeon_editor_v2.cc`: Registered "SNES Object Preview" card (priority 65, shortcut Ctrl+Shift+V)
|
||
- `src/app/gui/widgets/dungeon_object_emulator_preview.h`: Added `set_visible()` / `is_visible()` methods
|
||
|
||
## Previous Fixes (Same Investigation)
|
||
|
||
1. **Dirty flag bug** (`room.cc`): `graphics_dirty_` was cleared before use for floor/bg draw logic. Fixed with `was_graphics_dirty` capture pattern.
|
||
|
||
2. **Incorrect floor mappings** (`object_drawer.cc`): Removed mappings for objects 0x0C3-0x0CA, 0x0DF to routine 19 (tile count mismatch).
|
||
|
||
3. **BothBG routines** (`object_drawer.cc`): Routines 3, 9, 17, 18 now draw to both bg1 and bg2.
|
||
|
||
## Files Modified
|
||
|
||
```
|
||
src/zelda3/dungeon/object_drawer.cc # Palette clamping, BothBG fix, floor mappings
|
||
src/zelda3/dungeon/room.cc # Dirty flag bug fix
|
||
src/app/editor/dungeon/dungeon_editor_v2.cc # Emulator preview card registration
|
||
src/app/editor/dungeon/dungeon_editor_v2.h # show_emulator_preview_ flag
|
||
src/app/gui/widgets/dungeon_object_emulator_preview.h # Visibility methods
|
||
```
|
||
|
||
## Awaiting User Verification
|
||
|
||
User explicitly stated: "Let's look deeper into this and not claim these phases are complete without me saying so"
|
||
|
||
**Testing needed**:
|
||
1. Do objects with palette 6-7 now render correctly?
|
||
2. Is the "SNES Object Preview" card accessible from View menu?
|
||
3. Does dungeon rendering look correct overall?
|
||
|
||
## Related Documentation
|
||
|
||
- Master plan: `docs/internal/plans/dungeon-object-rendering-master-plan.md`
|
||
- Handler analysis: `docs/internal/alttp-object-handlers.md`
|
||
- Phase plan: `/Users/scawful/.claude/plans/lexical-painting-tulip.md`
|
||
|
||
## If Issues Persist
|
||
|
||
Investigate these areas:
|
||
1. **Graphics sheet loading** - Verify 8BPP data is being read correctly
|
||
2. **Tile ID calculation** - Check if tile IDs are being parsed correctly from ROM
|
||
3. **Object-to-routine mapping** - Many objects still unmapped (only ~24% coverage)
|
||
4. **Draw routine implementations** - Some routines may have incorrect tile patterns
|
||
|
||
## Build Status
|
||
|
||
Build successful: `cmake --build build --target yaze -j8`
|