diff --git a/Modules/CustomRpcSender.cs b/Modules/CustomRpcSender.cs
index 109691907..17c5d5fd6 100644
--- a/Modules/CustomRpcSender.cs
+++ b/Modules/CustomRpcSender.cs
@@ -978,7 +978,7 @@ static class PreventLargePacketKickPatch
var serverType = GameStates.CurrentServerType;
- if (serverType is GameStates.ServerType.Local or GameStates.ServerType.Vanilla || (serverType == GameStates.ServerType.Niko && msg.Length > 1400))
+ if (!AmongUsClient.Instance.AmHost || serverType is GameStates.ServerType.Local or GameStates.ServerType.Vanilla || (serverType == GameStates.ServerType.Niko && msg.Length > 1400))
{
Logger.Warn($" Blocked large packet from sending (size: {msg.Length})", nameof(PreventLargePacketKickPatch));
return false;
diff --git a/Modules/Utils.cs b/Modules/Utils.cs
index 1e099f291..01fd59ac0 100644
--- a/Modules/Utils.cs
+++ b/Modules/Utils.cs
@@ -4958,6 +4958,29 @@ public static class Utils
float b = (color.b + weight) / (darkness + 1);
return new(r, g, b, color.a);
}
+
+ ///
+ /// Calculates whether the text color should be black or white based on the given background color.
+ ///
+ ///
+ /// Color.black or Color.white, whichever has higher contrast compared to the background color.
+ public static Color GetTextColor(Color32 background)
+ {
+ float r = background.r / 255f;
+ float g = background.g / 255f;
+ float b = background.b / 255f;
+
+ r = r <= 0.03928f ? r / 12.92f : Mathf.Pow((r + 0.055f) / 1.055f, 2.4f);
+ g = g <= 0.03928f ? g / 12.92f : Mathf.Pow((g + 0.055f) / 1.055f, 2.4f);
+ b = b <= 0.03928f ? b / 12.92f : Mathf.Pow((b + 0.055f) / 1.055f, 2.4f);
+
+ float luminance = 0.2126f * r + 0.7152f * g + 0.0722f * b;
+
+ float contrastWhite = (1.05f) / (luminance + 0.05f);
+ float contrastBlack = (luminance + 0.05f) / 0.05f;
+
+ return contrastBlack > contrastWhite ? Color.black : Color.white;
+ }
public static void SetChatVisible(this IReadOnlyList players, bool visible)
{
diff --git a/Patches/ChatCommandPatch.cs b/Patches/ChatCommandPatch.cs
index 09e3e3795..c3542112a 100644
--- a/Patches/ChatCommandPatch.cs
+++ b/Patches/ChatCommandPatch.cs
@@ -3589,8 +3589,8 @@ internal static class UpdateCharCountPatch
__instance.charCountText.color = length switch
{
- < 1000 => Color.black,
- < 1200 => new(1f, 1f, 0f, 1f),
+ < 800 => Color.black,
+ < 1000 => Color.yellow,
_ => Color.red
};
}
diff --git a/Patches/ChatControlPatch.cs b/Patches/ChatControlPatch.cs
index 298e83bdd..b461b359a 100644
--- a/Patches/ChatControlPatch.cs
+++ b/Patches/ChatControlPatch.cs
@@ -60,7 +60,7 @@ internal static class ChatControllerUpdatePatch
if (!__instance.freeChatField.textArea.hasFocus) return;
- __instance.freeChatField.textArea.characterLimit = 1200;
+ __instance.freeChatField.textArea.characterLimit = 1000;
if (Input.GetKeyDown(KeyCode.Tab)) TextBoxPatch.OnTabPress(__instance);
diff --git a/Patches/GameOptionsMenuPatch.cs b/Patches/GameOptionsMenuPatch.cs
index 9a0d6a1dd..333694179 100644
--- a/Patches/GameOptionsMenuPatch.cs
+++ b/Patches/GameOptionsMenuPatch.cs
@@ -1098,6 +1098,20 @@ public static class GameSettingMenuPatch
presetTmp.fontSizeMax = presetTmp.fontSizeMin = size;
+ var gameSettingsLabel = __instance.GameSettingsButton.transform.parent.parent.FindChild("GameSettingsLabel").GetComponent();
+ gameSettingsLabel.DestroyTranslator();
+ gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n");
+ gameSettingsLabel.transform.localPosition += new Vector3(0f, 0.1f, 0f);
+
+ if (russian)
+ {
+ gameSettingsLabel.transform.localScale = new(0.7f, 0.7f, 1f);
+ gameSettingsLabel.transform.localPosition = new(-3.77f, 1.62f, -4);
+ }
+
+ Vector3 gameSettingsLabelPos = gameSettingsLabel.transform.localPosition;
+
+
GameObject tempMinus = GameObject.Find("MinusButton").gameObject;
cached = ExtraObjectsCache.TryGetValue(1, out cache);
GameObject gMinus = cached ? cache : ModGameOptionsMenu.Track(Object.Instantiate(__instance.GamePresetsButton.gameObject, preset.transform));
@@ -1127,6 +1141,7 @@ public static class GameSettingMenuPatch
GameOptionsMenuPatch.RefreshSettingValues();
GameOptionsMenuPatch.RefreshTabButtons();
presetTmp.SetText(Translator.GetString($"Preset_{OptionItem.CurrentPreset + 1}"));
+ gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n");
Logger.Info($"Current preset: {OptionItem.CurrentPreset + 1}", "GameOptionsMenuPatch");
ChangingPreset = false;
NotificationPopperPatch.AddSettingsChangeMessage(Options.Preset);
@@ -1144,8 +1159,8 @@ public static class GameSettingMenuPatch
selectedSprites.sprite = tempMinus.GetComponentInChildren().sprite;
inactiveSprites.color = new Color32(55, 59, 60, 255);
- activeSprites.color = new Color32(0, 255, 165, 255);
- selectedSprites.color = new Color32(0, 165, 255, 255);
+ activeSprites.color = new Color32(0, 165, 255, 255);
+ selectedSprites.color = new Color32(0, 255, 165, 255);
cached = ExtraObjectsCache.TryGetValue(2, out cache);
@@ -1176,6 +1191,7 @@ public static class GameSettingMenuPatch
GameOptionsMenuPatch.RefreshSettingValues();
GameOptionsMenuPatch.RefreshTabButtons();
presetTmp.SetText(Translator.GetString($"Preset_{OptionItem.CurrentPreset + 1}"));
+ gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n");
Logger.Info($"Current preset: {OptionItem.CurrentPreset + 1}", "GameOptionsMenuPatch");
ChangingPreset = false;
NotificationPopperPatch.AddSettingsChangeMessage(Options.Preset);
@@ -1187,30 +1203,16 @@ public static class GameSettingMenuPatch
GameObject.Find("PlayerOptionsMenu(Clone)").transform.FindChild("What Is This?").gameObject.SetActive(false);
- var gameSettingsLabel = __instance.GameSettingsButton.transform.parent.parent.FindChild("GameSettingsLabel").GetComponent();
- gameSettingsLabel.DestroyTranslator();
- gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n");
- gameSettingsLabel.transform.localPosition += new Vector3(0f, 0.1f, 0f);
-
- if (russian)
- {
- gameSettingsLabel.transform.localScale = new(0.7f, 0.7f, 1f);
- gameSettingsLabel.transform.localPosition = new(-3.77f, 1.62f, -4);
- }
-
- Vector3 gameSettingsLabelPos = gameSettingsLabel.transform.localPosition;
-
var gms = Main.CustomGameModeValues[..^1].ToList();
gms.Remove(CustomGameMode.TheMindGame);
-
+
if (SubmergedCompatibility.Loaded && Main.NormalOptions.MapId == 6)
- gms.RemoveAll(SubmergedCompatibility.IsNotSupported);
+ gms.Remove(CustomGameMode.NaturalDisasters);
if (Main.LIMap)
{
gms.Remove(CustomGameMode.CaptureTheFlag);
gms.Remove(CustomGameMode.Quiz);
- gms.Remove(CustomGameMode.TheMindGame);
gms.Remove(CustomGameMode.BedWars);
gms.Remove(CustomGameMode.Deathrace);
}
@@ -1232,12 +1234,13 @@ public static class GameSettingMenuPatch
gmButton.SetActive(true);
}
gmButton.transform.localPosition = new Vector3((((index / itemsPerCol) - ((totalCols - 1) / 2f)) * 1.4f) + 0.16f, gameSettingsLabelPos.y - 1.9f - (0.17f * (index % itemsPerCol)), -1f);
- gmButton.transform.localScale = new(0.35f, 0.22f, 1f);
+ gmButton.transform.localScale = new(0.4f, 0.22f, 1f);
+ var color = Main.GameModeColors[gm];
var gmButtonTmp = gmButton.transform.Find("FontPlacer/Text_TMP").GetComponent();
gmButtonTmp.alignment = TextAlignmentOptions.Center;
gmButtonTmp.DestroyTranslator();
gmButtonTmp.SetText(Translator.GetString(gm.ToString()).ToUpper());
- gmButtonTmp.color = Main.GameModeColors[gm];
+ gmButtonTmp.color = color;
gmButtonTmp.transform.localPosition = new(gameSettingsLabelPos.x + 3.35f, gameSettingsLabelPos.y - 1.62f, gameSettingsLabelPos.z);
gmButtonTmp.transform.localScale = new(1f, 1f, 1f);
@@ -1259,7 +1262,9 @@ public static class GameSettingMenuPatch
GameOptionsMenuPatch.RefreshCheckMarkColors();
gameSettingsLabel.SetText($"{Translator.GetString($"Mode{Options.CurrentGameMode}")}\n");
}));
- gmPassiveButton.activeTextColor = gmPassiveButton.inactiveTextColor = gmPassiveButton.disabledTextColor = gmPassiveButton.selectedTextColor = Main.GameModeColors[gm];
+ gmPassiveButton.activeTextColor = Utils.GetTextColor(color);
+ gmPassiveButton.inactiveTextColor = color;
+ gmPassiveButton.activeSprites.GetComponent().color = color;
GMButtons[gm] = gmButton;
}
@@ -1276,9 +1281,10 @@ public static class GameSettingMenuPatch
field.gameObject.SetActive(true);
}
field.transform.localScale = new(0.3f, 0.59f, 1);
- field.transform.localPosition = new(-0.7f, -2.5f, -5f);
+ field.transform.localPosition = new(-0.47f, 2.15f, -5f);
field.textArea.outputText.transform.localScale = new(3.5f, 2f, 1f);
field.textArea.outputText.font = plusLabel.font;
+ field.charCountText.enabled = false;
InputField = field;
diff --git a/Patches/TextBoxPatch.cs b/Patches/TextBoxPatch.cs
index d244425c2..db43286ad 100644
--- a/Patches/TextBoxPatch.cs
+++ b/Patches/TextBoxPatch.cs
@@ -323,6 +323,6 @@ public static class TextBoxPatch
public static void ModifyCharacterLimit(TextBoxTMP __instance)
{
if (!__instance.gameObject.HasParentInHierarchy("ChatScreenRoot/ChatScreenContainer")) return;
- __instance.characterLimit = 1200;
+ __instance.characterLimit = 1000;
}
}
\ No newline at end of file
diff --git a/SubmergedCompatibility.cs b/SubmergedCompatibility.cs
index e337d14b7..d53f0a7ed 100644
--- a/SubmergedCompatibility.cs
+++ b/SubmergedCompatibility.cs
@@ -259,11 +259,6 @@ public static class SubmergedCompatibility
return (IList)Activator.CreateInstance(genericListType);
}
- public static bool IsNotSupported(CustomGameMode mode)
- {
- return mode is CustomGameMode.NaturalDisasters;
- }
-
public enum SubmergedSystemTypes : byte
{
Research = 0x80, // 128