From d5072155bf1a9ebfeefd11a663556e4f56197d58 Mon Sep 17 00:00:00 2001 From: D1GQ Date: Wed, 18 Mar 2026 14:24:58 -0500 Subject: [PATCH] Fix null ref on game start for Android --- src/Patches/Gameplay/LobbyPatch.cs | 21 ++++++++++++++++--- .../Gameplay/Managers/HudManagerPatch.cs | 13 ------------ 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/Patches/Gameplay/LobbyPatch.cs b/src/Patches/Gameplay/LobbyPatch.cs index d3749d6..24a6d77 100644 --- a/src/Patches/Gameplay/LobbyPatch.cs +++ b/src/Patches/Gameplay/LobbyPatch.cs @@ -19,6 +19,8 @@ internal static class LobbyPatch OptionPlayerItem.ResetAllValues(); } + private static Transform? GameStartObj; + // Disable annoying lobby music if setting is enabled [HarmonyPatch(typeof(LobbyBehaviour), nameof(LobbyBehaviour.Update))] [HarmonyPostfix] @@ -26,6 +28,19 @@ internal static class LobbyPatch { if (BAUConfigs.DisableLobbyTheme.Value) SoundManager.instance.StopSound(LobbyBehaviour.Instance.MapTheme); + + // Adjust GameStartManager position for better UI layout + if (GameStartObj == null) + { + if (HudManager.InstanceExists) + { + GameStartObj = HudManager.Instance.transform.Find("GameStartManager"); + } + } + else + { + GameStartObj.SetLocalY(-2.8f); + } } [HarmonyPatch(typeof(LobbyBehaviour), nameof(LobbyBehaviour.RpcExtendLobbyTimer))] @@ -99,7 +114,7 @@ internal static class LobbyPatch __instance.GameStartTextParent.SetActive(false); __instance.StartButton.gameObject.SetActive(true); - if (__instance.startState == GameStartManager.StartingStates.Countdown) + if (__instance.startState == global::GameStartManager.StartingStates.Countdown) { // Show cancel button with countdown __instance.StartButton.buttonText.text = string.Format("{0}: {1}", Translator.GetString(StringNames.Cancel), (int)__instance.countDownTimer + 1); @@ -118,7 +133,7 @@ internal static class LobbyPatch if (BAUModdedSupportFlags.HasFlag(BAUModdedSupportFlags.Disable_CancelStartingGame)) return true; // If countdown is active, clicking cancels the start - if (__instance.startState == GameStartManager.StartingStates.Countdown) + if (__instance.startState == global::GameStartManager.StartingStates.Countdown) { SoundManager.instance.StopSound(__instance.gameStartSound); __instance.ResetStartState(); @@ -128,7 +143,7 @@ internal static class LobbyPatch // Shift+click starts game immediately (bypasses countdown) if (Input.GetKey(KeyCode.LeftShift)) { - __instance.startState = GameStartManager.StartingStates.Countdown; + __instance.startState = global::GameStartManager.StartingStates.Countdown; __instance.FinallyBegin(); return false; } diff --git a/src/Patches/Gameplay/Managers/HudManagerPatch.cs b/src/Patches/Gameplay/Managers/HudManagerPatch.cs index cf336ef..255893f 100644 --- a/src/Patches/Gameplay/Managers/HudManagerPatch.cs +++ b/src/Patches/Gameplay/Managers/HudManagerPatch.cs @@ -3,7 +3,6 @@ using BetterAmongUs.Helpers; using BetterAmongUs.Managers; using BetterAmongUs.Modules; using HarmonyLib; -using UnityEngine; namespace BetterAmongUs.Patches.Gameplay.Managers; @@ -38,22 +37,10 @@ internal static class HudManagerPatch }, 1f, shouldLog: false); } - private static GameObject? gameStart; - [HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))] [HarmonyPostfix] private static void HudManager_Update_Postfix(HudManager __instance) { - // Adjust GameStartManager position for better UI layout - if (gameStart == null) - { - gameStart = GameObject.Find("GameStartManager"); - } - if (gameStart != null) - { - gameStart.transform.SetLocalY(-2.8f); - } - // Manage in-game chat visibility based on settings and game state if (GameState.InGame) {