diff --git a/assets/asm/alttp-hacker-workspace b/assets/asm/alttp-hacker-workspace index ea81eb34..2520fb70 160000 --- a/assets/asm/alttp-hacker-workspace +++ b/assets/asm/alttp-hacker-workspace @@ -1 +1 @@ -Subproject commit ea81eb34251c4e77703791f710f5b60a8a063d21 +Subproject commit 2520fb70c3a47f9f29b5aa61413c4e99defd1b71 diff --git a/cmake/imgui.cmake b/cmake/imgui.cmake index 825e9c86..b594b913 100644 --- a/cmake/imgui.cmake +++ b/cmake/imgui.cmake @@ -28,7 +28,7 @@ set( ${IMGUI_PATH}/imgui_draw.cpp ${IMGUI_PATH}/imgui_widgets.cpp ${IMGUI_PATH}/backends/imgui_impl_sdl2.cpp - ${IMGUI_PATH}/backends/imgui_impl_sdlrenderer.cpp + ${IMGUI_PATH}/backends/imgui_impl_sdlrenderer2.cpp ${IMGUI_PATH}/misc/cpp/imgui_stdlib.cpp ${IMGUI_FILE_DLG_PATH}/ImGuiFileDialog.cpp ${IMGUI_COLOR_TEXT_EDIT_PATH}/TextEditor.cpp diff --git a/src/app/editor/graphics_editor.cc b/src/app/editor/graphics_editor.cc index 7141cc79..fc3563e9 100644 --- a/src/app/editor/graphics_editor.cc +++ b/src/app/editor/graphics_editor.cc @@ -7,6 +7,7 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" +#include "app/editor/palette_editor.h" #include "app/gfx/bitmap.h" #include "app/gfx/snes_tile.h" #include "app/gui/canvas.h" @@ -70,6 +71,7 @@ absl::Status GraphicsEditor::DrawImport() { gui::InputHex("Offset", ¤t_offset_); gui::InputHex("Size ", &size); + gui::InputHex("Palette ", ¤t_palette_); if (ImGui::Button("Super Donkey")) { current_offset_ = 0x98219; @@ -106,11 +108,16 @@ absl::Status GraphicsEditor::DecompressImportData(int size) { std::cout << "Size of import data" << import_data_.size() << std::endl; Bytes new_sheet; + bitmap_.Create(core::kTilesheetWidth, 0x2000, core::kTilesheetDepth, + import_data_.data(), 0x1000); + + if (rom_.isLoaded()) { + auto palette_group = rom_.GetPaletteGroup("ow_main"); + palette_ = palette_group.palettes[current_palette_]; + bitmap_.ApplyPalette(palette_); + } - bitmap_.Create(core::kTilesheetWidth, core::kTilesheetHeight, - core::kTilesheetDepth, import_data_); rom_.RenderBitmap(&bitmap_); - gfx_loaded_ = true; return absl::OkStatus(); diff --git a/src/app/editor/graphics_editor.h b/src/app/editor/graphics_editor.h index 3755fc84..ae94c905 100644 --- a/src/app/editor/graphics_editor.h +++ b/src/app/editor/graphics_editor.h @@ -8,6 +8,7 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" +#include "app/editor/palette_editor.h" #include "app/gfx/bitmap.h" #include "app/gfx/snes_tile.h" #include "app/gui/canvas.h" @@ -50,15 +51,20 @@ class GraphicsEditor { int current_offset_ = 0; int current_size_ = 0; + int current_palette_ = 0; bool gfx_loaded_ = false; ROM rom_; ROM temp_rom_; Bytes import_data_; + Bytes graphics_buffer_; gfx::Bitmap bitmap_; gui::Canvas import_canvas_; - gfx::BitmapTable bitmap_table_; + gfx::BitmapTable graphics_bin_; + + PaletteEditor palette_editor_; + gfx::SNESPalette palette_; ImGuiTableFlags gfx_edit_flags = ImGuiTableFlags_Reorderable | ImGuiTableFlags_Resizable | diff --git a/src/app/editor/overworld_editor.cc b/src/app/editor/overworld_editor.cc index 0eebc478..ad5df035 100644 --- a/src/app/editor/overworld_editor.cc +++ b/src/app/editor/overworld_editor.cc @@ -333,7 +333,7 @@ absl::Status OverworldEditor::LoadGraphics() { rom_.RenderBitmap(¤t_gfx_bmp_); // Create the tile16 blockset image - tile16_blockset_bmp_.Create(0x80, 8192, 0x80, overworld_.Tile16Blockset()); + tile16_blockset_bmp_.Create(0x80, 0x2000, 0x80, overworld_.Tile16Blockset()); tile16_blockset_bmp_.ApplyPalette(palette_); rom_.RenderBitmap(&tile16_blockset_bmp_); map_blockset_loaded_ = true; diff --git a/src/app/gui/canvas.cc b/src/app/gui/canvas.cc index a8f0685a..aa238a8a 100644 --- a/src/app/gui/canvas.cc +++ b/src/app/gui/canvas.cc @@ -164,7 +164,7 @@ void Canvas::DrawBitmap(const Bitmap &bitmap, int x_offset, int y_offset) { } // TODO: Add parameters for sizing and positioning -void Canvas::DrawBitmapTable(const BitmapTable gfx_bin) { +void Canvas::DrawBitmapTable(const BitmapTable &gfx_bin) { for (const auto &[key, value] : gfx_bin) { int offset = 0x40 * (key + 1); int top_left_y = canvas_p0_.y + 2; diff --git a/src/app/gui/canvas.h b/src/app/gui/canvas.h index a23c1eaf..5d939266 100644 --- a/src/app/gui/canvas.h +++ b/src/app/gui/canvas.h @@ -30,7 +30,7 @@ class Canvas { void DrawBitmap(const Bitmap& bitmap, int border_offset = 0, bool ready = true); void DrawBitmap(const Bitmap& bitmap, int x_offset, int y_offset); - void DrawBitmapTable(const BitmapTable gfx_bin); + void DrawBitmapTable(const BitmapTable& gfx_bin); void DrawOutline(int x, int y, int w, int h); void DrawRect(int x, int y, int w, int h, ImVec4 color); void DrawText(std::string text, int x, int y); diff --git a/src/lib/SDL b/src/lib/SDL index 5b904a10..ac13ca9a 160000 --- a/src/lib/SDL +++ b/src/lib/SDL @@ -1 +1 @@ -Subproject commit 5b904a103ad3bd58c13c82b11e32e97a91bafcfb +Subproject commit ac13ca9ab691e13e8eebe9684740ddcb0d716203 diff --git a/src/lib/SDL_mixer b/src/lib/SDL_mixer index 7f73f724..5ec6ceff 160000 --- a/src/lib/SDL_mixer +++ b/src/lib/SDL_mixer @@ -1 +1 @@ -Subproject commit 7f73f724f2097e457cd7cfe3323a876670e79daf +Subproject commit 5ec6ceff78e0762296e785cc9cc3bbdc8da2aa80 diff --git a/src/lib/asar b/src/lib/asar index 634d6baf..4d04c897 160000 --- a/src/lib/asar +++ b/src/lib/asar @@ -1 +1 @@ -Subproject commit 634d6baf7ad073ef01055c9f0ce923636738d2a7 +Subproject commit 4d04c897b94357ae4251f49513f5b8b4f85c4b3b diff --git a/src/lib/imgui b/src/lib/imgui index f65bcf48..d4ddc46e 160000 --- a/src/lib/imgui +++ b/src/lib/imgui @@ -1 +1 @@ -Subproject commit f65bcf481ab34cd07d3909aab1479f409fa79f2f +Subproject commit d4ddc46e7773e9a9b68f965d007968f35ca4e09a