mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-12-18 19:41:01 +01:00
Merge pull request #12927 from german77/cheat-pause
dmnt: cheat: Add pause and resume support
This commit is contained in:
commit
a133eadf06
4 changed files with 22 additions and 2 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include "core/hle/kernel/k_page_table.h"
|
#include "core/hle/kernel/k_page_table.h"
|
||||||
#include "core/hle/kernel/k_process.h"
|
#include "core/hle/kernel/k_process.h"
|
||||||
#include "core/hle/kernel/k_process_page_table.h"
|
#include "core/hle/kernel/k_process_page_table.h"
|
||||||
|
#include "core/hle/kernel/svc_types.h"
|
||||||
#include "core/hle/service/hid/hid_server.h"
|
#include "core/hle/service/hid/hid_server.h"
|
||||||
#include "core/hle/service/sm/sm.h"
|
#include "core/hle/service/sm/sm.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
|
@ -87,6 +88,20 @@ u64 StandardVmCallbacks::HidKeysDown() {
|
||||||
return static_cast<u64>(press_state & HID::NpadButton::All);
|
return static_cast<u64>(press_state & HID::NpadButton::All);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StandardVmCallbacks::PauseProcess() {
|
||||||
|
if (system.ApplicationProcess()->IsSuspended()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
system.ApplicationProcess()->SetActivity(Kernel::Svc::ProcessActivity::Paused);
|
||||||
|
}
|
||||||
|
|
||||||
|
void StandardVmCallbacks::ResumeProcess() {
|
||||||
|
if (!system.ApplicationProcess()->IsSuspended()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
system.ApplicationProcess()->SetActivity(Kernel::Svc::ProcessActivity::Runnable);
|
||||||
|
}
|
||||||
|
|
||||||
void StandardVmCallbacks::DebugLog(u8 id, u64 value) {
|
void StandardVmCallbacks::DebugLog(u8 id, u64 value) {
|
||||||
LOG_INFO(CheatEngine, "Cheat triggered DebugLog: ID '{:01X}' Value '{:016X}'", id, value);
|
LOG_INFO(CheatEngine, "Cheat triggered DebugLog: ID '{:01X}' Value '{:016X}'", id, value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ public:
|
||||||
void MemoryReadUnsafe(VAddr address, void* data, u64 size) override;
|
void MemoryReadUnsafe(VAddr address, void* data, u64 size) override;
|
||||||
void MemoryWriteUnsafe(VAddr address, const void* data, u64 size) override;
|
void MemoryWriteUnsafe(VAddr address, const void* data, u64 size) override;
|
||||||
u64 HidKeysDown() override;
|
u64 HidKeysDown() override;
|
||||||
|
void PauseProcess() override;
|
||||||
|
void ResumeProcess() override;
|
||||||
void DebugLog(u8 id, u64 value) override;
|
void DebugLog(u8 id, u64 value) override;
|
||||||
void CommandLog(std::string_view data) override;
|
void CommandLog(std::string_view data) override;
|
||||||
|
|
||||||
|
|
|
@ -1205,9 +1205,9 @@ void DmntCheatVm::Execute(const CheatProcessMetadata& metadata) {
|
||||||
static_registers[rw_static_reg->static_idx] = registers[rw_static_reg->idx];
|
static_registers[rw_static_reg->static_idx] = registers[rw_static_reg->idx];
|
||||||
}
|
}
|
||||||
} else if (std::holds_alternative<PauseProcessOpcode>(cur_opcode.opcode)) {
|
} else if (std::holds_alternative<PauseProcessOpcode>(cur_opcode.opcode)) {
|
||||||
// TODO: Pause cheat process
|
callbacks->PauseProcess();
|
||||||
} else if (std::holds_alternative<ResumeProcessOpcode>(cur_opcode.opcode)) {
|
} else if (std::holds_alternative<ResumeProcessOpcode>(cur_opcode.opcode)) {
|
||||||
// TODO: Resume cheat process
|
callbacks->ResumeProcess();
|
||||||
} else if (auto debug_log = std::get_if<DebugLogOpcode>(&cur_opcode.opcode)) {
|
} else if (auto debug_log = std::get_if<DebugLogOpcode>(&cur_opcode.opcode)) {
|
||||||
// Read value from memory.
|
// Read value from memory.
|
||||||
u64 log_value = 0;
|
u64 log_value = 0;
|
||||||
|
|
|
@ -271,6 +271,9 @@ public:
|
||||||
|
|
||||||
virtual u64 HidKeysDown() = 0;
|
virtual u64 HidKeysDown() = 0;
|
||||||
|
|
||||||
|
virtual void PauseProcess() = 0;
|
||||||
|
virtual void ResumeProcess() = 0;
|
||||||
|
|
||||||
virtual void DebugLog(u8 id, u64 value) = 0;
|
virtual void DebugLog(u8 id, u64 value) = 0;
|
||||||
virtual void CommandLog(std::string_view data) = 0;
|
virtual void CommandLog(std::string_view data) = 0;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue