Commit Graph

3150 Commits

Author SHA1 Message Date
scawful
f91aff0b00 feat(asset): implement asset path resolution and streamline file loading
- Introduced a new utility function `FindAsset` in `PlatformPaths` to locate asset files across multiple standard directories, enhancing flexibility in asset management.
- Updated various components to utilize `FindAsset` for loading configuration and prompt files, replacing hardcoded search paths with a more robust solution.
- Improved error handling and logging for asset loading failures, ensuring clearer feedback during runtime.
- Refactored existing code in `gemini_ai_service`, `prompt_builder`, and `platform_paths` to leverage the new asset resolution mechanism, promoting code consistency and maintainability.
2025-10-10 19:12:16 -04:00
scawful
bfbba1de13 chore(ci): disable emulator build in CI and release workflows
- Updated CI and release workflows to set the YAZE_BUILD_EMU flag to OFF, preventing the emulator from being built during the CI process.
- This change aims to streamline the build process and focus on core functionalities without the emulator overhead.
2025-10-10 19:04:35 -04:00
scawful
ede4c2ab1f feat(apu): finalize APU timing implementation and introduce headless emulator test harness
- Updated APU timing analysis to reflect implementation completion, addressing core timing issues with the SPC700.
- Added a headless emulator test harness for testing APU functionality without GUI overhead.
- Enhanced cycle accuracy and instruction execution, with known audio glitches noted for future refinement.
- Updated success criteria to reflect completed tasks and ongoing work for unit tests and audio quality improvements.

Benefits:
- Improved APU execution accuracy and synchronization.
- Streamlined testing process for APU functionality.
- Clear documentation of current implementation status and future work.
2025-10-10 18:58:17 -04:00
scawful
5778a470f7 feat(spc700): enhance cycle accuracy and instruction execution
- Introduced a new cycle lookup table for SPC700 instructions, improving timing precision.
- Refactored instruction execution to be fully atomic, eliminating the bstep mechanism.
- Added detailed comments for clarity on cycle counts and instruction behavior.
- Implemented additional logging for CPU audio initialization to aid debugging.

Benefits:
- Enhanced synchronization between CPU and APU.
- Improved testability and accuracy of instruction timing.
- Streamlined code for better maintainability and understanding.
2025-10-10 18:56:39 -04:00
scawful
5676d934f3 feat(apu): implement cycle budget model with fixed-point ratio
- Replace floating-point ratio with integer numerator/denominator
- Convert RunCycles() to use new Step() function
- Implement explicit cycle budget loop
- Add detailed comments explaining the conversion

Benefits:
- Perfect precision (no floating-point drift over long sessions)
- Explicit cycle counting for better debugging
- Faster integer arithmetic
- Testable cycle accuracy per instruction
2025-10-10 17:30:50 -04:00
scawful
f8c6536f40 feat(apu): add atomic Step() function for cycle-accurate SPC700 execution
- Add Step() method that executes one complete instruction atomically
- Returns exact cycle count consumed by the instruction
- Handles reset and stopped states explicitly
- Uses cycle lookup table from spc700_cycles.h
- Maintains compatibility with existing RunOpcode() for gradual migration

This implements the LakeSnes-inspired atomic execution model while
adding explicit cycle return for better testability.
2025-10-10 17:29:42 -04:00
scawful
b5cecedbb0 docs: add LakeSnes comparison analysis to APU timing
- Document what LakeSnes does right (atomic execution, cycle callbacks)
- Identify where LakeSnes falls short (implicit counting, no explicit return)
- Define what we're adopting vs improving
- Clarify hybrid approach: LakeSnes simplicity + explicit validation
2025-10-10 17:28:00 -04:00
scawful
b7c642611a docs: add comprehensive APU timing analysis
- Document current bstep mechanism and its fragility
- Identify root cause of handshake timing failure
- Design atomic instruction execution approach
- Plan fixed-point cycle ratio conversion
- Outline implementation strategy

