From 153880c286b657479980c180e283689fda8edc9a Mon Sep 17 00:00:00 2001
From: ConfiG <cgytrus@cgyt.ru>
Date: Sat, 13 Jan 2024 03:11:04 +0300
Subject: [PATCH] show message box on first forward compat startup

---
 loader/src/load.cpp | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/loader/src/load.cpp b/loader/src/load.cpp
index 8f682d5d..0ae9462b 100644
--- a/loader/src/load.cpp
+++ b/loader/src/load.cpp
@@ -60,6 +60,7 @@ $execute {
 
 void tryLogForwardCompat() {
     if (!LoaderImpl::get()->isForwardCompatMode()) return;
+    // TODO: change text later
     log::warn("+-----------------------------------------------------------------------------------------------+");
     log::warn("| Geode is running in a newer version of GD than Geode targets.                                 |");
     log::warn("| UI is going to be disabled, platform console is forced on and crashes can be more common.     |");
@@ -67,6 +68,28 @@ void tryLogForwardCompat() {
     log::warn("+-----------------------------------------------------------------------------------------------+");
 }
 
+void tryShowForwardCompat() {
+    if (!LoaderImpl::get()->isForwardCompatMode()) return;
+
+    if (Mod::get()->getSavedValue<std::string>("last-forward-compat-warn-popup-ver", "_") ==
+        LoaderImpl::get()->getGameVersion())
+        return;
+
+    // TODO: change text later
+    LoaderImpl::get()->platformMessageBox(
+        "Forward Compatibility Warning",
+        "Geode is running in a newer version of GD than Geode targets.\n"
+        "UI is going to be disabled, platform console is forced on and crashes can be more common.\n"
+        "However, if your game crashes, it is probably caused by an outdated mod and not Geode itself.",
+        Severity::Warning
+    );
+
+    Mod::get()->setSavedValue<std::string>(
+        "last-forward-compat-warn-popup-ver",
+        LoaderImpl::get()->getGameVersion()
+    );
+}
+
 int geodeEntry(void* platformData) {
     log::Logger::get()->setup();
 
@@ -102,6 +125,8 @@ int geodeEntry(void* platformData) {
         return 1;
     }
 
+    tryShowForwardCompat();
+
     // open console
     if (LoaderImpl::get()->isForwardCompatMode() ||
         Mod::get()->getSettingValue<bool>("show-platform-console")) {