From 4051876377f2c1deb9740c82793f827e91b7b76a Mon Sep 17 00:00:00 2001 From: xChipseq Date: Wed, 20 Aug 2025 16:28:01 +0200 Subject: [PATCH 1/4] fix colorblind filter creating for everyone (how tf did i miss that) --- .../Modifiers/Effects/TokenColorblind.cs | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/ChaosTokens/Modifiers/Effects/TokenColorblind.cs b/ChaosTokens/Modifiers/Effects/TokenColorblind.cs index 270f4aa..7df2299 100644 --- a/ChaosTokens/Modifiers/Effects/TokenColorblind.cs +++ b/ChaosTokens/Modifiers/Effects/TokenColorblind.cs @@ -1,7 +1,12 @@ using System.Collections; +using HarmonyLib; using MiraAPI.Utilities; using Reactor.Utilities; using Reactor.Utilities.Extensions; +using TownOfUs.Modifiers.Game.Universal; +using TownOfUs.Roles.Impostor; +using TownOfUs.Utilities; +using TownOfUs.Utilities.Appearances; using UnityEngine; namespace ChaosTokens.Modifiers.Effects; @@ -19,15 +24,37 @@ public sealed class TokenColorblind : TokenEffect public override void OnActivate() { base.OnActivate(); + if (!Player.AmOwner) return; + _filter = Utils.CreatePostprocessFilter(Assets.ColorblindMaterial.LoadAsset()); Coroutines.Start(CoAnimateFilter(_filter)); + Helpers.GetAlivePlayers().Do(p => + { + if (!p.AmOwner) + { + p.cosmetics.nameText.gameObject.SetActive(false); + p.cosmetics.colorBlindText.gameObject.SetActive(false); + } + }); } public override void OnDeactivate() { base.OnDeactivate(); - _filter.gameObject.DestroyImmediate(); - _filter = null; + if (Player.AmOwner) + { + _filter.gameObject.DestroyImmediate(); + _filter = null; + Helpers.GetAlivePlayers().Do(p => + { + if (Player.GetAppearanceType() != TownOfUsAppearances.Swooper && + Player.GetAppearanceType() != TownOfUsAppearances.Camouflage) + { + p.cosmetics.nameText.gameObject.SetActive(true); + p.cosmetics.colorBlindText.gameObject.SetActive(true); + } + }); + } } private IEnumerator CoAnimateFilter(SpriteRenderer rend) From 6c579cd4f4e51c2ae283a4a1ab7b6fafce9a2db3 Mon Sep 17 00:00:00 2001 From: xChipseq Date: Wed, 20 Aug 2025 16:28:16 +0200 Subject: [PATCH 2/4] fix random person reveal showing no notif --- ChaosTokens/Modifiers/Effects/TokenReveal.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/ChaosTokens/Modifiers/Effects/TokenReveal.cs b/ChaosTokens/Modifiers/Effects/TokenReveal.cs index 1956881..2802fab 100644 --- a/ChaosTokens/Modifiers/Effects/TokenReveal.cs +++ b/ChaosTokens/Modifiers/Effects/TokenReveal.cs @@ -21,6 +21,7 @@ public override void OnActivate() base.OnActivate(); FakeReveal = !Player.Is(role); + AdditionalModifier.RevealSource = MiscUtils.PlayerById(source); if (Player.AmOwner && FakeReveal) { From ea8dbace6cc3d04c845136bf45e2069627b68e0c Mon Sep 17 00:00:00 2001 From: xChipseq Date: Wed, 20 Aug 2025 16:28:31 +0200 Subject: [PATCH 3/4] rewrite for max reveals --- ChaosTokens/ChaosTokensRpc.cs | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/ChaosTokens/ChaosTokensRpc.cs b/ChaosTokens/ChaosTokensRpc.cs index c605b47..8fe22a0 100644 --- a/ChaosTokens/ChaosTokensRpc.cs +++ b/ChaosTokens/ChaosTokensRpc.cs @@ -41,6 +41,8 @@ public enum RpcCalls : uint public static class ChaosTokensRpc { + private static int _revealsLeft = (int)OptionGroupSingleton.Instance.MaxRoleReveals; + [MethodRpc((uint)RpcCalls.Roll)] public static void RpcRoll(this PlayerControl player) { @@ -156,8 +158,6 @@ void Reroll() } var playerRole = player.Data.Role; - int revealCount = ModifierUtils.GetPlayersWithModifier().Count(); - switch (effect) { case ChaosEffects.Defense: @@ -277,14 +277,14 @@ void Reroll() Reroll(); break; } - - if (revealCount != 0 && revealCount >= OptionGroupSingleton.Instance.MaxRoleReveals) + if (_revealsLeft <= 0) { Reroll(); break; } player.RpcAddModifier(player.Data.Role.Role, player.Data.PlayerId); + _revealsLeft--; break; case ChaosEffects.Death: if (player.HasModifier()) @@ -326,7 +326,7 @@ void Reroll() break; } - if (revealCount != 0 && revealCount >= OptionGroupSingleton.Instance.MaxRoleReveals) + if (_revealsLeft <= 0) { Reroll(); break; @@ -336,6 +336,7 @@ void Reroll() .Where(r => r.Team != player.GetTownOfUsRole()?.Team) .Select(r => (r as RoleBehaviour).Role); player.RpcAddModifier(validRoles.Random(), player.Data.PlayerId); + _revealsLeft--; break; case ChaosEffects.Hyperactive: if (player.HasModifier()) @@ -346,10 +347,8 @@ void Reroll() player.RpcAddModifier(); break; + /* case ChaosEffects.Nausea: - Reroll(); - break; - if (player.HasModifier() || player.HasModifier()) { Reroll(); @@ -364,6 +363,7 @@ void Reroll() player.RpcAddModifier(); break; + */ case ChaosEffects.Colorblind: if (player.HasModifier() || player.HasModifier()) { @@ -371,18 +371,12 @@ void Reroll() break; } - if (OptionGroupSingleton.Instance.ScreenEffectsDisabled) - { - Reroll(); - break; - } - player.RpcAddModifier(); break; case ChaosEffects.RevealRandom: - if (revealCount != 0 && revealCount >= OptionGroupSingleton.Instance.MaxRoleReveals) + if (_revealsLeft <= 0) { Reroll(); break; @@ -401,6 +395,7 @@ void Reroll() var revealVictim = revealVictims.Random(); revealVictim.RpcAddModifier(revealVictim.Data.Role.Role, player.PlayerId); + _revealsLeft--; break; case ChaosEffects.PositionSwap: var swapVictim = Helpers.GetAlivePlayers() From 6ddc6f73a497235da27dad48e5f8474f6f68993a Mon Sep 17 00:00:00 2001 From: xChipseq Date: Wed, 20 Aug 2025 16:29:10 +0200 Subject: [PATCH 4/4] temporarily remove disable screen effects setting --- ChaosTokens/Options/BalanceOptions.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChaosTokens/Options/BalanceOptions.cs b/ChaosTokens/Options/BalanceOptions.cs index d352f06..4ead2b5 100644 --- a/ChaosTokens/Options/BalanceOptions.cs +++ b/ChaosTokens/Options/BalanceOptions.cs @@ -18,8 +18,10 @@ public class BalanceOptions : AbstractOptionGroup [ModdedToggleOption("Disable Revival")] public bool ReviveDisabled { get; set; } = false; + /* [ModdedToggleOption("Disable Screen Effects")] public bool ScreenEffectsDisabled { get; set; } = false; + */ [ModdedNumberOption("Max Role Reveals", 0, 15, zeroInfinity: true)] public float MaxRoleReveals { get; set; } = 0;