From f17d2aa923348c57ddb1caa268cdec295e11502f Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Wed, 3 Aug 2022 19:59:33 -0400 Subject: [PATCH 01/18] chore: include rom.h --- src/app/editor/overworld_editor.cc | 1 + src/app/editor/overworld_editor.h | 1 + 2 files changed, 2 insertions(+) diff --git a/src/app/editor/overworld_editor.cc b/src/app/editor/overworld_editor.cc index e76d4d5b..8005f8a9 100644 --- a/src/app/editor/overworld_editor.cc +++ b/src/app/editor/overworld_editor.cc @@ -11,6 +11,7 @@ #include "app/gfx/bitmap.h" #include "app/gfx/snes_palette.h" #include "app/gfx/snes_tile.h" +#include "app/rom.h" #include "app/zelda3/overworld.h" #include "gui/canvas.h" #include "gui/icons.h" diff --git a/src/app/editor/overworld_editor.h b/src/app/editor/overworld_editor.h index 48aca883..fe5f4407 100644 --- a/src/app/editor/overworld_editor.h +++ b/src/app/editor/overworld_editor.h @@ -11,6 +11,7 @@ #include "app/gfx/bitmap.h" #include "app/gfx/snes_palette.h" #include "app/gfx/snes_tile.h" +#include "app/rom.h" #include "app/zelda3/overworld.h" #include "gui/canvas.h" #include "gui/icons.h" From e86ddfc7c07feb615b67c548e156a6f5b74fb528 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Wed, 3 Aug 2022 20:01:02 -0400 Subject: [PATCH 02/18] refactor: change constant name --- src/app/core/constants.h | 4 ++-- src/app/zelda3/overworld.cc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/core/constants.h b/src/app/core/constants.h index 4986be5a..a736d560 100644 --- a/src/app/core/constants.h +++ b/src/app/core/constants.h @@ -84,10 +84,10 @@ constexpr int NumberOfSheets = 223; constexpr int LimitOfMap32 = 8864; constexpr int NumberOfRooms = 296; -constexpr int NumberOfOWMaps = 160; +constexpr int kNumOverworldMaps = 160; constexpr int Map32PerScreen = 256; constexpr int NumberOfMap16 = 3752; // 4096 -constexpr int NumberOfMap32 = Map32PerScreen * NumberOfOWMaps; +constexpr int NumberOfMap32 = Map32PerScreen * kNumOverworldMaps; constexpr int NumberOfOWSprites = 352; constexpr int NumberOfColors = 3143; diff --git a/src/app/zelda3/overworld.cc b/src/app/zelda3/overworld.cc index ac323edd..6cad4655 100644 --- a/src/app/zelda3/overworld.cc +++ b/src/app/zelda3/overworld.cc @@ -18,13 +18,13 @@ absl::Status Overworld::Load(ROM &rom, uchar *ow_blockset) { return decompression_status; } - for (int map_index = 0; map_index < core::NumberOfOWMaps; ++map_index) + for (int map_index = 0; map_index < core::kNumOverworldMaps; ++map_index) overworld_maps_.emplace_back(map_index, rom_, tiles16); FetchLargeMaps(); auto size = tiles16.size(); - for (int i = 0; i < core::NumberOfOWMaps; ++i) { + for (int i = 0; i < core::kNumOverworldMaps; ++i) { auto map_status = overworld_maps_[i].BuildMapV2(size, game_state_, map_parent_); if (!map_status.ok()) { From 030a18fdf127ff5e886e92b59ae210123cc30c25 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Fri, 5 Aug 2022 08:07:46 -0400 Subject: [PATCH 03/18] Started writing mosaic assembly generation routine --- src/app/editor/screen_editor.cc | 44 +++++++++++++++++++++++++++++++++ src/app/editor/screen_editor.h | 6 +++++ 2 files changed, 50 insertions(+) diff --git a/src/app/editor/screen_editor.cc b/src/app/editor/screen_editor.cc index 7dfd72d0..f60428f6 100644 --- a/src/app/editor/screen_editor.cc +++ b/src/app/editor/screen_editor.cc @@ -2,6 +2,14 @@ #include +#include +#include +#include +#include +#include + +#include "absl/status/statusor.h" +#include "absl/strings/string_view.h" #include "app/core/common.h" #include "app/core/constants.h" #include "app/gfx/bitmap.h" @@ -12,10 +20,32 @@ namespace yaze { namespace app { namespace editor { +namespace { + +absl::StatusOr GenerateMosaicChangeAssembly( + MosaicArray mosaic_tiles) { + std::fstream file("assets/asm/mosaic_change.asm", + std::ios::out | std::ios::in); + if (!file.is_open()) { + return absl::InvalidArgumentError( + "Couldn't open mosaic change template file"); + } + std::stringstream assembly; + + assembly << absl::StrCat("org ", kDefaultMosaicHook); + assembly << file.rdbuf(); + + file.close(); + return assembly.str(); +} + +} // namespace + ScreenEditor::ScreenEditor() { screen_canvas_.SetCanvasSize(ImVec2(512, 512)); } void ScreenEditor::Update() { TAB_BAR("##TabBar") + DrawMosaicEditor(); DrawTitleScreenEditor(); DrawNamingScreenEditor(); DrawOverworldMapEditor(); @@ -25,6 +55,20 @@ void ScreenEditor::Update() { END_TAB_BAR() } +void ScreenEditor::DrawMosaicEditor() { + TAB_ITEM("Mosaic Transitions") + if (ImGui::Button("GenerateMosaicChangeAssembly")) { + auto mosaic = GenerateMosaicChangeAssembly(mosaic_tiles_); + if (!mosaic.ok()) { + std::cout << "Failed to generate mosaic change assembly"; + } else { + std::cout << "Successfully generated mosaic change assembly"; + std::cout << mosaic.value(); + } + } + END_TAB_ITEM() +} + void ScreenEditor::DrawTitleScreenEditor() { TAB_ITEM("Title Screen") END_TAB_ITEM() diff --git a/src/app/editor/screen_editor.h b/src/app/editor/screen_editor.h index 23a56c4b..c4f17545 100644 --- a/src/app/editor/screen_editor.h +++ b/src/app/editor/screen_editor.h @@ -12,12 +12,16 @@ namespace yaze { namespace app { namespace editor { +using MosaicArray = std::array; +constexpr char kDefaultMosaicHook[] = "$02AADB"; + class ScreenEditor { public: ScreenEditor(); void Update(); private: + void DrawMosaicEditor(); void DrawTitleScreenEditor(); void DrawNamingScreenEditor(); void DrawOverworldMapEditor(); @@ -28,6 +32,8 @@ class ScreenEditor { void DrawCanvas(); void DrawToolset(); + MosaicArray mosaic_tiles_; + zelda3::Screen current_screen_; gui::Canvas screen_canvas_; }; From 35e410bf30716112dddbaa17c1705484c9deafbe Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Fri, 5 Aug 2022 08:08:14 -0400 Subject: [PATCH 04/18] Add mosaic transition assembly source --- assets/asm/mosaic_change.asm | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 assets/asm/mosaic_change.asm diff --git a/assets/asm/mosaic_change.asm b/assets/asm/mosaic_change.asm new file mode 100644 index 00000000..515e36be --- /dev/null +++ b/assets/asm/mosaic_change.asm @@ -0,0 +1,53 @@ +org + JML AreaCheck + +AreaCheck: +{ + PHB : PHK : PLB + + TAX + LDA .pool, X + + BEQ .noMosaic1 + PLB + JML $02AAE5 + + .noMosaic1 + + LDX $8A + LDA .pool, X + + BEQ .noMosaic2 + PLB + JML $02AAE5 + + .noMosaic2 + + PLB + JML $02AAF4 + + .pool + ;LW + db $01, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + ;DW + db $01, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + ;SP + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 +} \ No newline at end of file From ef0045d499b2287ac4cc99c206192a70f0d624de Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Thu, 4 Aug 2022 14:53:35 -0400 Subject: [PATCH 05/18] Started documentation --- docs/changelog.md | 18 ++++++++++++++++++ docs/manual.md | 14 ++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 docs/changelog.md create mode 100644 docs/manual.md diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 00000000..9ba1e665 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,18 @@ +## August 2022 + +- Added ValidateCompressionResults to ROM::Compress + +## July 2022 + +- Display current overworld map graphics tile sheets. +- Added CreateAllGraphicsData to the ROM class +- Added Google Abseil C++ library for error handling, string manipulation +- Refactor ROM class to use smart pointers and STL containers + +## June 2022 + +- Implemented LC_LZ2 Decompression +- Created Bitmap class for displaying SNES Graphics +- Added Overworld and OverworldMap class definitions +- Built user interface using ImGui and SDL2 +- Started YAZE \ No newline at end of file diff --git a/docs/manual.md b/docs/manual.md new file mode 100644 index 00000000..9de25311 --- /dev/null +++ b/docs/manual.md @@ -0,0 +1,14 @@ +# Yet Another Zelda3 Editor Manual + +## Opening a ROM + +YAZE supports The Legend of Zelda: A Link to the Past US ROMs with the file formats sfc and smc. Prefer sfc as it is historically more accurate. + + +## Editing the Overworld + +## Editing the Dungeons + +## Editing Sprites + +## Editing Mosaic Transitions From 5b9c60ec7fcf6b4935adf038ed3d580d5a28f2c2 Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Thu, 4 Aug 2022 19:03:35 +0000 Subject: [PATCH 06/18] Convert to status codes for Controller init. --- src/app/core/controller.cc | 85 ++++---------------------------------- src/app/core/controller.h | 12 ++---- 2 files changed, 12 insertions(+), 85 deletions(-) diff --git a/src/app/core/controller.cc b/src/app/core/controller.cc index 5a8b7b63..4930d166 100644 --- a/src/app/core/controller.cc +++ b/src/app/core/controller.cc @@ -79,13 +79,14 @@ void HandleMouseMovement(int &wheel) { bool Controller::isActive() const { return active_; } -void Controller::onEntry() { - CreateWindow(); - CreateRenderer(); - CreateGuiContext(); +absl::Status Controller::onEntry() { + CHECK_STATUS(CreateWindow()) + CHECK_STATUS(CreateRenderer()) + CHECK_STATUS(CreateGuiContext()) InitializeKeymap(); master_editor_.SetupScreen(renderer_); active_ = true; + return absl::OkStatus(); } void Controller::onInput() { @@ -144,77 +145,7 @@ void Controller::onExit() const { SDL_Quit(); } -void Controller::CreateWindow() { - if (SDL_Init(SDL_INIT_EVERYTHING)) { - SDL_Log("SDL_Init: %s\n", SDL_GetError()); - } else { - window_ = std::unique_ptr( - SDL_CreateWindow("Yet Another Zelda3 Editor", // window title - SDL_WINDOWPOS_UNDEFINED, // initial x position - SDL_WINDOWPOS_UNDEFINED, // initial y position - 1200, // width, in pixels - 800, // height, in pixels - SDL_WINDOW_RESIZABLE), - sdl_deleter()); - } -} - -void Controller::CreateRenderer() { - if (window_ == nullptr) { - SDL_Log("SDL_CreateWindow: %s\n", SDL_GetError()); - SDL_Quit(); - } else { - renderer_ = std::unique_ptr( - SDL_CreateRenderer( - window_.get(), -1, - SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC), - sdl_deleter()); - if (renderer_ == nullptr) { - SDL_Log("SDL_CreateRenderer: %s\n", SDL_GetError()); - SDL_Quit(); - } else { - SDL_SetRenderDrawBlendMode(renderer_.get(), SDL_BLENDMODE_BLEND); - SDL_SetRenderDrawColor(renderer_.get(), 0x00, 0x00, 0x00, 0x00); - } - } -} - -void Controller::CreateGuiContext() const { - // Create the ImGui and ImPlot contexts - ImGui::CreateContext(); - - // Initialize ImGui for SDL - ImGui_ImplSDL2_InitForSDLRenderer(window_.get(), renderer_.get()); - ImGui_ImplSDLRenderer_Init(renderer_.get()); - - // Load available fonts - const ImGuiIO &io = ImGui::GetIO(); - io.Fonts->AddFontFromFileTTF("assets/font/Karla-Regular.ttf", 14.0f); - - // merge in icons from Google Material Design - static const ImWchar icons_ranges[] = {ICON_MIN_MD, 0xf900, 0}; - ImFontConfig icons_config; - icons_config.MergeMode = true; - icons_config.GlyphOffset.y = 5.0f; - icons_config.GlyphMinAdvanceX = 13.0f; - icons_config.PixelSnapH = true; - io.Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_MD, 18.0f, &icons_config, - icons_ranges); - io.Fonts->AddFontFromFileTTF("assets/font/Roboto-Medium.ttf", 14.0f); - io.Fonts->AddFontFromFileTTF("assets/font/Cousine-Regular.ttf", 14.0f); - io.Fonts->AddFontFromFileTTF("assets/font/DroidSans.ttf", 16.0f); - - // Set the default style - gui::ColorsYaze(); - - // Build a new ImGui frame - ImGui_ImplSDLRenderer_NewFrame(); - ImGui_ImplSDL2_NewFrame(window_.get()); -} - -// V2 functions --------------------------------------------------------------- - -absl::Status Controller::CreateWindowV2() { +absl::Status Controller::CreateWindow() { if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { return absl::InternalError( absl::StrFormat("SDL_Init: %s\n", SDL_GetError())); @@ -235,7 +166,7 @@ absl::Status Controller::CreateWindowV2() { return absl::OkStatus(); } -absl::Status Controller::CreateRendererV2() { +absl::Status Controller::CreateRenderer() { renderer_ = std::unique_ptr( SDL_CreateRenderer(window_.get(), -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC), @@ -250,7 +181,7 @@ absl::Status Controller::CreateRendererV2() { return absl::OkStatus(); } -absl::Status Controller::CreateGuiContextV2() { +absl::Status Controller::CreateGuiContext() { ImGui::CreateContext(); // Initialize ImGui for SDL diff --git a/src/app/core/controller.h b/src/app/core/controller.h index 7c66b04f..d3bb255b 100644 --- a/src/app/core/controller.h +++ b/src/app/core/controller.h @@ -23,7 +23,7 @@ namespace core { class Controller { public: bool isActive() const; - void onEntry(); + absl::Status onEntry(); void onInput(); void onLoad(); void doRender() const; @@ -36,15 +36,11 @@ class Controller { void operator()(SDL_Texture *p) const { SDL_DestroyTexture(p); } }; - void CreateWindow(); - void CreateRenderer(); - void CreateGuiContext() const; + absl::Status CreateWindow(); + absl::Status CreateRenderer(); + absl::Status CreateGuiContext(); void CloseWindow() { active_ = false; } - absl::Status CreateWindowV2(); - absl::Status CreateRendererV2(); - absl::Status CreateGuiContextV2(); - friend int ::main(int argc, char **argv); bool active_; From a58ecadd4b64ed1d1d423a7334e54c7042178be1 Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Thu, 4 Aug 2022 19:03:46 +0000 Subject: [PATCH 07/18] Add CHECK_STATUS macro --- src/app/core/constants.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/core/constants.h b/src/app/core/constants.h index a736d560..54eba4c7 100644 --- a/src/app/core/constants.h +++ b/src/app/core/constants.h @@ -25,6 +25,11 @@ #define MENU_ITEM(w) if (ImGui::MenuItem(w)) #define MENU_ITEM2(w, v) if (ImGui::MenuItem(w, v)) +#define CHECK_STATUS(w) \ + if (!w.ok()) { \ + return w; \ + } + using ushort = unsigned short; using uint = unsigned int; using uchar = unsigned char; From e9b7008de62d7206f9a5eb756116e0955d638bfd Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Thu, 4 Aug 2022 19:04:09 +0000 Subject: [PATCH 08/18] Return Controller onEntry error in main. --- src/yaze.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/yaze.cc b/src/yaze.cc index b1699c80..5c780550 100644 --- a/src/yaze.cc +++ b/src/yaze.cc @@ -11,7 +11,13 @@ int main(int argc, char** argv) { absl::InstallFailureSignalHandler(options); yaze::app::core::Controller controller; - controller.onEntry(); + + auto entry_status = controller.onEntry(); + if (!entry_status.ok()) { + // TODO(@scawful): log the specific error + return EXIT_FAILURE; + } + while (controller.isActive()) { controller.onInput(); controller.onLoad(); From ffe03b278c816fbcbc8806788844b2d22d88344e Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Thu, 4 Aug 2022 23:14:45 +0000 Subject: [PATCH 09/18] Add Asar and organize CMakeLists.txt --- .gitmodules | 3 ++ CMakeLists.txt | 1 + src/CMakeLists.txt | 69 ++++++++++++++++++++++++++++++++-------------- src/lib/asar | 1 + 4 files changed, 54 insertions(+), 20 deletions(-) create mode 160000 src/lib/asar diff --git a/.gitmodules b/.gitmodules index 8910036c..956da4d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "src/lib/SDL"] path = src/lib/SDL url = https://github.com/libsdl-org/SDL.git +[submodule "src/lib/asar"] + path = src/lib/asar + url = https://github.com/RPGHacker/asar.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 319d028e..36d42414 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,5 +31,6 @@ find_package(GLEW REQUIRED) # Project Files add_subdirectory(src/lib/abseil-cpp) add_subdirectory(src/lib/SDL) +add_subdirectory(src/lib/asar/src) add_subdirectory(src) add_subdirectory(test) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9946651d..8bed4879 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,44 +1,72 @@ include_directories(lib/cmake) -# gui libraries --------------------------------------------------------------------------------------------------- +# gui libraries --------------------------------------------------------------- set(IMGUI_PATH "lib/imgui") file(GLOB IMGUI_SOURCES ${IMGUI_PATH}/*.cpp) add_library("ImGui" STATIC ${IMGUI_SOURCES}) target_include_directories("ImGui" PUBLIC ${IMGUI_PATH}) target_include_directories(ImGui PUBLIC ${SDL2_INCLUDE_DIR}) -target_compile_definitions(ImGui PUBLIC IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) +target_compile_definitions(ImGui PUBLIC + IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) set(IMGUI_FILE_DLG_PATH "lib/ImGuiFileDialog") file(GLOB IMGUI_FILE_DLG_SOURCES ${IMGUI_FILE_DLG_PATH}/*.cpp) add_library("ImGuiFileDialog" STATIC ${IMGUI_FILE_DLG_SOURCES}) target_include_directories(ImGuiFileDialog PUBLIC ${IMGUI_PATH}) -target_compile_definitions(ImGuiFileDialog PUBLIC IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) +target_compile_definitions(ImGuiFileDialog PUBLIC + IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) set(IMGUI_COLOR_TEXT_EDIT_PATH "lib/ImGuiColorTextEdit") file(GLOB IMGUI_COLOR_TEXT_EDIT_SOURCES ${IMGUI_COLOR_TEXT_EDIT_PATH}/*.cpp) add_library("ImGuiColorTextEdit" STATIC ${IMGUI_COLOR_TEXT_EDIT_SOURCES}) target_include_directories(ImGuiColorTextEdit PUBLIC ${IMGUI_PATH}) -target_compile_definitions(ImGuiColorTextEdit PUBLIC IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) +target_compile_definitions(ImGuiColorTextEdit PUBLIC + IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) + +# asar assembly --------------------------------------------------------------- +get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) +include_directories(${ASAR_INCLUDE_DIR}) + +# executable linkage ---------------------------------------------------------- + +set( + YAZE_APP_CORE_SRC + app/core/common.cc + app/core/controller.cc +) + +set( + YAZE_APP_EDITOR_SRC + app/editor/assembly_editor.cc + app/editor/dungeon_editor.cc + app/editor/master_editor.cc + app/editor/overworld_editor.cc + app/editor/palette_editor.cc + app/editor/screen_editor.cc +) + +set( + YAZE_APP_GFX_SRC + app/gfx/bitmap.cc + app/gfx/pseudo_vram.cc + app/gfx/snes_palette.cc + app/gfx/snes_tile.cc +) + +set( + YAZE_APP_ZELDA3_SRC + app/zelda3/overworld_map.cc + app/zelda3/overworld.cc + app/zelda3/screen.cc +) -# Executable Linkage -------------------------------------------------------------------------------------- add_executable( yaze yaze.cc - app/core/common.cc - app/core/controller.cc - app/editor/assembly_editor.cc - app/editor/dungeon_editor.cc - app/editor/master_editor.cc - app/editor/overworld_editor.cc - app/editor/palette_editor.cc - app/editor/screen_editor.cc - app/gfx/bitmap.cc - app/gfx/pseudo_vram.cc - app/gfx/snes_palette.cc - app/gfx/snes_tile.cc - app/zelda3/overworld_map.cc - app/zelda3/overworld.cc - app/zelda3/screen.cc + ${YAZE_APP_CORE_SRC} + ${YAZE_APP_EDITOR_SRC} + ${YAZE_APP_GFX_SRC} + ${YAZE_APP_ZELDA3_SRC} app/rom.cc gui/canvas.cc gui/input.cc @@ -96,6 +124,7 @@ target_link_libraries( ${PNG_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} + asar-static ImGui ) diff --git a/src/lib/asar b/src/lib/asar new file mode 160000 index 00000000..634d6baf --- /dev/null +++ b/src/lib/asar @@ -0,0 +1 @@ +Subproject commit 634d6baf7ad073ef01055c9f0ce923636738d2a7 From c7c5513f460755636ec2ae632817001e7f12eb0d Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Fri, 5 Aug 2022 19:30:05 +0000 Subject: [PATCH 10/18] Create snes_asm namespace for MosaicEditor code --- src/app/asm/script.cc | 36 +++++++++++++++++++++++++++++++++ src/app/asm/script.h | 28 +++++++++++++++++++++++++ src/app/editor/screen_editor.cc | 24 ++-------------------- src/app/editor/screen_editor.h | 4 ++-- 4 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 src/app/asm/script.cc create mode 100644 src/app/asm/script.h diff --git a/src/app/asm/script.cc b/src/app/asm/script.cc new file mode 100644 index 00000000..1533d54c --- /dev/null +++ b/src/app/asm/script.cc @@ -0,0 +1,36 @@ +#include "script.h" + +#include + +#include +#include +#include + +#include "absl/status/statusor.h" +#include "absl/strings/string_view.h" +#include "app/core/constants.h" + +namespace yaze { +namespace app { +namespace snes_asm { + +absl::StatusOr GenerateMosaicChangeAssembly( + MosaicArray mosaic_tiles) { + std::fstream file("assets/asm/mosaic_change.asm", + std::ios::out | std::ios::in); + if (!file.is_open()) { + return absl::InvalidArgumentError( + "Couldn't open mosaic change template file"); + } + std::stringstream assembly; + + assembly << absl::StrCat("org ", kDefaultMosaicHook); + assembly << file.rdbuf(); + + file.close(); + return assembly.str(); +} + +} // namespace snes_asm +} // namespace app +} // namespace yaze \ No newline at end of file diff --git a/src/app/asm/script.h b/src/app/asm/script.h new file mode 100644 index 00000000..ccf66655 --- /dev/null +++ b/src/app/asm/script.h @@ -0,0 +1,28 @@ +#ifndef YAZE_APP_ASM_SCRIPT_H +#define YAZE_APP_ASM_SCRIPT_H + +#include + +#include +#include +#include + +#include "absl/status/statusor.h" +#include "absl/strings/string_view.h" +#include "app/core/constants.h" + +namespace yaze { +namespace app { +namespace snes_asm { + +using MosaicArray = std::array; +constexpr char kDefaultMosaicHook[] = "$02AADB"; + +absl::StatusOr GenerateMosaicChangeAssembly( + MosaicArray mosaic_tiles); + +} // namespace snes_asm +} // namespace app +} // namespace yaze + +#endif \ No newline at end of file diff --git a/src/app/editor/screen_editor.cc b/src/app/editor/screen_editor.cc index f60428f6..92096ed7 100644 --- a/src/app/editor/screen_editor.cc +++ b/src/app/editor/screen_editor.cc @@ -10,6 +10,7 @@ #include "absl/status/statusor.h" #include "absl/strings/string_view.h" +#include "app/asm/script.h" #include "app/core/common.h" #include "app/core/constants.h" #include "app/gfx/bitmap.h" @@ -20,27 +21,6 @@ namespace yaze { namespace app { namespace editor { -namespace { - -absl::StatusOr GenerateMosaicChangeAssembly( - MosaicArray mosaic_tiles) { - std::fstream file("assets/asm/mosaic_change.asm", - std::ios::out | std::ios::in); - if (!file.is_open()) { - return absl::InvalidArgumentError( - "Couldn't open mosaic change template file"); - } - std::stringstream assembly; - - assembly << absl::StrCat("org ", kDefaultMosaicHook); - assembly << file.rdbuf(); - - file.close(); - return assembly.str(); -} - -} // namespace - ScreenEditor::ScreenEditor() { screen_canvas_.SetCanvasSize(ImVec2(512, 512)); } void ScreenEditor::Update() { @@ -58,7 +38,7 @@ void ScreenEditor::Update() { void ScreenEditor::DrawMosaicEditor() { TAB_ITEM("Mosaic Transitions") if (ImGui::Button("GenerateMosaicChangeAssembly")) { - auto mosaic = GenerateMosaicChangeAssembly(mosaic_tiles_); + auto mosaic = snes_asm::GenerateMosaicChangeAssembly(mosaic_tiles_); if (!mosaic.ok()) { std::cout << "Failed to generate mosaic change assembly"; } else { diff --git a/src/app/editor/screen_editor.h b/src/app/editor/screen_editor.h index c4f17545..be92104a 100644 --- a/src/app/editor/screen_editor.h +++ b/src/app/editor/screen_editor.h @@ -3,6 +3,7 @@ #include +#include "app/asm/script.h" #include "app/gfx/bitmap.h" #include "app/gfx/snes_tile.h" #include "app/zelda3/screen.h" @@ -13,7 +14,6 @@ namespace app { namespace editor { using MosaicArray = std::array; -constexpr char kDefaultMosaicHook[] = "$02AADB"; class ScreenEditor { public: @@ -32,7 +32,7 @@ class ScreenEditor { void DrawCanvas(); void DrawToolset(); - MosaicArray mosaic_tiles_; + snes_asm::MosaicArray mosaic_tiles_; zelda3::Screen current_screen_; gui::Canvas screen_canvas_; From 25ee0ff9cdd42883f430bd5fd98f8dc36d947f03 Mon Sep 17 00:00:00 2001 From: Justin Scofield Date: Fri, 5 Aug 2022 19:30:37 +0000 Subject: [PATCH 11/18] Cleanup CMakeLists --- CMakeLists.txt | 7 +++++- src/CMakeLists.txt | 52 ++++++++++++++++++++++++++------------------- test/CMakeLists.txt | 2 ++ 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 36d42414..1a5b3e7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,9 +28,14 @@ find_package(PNG REQUIRED) find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) +# Asar Assembly --------------------------------------------------------------- +add_subdirectory(src/lib/asar/src) +get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) +include_directories(${ASAR_INCLUDE_DIR}) +add_definitions(-Dstricmp=strcasecmp) + # Project Files add_subdirectory(src/lib/abseil-cpp) add_subdirectory(src/lib/SDL) -add_subdirectory(src/lib/asar/src) add_subdirectory(src) add_subdirectory(test) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8bed4879..975ffc98 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,3 @@ -include_directories(lib/cmake) - # gui libraries --------------------------------------------------------------- set(IMGUI_PATH "lib/imgui") file(GLOB IMGUI_SOURCES ${IMGUI_PATH}/*.cpp) @@ -23,11 +21,18 @@ target_include_directories(ImGuiColorTextEdit PUBLIC ${IMGUI_PATH}) target_compile_definitions(ImGuiColorTextEdit PUBLIC IMGUI_IMPL_OPENGL_LOADER_CUSTOM= GL_GLEXT_PROTOTYPES=1) -# asar assembly --------------------------------------------------------------- -get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) -include_directories(${ASAR_INCLUDE_DIR}) - -# executable linkage ---------------------------------------------------------- +set( + IMGUI_SRC + ${IMGUI_PATH}/imgui.cpp + ${IMGUI_PATH}/imgui_demo.cpp + ${IMGUI_PATH}/imgui_draw.cpp + ${IMGUI_PATH}/imgui_widgets.cpp + ${IMGUI_PATH}/backends/imgui_impl_sdl.cpp + ${IMGUI_PATH}/backends/imgui_impl_sdlrenderer.cpp + ${IMGUI_PATH}/misc/cpp/imgui_stdlib.cpp + ${IMGUI_FILE_DLG_PATH}/ImGuiFileDialog.cpp + ${IMGUI_COLOR_TEXT_EDIT_PATH}/TextEditor.cpp +) set( YAZE_APP_CORE_SRC @@ -60,34 +65,37 @@ set( app/zelda3/screen.cc ) +set( + YAZE_APP_ASM_SRC + app/asm/script.h +) + +set( + YAZE_GUI_SRC + gui/canvas.cc + gui/input.cc + gui/style.cc + gui/widgets.cc +) + add_executable( yaze yaze.cc + app/rom.cc + ${YAZE_APP_ASM_SRC} ${YAZE_APP_CORE_SRC} ${YAZE_APP_EDITOR_SRC} ${YAZE_APP_GFX_SRC} ${YAZE_APP_ZELDA3_SRC} - app/rom.cc - gui/canvas.cc - gui/input.cc - gui/style.cc - gui/widgets.cc - # GUI libraries - ${IMGUI_PATH}/imgui.cpp - ${IMGUI_PATH}/imgui_demo.cpp - ${IMGUI_PATH}/imgui_draw.cpp - ${IMGUI_PATH}/imgui_widgets.cpp - ${IMGUI_PATH}/backends/imgui_impl_sdl.cpp - ${IMGUI_PATH}/backends/imgui_impl_sdlrenderer.cpp - ${IMGUI_PATH}/misc/cpp/imgui_stdlib.cpp - ${IMGUI_FILE_DLG_PATH}/ImGuiFileDialog.cpp - ${IMGUI_COLOR_TEXT_EDIT_PATH}/TextEditor.cpp + ${YAZE_GUI_SRC} + ${IMGUI_SRC} ) target_include_directories( yaze PUBLIC lib/ app/ + ${ASAR_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src/ ${PNG_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index aa049b21..66023f68 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -15,6 +15,7 @@ add_executable( yaze_test.cc rom_test.cc ../src/app/rom.cc + ../src/app/asm/script.cc ../src/app/gfx/bitmap.cc ../src/app/gfx/snes_tile.cc ../src/app/gfx/snes_palette.cc @@ -43,6 +44,7 @@ target_link_libraries( absl::raw_logging_internal SDL2::SDL2 ${OPENGL_LIBRARIES} + asar-static gmock_main gmock gtest_main From b6280bc051dfc0508a8b774e337f13292a26c694 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Fri, 5 Aug 2022 20:09:22 -0400 Subject: [PATCH 12/18] Create Script class --- src/app/asm/script.cc | 4 ++-- src/app/asm/script.h | 8 +++++--- src/app/editor/screen_editor.cc | 2 +- src/app/editor/screen_editor.h | 7 +++++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/app/asm/script.cc b/src/app/asm/script.cc index 1533d54c..30535443 100644 --- a/src/app/asm/script.cc +++ b/src/app/asm/script.cc @@ -14,8 +14,8 @@ namespace yaze { namespace app { namespace snes_asm { -absl::StatusOr GenerateMosaicChangeAssembly( - MosaicArray mosaic_tiles) { +absl::StatusOr Script::GenerateMosaicChangeAssembly( + std::array mosaic_tiles) { std::fstream file("assets/asm/mosaic_change.asm", std::ios::out | std::ios::in); if (!file.is_open()) { diff --git a/src/app/asm/script.h b/src/app/asm/script.h index ccf66655..49212e35 100644 --- a/src/app/asm/script.h +++ b/src/app/asm/script.h @@ -15,11 +15,13 @@ namespace yaze { namespace app { namespace snes_asm { -using MosaicArray = std::array; constexpr char kDefaultMosaicHook[] = "$02AADB"; -absl::StatusOr GenerateMosaicChangeAssembly( - MosaicArray mosaic_tiles); +class Script { + public: + absl::StatusOr GenerateMosaicChangeAssembly( + std::array mosaic_tiles); +}; } // namespace snes_asm } // namespace app diff --git a/src/app/editor/screen_editor.cc b/src/app/editor/screen_editor.cc index 92096ed7..14e533fb 100644 --- a/src/app/editor/screen_editor.cc +++ b/src/app/editor/screen_editor.cc @@ -38,7 +38,7 @@ void ScreenEditor::Update() { void ScreenEditor::DrawMosaicEditor() { TAB_ITEM("Mosaic Transitions") if (ImGui::Button("GenerateMosaicChangeAssembly")) { - auto mosaic = snes_asm::GenerateMosaicChangeAssembly(mosaic_tiles_); + auto mosaic = mosaic_script_.GenerateMosaicChangeAssembly(mosaic_tiles_); if (!mosaic.ok()) { std::cout << "Failed to generate mosaic change assembly"; } else { diff --git a/src/app/editor/screen_editor.h b/src/app/editor/screen_editor.h index be92104a..bd9a900c 100644 --- a/src/app/editor/screen_editor.h +++ b/src/app/editor/screen_editor.h @@ -3,7 +3,10 @@ #include +#include + #include "app/asm/script.h" +#include "app/core/constants.h" #include "app/gfx/bitmap.h" #include "app/gfx/snes_tile.h" #include "app/zelda3/screen.h" @@ -32,8 +35,8 @@ class ScreenEditor { void DrawCanvas(); void DrawToolset(); - snes_asm::MosaicArray mosaic_tiles_; - + std::array mosaic_tiles_; + snes_asm::Script mosaic_script_; zelda3::Screen current_screen_; gui::Canvas screen_canvas_; }; From dfdfd51fedc5ff575c44acdf1222847e7de9b4a6 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Fri, 5 Aug 2022 20:10:02 -0400 Subject: [PATCH 13/18] continue overhaul --- CMakeLists.txt | 1 - src/lib/SDL | 2 +- src/lib/abseil-cpp | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a5b3e7d..03a6cd3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,6 @@ find_package(GLEW REQUIRED) # Asar Assembly --------------------------------------------------------------- add_subdirectory(src/lib/asar/src) get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) -include_directories(${ASAR_INCLUDE_DIR}) add_definitions(-Dstricmp=strcasecmp) # Project Files diff --git a/src/lib/SDL b/src/lib/SDL index adb3e1a2..5858c7df 160000 --- a/src/lib/SDL +++ b/src/lib/SDL @@ -1 +1 @@ -Subproject commit adb3e1a21d381cc1e62a12ae41cc7e5585c72a92 +Subproject commit 5858c7dfce80b0854b04475dde97996692ce9200 diff --git a/src/lib/abseil-cpp b/src/lib/abseil-cpp index 701185db..0c923304 160000 --- a/src/lib/abseil-cpp +++ b/src/lib/abseil-cpp @@ -1 +1 @@ -Subproject commit 701185dbce17a2f49334027ca3cb5788a5d06c6d +Subproject commit 0c92330442d6b1be934e0407115c8084250ef347 From 42179d7b1285c4046cfb7a2b0217e760d633063e Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Fri, 5 Aug 2022 20:10:20 -0400 Subject: [PATCH 14/18] Revert "continue overhaul" This reverts commit dfdfd51fedc5ff575c44acdf1222847e7de9b4a6. --- CMakeLists.txt | 1 + src/lib/SDL | 2 +- src/lib/abseil-cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03a6cd3e..1a5b3e7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ find_package(GLEW REQUIRED) # Asar Assembly --------------------------------------------------------------- add_subdirectory(src/lib/asar/src) get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) +include_directories(${ASAR_INCLUDE_DIR}) add_definitions(-Dstricmp=strcasecmp) # Project Files diff --git a/src/lib/SDL b/src/lib/SDL index 5858c7df..adb3e1a2 160000 --- a/src/lib/SDL +++ b/src/lib/SDL @@ -1 +1 @@ -Subproject commit 5858c7dfce80b0854b04475dde97996692ce9200 +Subproject commit adb3e1a21d381cc1e62a12ae41cc7e5585c72a92 diff --git a/src/lib/abseil-cpp b/src/lib/abseil-cpp index 0c923304..701185db 160000 --- a/src/lib/abseil-cpp +++ b/src/lib/abseil-cpp @@ -1 +1 @@ -Subproject commit 0c92330442d6b1be934e0407115c8084250ef347 +Subproject commit 701185dbce17a2f49334027ca3cb5788a5d06c6d From cd74e36d023c19d135b91feb8924a3d1a614f850 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Fri, 5 Aug 2022 20:10:32 -0400 Subject: [PATCH 15/18] update modules --- src/lib/SDL | 2 +- src/lib/abseil-cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/SDL b/src/lib/SDL index adb3e1a2..5858c7df 160000 --- a/src/lib/SDL +++ b/src/lib/SDL @@ -1 +1 @@ -Subproject commit adb3e1a21d381cc1e62a12ae41cc7e5585c72a92 +Subproject commit 5858c7dfce80b0854b04475dde97996692ce9200 diff --git a/src/lib/abseil-cpp b/src/lib/abseil-cpp index 701185db..0c923304 160000 --- a/src/lib/abseil-cpp +++ b/src/lib/abseil-cpp @@ -1 +1 @@ -Subproject commit 701185dbce17a2f49334027ca3cb5788a5d06c6d +Subproject commit 0c92330442d6b1be934e0407115c8084250ef347 From b0370b5c0dc2e686458971747351e884769215fe Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Sat, 6 Aug 2022 13:19:24 -0400 Subject: [PATCH 16/18] Improve Script and added ApplyPatchToROM with Asar --- src/app/asm/script.cc | 15 ++++++++++++--- src/app/asm/script.h | 13 ++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/app/asm/script.cc b/src/app/asm/script.cc index 30535443..6bf86938 100644 --- a/src/app/asm/script.cc +++ b/src/app/asm/script.cc @@ -1,19 +1,28 @@ #include "script.h" -#include +#include #include #include #include +#include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "app/core/constants.h" +#include "app/rom.h" namespace yaze { namespace app { namespace snes_asm { +absl::Status Script::ApplyPatchToROM(ROM& rom) { + if (!asar_patch(patch_filename_, rom_.data(), patch_size_, rom_.size())) { + return absl::InternalError("Unable to apply patch"); + } + return absl::OkStatus(); +} + absl::StatusOr Script::GenerateMosaicChangeAssembly( std::array mosaic_tiles) { std::fstream file("assets/asm/mosaic_change.asm", @@ -23,8 +32,8 @@ absl::StatusOr Script::GenerateMosaicChangeAssembly( "Couldn't open mosaic change template file"); } std::stringstream assembly; - - assembly << absl::StrCat("org ", kDefaultMosaicHook); + assembly << "org "; + assembly << kDefaultMosaicHook; assembly << file.rdbuf(); file.close(); diff --git a/src/app/asm/script.h b/src/app/asm/script.h index 49212e35..6d131551 100644 --- a/src/app/asm/script.h +++ b/src/app/asm/script.h @@ -1,15 +1,17 @@ #ifndef YAZE_APP_ASM_SCRIPT_H #define YAZE_APP_ASM_SCRIPT_H -#include +#include #include #include #include +#include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "app/core/constants.h" +#include "app/rom.h" namespace yaze { namespace app { @@ -19,8 +21,17 @@ constexpr char kDefaultMosaicHook[] = "$02AADB"; class Script { public: + Script() = default; + + absl::Status ApplyPatchToROM(ROM& rom); + absl::StatusOr GenerateMosaicChangeAssembly( std::array mosaic_tiles); + + private: + int64_t patch_size_; + std::string patch_filename_; + std::string patch_contents_; }; } // namespace snes_asm From 84b3b231f699fa01b13fabb629ca20c8150e98f6 Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Sat, 6 Aug 2022 13:19:38 -0400 Subject: [PATCH 17/18] Move Asar in CMakeLists --- CMakeLists.txt | 6 ------ src/CMakeLists.txt | 27 ++++++++++++++++----------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a5b3e7d..319d028e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,12 +28,6 @@ find_package(PNG REQUIRED) find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) -# Asar Assembly --------------------------------------------------------------- -add_subdirectory(src/lib/asar/src) -get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) -include_directories(${ASAR_INCLUDE_DIR}) -add_definitions(-Dstricmp=strcasecmp) - # Project Files add_subdirectory(src/lib/abseil-cpp) add_subdirectory(src/lib/SDL) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 975ffc98..3b2da4b4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,6 +34,11 @@ set( ${IMGUI_COLOR_TEXT_EDIT_PATH}/TextEditor.cpp ) +# Asar Assembly --------------------------------------------------------------- +add_subdirectory(lib/asar/src) +get_target_property(ASAR_INCLUDE_DIR asar-static INCLUDE_DIRECTORIES) +add_definitions(-Dstricmp=strcasecmp) + set( YAZE_APP_CORE_SRC app/core/common.cc @@ -67,7 +72,7 @@ set( set( YAZE_APP_ASM_SRC - app/asm/script.h + app/asm/script.cc ) set( @@ -79,16 +84,16 @@ set( ) add_executable( - yaze - yaze.cc - app/rom.cc - ${YAZE_APP_ASM_SRC} - ${YAZE_APP_CORE_SRC} - ${YAZE_APP_EDITOR_SRC} - ${YAZE_APP_GFX_SRC} - ${YAZE_APP_ZELDA3_SRC} - ${YAZE_GUI_SRC} - ${IMGUI_SRC} + yaze + yaze.cc + app/rom.cc + ${YAZE_APP_ASM_SRC} + ${YAZE_APP_CORE_SRC} + ${YAZE_APP_EDITOR_SRC} + ${YAZE_APP_GFX_SRC} + ${YAZE_APP_ZELDA3_SRC} + ${YAZE_GUI_SRC} + ${IMGUI_SRC} ) target_include_directories( From 89e87720cac878e8a9aeafc9b6781495a2ca81ab Mon Sep 17 00:00:00 2001 From: Justin Scofield <47263509+scawful@users.noreply.github.com> Date: Sat, 6 Aug 2022 13:19:58 -0400 Subject: [PATCH 18/18] remove part of template --- assets/asm/mosaic_change.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/asm/mosaic_change.asm b/assets/asm/mosaic_change.asm index 515e36be..ab7ff135 100644 --- a/assets/asm/mosaic_change.asm +++ b/assets/asm/mosaic_change.asm @@ -1,4 +1,4 @@ -org + JML AreaCheck AreaCheck: