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
10 changes: 10 additions & 0 deletions ElysiumModMenu.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,16 @@
<HintPath>$(AmongUsDir)\BepInEx\interop\__Generated.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Remove="AcidMenu_decompiled\**\*.cs" />
<Compile Remove="Area51files_decompiled\**\*.cs" />
<Compile Remove="AstroMenu_decompiled\**\*.cs" />
<Compile Remove="HydraRemakePRIVATE_decompiled\**\*.cs" />
<Compile Remove="KillNetwork_no_check_decompiled\**\*.cs" />
<Compile Remove="NME_decompiled\**\*.cs" />
<Compile Remove="Oxford_decompiled\**\*.cs" />
<Compile Remove="TuffMenu_REAL_decompiled\**\*.cs" />
</ItemGroup>
<ItemGroup>
<None Update="resources\discord_rpc_elysium.jpg" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="resources\discord_rpc_elysium.jpg" LogicalName="ElysiumModMenu.discord_rpc_elysium.jpg" />
Expand Down
695 changes: 674 additions & 21 deletions LICENSE

Large diffs are not rendered by default.

43 changes: 9 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,39 +150,6 @@ To update the menu:

The Platform Spoof option can display supported platform labels to other clients. These are spoofing targets, not platforms on which the mod itself can run.

## ♯ Diagnostic logs

> [!WARNING]
> Diagnostic reporting is enabled by default. When the game detects a freeze, error burst, or log overload, the configured build may send a diagnostic summary and attach affected Unity/BepInEx log files to the maintainer's configured endpoint.

### Enable or disable diagnostic reporting

Open:

```
Among Us/ElysiumModMenu/ElysiumModMenu.cfg
```

Under `[ElysiumModMenu.Diagnostics]`, set:

```
EnableAnomalyLogReports = false
```

Use `true` to enable automatic anomaly reports. Restart the game after changing the file.

### Enable detailed local logs

Open **Menu → Notifications & Logging** and enable **Detailed Unity/RPC Logs**.

This restores verbose RPC, Message, Info, and Debug output. Disable it during normal play for better performance; warnings and errors remain available.

The main local BepInEx log is usually stored at:

```
Among Us/BepInEx/LogOutput.log
```

## ♡ Community and support

