Skip to content

Commit 8c9c8f2

Browse files
committed
v5.3.0 Source Code
1 parent 114ff3b commit 8c9c8f2

File tree

312 files changed

+7634
-4207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

312 files changed

+7634
-4207
lines changed

README.md

Lines changed: 324 additions & 169 deletions
Large diffs are not rendered by default.

source/Extensions/AmongUsExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using Il2CppInterop.Runtime.InteropTypes;
77
using System.Linq.Expressions;
8+
using System.Linq;
89

910
namespace TownOfUs.Extensions
1011
{
@@ -46,7 +47,7 @@ public static VisualAppearance GetAppearance(this PlayerControl player)
4647
{
4748
if (player.TryGetAppearance(Role.GetRole(player) as IVisualAlteration, out var appearance))
4849
return appearance;
49-
else if (player.TryGetAppearance(Modifier.GetModifier(player) as IVisualAlteration, out appearance))
50+
else if (player.TryGetAppearance(Modifier.GetModifiers(player).FirstOrDefault(x => x is IVisualAlteration) as IVisualAlteration, out appearance))
5051
return appearance;
5152
else
5253
return player.GetDefaultAppearance();

source/Patches/AddMeetingButtons.cs

Lines changed: 234 additions & 130 deletions
Large diffs are not rendered by default.

source/Patches/AmBanned.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
using AmongUs.Data.Player;
12
using HarmonyLib;
23

34
namespace TownOfUs
45
{
5-
[HarmonyPatch(typeof(StatsManager), nameof(StatsManager.AmBanned), MethodType.Getter)]
6+
[HarmonyPatch(typeof(PlayerBanData), nameof(PlayerBanData.IsBanned), MethodType.Getter)]
67
public class AmBanned
78
{
89
public static void Postfix(out bool __result)

source/Patches/AmongUsClient_OnGameEnd.cs

Lines changed: 76 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public static void Postfix()
2323
var ga = (GuardianAngel)role;
2424
losers.Add(ga.Player.GetDefaultOutfit().ColorId);
2525
}
26+
foreach (var role in Role.GetRoles(RoleEnum.Mercenary))
27+
{
28+
var merc = (Mercenary)role;
29+
losers.Add(merc.Player.GetDefaultOutfit().ColorId);
30+
}
2631
foreach (var role in Role.GetRoles(RoleEnum.Survivor))
2732
{
2833
var surv = (Survivor)role;
@@ -97,89 +102,58 @@ public static void Postfix()
97102
EndGameResult.CachedWinners = new List<CachedPlayerData>();
98103
return;
99104
}
100-
if (Role.SurvOnlyWins)
105+
106+
foreach (var role in Role.AllRoles)
101107
{
102-
EndGameResult.CachedWinners = new List<CachedPlayerData>();
103-
foreach (var role in Role.GetRoles(RoleEnum.Survivor))
108+
var type = role.RoleType;
109+
110+
if (type == RoleEnum.Jester && CustomGameOptions.JesterWin == NeutralRoles.ExecutionerMod.WinEndsGame.EndsGame)
104111
{
105-
var surv = (Survivor)role;
106-
if (!surv.Player.Data.IsDead && !surv.Player.Data.Disconnected)
112+
var jester = (Jester)role;
113+
if (jester.VotedOut)
107114
{
108-
var survData = new CachedPlayerData(surv.Player.Data);
109-
if (PlayerControl.LocalPlayer != surv.Player) survData.IsYou = false;
110-
EndGameResult.CachedWinners.Add(survData);
115+
EndGameResult.CachedWinners = new List<CachedPlayerData>();
116+
var jestData = new CachedPlayerData(jester.Player.Data);
117+
jestData.IsDead = false;
118+
if (PlayerControl.LocalPlayer != jester.Player) jestData.IsYou = false;
119+
EndGameResult.CachedWinners.Add(jestData);
120+
return;
111121
}
112122
}
113-
114-
return;
115-
}
116-
117-
if (CustomGameOptions.NeutralEvilWinEndsGame)
118-
{
119-
foreach (var role in Role.AllRoles)
123+
else if (type == RoleEnum.Executioner && CustomGameOptions.ExecutionerWin == NeutralRoles.ExecutionerMod.WinEndsGame.EndsGame)
120124
{
121-
var type = role.RoleType;
122-
123-
if (type == RoleEnum.Jester)
124-
{
125-
var jester = (Jester)role;
126-
if (jester.VotedOut)
127-
{
128-
EndGameResult.CachedWinners = new List<CachedPlayerData>();
129-
var jestData = new CachedPlayerData(jester.Player.Data);
130-
jestData.IsDead = false;
131-
if (PlayerControl.LocalPlayer != jester.Player) jestData.IsYou = false;
132-
EndGameResult.CachedWinners.Add(jestData);
133-
return;
134-
}
135-
}
136-
else if (type == RoleEnum.Executioner)
137-
{
138-
var executioner = (Executioner)role;
139-
if (executioner.TargetVotedOut)
140-
{
141-
EndGameResult.CachedWinners = new List<CachedPlayerData>();
142-
var exeData = new CachedPlayerData(executioner.Player.Data);
143-
if (PlayerControl.LocalPlayer != executioner.Player) exeData.IsYou = false;
144-
EndGameResult.CachedWinners.Add(exeData);
145-
return;
146-
}
147-
}
148-
else if (type == RoleEnum.Doomsayer)
125+
var executioner = (Executioner)role;
126+
if (executioner.TargetVotedOut)
149127
{
150-
var doom = (Doomsayer)role;
151-
if (doom.WonByGuessing)
152-
{
153-
EndGameResult.CachedWinners = new List<CachedPlayerData>();
154-
var doomData = new CachedPlayerData(doom.Player.Data);
155-
if (PlayerControl.LocalPlayer != doom.Player) doomData.IsYou = false;
156-
EndGameResult.CachedWinners.Add(doomData);
157-
return;
158-
}
128+
EndGameResult.CachedWinners = new List<CachedPlayerData>();
129+
var exeData = new CachedPlayerData(executioner.Player.Data);
130+
if (PlayerControl.LocalPlayer != executioner.Player) exeData.IsYou = false;
131+
EndGameResult.CachedWinners.Add(exeData);
132+
return;
159133
}
160-
else if (type == RoleEnum.SoulCollector)
134+
}
135+
else if (type == RoleEnum.Doomsayer && CustomGameOptions.DoomsayerWinEndsGame)
136+
{
137+
var doom = (Doomsayer)role;
138+
if (doom.WonByGuessing)
161139
{
162-
var sc = (SoulCollector)role;
163-
if (sc.CollectedSouls)
164-
{
165-
EndGameResult.CachedWinners = new List<CachedPlayerData>();
166-
var scData = new CachedPlayerData(sc.Player.Data);
167-
if (PlayerControl.LocalPlayer != sc.Player) scData.IsYou = false;
168-
EndGameResult.CachedWinners.Add(scData);
169-
return;
170-
}
140+
EndGameResult.CachedWinners = new List<CachedPlayerData>();
141+
var doomData = new CachedPlayerData(doom.Player.Data);
142+
if (PlayerControl.LocalPlayer != doom.Player) doomData.IsYou = false;
143+
EndGameResult.CachedWinners.Add(doomData);
144+
return;
171145
}
172-
else if (type == RoleEnum.Phantom)
146+
}
147+
else if (type == RoleEnum.Phantom && CustomGameOptions.PhantomWinEndsGame)
148+
{
149+
var phantom = (Phantom)role;
150+
if (phantom.CompletedTasks)
173151
{
174-
var phantom = (Phantom)role;
175-
if (phantom.CompletedTasks)
176-
{
177-
EndGameResult.CachedWinners = new List<CachedPlayerData>();
178-
var phantomData = new CachedPlayerData(phantom.Player.Data);
179-
if (PlayerControl.LocalPlayer != phantom.Player) phantomData.IsYou = false;
180-
EndGameResult.CachedWinners.Add(phantomData);
181-
return;
182-
}
152+
EndGameResult.CachedWinners = new List<CachedPlayerData>();
153+
var phantomData = new CachedPlayerData(phantom.Player.Data);
154+
if (PlayerControl.LocalPlayer != phantom.Player) phantomData.IsYou = false;
155+
EndGameResult.CachedWinners.Add(phantomData);
156+
return;
183157
}
184158
}
185159
}
@@ -288,6 +262,17 @@ public static void Postfix()
288262
EndGameResult.CachedWinners.Add(werewolfData);
289263
}
290264
}
265+
else if (type == RoleEnum.SoulCollector)
266+
{
267+
var sc = (SoulCollector)role;
268+
if (sc.SCWins)
269+
{
270+
EndGameResult.CachedWinners = new List<CachedPlayerData>();
271+
var scData = new CachedPlayerData(sc.Player.Data);
272+
if (PlayerControl.LocalPlayer != sc.Player) scData.IsYou = false;
273+
EndGameResult.CachedWinners.Add(scData);
274+
}
275+
}
291276
}
292277

