Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/AleLuduMod/AleLuduMod.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Reactor" Version="2.4.0-ci.344" />
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.733" />
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" />
<PackageReference Include="AmongUs.GameLibs.$(GamePlatform)" Version="$(GameVersion)" PrivateAssets="all" />

<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.0.1" PrivateAssets="all" />
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.1.0-rc.1" PrivateAssets="all" />
</ItemGroup>

<Target Name="Copy" AfterTargets="Build" Condition="'$(AmongUs)' != ''">
Expand Down
18 changes: 7 additions & 11 deletions src/AleLuduMod/AleLuduModPlugin.cs
Original file line number Diff line number Diff line change
@@ -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")]
[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<bool> 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<AleLuduModPlugin>(ReactorCredits.AlwaysShow);

Force4Columns = Config.Bind("Settings", "Force 4 columns", true, "Always display 4 columns in meeting, vitals, etc.");

Expand Down
27 changes: 7 additions & 20 deletions src/AleLuduMod/Components/MeetingHudBehaviour.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,42 +10,29 @@ 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]
public IEnumerable<PlayerVoteArea> Targets => meetingHud.playerStates.OrderBy(p => p.AmDead);

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++;
}
}

}
26 changes: 9 additions & 17 deletions src/AleLuduMod/Components/ShapeshifterMenuBehaviour.cs
Original file line number Diff line number Diff line change
@@ -1,36 +1,28 @@
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;

[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<ShapeshifterPanel> Targets => shapeshifterMinigame.potentialVictims.ToArray();
[HideFromIl2Cpp]
public IEnumerable<ShapeshifterPanel> 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;
Expand All @@ -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++;
}
}
Expand Down
19 changes: 6 additions & 13 deletions src/AleLuduMod/Components/VitalsHudBehaviour.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,15 @@ 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]
public IEnumerable<VitalsPanel> Targets => vitalsMinigame.vitals.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)
{
Expand All @@ -35,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++;
}
}
Expand Down
26 changes: 15 additions & 11 deletions src/AleLuduMod/Patches/ChatCommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,21 @@ 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 "))
{
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))
Expand All @@ -32,41 +40,37 @@ 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: <color=#D91919FF><b>{newLimit}</b></color>";
system = true;
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"A player limit has been set for: <color=#D91919FF>{newLimit}</color>");
}
return false;
}
catch { }
}
else
{
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)
{
if (sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId)
{
chatText = "You don't have access to this command!";
noaccess = true;
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "You don't have access to this command!");
}
return false;
}
return sourcePlayer.PlayerId == PlayerControl.LocalPlayer.PlayerId;
}
Expand Down
Loading