Files
yaze/docs/internal/archive/handoffs/handoff-dungeon-rendering-session.md

3.3 KiB
Raw Permalink Blame History

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:

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?
  • 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