* Join the [ElysiumModMenu Discord](https://discord.gg/CdrpKJzFp) for announcements, help, previews, and community discussion.
Expand Down Expand Up @@ -259,7 +226,7 @@ These options are located in the **Menu** tab. Unlock behavior is client-side, m

</details>

## Disclaimer ❕❕❕
## Disclaimer

> [!IMPORTANT]
> Elysium Mod Menu is an independent, unofficial modification. It is not affiliated with, endorsed by, sponsored by, or approved by Innersloth LLC. Among Us, its name, trademarks, and game assets belong to their respective owners.
Expand All @@ -271,3 +238,11 @@ You are solely responsible for installing and using the mod, complying with appl
The maintainers are not responsible for bans, restrictions, corrupted files, lost progress, game instability, third-party modifications, misuse, or damage arising from use of this software.

Support is not provided for harassment, disruption, moderation evasion, unauthorized access, or other malicious activity.


## ✨ Inspiration

- [SickoMenu](https://github.com/g0aty/SickoMenu) by [g0aty](https://github.com/g0aty)
- [MalumMenu](https://github.com/scp222thj/MalumMenu) by [scp222thj](https://github.com/scp222thj)
- [AmongUsMenu](https://github.com/BitCrackers/AmongUsMenu) by [BitCrackers](https://github.com/BitCrackers)
- [EndlessHostRoles](https://github.com/Gurge44/EndlessHostRoles) by [Gurge44](https://github.com/Gurge44)
119 changes: 63 additions & 56 deletions cheats/EspUiAndFormat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -529,22 +529,27 @@ private static string GetSafeColorName(int colorId)

private void DrawLobbyControls()
{
float outerContentWidth = GetMenuWorkWidth(220f, 760f);
// Keep room for the menu's inner margins and the scroll-view gutter.
float outerContentWidth = Mathf.Floor(Mathf.Max(220f, GetMenuWorkWidth(220f, 760f) - 44f));
float columnGap = 10f;
const float hostActionButtonHeight = 24f;
const float hostActionGap = 4f;
const float topTileHeight = 220f;
const float bottomTileHeight = 220f;
const float lobbyActionsWidthOffset = 20f;
float lobbyColumnWidth = Mathf.Floor(Mathf.Max(190f, (outerContentWidth - columnGap) / 2f));
float cardPaddingWidth = menuCardStyle != null && menuCardStyle.padding != null
? menuCardStyle.padding.left + menuCardStyle.padding.right
: 28f;
float columnGap = 10f;
float lobbyColumnWidth = Mathf.Floor(Mathf.Max(190f, (outerContentWidth - columnGap - (cardPaddingWidth * 2f)) / 2f));
float cardInnerWidth = Mathf.Max(120f, lobbyColumnWidth - cardPaddingWidth);
float twoButtonWidth = Mathf.Max(52f, (cardInnerWidth - hostActionGap) / 2f);
float threeButtonWidth = Mathf.Max(40f, (cardInnerWidth - (hostActionGap * 2f)) / 3f);
int lobbyControlWidth = Mathf.RoundToInt(Mathf.Max(150f, lobbyColumnWidth - 32f));
const float hostActionButtonHeight = 24f;
const float hostActionGap = 4f;
const float leftTileHeight = 202f;
const float rightTileHeight = 94f;

GUILayout.BeginHorizontal(GUILayout.Width(outerContentWidth));
GUILayout.BeginVertical(GUILayout.Width(outerContentWidth));

GUILayout.BeginVertical(GUILayout.Width(lobbyColumnWidth));
GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(leftTileHeight));
GUILayout.BeginHorizontal(GUILayout.Width(outerContentWidth));
GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth + lobbyActionsWidthOffset), GUILayout.Height(topTileHeight));
DrawMenuSectionHeader(L("GAME RULES", "ПРАВИЛА ИГРЫ"));
GUILayout.FlexibleSpace();
neverEndGame = DrawToggle(neverEndGame, L("Unlimited Game", "Бесконечная игра"), lobbyControlWidth);
Expand Down Expand Up @@ -587,102 +592,104 @@ private void DrawLobbyControls()

GUILayout.Space(10);

GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(leftTileHeight));
GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(topTileHeight));
DrawMenuSectionHeader(L("CHAT MODERATION", "МОДЕРАЦИЯ ЧАТА"));
GUILayout.Space(4f);
enableColorCommand = DrawToggle(enableColorCommand, L("Enable /c command (Public)", "Разрешить команду /c"), lobbyControlWidth);
GUILayout.Space(5);
blockFortegreenChat = DrawToggle(blockFortegreenChat, L("Block Fortegreen Chat", "Блокировать чат Fortegreen"), lobbyControlWidth);
GUILayout.Space(5);
blockRainbowChat = DrawToggle(blockRainbowChat, L("Block Rainbow Chat", "Блокировать радужный чат"), lobbyControlWidth);
GUILayout.Space(5);
autoChatEveryone = DrawToggle(autoChatEveryone, L("Chat as Everyone", "Чат от всех"), lobbyControlWidth);
if (false && autoChatEveryone)
{
GUILayout.BeginHorizontal();
GUILayout.Label($"{L("Delay:", "Задержка:")} {autoChatEveryoneDelay:0.0}s", toggleLabelStyle, GUILayout.Width(92));
autoChatEveryoneDelay = GUILayout.HorizontalSlider(autoChatEveryoneDelay, 0f, 10f, sliderStyle, sliderThumbStyle, GUILayout.Width(170));
GUILayout.EndHorizontal();
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
GUILayout.EndHorizontal();

GUILayout.Space(10);

GUILayout.BeginHorizontal(GUILayout.Width(outerContentWidth));
GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(bottomTileHeight));
DrawMenuSectionHeader(L("LOBBY ACTIONS", "ДЕЙСТВИЯ ЛОББИ"));
GUILayout.FlexibleSpace();
GUILayout.BeginHorizontal();
if (GUILayout.Button(L("Spawn Lobby", "Создать лобби"), activeTabStyle, GUILayout.Height(hostActionButtonHeight))) SpawnLobby();
if (GUILayout.Button(L("Spawn Lobby", "Создать лобби"), activeTabStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) SpawnLobby();
GUILayout.Space(hostActionGap);
if (GUILayout.Button(L("Despawn", "Удалить"), btnStyle, GUILayout.Height(hostActionButtonHeight))) DespawnLobby();
if (GUILayout.Button(L("Despawn", "Удалить"), btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) DespawnLobby();
GUILayout.EndHorizontal();
GUILayout.Space(hostActionGap);

GUILayout.BeginHorizontal();
if (GUILayout.Button("Flood Task All", btnStyle, GUILayout.Height(hostActionButtonHeight))) FloodAllPlayersWithTasks();
if (GUILayout.Button("Flood Task All", btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) FloodAllPlayersWithTasks();
GUILayout.Space(hostActionGap);
if (GUILayout.Button("Delete Task All", btnStyle, GUILayout.Height(hostActionButtonHeight))) DeleteAllPlayerTasks();
if (GUILayout.Button("Delete Task All", btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) DeleteAllPlayerTasks();
GUILayout.EndHorizontal();
GUILayout.Space(hostActionGap);

GUILayout.BeginHorizontal();
if (GUILayout.Button(L("Kill All", "Убить всех"), btnStyle, GUILayout.Height(hostActionButtonHeight))) KillAll();
if (GUILayout.Button(L("Kill All", "Убить всех"), btnStyle, GUILayout.Width(threeButtonWidth), GUILayout.Height(hostActionButtonHeight))) KillAll();
GUILayout.Space(hostActionGap);
if (GUILayout.Button(L("Kick All", "Кикнуть всех"), btnStyle, GUILayout.Height(hostActionButtonHeight))) KickAll();
if (GUILayout.Button(L("Kick All", "Кикнуть всех"), btnStyle, GUILayout.Width(threeButtonWidth), GUILayout.Height(hostActionButtonHeight))) KickAll();
GUILayout.Space(hostActionGap);
if (GUILayout.Button(L("Mass Morph", "Масс-морф"), btnStyle, GUILayout.Height(hostActionButtonHeight))) this.StartCoroutine(MassMorphCoroutine().WrapToIl2Cpp());
if (GUILayout.Button(L("Mass Morph", "Масс-морф"), btnStyle, GUILayout.Width(threeButtonWidth), GUILayout.Height(hostActionButtonHeight))) this.StartCoroutine(MassMorphCoroutine().WrapToIl2Cpp());
GUILayout.EndHorizontal();
GUILayout.Space(hostActionGap);

selectedLobbyVentIdx = Mathf.Clamp(selectedLobbyVentIdx, 0, Mathf.Max(0, GetVentCount() - 1));
GUILayout.BeginHorizontal();
float ventLabelW = Mathf.Min(135f, Mathf.Max(82f, lobbyColumnWidth * 0.34f));
float ventButtonWidth = Mathf.Min(102f, Mathf.Max(60f, cardInnerWidth * 0.3f));
float ventLabelW = Mathf.Min(135f, Mathf.Max(70f, cardInnerWidth * 0.34f));
GUILayout.Label($"Vent: {GetVentLabel(selectedLobbyVentIdx)}", new GUIStyle(toggleLabelStyle) { fontSize = 11, clipping = TextClipping.Clip }, GUILayout.Width(ventLabelW), GUILayout.Height(hostActionButtonHeight));
float ventSliderWidth = Mathf.Max(20f, cardInnerWidth - ventLabelW - ventButtonWidth - hostActionGap);
if (GetVentCount() > 1)
selectedLobbyVentIdx = Mathf.RoundToInt(GUILayout.HorizontalSlider(selectedLobbyVentIdx, 0, GetVentCount() - 1, sliderStyle, sliderThumbStyle, GUILayout.Width(Mathf.Max(50f, lobbyColumnWidth - ventLabelW - 128f))));
selectedLobbyVentIdx = Mathf.RoundToInt(GUILayout.HorizontalSlider(selectedLobbyVentIdx, 0, GetVentCount() - 1, sliderStyle, sliderThumbStyle, GUILayout.Width(ventSliderWidth)));
else
GUILayout.Space(Mathf.Max(50f, lobbyColumnWidth - ventLabelW - 128f));
GUILayout.Space(ventSliderWidth);
GUILayout.Space(hostActionGap);
if (GUILayout.Button("Vent TP All", btnStyle, GUILayout.Width(102f), GUILayout.Height(hostActionButtonHeight))) TeleportAllPlayersToVent(selectedLobbyVentIdx);
if (GUILayout.Button("Vent TP All", btnStyle, GUILayout.Width(ventButtonWidth), GUILayout.Height(hostActionButtonHeight))) TeleportAllPlayersToVent(selectedLobbyVentIdx);
GUILayout.EndHorizontal();
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
GUILayout.EndVertical();

GUILayout.Space(10);

GUILayout.BeginVertical(GUILayout.Width(lobbyColumnWidth));
GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(rightTileHeight));
DrawMenuSectionHeader(L("CHAT MODERATION", "МОДЕРАЦИЯ ЧАТА"));
GUILayout.FlexibleSpace();
enableColorCommand = DrawToggle(enableColorCommand, L("Enable /c command (Public)", "Разрешить команду /c"), lobbyControlWidth);
GUILayout.Space(5);
blockFortegreenChat = DrawToggle(blockFortegreenChat, L("Block Fortegreen Chat", "Блокировать чат Fortegreen"), lobbyControlWidth);
GUILayout.Space(5);
blockRainbowChat = DrawToggle(blockRainbowChat, L("Block Rainbow Chat", "Блокировать радужный чат"), lobbyControlWidth);
GUILayout.Space(5);
autoChatEveryone = DrawToggle(autoChatEveryone, L("Chat as Everyone", "Чат от всех"), lobbyControlWidth);
if (false && autoChatEveryone)
{
GUILayout.BeginHorizontal();
GUILayout.Label($"{L("Delay:", "Задержка:")} {autoChatEveryoneDelay:0.0}s", toggleLabelStyle, GUILayout.Width(92));
autoChatEveryoneDelay = GUILayout.HorizontalSlider(autoChatEveryoneDelay, 0f, 10f, sliderStyle, sliderThumbStyle, GUILayout.Width(170));
GUILayout.EndHorizontal();
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();

GUILayout.Space(6);

GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(rightTileHeight));
GUILayout.BeginVertical(menuCardStyle, GUILayout.Width(lobbyColumnWidth), GUILayout.Height(bottomTileHeight));
DrawMenuSectionHeader(L("END GAME", "КОНЕЦ ИГРЫ"));
disableEndGameSafeMode = DrawToggle(disableEndGameSafeMode, L("Disable Safe End", "Отключить safe end"), Mathf.RoundToInt(lobbyColumnWidth - 12f));
disableEndGameSafeMode = DrawToggle(disableEndGameSafeMode, L("Disable Safe End", "Отключить safe end"), Mathf.RoundToInt(cardInnerWidth));
GUILayout.FlexibleSpace();
GUILayout.BeginHorizontal();
if (GUILayout.Button(L("Crewmate Win", "Победа экипажа"), btnStyle, GUILayout.Height(hostActionButtonHeight))) SmartEndGame("CrewWin");
if (GUILayout.Button(L("Crewmate Win", "Победа экипажа"), btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) SmartEndGame("CrewWin");
GUILayout.Space(hostActionGap);
if (GUILayout.Button(L("Impostor Win", "Победа предателей"), btnStyle, GUILayout.Height(hostActionButtonHeight))) SmartEndGame("ImpWin");
if (GUILayout.Button(L("Impostor Win", "Победа предателей"), btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) SmartEndGame("ImpWin");
GUILayout.EndHorizontal();
GUILayout.Space(hostActionGap);

GUILayout.BeginHorizontal();
if (GUILayout.Button(L("Imp Disconnect", "Дисконнект предателя"), btnStyle, GUILayout.Height(hostActionButtonHeight))) SmartEndGame("ImpDisconnect");
if (GUILayout.Button(L("Imp Disconnect", "Дисконнект предателя"), btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) SmartEndGame("ImpDisconnect");
GUILayout.Space(hostActionGap);
if (GUILayout.Button(L("H&S Disconnect", "H&S дисконнект"), activeTabStyle, GUILayout.Height(hostActionButtonHeight))) SmartEndGame("HnsImpDisconnect");
if (GUILayout.Button(L("H&S Disconnect", "H&S дисконнект"), activeTabStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) SmartEndGame("HnsImpDisconnect");
GUILayout.EndHorizontal();
GUILayout.Space(hostActionGap);

if (GUILayout.Button(L("Force End", "Завершить"), btnStyle, GUILayout.Height(hostActionButtonHeight))) SmartEndGame("ForceEnd");
if (GUILayout.Button(L("Force End", "Завершить"), btnStyle, GUILayout.Width(cardInnerWidth), GUILayout.Height(hostActionButtonHeight))) SmartEndGame("ForceEnd");
GUILayout.Space(hostActionGap);
GUILayout.BeginHorizontal();
if (GUILayout.Button(L("Insta Start", "Мгновенный старт"), btnStyle, GUILayout.Height(hostActionButtonHeight))) TryInstaStartAfterEveryoneLoaded(true);
if (GUILayout.Button(L("Insta Start", "Мгновенный старт"), btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight))) TryInstaStartAfterEveryoneLoaded(true);
GUILayout.Space(hostActionGap);
if (GUILayout.Button(L("Close Meeting", "Закрыть собрание"), btnStyle, GUILayout.Height(hostActionButtonHeight)) && MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
if (GUILayout.Button(L("Close Meeting", "Закрыть собрание"), btnStyle, GUILayout.Width(twoButtonWidth), GUILayout.Height(hostActionButtonHeight)) && MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
GUILayout.EndHorizontal();
GUILayout.FlexibleSpace();
GUILayout.EndVertical();

GUILayout.EndVertical();
GUILayout.EndHorizontal();
GUILayout.EndVertical();
}

private static void FloodAllPlayersWithTasks()
Expand Down
Loading