backend-infra-engineer: Release 0.2.2 snapshot
This commit is contained in:
@@ -23,13 +23,12 @@ Custom assembly code applied to the game should be included through the `yaze.as
|
||||
## File Structure
|
||||
|
||||
- **File Extension**: Use `.asm` as the file extension for 65816 assembly files.
|
||||
- **Header Comments**: Include a header comment at the beginning of each file describing its purpose and the author.
|
||||
- **Header Comments**: Include a header comment at the beginning of each file describing its purpose and the author.
|
||||
|
||||
Example:
|
||||
|
||||
```asm
|
||||
; =========================================================
|
||||
; File: my_file.asm
|
||||
; Purpose: [Brief description of the file’s functionality]
|
||||
; Author: [Your Name]
|
||||
; =========================================================
|
||||
@@ -68,11 +67,10 @@ Sprite_Minecart_Main:
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Comments
|
||||
|
||||
- **Purpose**: Comments should explain why the code exists and what it is intended to do, especially for complex logic.
|
||||
- **Placement**:
|
||||
- **Placement**:
|
||||
- Comments can be placed above the code block they describe for longer explanations.
|
||||
- Inline comments can be used for single lines of code where the purpose might not be immediately clear.
|
||||
- **Clarity**: Avoid stating the obvious. Focus on explaining the logic rather than restating the code.
|
||||
@@ -83,22 +81,6 @@ Example:
|
||||
LDA $22 : SEC : SBC $3F : STA $31 ; Adjust X position for camera movement
|
||||
```
|
||||
|
||||
## Directives
|
||||
|
||||
- **Organization**: Use `%macro`, `include`, and other Asar directives in a structured manner, keeping related directives grouped together.
|
||||
- **Usage**: Ensure all directives are used consistently throughout the codebase, following the naming conventions and formatting rules established.
|
||||
|
||||
Example:
|
||||
|
||||
```asm
|
||||
%macro InitMovement
|
||||
LDA.b $22 : STA.b $3F
|
||||
LDA.b $23 : STA.b $41
|
||||
LDA.b $20 : STA.b $3E
|
||||
LDA.b $21 : STA.b $40
|
||||
endmacro
|
||||
```
|
||||
|
||||
## Instructions
|
||||
|
||||
- **Single Line Instructions**: Combine multiple instructions on a single line using colons (`:`) where appropriate for related operations.
|
||||
@@ -121,11 +103,11 @@ Example:
|
||||
|
||||
```asm
|
||||
%macro HandlePlayerCamera
|
||||
LDA $22 : SEC : SBC $3F : STA $31
|
||||
LDA $20 : SEC : SBC $3E : STA $30
|
||||
JSL Link_HandleMovingAnimation_FullLongEntry
|
||||
JSL HandleIndoorCameraAndDoors
|
||||
RTS
|
||||
LDA $22 : SEC : SBC $3F : STA $31
|
||||
LDA $20 : SEC : SBC $3E : STA $30
|
||||
JSL Link_HandleMovingAnimation_FullLongEntry
|
||||
JSL HandleIndoorCameraAndDoors
|
||||
RTS
|
||||
endmacro
|
||||
```
|
||||
|
||||
@@ -137,12 +119,12 @@ endmacro
|
||||
Example:
|
||||
|
||||
```asm
|
||||
.loop_start
|
||||
LDA $00 : CMP #$10 : BEQ .end_loop
|
||||
.loop_start
|
||||
LDA $00 : CMP #$10 : BEQ .end_loop
|
||||
INC $00
|
||||
BRA .loop_start
|
||||
.end_loop
|
||||
RTS
|
||||
.end_loop
|
||||
RTS
|
||||
```
|
||||
|
||||
## Data Structures
|
||||
@@ -155,10 +137,10 @@ Example:
|
||||
```asm
|
||||
.DirectionTileLookup
|
||||
{
|
||||
db $02, $00, $04, $00 ; North
|
||||
db $00, $00, $03, $01 ; East
|
||||
db $00, $02, $00, $04 ; South
|
||||
db $03, $01, $00, $00 ; West
|
||||
db $02, $00, $04, $00 ; North
|
||||
db $00, $00, $03, $01 ; East
|
||||
db $00, $02, $00, $04 ; South
|
||||
db $03, $01, $00, $00 ; West
|
||||
}
|
||||
```
|
||||
|
||||
@@ -206,7 +188,6 @@ AncillaAdd_Hookshot:
|
||||
- **Logical Grouping**: Organize code into logical sections, with related routines and macros grouped together.
|
||||
- **Separation of Concerns**: Ensure that each section of code is responsible for a specific task or set of related tasks, avoiding tightly coupled code.
|
||||
- **Modularity**: Write code in a modular way, making it easier to reuse and maintain.
|
||||
- **Status Registers and Stack Operations**: Indent code blocks when using status register operations (REP, SEP, PHX, PLX, etc.) to improve readability.
|
||||
|
||||
Example:
|
||||
|
||||
@@ -216,22 +197,20 @@ Example:
|
||||
; =========================================================
|
||||
Sprite_Minecart_Main:
|
||||
{
|
||||
JSR HandleTileDirections
|
||||
JSR HandleDynamicSwitchTileDirections
|
||||
PHX
|
||||
JSR HandleMinecartMovement
|
||||
PLX
|
||||
PHX
|
||||
JSR HandleMinecartMovement
|
||||
PLX
|
||||
|
||||
REP #$20
|
||||
LDA !SpriteDirection : STA $00
|
||||
SEP #$20
|
||||
RTS
|
||||
REP #$20
|
||||
LDA !SpriteDirection : STA $00
|
||||
SEP #$20
|
||||
RTS
|
||||
}
|
||||
```
|
||||
|
||||
## Custom Code
|
||||
|
||||
- **Integration**: Include custom assembly code in the `yaze.asm` file to ensure it is applied correctly to the ROM. The module should include a define and conditional statement to allow users to disable the module if needed.
|
||||
- **Integration**: Include custom assembly code in the `yaze.asm` file to ensure it is applied correctly to the ROM. The module should include a define and conditional statement to allow users to disable the module if needed.
|
||||
|
||||
Example:
|
||||
|
||||
@@ -241,4 +220,4 @@ Example:
|
||||
if !YAZE_CUSTOM_MOSAIC != 0
|
||||
incsrc "mosaic_change.asm"
|
||||
endif
|
||||
```
|
||||
```
|
||||
|
||||
@@ -9,11 +9,47 @@ Yaze uses CMake to build the project. If you are unexperienced with CMake, pleas
|
||||
|
||||
The gui editor is built using SDL2 and ImGui. For reference on how to use ImGui, see the [Getting Started](https://github.com/ocornut/imgui/wiki/Getting-Started) guide. For SDL2, see the [SDL2 documentation](https://wiki.libsdl.org/).
|
||||
|
||||
For those who want to reduce compile times, consider installing the dependencies on your system.
|
||||
For those who want to reduce compile times, consider installing the dependencies on your system.
|
||||
|
||||
## Windows
|
||||
|
||||
Recommended to use [msys2](https://www.msys2.org/) for a Unix-like environment on Windows.
|
||||
### vcpkg
|
||||
|
||||
For Visual Studio users, follow the [Install and use packages with CMake](https://learn.microsoft.com/en-us/vcpkg/get_started/get-started) tutorial from Microsoft.
|
||||
|
||||
Define the following dependencies in `vcpkg.json`
|
||||
|
||||
```
|
||||
{
|
||||
"dependencies": [
|
||||
"abseil",
|
||||
"sdl2",
|
||||
"libpng"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Target the architecture in `CMakePresets.json`
|
||||
|
||||
```
|
||||
{
|
||||
"name": "vcpkg",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"architecture": {
|
||||
"value": "arm64/x64",
|
||||
"strategy": "external"
|
||||
},
|
||||
"cacheVariables": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"CMAKE_SYSTEM_PROCESSOR": "arm64/x64"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### msys2
|
||||
|
||||
[msys2](https://www.msys2.org/) is an alternative you may use for a Unix-like environment on Windows. Beware that this is for more experienced developers who know how to manage their system PATH.
|
||||
|
||||
Add to environment variables `C:\msys64\mingw64\bin`
|
||||
|
||||
@@ -55,4 +91,4 @@ You will need to link `SDL2.framework` and `libpng.a` to the project.
|
||||
|
||||
You can use your package manager to install the same dependencies as macOS.
|
||||
|
||||
I trust you know how to use your package manager.
|
||||
I trust you know how to use your package manager.
|
||||
|
||||
@@ -1,26 +1,39 @@
|
||||
# Changelog
|
||||
|
||||
## 0.0.1 (06-08-2022)
|
||||
## 0.2.2 (12-31-2024)
|
||||
|
||||
- Started project
|
||||
- Added ImGui
|
||||
- Added SDL2
|
||||
- Added yaze_test target with gtest
|
||||
- DungeonMap editing improvements
|
||||
- ZSCustomOverworld support
|
||||
- Cross platform file handling
|
||||
|
||||
## 0.0.2 - 0.0.4
|
||||
## 0.2.1 (08-20-2024)
|
||||
|
||||
- TODO: Track changes over this time
|
||||
- Improved MessageEditor parsing
|
||||
- Added integration test window
|
||||
- Bitmap bug fixes
|
||||
|
||||
## 0.0.5 (11-21-2023)
|
||||
## 0.2.0 (07-20-2024)
|
||||
|
||||
- DungeonEditor
|
||||
- DungeonObjectRenderer
|
||||
- iOS app support
|
||||
- Graphics Sheet Browser
|
||||
- Project Files
|
||||
|
||||
## 0.0.6 (11-22-2023)
|
||||
## 0.1.0 (05-11-2024)
|
||||
|
||||
- ScreenEditor DungeonMap
|
||||
- Tile16 Editor
|
||||
- Canvas updates
|
||||
- Bitmap bug fixes
|
||||
- Error handling improvements
|
||||
|
||||
## 0.0.9 (04-14-2024)
|
||||
|
||||
- Documentation updates
|
||||
- Entrance tile types
|
||||
- Emulator subsystem overhaul
|
||||
|
||||
## 0.0.8 (02-08-2024)
|
||||
|
||||
- Hyrule Magic Compression
|
||||
- Dungeon Room Entrances
|
||||
- Png Export
|
||||
|
||||
## 0.0.7 (01-27-2024)
|
||||
|
||||
@@ -30,18 +43,60 @@
|
||||
- Items
|
||||
- Sprites
|
||||
|
||||
## 0.1.0 (05-11-2024)
|
||||
## 0.0.6 (11-22-2023)
|
||||
|
||||
- TODO: Track changes over this time
|
||||
- ScreenEditor DungeonMap
|
||||
- Tile16 Editor
|
||||
- Canvas updates
|
||||
|
||||
## 0.2.0 (07-20-2024)
|
||||
## 0.0.5 (11-21-2023)
|
||||
|
||||
- iOS app support
|
||||
- Graphics Sheet Browser
|
||||
- Project Files
|
||||
- DungeonEditor
|
||||
- DungeonObjectRenderer
|
||||
|
||||
## 0.2.1 (08-20-2024)
|
||||
## 0.0.4 (11-11-2023)
|
||||
|
||||
- Improved MessageEditor parsing
|
||||
- Added integration test window
|
||||
- Bitmap bug fixes
|
||||
- Tile16Editor
|
||||
- GfxGroupEditor
|
||||
- Add GfxGroups fns to Rom
|
||||
- Add Tile16Editor and GfxGroupEditor to OverworldEditor
|
||||
|
||||
## 0.0.3 (10-26-2023)
|
||||
|
||||
- Emulator subsystem
|
||||
- Snes Ppu and PpuRegisters
|
||||
- Direct Memory Access
|
||||
- Cpu Tests
|
||||
- Read/Write Tile16 functions
|
||||
- CompressionV3
|
||||
- Rom::LoadLinkGraphics
|
||||
|
||||
|
||||
## 0.0.2 (08-26-2023)
|
||||
|
||||
- Emulator subsystem
|
||||
- Spc700
|
||||
- Emulator loop
|
||||
- Clock and MockClock
|
||||
- Ppu and Apu cycling
|
||||
- Setup Snes initialization
|
||||
- 65816 Cpu opcodes
|
||||
- JP Font support
|
||||
- SCAD Format support for CGX, COL, OBJ files
|
||||
- Overworld Save
|
||||
- Overworld Map Tile Editing
|
||||
|
||||
## 0.0.1 (07-22-2023)
|
||||
|
||||
- GraphicsEditor
|
||||
- Palette management
|
||||
- lc_lz2 Compression
|
||||
- SnesTo8bppSheet
|
||||
- Bitmap Canvas
|
||||
|
||||
## 0.0.0 (06-08-2022)
|
||||
|
||||
- Started project
|
||||
- Added ImGui
|
||||
- Added SDL2
|
||||
- Added yaze_test target with gtest
|
||||
|
||||
@@ -20,7 +20,7 @@ Assembly code should follow the [65816 Style Guide](docs/asm-style-guide.md).
|
||||
|
||||
## Testing Facilities
|
||||
|
||||
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.
|
||||
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::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.
|
||||
|
||||
@@ -54,37 +54,6 @@ yaze includes an emulator subsystem that allows developers to test their modific
|
||||
- Implementing new debugging tools, such as memory viewers, breakpoints, or trace logs.
|
||||
- Extending the emulator to support additional features, such as save states, cheat codes, or multiplayer modes.
|
||||
|
||||
### 4. Editor Management
|
||||
|
||||
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:
|
||||
|
||||
- Refactoring `EditorManager` to delegate responsibilities to specialized managers (e.g., `MenuManager`, `TabManager`, `StatusManager`).
|
||||
- Optimizing the rendering and update loop to improve performance, especially when handling large textures or complex editors.
|
||||
- Implementing new features that streamline the editing process, such as better keyboard shortcuts, command palette integration, or project management tools.
|
||||
|
||||
### 5. User Interface and UX
|
||||
|
||||
yaze's UI is built with ImGui, offering a flexible and customizable interface. Contributions to the UI might include:
|
||||
|
||||
- Designing and implementing new themes or layouts to improve the user experience.
|
||||
- Adding new UI components, such as toolbars, context menus, or customizable panels.
|
||||
- Improving the accessibility of the editor, ensuring it is usable by a wide range of users, including those with disabilities.
|
||||
|
||||
### 6. ROM Manipulation
|
||||
|
||||
The `Rom` class is at the heart of yaze's ability to modify and interact with ROM data. Contributions here might involve:
|
||||
|
||||
- Optimizing the loading and saving processes to handle larger ROMs or more complex modifications efficiently.
|
||||
- Extensions should be able to change the way the `Rom` class interacts with the ROM data with custom pointers to expanded data structures.
|
||||
|
||||
### 7. Testing and Documentation
|
||||
|
||||
Quality assurance and documentation are critical to yaze's success. Contributions in this area include:
|
||||
|
||||
- Writing unit tests for new and existing features to ensure they work correctly and remain stable over time.
|
||||
- Contributing to the documentation, both for end-users and developers, to make yaze easier to use and extend.
|
||||
- Creating tutorials or guides that help new developers get started with building extensions or contributing to the project.
|
||||
|
||||
## Building the Project
|
||||
|
||||
For detailed instructions on building YAZE, including its dependencies and supported platforms, refer to [build-instructions.md](docs/build-instructions.md).
|
||||
|
||||
@@ -18,14 +18,14 @@ The goal of yaze is to build a cross platform editor for the Legend of Zelda: A
|
||||
- **assets**: Hosts assets like fonts, icons, assembly source, etc.
|
||||
- **cmake**: Contains CMake configurations.
|
||||
- **docs**: Contains documentation for users and developers.
|
||||
- **src**: Contains source files.
|
||||
- **incl**: Contains the public headers for `yaze_c`
|
||||
- **src**: Contains source files.
|
||||
- **app**: Contains the GUI editor `yaze`
|
||||
- **app/emu**: Contains a standalone Snes emulator application `yaze_emu`
|
||||
- **cli**: Contains the command line interface `z3ed`
|
||||
- **incl**: Contains the data headers for `yaze_c`
|
||||
- **cli/python**: Contains the Python module `yaze_py`
|
||||
- **ios**: Contains the iOS application `yaze_ios`
|
||||
- **lib**: Contains the dependencies as git submodules
|
||||
- **py**: Contains the Python module `yaze_py`
|
||||
- **test**: Contains testing interface `yaze_test`
|
||||
- **win32**: Contains Windows resource file and icon
|
||||
|
||||
@@ -83,4 +83,3 @@ Currently implemented as a singleton with SharedRom which is not great but has h
|
||||
- app/gfx/bitmap.h
|
||||
|
||||
This class is responsible for creating, managing, and manipulating bitmap data, which can be displayed on the screen using SDL2 Textures and the ImGui draw list. It also provides functions for exporting these bitmaps to the clipboard in PNG format using libpng.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user