293278
foreach (var role in Role.GetRoles(RoleEnum.Survivor))
@@ -318,6 +303,25 @@ public static void Postfix()
318303
}
319304
}
320305
}
306+
foreach (var role in Role.GetRoles(RoleEnum.Mercenary))
307+
{
308+
var merc = (Mercenary)role;
309+
foreach (var bribeId in merc.Bribed)
310+
{
311+
var bribe = Utils.PlayerById(bribeId);
312+
if (bribe == null || bribe.Data == null || bribe.Data.IsDead || bribe.Data.Disconnected || bribe.Is(RoleEnum.Mercenary)) continue;
313+
var bribedData = new CachedPlayerData(bribe.Data);
314+
if (EndGameResult.CachedWinners.ToArray().Where(x => x.ColorId == bribedData.ColorId).ToList().Count > 0)
315+
{
316+
var isImp = EndGameResult.CachedWinners[0].IsImpostor;
317+
var mercWinData = new CachedPlayerData(merc.Player.Data);
318+
if (isImp) mercWinData.IsImpostor = true;
319+
if (PlayerControl.LocalPlayer != merc.Player) mercWinData.IsYou = false;
320+
EndGameResult.CachedWinners.Add(mercWinData);
321+
break;
322+
}
323+
}
324+
}
321325
}
322326
}
323327
}

