diff --git a/pdk/pdk.cpp b/pdk/pdk.cpp
new file mode 100644
index 00000000..32f000f5
--- /dev/null
+++ b/pdk/pdk.cpp
@@ -0,0 +1,59 @@
+#include "pdk.h"
+
+///
+/// Registering from the Maker
+///
+///
+///
+/// 0 for success, 1 if failed
+int PDK::RegisterInterface(InterfaceMaker interfaceMakePtr, const char* interfaceVersion)
+{
+ if (interfaceMakePtr == NULL)
+ return 1;
+ if (interfaceVersion == NULL)
+ return 1;
+ if (!client_known_interfaces.count(interfaceVersion))
+ return 1;
+ interfaceMap.insert(std::make_pair(interfaceMakePtr, interfaceVersion));
+ return 0;
+}
+
+///
+/// Unregistering from the Maker
+///
+///
+/// 0 for success, 1 if failed
+int PDK::UnRegisterInterface(InterfaceMaker interfaceMakePtr)
+{
+ if (interfaceMakePtr == NULL)
+ return 1;
+
+ interfaceMap.erase(interfaceMakePtr);
+ return 0;
+}
+
+void* PDK::MakeInterface(HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char* interfaceVersion)
+{
+ for (const auto& [key, value] : interfaceMap)
+ {
+ if (strstr(interfaceVersion, value) == 0)
+ {
+ auto maker = (InterfaceMaker)key;
+ return maker(hSteamUser, hSteamPipe);
+ }
+ }
+ return nullptr;
+}
+
+
+void* TestCreate(HSteamUser hSteamUser, HSteamPipe hSteamPipe)
+{
+ return nullptr;
+}
+
+void Register()
+{
+ // Which one should be good? idk
+ //PDK::RegisterInterface(TestCreate, "STEAMAPPLIST_INTERFACE_VERSION001");
+ //PDK::RegisterInterface(&TestCreate, "STEAMAPPLIST_INTERFACE_VERSION001");
+}
diff --git a/pdk/pdk.h b/pdk/pdk.h
new file mode 100644
index 00000000..983316ce
--- /dev/null
+++ b/pdk/pdk.h
@@ -0,0 +1,20 @@
+#ifndef PDK_INCLUDE_H
+#define PDK_INCLUDE_H
+
+#include "dll/base.h"
+#include "dll/client_known_interfaces.h"
+
+typedef void* (__cdecl* InterfaceMaker)(HSteamUser hSteamUser, HSteamPipe hSteamPipe);
+
+class PDK
+{
+ static inline std::map interfaceMap;
+public:
+
+ static int RegisterInterface(InterfaceMaker interfaceMakePtr, const char* interfaceVersion);
+ static int UnRegisterInterface(InterfaceMaker interfaceMakePtr);
+ static void* MakeInterface(HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char* interfaceVersion);
+};
+
+
+#endif //PDK_INCLUDE_H
diff --git a/premake5.lua b/premake5.lua
index 2a0684d8..fe54bddc 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -197,6 +197,7 @@ local common_include = {
'crash_printer',
'sdk',
"overlay_experimental",
+ "pdk"
}
local x32_deps_include = {
@@ -243,6 +244,8 @@ local common_files = {
"helpers/common_helpers.cpp", "helpers/common_helpers/**",
-- helpers/dbg_log
"helpers/dbg_log.cpp", "helpers/dbg_log/**",
+ -- pdk
+ "pdk/**",
}
local overlay_files = {