From 8e7c179d471d13f5246fb3e7e0b8ba320263c5df Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 5 Oct 2025 12:29:59 -0400 Subject: [PATCH] feat: Improve Argument Parsing in OverworldGetTile and Implement ROM Saving in PaletteImport - Enhanced argument parsing in OverworldGetTile to handle map_id, x, and y parameters more robustly, ensuring proper usage feedback. - Added functionality to save the modified palette to the ROM in PaletteImport, updating the success message to confirm the save operation and display the filename. --- src/cli/handlers/overworld.cc | 43 ++++++++++++++++++++++++----------- src/cli/handlers/palette.cc | 6 ++++- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/cli/handlers/overworld.cc b/src/cli/handlers/overworld.cc index 772f17fa..ac104b76 100644 --- a/src/cli/handlers/overworld.cc +++ b/src/cli/handlers/overworld.cc @@ -27,14 +27,22 @@ namespace yaze { namespace cli { absl::Status OverworldGetTile::Run(const std::vector& arg_vec) { - if (arg_vec.size() < 3) { - return absl::InvalidArgumentError("Usage: overworld get-tile --map --x --y "); + int map_id = -1, x = -1, y = -1; + + for (size_t i = 0; i < arg_vec.size(); ++i) { + const std::string& arg = arg_vec[i]; + if ((arg == "--map") && i + 1 < arg_vec.size()) { + map_id = std::stoi(arg_vec[++i]); + } else if ((arg == "--x") && i + 1 < arg_vec.size()) { + x = std::stoi(arg_vec[++i]); + } else if ((arg == "--y") && i + 1 < arg_vec.size()) { + y = std::stoi(arg_vec[++i]); + } } - // TODO: Implement proper argument parsing - int map_id = std::stoi(arg_vec[0]); - int x = std::stoi(arg_vec[1]); - int y = std::stoi(arg_vec[2]); + if (map_id == -1 || x == -1 || y == -1) { + return absl::InvalidArgumentError("Usage: overworld get-tile --map --x --y "); + } std::string rom_file = absl::GetFlag(FLAGS_rom); if (rom_file.empty()) { @@ -63,15 +71,24 @@ absl::Status OverworldGetTile::Run(const std::vector& arg_vec) { } absl::Status OverworldSetTile::Run(const std::vector& arg_vec) { - if (arg_vec.size() < 4) { - return absl::InvalidArgumentError("Usage: overworld set-tile --map --x --y --tile "); + int map_id = -1, x = -1, y = -1, tile_id = -1; + + for (size_t i = 0; i < arg_vec.size(); ++i) { + const std::string& arg = arg_vec[i]; + if ((arg == "--map") && i + 1 < arg_vec.size()) { + map_id = std::stoi(arg_vec[++i]); + } else if ((arg == "--x") && i + 1 < arg_vec.size()) { + x = std::stoi(arg_vec[++i]); + } else if ((arg == "--y") && i + 1 < arg_vec.size()) { + y = std::stoi(arg_vec[++i]); + } else if ((arg == "--tile") && i + 1 < arg_vec.size()) { + tile_id = std::stoi(arg_vec[++i], nullptr, 16); + } } - // TODO: Implement proper argument parsing - int map_id = std::stoi(arg_vec[0]); - int x = std::stoi(arg_vec[1]); - int y = std::stoi(arg_vec[2]); - int tile_id = std::stoi(arg_vec[3], nullptr, 16); + if (map_id == -1 || x == -1 || y == -1 || tile_id == -1) { + return absl::InvalidArgumentError("Usage: overworld set-tile --map --x --y --tile "); + } std::string rom_file = absl::GetFlag(FLAGS_rom); if (rom_file.empty()) { diff --git a/src/cli/handlers/palette.cc b/src/cli/handlers/palette.cc index 05474a91..7c36d5f3 100644 --- a/src/cli/handlers/palette.cc +++ b/src/cli/handlers/palette.cc @@ -127,9 +127,13 @@ absl::Status PaletteImport::Run(const std::vector& arg_vec) { *pal = snes_palette; // TODO: Implement saving the modified palette back to the ROM. + auto save_status = rom_.SaveToFile({.save_new = false}); + if (!save_status.ok()) { + return save_status; + } std::cout << "Successfully imported palette " << palette_id << " to group " << group_name << " from " << input_file << std::endl; - std::cout << "(Saving to ROM not yet implemented)" << std::endl; + std::cout << "✅ ROM saved to: " << rom_.filename() << std::endl; return absl::OkStatus(); }