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() 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) 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) { 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;