- Upgraded CMake minimum version requirement to 3.16 and updated project version to 0.3.0.
- Introduced new CMake presets for build configurations, including default, debug, and release options.
- Added CI/CD workflows for continuous integration and release management, enhancing automated testing and deployment processes.
- Integrated Asar assembler support with new wrapper classes and CLI commands for patching ROMs.
- Implemented comprehensive tests for Asar integration, ensuring robust functionality and error handling.
- Enhanced packaging configuration for cross-platform support, including Windows, macOS, and Linux.
- Updated documentation and added test assets for improved clarity and usability.
- Introduced a detailed design plan document for the Yaze Dungeon Editor, outlining the current architecture, main components, and core systems.
- Documented identified issues and applied fixes, including crash prevention and UI simplification, along with a roadmap for future development phases.
- Enhanced clarity on the implementation guidelines, testing strategies, and performance considerations to support ongoing development efforts.
- Established a structured approach for new developers to understand the codebase and contribute effectively to the project.
- Introduced new classes for DungeonRoomSelector and DungeonObjectSelector to enhance room and object management within the dungeon editor.
- Implemented UI components for selecting rooms and entrances, allowing users to easily navigate and manage dungeon layouts.
- Added functionality for rendering room graphics and object previews, improving the visual editing experience.
- Updated the DungeonEditor class to integrate the new selectors, streamlining the overall editing workflow.
- Enhanced error handling and validation in room and object management processes to ensure robust functionality.
- Refactored the DungeonEditor class to include new methods for loading and rendering room graphics, improving the overall graphics management system.
- Introduced LoadAndRenderRoomGraphics and ReloadAllRoomGraphics methods to streamline the loading process for room graphics.
- Updated the UI to provide buttons for loading room graphics and reloading all graphics, enhancing user interaction.
- Improved background rendering logic by adding RenderRoomBackgroundLayers, ensuring proper layering of graphics.
- Adjusted data types in UI text displays for better accuracy and consistency in rendering information.
- Introduced a new documentation file detailing the Yaze Dungeon Editor, covering its architecture, core components, coordinate system, object rendering system, user interface, and integration with ZScream.
- Included sections on usage examples, testing and validation strategies, and future enhancements to provide a complete overview of the editor's capabilities.
- Removed the outdated dungeon object rendering refactor documentation to streamline resources and focus on the comprehensive guide.
- Enhanced clarity and organization of the documentation to support both novice and expert users in effectively utilizing the dungeon editing tools.
- Introduced a new DungeonEditorSystem to streamline dungeon editing functionalities, including room properties management and object editing.
- Enhanced the DungeonEditor class to initialize the new editor system and manage room properties effectively.
- Added comprehensive object editing capabilities with a dedicated DungeonObjectEditor, supporting object insertion, deletion, and real-time preview.
- Implemented improved UI components for editing dungeon settings, including integrated editing panels for various object types.
- Enhanced error handling and validation throughout the dungeon editing process to ensure robust functionality.
- Updated integration tests to cover new features and validate the overall performance of the dungeon editing system.
- Updated the DrawSimplifiedMapSettings method to streamline the layout and enhance usability with new UI constants for table and button dimensions.
- Removed the Tools popup from the MapPropertiesSystem, consolidating editing functionalities for a cleaner interface.
- Enhanced the DrawGraphicsPopup and DrawPalettesPopup methods with custom input widths for better alignment and user experience.
- Improved the organization of map properties sections, adding clear headers for Basic Properties, Area Configuration, and Visual Effects.
- Adjusted button functionalities and hover hints for better user guidance and interaction.
- Updated the DrawOverworldEntrancePopup to include new options for deleting entrances and improved UI labels for better clarity.
- Integrated new UI constants for consistent styling across the editor.
- Refactored MapPropertiesSystem to support additional toolset functionalities, including editing tools and view controls.
- Improved overlay handling in OverworldMap, consolidating vanilla and custom overlay loading logic.
- Enhanced user interaction with new buttons and streamlined layout for better usability in the editor.
- Changed the included assembly file for custom overworld to version 3 for improved features.
- Enhanced documentation in the overworld loading guide to clarify overlay effects and configurations.
- Refactored MapPropertiesSystem to support overlay previews and improved mosaic controls.
- Added functionality for loading vanilla overlays and displaying overlay descriptions in the editor.
- Updated UI components in OverworldEditor to integrate new overlay settings and preview options.
- Modified the CMake workflow to install the libxext-dev package alongside libglew-dev, ensuring all necessary video libraries are available for the build process.
- Added a new submodule for usdasm located in assets/asm/usdasm to facilitate asset management.
- Updated .gitmodules to include the new submodule URL for easier integration and updates.
- Created a comprehensive guide detailing the refactor of the dungeon object rendering system, transitioning from SNES emulation to direct ROM parsing for improved performance and maintainability.
- Documented the new architecture, including components like ObjectParser, ObjectRenderer, and Enhanced RoomObject, along with their features and implementation details.
- Added an integration test suite guide to validate ROM loading and overworld functionality, outlining test structure, execution, and best practices for adding new tests.
- Included an overworld loading guide comparing ZScream and Yaze implementations, highlighting key differences and common issues with solutions.
- Introduced comprehensive integration tests for the overworld, including tests for overworld map properties, sprite positioning, and filtering logic.
- Added new tests for dungeon integration, focusing on room loading, object parsing, and ensuring compatibility with overworld changes.
- Implemented utility functions for extracting vanilla values from ROM and creating patched ROMs, enhancing testing capabilities.
- Updated CMakeLists.txt to include new test files for comprehensive coverage of overworld and dungeon functionalities.
- Updated the MapPropertiesSystem to improve the layout of the simplified map settings table, increasing column widths for better visibility and usability.
- Adjusted button sizes in the OverworldEditor for Graphics, Palettes, Overlays, and Properties to enhance user interaction.
- Implemented filtering of sprites in the OverworldEditor based on the current world, ensuring only relevant sprites are displayed.
- Refactored sprite drawing logic to utilize global coordinates directly, improving accuracy in sprite rendering.
- Introduced MapPropertiesSystem class to manage map properties, including settings for area size, graphics, palettes, and overlays.
- Implemented UI components for drawing map properties, allowing users to customize map settings through a dedicated panel.
- Enhanced OverworldEditor to integrate map properties functionality, providing quick access to map settings via context menus and UI interactions.
- Added support for custom background colors and overlays, improving the overall customization experience for users.
- Updated OverworldEditor to include new table columns for CopyMap, MapLock, CustomBG, and Overlay, improving user interaction and customization options.
- Implemented DrawCustomBackgroundColorEditor and DrawOverlayEditor methods for managing custom background colors and overlay settings, respectively.
- Added context menu functionality for map locking and quick access to map properties, enhancing usability.
- Refactored OverworldMap to support new features related to animated graphics and subscreen overlays, ensuring compatibility with ZScreamCustomOverworld v3.
- Introduced ZScream Custom Overworld ASM to enhance customization of the ALTTP overworld, allowing users to modify various aspects such as palettes, backgrounds, and transitions.
- Updated OverworldEditor to include area size selection for v3 support, enabling users to choose between different area sizes (Small, Large, Wide, Tall).
- Enhanced OverworldMap to load area size information based on the applied ASM version, ensuring compatibility with expanded features.
- Implemented SaveAreaSizes method in Overworld to persist area size settings in the ROM, supporting the new customization capabilities.
- Refactored related classes and methods to accommodate the new area size logic and ensure seamless integration with existing functionalities.
- Included object_parser.cc and room_layout.cc in the CMakeLists.txt for the Zelda 3 project, enhancing the build configuration to support new dungeon functionalities.
- Ensured proper inclusion of necessary source files for improved object handling and room layout management in the dungeon editor.
- Introduced EditorIntegrationTest class to facilitate integration testing for editors, providing a structured environment for testing editor functionalities.
- Implemented methods for initializing the test environment, running tests, and handling ROM operations.
- Added helper methods for common editor actions such as load, save, cut, copy, paste, undo, redo, and find, ensuring thorough coverage of editor capabilities.
- Integrated ImGui test engine for UI interaction testing, enhancing the testing framework's capabilities.
- Updated Snes constructor to initialize CPU callbacks directly, improving readability and maintainability.
- Removed unnecessary CpuCallbacks parameter from Cpu constructor, streamlining the class design.
- Added new methods in Apu for retrieving cycles, status, control, and handling DMA transfers, enhancing audio processing capabilities.
- Introduced unit tests for Apu to validate initialization, sample generation, and handshake timing, ensuring robust audio functionality.
- Added inclusion of file_dialog.h in TUI for enhanced file handling capabilities.
- Fixed syntax errors in Tile16Transfer by replacing commas with semicolons in assignment statements, ensuring proper execution of tile16 data comparisons.
- Updated CMakeLists.txt to include new test files for CPU, PPU, SPC700, APU, and dungeon editor integration tests.
- Introduced new testing helpers in testing.h for validating StatusOr objects with specific error messages and codes.
- Added comprehensive integration tests for the DungeonEditor, covering object parsing, rendering, and room graphics.
- Created mock ROM and object data setups to facilitate testing without real ROM files.
- Implemented various test cases to ensure the reliability of object parsing and rendering logic in the dungeon editor.
- Updated SetTileAt and GetTileAt methods to enhance boundary checks, ensuring valid tile coordinates are used.
- Simplified buffer resizing logic in DrawBackground to accurately reflect the number of tiles based on width and height.
- Improved tile drawing logic to prevent unnecessary operations when the tile value is 0xFFFF, enhancing rendering efficiency.
- Implemented a copy constructor and copy assignment operator to enable deep copying of Bitmap objects.
- Added move constructor and move assignment operator to optimize resource handling and prevent unnecessary data duplication.
- Introduced SetPixel method for modifying individual pixels in the bitmap.
- Added Resize method to adjust bitmap dimensions while preserving existing pixel data, enhancing flexibility in bitmap manipulation.
- Introduced new object rendering features in DungeonEditor, allowing for improved visualization of dungeon objects with options to show outlines, render objects, and display object information.
- Implemented a caching mechanism for rendered objects to optimize performance.
- Added functionality to load and manage room layouts, including walls, floors, and other structural elements, enhancing the overall editing experience.
- Refactored object handling in Room and RoomObject classes to support new rendering logic and ensure compatibility with the updated layout system.
- Introduced ObjectParser for efficient parsing of object data directly from ROM, improving reliability and performance in object rendering.
- Added DrawDungeonMapScreen method to encapsulate the logic for rendering the dungeon map, improving code organization and readability.
- Refactored DrawDungeonMapsTabs to utilize the new DrawDungeonMapScreen method, reducing code duplication.
- Updated various drawing operations for better clarity and efficiency, including adjustments to tile rendering and grid display.
- Removed commented-out code to clean up the implementation.
- Introduced CompareOverworldItems function to compare two vectors of OverworldItem objects for equality based on their properties (x, y, id).
- Included necessary header for algorithm functions to support the new comparison logic.
- Introduced `is_systemd_available`, `start_userland_agent`, and `stop_userland_agent` functions to manage a userland background agent when systemd is not available.
- Updated installation logic to start the userland agent if systemd is not detected, enhancing compatibility across different Linux environments.
- Enhanced uninstallation process to stop the userland agent if it was running, ensuring a clean removal of the agent.
- Introduced a `systemctl_user` function in `agent.sh` to handle systemd user commands with session bus configuration in headless environments.
- Updated existing systemctl commands to utilize the new wrapper, enhancing compatibility and user experience on Linux systems.
- Added warnings for missing user bus to guide users in enabling lingering sessions.
- Introduced a new `agent.sh` script to manage background agent functionality for YAZE on macOS and Linux.
- Implemented subcommands for installation, uninstallation, one-shot execution, and a watch mode using inotify.
- Added support for environment variable configuration and platform-specific installation procedures.
- Enhanced user experience with detailed usage instructions and logging for build and test processes.
- Removed unnecessary ImGui frame initialization calls in CreateWindow function to streamline window setup.
- Updated FileDialogWrapper to restrict file types in the open file dialog, allowing only specific extensions (sfc, smc, yaze) for improved user experience.
- Introduced a Transaction class to handle atomic write operations to ROM, allowing for rollback on failure.
- Implemented methods for writing bytes, words, longs, vectors, and colors, with status checks and operation logging.
- Added a rollback mechanism to restore original values in case of write failures.
- Enhanced unit tests to verify transaction rollback functionality and ensure data integrity after failed operations.
- Removed redundant copy operation in SaveAllGraphicsData.
- Updated SaveToFile to truncate existing content instead of appending, ensuring a clean write.
- Simplified error handling for file operations.
- Introduced dirty flag management in Write methods to track unsaved changes.
- Added getter and setter for dirty state in the Rom class.
- Introduced SharedClipboard struct in EditorContext to manage cross-session clipboard data.
- Implemented Copy and Paste methods in OverworldEditor to handle tile16 selections and transfers.
- Enhanced clipboard management to support both rectangular selections and single tile copies.
- Added error handling for clipboard operations to ensure robust functionality.
- Added LoadUserSettings and SaveUserSettings methods to handle user preferences such as font scaling and autosave settings.
- Introduced RefreshWorkspacePresets, SaveWorkspacePreset, and LoadWorkspacePreset methods for managing workspace layout presets.
- Integrated autosave functionality with a timer and user notifications via ToastManager.
- Enhanced the UI with options for saving/loading workspace presets and adjusting autosave settings.
- Implemented ToastManager to manage and display toast notifications with different types (info, success, warning, error).
- Introduced a Toast struct to encapsulate message details and time-to-live (TTL) for each notification.
- Integrated ImGui for rendering notifications on the screen, allowing for dynamic updates and automatic removal based on TTL.
- Replaced the previous ROM management system with a RomSession structure to encapsulate ROM and editor set data.
- Streamlined the initialization and loading processes for ROMs, reducing memory overhead and improving clarity.
- Updated methods to reference the new RomSession structure, enhancing maintainability and readability.
- Removed unused editor set management code, simplifying the overall architecture of the EditorManager.