mirror of
https://github.com/spicetools/spicetools.git
synced 2026-03-21 18:04:17 -05:00
84 lines
2.1 KiB
C++
84 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "overlay/window.h"
|
|
|
|
namespace overlay::windows {
|
|
|
|
enum class PatchType {
|
|
Unknown,
|
|
Memory,
|
|
Signature,
|
|
};
|
|
|
|
enum class PatchStatus {
|
|
Error,
|
|
Disabled,
|
|
Enabled,
|
|
};
|
|
|
|
struct MemoryPatch {
|
|
std::string dll_name = "";
|
|
std::shared_ptr<uint8_t[]> data_disabled = nullptr;
|
|
size_t data_disabled_len = 0;
|
|
std::shared_ptr<uint8_t[]> data_enabled = nullptr;
|
|
size_t data_enabled_len = 0;
|
|
uint64_t data_offset = 0;
|
|
uint8_t *data_offset_ptr = nullptr;
|
|
bool fatal_error = false;
|
|
};
|
|
|
|
struct PatchData;
|
|
struct SignaturePatch {
|
|
std::string dll_name = "";
|
|
std::string signature = "", replacement = "";
|
|
int64_t offset = 0, usage = 0;
|
|
|
|
MemoryPatch to_memory(PatchData *patch);
|
|
};
|
|
|
|
struct PatchData {
|
|
bool enabled;
|
|
std::string game_code;
|
|
int datecode_min, datecode_max;
|
|
std::string name, description;
|
|
PatchType type;
|
|
bool preset;
|
|
std::vector<MemoryPatch> patches_memory;
|
|
PatchStatus last_status;
|
|
bool saved;
|
|
std::string hash;
|
|
bool unverified = false;
|
|
};
|
|
|
|
class PatchManager : public Window {
|
|
public:
|
|
|
|
PatchManager(SpiceOverlay *overlay, bool apply_patches = false);
|
|
~PatchManager() override;
|
|
|
|
void build_content() override;
|
|
void reload_patches(bool apply_patches = false);
|
|
|
|
private:
|
|
|
|
// configuration
|
|
static std::string config_path;
|
|
static bool config_dirty;
|
|
static bool setting_auto_apply;
|
|
static std::vector<std::string> setting_auto_apply_list;
|
|
static std::vector<std::string> setting_patches_enabled;
|
|
|
|
// patches
|
|
static std::vector<PatchData> patches;
|
|
static bool patches_initialized;
|
|
|
|
void config_load();
|
|
void config_save();
|
|
|
|
void append_patches(std::string &patches_json, bool apply_patches = false);
|
|
};
|
|
|
|
PatchStatus is_patch_active(PatchData &patch);
|
|
bool apply_patch(PatchData &patch, bool active);
|
|
}
|