Relates to #APU-timing-fix
2025-10-10 17:23:22 -04:00
scawful
cc7e374911 Merge develop: Documentation reorganization and mock ROM mode
- Reorganized docs with series naming (A-I)
- Added B4-git-workflow.md (pre-1.0 relaxed rules)
- Added E6-emulator-improvements.md (consolidated APU/emulator plans)
- Added I2-future-improvements.md (long-term vision)
- Implemented mock ROM mode for testing without ROM files
- Updated agent_test_suite.sh to use mock ROM by default
- CI/CD ready: no ROM files needed for agent testing
2025-10-10 17:15:00 -04:00
scawful
6a49f7defa feat: Introduce mock ROM mode for testing without actual ROM files
- Added a new feature to the `z3ed` AI agent allowing testing in mock ROM mode, which creates a minimal valid ROM structure with embedded labels but no actual game data.
- Updated the `agent_test_suite.sh` script to default to mock ROM mode for easier testing.
- Introduced `--mock-rom` command line flag to enable mock ROM mode in various agent commands.
- Enhanced documentation to cover the usage and benefits of mock ROM mode for CI/CD and development testing.
- Implemented necessary changes in the codebase to support mock ROM initialization and label management.
2025-10-10 17:10:09 -04:00
scawful
83eccaa789 refactor: Consolidate documentation and add git workflow guide 2025-10-10 17:05:07 -04:00
scawful
735d9243fd refactor: Simplify entity dragging logic and enhance interaction handling
- Removed the `HandleEntityDragging` function to streamline entity dragging logic directly within the `OverworldEditor`.
- Implemented centralized drag-and-drop functionality for entities, improving user interaction during editing.
- Updated the `OverworldEntityRenderer` to manage hovered entities more effectively, enhancing the overall editing experience.
- Cleaned up unused code and improved readability across the entity handling components.
2025-10-10 16:39:31 -04:00
scawful
4c3cb2581d feat: Enhance object rendering and tile management in Zelda3
- Introduced a new method `set_dirty` in the `Rom` class to manage the dirty state of ROM data.
- Updated `DungeonCanvasViewer` to process texture queues before drawing, improving texture readiness and rendering performance.
- Refactored `ObjectDrawer` to utilize `TileInfo` instead of `Tile16`, enhancing tile data handling and consistency across the codebase.
- Improved the `ObjectParser` to read tile data as `TileInfo`, ensuring accurate parsing and memory management.
- Added performance optimizations in the `Room` class to track changes in properties and reduce unnecessary rendering.
- Enhanced logging for debugging purposes during tile drawing and object rendering processes.
2025-10-10 16:19:45 -04:00
scawful
434a11734c chore: Update CI configuration to disable YAZE_BUILD_EMU
- Added a new option to the CI workflow to set YAZE_BUILD_EMU to OFF, ensuring that the emulator build is not included in the CI process.
2025-10-10 16:10:25 -04:00
scawful
8c26f17594 fix: Improve tile drawing logic and optimize texture processing
- Enhanced the DrawTileToBitmap function to correctly calculate tile positions within the graphics buffer, addressing potential out-of-bounds issues.
- Added detailed comments to clarify the organization of tile sheets and pixel indexing.
- Optimized the RenderRoomGraphics function by deferring texture processing to batch updates, significantly improving performance when multiple rooms are open.
2025-10-10 13:55:39 -04:00
scawful
fefd60da6e refactor: Rename SendMessage to SendChatMessage for clarity
- Updated method name from SendMessage to SendChatMessage in both the implementation and header files to better reflect its purpose in the network collaboration context.
- Ensured consistency in method signatures across the codebase.
2025-10-10 13:53:00 -04:00
scawful
5cc650053d fix: Correct canvas mouse position tracking and add regression tests 2025-10-10 13:37:08 -04:00
Justin Scofield
d894434495 Merge pull request #42 from scawful/add-claude-github-actions-1760115638178
Add Claude Code GitHub Workflow
2025-10-10 13:04:28 -04:00
scawful
c96272296c refactor: Consolidate Canvas Documentation and Update Structure
- Streamlined the canvas documentation by consolidating multiple guides into a single comprehensive overview.
- Updated the canvas architecture section to reflect new features and interaction modes, enhancing clarity for users.
- Improved API patterns and integration steps for editors, ensuring consistency across documentation.
- Removed outdated content and added new sections on automation and debugging, aligning with recent code changes.
- Adjusted file paths in the documentation to match the current project structure, ensuring accurate references.
2025-10-10 13:03:43 -04:00
Justin Scofield
bfcb3d66e6 "Claude Code Review workflow" 2025-10-10 13:00:40 -04:00
Justin Scofield
cf20a41d63 "Claude PR Assistant workflow" 2025-10-10 13:00:39 -04:00
scawful
d124ab962f chore: Update CI Workflow and Add Dungeon Loading Test Script
- Modified the CI workflow to ensure the test script has the correct path for execution.
- Added a new script for testing dungeon room loading, which checks for torches, blocks, pits, and doors, and analyzes the log for errors.
- Enhanced the script with detailed output for successful loading and error detection, improving testing capabilities for dungeon features.
2025-10-10 12:05:42 -04:00
scawful
f538775954 refactor: Organize Canvas Utilities and BPP Format Management
- Moved canvas utility functions into a dedicated `canvas_utils` module for better structure and maintainability.
- Introduced a new `BppFormatUI` class for managing BPP format selection and conversion, enhancing the user interface for format management.
- Updated CMake configuration to include new source and header files for the canvas utilities and BPP format UI.
- Adjusted file paths in the project structure to reflect the new organization, ensuring proper integration across components.
2025-10-10 12:02:33 -04:00
scawful
33335782e7 wandoze :( 2025-10-10 11:41:37 -04:00
scawful
b2701c8cec refactor: Update Test Status Enum and Compiler Options
- Changed the enum values in GetTestStatusResponse from STATUS_* to TEST_STATUS_* for consistency and clarity.
- Updated corresponding references in imgui_test_harness_service.cc and gui_automation_client.cc to reflect the new enum naming.
- Added /EHsc compiler option in CMakeLists.txt for MSVC to enable C++ exception handling.
2025-10-10 10:55:28 -04:00
scawful
b64ef74b10 feat: Introduce Layout Override Feature in DungeonCanvasViewer
- Added a new "Layout Override" section in the DungeonCanvasViewer, allowing users to enable or disable layout overrides for dungeon rooms.
- Implemented a checkbox to toggle the override and a slider to select the layout ID when enabled.
- Removed the previously disabled room layout drawing code to streamline the rendering process.
- Updated the layout management to ensure proper handling of layout IDs and visibility settings.
- Enhanced the overall user interface for better control over dungeon layout visualization.
2025-10-10 10:14:50 -04:00
scawful
db517abbb3 refactor: Update Performance File Paths and Cleanup Integration
- Refactored file paths for performance-related headers to reflect the new directory structure under `app/gfx/performance/`.
- Updated references in the `Canvas` class to align with the new paths, ensuring proper integration of performance monitoring components.
- Cleaned up unnecessary prefixes in performance integration checks to enhance code readability and maintainability.
2025-10-10 10:12:44 -04:00
scawful
cbcf1e40be refactor: Update Performance Header Includes and Add Emulator Test Suite
- Refactored header includes for Performance Profiler and Dashboard to reflect new directory structure under `app/gfx/performance/`.
- Introduced a new `EmulatorTestSuite` class to validate core emulator components, including APU, SPC700, and debugging features.
- Enhanced test suite with detailed test cases for APU handshake, SPC700 cycle accuracy, breakpoint management, and audio backend functionality.
- Removed outdated `test_dungeon_objects.cc` file from the test suite to streamline testing focus.
2025-10-10 10:07:35 -04:00
scawful
411f842b20 refactor: Restructure Performance Profiler and Dashboard Integration
- Updated file paths for performance-related headers to reflect new directory structure under `app/gfx/performance/`.
- Introduced new `PerformanceDashboard` and `PerformanceProfiler` classes for comprehensive performance monitoring and reporting.
- Enhanced performance metrics collection and visualization capabilities, including real-time updates and detailed reports.
- Improved memory usage tracking and optimization status analysis within the graphics system.
- Ensured compatibility with existing components by updating include directives across multiple files.
2025-10-10 10:05:21 -04:00
scawful
a2de6ba7d1 feat: Add Static Room Layout Pointers to Dungeon ROM Addresses
- Introduced a static array of pointers for the 8 predefined room layouts, enhancing the structure and accessibility of room layout data.
- Included the necessary header for std::array to support the new data structure.
2025-10-10 09:06:15 -04:00
scawful
6c6bb67a87 fix: Restore Windows macro definitions to prevent conflicts with protobuf generated code
- Added preprocessor directives to push and pop the DWORD and ERROR macros in widget_discovery_service.h, rom_service_impl.h, and gui_automation_client.h.
- This change ensures compatibility with protobuf generated code in a Windows environment, preventing potential compilation issues.
2025-10-10 08:44:01 -04:00
scawful
78b7d38359 feat: Implement Downwards Drawing Routines in ObjectDrawer
- Added multiple downwards drawing routines for various object types, enhancing the rendering capabilities of the ObjectDrawer.
- Implemented methods for drawing 2x2 and 4x2 tiles with specific patterns and sizes, including edge cases for certain object IDs.
- Updated the initialization logic to map new object IDs to their respective drawing routines, ensuring comprehensive coverage for downwards rendering.
- Introduced debug logging for object drawing to facilitate troubleshooting and performance monitoring.
2025-10-10 02:40:59 -04:00
scawful
a8dfda856e chore: Update CMake configuration for Windows compatibility
- Added a preprocessor directive to undefine the DWORD macro in CMake configuration for both CI and release workflows, ensuring compatibility with protobuf generated code.
- This change addresses potential compilation issues when using gRPC and protobuf in a Windows environment.
2025-10-10 02:25:41 -04:00
scawful
0bcad79d06 refactor: Improve Rendering Logic and Debugging in Dungeon Components
- Updated DungeonCanvasViewer to disable room layout drawing to reduce visual clutter, enhancing clarity during object placement.
- Enhanced BackgroundBuffer to skip empty and floor tiles, preventing overwriting of drawn elements and improving rendering efficiency.
- Refined Bitmap palette application to ensure correct transparency handling and marked bitmaps as modified for texture updates.
- Streamlined ObjectDrawer by removing unnecessary debug logs and simplifying object drawing logic, improving performance and readability.
- Adjusted Room rendering methods to utilize palette indirection for accurate color application, ensuring consistent visual output across rooms.
2025-10-10 02:20:22 -04:00
scawful
6f3c9ba81b feat: Enhance DungeonCanvasViewer with Object Outline Filters and Context Menu Improvements
- Added a sub-menu for toggling visibility of object outlines based on type and layer, allowing for more granular control over displayed objects in the dungeon canvas.
- Implemented checkboxes for filtering object outlines by type (Type 1, Type 2, Type 3) and layer (Layer 0, Layer 1, Layer 2) in the debug menu.
- Updated the drawing logic to respect the new filtering options, ensuring only the selected objects are rendered on the canvas.
- Improved the visibility of object ID labels by making them smaller and less obtrusive, enhancing the overall clarity of the canvas display.
2025-10-10 01:11:39 -04:00
scawful
9f0b503ada feat: Enhance DungeonCanvasViewer with Debugging Features and Canvas Configuration
- Added detailed comments to clarify the canvas coordinate system and scaling model for dungeon rendering.
- Implemented persistent debug overlays for room and texture information, allowing real-time visibility of room properties and texture states.
- Introduced a context menu with options for debugging, including toggling visibility of room info, texture info, and object bounds.
- Updated canvas drawing methods to ensure correct handling of unsized dimensions and scaling, improving rendering accuracy.
- Refactored coordinate conversion functions to return unsized pixel coordinates, preventing double-scaling issues.
2025-10-10 00:45:59 -04:00
scawful
8481cd9366 refactor: Update Dungeon Rendering Logic for Enhanced Tile Management (WIP)
- Refactored DungeonCanvasViewer to utilize LoadLayoutTilesToBuffer for rendering layout tiles, improving the separation of concerns in the rendering process.
- Updated ObjectDrawer to draw using 8x8 tiles instead of 16x16, enhancing tile rendering accuracy and efficiency.
- Modified Room and RoomLayoutObject classes to support room-specific graphics buffers, ensuring correct tile usage during rendering.
- Removed legacy methods and classes related to tile handling, streamlining the codebase and improving maintainability.
2025-10-09 23:50:12 -04:00
scawful
3f2ef7f523 fix: Undefine Windows macros to prevent conflicts with protobuf generated code
- Added preprocessor directives to undefine the DWORD and ERROR macros on Windows, ensuring compatibility with protobuf generated code in imgui_test_harness_service.h and gui_automation_client.h.
- This change prevents potential compilation issues when using gRPC and protobuf in a Windows environment.
2025-10-09 23:33:47 -04:00
scawful
d371dbc2d7 feat: Add log category filtering for enhanced logging control
- Introduced a new command-line flag for specifying log categories, allowing users to filter logs based on selected categories.
- Implemented parsing of the comma-separated log categories string in the main application.
- Enhanced the LogManager to support category-specific logging and added console output to indicate which categories are enabled for debugging.
2025-10-09 22:50:45 -04:00
scawful
81ef43f2e4 refactor: Remove unused room diagnostic files and update CMake configuration
- Deleted the room_diagnostic.cc and room_visual_diagnostic.cc files, along with their corresponding header files, to clean up the codebase.
- Updated zelda3_library.cmake to remove references to the deleted diagnostic files, streamlining the build process.
- Removed the inclusion of room_diagnostic.h in room.cc as it is no longer needed.
2025-10-09 22:35:01 -04:00
scawful
f9753532a4 feat: Enhance Dungeon Editor with Advanced Room Properties and Layout Visualization
- Introduced advanced room properties UI in the Dungeon Editor, allowing users to set effects and tags for rooms through dropdown menus.
- Updated the rendering logic to visualize room layouts, including walls, floors, pits, water, and doors, with appropriate color coding for clarity.
- Improved texture management by processing texture updates immediately to ensure objects appear correctly in the editor.
- Organized ROM address constants into a new header file for better maintainability and clarity in the codebase.
- Refactored existing code to utilize the new constants, ensuring a cleaner and more consistent naming convention.
2025-10-09 22:14:33 -04:00
scawful
c1e69ce03e feat: Add Debug Controls Card to Dungeon Editor V2
- Introduced a new Debug Controls card in the Dungeon Editor V2, allowing runtime control over debug logging and log levels.
- Implemented UI elements for enabling/disabling debug logs, selecting log levels, and managing room rendering and texture processing.
- Updated the DungeonEditorV2 class to include visibility management for the Debug Controls card and integrated it into the control panel.
- Enhanced logging functionality in the LogManager to support runtime adjustments for debug logging.
2025-10-09 21:43:27 -04:00
scawful
66061652b1 refactor: Consolidate and update Dungeon Editor documentation
- Deleted outdated DUNGEON_EDITOR_COMPLETE_GUIDE.md and DUNGEON_EDITOR_GUIDE.md files to streamline documentation.
- Introduced a new F2-dungeon-editor-v2-guide.md that consolidates features, architecture, and usage instructions for the Dungeon Editor V2.
- Documented recent refactoring efforts, including critical bug fixes and architectural improvements.
- Enhanced the guide with structured sections for quick start, testing, and troubleshooting, reflecting the current production-ready status of the Dungeon Editor.
- Updated related source files to support new documentation structure and features.
2025-10-09 21:24:48 -04:00
scawful
0491781dd5 refactor: Rename GetTestStatusResponse enum for clarity
- Changed the enum name from Status to TestStatus in GetTestStatusResponse to improve clarity and better reflect its purpose.
- Updated the corresponding function ConvertHarnessStatus to align with the new enum name, ensuring consistency across the codebase.
2025-10-09 21:24:06 -04:00
scawful
74a5144128 chore: Update submodule references for imgui and imgui_test_engine
- Updated the submodule commit references for imgui and imgui_test_engine to the latest versions, ensuring compatibility and access to recent improvements.
2025-10-09 20:57:07 -04:00
scawful
46f078beed feat: Introduce TextureAtlas for efficient texture management
- Added TextureAtlas class to manage multiple textures packed into a single large texture, improving rendering performance and reducing GPU state changes.
- Implemented methods for allocating regions, packing bitmaps, and drawing regions from the atlas.
- Removed the DrawDungeonTabView function from DungeonCanvasViewer as it is no longer needed with the new EditorCard system.
- Updated CMake configuration to include texture_atlas.cc in the build process.
- Refactored Room class to eliminate dependency on Arena graphics sheets, transitioning to per-room graphics for rendering.
2025-10-09 20:56:56 -04:00
scawful
51342b02e3 docs: Add APU Timing and Handshake Bug Analysis & Refactoring Plan
- Introduced a new document detailing the APU timing issue that prevents music playback due to handshake failures between the CPU and APU.
- Analyzed the CPU-APU handshake process, identifying points of failure and root causes related to cycle inaccuracies in SPC700 emulation.
- Proposed a comprehensive refactoring plan to implement cycle-accurate instruction execution, centralize the APU execution loop, and use integer-based cycle ratios to eliminate floating-point errors.
- This document serves as a critical resource for developers addressing audio emulation challenges.
2025-10-09 20:50:24 -04:00
scawful
0ba767d6fe docs: Enhance tracker.cc and tracker.h with detailed function and struct documentation
- Added comprehensive Doxygen-style comments for key functions in tracker.cc, including AllocSpcBlock, GetSpcAddr, and LoadSpcCommand, to improve code readability and maintainability.
- Documented the purpose and parameters of various structs in tracker.h, such as SongSpcBlock, SongRange, and SpcCommand, providing clarity on their roles in the music data handling process.
- Improved overall documentation quality to assist developers in understanding the music tracking system's architecture and functionality.
2025-10-09 20:50:03 -04:00
scawful
c33a9c9635 docs: Add comprehensive Dungeon Editor technical guide
- Introduced a new DUNGEON_EDITOR_COMPLETE_GUIDE.md that details the features, architecture, and usage of the Dungeon Editor.
- Documented critical bug fixes, including segfaults and loading order issues, along with their resolutions.
- Enhanced the guide with a structured overview, quick start instructions, and troubleshooting tips for users.
- Updated the architecture section to reflect the new card-based system and self-contained room management.
- Included detailed testing commands and expected outputs to assist developers in verifying functionality.
2025-10-09 20:49:10 -04:00
scawful
c512dd7f35 refactor: Replace deprecated dungeon editor guide with updated documentation
- Deleted the old D1-dungeon-editor-guide.md and F1-dungeon-editor-guide.md files to streamline documentation.
- Introduced a new DUNGEON_EDITOR_GUIDE.md that consolidates features, architecture, and usage instructions for the Dungeon Editor.
- Updated the development guide to include new naming conventions and clarified rendering processes.
- Enhanced the overall structure and content of the documentation to reflect the current production-ready status of the Dungeon Editor.
2025-10-09 20:48:07 -04:00