From 7d30ebd89308b14d84ed51ced52b07a137d62680 Mon Sep 17 00:00:00 2001 From: dwd0tcom Date: Sat, 9 Apr 2022 17:08:21 +0200 Subject: [PATCH] Version 3.4.5 --- README.md | 13 ++- TheOtherRoles/CustomOptionHolder.cs | 2 - TheOtherRoles/Helpers.cs | 32 +++++-- TheOtherRoles/Main.cs | 4 +- TheOtherRoles/MapOptions.cs | 8 +- TheOtherRoles/Modules/CustomHats.cs | 58 +++++++------ TheOtherRoles/Modules/CustomOptions.cs | 20 ++--- TheOtherRoles/Modules/ModUpdater.cs | 13 ++- TheOtherRoles/Patches/ClientOptionsPatch.cs | 18 ++-- TheOtherRoles/Patches/CredentialsPatch.cs | 34 +++++++- TheOtherRoles/Patches/EndGamePatch.cs | 2 +- .../Patches/GameStartManagerPatch.cs | 2 - TheOtherRoles/Patches/IntroPatch.cs | 54 ++++++++---- TheOtherRoles/Patches/LightSourcePatch.cs | 36 ++++++++ TheOtherRoles/Patches/MainMenuPatch.cs | 79 ++++++++++++++++++ TheOtherRoles/Patches/MeetingPatch.cs | 2 +- TheOtherRoles/Patches/PlayerControlPatch.cs | 47 +++-------- TheOtherRoles/Patches/RegionMenuPatch.cs | 11 ++- TheOtherRoles/Patches/RoleAssignmentPatch.cs | 5 +- TheOtherRoles/Patches/UsablesPatch.cs | 4 +- TheOtherRoles/RPC.cs | 17 +--- .../Resources/HorseModeButtonOff.png | Bin 0 -> 30843 bytes TheOtherRoles/Resources/HorseModeButtonOn.png | Bin 0 -> 30556 bytes .../Resources/bannerTheHorseRoles.png | Bin 0 -> 30798 bytes TheOtherRoles/TheOtherRoles.cs | 2 +- TheOtherRoles/TheOtherRoles.csproj | 2 +- 26 files changed, 326 insertions(+), 139 deletions(-) create mode 100644 TheOtherRoles/Patches/LightSourcePatch.cs create mode 100644 TheOtherRoles/Patches/MainMenuPatch.cs create mode 100644 TheOtherRoles/Resources/HorseModeButtonOff.png create mode 100644 TheOtherRoles/Resources/HorseModeButtonOn.png create mode 100644 TheOtherRoles/Resources/bannerTheHorseRoles.png diff --git a/README.md b/README.md index a5020d77b..06697fc76 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ The [Role Assignment](#role-assignment) sections explains how the roles are bein # Releases | Among Us - Version| Mod Version | Link | |----------|-------------|-----------------| +| 2022.3.29s| v3.4.5| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v3.4.5/TheOtherRoles.zip) | 2022.2.23s| v3.4.4| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v3.4.4/TheOtherRoles.zip) | 2021.12.15s| v3.4.3| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v3.4.3/TheOtherRoles.zip) | 2021.12.15s| v3.4.2| [Download](https://github.com/Eisbison/TheOtherRoles/releases/download/v3.4.2/TheOtherRoles.zip) @@ -100,8 +101,18 @@ The [Role Assignment](#role-assignment) sections explains how the roles are bein
Click to show the Changelog +**Version 3.4.5** +- Update to Among Us version 2022.3.29s +- Added horse-mode button in the main menu (bottom right) +- Added TheOtherRoles-discord button in the main menu (bottom left, report your bugs and feature suggestions here) +- Fixed a bug where the deputy was not assigned properly +- Fixed a bug where a promoted deputy had wrong cooldown +- Fixed a bug where the killer doesn't teleport to the body +- Changed the light source to prevent vanilla bugs +- Removed dlekS (for now) :c + **Version 3.4.4** -- Fixed a bug where games were not finished properly on official servers (special thanks to miniduikboot & 6pak) +- Fixed a bug where games were not finished properly on offical servers (special thanks to miniduikboot & 6pak) **Version 3.4.3** - Fixed a bug where "Guesser Is Impostor Chance" crashed the role system diff --git a/TheOtherRoles/CustomOptionHolder.cs b/TheOtherRoles/CustomOptionHolder.cs index 88a27968e..72aa25080 100644 --- a/TheOtherRoles/CustomOptionHolder.cs +++ b/TheOtherRoles/CustomOptionHolder.cs @@ -235,7 +235,6 @@ public class CustomOptionHolder { public static CustomOption dynamicMapEnableSkeld; public static CustomOption dynamicMapEnableMira; public static CustomOption dynamicMapEnablePolus; - public static CustomOption dynamicMapEnableDleks; public static CustomOption dynamicMapEnableAirShip; @@ -477,7 +476,6 @@ public static void Load() { dynamicMapEnableMira = CustomOption.Create(502, "Enable Mira Rotation", true, dynamicMap, false); dynamicMapEnablePolus = CustomOption.Create(503, "Enable Polus Rotation", true, dynamicMap, false); dynamicMapEnableAirShip = CustomOption.Create(504, "Enable Airship Rotation", true, dynamicMap, false); - dynamicMapEnableDleks = CustomOption.Create(505, "Enable dlekS Rotation", false, dynamicMap, false); blockedRolePairings.Add((byte)RoleId.Vampire, new [] { (byte)RoleId.Warlock}); blockedRolePairings.Add((byte)RoleId.Warlock, new [] { (byte)RoleId.Vampire}); diff --git a/TheOtherRoles/Helpers.cs b/TheOtherRoles/Helpers.cs index 006b5a2b9..87c6f952c 100644 --- a/TheOtherRoles/Helpers.cs +++ b/TheOtherRoles/Helpers.cs @@ -224,16 +224,16 @@ public static void setLook(this PlayerControl target, String playerName, int col target.RawSetHat(hatId, colorId); target.RawSetName(hidePlayerName(PlayerControl.LocalPlayer, target) ? "" : playerName); - SkinData nextSkin = DestroyableSingleton.Instance.GetSkinById(skinId); + SkinViewData nextSkin = DestroyableSingleton.Instance.GetSkinById(skinId).viewData.viewData; PlayerPhysics playerPhysics = target.MyPhysics; AnimationClip clip = null; var spriteAnim = playerPhysics.Skin.animator; var currentPhysicsAnim = playerPhysics.Animator.GetCurrentAnimation(); - if (currentPhysicsAnim == playerPhysics.RunAnim) clip = nextSkin.RunAnim; - else if (currentPhysicsAnim == playerPhysics.SpawnAnim) clip = nextSkin.SpawnAnim; - else if (currentPhysicsAnim == playerPhysics.EnterVentAnim) clip = nextSkin.EnterVentAnim; - else if (currentPhysicsAnim == playerPhysics.ExitVentAnim) clip = nextSkin.ExitVentAnim; - else if (currentPhysicsAnim == playerPhysics.IdleAnim) clip = nextSkin.IdleAnim; + if (currentPhysicsAnim == playerPhysics.CurrentAnimationGroup.RunAnim) clip = nextSkin.RunAnim; + else if (currentPhysicsAnim == playerPhysics.CurrentAnimationGroup.SpawnAnim) clip = nextSkin.SpawnAnim; + else if (currentPhysicsAnim == playerPhysics.CurrentAnimationGroup.EnterVentAnim) clip = nextSkin.EnterVentAnim; + else if (currentPhysicsAnim == playerPhysics.CurrentAnimationGroup.ExitVentAnim) clip = nextSkin.ExitVentAnim; + else if (currentPhysicsAnim == playerPhysics.CurrentAnimationGroup.IdleAnim) clip = nextSkin.IdleAnim; else clip = nextSkin.IdleAnim; float progress = playerPhysics.Animator.m_animator.GetCurrentAnimatorStateInfo(0).normalizedTime; playerPhysics.Skin.skin = nextSkin; @@ -242,13 +242,31 @@ public static void setLook(this PlayerControl target, String playerName, int col spriteAnim.m_animator.Update(0f); if (target.CurrentPet) UnityEngine.Object.Destroy(target.CurrentPet.gameObject); - target.CurrentPet = UnityEngine.Object.Instantiate(DestroyableSingleton.Instance.GetPetById(petId).PetPrefab); + target.CurrentPet = UnityEngine.Object.Instantiate(DestroyableSingleton.Instance.GetPetById(petId).viewData.viewData); target.CurrentPet.transform.position = target.transform.position; target.CurrentPet.Source = target; target.CurrentPet.Visible = target.Visible; PlayerControl.SetPlayerMaterialColors(colorId, target.CurrentPet.rend); } + public static void showFlash(Color color, float duration=1f) { + if (HudManager.Instance == null || HudManager.Instance.FullScreen == null) return; + HudManager.Instance.FullScreen.gameObject.SetActive(true); + HudManager.Instance.FullScreen.enabled = true; + HudManager.Instance.StartCoroutine(Effects.Lerp(duration, new Action((p) => { + var renderer = HudManager.Instance.FullScreen; + + if (p < 0.5) { + if (renderer != null) + renderer.color = new Color(color.r, color.g, color.b, Mathf.Clamp01(p * 2 * 0.75f)); + } else { + if (renderer != null) + renderer.color = new Color(color.r, color.g, color.b, Mathf.Clamp01((1 - p) * 2 * 0.75f)); + } + if (p == 1f && renderer != null) renderer.enabled = false; + }))); + } + public static bool roleCanUseVents(this PlayerControl player) { bool roleCouldUse = false; if (Engineer.engineer != null && Engineer.engineer == player) diff --git a/TheOtherRoles/Main.cs b/TheOtherRoles/Main.cs index e87ffbad7..f8b414411 100644 --- a/TheOtherRoles/Main.cs +++ b/TheOtherRoles/Main.cs @@ -21,7 +21,7 @@ namespace TheOtherRoles public class TheOtherRolesPlugin : BasePlugin { public const string Id = "me.eisbison.theotherroles"; - public const string VersionString = "3.4.4"; + public const string VersionString = "3.4.5"; public static System.Version Version = System.Version.Parse(VersionString); internal static BepInEx.Logging.ManualLogSource Logger; @@ -38,6 +38,7 @@ public class TheOtherRolesPlugin : BasePlugin public static ConfigEntry GhostsSeeVotes{ get; set; } public static ConfigEntry ShowRoleSummary { get; set; } public static ConfigEntry ShowLighterDarker { get; set; } + public static ConfigEntry EnableHorseMode { get; set; } public static ConfigEntry StreamerModeReplacementText { get; set; } public static ConfigEntry StreamerModeReplacementColor { get; set; } public static ConfigEntry Ip { get; set; } @@ -66,6 +67,7 @@ public override void Load() { GhostsSeeVotes = Config.Bind("Custom", "Ghosts See Votes", true); ShowRoleSummary = Config.Bind("Custom", "Show Role Summary", true); ShowLighterDarker = Config.Bind("Custom", "Show Lighter / Darker", true); + EnableHorseMode = Config.Bind("Custom", "Enable Horse Mode", false); ShowPopUpVersion = Config.Bind("Custom", "Show PopUp", "0"); StreamerModeReplacementText = Config.Bind("Custom", "Streamer Mode Replacement Text", "\n\nThe Other Roles"); StreamerModeReplacementColor = Config.Bind("Custom", "Streamer Mode Replacement Text Hex Color", "#87AAF5FF"); diff --git a/TheOtherRoles/MapOptions.cs b/TheOtherRoles/MapOptions.cs index 2c69f53df..49b66694e 100644 --- a/TheOtherRoles/MapOptions.cs +++ b/TheOtherRoles/MapOptions.cs @@ -17,6 +17,7 @@ static class MapOptions { public static bool showRoleSummary = true; public static bool allowParallelMedBayScans = false; public static bool showLighterDarker = true; + public static bool enableHorseMode = false; // Updating values public static int meetingsCount = 0; @@ -24,7 +25,7 @@ static class MapOptions { public static List ventsToSeal = new List(); public static Dictionary playerIcons = new Dictionary(); -public static void clearAndReloadMapOptions() { + public static void clearAndReloadMapOptions() { meetingsCount = 0; camerasToAdd = new List(); ventsToSeal = new List(); @@ -35,11 +36,16 @@ public static void clearAndReloadMapOptions() { noVoteIsSelfVote = CustomOptionHolder.noVoteIsSelfVote.getBool(); hidePlayerNames = CustomOptionHolder.hidePlayerNames.getBool(); allowParallelMedBayScans = CustomOptionHolder.allowParallelMedBayScans.getBool(); + } + + public static void reloadPluginOptions() { ghostsSeeRoles = TheOtherRolesPlugin.GhostsSeeRoles.Value; ghostsSeeTasks = TheOtherRolesPlugin.GhostsSeeTasks.Value; ghostsSeeVotes = TheOtherRolesPlugin.GhostsSeeVotes.Value; showRoleSummary = TheOtherRolesPlugin.ShowRoleSummary.Value; showLighterDarker = TheOtherRolesPlugin.ShowLighterDarker.Value; + enableHorseMode = TheOtherRolesPlugin.EnableHorseMode.Value; + Patches.ShouldAlwaysHorseAround.isHorseMode = TheOtherRolesPlugin.EnableHorseMode.Value; } } } \ No newline at end of file diff --git a/TheOtherRoles/Modules/CustomHats.cs b/TheOtherRoles/Modules/CustomHats.cs index b94279b83..0b86984e0 100644 --- a/TheOtherRoles/Modules/CustomHats.cs +++ b/TheOtherRoles/Modules/CustomHats.cs @@ -126,26 +126,24 @@ private static Sprite CreateHatSprite(string path, bool fromDisk = false) { return sprite; } - private static HatBehaviour CreateHatBehaviour(CustomHat ch, bool fromDisk = false, bool testOnly = false) { - if (hatShader == null && DestroyableSingleton.InstanceExists) { - foreach (HatBehaviour h in DestroyableSingleton.Instance.AllHats) { - if (h.AltShader != null) { - hatShader = h.AltShader; - break; - } - } + private static HatData CreateHatBehaviour(CustomHat ch, bool fromDisk = false, bool testOnly = false) { + if (hatShader == null) { + Material tmpShader = new Material("PlayerMaterial"); + tmpShader.shader = Shader.Find("Unlit/PlayerShader"); + hatShader = tmpShader; } - HatBehaviour hat = ScriptableObject.CreateInstance(); - hat.MainImage = CreateHatSprite(ch.resource, fromDisk); + HatData hat = ScriptableObject.CreateInstance(); + hat.hatViewData.viewData = ScriptableObject.CreateInstance(); + hat.hatViewData.viewData.MainImage = CreateHatSprite(ch.resource, fromDisk); if (ch.backresource != null) { - hat.BackImage = CreateHatSprite(ch.backresource, fromDisk); + hat.hatViewData.viewData.BackImage = CreateHatSprite(ch.backresource, fromDisk); ch.behind = true; // Required to view backresource } if (ch.climbresource != null) - hat.ClimbImage = CreateHatSprite(ch.climbresource, fromDisk); + hat.hatViewData.viewData.ClimbImage = CreateHatSprite(ch.climbresource, fromDisk); hat.name = ch.name; - hat.Order = 99; + hat.displayOrder = 99; hat.ProductId = "hat_" + ch.name.Replace(' ', '_'); hat.InFront = !ch.behind; hat.NoBounce = !ch.bounce; @@ -153,7 +151,7 @@ private static HatBehaviour CreateHatBehaviour(CustomHat ch, bool fromDisk = fal hat.Free = true; if (ch.adaptive && hatShader != null) - hat.AltShader = hatShader; + hat.hatViewData.viewData.AltShader = hatShader; HatExtension extend = new HatExtension(); extend.author = ch.author != null ? ch.author : "Unknown"; @@ -175,7 +173,7 @@ private static HatBehaviour CreateHatBehaviour(CustomHat ch, bool fromDisk = fal return hat; } - private static HatBehaviour CreateHatBehaviour(CustomHatLoader.CustomHatOnline chd) { + private static HatData CreateHatBehaviour(CustomHatLoader.CustomHatOnline chd) { string filePath = Path.GetDirectoryName(Application.dataPath) + @"\TheOtherHats\"; chd.resource = filePath + chd.resource; if (chd.backresource != null) @@ -196,7 +194,7 @@ static void Prefix(HatManager __instance) { RUNNING = true; // prevent simultanious execution try { while (CustomHatLoader.hatdetails.Count > 0) { - __instance.AllHats.Add(CreateHatBehaviour(CustomHatLoader.hatdetails[0])); + __instance.allHats.Add(CreateHatBehaviour(CustomHatLoader.hatdetails[0])); CustomHatLoader.hatdetails.RemoveAt(0); } } catch (System.Exception e) { @@ -214,7 +212,7 @@ static void Postfix(HatManager __instance) { private static class PlayerPhysicsHandleAnimationPatch { private static void Postfix(PlayerPhysics __instance) { AnimationClip currentAnimation = __instance.Animator.GetCurrentAnimation(); - if (currentAnimation == __instance.ClimbAnim || currentAnimation == __instance.ClimbDownAnim) return; + if (currentAnimation == __instance.CurrentAnimationGroup.ClimbAnim || currentAnimation == __instance.CurrentAnimationGroup.ClimbDownAnim) return; HatParent hp = __instance.myPlayer.HatRenderer; if (hp.Hat == null) return; HatExtension extend = hp.Hat.getHatExtension(); @@ -223,14 +221,14 @@ private static void Postfix(PlayerPhysics __instance) { if (__instance.rend.flipX) { hp.FrontLayer.sprite = extend.FlipImage; } else { - hp.FrontLayer.sprite = hp.Hat.MainImage; + hp.FrontLayer.sprite = hp.hatView.MainImage; } } if (extend.BackFlipImage != null) { if (__instance.rend.flipX) { hp.BackLayer.sprite = extend.BackFlipImage; } else { - hp.BackLayer.sprite = hp.Hat.BackImage; + hp.BackLayer.sprite = hp.hatView.BackImage; } } } @@ -261,7 +259,7 @@ public class HatsTabOnEnablePatch { public static string innerslothPackageName = "Innersloth Hats"; private static TMPro.TMP_Text textTemplate; - public static float createHatPackage(List> hats, string packageName, float YStart, HatsTab __instance) { + public static float createHatPackage(List> hats, string packageName, float YStart, HatsTab __instance) { bool isDefaultPackage = innerslothPackageName == packageName; if (!isDefaultPackage) hats = hats.OrderBy(x => x.Item1.name).ToList(); @@ -277,7 +275,7 @@ public static float createHatPackage(List(); - HatBehaviour[] unlockedHats = DestroyableSingleton.Instance.GetUnlockedHats(); - Dictionary>> packages = new Dictionary>>(); + HatData[] unlockedHats = DestroyableSingleton.Instance.GetUnlockedHats(); + Dictionary>> packages = new Dictionary>>(); - foreach (HatBehaviour hatBehaviour in unlockedHats) { + foreach (HatData hatBehaviour in unlockedHats) { HatExtension ext = hatBehaviour.getHatExtension(); if (ext != null) { if (!packages.ContainsKey(ext.package)) - packages[ext.package] = new List>(); - packages[ext.package].Add(new System.Tuple(hatBehaviour, ext)); + packages[ext.package] = new List>(); + packages[ext.package].Add(new System.Tuple(hatBehaviour, ext)); } else { if (!packages.ContainsKey(innerslothPackageName)) - packages[innerslothPackageName] = new List>(); - packages[innerslothPackageName].Add(new System.Tuple(hatBehaviour, null)); + packages[innerslothPackageName] = new List>(); + packages[innerslothPackageName].Add(new System.Tuple(hatBehaviour, null)); } } @@ -353,7 +351,7 @@ public static void Postfix(HatsTab __instance) { return 500; }); foreach (string key in orderedKeys) { - List> value = packages[key]; + List> value = packages[key]; YOffset = createHatPackage(value, key, YOffset, __instance); } @@ -497,7 +495,7 @@ public class CustomHatOnline : CustomHats.CustomHat { } } public static class CustomHatExtensions { - public static CustomHats.HatExtension getHatExtension(this HatBehaviour hat) { + public static CustomHats.HatExtension getHatExtension(this HatData hat) { CustomHats.HatExtension ret = null; if (CustomHats.TestExt != null && CustomHats.TestExt.condition.Equals(hat.name)) { return CustomHats.TestExt; diff --git a/TheOtherRoles/Modules/CustomOptions.cs b/TheOtherRoles/Modules/CustomOptions.cs index 759069926..24589c703 100644 --- a/TheOtherRoles/Modules/CustomOptions.cs +++ b/TheOtherRoles/Modules/CustomOptions.cs @@ -295,26 +295,26 @@ public static void Prefix(GameSettingMenu __instance) { public static void Postfix(GameSettingMenu __instance) { // Setup mapNameTransform - var mapNameTransform = __instance.AllItems.FirstOrDefault(x => x.gameObject.activeSelf && x.name.Equals("MapName", StringComparison.OrdinalIgnoreCase)); + var mapNameTransform = __instance.AllItems.FirstOrDefault(x => x.name.Equals("MapName", StringComparison.OrdinalIgnoreCase)); if (mapNameTransform == null) return; - var options = new Il2CppSystem.Collections.Generic.List>(); for (int i = 0; i < Constants.MapNames.Length; i++) { + if (i == 3) continue; // Ignore dlekS var kvp = new Il2CppSystem.Collections.Generic.KeyValuePair(); kvp.key = Constants.MapNames[i]; kvp.value = i; options.Add(kvp); } mapNameTransform.GetComponent().Values = options; - } - } + mapNameTransform.gameObject.active = true; - [HarmonyPatch(typeof(Constants), nameof(Constants.ShouldFlipSkeld))] - class ConstantsShouldFlipSkeldPatch { - public static bool Prefix(ref bool __result) { - if (PlayerControl.GameOptions == null) return true; - __result = PlayerControl.GameOptions.MapId == 3; - return false; + foreach (Transform i in __instance.AllItems.ToList()) { + float num = -0.5f; + if (i.name.Equals("MapName", StringComparison.OrdinalIgnoreCase)) num = -0.25f; + if (i.name.Equals("NumImpostors", StringComparison.OrdinalIgnoreCase) || i.name.Equals("ResetToDefault", StringComparison.OrdinalIgnoreCase)) num = 0f; + i.position += new Vector3(0, num, 0); + } + __instance.Scroller.ContentYBounds.max += 0.5F; } } diff --git a/TheOtherRoles/Modules/ModUpdater.cs b/TheOtherRoles/Modules/ModUpdater.cs index 87b9b5bc2..aab8679f1 100644 --- a/TheOtherRoles/Modules/ModUpdater.cs +++ b/TheOtherRoles/Modules/ModUpdater.cs @@ -36,17 +36,23 @@ private static void Prefix(MainMenuManager __instance) { if (template == null) return; var button = UnityEngine.Object.Instantiate(template, null); - button.transform.localPosition = new Vector3(button.transform.localPosition.x, button.transform.localPosition.y + 0.6f, button.transform.localPosition.z); + button.transform.localPosition = new Vector3(button.transform.localPosition.x, button.transform.localPosition.y + 1.2f, button.transform.localPosition.z); PassiveButton passiveButton = button.GetComponent(); + SpriteRenderer buttonSprite = button.GetComponent(); passiveButton.OnClick = new Button.ButtonClickedEvent(); passiveButton.OnClick.AddListener((UnityEngine.Events.UnityAction)onClick); - + var text = button.transform.GetChild(0).GetComponent(); __instance.StartCoroutine(Effects.Lerp(0.1f, new System.Action((p) => { - text.SetText("Update\nThe Other Roles"); + text.SetText("Update"); }))); + buttonSprite.color = text.color = Color.red; + passiveButton.OnMouseOut.AddListener((UnityEngine.Events.UnityAction)delegate { + buttonSprite.color = text.color = Color.red; + }); + TwitchManager man = DestroyableSingleton.Instance; ModUpdater.InfoPopup = UnityEngine.Object.Instantiate(man.TwitchPopup); ModUpdater.InfoPopup.TextAreaTMP.fontSize *= 0.7f; @@ -85,6 +91,7 @@ public static void LaunchUpdater() { DestroyableSingleton.Instance.Announcement.gameObject.SetActive(true); TheOtherRolesPlugin.ShowPopUpVersion.Value = TheOtherRolesPlugin.VersionString; } + MapOptions.reloadPluginOptions(); } public static void ExecuteUpdate() { diff --git a/TheOtherRoles/Patches/ClientOptionsPatch.cs b/TheOtherRoles/Patches/ClientOptionsPatch.cs index 9f5a77bcf..69837284c 100644 --- a/TheOtherRoles/Patches/ClientOptionsPatch.cs +++ b/TheOtherRoles/Patches/ClientOptionsPatch.cs @@ -88,13 +88,21 @@ private static void InitializeMoreButton(OptionsMenuBehaviour __instance) { var moreOptions = Object.Instantiate(buttonPrefab, __instance.CensorChatButton.transform.parent); var transform = __instance.CensorChatButton.transform; + __instance.CensorChatButton.Text.transform.localScale = new Vector3(1 / 0.66f, 1, 1); _origin ??= transform.localPosition; - - transform.localPosition = _origin.Value + Vector3.left * 1.3f; - moreOptions.transform.localPosition = _origin.Value + Vector3.right * 1.3f; - + + transform.localPosition = _origin.Value + Vector3.left * 0.45f; + transform.localScale = new Vector3(0.66f, 1, 1); + __instance.EnableFriendInvitesButton.transform.localScale = new Vector3(0.66f, 1, 1); + __instance.EnableFriendInvitesButton.transform.localPosition += Vector3.right * 0.5f; + __instance.EnableFriendInvitesButton.Text.transform.localScale = new Vector3(1.2f, 1, 1); + + moreOptions.transform.localPosition = _origin.Value + Vector3.right * 4f / 3f; + moreOptions.transform.localScale = new Vector3(0.66f, 1, 1); + moreOptions.gameObject.SetActive(true); moreOptions.Text.text = "Mod Options..."; + moreOptions.Text.transform.localScale = new Vector3(1 / 0.66f, 1, 1); var moreOptionsButton = moreOptions.GetComponent(); moreOptionsButton.OnClick = new ButtonClickedEvent(); moreOptionsButton.OnClick.AddListener((Action) (() => @@ -191,7 +199,7 @@ private static IEnumerable GetAllChilds(this GameObject Go) } } - private class SelectionBehaviour + public class SelectionBehaviour { public string Title; public Func OnClick; diff --git a/TheOtherRoles/Patches/CredentialsPatch.cs b/TheOtherRoles/Patches/CredentialsPatch.cs index d7d7edaa2..0ee14ca07 100644 --- a/TheOtherRoles/Patches/CredentialsPatch.cs +++ b/TheOtherRoles/Patches/CredentialsPatch.cs @@ -72,8 +72,12 @@ static void Postfix(PingTracker __instance){ } [HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start))] - private static class LogoPatch + public static class LogoPatch { + public static SpriteRenderer renderer; + public static Sprite bannerSprite; + public static Sprite horseBannerSprite; + private static PingTracker instance; static void Postfix(PingTracker __instance) { var amongUsLogo = GameObject.Find("bannerLogo_AmongUs"); if (amongUsLogo != null) { @@ -83,8 +87,34 @@ static void Postfix(PingTracker __instance) { var torLogo = new GameObject("bannerLogo_TOR"); torLogo.transform.position = Vector3.up; - var renderer = torLogo.AddComponent(); + renderer = torLogo.AddComponent(); + loadSprites(); renderer.sprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.Banner.png", 300f); + + instance = __instance; + loadSprites(); + renderer.sprite = MapOptions.enableHorseMode ? horseBannerSprite : bannerSprite; + } + + public static void loadSprites() { + if (bannerSprite == null) bannerSprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.Banner.png", 300f); + if (horseBannerSprite == null) horseBannerSprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.bannerTheHorseRoles.png", 300f); + } + + public static void updateSprite() { + loadSprites(); + if (renderer != null) { + float fadeDuration = 1f; + instance.StartCoroutine(Effects.Lerp(fadeDuration, new Action((p) => { + renderer.color = new Color(1, 1, 1, 1 - p); + if (p == 1) { + renderer.sprite = MapOptions.enableHorseMode ? horseBannerSprite : bannerSprite; + instance.StartCoroutine(Effects.Lerp(fadeDuration, new Action((p) => { + renderer.color = new Color(1, 1, 1, p); + }))); + } + }))); + } } } } diff --git a/TheOtherRoles/Patches/EndGamePatch.cs b/TheOtherRoles/Patches/EndGamePatch.cs index 371b2c4a6..28a2966a7 100644 --- a/TheOtherRoles/Patches/EndGamePatch.cs +++ b/TheOtherRoles/Patches/EndGamePatch.cs @@ -249,7 +249,7 @@ public static void Postfix(EndGameManager __instance) { poolablePlayer.transform.localScale = vector; poolablePlayer.UpdateFromPlayerOutfit(winningPlayerData2, winningPlayerData2.IsDead); if (winningPlayerData2.IsDead) { - poolablePlayer.Body.sprite = __instance.GhostSprite; + poolablePlayer.CurrentBodySprite.BodySprite.sprite = poolablePlayer.CurrentBodySprite.GhostSprite; poolablePlayer.SetDeadFlipX(i % 2 == 0); } else { poolablePlayer.SetFlipX(i % 2 == 0); diff --git a/TheOtherRoles/Patches/GameStartManagerPatch.cs b/TheOtherRoles/Patches/GameStartManagerPatch.cs index 5229a8123..7e323277b 100644 --- a/TheOtherRoles/Patches/GameStartManagerPatch.cs +++ b/TheOtherRoles/Patches/GameStartManagerPatch.cs @@ -172,8 +172,6 @@ public static bool Prefix(GameStartManager __instance) { possibleMaps.Add(1); if (CustomOptionHolder.dynamicMapEnablePolus.getBool()) possibleMaps.Add(2); - if (CustomOptionHolder.dynamicMapEnableDleks.getBool()) - possibleMaps.Add(3); if (CustomOptionHolder.dynamicMapEnableAirShip.getBool()) possibleMaps.Add(4); byte chosenMapId = possibleMaps[TheOtherRoles.rnd.Next(possibleMaps.Count)]; diff --git a/TheOtherRoles/Patches/IntroPatch.cs b/TheOtherRoles/Patches/IntroPatch.cs index 1ce87e8aa..5dcfae570 100644 --- a/TheOtherRoles/Patches/IntroPatch.cs +++ b/TheOtherRoles/Patches/IntroPatch.cs @@ -17,8 +17,8 @@ public static void Prefix(IntroCutscene __instance) { foreach (PlayerControl p in PlayerControl.AllPlayerControls) { GameData.PlayerInfo data = p.Data; PoolablePlayer player = UnityEngine.Object.Instantiate(__instance.PlayerPrefab, HudManager.Instance.transform); - PlayerControl.SetPlayerMaterialColors(data.DefaultOutfit.ColorId, player.Body); - DestroyableSingleton.Instance.SetSkin(player.Skin.layer, data.DefaultOutfit.SkinId); + PlayerControl.SetPlayerMaterialColors(data.DefaultOutfit.ColorId, player.CurrentBodySprite.BodySprite); + player.SetSkin(data.DefaultOutfit.SkinId, data.DefaultOutfit.ColorId); player.HatSlot.SetHat(data.DefaultOutfit.HatId, data.DefaultOutfit.ColorId); PlayerControl.SetPetImage(data.DefaultOutfit.PetId, data.DefaultOutfit.ColorId, player.PetSlot); player.NameText.text = data.PlayerName; @@ -90,43 +90,56 @@ public static void setupIntroTeam(IntroCutscene __instance, ref Il2CppSystem.Co } } - [HarmonyPatch(typeof(IntroCutscene), nameof(IntroCutscene.SetUpRoleText))] - class SetUpRoleTextPatch { - public static void Postfix(IntroCutscene __instance) { - if (!CustomOptionHolder.activateRoles.getBool()) return; // Don't override the intro of the vanilla roles + public static IEnumerator EndShowRole(IntroCutscene __instance) { + yield return new WaitForSeconds(5f); + + __instance.YouAreText.gameObject.SetActive(false); + __instance.RoleText.gameObject.SetActive(false); + __instance.RoleBlurbText.gameObject.SetActive(false); + __instance.ourCrewmate.gameObject.SetActive(false); + + } + [HarmonyPatch(typeof(IntroCutscene), nameof(IntroCutscene.ShowRole))] + class SetUpRoleTextPatch { + static public void SetRoleTexts(IntroCutscene __instance) { + // Don't override the intro of the vanilla roles List infos = RoleInfo.getRoleInfoForPlayer(PlayerControl.LocalPlayer); RoleInfo roleInfo = infos.Where(info => info.roleId != RoleId.Lover).FirstOrDefault(); - if (roleInfo != null) { __instance.RoleText.text = roleInfo.name; __instance.RoleText.color = roleInfo.color; __instance.RoleBlurbText.text = roleInfo.introDescription; __instance.RoleBlurbText.color = roleInfo.color; } - if (infos.Any(info => info.roleId == RoleId.Lover)) { PlayerControl otherLover = PlayerControl.LocalPlayer == Lovers.lover1 ? Lovers.lover2 : Lovers.lover1; __instance.RoleBlurbText.text += Helpers.cs(Lovers.color, $"\n♥ You are in love with {otherLover?.Data?.PlayerName ?? ""} ♥"); } if (Deputy.knowsSheriff && Deputy.deputy != null && Sheriff.sheriff != null) { - if (infos.Any(info => info.roleId == RoleId.Sheriff)) + if (infos.Any(info => info.roleId == RoleId.Sheriff)) __instance.RoleBlurbText.text += Helpers.cs(Sheriff.color, $"\nYour Deputy is {Deputy.deputy?.Data?.PlayerName ?? ""}"); else if (infos.Any(info => info.roleId == RoleId.Deputy)) __instance.RoleBlurbText.text += Helpers.cs(Sheriff.color, $"\nYour Sheriff is {Sheriff.sheriff?.Data?.PlayerName ?? ""}"); } - + } + public static bool Prefix(IntroCutscene __instance) { + if (!CustomOptionHolder.activateRoles.getBool()) return true; + HudManager.Instance.StartCoroutine(Effects.Lerp(1f, new Action((p) => { + SetRoleTexts(__instance); + }))); + return true; } } [HarmonyPatch(typeof(IntroCutscene), nameof(IntroCutscene.BeginCrewmate))] class BeginCrewmatePatch { - public static void Prefix(IntroCutscene __instance, ref Il2CppSystem.Collections.Generic.List yourTeam) { - setupIntroTeamIcons(__instance, ref yourTeam); + public static void Prefix(IntroCutscene __instance, ref Il2CppSystem.Collections.Generic.List teamToDisplay) { + setupIntroTeamIcons(__instance, ref teamToDisplay); } - public static void Postfix(IntroCutscene __instance, ref Il2CppSystem.Collections.Generic.List yourTeam) { - setupIntroTeam(__instance, ref yourTeam); + public static void Postfix(IntroCutscene __instance, ref Il2CppSystem.Collections.Generic.List teamToDisplay) { + setupIntroTeam(__instance, ref teamToDisplay); } } @@ -141,5 +154,18 @@ public static void Postfix(IntroCutscene __instance, ref Il2CppSystem.Collectio } } } + + [HarmonyPatch(typeof(Constants), nameof(Constants.ShouldHorseAround))] + public static class ShouldAlwaysHorseAround { + public static bool isHorseMode; + public static bool Prefix(ref bool __result) { + if (isHorseMode != MapOptions.enableHorseMode && LobbyBehaviour.Instance != null) __result = isHorseMode; + else { + __result = MapOptions.enableHorseMode; + isHorseMode = MapOptions.enableHorseMode; + } + return false; + } + } } diff --git a/TheOtherRoles/Patches/LightSourcePatch.cs b/TheOtherRoles/Patches/LightSourcePatch.cs new file mode 100644 index 000000000..0112baac8 --- /dev/null +++ b/TheOtherRoles/Patches/LightSourcePatch.cs @@ -0,0 +1,36 @@ +using HarmonyLib; +using System; +using Hazel; +using UnityEngine; +using UnityEngine.Rendering; + + +namespace TheOtherRoles.Patches { + + [HarmonyPatch(typeof(LightSource), nameof(LightSource.DrawOcclusion))] + + class LightSourceUpdatePatch { + static bool Prefix(LightSource __instance, float effectiveRadius) { + if (__instance.cb == null) { + __instance.cb = new CommandBuffer(); + __instance.cb.name = "Draw occlusion"; + } + if (__instance.shadowTexture && __instance.shadowCasterMaterial) { + float num = (float)__instance.shadowTexture.width; + __instance.shadowCasterMaterial.SetFloat("_DepthCompressionValue", effectiveRadius); + __instance.cb.Clear(); + __instance.cb.SetRenderTarget(__instance.shadowTexture); + __instance.cb.ClearRenderTarget(true, true, new Color(1f, 1f, 1f, 1f)); + __instance.cb.SetGlobalTexture("_ShmapTexture", __instance.shadowTexture); + __instance.cb.SetGlobalFloat("_Radius", __instance.LightRadius); + __instance.cb.SetGlobalFloat("_Column", 0f); + __instance.cb.SetGlobalVector("_lightPosition", __instance.transform.position + Vector3.down * 0.095f); ; + __instance.cb.SetGlobalVector("_TexelSize", new Vector4(1f / num, 1f / num, num, num)); + __instance.cb.SetGlobalFloat("_DepthCompressionValue", effectiveRadius); + __instance.cb.DrawMesh(__instance.occluderMesh, Matrix4x4.identity, __instance.shadowCasterMaterial); + Graphics.ExecuteCommandBuffer(__instance.cb); + } + return false; + } + } +} \ No newline at end of file diff --git a/TheOtherRoles/Patches/MainMenuPatch.cs b/TheOtherRoles/Patches/MainMenuPatch.cs new file mode 100644 index 000000000..f98200d3d --- /dev/null +++ b/TheOtherRoles/Patches/MainMenuPatch.cs @@ -0,0 +1,79 @@ +using HarmonyLib; +using UnityEngine; +using UnityEngine.UI; +using static UnityEngine.UI.Button; +using Object = UnityEngine.Object; +using TheOtherRoles.Patches; + +namespace TheOtherRoles.Modules { + [HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start))] + public class MainMenuPatch { + private static bool horseButtonState = MapOptions.enableHorseMode; + private static Sprite horseModeOffSprite = null; + private static Sprite horseModeOnSprite = null; + + private static void Prefix(MainMenuManager __instance) { + CustomHatLoader.LaunchHatFetcher(); + var template = GameObject.Find("ExitGameButton"); + if (template == null) return; + + var buttonDiscord = UnityEngine.Object.Instantiate(template, null); + buttonDiscord.transform.localPosition = new Vector3(buttonDiscord.transform.localPosition.x, buttonDiscord.transform.localPosition.y + 0.6f, buttonDiscord.transform.localPosition.z); + + var textDiscord = buttonDiscord.transform.GetChild(0).GetComponent(); + __instance.StartCoroutine(Effects.Lerp(0.1f, new System.Action((p) => { + textDiscord.SetText("Discord"); + }))); + + PassiveButton passiveButtonDiscord = buttonDiscord.GetComponent(); + SpriteRenderer buttonSpriteDiscord = buttonDiscord.GetComponent(); + + passiveButtonDiscord.OnClick = new Button.ButtonClickedEvent(); + passiveButtonDiscord.OnClick.AddListener((UnityEngine.Events.UnityAction)delegate { + Application.OpenURL("https://discord.gg/77RkMJHWsM"); + }); + + Color discordColor = new Color32(88, 101, 242, byte.MaxValue); + buttonSpriteDiscord.color = textDiscord.color = discordColor; + passiveButtonDiscord.OnMouseOut.AddListener((UnityEngine.Events.UnityAction)delegate { + buttonSpriteDiscord.color = textDiscord.color = discordColor; + }); + + + // Horse mode stuff + var horseModeSelectionBehavior = new ClientOptionsPatch.SelectionBehaviour("Enable Horse Mode", () => MapOptions.enableHorseMode = TheOtherRolesPlugin.EnableHorseMode.Value = !TheOtherRolesPlugin.EnableHorseMode.Value, TheOtherRolesPlugin.EnableHorseMode.Value); + + var bottomTemplate = GameObject.Find("InventoryButton"); + if (bottomTemplate == null) return; + var horseButton = Object.Instantiate(bottomTemplate, bottomTemplate.transform.parent); + var passiveHorseButton = horseButton.GetComponent(); + var spriteHorseButton = horseButton.GetComponent(); + + horseModeOffSprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.HorseModeButtonOff.png", 75f); + horseModeOnSprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.HorseModeButtonOn.png", 75f); + + spriteHorseButton.sprite = horseButtonState ? horseModeOnSprite : horseModeOffSprite; + + passiveHorseButton.OnClick = new ButtonClickedEvent(); + + passiveHorseButton.OnClick.AddListener((UnityEngine.Events.UnityAction)delegate { + horseButtonState = horseModeSelectionBehavior.OnClick(); + if (horseButtonState) { + if (horseModeOnSprite == null) horseModeOnSprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.HorseModeButtonOn.png", 75f); + spriteHorseButton.sprite = horseModeOnSprite; + } + else { + if (horseModeOffSprite == null) horseModeOffSprite = Helpers.loadSpriteFromResources("TheOtherRoles.Resources.HorseModeButtonOff.png", 75f); + spriteHorseButton.sprite = horseModeOffSprite; + } + CredentialsPatch.LogoPatch.updateSprite(); + // Avoid wrong Player Particles floating around in the background + var particles = GameObject.FindObjectOfType(); + if (particles != null) { + particles.pool.ReclaimAll(); + particles.Start(); + } + }); + } + } +} \ No newline at end of file diff --git a/TheOtherRoles/Patches/MeetingPatch.cs b/TheOtherRoles/Patches/MeetingPatch.cs index 39596f286..82ad8006e 100644 --- a/TheOtherRoles/Patches/MeetingPatch.cs +++ b/TheOtherRoles/Patches/MeetingPatch.cs @@ -272,7 +272,7 @@ static void guesserOnClick(int buttonTarget, MeetingHud __instance) { Transform button = UnityEngine.Object.Instantiate(buttonTemplate, buttonParent); Transform buttonMask = UnityEngine.Object.Instantiate(maskTemplate, buttonParent); TMPro.TextMeshPro label = UnityEngine.Object.Instantiate(textTemplate, button); - button.GetComponent().sprite = DestroyableSingleton.Instance.AllNamePlates[0].Image; + button.GetComponent().sprite = DestroyableSingleton.Instance.GetNamePlateById("nameplate_NoPlate")?.viewData?.viewData?.Image; buttons.Add(button); int row = i/5, col = i%5; buttonParent.localPosition = new Vector3(-3.47f + 1.75f * col, 1.5f - 0.45f * row, -5); diff --git a/TheOtherRoles/Patches/PlayerControlPatch.cs b/TheOtherRoles/Patches/PlayerControlPatch.cs index cbc9e8da4..69ef856a9 100644 --- a/TheOtherRoles/Patches/PlayerControlPatch.cs +++ b/TheOtherRoles/Patches/PlayerControlPatch.cs @@ -47,17 +47,17 @@ static PlayerControl setTarget(bool onlyCrewmates = false, bool targetPlayersInV } static void setPlayerOutline(PlayerControl target, Color color) { - if (target == null || target.myRend == null) return; + if (target == null || target.MyRend == null) return; - target.myRend.material.SetFloat("_Outline", 1f); - target.myRend.material.SetColor("_OutlineColor", color); + target.MyRend.material.SetFloat("_Outline", 1f); + target.MyRend.material.SetColor("_OutlineColor", color); } // Update functions static void setBasePlayerOutlines() { foreach (PlayerControl target in PlayerControl.AllPlayerControls) { - if (target == null || target.myRend == null) continue; + if (target == null || target.MyRend == null) continue; bool isMorphedMorphling = target == Morphling.morphling && Morphling.morphTarget != null && Morphling.morphTimer > 0f; bool hasVisibleShield = false; @@ -68,11 +68,11 @@ static void setBasePlayerOutlines() { } if (hasVisibleShield) { - target.myRend.material.SetFloat("_Outline", 1f); - target.myRend.material.SetColor("_OutlineColor", Medic.shieldedColor); + target.MyRend.material.SetFloat("_Outline", 1f); + target.MyRend.material.SetColor("_OutlineColor", Medic.shieldedColor); } else { - target.myRend.material.SetFloat("_Outline", 0f); + target.MyRend.material.SetFloat("_Outline", 0f); } } } @@ -962,25 +962,14 @@ public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)]PlayerC // Warlock Button Sync if (Warlock.warlock != null && PlayerControl.LocalPlayer == Warlock.warlock && __instance == Warlock.warlock && HudManagerStartPatch.warlockCurseButton != null) { - if(Warlock.warlock.killTimer > HudManagerStartPatch.warlockCurseButton.Timer) { + if (Warlock.warlock.killTimer > HudManagerStartPatch.warlockCurseButton.Timer) { HudManagerStartPatch.warlockCurseButton.Timer = Warlock.warlock.killTimer; } } // Seer show flash and add dead player position if (Seer.seer != null && PlayerControl.LocalPlayer == Seer.seer && !Seer.seer.Data.IsDead && Seer.seer != target && Seer.mode <= 1) { - HudManager.Instance.FullScreen.enabled = true; - HudManager.Instance.StartCoroutine(Effects.Lerp(1f, new Action((p) => { - var renderer = HudManager.Instance.FullScreen; - if (p < 0.5) { - if (renderer != null) - renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01(p * 2 * 0.75f)); - } else { - if (renderer != null) - renderer.color = new Color(42f / 255f, 187f / 255f, 245f / 255f, Mathf.Clamp01((1-p) * 2 * 0.75f)); - } - if (p == 1f && renderer != null) renderer.enabled = false; - }))); + Helpers.showFlash(new Color(42f / 255f, 187f / 255f, 245f / 255f)); } if (Seer.deadBodyPositions != null) Seer.deadBodyPositions.Add(target.transform.position); @@ -1010,19 +999,7 @@ public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)]PlayerC // Show flash on bait kill to the killer if enabled if (Bait.bait != null && target == Bait.bait && Bait.showKillFlash && __instance == PlayerControl.LocalPlayer) { - HudManager.Instance.FullScreen.enabled = true; - HudManager.Instance.StartCoroutine(Effects.Lerp(1f, new Action((p) => { - var renderer = HudManager.Instance.FullScreen; - if (p < 0.5) { - if (renderer != null) - renderer.color = new Color(204f / 255f, 102f / 255f, 0f / 255f, Mathf.Clamp01(p * 2 * 0.75f)); - } - else { - if (renderer != null) - renderer.color = new Color(204f / 255f, 102f / 255f, 0f / 255f, Mathf.Clamp01((1 - p) * 2 * 0.75f)); - } - if (p == 1f && renderer != null) renderer.enabled = false; - }))); + Helpers.showFlash(new Color(204f / 255f, 102f / 255f, 0f / 255f)); } } } @@ -1044,7 +1021,7 @@ public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)]float ti [HarmonyPatch(typeof(KillAnimation), nameof(KillAnimation.CoPerformKill))] class KillAnimationCoPerformKillPatch { - public static bool hideNextAnimation = true; + public static bool hideNextAnimation = false; public static void Prefix(KillAnimation __instance, [HarmonyArgument(0)]ref PlayerControl source, [HarmonyArgument(1)]ref PlayerControl target) { if (hideNextAnimation) source = target; @@ -1056,7 +1033,7 @@ public static void Prefix(KillAnimation __instance, [HarmonyArgument(0)]ref Play class KillAnimationSetMovementPatch { private static int? colorId = null; public static void Prefix(PlayerControl source, bool canMove) { - Color color = source.myRend.material.GetColor("_BodyColor"); + Color color = source.MyRend.material.GetColor("_BodyColor"); if (color != null && Morphling.morphling != null && source.Data.PlayerId == Morphling.morphling.PlayerId) { var index = Palette.PlayerColors.IndexOf(color); if (index != -1) colorId = index; diff --git a/TheOtherRoles/Patches/RegionMenuPatch.cs b/TheOtherRoles/Patches/RegionMenuPatch.cs index caef3065a..aa009fcd2 100644 --- a/TheOtherRoles/Patches/RegionMenuPatch.cs +++ b/TheOtherRoles/Patches/RegionMenuPatch.cs @@ -38,6 +38,13 @@ public static class RegionMenuOpenPatch public static void Postfix(RegionMenu __instance) { var template = DestroyableSingleton.Instance; + var joinGameButtons = GameObject.FindObjectsOfType(); + foreach (var t in joinGameButtons) { // The correct button has a background, the other 2 dont + if (t.GameIdText != null && t.GameIdText.Background != null) { + template = t; + break; + } + } if (template == null || template.GameIdText == null) return; if (ipField == null || ipField.gameObject == null) { @@ -47,7 +54,7 @@ public static void Postfix(RegionMenu __instance) { if (arrow == null || arrow.gameObject == null) return; UnityEngine.Object.DestroyImmediate(arrow.gameObject); - ipField.transform.localPosition = new Vector3(0, -1f, -100f); + ipField.transform.localPosition = new Vector3(0.225f, -1f, -100f); ipField.characterLimit = 30; ipField.AllowSymbols = true; ipField.ForceUppercase = false; @@ -80,7 +87,7 @@ void onFocusLost() { if (arrow == null || arrow.gameObject == null) return; UnityEngine.Object.DestroyImmediate(arrow.gameObject); - portField.transform.localPosition = new Vector3(0, -1.75f, -100f); + portField.transform.localPosition = new Vector3(0.225f, -1.75f, -100f); portField.characterLimit = 5; portField.SetText(TheOtherRolesPlugin.Port.Value.ToString()); __instance.StartCoroutine(Effects.Lerp(0.1f, new Action((p) => { diff --git a/TheOtherRoles/Patches/RoleAssignmentPatch.cs b/TheOtherRoles/Patches/RoleAssignmentPatch.cs index cce8c3d5b..ac7aa85a3 100644 --- a/TheOtherRoles/Patches/RoleAssignmentPatch.cs +++ b/TheOtherRoles/Patches/RoleAssignmentPatch.cs @@ -239,14 +239,13 @@ private static void assignDependentRoles(RoleAssignmentData data) { bool guesserFlag = CustomOptionHolder.guesserSpawnBothRate.getSelection() > 0 && CustomOptionHolder.guesserSpawnRate.getSelection() > 0; bool sheriffFlag = CustomOptionHolder.deputySpawnRate.getSelection() > 0 - && CustomOptionHolder.sheriffSpawnRate.getSelection() > 0 - && Sheriff.sheriff == null; + && CustomOptionHolder.sheriffSpawnRate.getSelection() > 0; if (!guesserFlag && !sheriffFlag) return; // assignDependentRoles is not needed int crew = data.crewmates.Count < data.maxCrewmateRoles ? data.crewmates.Count : data.maxCrewmateRoles; // Max number of crew loops int imp = data.impostors.Count < data.maxImpostorRoles ? data.impostors.Count : data.maxImpostorRoles; // Max number of imp loops - int crewSteps = crew / data.crewSettings.Keys.Count(); // Avarage crewvalues deducted after each loop + int crewSteps = crew / data.crewSettings.Keys.Count(); // Avarage crewvalues deducted after each loop int impSteps = imp / data.impSettings.Keys.Count(); // Avarage impvalues deducted after each loop // set to false if needed, otherwise we can skip the loop diff --git a/TheOtherRoles/Patches/UsablesPatch.cs b/TheOtherRoles/Patches/UsablesPatch.cs index 7dd49d7fc..2447b460f 100644 --- a/TheOtherRoles/Patches/UsablesPatch.cs +++ b/TheOtherRoles/Patches/UsablesPatch.cs @@ -369,8 +369,8 @@ static bool Prefix(MapCountOverlay __instance) { if (!component || component.Data == null || component.Data.Disconnected || component.Data.IsDead) { num2--; - } else if (component?.myRend?.material != null) { - Color color = component.myRend.material.GetColor("_BodyColor"); + } else if (component?.MyRend?.material != null) { + Color color = component.MyRend.material.GetColor("_BodyColor"); if (Hacker.onlyColorType) { var id = Mathf.Max(0, Palette.PlayerColors.IndexOf(color)); color = Helpers.isLighterColor((byte)id) ? Palette.PlayerColors[7] : Palette.PlayerColors[6]; diff --git a/TheOtherRoles/RPC.cs b/TheOtherRoles/RPC.cs index 1a014db42..71e8143d6 100644 --- a/TheOtherRoles/RPC.cs +++ b/TheOtherRoles/RPC.cs @@ -357,6 +357,7 @@ public static void timeMasterRewindTime() { } HudManager.Instance.FullScreen.color = new Color(0f, 0.5f, 0.8f, 0.3f); HudManager.Instance.FullScreen.enabled = true; + HudManager.Instance.FullScreen.gameObject.SetActive(true); HudManager.Instance.StartCoroutine(Effects.Lerp(TimeMaster.rewindTime / 2, new Action((p) => { if (p == 1f) HudManager.Instance.FullScreen.enabled = false; }))); @@ -391,21 +392,7 @@ public static void shieldedMurderAttempt() { bool isShieldedAndShow = Medic.shielded == PlayerControl.LocalPlayer && Medic.showAttemptToShielded; bool isMedicAndShow = Medic.medic == PlayerControl.LocalPlayer && Medic.showAttemptToMedic; - if ((isShieldedAndShow || isMedicAndShow) && HudManager.Instance?.FullScreen != null) { - HudManager.Instance.FullScreen.enabled = true; - HudManager.Instance.StartCoroutine(Effects.Lerp(0.5f, new Action((p) => { - var renderer = HudManager.Instance.FullScreen; - Color c = Palette.ImpostorRed; - if (p < 0.5) { - if (renderer != null) - renderer.color = new Color(c.r, c.g, c.b, Mathf.Clamp01(p * 2 * 0.75f)); - } else { - if (renderer != null) - renderer.color = new Color(c.r, c.g, c.b, Mathf.Clamp01((1-p) * 2 * 0.75f)); - } - if (p == 1f && renderer != null) renderer.enabled = false; - }))); - } + if (isShieldedAndShow || isMedicAndShow) Helpers.showFlash(Palette.ImpostorRed, duration: 0.5f); } public static void shifterShift(byte targetId) { diff --git a/TheOtherRoles/Resources/HorseModeButtonOff.png b/TheOtherRoles/Resources/HorseModeButtonOff.png new file mode 100644 index 0000000000000000000000000000000000000000..dac3a5db6cb6630a516dcaacc60ec4216960ecc0 GIT binary patch literal 30843 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 LwsNhKWyt>k-7yH` literal 0 HcmV?d00001 diff --git a/TheOtherRoles/Resources/HorseModeButtonOn.png b/TheOtherRoles/Resources/HorseModeButtonOn.png new file mode 100644 index 0000000000000000000000000000000000000000..ddd7ccbaa32d3551a3ea9d433ce2800e8a584b87 GIT binary patch literal 30556 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�nxcZV39r_5yA$vRU0WqAxbU$g=fMe`bRR)<9%&GLM%qBS@ zxIJ=$twfE|Pb=v|6m5qB8TOmg@&u;D;P8nfyAR44G0Vg6=_-C43)3n^0MJzez2ML_ z#*1jb`@OW2OXb5na3WCQR!cp20z6UmdD|;nciS8 z`cljzy+S-_g;4R+V;0~v>aNO&*>&gaQl5mpJwlv768A^OE#D|n4}S46_{r<(wd6*@ zcJPvMWL>y?ISGP3mBd7v=@lVw>9#LSL|B;)u0^Udf;b)iJSG=};P@y@pX)LHRy<5@ z-<7zq%B^h+?S|x@aD^&C>|VjJzv%p+6@B?=UWb)AJ#434Bvo;-kYkg5H=tGS`w#zq zL5C!8!p8N^vA`rZEafD@sYp{)vK3Q=_u?`O89SHw>ym+$D!Y}`DNkfydjBo2@Q3Ksp0fYqolBwCJDCqLayhDx@g)3Or9Trf_UOP9q5lC5jK*xrajc}=WtR= zb+xoV8cj1RAsp9)k2w3c4}e|Ma%dIeB^}bq2~GUM)m^AaQ>7(R$IAp|KwlZ`>h-tO zPsP!P)3f1+-N-$yyJPLeZwmKa)oDtu??TkIafu;R`RA;1i$zE>Nk&Y1a}9cSt5~p4 zLV0^L9-&mHi4hKOUS6AP8;@s*c#_c9S+yzQP2S|!lS^x*0A0*XkNxMTP`u~9Hy?Cl z5DG%nm7N2*>-D4*gKTaboU1C<@oW-MLJqWL$GVfkwgo4$zhEre%$E;$i4o(fErug6 z^F>@EpM4gD;i#p>3R7lDH^NkP zqgwnzB+Y*{=pbOMZEm~I9PYH}5#KWu&J}Qkqag%N!%}oD{NAT2ek&WJWBqcOV2%R# zNfcOs9tZB-qGZ#izFMfzlDEkOB?c95dR=|sFG5&$2$PM*1+#*#h2)kpx4gNMI`Vl& z34ME6g-9N2c~1B@Cb9*BqSP(4GJFn3UV%Fa<5aD(sP2Ww3)}B6`h{VrvLP~U^I2IA zsY5=%%+Qh+qQk~P4V=}_7RjRp_`hlmJ4H>F(q2&_$HIAvE3*C+zb;64A3P`fV^stM zgS!m8C~}FGlL!>93?8)Ic9o)N`6YgXqo}qYFrO4Lt;BI-hef1d!%|ibq!cZ9(6du^ zDEX$L$xDrLgl0Ps>c9^cQ>_>Gj_>@X=;>FTB_n@S9jwh`Q{ zeq`FJ*%X+>+$+4xp)EB?@UNC=V3mDPk1B7zOLi|>$;;;dC<}drGY+!Tlf3J0Q24A_ zjUD{sR_SxIMt$$=SURuKJdxUTPr|R+#1Xz?_S)s}UtiTUZvE@Gh?te-OYiSHF!HT--}CwA(K!Ah`-!))ZSL<0M?*@% zuZ!&@{wSoSA+07}pfkPIIGVB0#y$J%Nj%|}%4c^!Mc5+bP`+YZahkc~r8wA~h z=KUDFgjm|u*g*)bnuxEgY8T8_G;mVyVJS^0J2u1+Bpy>We3?NNxAL_j`4AON<>59V zlpslg%L+J|bX0*z!BU-BTDY>gi00rrAYQjO_jOK5R*Q2smtm9T#3E&^R2?pzi#ex> zc)qGxjG=R1M=^#WFIzk21JWb*d(w!oR|RGYvvepTY&RAmhvpmx*+@2y1?}ecJ^-hJ zs$9^)oBS^f+~P`WcIS<>?>;kMw)ywZbUqQrJs1)ClWE$xU@l`90hut_2`-EC(*wU+ zCmZc8_Tzu7IJIXj4#D#*B6ac7z^)16*iNd&*@1hVW{!1yJ_&Q z&^XGGUSna6=H5TKA%5ZKkE@Hy;hax~`}qN}|9CKF)SI%~5hF*wbF7^71Tw>p?iNd6 z@Nk^9S@L=8$N^xVO@2P$⁣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 netstandard2.1 - 3.4.4 + 3.4.5 TheOtherRoles Eisbison