From c41b4b465a27f8abb987c0b5254a925b8f5d8c68 Mon Sep 17 00:00:00 2001
From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com>
Date: Sun, 27 Aug 2023 22:14:25 +0300
Subject: [PATCH] Stub SetThisSaveDataSecureValue

---
 include/services/fs.hpp  |  1 +
 src/core/services/fs.cpp | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/include/services/fs.hpp b/include/services/fs.hpp
index 8af39ef1..775c129a 100644
--- a/include/services/fs.hpp
+++ b/include/services/fs.hpp
@@ -67,6 +67,7 @@ class FSService {
 	void openFileDirectly(u32 messagePointer);
 	void setArchivePriority(u32 messagePointer);
 	void setPriority(u32 messagePointer);
+	void setThisSaveDataSecureValue(u32 messagePointer);
 
 	// Used for set/get priority: Not sure what sort of priority this is referring to
 	u32 priority;
diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp
index ec817e4d..00b66f0c 100644
--- a/src/core/services/fs.cpp
+++ b/src/core/services/fs.cpp
@@ -35,6 +35,7 @@ namespace FSCommands {
 		InitializeWithSdkVersion = 0x08610042,
 		SetPriority = 0x08620040,
 		GetPriority = 0x08630000,
+		SetThisSaveDataSecureValue = 0x086E00C0,
 		GetThisSaveDataSecureValue = 0x086F0040,
 		TheGameboyVCFunction = 0x08750180,
 	};
@@ -176,6 +177,7 @@ void FSService::handleSyncRequest(u32 messagePointer) {
 		case FSCommands::OpenFileDirectly: [[likely]] openFileDirectly(messagePointer); break;
 		case FSCommands::SetArchivePriority: setArchivePriority(messagePointer); break;
 		case FSCommands::SetPriority: setPriority(messagePointer); break;
+		case FSCommands::SetThisSaveDataSecureValue: setThisSaveDataSecureValue(messagePointer); break;
 		case FSCommands::AbnegateAccessRight: abnegateAccessRight(messagePointer); break;
 		case FSCommands::TheGameboyVCFunction: theGameboyVCFunction(messagePointer); break;
 		default: Helpers::panic("FS service requested. Command: %08X\n", command);
@@ -643,6 +645,19 @@ void FSService::getThisSaveDataSecureValue(u32 messagePointer) {
 	mem.write32(messagePointer + 4, Result::Success);
 }
 
+void FSService::setThisSaveDataSecureValue(u32 messagePointer) {
+	const u64 value = mem.read32(messagePointer + 4);
+	const u32 slot = mem.read32(messagePointer + 12);
+	const u32 id = mem.read32(messagePointer + 16);
+	const u8 variation = mem.read8(messagePointer + 20);
+
+	// TODO: Actually do something with this.
+	Helpers::warn("Unimplemented FS::SetThisSaveDataSecureValue");
+
+	mem.write32(messagePointer, IPC::responseHeader(0x86E, 1, 0));
+	mem.write32(messagePointer + 4, Result::Success);
+}
+
 void FSService::theGameboyVCFunction(u32 messagePointer) {
 	Helpers::warn("Unimplemented FS: function: 0x08750180");