source/Patches/ScreenEffects/AssetLoader.cs renamed to source/Patches/AssetLoader.cs

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
using Il2CppInterop.Runtime;
22
using Reactor.Utilities.Extensions;
33
using System;
4-
using System.Collections;
54
using System.Collections.Generic;
65
using System.Linq;
76
using System.Reflection;
87
using UnityEngine;
98
using UnityObject = UnityEngine.Object;
109

11-
namespace TownOfUs.Patches.ScreenEffects
10+
namespace TownOfUs.Patches
1211
{
13-
// could parts of this code be wildly optimised? yes
14-
// do i care? no
1512
public class AssetLoader
1613
{
1714
public static string[] AssetBundles = { "trappershader", "soundvision" };
@@ -37,17 +34,6 @@ private static AssetBundle loadBundle(string bundlename)
3734
return AssetBundle.LoadFromMemory(assets);
3835
}
3936

40-
// Currently ill-advisable to load all at once.
41-
private IEnumerator LoadAllAssets(AssetBundle assetBundle)
42-
{
43-
var assets = assetBundle.LoadAllAssetsAsync();
44-
yield return assets;
45-
foreach (var asset in assets.allAssets)
46-
{
47-
loadedObjects.Add(assetBundle.name, asset.DontUnload());
48-
}
49-
}
50-
5137
private string ConvertToBaseName(string name)
5238
{
5339
return name.Split('/').Last().Split('.').First();
@@ -74,17 +60,5 @@ public T Get<T>(string name) where T : UnityObject
7460
}
7561
return null;
7662
}
77-
78-
}
79-
80-
81-
public static class AssetLoadingUtils
82-
{
83-
public static T CanUnload<T>(this T obj) where T : UnityObject
84-
{
85-
obj.hideFlags |= HideFlags.None;
86-
87-
return obj;
88-
}
8963
}
9064
}

source/Patches/BetterPolus.cs

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public static class ShipStatusPatch
2525

2626
public static Console WifiConsole;
2727
public static Console NavConsole;
28+
public static Console TempCold;
2829

2930
public static SystemConsole Vitals;
3031
public static GameObject DvdScreenOffice;
@@ -35,8 +36,6 @@ public static class ShipStatusPatch
3536
public static Vent StorageVent;
3637
public static Vent LightCageVent;
3738

38-
public static Console TempCold;
39-
4039
public static GameObject Comms;
4140
public static GameObject DropShip;
4241
public static GameObject Outside;
@@ -151,7 +150,7 @@ public static void FindRooms()
151150

