From 41f8d14a031579d24850448e5b1dd26584f0211a Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Thu, 25 Sep 2025 18:33:10 +0200
Subject: [PATCH 01/21] Support for New Create Game Menu
- CreateGameOptions has been removed because it is unnecessary.
- PingTracker has been removed, but replaced with the ReactorCredits.
Tested on versions 16.0.0 - 17.0.0 and everything works correctly.
---
src/AleLuduMod/AleLuduMod.csproj | 4 +-
src/AleLuduMod/AleLuduModPlugin.cs | 20 +-
.../Patches/CreateGameOptionsPatches.cs | 178 ------------------
src/AleLuduMod/Patches/GenericPatches.cs | 74 ++++++--
4 files changed, 69 insertions(+), 207 deletions(-)
delete mode 100644 src/AleLuduMod/Patches/CreateGameOptionsPatches.cs
diff --git a/src/AleLuduMod/AleLuduMod.csproj b/src/AleLuduMod/AleLuduMod.csproj
index 854a6e8..ca5a761 100644
--- a/src/AleLuduMod/AleLuduMod.csproj
+++ b/src/AleLuduMod/AleLuduMod.csproj
@@ -15,11 +15,11 @@
-
+
-
+
diff --git a/src/AleLuduMod/AleLuduModPlugin.cs b/src/AleLuduMod/AleLuduModPlugin.cs
index 1502d84..b8b0926 100644
--- a/src/AleLuduMod/AleLuduModPlugin.cs
+++ b/src/AleLuduMod/AleLuduModPlugin.cs
@@ -1,30 +1,26 @@
-using AmongUs.GameOptions;
-using BepInEx;
+using BepInEx;
+using BepInEx.Configuration;
using BepInEx.Unity.IL2CPP;
using HarmonyLib;
using Reactor;
-using BepInEx.Configuration;
-using System.Linq;
+using Reactor.Utilities;
namespace AleLuduMod;
-[BepInAutoPlugin("pl.townofus.aleludu")]
+[BepInAutoPlugin("pl.aleludumod.plugin")]
[BepInProcess("Among Us.exe")]
[BepInDependency(ReactorPlugin.Id)]
[BepInDependency("gg.reactor.debugger", BepInDependency.DependencyFlags.SoftDependency)] // fix debugger overwriting MinPlayers
-[BepInDependency("com.slushiegoose.townofus", BepInDependency.DependencyFlags.SoftDependency)] // load after town of us
public partial class AleLuduModPlugin : BasePlugin
{
- public const int MaxPlayers = 36;
- public const int MaxImpostors = 36 / 2;
+ public const int MaxPlayers = 35;
+ public const int MaxImpostors = MaxPlayers / 2;
public static ConfigEntry Force4Columns { get; set; }
private Harmony Harmony { get; } = new(Id);
public override void Load()
- {
- NormalGameOptionsV09.RecommendedImpostors = NormalGameOptionsV09.MaxImpostors = Enumerable.Repeat(36, 36).ToArray();
- NormalGameOptionsV09.MinPlayers = Enumerable.Repeat(4, 36).ToArray();
- HideNSeekGameOptionsV09.MinPlayers = Enumerable.Repeat(4, 36).ToArray();
+ {
+ ReactorCredits.Register(ReactorCredits.AlwaysShow);
Force4Columns = Config.Bind("Settings", "Force 4 columns", true, "Always display 4 columns in meeting, vitals, etc.");
diff --git a/src/AleLuduMod/Patches/CreateGameOptionsPatches.cs b/src/AleLuduMod/Patches/CreateGameOptionsPatches.cs
deleted file mode 100644
index 722f751..0000000
--- a/src/AleLuduMod/Patches/CreateGameOptionsPatches.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using AmongUs.GameOptions;
-using HarmonyLib;
-using Reactor.Utilities.Extensions;
-using System;
-using TMPro;
-using UnityEngine;
-
-namespace AleLuduMod.Patches;
-
-internal static class CreateGameOptionsPatches
-{
- [HarmonyPatch(typeof(CreateOptionsPicker), nameof(CreateOptionsPicker.Awake))]
- public static class CreateOptionsPicker_Awake
- {
- public static void Postfix(CreateOptionsPicker __instance)
- {
- if (__instance.mode != SettingsMode.Host) return;
-
- {
- var firstButtonRenderer = __instance.MaxPlayerButtons[0];
- firstButtonRenderer.GetComponentInChildren().text = "-";
- firstButtonRenderer.enabled = false;
-
- var firstButtonButton = firstButtonRenderer.GetComponent();
- firstButtonButton.OnClick.RemoveAllListeners();
- firstButtonButton.OnClick.AddListener((Action)(() =>
- {
- for (var i = 1; i < 11; i++)
- {
- var playerButton = __instance.MaxPlayerButtons[i];
-
- var tmp = playerButton.GetComponentInChildren();
- var newValue = Mathf.Max(byte.Parse(tmp.text) - 10, byte.Parse(playerButton.name) - 2);
- tmp.text = newValue.ToString();
- }
-
- __instance.UpdateMaxPlayersButtons(__instance.GetTargetOptions());
- }));
- firstButtonRenderer.Destroy();
-
- var lastButtonRenderer = __instance.MaxPlayerButtons[^1];
- lastButtonRenderer.GetComponentInChildren().text = "+";
- lastButtonRenderer.enabled = false;
-
- var lastButtonButton = lastButtonRenderer.GetComponent();
- lastButtonButton.OnClick.RemoveAllListeners();
- lastButtonButton.OnClick.AddListener((Action)(() =>
- {
- for (var i = 1; i < 11; i++)
- {
- var playerButton = __instance.MaxPlayerButtons[i];
-
- var tmp = playerButton.GetComponentInChildren();
- var newValue = Mathf.Min(byte.Parse(tmp.text) + 10,
- AleLuduModPlugin.MaxPlayers - 14 + byte.Parse(playerButton.name));
- tmp.text = newValue.ToString();
- }
-
- __instance.UpdateMaxPlayersButtons(__instance.GetTargetOptions());
- }));
- lastButtonRenderer.Destroy();
-
- for (var i = 1; i < 11; i++)
- {
- var playerButton = __instance.MaxPlayerButtons[i].GetComponent();
- var text = playerButton.GetComponentInChildren();
-
- playerButton.OnClick.RemoveAllListeners();
- playerButton.OnClick.AddListener((Action)(() =>
- {
- var maxPlayers = byte.Parse(text.text);
- var maxImp = Mathf.Min(__instance.GetTargetOptions().NumImpostors, maxPlayers / 2);
- __instance.GetTargetOptions().SetInt(Int32OptionNames.NumImpostors, maxImp);
- __instance.ImpostorButtons[1].TextMesh.text = maxImp.ToString();
- __instance.SetMaxPlayersButtons(maxPlayers);
- }));
- }
-
- foreach (var button in __instance.MaxPlayerButtons)
- {
- button.enabled = button.GetComponentInChildren().text == __instance.GetTargetOptions().MaxPlayers.ToString();
- }
- }
-
- if (__instance.GetTargetOptions().GameMode is GameModes.Normal or GameModes.NormalFools)
- {
- var secondButton = __instance.ImpostorButtons[1];
- secondButton.SpriteRenderer.enabled = false;
- secondButton.transform.FindChild("ConsoleHighlight").gameObject.Destroy();
- secondButton.PassiveButton.Destroy();
- secondButton.BoxCollider.Destroy();
-
- var secondButtonText = secondButton.TextMesh;
- secondButtonText.text = __instance.GetTargetOptions().NumImpostors.ToString();
-
- var firstButton = __instance.ImpostorButtons[0];
- firstButton.SpriteRenderer.enabled = false;
- firstButton.TextMesh.text = "-";
-
- var firstPassiveButton = firstButton.PassiveButton;
- firstPassiveButton.OnClick.RemoveAllListeners();
- firstPassiveButton.OnClick.AddListener((Action)(() =>
- {
- var newVal = Mathf.Clamp(
- byte.Parse(secondButtonText.text) - 1,
- 1,
- __instance.GetTargetOptions().MaxPlayers / 2
- );
- __instance.SetImpostorButtons(newVal);
- secondButtonText.text = newVal.ToString();
- }));
-
- var thirdButton = __instance.ImpostorButtons[2];
- thirdButton.SpriteRenderer.enabled = false;
- thirdButton.TextMesh.text = "+";
-
- var thirdPassiveButton = thirdButton.PassiveButton;
- thirdPassiveButton.OnClick.RemoveAllListeners();
- thirdPassiveButton.OnClick.AddListener((Action)(() =>
- {
- var newVal = Mathf.Clamp(
- byte.Parse(secondButtonText.text) + 1,
- 1,
- __instance.GetTargetOptions().MaxPlayers / 2
- );
- __instance.SetImpostorButtons(newVal);
- secondButtonText.text = newVal.ToString();
- }));
- }
- }
- }
-
- [HarmonyPatch(typeof(CreateOptionsPicker), nameof(CreateOptionsPicker.UpdateMaxPlayersButtons))]
- public static class CreateOptionsPicker_UpdateMaxPlayersButtons
- {
- public static bool Prefix(CreateOptionsPicker __instance, [HarmonyArgument(0)] IGameOptions opts)
- {
- if (__instance.mode != SettingsMode.Host) return true;
- if (__instance.CrewArea)
- {
- __instance.CrewArea.SetCrewSize(opts.MaxPlayers, opts.NumImpostors);
- }
-
- var selectedAsString = opts.MaxPlayers.ToString();
- for (var i = 1; i < __instance.MaxPlayerButtons.Count - 1; i++)
- {
- __instance.MaxPlayerButtons[i].enabled = __instance.MaxPlayerButtons[i].GetComponentInChildren().text == selectedAsString;
- }
-
- return false;
- }
- }
-
- [HarmonyPatch(typeof(CreateOptionsPicker), nameof(CreateOptionsPicker.UpdateImpostorsButtons))]
- public static class CreateOptionsPicker_UpdateImpostorsButtons
- {
- public static bool Prefix(CreateOptionsPicker __instance)
- {
- if (__instance.mode == SettingsMode.Host) return false;
- return true;
- }
- }
-
- [HarmonyPatch(typeof(CreateOptionsPicker), nameof(CreateOptionsPicker.Refresh))]
- public static class CreateOptionsPicker_Refresh
- {
- public static bool Prefix(CreateOptionsPicker __instance)
- {
- IGameOptions targetOptions = __instance.GetTargetOptions();
- __instance.UpdateImpostorsButtons(targetOptions.NumImpostors);
- __instance.UpdateMaxPlayersButtons(targetOptions);
- __instance.UpdateLanguageButton((uint)targetOptions.Keywords);
- __instance.MapMenu.UpdateMapButtons((int)targetOptions.MapId);
- __instance.GameModeText.text = DestroyableSingleton.Instance.GetString(GameModesHelpers.ModeToName[GameOptionsManager.Instance.CurrentGameOptions.GameMode]);
- return false;
- }
- }
-}
diff --git a/src/AleLuduMod/Patches/GenericPatches.cs b/src/AleLuduMod/Patches/GenericPatches.cs
index a18c20b..651d269 100644
--- a/src/AleLuduMod/Patches/GenericPatches.cs
+++ b/src/AleLuduMod/Patches/GenericPatches.cs
@@ -1,13 +1,14 @@
using AmongUs.GameOptions;
using HarmonyLib;
+using Il2CppInterop.Runtime.InteropTypes.Arrays;
+using Il2CppSystem.Reflection;
+using Reactor.Utilities;
using System.Linq;
namespace AleLuduMod.Patches;
internal static class GenericPatches
{
-
-
// I did not find a use of this method, but still patching for future updates
// maxExpectedPlayers is unknown, looks like server code tbh
[HarmonyPatch(typeof(LegacyGameOptions), nameof(LegacyGameOptions.AreInvalid))]
@@ -23,30 +24,73 @@ __instance.KillDistance is < 0 or > 2 ||
}
}
-
- [HarmonyPatch(typeof(PingTracker), nameof(PingTracker.Update))]
- public static class PingShowerPatch
+ [HarmonyPatch(typeof(GameStartManager), nameof(GameStartManager.Update))]
+ public static class GameStartManagerUpdatePatch
{
- public static void Postfix(PingTracker __instance)
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(CreateGameOptions), nameof(CreateGameOptions.Show))]
+ public static void CreateGameOptionsShowPostfix(CreateGameOptions __instance)
{
- __instance.text.text += "\ntownofus.pl";
+ var numberOption = __instance.gameObject.GetComponentInChildren(true);
+ if (numberOption != null)
+ {
+ numberOption.ValidRange.max = AleLuduModPlugin.MaxPlayers;
+ }
}
}
+ private static void TryAdjustOptionsRecommendations(GameOptionsManager manager)
+ {
+ const int MaxPlayers = AleLuduModPlugin.MaxPlayers;
+ var type = manager.GetGameOptions();
+ var options = manager.GameHostOptions.Cast();
- [HarmonyPatch(typeof(GameOptionsMenu), nameof(GameOptionsMenu.Initialize))]
- public static class GameOptionsMenu_Initialize
+ var maxRecommendation = ((Il2CppStructArray)Enumerable.Repeat(MaxPlayers, MaxPlayers + 1).ToArray())
+ .Cast();
+ var minRecommendation = ((Il2CppStructArray)Enumerable.Repeat(4, MaxPlayers + 1).ToArray())
+ .Cast();
+ var killRecommendation = ((Il2CppStructArray)Enumerable.Repeat(0, MaxPlayers + 1).ToArray())
+ .Cast();
+
+
+ const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static;
+ // all these fields are currently static, but we're doing a forward compat
+ // static fields ignore object param so non-null instance is ok
+ type.GetField("RecommendedImpostors", flags)?.SetValue(options, maxRecommendation);
+ type.GetField("MaxImpostors", flags)?.SetValue(options, maxRecommendation);
+ type.GetField("RecommendedKillCooldown", flags)?.SetValue(options, killRecommendation);
+ type.GetField("MinPlayers", flags)?.SetValue(options, minRecommendation);
+ }
+
+ [HarmonyPatch(typeof(GameOptionsManager), nameof(GameOptionsManager.GameHostOptions), MethodType.Setter)]
+ public static class GameOptionsManager_set_GameHostOptions
{
- public static void Postfix(GameOptionsMenu __instance)
+ public static void Postfix(GameOptionsManager __instance)
{
- var numberOptions = __instance.GetComponentsInChildren();
-
- var impostorsOption = numberOptions.FirstOrDefault(o => o.Title == StringNames.GameNumImpostors);
- if (impostorsOption != null)
+ try
{
- impostorsOption.ValidRange = new FloatRange(1, AleLuduModPlugin.MaxImpostors);
+ TryAdjustOptionsRecommendations(__instance);
}
+ catch (System.Exception e)
+ {
+ Logger.Error($"Failed to adjust options recommendations: {e}");
+ }
+ }
+ }
+ [HarmonyPatch(typeof(GameOptionsManager), nameof(GameOptionsManager.SwitchGameMode))]
+ public static class GameOptionsManager_SwitchGameMode
+ {
+ public static void Postfix(GameOptionsManager __instance)
+ {
+ try
+ {
+ TryAdjustOptionsRecommendations(__instance);
+ }
+ catch (System.Exception e)
+ {
+ Logger.Error($"Failed to adjust options recommendations: {e}");
+ }
}
}
}
From 9cef64d5db90bbdf413e5ef4f7f0a508db9b2939 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Fri, 26 Sep 2025 08:36:08 +0200
Subject: [PATCH 02/21] Revert one changes
---
src/AleLuduMod/AleLuduModPlugin.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/AleLuduMod/AleLuduModPlugin.cs b/src/AleLuduMod/AleLuduModPlugin.cs
index b8b0926..f94a1f9 100644
--- a/src/AleLuduMod/AleLuduModPlugin.cs
+++ b/src/AleLuduMod/AleLuduModPlugin.cs
@@ -7,7 +7,7 @@
namespace AleLuduMod;
-[BepInAutoPlugin("pl.aleludumod.plugin")]
+[BepInAutoPlugin("pl.townofus.aleludu")]
[BepInProcess("Among Us.exe")]
[BepInDependency(ReactorPlugin.Id)]
[BepInDependency("gg.reactor.debugger", BepInDependency.DependencyFlags.SoftDependency)] // fix debugger overwriting MinPlayers
From 7e86a78514a614ffeebab075856be4458f3ef8ce Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Fri, 26 Sep 2025 09:18:05 +0200
Subject: [PATCH 03/21] Update GenericPatches.cs
---
src/AleLuduMod/Patches/GenericPatches.cs | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/src/AleLuduMod/Patches/GenericPatches.cs b/src/AleLuduMod/Patches/GenericPatches.cs
index 651d269..3fd0a54 100644
--- a/src/AleLuduMod/Patches/GenericPatches.cs
+++ b/src/AleLuduMod/Patches/GenericPatches.cs
@@ -93,4 +93,20 @@ public static void Postfix(GameOptionsManager __instance)
}
}
}
+
+ [HarmonyPatch(typeof(GameOptionsMenu), nameof(GameOptionsMenu.Initialize))]
+ public static class GameOptionsMenu_Initialize
+ {
+ public static void Postfix(GameOptionsMenu __instance)
+ {
+ var numberOptions = __instance.GetComponentsInChildren();
+
+ var impostorsOption = numberOptions.FirstOrDefault(o => o.Title == StringNames.GameNumImpostors);
+ if (impostorsOption != null)
+ {
+ impostorsOption.ValidRange = new FloatRange(1, AleLuduModPlugin.MaxImpostors);
+ }
+
+ }
+ }
}
From f513093188421024ecf80ee2c5b6afd64e35087e Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Fri, 26 Sep 2025 09:18:46 +0200
Subject: [PATCH 04/21] Update GenericPatches.cs
---
src/AleLuduMod/Patches/GenericPatches.cs | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/AleLuduMod/Patches/GenericPatches.cs b/src/AleLuduMod/Patches/GenericPatches.cs
index 3fd0a54..b0506fe 100644
--- a/src/AleLuduMod/Patches/GenericPatches.cs
+++ b/src/AleLuduMod/Patches/GenericPatches.cs
@@ -106,7 +106,6 @@ public static void Postfix(GameOptionsMenu __instance)
{
impostorsOption.ValidRange = new FloatRange(1, AleLuduModPlugin.MaxImpostors);
}
-
}
}
}
From 7c54427c8ea19558bee75f47e6bbc42b3066e9fa Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Sat, 27 Sep 2025 21:29:39 +0200
Subject: [PATCH 05/21] Two new features.
- SecurityLoggerPatch on Mira HQ
- The server drop-down menu has been improved.
---
src/AleLuduMod/Patches/ChatCommands.cs | 3 +-
src/AleLuduMod/Patches/GenericPatches.cs | 11 +----
.../Patches/SecurityLoggerPatches.cs | 16 ++++++++
.../Patches/ServerDropdownPatches.cs | 40 +++++++++++++++++++
4 files changed, 59 insertions(+), 11 deletions(-)
create mode 100644 src/AleLuduMod/Patches/SecurityLoggerPatches.cs
create mode 100644 src/AleLuduMod/Patches/ServerDropdownPatches.cs
diff --git a/src/AleLuduMod/Patches/ChatCommands.cs b/src/AleLuduMod/Patches/ChatCommands.cs
index 1f2c481..97be01b 100644
--- a/src/AleLuduMod/Patches/ChatCommands.cs
+++ b/src/AleLuduMod/Patches/ChatCommands.cs
@@ -14,8 +14,7 @@ public class Commands
{
public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] PlayerControl sourcePlayer , ref string chatText)
{
- if (__instance != HudManager.Instance.Chat)
- return true;
+ if (__instance != HudManager.Instance.Chat) return true;
// After entering the command, when you try to join the lobby it will show "X/15". Only after the game is over will there be a larger lobby.
if (chatText.StartsWith("!limit "))
diff --git a/src/AleLuduMod/Patches/GenericPatches.cs b/src/AleLuduMod/Patches/GenericPatches.cs
index b0506fe..6ae23aa 100644
--- a/src/AleLuduMod/Patches/GenericPatches.cs
+++ b/src/AleLuduMod/Patches/GenericPatches.cs
@@ -2,7 +2,6 @@
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Reflection;
-using Reactor.Utilities;
using System.Linq;
namespace AleLuduMod.Patches;
@@ -71,10 +70,7 @@ public static void Postfix(GameOptionsManager __instance)
{
TryAdjustOptionsRecommendations(__instance);
}
- catch (System.Exception e)
- {
- Logger.Error($"Failed to adjust options recommendations: {e}");
- }
+ catch { }
}
}
@@ -87,10 +83,7 @@ public static void Postfix(GameOptionsManager __instance)
{
TryAdjustOptionsRecommendations(__instance);
}
- catch (System.Exception e)
- {
- Logger.Error($"Failed to adjust options recommendations: {e}");
- }
+ catch { }
}
}
diff --git a/src/AleLuduMod/Patches/SecurityLoggerPatches.cs b/src/AleLuduMod/Patches/SecurityLoggerPatches.cs
new file mode 100644
index 0000000..c6ea7e6
--- /dev/null
+++ b/src/AleLuduMod/Patches/SecurityLoggerPatches.cs
@@ -0,0 +1,16 @@
+using HarmonyLib;
+using Il2CppInterop.Runtime.InteropTypes.Arrays;
+
+namespace AleLuduMod.Patches;
+
+internal static class SecurityLoggerPatches
+{
+ [HarmonyPatch(typeof(SecurityLogger), nameof(SecurityLogger.Awake))]
+ public static class SecurityLoggerPatch
+ {
+ public static void Postfix(SecurityLogger __instance)
+ {
+ __instance.Timers = new Il2CppStructArray(AleLuduModPlugin.MaxPlayers);
+ }
+ }
+}
diff --git a/src/AleLuduMod/Patches/ServerDropdownPatches.cs b/src/AleLuduMod/Patches/ServerDropdownPatches.cs
new file mode 100644
index 0000000..6ca86be
--- /dev/null
+++ b/src/AleLuduMod/Patches/ServerDropdownPatches.cs
@@ -0,0 +1,40 @@
+using HarmonyLib;
+using Il2CppInterop.Runtime.InteropTypes.Arrays;
+using System;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+namespace AleLuduMod.Patches;
+
+[HarmonyPatch(typeof(ServerDropdown), nameof(ServerDropdown.FillServerOptions))]
+public static class ServerDropdownPatches
+{
+ public static bool Prefix(ServerDropdown __instance)
+ {
+ if (SceneManager.GetActiveScene().name == "FindAGame") return true;
+ SpriteRenderer bg = __instance.background;
+ bg.size = new Vector2(4, 1);
+ ServerManager sm = ServerManager.Instance;
+ TranslationController tc = TranslationController.Instance;
+ int totalCols = Mathf.Max(1, Mathf.CeilToInt(sm.AvailableRegions.Length / (float)5));
+ int rowLimit = Mathf.Min(sm.AvailableRegions.Length, 5);
+
+ for (var index = 0; index < sm.AvailableRegions.Length; index++)
+ {
+ IRegionInfo ri = sm.AvailableRegions[index];
+ var b = __instance.ButtonPool.Get();
+ b.transform.localPosition = new Vector3(((index / 5) - ((totalCols - 1) / 2f)) * 3.15f, __instance.y_posButton - (0.5f * (index % 5)), -1f);
+ b.Text.text = tc.GetStringWithDefault(ri.TranslateName, ri.Name, new Il2CppReferenceArray(0));
+ b.Text.ForceMeshUpdate();
+ b.Button.OnClick.RemoveAllListeners();
+ b.Button.OnClick.AddListener((Action)(() => __instance.ChooseOption(ri)));
+ __instance.controllerSelectable.Add(b.Button);
+ }
+
+ float h = 1.2f + (0.5f * (rowLimit - 1));
+ float w = totalCols > 1 ? (3.15f * (totalCols - 1)) + bg.size.x : bg.size.x;
+ bg.transform.localPosition = new Vector3(0f, __instance.initialYPos - ((h - 1.2f) / 2f), 0f);
+ bg.size = new Vector2(w, h);
+ return false;
+ }
+}
\ No newline at end of file
From a7e9f3464deff1923a9c538d60d1647518cbe082 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Wed, 1 Oct 2025 17:14:34 +0200
Subject: [PATCH 06/21] Cleaning code
---
.../Components/MeetingHudBehaviour.cs | 27 +++++--------------
.../Components/ShapeshifterMenuBehaviour.cs | 26 +++++++-----------
.../Components/VitalsHudBehaviour.cs | 9 +------
3 files changed, 17 insertions(+), 45 deletions(-)
diff --git a/src/AleLuduMod/Components/MeetingHudBehaviour.cs b/src/AleLuduMod/Components/MeetingHudBehaviour.cs
index ec3d4ce..5bed6ee 100644
--- a/src/AleLuduMod/Components/MeetingHudBehaviour.cs
+++ b/src/AleLuduMod/Components/MeetingHudBehaviour.cs
@@ -10,10 +10,7 @@ namespace AleLuduMod.Components;
[RegisterInIl2Cpp]
public class MeetingHudBehaviour : MonoBehaviour
{
- public MeetingHudBehaviour(IntPtr ptr) : base(ptr)
- {
- }
-
+ public MeetingHudBehaviour(IntPtr ptr) : base(ptr) {}
internal MeetingHud meetingHud = null!;
[HideFromIl2Cpp]
@@ -21,31 +18,21 @@ public MeetingHudBehaviour(IntPtr ptr) : base(ptr)
public void Start()
{
-
- if (Targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value)
- {
- // dont change layout if players count is below 16
- return;
- }
-
+ if (Targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value) return; // dont change layout if players count is below 16
var i = 0;
foreach (var button in Targets)
{
-
button.gameObject.SetActive(true);
-
var row = i / 4;
var col = i % 4;
var buttonTransform = button.transform;
buttonTransform.localScale *= 0.75f;
- buttonTransform.localPosition = meetingHud.VoteOrigin +
- new Vector3(
- meetingHud.VoteButtonOffsets.x * col * 0.75f - 0.375f,
- meetingHud.VoteButtonOffsets.y * row * 0.75f,
- buttonTransform.localPosition.z
- );
+ buttonTransform.localPosition = meetingHud.VoteOrigin + new Vector3(
+ meetingHud.VoteButtonOffsets.x * col * 0.75f - 0.375f,
+ meetingHud.VoteButtonOffsets.y * row * 0.75f,
+ buttonTransform.localPosition.z
+ );
i++;
}
}
-
}
diff --git a/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs b/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
index b52a698..0a91b4d 100644
--- a/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
+++ b/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
@@ -1,8 +1,8 @@
-using System;
+using Il2CppInterop.Runtime.Attributes;
+using Reactor.Utilities.Attributes;
+using System;
using System.Collections.Generic;
using System.Linq;
-using Il2CppInterop.Runtime.Attributes;
-using Reactor.Utilities.Attributes;
using UnityEngine;
namespace AleLuduMod.Components;
@@ -10,27 +10,19 @@ namespace AleLuduMod.Components;
[RegisterInIl2Cpp]
public class ShapeshifterBehaviour : MonoBehaviour
{
- public ShapeshifterBehaviour(IntPtr ptr) : base(ptr)
- {
- }
+ public ShapeshifterBehaviour(IntPtr ptr) : base(ptr){}
+ internal ShapeshifterMinigame shapeshifterMinigame = null!;
- public ShapeshifterMinigame shapeshifterMinigame = null!;
- [HideFromIl2Cpp] public IEnumerable Targets => shapeshifterMinigame.potentialVictims.ToArray();
+ [HideFromIl2Cpp]
+ public IEnumerable Targets => shapeshifterMinigame.potentialVictims.ToArray();
public void Start()
{
- if (Targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value)
- {
- // dont change layout if players count is below 16
- return;
- }
-
+ if (Targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value) return; // dont change layout if players count is below 16
var i = 0;
-
foreach (var panel in Targets)
{
panel.gameObject.SetActive(true);
-
var row = i / 4;
var col = i % 4;
var buttonTransform = panel.transform;
@@ -39,7 +31,7 @@ public void Start()
shapeshifterMinigame.XStart + shapeshifterMinigame.XOffset * col * 0.75f - 0.375f,
shapeshifterMinigame.YStart + shapeshifterMinigame.YOffset * row * 0.75f,
buttonTransform.localPosition.z
- );
+ );
i++;
}
}
diff --git a/src/AleLuduMod/Components/VitalsHudBehaviour.cs b/src/AleLuduMod/Components/VitalsHudBehaviour.cs
index c0e4d46..7c3e7e1 100644
--- a/src/AleLuduMod/Components/VitalsHudBehaviour.cs
+++ b/src/AleLuduMod/Components/VitalsHudBehaviour.cs
@@ -11,7 +11,6 @@ namespace AleLuduMod.Components;
public class VitalsHudBehaviour : MonoBehaviour
{
public VitalsHudBehaviour(IntPtr ptr) : base(ptr) {}
-
internal VitalsMinigame vitalsMinigame = null!;
[HideFromIl2Cpp]
@@ -19,13 +18,7 @@ public VitalsHudBehaviour(IntPtr ptr) : base(ptr) {}
public void Start()
{
-
- if (Targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value)
- {
- // dont change layout if players count is below 16
- return;
- }
-
+ if (Targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value) return; // dont change layout if players count is below 16
var i = 0;
foreach (var panel in Targets)
{
From ae7243c5a40c6393633a446763793d7fbaf0e835 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Thu, 2 Oct 2025 20:14:56 +0200
Subject: [PATCH 07/21] You can no longer use !limit during a round.
---
.../Components/MeetingHudBehaviour.cs | 2 +-
.../Components/ShapeshifterMenuBehaviour.cs | 2 +-
.../Components/VitalsHudBehaviour.cs | 10 ++++----
src/AleLuduMod/Patches/ChatCommands.cs | 23 +++++++++++--------
4 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/src/AleLuduMod/Components/MeetingHudBehaviour.cs b/src/AleLuduMod/Components/MeetingHudBehaviour.cs
index 5bed6ee..2a32032 100644
--- a/src/AleLuduMod/Components/MeetingHudBehaviour.cs
+++ b/src/AleLuduMod/Components/MeetingHudBehaviour.cs
@@ -10,7 +10,7 @@ namespace AleLuduMod.Components;
[RegisterInIl2Cpp]
public class MeetingHudBehaviour : MonoBehaviour
{
- public MeetingHudBehaviour(IntPtr ptr) : base(ptr) {}
+ public MeetingHudBehaviour(IntPtr ptr) : base(ptr) { }
internal MeetingHud meetingHud = null!;
[HideFromIl2Cpp]
diff --git a/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs b/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
index 0a91b4d..546b0db 100644
--- a/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
+++ b/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
@@ -10,7 +10,7 @@ namespace AleLuduMod.Components;
[RegisterInIl2Cpp]
public class ShapeshifterBehaviour : MonoBehaviour
{
- public ShapeshifterBehaviour(IntPtr ptr) : base(ptr){}
+ public ShapeshifterBehaviour(IntPtr ptr) : base(ptr) { }
internal ShapeshifterMinigame shapeshifterMinigame = null!;
[HideFromIl2Cpp]
diff --git a/src/AleLuduMod/Components/VitalsHudBehaviour.cs b/src/AleLuduMod/Components/VitalsHudBehaviour.cs
index 7c3e7e1..582b624 100644
--- a/src/AleLuduMod/Components/VitalsHudBehaviour.cs
+++ b/src/AleLuduMod/Components/VitalsHudBehaviour.cs
@@ -10,7 +10,7 @@ namespace AleLuduMod.Components;
[RegisterInIl2Cpp]
public class VitalsHudBehaviour : MonoBehaviour
{
- public VitalsHudBehaviour(IntPtr ptr) : base(ptr) {}
+ public VitalsHudBehaviour(IntPtr ptr) : base(ptr) { }
internal VitalsMinigame vitalsMinigame = null!;
[HideFromIl2Cpp]
@@ -28,10 +28,10 @@ public void Start()
var panelTransform = panel.transform;
panelTransform.localScale *= 0.75f;
panelTransform.localPosition = new Vector3(
- vitalsMinigame.XStart + vitalsMinigame.XOffset * (col * 0.75f - 0.25f),
- vitalsMinigame.YStart + vitalsMinigame.YOffset * row * 0.75f,
- panelTransform.localPosition.z
- );
+ vitalsMinigame.XStart + vitalsMinigame.XOffset * (col * 0.75f - 0.25f),
+ vitalsMinigame.YStart + vitalsMinigame.YOffset * row * 0.75f,
+ panelTransform.localPosition.z
+ );
i++;
}
}
diff --git a/src/AleLuduMod/Patches/ChatCommands.cs b/src/AleLuduMod/Patches/ChatCommands.cs
index 97be01b..fec3428 100644
--- a/src/AleLuduMod/Patches/ChatCommands.cs
+++ b/src/AleLuduMod/Patches/ChatCommands.cs
@@ -19,7 +19,16 @@ public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] Player
// After entering the command, when you try to join the lobby it will show "X/15". Only after the game is over will there be a larger lobby.
if (chatText.StartsWith("!limit "))
{
- if (GameData.Instance.GetHost() == sourcePlayer.Data)
+ if ((AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started || AmongUsClient.Instance.NetworkMode == NetworkModes.FreePlay) && sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
+ {
+ if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
+ {
+ chatText = "You cannot use this command during the game!";
+ error = true;
+ }
+ return sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId;
+ }
+ if (GameData.Instance.GetHost() == sourcePlayer.Data && sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
string[] args = chatText.Split(' ');
if (args.Length > 1 && int.TryParse(args[1], out int newLimit))
@@ -31,10 +40,9 @@ public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] Player
GameOptionsManager.Instance.CurrentGameOptions.SetInt(Int32OptionNames.MaxPlayers, newLimit);
if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
+ chatText = $"Player limit has been set for: {newLimit}";
system = true;
- HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"A player limit has been set for: {newLimit}");
}
- return false;
}
catch { }
}
@@ -42,20 +50,18 @@ public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] Player
{
if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
+ chatText = "The !limit command has a range of 4 - 35!";
error = true;
- HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "The limit must be between 4 and 35.");
}
- return false;
}
}
else
{
if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
+ chatText = "Use !limit [number]. Example: !limit 20";
error = true;
- HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "Use !limit [number]. Example: !limit 20");
}
- return false;
}
}
else if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
@@ -63,9 +69,8 @@ public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] Player
if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
noaccess = true;
- HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "You don't have access to this command!");
+ chatText = "You don't have access to this command!";
}
- return false;
}
return sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId;
}
From ca8f947d0361e3558e876bd82d87efc2cb8f06dd Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Fri, 3 Oct 2025 18:26:59 +0200
Subject: [PATCH 08/21] Update ChatCommands.cs
---
src/AleLuduMod/Patches/ChatCommands.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/AleLuduMod/Patches/ChatCommands.cs b/src/AleLuduMod/Patches/ChatCommands.cs
index fec3428..20e9843 100644
--- a/src/AleLuduMod/Patches/ChatCommands.cs
+++ b/src/AleLuduMod/Patches/ChatCommands.cs
@@ -68,8 +68,8 @@ public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] Player
{
if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
- noaccess = true;
chatText = "You don't have access to this command!";
+ noaccess = true;
}
}
return sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId;
From 2c907e49632e6ff1dedd06fced378db39038d216 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Mon, 6 Oct 2025 16:52:08 +0200
Subject: [PATCH 09/21] Rewrite Server Dropdown
---
src/AleLuduMod/Patches/ServerDropdownPatch.cs | 69 +++++++++++++++++++
.../Patches/ServerDropdownPatches.cs | 40 -----------
2 files changed, 69 insertions(+), 40 deletions(-)
create mode 100644 src/AleLuduMod/Patches/ServerDropdownPatch.cs
delete mode 100644 src/AleLuduMod/Patches/ServerDropdownPatches.cs
diff --git a/src/AleLuduMod/Patches/ServerDropdownPatch.cs b/src/AleLuduMod/Patches/ServerDropdownPatch.cs
new file mode 100644
index 0000000..023faa6
--- /dev/null
+++ b/src/AleLuduMod/Patches/ServerDropdownPatch.cs
@@ -0,0 +1,69 @@
+using System.Linq;
+using HarmonyLib;
+using UnityEngine;
+using UnityEngine.Events;
+using UnityEngine.SceneManagement;
+
+namespace AleLuduMod.Patches;
+
+[HarmonyPatch(typeof(ServerDropdown), nameof(ServerDropdown.FillServerOptions))]
+public static class ServerDropdownPatch
+{
+ public static bool RegionEquals(this IRegionInfo region, IRegionInfo other)
+ {
+ return region.Name == other.Name &&
+ region.TranslateName == other.TranslateName &&
+ region.PingServer == other.PingServer &&
+ region.TargetServer == other.TargetServer &&
+ region.Servers.All(s => other.Servers.Any(x => x.Equals(s)));
+ }
+
+ public static bool Prefix(ServerDropdown __instance)
+ {
+ var num = 0;
+ __instance.background.size = new Vector2(8.4f, 4.8f);
+
+ foreach (var regionInfo in ServerManager.Instance.AvailableRegions)
+ {
+ var findingGame = SceneManager.GetActiveScene().name is "FindAGame";
+
+ if (ServerManager.Instance.CurrentRegion.RegionEquals(regionInfo))
+ {
+ __instance.defaultButtonSelected = __instance.firstOption;
+ __instance.firstOption.ChangeButtonText(
+ TranslationController.Instance.GetStringWithDefault(
+ regionInfo.TranslateName,
+ regionInfo.Name));
+ }
+ else
+ {
+ var region = regionInfo;
+ var serverListButton = __instance.ButtonPool.Get();
+ var x = num % 2 == 0 ? -2 : 2;
+ if (findingGame)
+ {
+ x += 2;
+ }
+ var y = -0.55f * (num / 2f);
+ serverListButton.transform.localPosition = new Vector3(x, __instance.y_posButton + y, -1f);
+ serverListButton.transform.localScale = Vector3.one;
+ serverListButton.Text.text =
+ TranslationController.Instance.GetStringWithDefault(
+ regionInfo.TranslateName,
+ regionInfo.Name);
+ serverListButton.Text.ForceMeshUpdate();
+ serverListButton.Button.OnClick.RemoveAllListeners();
+ serverListButton.Button.OnClick.AddListener((UnityAction)(() => { __instance.ChooseOption(region); }));
+ __instance.controllerSelectable.Add(serverListButton.Button);
+ __instance.background.transform.localPosition = new Vector3(
+ findingGame ? 2f : 0f,
+ __instance.initialYPos + -0.3f * (num / 2f),
+ 0f);
+ __instance.background.size = new Vector2(__instance.background.size.x, 1.2f + 0.6f * (num / 2f));
+ num++;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/Patches/ServerDropdownPatches.cs b/src/AleLuduMod/Patches/ServerDropdownPatches.cs
deleted file mode 100644
index 6ca86be..0000000
--- a/src/AleLuduMod/Patches/ServerDropdownPatches.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using HarmonyLib;
-using Il2CppInterop.Runtime.InteropTypes.Arrays;
-using System;
-using UnityEngine;
-using UnityEngine.SceneManagement;
-
-namespace AleLuduMod.Patches;
-
-[HarmonyPatch(typeof(ServerDropdown), nameof(ServerDropdown.FillServerOptions))]
-public static class ServerDropdownPatches
-{
- public static bool Prefix(ServerDropdown __instance)
- {
- if (SceneManager.GetActiveScene().name == "FindAGame") return true;
- SpriteRenderer bg = __instance.background;
- bg.size = new Vector2(4, 1);
- ServerManager sm = ServerManager.Instance;
- TranslationController tc = TranslationController.Instance;
- int totalCols = Mathf.Max(1, Mathf.CeilToInt(sm.AvailableRegions.Length / (float)5));
- int rowLimit = Mathf.Min(sm.AvailableRegions.Length, 5);
-
- for (var index = 0; index < sm.AvailableRegions.Length; index++)
- {
- IRegionInfo ri = sm.AvailableRegions[index];
- var b = __instance.ButtonPool.Get();
- b.transform.localPosition = new Vector3(((index / 5) - ((totalCols - 1) / 2f)) * 3.15f, __instance.y_posButton - (0.5f * (index % 5)), -1f);
- b.Text.text = tc.GetStringWithDefault(ri.TranslateName, ri.Name, new Il2CppReferenceArray(0));
- b.Text.ForceMeshUpdate();
- b.Button.OnClick.RemoveAllListeners();
- b.Button.OnClick.AddListener((Action)(() => __instance.ChooseOption(ri)));
- __instance.controllerSelectable.Add(b.Button);
- }
-
- float h = 1.2f + (0.5f * (rowLimit - 1));
- float w = totalCols > 1 ? (3.15f * (totalCols - 1)) + bg.size.x : bg.size.x;
- bg.transform.localPosition = new Vector3(0f, __instance.initialYPos - ((h - 1.2f) / 2f), 0f);
- bg.size = new Vector2(w, h);
- return false;
- }
-}
\ No newline at end of file
From dbfc3997e12cd8742db9d9299ca1600913dfc722 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Sun, 8 Mar 2026 23:48:28 +0100
Subject: [PATCH 10/21] v1.1.1 Source Code
---
src/AleLuduMod/AleLuduMod.csproj | 4 +-
src/AleLuduMod/AleLuduModPlugin.cs | 2 +
.../Components/MeetingHudBehaviour.cs | 2 +-
.../Components/ShapeshifterMenuBehaviour.cs | 2 +-
.../Components/VitalsHudBehaviour.cs | 4 +-
src/AleLuduMod/ModCompatibility.cs | 75 +++++++++++++++++++
src/AleLuduMod/Patches/ChatCommands.cs | 4 +-
src/AleLuduMod/Patches/GenericPatches.cs | 34 ++++-----
.../Patches/SecurityLoggerPatches.cs | 2 +-
src/AleLuduMod/Patches/ServerDropdownPatch.cs | 4 +-
10 files changed, 103 insertions(+), 30 deletions(-)
create mode 100644 src/AleLuduMod/ModCompatibility.cs
diff --git a/src/AleLuduMod/AleLuduMod.csproj b/src/AleLuduMod/AleLuduMod.csproj
index ca5a761..32f527c 100644
--- a/src/AleLuduMod/AleLuduMod.csproj
+++ b/src/AleLuduMod/AleLuduMod.csproj
@@ -2,7 +2,7 @@
net6.0
- 1.1.0
+ 1.1.1
townofus.pl, OrzechMC, Bubeu, gitq
latest
@@ -11,7 +11,7 @@
Steam
- 2025.3.25
+ 2025.9.9
diff --git a/src/AleLuduMod/AleLuduModPlugin.cs b/src/AleLuduMod/AleLuduModPlugin.cs
index f94a1f9..e091921 100644
--- a/src/AleLuduMod/AleLuduModPlugin.cs
+++ b/src/AleLuduMod/AleLuduModPlugin.cs
@@ -22,6 +22,8 @@ public override void Load()
{
ReactorCredits.Register(ReactorCredits.AlwaysShow);
+ IL2CPPChainloader.Instance.Finished += ModCompatibility.Initialize;
+
Force4Columns = Config.Bind("Settings", "Force 4 columns", true, "Always display 4 columns in meeting, vitals, etc.");
Harmony.PatchAll();
diff --git a/src/AleLuduMod/Components/MeetingHudBehaviour.cs b/src/AleLuduMod/Components/MeetingHudBehaviour.cs
index 2a32032..1f6b037 100644
--- a/src/AleLuduMod/Components/MeetingHudBehaviour.cs
+++ b/src/AleLuduMod/Components/MeetingHudBehaviour.cs
@@ -35,4 +35,4 @@ public void Start()
i++;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs b/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
index 546b0db..aa7cf73 100644
--- a/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
+++ b/src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
@@ -13,7 +13,7 @@ public class ShapeshifterBehaviour : MonoBehaviour
public ShapeshifterBehaviour(IntPtr ptr) : base(ptr) { }
internal ShapeshifterMinigame shapeshifterMinigame = null!;
- [HideFromIl2Cpp]
+ [HideFromIl2Cpp]
public IEnumerable Targets => shapeshifterMinigame.potentialVictims.ToArray();
public void Start()
diff --git a/src/AleLuduMod/Components/VitalsHudBehaviour.cs b/src/AleLuduMod/Components/VitalsHudBehaviour.cs
index 582b624..8329d9c 100644
--- a/src/AleLuduMod/Components/VitalsHudBehaviour.cs
+++ b/src/AleLuduMod/Components/VitalsHudBehaviour.cs
@@ -29,10 +29,10 @@ public void Start()
panelTransform.localScale *= 0.75f;
panelTransform.localPosition = new Vector3(
vitalsMinigame.XStart + vitalsMinigame.XOffset * (col * 0.75f - 0.25f),
- vitalsMinigame.YStart + vitalsMinigame.YOffset * row * 0.75f,
+ vitalsMinigame.YStart + vitalsMinigame.YOffset * row * 0.75f,
panelTransform.localPosition.z
);
i++;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/ModCompatibility.cs b/src/AleLuduMod/ModCompatibility.cs
new file mode 100644
index 0000000..7504571
--- /dev/null
+++ b/src/AleLuduMod/ModCompatibility.cs
@@ -0,0 +1,75 @@
+using BepInEx.Unity.IL2CPP;
+using HarmonyLib;
+using Reactor.Utilities;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using UnityEngine;
+
+namespace AleLuduMod;
+
+public static class ModCompatibility
+{
+ public const string MiraApiGuid = "mira.api";
+ public static bool MiraApiLoaded { get; private set; }
+ private static BasePlugin MiraApiPlugin { get; set; }
+ private static Assembly MiraApiAssembly { get; set; }
+ private static Type[] MiraApiTypes { get; set; }
+ public static float XStart = -0.8f;
+ public static float YStart = 2.15f;
+ public static float XOffset = 1.95f;
+ public static float YOffset = -0.65f;
+
+ public static void Initialize()
+ {
+ InitMiraApi();
+ }
+
+ private static void InitMiraApi()
+ {
+ if (!IL2CPPChainloader.Instance.Plugins.TryGetValue(MiraApiGuid, out var value))
+ {
+ return;
+ }
+
+ MiraApiPlugin = (value.Instance as BasePlugin)!;
+ MiraApiAssembly = MiraApiPlugin.GetType().Assembly;
+
+ MiraApiTypes = AccessTools.GetTypesFromAssembly(MiraApiAssembly);
+
+ var playerMenu = MiraApiTypes.First(t => t.Name == "CustomPlayerMenu");
+ var menuBegin = AccessTools.Method(playerMenu, "Begin", new[] { typeof(Func), typeof(Action) });
+
+ var compatType = typeof(ModCompatibility);
+ var harmony = new Harmony("aleludu.miraapi.patch");
+ harmony.Patch(menuBegin, null,
+ new HarmonyMethod(AccessTools.Method(compatType, nameof(BeginPostfix))));
+
+ MiraApiLoaded = true;
+ Logger.Message("MiraAPI was detected and patched");
+ }
+ public static void BeginPostfix(dynamic __instance, Func playerMatch, Action onClick)
+ {
+ var targets = __instance.potentialVictims as List;
+ if (targets == null || targets.Count() < 16 && !AleLuduModPlugin.Force4Columns.Value) return;
+
+ var i = 0;
+
+ foreach (var panel in targets)
+ {
+ panel.gameObject.SetActive(true);
+
+ var row = i / 4;
+ var col = i % 4;
+ var buttonTransform = panel.transform;
+ buttonTransform.localScale *= 0.75f;
+ buttonTransform.localPosition = new Vector3(
+ XStart + XOffset * col * 1.1f - 2.4f,
+ YStart + YOffset * row * 0.9255f - 0.65f,
+ buttonTransform.localPosition.z
+ );
+ i++;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/Patches/ChatCommands.cs b/src/AleLuduMod/Patches/ChatCommands.cs
index 20e9843..80a5265 100644
--- a/src/AleLuduMod/Patches/ChatCommands.cs
+++ b/src/AleLuduMod/Patches/ChatCommands.cs
@@ -12,7 +12,7 @@ public class ChatCommands
[HarmonyPatch(typeof(ChatController), nameof(ChatController.AddChat))]
public class Commands
{
- public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] PlayerControl sourcePlayer , ref string chatText)
+ public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] PlayerControl sourcePlayer, ref string chatText)
{
if (__instance != HudManager.Instance.Chat) return true;
@@ -117,4 +117,4 @@ public static bool Prefix(ChatBubble __instance)
}
}
}
-}
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/Patches/GenericPatches.cs b/src/AleLuduMod/Patches/GenericPatches.cs
index 6ae23aa..c322f34 100644
--- a/src/AleLuduMod/Patches/GenericPatches.cs
+++ b/src/AleLuduMod/Patches/GenericPatches.cs
@@ -66,11 +66,7 @@ public static class GameOptionsManager_set_GameHostOptions
{
public static void Postfix(GameOptionsManager __instance)
{
- try
- {
- TryAdjustOptionsRecommendations(__instance);
- }
- catch { }
+ TryAdjustOptionsRecommendations(__instance);
}
}
@@ -79,26 +75,26 @@ public static class GameOptionsManager_SwitchGameMode
{
public static void Postfix(GameOptionsManager __instance)
{
- try
- {
- TryAdjustOptionsRecommendations(__instance);
- }
- catch { }
+ TryAdjustOptionsRecommendations(__instance);
}
}
- [HarmonyPatch(typeof(GameOptionsMenu), nameof(GameOptionsMenu.Initialize))]
- public static class GameOptionsMenu_Initialize
+ [HarmonyPatch(typeof(GameManager), nameof(GameManager.Awake))]
+ public static class GameManager_Awake
{
- public static void Postfix(GameOptionsMenu __instance)
+ public static void Postfix(GameManager __instance)
{
- var numberOptions = __instance.GetComponentsInChildren();
-
- var impostorsOption = numberOptions.FirstOrDefault(o => o.Title == StringNames.GameNumImpostors);
- if (impostorsOption != null)
+ foreach (var category in __instance.GameSettingsList.AllCategories)
{
- impostorsOption.ValidRange = new FloatRange(1, AleLuduModPlugin.MaxImpostors);
+ foreach (var option in category.AllGameSettings)
+ {
+ if (option is IntGameSetting intOption && option.Title == StringNames.GameNumImpostors)
+ {
+ intOption.ValidRange = new IntRange(1, AleLuduModPlugin.MaxImpostors);
+ return;
+ }
+ }
}
}
}
-}
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/Patches/SecurityLoggerPatches.cs b/src/AleLuduMod/Patches/SecurityLoggerPatches.cs
index c6ea7e6..727feeb 100644
--- a/src/AleLuduMod/Patches/SecurityLoggerPatches.cs
+++ b/src/AleLuduMod/Patches/SecurityLoggerPatches.cs
@@ -13,4 +13,4 @@ public static void Postfix(SecurityLogger __instance)
__instance.Timers = new Il2CppStructArray(AleLuduModPlugin.MaxPlayers);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/AleLuduMod/Patches/ServerDropdownPatch.cs b/src/AleLuduMod/Patches/ServerDropdownPatch.cs
index 023faa6..7785ec3 100644
--- a/src/AleLuduMod/Patches/ServerDropdownPatch.cs
+++ b/src/AleLuduMod/Patches/ServerDropdownPatch.cs
@@ -1,5 +1,5 @@
-using System.Linq;
-using HarmonyLib;
+using HarmonyLib;
+using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
From 78b8a8809e4d6a71b6c7f52bece7dab50b8efe05 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Mon, 9 Mar 2026 00:41:09 +0100
Subject: [PATCH 11/21] Update README.md
Updated README to clarify features of the mod.
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 427a283..550550e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[Our Discord](https://discord.townofus.pl)
# AleLuduMod
-This mod unlocks the possibility to show more than 15 players on screen during an emergency meeting, on vitals, and on the Transporter/Glitch screen.
+This mod unlocks the possibility to show more than 15 players on screen during an emergency meeting, vitals and shapeshifter menu.
Works on **latest** Among Us Steam version.
From dfa9d7901c160053fca3ddd10bcdb5054d96cd78 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Mon, 9 Mar 2026 18:59:16 +0100
Subject: [PATCH 12/21] Update README.md
---
README.md | 56 +++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 42 insertions(+), 14 deletions(-)
diff --git a/README.md b/README.md
index 550550e..961ca90 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,59 @@
-[Our Discord](https://discord.townofus.pl)
+
+
+
+
+
+
+
+
+
+
+
+
+
# AleLuduMod
-This mod unlocks the possibility to show more than 15 players on screen during an emergency meeting, vitals and shapeshifter menu.
+This mod unlocks the possibility to show more than 15 players on screen during an meeting hud, vitals and shapeshifter menu.
Works on **latest** Among Us Steam version.
+> ### :warning: **WARNING** :warning:
+> AleLuduMod **doesn't** work with official servers from Innersloth. It is recommended to use modded servers.
+
## Presentation

## Versions
-| Mod version | Downloads | Notes |
-|-------------|---------------------------------------------------------------------------------------------|-------|
-| v1.0.6 | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.6/AleLuduMod.dll) | |
-| v1.0.5.beta | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.5.beta/AleLuduMod.dll) | Doesn't include creating 15+ players lobby. |
-| v1.0.4 | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.4/AleLuduMod.dll) | |
-| v1.0.3 | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.3/AleLuduMod.dll) | |
-| v1.0.2 | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.2/AleLuduMod.dll) | |
-| v1.0.1 | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.1/AleLuduMod.dll) | |
-| v1.0.0 | [GitHub](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.0/AleLuduMod.dll) | |
+
+| Mod Version | Among Us - Version | Downloads |
+|-------------|--------------------|-----------|
+| v1.1.1 | 17.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.1/AleLuduMod.dll) |
+| v1.1.0 | 16.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.0/AleLuduMod.dll) |
+
+
+ Archive
+
+| Mod version | Among Us - Version | Downloads |
+|-------------|--------------------|---------------------------------------------------------------------------------------------|
+| v1.0.6 | 16.0.2 - 16.1.0 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.6/AleLuduMod.dll) |
+| v1.0.5.beta | 16.0.0 - 16.0.2 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.5.beta/AleLuduMod.dll) |
+| v1.0.4 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.4/AleLuduMod.dll) |
+| v1.0.3 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.3/AleLuduMod.dll) |
+| v1.0.2 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.2/AleLuduMod.dll) |
+| v1.0.1 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.1/AleLuduMod.dll) |
+| v1.0.0 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.0/AleLuduMod.dll) |
+
+
## Installation
-Drop it into `\BepInEx\plugins\` folder inside your Among Us + TownOfUs folder installation.
+Drop it into `\BepInEx\plugins\` folder inside your Among Us + Modded folder installation.
## Commands
- `!limit ` - Set the maximum number of players in lobby (from 4 to 35).
## Authors
-- [TownOfUs.pl](http://townofus.pl/)
+- [TownOfUs.pl](https://townofus.pl/)
- OrzechMC
- Bubeu
- gitq
@@ -35,4 +61,6 @@ Drop it into `\BepInEx\plugins\` folder inside your Among Us + TownOfUs folder i
## Credits
- [CrowdedMods](https://github.com/CrowdedMods/CrowdedMod) - current authors of CrowdedMod that we used as a base for our mod
- [andry08/100-player-mod](https://github.com/andry08/100-player-mod) - original author of the CrowdedMod plugin (andry08)
-
+---
+> This mod is not affiliated with Among Us or Innersloth LLC, and the content contained therein is not endorsed or otherwise sponsored by Innersloth LLC. Portions of the materials contained herein are property of Innersloth LLC.\
+> © Innersloth LLC.
\ No newline at end of file
From 8e8a00862e53646c2146c162ed2c96c5a7d2910b Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Mon, 9 Mar 2026 19:49:43 +0100
Subject: [PATCH 13/21] Update README.md
Updated compatibility range for mod version v1.1.0.
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 961ca90..2cc411b 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@ Works on **latest** Among Us Steam version.
| Mod Version | Among Us - Version | Downloads |
|-------------|--------------------|-----------|
| v1.1.1 | 17.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.1/AleLuduMod.dll) |
-| v1.1.0 | 16.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.0/AleLuduMod.dll) |
+| v1.1.0 | 16.0.0 - 16.1.0 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.0/AleLuduMod.dll) |
Archive
@@ -63,4 +63,4 @@ Drop it into `\BepInEx\plugins\` folder inside your Among Us + Modded folder ins
- [andry08/100-player-mod](https://github.com/andry08/100-player-mod) - original author of the CrowdedMod plugin (andry08)
---
> This mod is not affiliated with Among Us or Innersloth LLC, and the content contained therein is not endorsed or otherwise sponsored by Innersloth LLC. Portions of the materials contained herein are property of Innersloth LLC.\
-> © Innersloth LLC.
\ No newline at end of file
+> © Innersloth LLC.
From 4b99c3a8492f3518bfc88338fec74999b67ba303 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Tue, 10 Mar 2026 23:43:08 +0100
Subject: [PATCH 14/21] Update README.md
---
README.md | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index 2cc411b..891ae3d 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,17 @@
-
+
-
-
-
-
+# AleLuduMod
-
+[](https://discord.townofus.pl)
+[](https://github.com/raspberrygitq/AleLuduMod/releases/latest)
-
+
+
-
-
+
+
+---
-# AleLuduMod
This mod unlocks the possibility to show more than 15 players on screen during an meeting hud, vitals and shapeshifter menu.
Works on **latest** Among Us Steam version.
@@ -26,8 +25,8 @@ Works on **latest** Among Us Steam version.
## Versions
-| Mod Version | Among Us - Version | Downloads |
-|-------------|--------------------|-----------|
+| Mod Version | Among Us - Version | Downloads |
+|-------------|--------------------|-------------------------------------------------------------------------------------------------|
| v1.1.1 | 17.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.1/AleLuduMod.dll) |
| v1.1.0 | 16.0.0 - 16.1.0 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.0/AleLuduMod.dll) |
From 9d59f4fb4862afdffafe7644e6c6a29c5c469515 Mon Sep 17 00:00:00 2001
From: gitq <90698953+raspberrygitq@users.noreply.github.com>
Date: Wed, 11 Mar 2026 19:26:47 +0100
Subject: [PATCH 15/21] v1.1.2 Source Code
Support for ModExplorer
---
README.md | 12 +++++++-----
src/AleLuduMod/AleLuduMod.csproj | 7 ++++++-
src/AleLuduMod/Resources/Icon.png | Bin 0 -> 62670 bytes
src/AleLuduMod/modinfo.json | 19 +++++++++++++++++++
4 files changed, 32 insertions(+), 6 deletions(-)
create mode 100644 src/AleLuduMod/Resources/Icon.png
create mode 100644 src/AleLuduMod/modinfo.json
diff --git a/README.md b/README.md
index 891ae3d..26ad9b0 100644
--- a/README.md
+++ b/README.md
@@ -10,8 +10,7 @@
----
-
+#
This mod unlocks the possibility to show more than 15 players on screen during an meeting hud, vitals and shapeshifter menu.
Works on **latest** Among Us Steam version.
@@ -27,6 +26,7 @@ Works on **latest** Among Us Steam version.
| Mod Version | Among Us - Version | Downloads |
|-------------|--------------------|-------------------------------------------------------------------------------------------------|
+| v1.1.2 | 17.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.2/AleLuduMod.dll) |
| v1.1.1 | 17.0.0 - 17.2.1 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.1/AleLuduMod.dll) |
| v1.1.0 | 16.0.0 - 16.1.0 | [Download](https://github.com/raspberrygitq/AleLuduMod/releases/download/v1.1.0/AleLuduMod.dll) |
@@ -42,11 +42,12 @@ Works on **latest** Among Us Steam version.
| v1.0.2 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.2/AleLuduMod.dll) |
| v1.0.1 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.1/AleLuduMod.dll) |
| v1.0.0 | 2024.11.26 | [Download](https://github.com/townofus-pl/AleLuduMod/releases/download/v1.0.0/AleLuduMod.dll) |
-
## Installation
-Drop it into `\BepInEx\plugins\` folder inside your Among Us + Modded folder installation.
+Drop `AleLuduMod.dll` it the **`BepInEx\plugins`** folder with other mods or download the zip package.
+> [!Warning]
+> The mod needs [BepInEx](https://builds.bepinex.dev/projects/bepinex_be) and [Reactor](https://github.com/nuclearpowered/reactor) to work properly. While **BepInEx** is used by every mod and shouldn't be a problem, without **Reactor** you can't launch the mod.
## Commands
- `!limit ` - Set the maximum number of players in lobby (from 4 to 35).
@@ -62,4 +63,5 @@ Drop it into `\BepInEx\plugins\` folder inside your Among Us + Modded folder ins
- [andry08/100-player-mod](https://github.com/andry08/100-player-mod) - original author of the CrowdedMod plugin (andry08)
---
> This mod is not affiliated with Among Us or Innersloth LLC, and the content contained therein is not endorsed or otherwise sponsored by Innersloth LLC. Portions of the materials contained herein are property of Innersloth LLC.\
-> © Innersloth LLC.
+> © Innersloth LLC.\
+> [License](./LICENSE)
\ No newline at end of file
diff --git a/src/AleLuduMod/AleLuduMod.csproj b/src/AleLuduMod/AleLuduMod.csproj
index 32f527c..89a74b3 100644
--- a/src/AleLuduMod/AleLuduMod.csproj
+++ b/src/AleLuduMod/AleLuduMod.csproj
@@ -2,7 +2,7 @@
net6.0
- 1.1.1
+ 1.1.2
townofus.pl, OrzechMC, Bubeu, gitq
latest
@@ -21,6 +21,11 @@
+
+
+
+
+
diff --git a/src/AleLuduMod/Resources/Icon.png b/src/AleLuduMod/Resources/Icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..5236af9ef33fa3bda2543ce9a79ec0f2dae7ee01
GIT binary patch
literal 62670
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