From 931560cfb144b9fc88bfc8a93c1d5e7d041d6cbe Mon Sep 17 00:00:00 2001 From: scawful Date: Sat, 8 Jul 2023 09:03:27 -0400 Subject: [PATCH] Add GraphicsEditor class Super donkey proto graphics import experiment removed snes_spc and asar_static because of macOS M1 build issues. music player using snes_spc disabled included macOS build configuration as it currently is. --- docs/macos-build.md | 6 ++ src/CMakeLists.txt | 13 +++-- src/app/core/controller.cc | 10 ++-- src/app/core/controller.h | 2 +- src/app/editor/graphics_editor.cc | 89 ++++++++++++++++++++++++++++++ src/app/editor/graphics_editor.h | 45 +++++++++++++++ src/app/editor/master_editor.cc | 25 ++++++++- src/app/editor/master_editor.h | 5 +- src/app/editor/music_editor.cc | 78 +++++++++++++------------- src/app/editor/music_editor.h | 8 +-- src/app/editor/overworld_editor.cc | 22 ++++---- src/app/editor/overworld_editor.h | 2 +- src/app/gfx/snes_palette.h | 7 ++- src/app/rom.cc | 37 ++++++++----- src/app/rom.h | 2 +- test/CMakeLists.txt | 8 +-- 16 files changed, 267 insertions(+), 92 deletions(-) create mode 100644 docs/macos-build.md create mode 100644 src/app/editor/graphics_editor.cc create mode 100644 src/app/editor/graphics_editor.h diff --git a/docs/macos-build.md b/docs/macos-build.md new file mode 100644 index 00000000..b929dfa1 --- /dev/null +++ b/docs/macos-build.md @@ -0,0 +1,6 @@ +Taking note of this because of how stupid it is. + +Clang 15.0.1 x86_64-apple-darrwin22.5.0 +SDL2 Source v2.26.5 +Removed snes_spc +Removed asar_static \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 84aa80dd..15d45bd7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,6 +9,7 @@ set( YAZE_APP_EDITOR_SRC app/editor/assembly_editor.cc app/editor/dungeon_editor.cc + app/editor/graphics_editor.cc app/editor/master_editor.cc app/editor/music_editor.cc app/editor/overworld_editor.cc @@ -54,8 +55,8 @@ add_executable( ${YAZE_APP_GFX_SRC} ${YAZE_APP_ZELDA3_SRC} ${YAZE_GUI_SRC} - ${ASAR_STATIC_SRC} - ${SNES_SPC_SOURCES} + # ${ASAR_STATIC_SRC} + # ${SNES_SPC_SOURCES} ${IMGUI_SRC} ) @@ -70,8 +71,8 @@ target_include_directories( ${SDL2_INCLUDE_DIR} lib/SDL_mixer/include/ ${GLEW_INCLUDE_DIRS} - lib/asar/src/asar/ - lib/snes_spc/snes_spc/ + # lib/asar/src/asar/ + # lib/snes_spc/snes_spc/ ) set(SDL_TARGETS SDL2::SDL2) @@ -93,8 +94,8 @@ target_link_libraries( ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} ${CMAKE_DL_LIBS} - asar-static - snes_spc + # asar-static + # snes_spc ImGui ) diff --git a/src/app/core/controller.cc b/src/app/core/controller.cc index 2b0a6b20..1798e22e 100644 --- a/src/app/core/controller.cc +++ b/src/app/core/controller.cc @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include @@ -138,12 +138,12 @@ void Controller::onLoad() { master_editor_.UpdateScreen(); } void Controller::doRender() const { SDL_RenderClear(renderer_.get()); ImGui::Render(); - ImGui_ImplSDLRenderer_RenderDrawData(ImGui::GetDrawData()); + ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData()); SDL_RenderPresent(renderer_.get()); } void Controller::onExit() const { - ImGui_ImplSDLRenderer_Shutdown(); + ImGui_ImplSDLRenderer2_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); SDL_Quit(); @@ -195,7 +195,7 @@ absl::Status Controller::CreateGuiContext() const { // Initialize ImGui for SDL ImGui_ImplSDL2_InitForSDLRenderer(window_.get(), renderer_.get()); - ImGui_ImplSDLRenderer_Init(renderer_.get()); + ImGui_ImplSDLRenderer2_Init(renderer_.get()); // Load available fonts const ImGuiIO &io = ImGui::GetIO(); @@ -218,7 +218,7 @@ absl::Status Controller::CreateGuiContext() const { gui::ColorsYaze(); // Build a new ImGui frame - ImGui_ImplSDLRenderer_NewFrame(); + ImGui_ImplSDLRenderer2_NewFrame(); ImGui_ImplSDL2_NewFrame(window_.get()); return absl::OkStatus(); diff --git a/src/app/core/controller.h b/src/app/core/controller.h index 9aabbbc7..3f410fac 100644 --- a/src/app/core/controller.h +++ b/src/app/core/controller.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include diff --git a/src/app/editor/graphics_editor.cc b/src/app/editor/graphics_editor.cc new file mode 100644 index 00000000..7b7e8b98 --- /dev/null +++ b/src/app/editor/graphics_editor.cc @@ -0,0 +1,89 @@ +#include "app/editor/graphics_editor.h" + +#include +#include +#include +#include + +#include "absl/status/status.h" +#include "absl/status/statusor.h" +#include "app/gfx/bitmap.h" +#include "app/gui/canvas.h" +#include "app/gui/input.h" +#include "app/rom.h" + +namespace yaze { +namespace app { +namespace editor { + +absl::Status GraphicsEditor::Update() { + DrawImport(); + + return absl::OkStatus(); +} + +absl::Status GraphicsEditor::DrawImport() { + static int offset = 0; + static int size = 0; + static char filePath[256] = ""; + + ImGui::InputText("File", filePath, sizeof(filePath)); + + // Open the file dialog when the user clicks the "Browse" button + if (ImGui::Button("Browse")) { + ImGuiFileDialog::Instance()->OpenDialog("ImportDlgKey", "Choose File", + ".bin\0", "."); + } + + // Draw the file dialog + if (ImGuiFileDialog::Instance()->Display("ImportDlgKey")) { + // If the user made a selection, copy the filename to the filePath buffer + if (ImGuiFileDialog::Instance()->IsOk()) { + strncpy(filePath, ImGuiFileDialog::Instance()->GetFilePathName().c_str(), + sizeof(filePath)); + } + + // Close the modal + ImGuiFileDialog::Instance()->Close(); + } + + gui::InputHex("Offset", &offset); + gui::InputHex("Size ", &size); + + if (ImGui::Button("Import")) { + if (strlen(filePath) > 0) { + // Add your importing code here, using filePath and offset as parameters + RETURN_IF_ERROR(DecompressImportData(filePath, offset, size)) + } else { + // Show an error message if no file has been selected + ImGui::Text("Please select a file before importing."); + } + } + + import_canvas_.DrawBackground(ImVec2(0x100 + 1, (8192 * 2) + 1)); + import_canvas_.DrawContextMenu(); + import_canvas_.DrawBitmap(bitmap_, 2, gfx_loaded_); + import_canvas_.DrawTileSelector(32); + import_canvas_.DrawGrid(32.0f); + import_canvas_.DrawOverlay(); + + return absl::OkStatus(); +} + +absl::Status GraphicsEditor::DecompressImportData(char *filePath, int offset, + int size) { + RETURN_IF_ERROR(temp_rom.LoadFromFile(filePath)) + ASSIGN_OR_RETURN(import_data_, temp_rom.DecompressGraphics(offset, size)) + + bitmap_.Create(core::kTilesheetWidth, core::kTilesheetHeight * 0x10, + core::kTilesheetDepth, import_data_.data()); + rom_.RenderBitmap(&bitmap_); + + gfx_loaded_ = true; + + return absl::OkStatus(); +} + +} // namespace editor +} // namespace app +} // namespace yaze \ No newline at end of file diff --git a/src/app/editor/graphics_editor.h b/src/app/editor/graphics_editor.h new file mode 100644 index 00000000..2a531a84 --- /dev/null +++ b/src/app/editor/graphics_editor.h @@ -0,0 +1,45 @@ +#ifndef YAZE_APP_EDITOR_GRAPHICS_EDITOR_H +#define YAZE_APP_EDITOR_GRAPHICS_EDITOR_H + +#include +#include +#include +#include + +#include "absl/status/status.h" +#include "absl/status/statusor.h" +#include "app/gfx/bitmap.h" +#include "app/gui/canvas.h" +#include "app/gui/input.h" +#include "app/rom.h" + +namespace yaze { +namespace app { +namespace editor { + +class GraphicsEditor { + public: + absl::Status Update(); + void SetupROM(ROM &rom) { rom_ = rom; } + + private: + absl::Status DrawImport(); + absl::Status DecompressImportData(char *filePath, int offset, int size); + + ROM rom_; + ROM temp_rom; + + gfx::Bitmap bitmap_; + + gui::Canvas import_canvas_; + + Bytes import_data_; + + bool gfx_loaded_ = false; +}; + +} // namespace editor +} // namespace app +} // namespace yaze + +#endif // YAZE_APP_EDITOR_GRAPHICS_EDITOR_H \ No newline at end of file diff --git a/src/app/editor/master_editor.cc b/src/app/editor/master_editor.cc index 02055b20..e85e93a9 100644 --- a/src/app/editor/master_editor.cc +++ b/src/app/editor/master_editor.cc @@ -73,6 +73,7 @@ void MasterEditor::UpdateScreen() { TAB_BAR("##TabBar") DrawOverworldEditor(); DrawDungeonEditor(); + DrawGraphicsEditor(); DrawMusicEditor(); DrawSpriteEditor(); DrawScreenEditor(); @@ -88,6 +89,7 @@ void MasterEditor::DrawFileDialog() { std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName(); status_ = rom_.LoadFromFile(filePathName); overworld_editor_.SetupROM(rom_); + graphics_editor_.SetupROM(rom_); screen_editor_.SetupROM(rom_); palette_editor_.SetupROM(rom_); music_editor_.SetupROM(rom_); @@ -162,6 +164,8 @@ void MasterEditor::DrawYazeMenu() { } void MasterEditor::DrawFileMenu() { + static bool save_as_menu = false; + if (ImGui::BeginMenu("File")) { if (ImGui::MenuItem("Open", "Ctrl+O")) { ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Open ROM", @@ -169,7 +173,7 @@ void MasterEditor::DrawFileMenu() { } MENU_ITEM2("Save", "Ctrl+S") { status_ = rom_.SaveToFile(backup_rom_); } - MENU_ITEM("Save As..") {} + MENU_ITEM("Save As..") { save_as_menu = true; } ImGui::Separator(); @@ -179,6 +183,19 @@ void MasterEditor::DrawFileMenu() { } ImGui::EndMenu(); } + + if (save_as_menu) { + static std::string save_as_filename = ""; + ImGui::Begin("Save As..", nullptr, ImGuiWindowFlags_AlwaysAutoResize); + ImGui::InputText("Filename", &save_as_filename); + if (ImGui::Button("Save", ImVec2(200, 0))) { + status_ = rom_.SaveToFile(backup_rom_, save_as_filename); + } + if (ImGui::Button("Cancel", ImVec2(200, 0))) { + save_as_menu = false; + } + ImGui::End(); + } } void MasterEditor::DrawEditMenu() { @@ -294,6 +311,12 @@ void MasterEditor::DrawDungeonEditor() { END_TAB_ITEM() } +void MasterEditor::DrawGraphicsEditor() { + TAB_ITEM("Graphics") + graphics_editor_.Update(); + END_TAB_ITEM() +} + void MasterEditor::DrawPaletteEditor() { TAB_ITEM("Palettes") status_ = palette_editor_.Update(); diff --git a/src/app/editor/master_editor.h b/src/app/editor/master_editor.h index eda39893..f39922db 100644 --- a/src/app/editor/master_editor.h +++ b/src/app/editor/master_editor.h @@ -11,16 +11,17 @@ #include "app/core/constants.h" #include "app/editor/assembly_editor.h" #include "app/editor/dungeon_editor.h" +#include "app/editor/graphics_editor.h" #include "app/editor/music_editor.h" #include "app/editor/overworld_editor.h" #include "app/editor/palette_editor.h" #include "app/editor/screen_editor.h" #include "app/gfx/snes_palette.h" #include "app/gfx/snes_tile.h" -#include "app/rom.h" #include "app/gui/canvas.h" #include "app/gui/icons.h" #include "app/gui/input.h" +#include "app/rom.h" namespace yaze { namespace app { @@ -45,6 +46,7 @@ class MasterEditor { void DrawOverworldEditor(); void DrawDungeonEditor(); + void DrawGraphicsEditor(); void DrawPaletteEditor(); void DrawMusicEditor(); void DrawScreenEditor(); @@ -61,6 +63,7 @@ class MasterEditor { AssemblyEditor assembly_editor_; DungeonEditor dungeon_editor_; + GraphicsEditor graphics_editor_; OverworldEditor overworld_editor_; PaletteEditor palette_editor_; ScreenEditor screen_editor_; diff --git a/src/app/editor/music_editor.cc b/src/app/editor/music_editor.cc index 2d8ecfa6..9828fff0 100644 --- a/src/app/editor/music_editor.cc +++ b/src/app/editor/music_editor.cc @@ -8,9 +8,9 @@ #include "app/gui/canvas.h" #include "app/gui/icons.h" #include "app/gui/input.h" -#include "snes_spc/demo/demo_util.h" -#include "snes_spc/demo/wave_writer.h" -#include "snes_spc/snes_spc/spc.h" +// #include "snes_spc/demo/demo_util.h" +// #include "snes_spc/demo/wave_writer.h" +// #include "snes_spc/snes_spc/spc.h" namespace yaze { namespace app { @@ -21,46 +21,46 @@ namespace { #define BUF_SIZE 2048 void PlaySPC() { - /* Create emulator and filter */ - SNES_SPC* snes_spc = spc_new(); - SPC_Filter* filter = spc_filter_new(); - if (!snes_spc || !filter) error("Out of memory"); + // /* Create emulator and filter */ + // SNES_SPC* snes_spc = spc_new(); + // SPC_Filter* filter = spc_filter_new(); + // if (!snes_spc || !filter) error("Out of memory"); - /* Load SPC */ - { - /* Load file into memory */ - long spc_size; - void* spc = load_file("assets/music/hyrule_field.spc", &spc_size); + // /* Load SPC */ + // { + // /* Load file into memory */ + // long spc_size; + // void* spc = load_file("assets/music/hyrule_field.spc", &spc_size); - /* Load SPC data into emulator */ - error(spc_load_spc(snes_spc, spc, spc_size)); - free(spc); /* emulator makes copy of data */ + // /* Load SPC data into emulator */ + // error(spc_load_spc(snes_spc, spc, spc_size)); + // free(spc); /* emulator makes copy of data */ - /* Most SPC files have garbage data in the echo buffer, so clear that */ - spc_clear_echo(snes_spc); + // /* Most SPC files have garbage data in the echo buffer, so clear that */ + // spc_clear_echo(snes_spc); - /* Clear filter before playing */ - spc_filter_clear(filter); - } + // /* Clear filter before playing */ + // spc_filter_clear(filter); + // } - /* Record 20 seconds to wave file */ - wave_open(spc_sample_rate, "out.wav"); - wave_enable_stereo(); - while (wave_sample_count() < 30 * spc_sample_rate * 2) { - /* Play into buffer */ - short buf[BUF_SIZE]; - error(spc_play(snes_spc, BUF_SIZE, buf)); + // /* Record 20 seconds to wave file */ + // wave_open(spc_sample_rate, "out.wav"); + // wave_enable_stereo(); + // while (wave_sample_count() < 30 * spc_sample_rate * 2) { + // /* Play into buffer */ + // short buf[BUF_SIZE]; + // error(spc_play(snes_spc, BUF_SIZE, buf)); - /* Filter samples */ - spc_filter_run(filter, buf, BUF_SIZE); + // /* Filter samples */ + // spc_filter_run(filter, buf, BUF_SIZE); - wave_write(buf, BUF_SIZE); - } + // wave_write(buf, BUF_SIZE); + // } - /* Cleanup */ - spc_filter_delete(filter); - spc_delete(snes_spc); - wave_close(); + // /* Cleanup */ + // spc_filter_delete(filter); + // spc_delete(snes_spc); + // wave_close(); } } // namespace @@ -223,10 +223,10 @@ void MusicEditor::DrawToolset() { if (is_playing) { if (!has_loaded_song) { - PlaySPC(); - current_song_ = Mix_LoadMUS("out.wav"); - Mix_PlayMusic(current_song_, -1); - has_loaded_song = true; + // PlaySPC(); + // current_song_ = Mix_LoadMUS("out.wav"); + // Mix_PlayMusic(current_song_, -1); + // has_loaded_song = true; } // // If there is no music playing diff --git a/src/app/editor/music_editor.h b/src/app/editor/music_editor.h index cb50140a..1a570b93 100644 --- a/src/app/editor/music_editor.h +++ b/src/app/editor/music_editor.h @@ -11,9 +11,9 @@ #include "app/gui/input.h" #include "app/rom.h" #include "app/zelda3/music/tracker.h" -#include "snes_spc/demo/demo_util.h" -#include "snes_spc/demo/wave_writer.h" -#include "snes_spc/snes_spc/spc.h" +// #include "snes_spc/demo/demo_util.h" +// #include "snes_spc/demo/wave_writer.h" +// #include "snes_spc/snes_spc/spc.h" namespace yaze { namespace app { @@ -69,7 +69,7 @@ class MusicEditor { zelda3::Tracker music_tracker_; ROM rom_; - Mix_Music* current_song_ = NULL; + // Mix_Music* current_song_ = NULL; AssemblyEditor assembly_editor_; ImGuiTableFlags toolset_table_flags_ = ImGuiTableFlags_SizingFixedFit; diff --git a/src/app/editor/overworld_editor.cc b/src/app/editor/overworld_editor.cc index 3e00b004..0eebc478 100644 --- a/src/app/editor/overworld_editor.cc +++ b/src/app/editor/overworld_editor.cc @@ -185,7 +185,7 @@ void OverworldEditor::DrawOverworldSprites() { // ---------------------------------------------------------------------------- -void OverworldEditor::DrawOverworldEdits() { +void OverworldEditor::DrawOverworldEdits() const { auto mouse_position = ow_map_canvas_.GetCurrentDrawnTilePosition(); auto canvas_size = ow_map_canvas_.GetCanvasSize(); int x = mouse_position.x / canvas_size.x; @@ -379,16 +379,16 @@ absl::Status OverworldEditor::LoadGraphics() { } // Render the sprites for each Overworld map - // for (int i = 0; i < 3; i++) - // for (auto &sprite : overworld_.Sprites(i)) { - // int width = sprite.Width(); - // int height = sprite.Height(); - // int depth = 0x40; - // auto spr_gfx = sprite.PreviewGraphics().data(); - // sprite_previews_[sprite.id()].Create(width, height, depth, spr_gfx); - // sprite_previews_[sprite.id()].ApplyPalette(palette_); - // rom_.RenderBitmap(&(sprite_previews_[sprite.id()])); - // } + for (int i = 0; i < 3; i++) + for (auto &sprite : overworld_.Sprites(i)) { + int width = sprite.Width(); + int height = sprite.Height(); + int depth = 0x40; + auto spr_gfx = sprite.PreviewGraphics().data(); + sprite_previews_[sprite.id()].Create(width, height, depth, spr_gfx); + sprite_previews_[sprite.id()].ApplyPalette(palette_); + rom_.RenderBitmap(&(sprite_previews_[sprite.id()])); + } return absl::OkStatus(); } diff --git a/src/app/editor/overworld_editor.h b/src/app/editor/overworld_editor.h index f5690484..5f3f9383 100644 --- a/src/app/editor/overworld_editor.h +++ b/src/app/editor/overworld_editor.h @@ -58,7 +58,7 @@ class OverworldEditor { void DrawOverworldEntrances(); void DrawOverworldMaps(); void DrawOverworldSprites(); - void DrawOverworldEdits(); + void DrawOverworldEdits() const; void DrawOverworldCanvas(); void DrawTile16Selector(); diff --git a/src/app/gfx/snes_palette.h b/src/app/gfx/snes_palette.h index 59b1610a..bb38b394 100644 --- a/src/app/gfx/snes_palette.h +++ b/src/app/gfx/snes_palette.h @@ -47,7 +47,9 @@ struct SNESColor { void setSNES(uint16_t); void setTransparent(bool t) { transparent = t; } - auto RGB() { return ImVec4(rgb.x / 255, rgb.y / 255, rgb.z / 255, rgb.w); } + auto RGB() const { + return ImVec4(rgb.x / 255, rgb.y / 255, rgb.z / 255, rgb.w); + } float* ToFloatArray() { static std::vector colorArray(4); @@ -123,8 +125,7 @@ struct PaletteGroup { } void AddColor(SNESColor color) { if (size_ == 0) { - SNESPalette empty_pal; - palettes.emplace_back(empty_pal); + palettes.emplace_back(); } palettes[0].AddColor(color); } diff --git a/src/app/rom.cc b/src/app/rom.cc index 8661951f..138e1c35 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -1,7 +1,7 @@ #include "rom.h" #include -#include +// #include #include #include @@ -817,18 +817,24 @@ void ROM::SaveAllPalettes() { // ============================================================================ -absl::Status ROM::SaveToFile(bool backup) { +absl::Status ROM::SaveToFile(bool backup, absl::string_view filename) { if (rom_data_.empty()) { return absl::InternalError("ROM data is empty."); } + // Check if filename is empty + // If it is, use the filename_ member variable + if (filename == "") { + filename = filename_; + } + // Check if backup is enabled if (backup) { // Create a backup file with timestamp in its name auto now = std::chrono::system_clock::now(); auto now_c = std::chrono::system_clock::to_time_t(now); std::string backup_filename = - absl::StrCat(filename_, "_backup_", std::ctime(&now_c)); + absl::StrCat(filename, "_backup_", std::ctime(&now_c)); // Remove newline character from ctime() backup_filename.erase( @@ -839,17 +845,18 @@ absl::Status ROM::SaveToFile(bool backup) { std::replace(backup_filename.begin(), backup_filename.end(), ' ', '_'); // Now, copy the original file to the backup file - std::filesystem::copy(filename_, backup_filename, + std::filesystem::copy(filename, backup_filename, std::filesystem::copy_options::overwrite_existing); } // Run the other save functions SaveAllPalettes(); - std::fstream file(filename_.data(), std::ios::binary | std::ios::out); + // Open the file that we know exists for writing + std::fstream file(filename.data(), std::ios::binary | std::ios::out); if (!file.is_open()) { return absl::InternalError( - absl::StrCat("Could not open ROM file: ", filename_)); + absl::StrCat("Could not open ROM file: ", filename)); } // Save the data to the file @@ -860,7 +867,7 @@ absl::Status ROM::SaveToFile(bool backup) { // Check for write errors if (!file.good()) { return absl::InternalError( - absl::StrCat("Error while writing to ROM file: ", filename_)); + absl::StrCat("Error while writing to ROM file: ", filename)); } return absl::OkStatus(); @@ -940,14 +947,14 @@ uint32_t ROM::GetPaletteAddress(const std::string& groupName, absl::Status ROM::ApplyAssembly(const absl::string_view& filename, size_t patch_size) { - int count = 0; - auto patch = filename.data(); - auto data = (char*)rom_data_.data(); - if (int size = size_; !asar_patch(patch, data, patch_size, &size)) { - auto asar_error = asar_geterrors(&count); - auto full_error = asar_error->fullerrdata; - return absl::InternalError(absl::StrCat("ASAR Error: ", full_error)); - } + // int count = 0; + // auto patch = filename.data(); + // auto data = (char*)rom_data_.data(); + // if (int size = size_; !asar_patch(patch, data, patch_size, &size)) { + // auto asar_error = asar_geterrors(&count); + // auto full_error = asar_error->fullerrdata; + // return absl::InternalError(absl::StrCat("ASAR Error: ", full_error)); + // } return absl::OkStatus(); } diff --git a/src/app/rom.h b/src/app/rom.h index 205f8602..9c33631b 100644 --- a/src/app/rom.h +++ b/src/app/rom.h @@ -139,7 +139,7 @@ class ROM { void LoadAllPalettes(); // Save functions - absl::Status SaveToFile(bool backup); + absl::Status SaveToFile(bool backup, absl::string_view filename = ""); void UpdatePaletteColor(const std::string& groupName, size_t paletteIndex, size_t colorIndex, const gfx::SNESColor& newColor); void SaveAllPalettes(); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c66cf5d0..6cc4c9ac 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -19,14 +19,14 @@ add_executable( ../src/app/gfx/snes_tile.cc ../src/app/gfx/snes_palette.cc ../src/app/core/common.cc - ${ASAR_STATIC_SRC} + # ${ASAR_STATIC_SRC} ) target_include_directories( yaze_test PUBLIC ../src/ ../src/lib/ - ../src/lib/asar/src/asar/ + # ../src/lib/asar/src/asar/ ${SDL2_INCLUDE_DIR} ) @@ -38,8 +38,8 @@ target_link_libraries( ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} ${CMAKE_DL_LIBS} - asar-static - snes_spc + # asar-static + # snes_spc ImGui gmock_main gmock