152151
if (DropShip == null)
153152
{
154-
DropShip = Object.FindObjectsOfType<GameObject>().ToList().Find(o => o.name == "Dropship");
153+
DropShip = Object.FindObjectsOfType<GameObject>().ToList().FindLast(o => o.name == "Dropship");
155154
}
156155

157156
if (Outside == null)
@@ -291,4 +290,49 @@ public static void MoveVitals()
291290
}
292291
}
293292
}
293+
294+
[HarmonyPatch(typeof(HudManager))]
295+
public class TaskTextUpdates
296+
{
297+
public static PlayerTask ColdTemp;
298+
299+
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
300+
public static void Prefix(HudManager __instance)
301+
{
302+
if (ShipStatusPatch.IsObjectsFetched && ShipStatusPatch.IsAdjustmentsDone)
303+
{
304+
foreach (var task in PlayerControl.LocalPlayer.myTasks)
305+
{
306+
if (CustomGameOptions.ColdTempDeathValley)
307+
{
308+
if (task.TaskType == TaskTypes.RecordTemperature && task.StartAt != SystemTypes.Outside)
309+
{
310+
task.StartAt = SystemTypes.Outside;
311+
ColdTemp = task;
312+
}
313+
}
314+
if (CustomGameOptions.WifiChartCourseSwap)
315+
{
316+
if (task.TaskType == TaskTypes.RebootWifi && task.StartAt != SystemTypes.Dropship) task.StartAt = SystemTypes.Dropship;
317+
else if (task.TaskType == TaskTypes.ChartCourse && task.StartAt != SystemTypes.Comms) task.StartAt = SystemTypes.Comms;
318+
}
319+
}
320+
}
321+
}
322+
323+
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
324+
public static void Postfix(HudManager __instance)
325+
{
326+
if (ShipStatusPatch.IsObjectsFetched && ShipStatusPatch.IsAdjustmentsDone)
327+
{
328+
foreach (var task in PlayerControl.LocalPlayer.myTasks)
329+
{
330+
if (CustomGameOptions.ColdTempDeathValley)
331+
{
332+
if (task == ColdTemp) task.StartAt = SystemTypes.Laboratory;
333+
}
334+
}
335+
}
336+
}
337+
}
294338
}

source/Patches/CanMove.cs

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,14 @@
22

33
namespace TownOfUs.Patches
44
{
5+
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CanMove), MethodType.Getter)]
56
public static class CanMove
67
{
7-
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CanMove), MethodType.Getter)]
8-
internal static class CanMovePatch
8+
[HarmonyPostfix]
9+
public static void Postfix(ref bool __result)
910
{
10-
public static bool Prefix(PlayerControl __instance, ref bool __result)
11-
{
12-
__result = __instance.moveable
13-
&& !Minigame.Instance
14-
&& !__instance.shapeshifting
15-
&& (!DestroyableSingleton<HudManager>.InstanceExists
16-
|| !DestroyableSingleton<HudManager>.Instance.Chat.IsOpenOrOpening
17-
&& !DestroyableSingleton<HudManager>.Instance.KillOverlay.IsOpen
18-
&& !DestroyableSingleton<HudManager>.Instance.GameMenu.IsOpen)
19-
/*&& (!ControllerManager.Instance || !ControllerManager.Instance.IsUiControllerActive)*/
20-
&& (!MapBehaviour.Instance || !MapBehaviour.Instance.IsOpenStopped)
21-
&& !MeetingHud.Instance
22-
&& !PlayerCustomizationMenu.Instance
23-
&& !ExileController.Instance
24-
&& !IntroCutscene.Instance;
25-
26-
return false;
27-
}
11+
// innersloth naming sucks, displayed is actually displaying
12+
__result = (__result || HudManager.Instance.IsIntroDisplayed) && !Minigame.Instance;
2813
}
2914
}
3015
}

source/Patches/CanUse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class CanUseCrew
88
{
99
public static bool Prefix(CrewmateGhostRole __instance, IUsable console, ref bool __result)
1010
{
11-
if ((__instance.Player.Is(RoleEnum.Phantom) && !Role.GetRole<Phantom>(__instance.Player).Caught) || (__instance.Player.Is(RoleEnum.Haunter) && !Role.GetRole<Haunter>(__instance.Player).Caught))
11+
if (__instance.Player.IsGhostRole() && !GhostRole.GetGhostRole(__instance.Player).Caught)
1212
{
1313
__result = true;
1414
return false;

0 commit comments

Comments
 (0)