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