diff --git a/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs b/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs
index ef2c2ddf4..9e4df0a66 100644
--- a/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs
+++ b/Assets/Scripts/Debug/ManafallDisableMirrorImgui.cs
@@ -4,12 +4,16 @@ using UnityEngine;
///
/// Disables Mirror IMGUI HUDs that allocate tens of KB every frame via OnGUI.
/// CLERK: also re-assert after a short delay — NetworkManager can re-enable showGUI on play.
+/// Clears sticky F3/F4 debug overlay prefs once so player/probe builds start without screen clutter.
///
public static class ManafallDisableMirrorImgui
{
+ private const string DebugOverlaysHiddenPrefsKey = "Manafall.DebugOverlaysHidden_v1";
+
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
private static void DisableHeavyImgui()
{
+ ClearStickyDebugOverlayPrefsOnce();
KillMirrorImgui();
var go = new GameObject("ClerkMirrorHudKiller");
Object.DontDestroyOnLoad(go);
@@ -17,6 +21,23 @@ public static class ManafallDisableMirrorImgui
go.AddComponent();
}
+ ///
+ /// One-shot for installed players: turn off saved F3/F4 visibility that agents left on.
+ /// Does not run in the Editor (F3 still defaults on there).
+ ///
+ public static void ClearStickyDebugOverlayPrefsOnce()
+ {
+ if (Application.isEditor)
+ return;
+ if (PlayerPrefs.GetInt(DebugOverlaysHiddenPrefsKey, 0) != 0)
+ return;
+
+ PlayerPrefs.SetInt("Manafall.ViewCostDebug", 0);
+ PlayerPrefs.SetInt("Manafall.MemorySpikeDebug", 0);
+ PlayerPrefs.SetInt(DebugOverlaysHiddenPrefsKey, 1);
+ PlayerPrefs.Save();
+ }
+
public static void KillMirrorImgui()
{
NetworkManagerHUD[] huds = Object.FindObjectsByType(
diff --git a/Assets/Scripts/ManafallIdentity.cs b/Assets/Scripts/ManafallIdentity.cs
index e98a248c4..8ef5d873d 100644
--- a/Assets/Scripts/ManafallIdentity.cs
+++ b/Assets/Scripts/ManafallIdentity.cs
@@ -5,7 +5,7 @@
public static class ManafallIdentity
{
public const string ProductName = "Manafall";
- public const string Version = "0.1.43";
+ public const string Version = "0.1.44";
/// Unity Player Settings Company Name. Replace with your legal name if a store requires it.
public const string PublisherField = "Independent";
public const string BundleId = "com.manafall.manafall";
diff --git a/Assets/Scripts/Menu/MainMenuDirector.cs b/Assets/Scripts/Menu/MainMenuDirector.cs
index f55ad4b34..fb824eaeb 100644
--- a/Assets/Scripts/Menu/MainMenuDirector.cs
+++ b/Assets/Scripts/Menu/MainMenuDirector.cs
@@ -1218,6 +1218,7 @@ public sealed class MainMenuDirector : MonoBehaviour
BuildOptionsPanel(canvasRt);
BuildCreditsPanel(canvasRt);
BuildOfflineSavesPanel(canvasRt);
+ CreateBuildVersionLabel(canvasRt);
}
private void OpenSealclashCardGame()
@@ -2582,6 +2583,58 @@ public sealed class MainMenuDirector : MonoBehaviour
tmp.font = TMP_Settings.defaultFontAsset;
}
+ ///
+ /// Bottom-left build version so players can tell Mega / Probe / patched installs apart.
+ /// Uses (Player Settings), not a hardcoded string.
+ ///
+ private void CreateBuildVersionLabel(RectTransform canvasRt)
+ {
+ if (canvasRt == null)
+ return;
+
+ Transform existing = canvasRt.Find("BuildVersionLabel");
+ if (existing != null)
+ Destroy(existing.gameObject);
+
+ string appVersion = Application.version;
+ if (string.IsNullOrWhiteSpace(appVersion))
+ appVersion = ManafallIdentity.Version;
+
+ string lastApplied = PlayerPrefs.GetString("Manafall.Patch.LastApplied", string.Empty).Trim();
+ string label = "v" + appVersion.Trim();
+ if (!string.IsNullOrEmpty(lastApplied)
+ && !string.Equals(lastApplied, appVersion.Trim(), System.StringComparison.OrdinalIgnoreCase))
+ {
+ label += " (patched " + lastApplied + ")";
+ }
+
+#if DEVELOPMENT_BUILD
+ label += " DEV";
+#endif
+
+ var go = new GameObject("BuildVersionLabel", typeof(RectTransform));
+ go.transform.SetParent(canvasRt, false);
+ RectTransform rt = go.GetComponent();
+ rt.anchorMin = new Vector2(0f, 0f);
+ rt.anchorMax = new Vector2(0f, 0f);
+ rt.pivot = new Vector2(0f, 0f);
+ rt.anchoredPosition = new Vector2(touchMenu ? 18f : 24f, touchMenu ? 14f : 18f);
+ rt.sizeDelta = new Vector2(touchMenu ? 420f : 520f, touchMenu ? 28f : 26f);
+
+ TextMeshProUGUI tmp = go.AddComponent();
+ tmp.text = label;
+ tmp.fontSize = touchMenu ? 18f : 16f;
+ tmp.alignment = TextAlignmentOptions.Left;
+ tmp.color = new Color(1f, 0.96f, 0.86f, 0.72f);
+ tmp.raycastTarget = false;
+ if (TMP_Settings.defaultFontAsset != null)
+ tmp.font = TMP_Settings.defaultFontAsset;
+
+ Debug.Log("[MainMenu] Build version label: " + label
+ + " identity=" + ManafallIdentity.Version
+ + " unity=" + Application.unityVersion);
+ }
+
private void CreateManafallTitle(RectTransform parent)
{
Sprite titleSprite = ResolveManafallTitleSprite();
diff --git a/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs b/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs
index 562d318e4..b7c398c12 100644
--- a/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs
+++ b/Assets/Scripts/Rendering/ManafallMemorySpikeDebug.cs
@@ -332,8 +332,17 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour
private void Awake()
{
- // Default on in player builds too — this is the hitch board now.
- visible = PlayerPrefs.GetInt(PrefsKey, 1) != 0;
+ // Default OFF — the hitch board was sticky-on in player/probe builds and filled the screen.
+ // F7 still toggles it. One-shot clear so older installs that saved PrefsKey=1 start clean.
+ const string hideOnceKey = "Manafall.HideWalkHitchOverlay_v1";
+ if (!Application.isEditor && PlayerPrefs.GetInt(hideOnceKey, 0) == 0)
+ {
+ PlayerPrefs.SetInt(PrefsKey, 0);
+ PlayerPrefs.SetInt(hideOnceKey, 1);
+ PlayerPrefs.Save();
+ }
+
+ visible = PlayerPrefs.GetInt(PrefsKey, 0) != 0;
BuildLabel();
ApplyVisible();
}
@@ -356,8 +365,8 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour
PlayerPrefs.SetInt(PrefsKey, visible ? 1 : 0);
ApplyVisible();
UnityEngine.Debug.Log(visible
- ? "[WalkHitch] Overlay on (F4). Walk — top rows are ms on hitch frames."
- : "[WalkHitch] Overlay off (F4).");
+ ? "[WalkHitch] Overlay on (F7). Walk — top rows are ms on hitch frames."
+ : "[WalkHitch] Overlay off (F7).");
}
if (!visible || label == null)
@@ -456,7 +465,7 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour
ExpireWindows(Time.unscaledTime);
builder.Length = 0;
- builder.Append("WALK HITCHES (F4 hide)\n");
+ builder.Append("WALK HITCHES (F7 hide)\n");
builder.AppendFormat(
"Frame {0:0.0} ms smooth {1:0.0} ms FPS {2:0} hitch≥{3:0} ms\n",
frameMs,
@@ -541,7 +550,7 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour
int n = FillSortedIndicesByWindowMs();
if (n == 0)
{
- builder.Append(" (no probes yet — keep walking with F4 on)\n");
+ builder.Append(" (no probes yet — keep walking with F7 on)\n");
}
else
{
@@ -926,7 +935,7 @@ public sealed class ManafallMemorySpikeDebug : MonoBehaviour
private static bool WasTogglePressed()
{
Keyboard kb = Keyboard.current;
- return kb != null && kb.f4Key.wasPressedThisFrame;
+ return kb != null && kb.f7Key.wasPressedThisFrame;
}
private static string FmtMb(long bytes)
diff --git a/Assets/Scripts/Rendering/ManafallViewCostDebug.cs b/Assets/Scripts/Rendering/ManafallViewCostDebug.cs
index 03597f6c2..35ad25ae8 100644
--- a/Assets/Scripts/Rendering/ManafallViewCostDebug.cs
+++ b/Assets/Scripts/Rendering/ManafallViewCostDebug.cs
@@ -116,6 +116,16 @@ public sealed class ManafallViewCostDebug : MonoBehaviour
private void Awake()
{
+ // Player/probe builds: clear sticky F3 prefs left on from agent smoke runs.
+ // Editor still defaults on; F3 toggles everywhere.
+ const string hideOnceKey = "Manafall.HideViewCostOverlay_v1";
+ if (!Application.isEditor && PlayerPrefs.GetInt(hideOnceKey, 0) == 0)
+ {
+ PlayerPrefs.SetInt(PrefsKey, 0);
+ PlayerPrefs.SetInt(hideOnceKey, 1);
+ PlayerPrefs.Save();
+ }
+
visible = PlayerPrefs.GetInt(PrefsKey, Application.isEditor ? 1 : 0) != 0;
BuildLabel();
ApplyVisible();
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index df8cc0684..2d2c8a535 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -143,7 +143,7 @@ PlayerSettings:
loadStoreDebugModeEnabled: 0
visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0
- bundleVersion: 0.1.40
+ bundleVersion: 0.1.44
preloadedAssets:
- {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3}
metroInputSource: 0