This project is looking for contributors to help improve the software and enhance the user experience. If you are interested in contributing, please read the following guidelines and suggestions for areas where you can make a difference.
Discussion on the editor and its development can be found on the Oracle of Secrets Discord server.
When contributing to the project, please follow these guidelines to ensure consistency and readability across the codebase:
C++ Code should follow the Google C++ Style Guide with the following exceptions:
Objective-C Code should follow the Google Objective-C Style Guide.
Python Code should follow the PEP 8 Style Guide.
Assembly code should follow the 65816 Style Guide.
The project includes the yaze_test
target which defines unit tests and an integration test window. The unit tests make use of GoogleTest and GoogleMock. The integration test window is an ImGui window build out of the yaze::app::core::Controller and yaze::test::integration::TestEditor. The integration test window can be accessed by passing the argument integration
to the target.
New modules should define unit tests in the src/test
directory and integration tests in the src/test/integration
directory. The yaze_test
target will automatically include all tests in these directories.
Yaze (stylized as yaze) emphasizes extensibility. The yaze_ext
library allows developers to build and integrate extensions using C, C++, or Python. This system is central to yaze's modular design, enabling new features, custom editors, or tools to be added without modifying the core codebase.
yaze_extension
interface to integrate custom functionality into the editor. You can add new tabs, manipulate ROM data, or extend the editor’s capabilities with custom tools.Examples of Extensions:
The sprite builder system in yaze is based on the ZSpriteMaker project and allows users to create custom sprites for use in ROM hacks. The goal is to support ZSM files and provide an intuitive interface for editing sprites without the need for writing assembly code. Contributions to the sprite builder system might include:
yaze includes an emulator subsystem that allows developers to test their modifications directly within the editor. The emulator can currently run certain test ROMs but lacks the ability to play any complex games with audio because of timing issues with the APU and Spc700. Contributions to the emulator subsystem might include:
The EditorManager
class manages the core functionalities of YAZE, including rendering the UI, handling user input, and managing multiple editors. While this class is central to yaze's operations, it has many responsibilities. You can help by:
EditorManager
to delegate responsibilities to specialized managers (e.g., MenuManager
, TabManager
, StatusManager
).yaze's UI is built with ImGui, offering a flexible and customizable interface. Contributions to the UI might include:
The Rom
class is at the heart of yaze's ability to modify and interact with ROM data. Contributions here might involve:
Rom
class interacts with the ROM data with custom pointers to expanded data structures.Quality assurance and documentation are critical to yaze's success. Contributions in this area include:
For detailed instructions on building YAZE, including its dependencies and supported platforms, refer to build-instructions.md.
Follow the instructions in the build-instructions.md. file to configure and build the project on your target platform.
After building, you can run the application on your chosen platform and start exploring the existing features.
Create a fork of the project on GitHub and clone your fork to your local machine.
Create a new branch for your feature or bugfix.
Follow the guidelines above to implement new features, extensions, or improvements.
Ensure your changes don’t introduce new bugs or regressions. Write unit tests where applicable.
Push your changes to your fork and submit a pull request to the main repository. Provide a clear description of your changes and why they are beneficial.