diff --git a/CTA/CustomTeamAssigner/CustomRoles.cs b/CTA/CustomTeamAssigner/CustomRoles.cs index 58b98b3bc..ad5c972ee 100644 --- a/CTA/CustomTeamAssigner/CustomRoles.cs +++ b/CTA/CustomTeamAssigner/CustomRoles.cs @@ -504,8 +504,8 @@ public enum CustomRoles // Snowdown SnowdownPlayer, - // LoopWanted - LoopHunter, + // DoomTag + Tagger, // GM GM, diff --git a/CustomRoles.cs b/CustomRoles.cs index 58b98b3bc..ad5c972ee 100644 --- a/CustomRoles.cs +++ b/CustomRoles.cs @@ -504,8 +504,8 @@ public enum CustomRoles // Snowdown SnowdownPlayer, - // LoopWanted - LoopHunter, + // DoomTag + Tagger, // GM GM, diff --git a/Gamemodes/LoopWanted.cs b/Gamemodes/DoomTag.cs similarity index 80% rename from Gamemodes/LoopWanted.cs rename to Gamemodes/DoomTag.cs index 38f41bcdb..c8c99d6bf 100644 --- a/Gamemodes/LoopWanted.cs +++ b/Gamemodes/DoomTag.cs @@ -8,7 +8,7 @@ using static EHR.Translator; namespace EHR.Gamemodes; -internal static class LoopWanted +internal static class DoomTag { private static Dictionary TargetMap = []; private static Dictionary LowerVisionList = []; @@ -23,47 +23,47 @@ internal static class LoopWanted private static OptionItem CarnivalSpeedMultiplier; private static OptionItem ShowTargetArrow; - private static readonly string[] PunishmentModeOptions = ["LoopWanted.PunishSuicide", "LoopWanted.PunishLowerVision"]; + private static readonly string[] PunishmentModeOptions = ["DoomTag.PunishSuicide", "DoomTag.PunishLowerVision"]; public static void SetupCustomOption() { var id = 69_226_001; - Color color = Utils.GetRoleColor(CustomRoles.LoopHunter); - const CustomGameMode gameMode = CustomGameMode.LoopWanted; + Color color = Utils.GetRoleColor(CustomRoles.Tagger); + const CustomGameMode gameMode = CustomGameMode.DoomTag; const TabGroup tab = TabGroup.GameSettings; - BaseKillCooldown = new FloatOptionItem(id++, "LoopWanted.BaseKillCooldown", new(2.5f, 60f, 2.5f), 15f, tab) + BaseKillCooldown = new FloatOptionItem(id++, "DoomTag.BaseKillCooldown", new(2.5f, 60f, 2.5f), 15f, tab) .SetHeader(true) .SetGameMode(gameMode) .SetColor(color) .SetValueFormat(OptionFormat.Seconds); - PunishmentMode = new StringOptionItem(id++, "LoopWanted.PunishmentMode", PunishmentModeOptions, 0, tab) + PunishmentMode = new StringOptionItem(id++, "DoomTag.PunishmentMode", PunishmentModeOptions, 0, tab) .SetGameMode(gameMode) .SetColor(color); - LowerVisionMultiplier = new FloatOptionItem(id++, "LoopWanted.LowerVisionMultiplier", new(0f, 10f, 0.5f), 0.5f, tab) + LowerVisionMultiplier = new FloatOptionItem(id++, "DoomTag.LowerVisionMultiplier", new(0f, 10f, 0.5f), 0.5f, tab) .SetParent(PunishmentMode) .SetGameMode(gameMode) .SetColor(color) .SetValueFormat(OptionFormat.Multiplier); - CarnivalPlayerCount = new IntegerOptionItem(id++, "LoopWanted.CarnivalPlayerCount", new(1, 127, 1), 3, tab) + CarnivalPlayerCount = new IntegerOptionItem(id++, "DoomTag.CarnivalPlayerCount", new(1, 127, 1), 3, tab) .SetGameMode(gameMode) .SetColor(color) .SetValueFormat(OptionFormat.Players); - CarnivalKillCooldown = new FloatOptionItem(id++, "LoopWanted.CarnivalKillCooldown", new(2.5f, 60f, 2.5f), 5f, tab) + CarnivalKillCooldown = new FloatOptionItem(id++, "DoomTag.CarnivalKillCooldown", new(2.5f, 60f, 2.5f), 5f, tab) .SetGameMode(gameMode) .SetColor(color) .SetValueFormat(OptionFormat.Seconds); - CarnivalSpeedMultiplier = new FloatOptionItem(id++, "LoopWanted.CarnivalSpeedMultiplier", new(0.25f, 10f, 0.25f), 2.0f, tab) + CarnivalSpeedMultiplier = new FloatOptionItem(id++, "DoomTag.CarnivalSpeedMultiplier", new(0.25f, 10f, 0.25f), 2.0f, tab) .SetGameMode(gameMode) .SetColor(color) .SetValueFormat(OptionFormat.Multiplier); - ShowTargetArrow = new BooleanOptionItem(id, "LoopWanted.ShowTargetArrow", false, tab) + ShowTargetArrow = new BooleanOptionItem(id, "DoomTag.ShowTargetArrow", false, tab) .SetGameMode(gameMode) .SetColor(color); } @@ -75,16 +75,16 @@ internal static class LoopWanted LowerVisionList = []; CarnivalMode = false; - if (Options.CurrentGameMode != CustomGameMode.LoopWanted) return; + if (Options.CurrentGameMode != CustomGameMode.DoomTag) return; DefaultSpeed = Main.RealOptionsData.GetFloat(FloatOptionNames.PlayerSpeedMod); - Utils.SendRPC(CustomRPC.LoopWantedSync, 1, false); + Utils.SendRPC(CustomRPC.DoomTagSync, 1, false); } public static void OnGameStart() { - if (Options.CurrentGameMode != CustomGameMode.LoopWanted) return; + if (Options.CurrentGameMode != CustomGameMode.DoomTag) return; AssignTargets(); } @@ -102,7 +102,7 @@ internal static class LoopWanted if (playerIds.Count < 2) { - Logger.Warn("Not enough players for LoopWanted", "LoopWanted"); + Logger.Warn("Not enough players for DoomTag", "DoomTag"); return; } @@ -115,7 +115,7 @@ internal static class LoopWanted TargetMap.Remove(TargetMap.GetKeyByValue(targetId)); TargetMap[hunterId] = targetId; if (ShowTargetArrow.GetBool()) TargetArrow.Add(hunterId, targetId); - Logger.Info($"{hunterId.ColoredPlayerName()} 2 targets 2 {targetId.ColoredPlayerName()}", "LoopWanted"); + Logger.Info($"{hunterId.ColoredPlayerName()} 2 targets 2 {targetId.ColoredPlayerName()}", "DoomTag"); } SyncTargetMapRPC(); @@ -138,7 +138,7 @@ internal static class LoopWanted if (expectedTarget == targetId) { - Logger.Info($"{killer.GetRealName()} correctly killed their target {target.GetRealName()}", "LoopWanted"); + Logger.Info($"{killer.GetRealName()} correctly killed their target {target.GetRealName()}", "DoomTag"); byte nextTarget = GetTarget(targetId); @@ -151,7 +151,7 @@ internal static class LoopWanted TargetMap.Remove(TargetMap.GetKeyByValue(nextTarget)); TargetMap[killerId] = nextTarget; if (ShowTargetArrow.GetBool()) TargetArrow.Add(killerId, nextTarget); - Logger.Info($"{killer.GetRealName()}'s new target is {nextTarget.ColoredPlayerName()}", "LoopWanted"); + Logger.Info($"{killer.GetRealName()}'s new target is {nextTarget.ColoredPlayerName()}", "DoomTag"); } else { @@ -165,13 +165,13 @@ internal static class LoopWanted Utils.NotifyRoles(SpecifySeer: killer, SpecifyTarget: killer); SyncTargetMapRPC(); - Utils.SendRPC(CustomRPC.LoopWantedSync, 1, CarnivalMode); + Utils.SendRPC(CustomRPC.DoomTagSync, 1, CarnivalMode); killer.Kill(target); } else { - Logger.Info($"{killer.GetRealName()} killed wrong target {target.GetRealName()} (expected: {expectedTarget.ColoredPlayerName()})", "LoopWanted"); + Logger.Info($"{killer.GetRealName()} killed wrong target {target.GetRealName()} (expected: {expectedTarget.ColoredPlayerName()})", "DoomTag"); if (PunishmentMode.GetInt() == 0) killer.Kill(target); @@ -194,21 +194,21 @@ internal static class LoopWanted switch (PunishmentMode.GetInt()) { case 0: - Logger.Info($"{killer.GetRealName()} is committing suicide for wrong kill", "LoopWanted"); - killer.Notify(GetString("LoopWanted.WrongKillSuicide")); + Logger.Info($"{killer.GetRealName()} is committing suicide for wrong kill", "DoomTag"); + killer.Notify(GetString("DoomTag.WrongKillSuicide")); LateTask.New(() => { if (!killer || !killer.IsAlive() || GameStates.IsEnded) return; killer.Suicide(); HandleDeadPlayer(killer.PlayerId); - }, 0.5f, "LoopWanted Suicide Punishment"); + }, 0.5f, "DoomTag Suicide Punishment"); break; case 1: float visionMultiplier = LowerVisionMultiplier.GetFloat(); LowerVisionList[killer.PlayerId] = Utils.TimeStamp; killer.MarkDirtySettings(); - killer.Notify(string.Format(GetString("LoopWanted.WrongKillLowerVision"), visionMultiplier)); + killer.Notify(string.Format(GetString("DoomTag.WrongKillLowerVision"), visionMultiplier)); break; } } @@ -232,11 +232,8 @@ internal static class LoopWanted TargetMap[hunterId] = nextTarget; if (ShowTargetArrow.GetBool()) TargetArrow.Add(hunterId, nextTarget); - LateTask.New(() => - { - PlayerControl hunter = Utils.GetPlayerById(hunterId); - if (hunter) Utils.NotifyRoles(SpecifySeer: hunter, SpecifyTarget: hunter); - }, 0.2f); + PlayerControl hunter = Utils.GetPlayerById(hunterId); + if (hunter) Utils.NotifyRoles(SpecifySeer: hunter, SpecifyTarget: hunter); } else if (hunterId != byte.MaxValue) { @@ -256,7 +253,7 @@ internal static class LoopWanted if (!CarnivalMode && aliveCount <= threshold && aliveCount > 1) { CarnivalMode = true; - Utils.SendRPC(CustomRPC.LoopWantedSync, 1, true); + Utils.SendRPC(CustomRPC.DoomTagSync, 1, true); foreach (PlayerControl pc in Main.CachedAlivePlayerControls()) { @@ -264,12 +261,12 @@ internal static class LoopWanted Main.AllPlayerKillCooldown[pc.PlayerId] = CarnivalKillCooldown.GetFloat(); if (!pc.AmOwner) pc.ReactorFlash(); pc.MarkDirtySettings(); - pc.Notify(GetString("LoopWanted.CarnivalModeActivated")); + pc.Notify(GetString("DoomTag.CarnivalModeActivated")); } SoundManager.Instance.PlaySound(HudManager.Instance.LobbyTimerExtensionUI.lobbyTimerPopUpSound, false); Utils.FlashColor(new(1f, 0.5f, 0f, 0.4f), 1.4f); - Logger.Info($"Carnival Mode activated! {aliveCount} players remaining.", "LoopWanted"); + Logger.Info($"Carnival Mode activated! {aliveCount} players remaining.", "DoomTag"); } } @@ -286,11 +283,11 @@ internal static class LoopWanted case 1: PlayerControl winner = alivePlayers[0]; CustomWinnerHolder.WinnerIds = [winner.PlayerId]; - Logger.Info($"LoopWanted Winner: {winner.GetRealName()}", "LoopWanted"); + Logger.Info($"DoomTag Winner: {winner.GetRealName()}", "DoomTag"); return true; case 0: CustomWinnerHolder.ResetAndSetWinner(CustomWinner.None); - Logger.Info("No players alive, force ending the game", "LoopWanted"); + Logger.Info("No players alive, force ending the game", "DoomTag"); return true; default: return false; @@ -301,7 +298,7 @@ internal static class LoopWanted public static string GetSuffix(PlayerControl seer, PlayerControl target, bool hud = false) { - if (seer.PlayerId != target.PlayerId || GameStates.IsMeeting || (seer.IsModdedClient() && !hud)) return string.Empty; + if (seer.PlayerId != target.PlayerId || GameStates.IsMeeting) return string.Empty; byte targetId = GetTarget(seer.PlayerId); if (targetId == byte.MaxValue) return string.Empty; @@ -309,7 +306,7 @@ internal static class LoopWanted Suffix.Clear(); Suffix.Append("<#D9BAA5>"); - Suffix.Append(hud ? GetString("LoopWanted.CurrentTarget") : GetString("Target")); + Suffix.Append(hud ? GetString("DoomTag.CurrentTarget") : GetString("Target")); Suffix.Append(": "); Suffix.Append(targetId.ColoredPlayerName()); Suffix.Append(""); @@ -325,7 +322,7 @@ internal static class LoopWanted if (CarnivalMode) { Suffix.Append("\n<#ff6600>"); - Suffix.Append(GetString("LoopWanted.CarnivalModeHUD")); + Suffix.Append(GetString("DoomTag.CarnivalModeHUD")); Suffix.Append(""); } @@ -336,8 +333,8 @@ internal static class LoopWanted { if (!AmongUsClient.Instance.AmHost) return; - var writer = Utils.CreateRPC(CustomRPC.LoopWantedSync); - writer.WritePacked(2); + var writer = Utils.CreateRPC(CustomRPC.DoomTagSync); + writer.Write(2); writer.Write(TargetMap.Count); foreach (var kvp in TargetMap) { @@ -391,7 +388,7 @@ internal static class LoopWanted public static void Postfix() { - if (!Main.IntroDestroyed || !GameStates.IsInTask || ExileController.Instance || Options.CurrentGameMode != CustomGameMode.LoopWanted || !AmongUsClient.Instance.AmHost) return; + if (!Main.IntroDestroyed || !GameStates.IsInTask || ExileController.Instance || Options.CurrentGameMode != CustomGameMode.DoomTag || !AmongUsClient.Instance.AmHost) return; long now = Utils.TimeStamp; if (IntroCutsceneDestroyPatch.IntroDestroyTS + 10 > now || LastFixedUpdate == now) return; diff --git a/Main.cs b/Main.cs index 84d101ea5..5777cfd80 100644 --- a/Main.cs +++ b/Main.cs @@ -148,7 +148,7 @@ public class Main : BasePlugin [CustomGameMode.CaptureTheFlag] = [], [CustomGameMode.NaturalDisasters] = [], [CustomGameMode.Snowdown] = [], - [CustomGameMode.LoopWanted] = [] + [CustomGameMode.DoomTag] = [] }; public static Dictionary GameModeColors = []; @@ -885,7 +885,7 @@ public class Main : BasePlugin // Snowdown { CustomRoles.SnowdownPlayer, "#e4fdff" }, // Loop Wanted - { CustomRoles.LoopHunter, "#D9BAA5" }, + { CustomRoles.Tagger, "#D9BAA5" }, // Hide And Seek { CustomRoles.Seeker, "#ff1919" }, { CustomRoles.Hider, "#345eeb" }, @@ -976,7 +976,7 @@ public class Main : BasePlugin [CustomGameMode.Deathrace] = Utils.GetRoleColor(CustomRoles.Racer), [CustomGameMode.Mingle] = Utils.GetRoleColor(CustomRoles.MinglePlayer), [CustomGameMode.Snowdown] = Utils.GetRoleColor(CustomRoles.SnowdownPlayer), - [CustomGameMode.LoopWanted] = Utils.GetRoleColor(CustomRoles.LoopHunter) + [CustomGameMode.DoomTag] = Utils.GetRoleColor(CustomRoles.Tagger) }; IL2CPPChainloader.Instance.Finished += () => diff --git a/Modules/CustomRoleSelector.cs b/Modules/CustomRoleSelector.cs index e2062a8bd..36e2f4488 100644 --- a/Modules/CustomRoleSelector.cs +++ b/Modules/CustomRoleSelector.cs @@ -37,7 +37,7 @@ internal static class CustomRoleSelector { CustomGameMode.Deathrace, CustomRoles.Racer }, { CustomGameMode.Mingle, CustomRoles.MinglePlayer }, { CustomGameMode.Snowdown, CustomRoles.SnowdownPlayer }, - { CustomGameMode.LoopWanted, CustomRoles.LoopHunter } + { CustomGameMode.DoomTag, CustomRoles.Tagger } }; public static void SelectCustomRoles() diff --git a/Modules/CustomRolesHelper.cs b/Modules/CustomRolesHelper.cs index 106c35de2..d6f058e17 100644 --- a/Modules/CustomRolesHelper.cs +++ b/Modules/CustomRolesHelper.cs @@ -75,7 +75,7 @@ internal static class CustomRolesHelper CustomRoles.Racer or CustomRoles.MinglePlayer or CustomRoles.SnowdownPlayer or - CustomRoles.LoopHunter; + CustomRoles.Tagger; } public RoleBase GetRoleClass() @@ -435,7 +435,6 @@ internal static class CustomRolesHelper CustomRoles.TMGPlayer => CustomRoles.Crewmate, // Mingle CustomRoles.MinglePlayer => CustomRoles.Crewmate, - _ => role.IsImpostor() ? CustomRoles.Impostor : CustomRoles.Crewmate }; } @@ -487,8 +486,8 @@ internal static class CustomRolesHelper CustomRoles.Racer => RoleTypes.Phantom, // Snowdown CustomRoles.SnowdownPlayer => RoleTypes.Phantom, - // LoopWanted - CustomRoles.LoopHunter => RoleTypes.Impostor, + // DoomTag + CustomRoles.Tagger => RoleTypes.Impostor, // Standard CustomRoles.Sheriff => UsePets && Sheriff.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor, CustomRoles.Crusader => UsePets && Crusader.UsePet.GetBool() ? RoleTypes.GuardianAngel : RoleTypes.Impostor, diff --git a/Modules/ExtendedPlayerControl.cs b/Modules/ExtendedPlayerControl.cs index 3bd728cd4..ed255ae23 100644 --- a/Modules/ExtendedPlayerControl.cs +++ b/Modules/ExtendedPlayerControl.cs @@ -373,7 +373,7 @@ internal static class ExtendedPlayerControl RoleTypes newRoleType = state.MainRole.GetRoleTypes(); CustomGameMode gameMode = Options.CurrentGameMode; - if (gameMode is CustomGameMode.SoloPVP or CustomGameMode.FFA or CustomGameMode.CaptureTheFlag or CustomGameMode.KingOfTheZones or CustomGameMode.BedWars or CustomGameMode.Snowdown or CustomGameMode.LoopWanted) + if (gameMode is CustomGameMode.SoloPVP or CustomGameMode.FFA or CustomGameMode.CaptureTheFlag or CustomGameMode.KingOfTheZones or CustomGameMode.BedWars or CustomGameMode.Snowdown or CustomGameMode.DoomTag) hasValue |= sender.RpcSetRole(player, newRoleType, player.OwnerId); player.ResetKillCooldown(); @@ -1339,7 +1339,7 @@ internal static class ExtendedPlayerControl case CustomGameMode.BedWars: case CustomGameMode.Deathrace: case CustomGameMode.Snowdown: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: return true; } @@ -1400,7 +1400,7 @@ internal static class ExtendedPlayerControl CustomGameMode.TheMindGame => false, CustomGameMode.Mingle => false, CustomGameMode.Snowdown => true, - CustomGameMode.LoopWanted => false, + CustomGameMode.DoomTag => false, CustomGameMode.Deathrace => Deathrace.CanUseVent(player, player.GetClosestVent().Id), CustomGameMode.Standard when CopyCat.PlayerIdList.Contains(player.PlayerId) => true, @@ -1786,7 +1786,7 @@ internal static class ExtendedPlayerControl CustomRoles.BedWarsPlayer => 1f, CustomRoles.Racer => 3f, CustomRoles.SnowdownPlayer => 10f, - CustomRoles.LoopHunter => LoopWanted.BaseKillCooldown.GetFloat(), + CustomRoles.Tagger => DoomTag.BaseKillCooldown.GetFloat(), _ when player.Is(CustomRoles.Underdog) => Main.AllAlivePlayerControlsCount <= Underdog.UnderdogMaximumPlayersNeededToKill.GetInt() ? Underdog.UnderdogKillCooldownWithLessPlayersAlive.GetInt() : Underdog.UnderdogKillCooldownWithMorePlayersAlive.GetInt(), _ => Main.AllPlayerKillCooldown[player.PlayerId] }; diff --git a/Modules/FixedUpdateCaller.cs b/Modules/FixedUpdateCaller.cs index ef3253a93..52d3fa0b9 100644 --- a/Modules/FixedUpdateCaller.cs +++ b/Modules/FixedUpdateCaller.cs @@ -199,8 +199,8 @@ public static class FixedUpdateCaller case CustomGameMode.Mingle: Mingle.FixedUpdatePatch.Postfix(); goto default; - case CustomGameMode.LoopWanted: - LoopWanted.FixedUpdatePatch.Postfix(); + case CustomGameMode.DoomTag: + DoomTag.FixedUpdatePatch.Postfix(); goto default; default: if (Options.IntegrateNaturalDisasters.GetBool()) goto case CustomGameMode.NaturalDisasters; diff --git a/Modules/GameOptionsSender/PlayerGameOptionsSender.cs b/Modules/GameOptionsSender/PlayerGameOptionsSender.cs index e1d4c374b..d63c73e6d 100644 --- a/Modules/GameOptionsSender/PlayerGameOptionsSender.cs +++ b/Modules/GameOptionsSender/PlayerGameOptionsSender.cs @@ -391,9 +391,9 @@ public sealed class PlayerGameOptionsSender(PlayerControl player) : GameOptionsS Snowdown.ApplyGameOptions(); goto case CustomGameMode.RoomRush; } - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: { - LoopWanted.ApplyGameOptions(opt, player.PlayerId); + DoomTag.ApplyGameOptions(opt, player.PlayerId); break; } case CustomGameMode.NaturalDisasters: diff --git a/Modules/NameColorManager.cs b/Modules/NameColorManager.cs index 5c4fbcd48..e465e51cc 100644 --- a/Modules/NameColorManager.cs +++ b/Modules/NameColorManager.cs @@ -43,7 +43,7 @@ public static class NameColorManager color = FreeForAll.TeamColors.GetValueOrDefault(team, "#00ffff"); return true; case CustomGameMode.Snowdown: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: case CustomGameMode.Mingle: case CustomGameMode.RoomRush: case CustomGameMode.NaturalDisasters: diff --git a/Modules/OptionHolder.cs b/Modules/OptionHolder.cs index e62f804a5..8d85149a3 100644 --- a/Modules/OptionHolder.cs +++ b/Modules/OptionHolder.cs @@ -35,7 +35,7 @@ public enum CustomGameMode Deathrace = 0x0F, Mingle = 0x10, Snowdown = 0x11, - LoopWanted = 0x12, + DoomTag = 0x12, All = int.MaxValue } @@ -91,7 +91,7 @@ public static class Options "Deathrace", "Mingle", "Snowdown", - "LoopWanted" + "DoomTag" ]; private static Dictionary roleCounts; @@ -931,7 +931,7 @@ public static class Options 14 => CustomGameMode.Deathrace, 15 => CustomGameMode.Mingle, 16 => CustomGameMode.Snowdown, - 17 => CustomGameMode.LoopWanted, + 17 => CustomGameMode.DoomTag, _ => CustomGameMode.Standard }; @@ -1862,8 +1862,8 @@ public static class Options Mingle.SetupCustomOption(); // Snowdown Snowdown.SetupCustomOption(); - // LoopWanted - LoopWanted.SetupCustomOption(); + // DoomTag + DoomTag.SetupCustomOption(); yield return null; diff --git a/Modules/RPC.cs b/Modules/RPC.cs index 7e3994820..cec2ef99d 100644 --- a/Modules/RPC.cs +++ b/Modules/RPC.cs @@ -180,7 +180,7 @@ public enum CustomRPC TMGSync, BedWarsSync, DeathraceSync, - LoopWantedSync + DoomTagSync // The total number of RPCs must not exceed 255 // Because HandleRpc accepts Rpc in byte (max 255) system, and it will be impossible to use int @@ -1275,9 +1275,9 @@ internal static class RPCHandlerPatch break; } - case CustomRPC.LoopWantedSync: + case CustomRPC.DoomTagSync: { - LoopWanted.ReceiveRPC(reader); + DoomTag.ReceiveRPC(reader); break; } case CustomRPC.InspectorCommand: diff --git a/Modules/Utils.cs b/Modules/Utils.cs index 1e099f291..48902ca76 100644 --- a/Modules/Utils.cs +++ b/Modules/Utils.cs @@ -849,7 +849,7 @@ public static class Utils case CustomGameMode.Deathrace: case CustomGameMode.Mingle: case CustomGameMode.Snowdown: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: return false; case CustomGameMode.HideAndSeek: return CustomHnS.HasTasks(p); @@ -1517,7 +1517,7 @@ public static class Utils break; case CustomGameMode.Snowdown: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: case CustomGameMode.Mingle: case CustomGameMode.Deathrace: case CustomGameMode.BedWars: @@ -2546,7 +2546,7 @@ public static class Utils CustomGameMode.Deathrace => CustomRoles.Racer.ColoredTextByRole($"{modeText}\r\n") + name, CustomGameMode.Mingle => CustomRoles.MinglePlayer.ColoredTextByRole($"{modeText}\r\n") + name, CustomGameMode.Snowdown => CustomRoles.SnowdownPlayer.ColoredTextByRole($"{modeText}\r\n") + name, - CustomGameMode.LoopWanted => CustomRoles.LoopHunter.ColoredTextByRole($"{modeText}\r\n") + name, + CustomGameMode.DoomTag => CustomRoles.Tagger.ColoredTextByRole($"{modeText}\r\n") + name, _ => name }; } @@ -3045,8 +3045,8 @@ public static class Utils case CustomGameMode.Snowdown: AdditionalSuffixes.Add(Snowdown.GetSuffix(seer, seer)); break; - case CustomGameMode.LoopWanted: - AdditionalSuffixes.Add(LoopWanted.GetSuffix(seer, seer)); + case CustomGameMode.DoomTag: + AdditionalSuffixes.Add(DoomTag.GetSuffix(seer, seer)); break; } @@ -3115,7 +3115,7 @@ public static class Utils SelfSuffix.Append($"\n\n<#ffffff>{GetString($"GameModeTutorial.{Options.CurrentGameMode}")}\n"); } - bool noRoleText = GameStates.IsLobby || Options.CurrentGameMode is CustomGameMode.CaptureTheFlag or CustomGameMode.NaturalDisasters or CustomGameMode.RoomRush or CustomGameMode.KingOfTheZones or CustomGameMode.Quiz or CustomGameMode.TheMindGame or CustomGameMode.BedWars or CustomGameMode.Deathrace or CustomGameMode.Mingle or CustomGameMode.Snowdown or CustomGameMode.LoopWanted; + bool noRoleText = GameStates.IsLobby || Options.CurrentGameMode is CustomGameMode.CaptureTheFlag or CustomGameMode.NaturalDisasters or CustomGameMode.RoomRush or CustomGameMode.KingOfTheZones or CustomGameMode.Quiz or CustomGameMode.TheMindGame or CustomGameMode.BedWars or CustomGameMode.Deathrace or CustomGameMode.Mingle or CustomGameMode.Snowdown or CustomGameMode.DoomTag; // Combine the seer's job title and SelfTaskText with the seer's player name and SelfMark string selfRoleName = noRoleText ? string.Empty : $"{seer.GetDisplayRoleName()}{selfTaskText}"; @@ -3207,7 +3207,7 @@ public static class Utils CustomGameMode.Quiz => true, CustomGameMode.Deathrace => true, CustomGameMode.Mingle => true, - CustomGameMode.LoopWanted => true, + CustomGameMode.DoomTag => true, _ => false }; @@ -3315,7 +3315,7 @@ public static class Utils if (IsRevivingRoleAlive() && Main.DiedThisRound.Contains(seer.PlayerId)) targetRoleText = string.Empty; - if (Options.CurrentGameMode is CustomGameMode.CaptureTheFlag or CustomGameMode.NaturalDisasters or CustomGameMode.RoomRush or CustomGameMode.KingOfTheZones or CustomGameMode.Quiz or CustomGameMode.TheMindGame or CustomGameMode.BedWars or CustomGameMode.Deathrace or CustomGameMode.Mingle or CustomGameMode.Snowdown or CustomGameMode.LoopWanted) + if (Options.CurrentGameMode is CustomGameMode.CaptureTheFlag or CustomGameMode.NaturalDisasters or CustomGameMode.RoomRush or CustomGameMode.KingOfTheZones or CustomGameMode.Quiz or CustomGameMode.TheMindGame or CustomGameMode.BedWars or CustomGameMode.Deathrace or CustomGameMode.Mingle or CustomGameMode.Snowdown or CustomGameMode.DoomTag) targetRoleText = string.Empty; if (!GameStates.IsLobby) @@ -3651,7 +3651,7 @@ public static class Utils case CustomGameMode.Deathrace: case CustomGameMode.Mingle: case CustomGameMode.Snowdown: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: return local.Is(CustomRoles.GM); case CustomGameMode.Standard: diff --git a/Patches/CheckGameEndPatch.cs b/Patches/CheckGameEndPatch.cs index 688b3f603..de68c073b 100644 --- a/Patches/CheckGameEndPatch.cs +++ b/Patches/CheckGameEndPatch.cs @@ -605,9 +605,9 @@ internal static class GameEndChecker Predicate = new SnowdownGameEndPredicate(); } - public static void SetPredicateToLoopWanted() + public static void SetPredicateToDoomTag() { - Predicate = new LoopWantedGameEndPredicate(); + Predicate = new DoomTagGameEndPredicate(); } private class NormalGameEndPredicate : GameEndPredicate @@ -1386,7 +1386,7 @@ internal static class GameEndChecker } } - private class LoopWantedGameEndPredicate : GameEndPredicate + private class DoomTagGameEndPredicate : GameEndPredicate { public override bool CheckForGameEnd(out GameOverReason reason) { @@ -1396,7 +1396,7 @@ internal static class GameEndChecker private static bool CheckGameEndByLivingPlayers(out GameOverReason reason) { - return LoopWanted.CheckForGameEnd(out reason); + return DoomTag.CheckForGameEnd(out reason); } } diff --git a/Patches/HudPatch.cs b/Patches/HudPatch.cs index 7b8d89207..2fba1a0f9 100644 --- a/Patches/HudPatch.cs +++ b/Patches/HudPatch.cs @@ -332,7 +332,7 @@ internal static class HudManagerPatch CustomGameMode.NaturalDisasters when AmongUsClient.Instance.AmHost => NaturalDisasters.SuffixText, CustomGameMode.Deathrace => Deathrace.GetSuffix(player, player, true), CustomGameMode.Snowdown => Snowdown.GetHudText(), - CustomGameMode.LoopWanted => LoopWanted.GetSuffix(player, player, true), + CustomGameMode.DoomTag => DoomTag.GetSuffix(player, player, true), CustomGameMode.Standard => state.Role.GetSuffix(player, player, true, GameStates.IsMeeting) + GetAddonSuffixes(), _ => string.Empty }; @@ -705,7 +705,7 @@ internal static class SetHudActivePatch case CustomGameMode.RoomRush: __instance.ImpostorVentButton?.ToggleVisible(false); goto case CustomGameMode.HideAndSeek; - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: case CustomGameMode.KingOfTheZones: __instance.ReportButton?.ToggleVisible(false); __instance.SabotageButton?.ToggleVisible(false); diff --git a/Patches/IntroPatch.cs b/Patches/IntroPatch.cs index c1f9e2b3e..36271ce35 100644 --- a/Patches/IntroPatch.cs +++ b/Patches/IntroPatch.cs @@ -310,11 +310,11 @@ internal static class SetUpRoleTextPatch __instance.RoleBlurbText.text = GetString("SnowdownPlayerInfo"); break; } - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: { - Color color = Utils.GetRoleColor(CustomRoles.LoopHunter); + Color color = Utils.GetRoleColor(CustomRoles.Tagger); __instance.YouAreText.transform.gameObject.SetActive(false); - __instance.RoleText.text = GetString("LoopHunter"); + __instance.RoleText.text = GetString("Tagger"); __instance.RoleText.color = color; __instance.RoleBlurbText.color = color; __instance.RoleBlurbText.text = GetString("LoopHunterInfo"); @@ -1027,10 +1027,10 @@ internal static class BeginCrewmatePatch __instance.ImpostorText.text = GetString("SnowdownPlayerInfo"); break; } - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: { - __instance.TeamTitle.text = GetString("LoopHunter"); - __instance.TeamTitle.color = __instance.BackgroundBar.material.color = Utils.GetRoleColor(CustomRoles.LoopHunter); + __instance.TeamTitle.text = GetString("Tagger"); + __instance.TeamTitle.color = __instance.BackgroundBar.material.color = Utils.GetRoleColor(CustomRoles.Tagger); PlayerControl.LocalPlayer.Data.Role.IntroSound = GetIntroSound(RoleTypes.Impostor); __instance.ImpostorText.gameObject.SetActive(true); __instance.ImpostorText.text = GetString("LoopHunterInfo"); @@ -1388,8 +1388,8 @@ internal static class IntroCutsceneDestroyPatch case CustomGameMode.Snowdown: Snowdown.GameStart(); break; - case CustomGameMode.LoopWanted: - LoopWanted.OnGameStart(); + case CustomGameMode.DoomTag: + DoomTag.OnGameStart(); break; } diff --git a/Patches/OnGameStartedPatch.cs b/Patches/OnGameStartedPatch.cs index 085943d4a..3f520d18c 100644 --- a/Patches/OnGameStartedPatch.cs +++ b/Patches/OnGameStartedPatch.cs @@ -316,7 +316,7 @@ internal static class ChangeRoleSettings HotPotato.Init(); CustomHnS.Init(); Speedrun.Init(); - LoopWanted.Init(); + DoomTag.Init(); } catch (Exception e) { Utils.ThrowException(e); } @@ -952,8 +952,8 @@ internal static class StartGameHostPatch case CustomGameMode.Snowdown: Snowdown.Init(); goto default; - case CustomGameMode.LoopWanted: - LoopWanted.OnGameStart(); + case CustomGameMode.DoomTag: + DoomTag.OnGameStart(); goto default; default: if (Options.IntegrateNaturalDisasters.GetBool()) goto case CustomGameMode.NaturalDisasters; @@ -1027,8 +1027,8 @@ internal static class StartGameHostPatch case CustomGameMode.Snowdown: GameEndChecker.SetPredicateToSnowdown(); break; - case CustomGameMode.LoopWanted: - GameEndChecker.SetPredicateToLoopWanted(); + case CustomGameMode.DoomTag: + GameEndChecker.SetPredicateToDoomTag(); break; } diff --git a/Patches/OutroPatch.cs b/Patches/OutroPatch.cs index 2a4258ef1..8a6f71d61 100644 --- a/Patches/OutroPatch.cs +++ b/Patches/OutroPatch.cs @@ -67,7 +67,7 @@ internal static class EndGamePatch long secondsIn = new DateTimeOffset(date.ToUniversalTime()).ToUnixTimeSeconds() - IntroCutsceneDestroyPatch.IntroDestroyTS; byte killerId = value.GetRealKiller(); bool gmIsFm = Options.CurrentGameMode is CustomGameMode.FFA or CustomGameMode.StopAndGo; - bool gmIsFmhh = gmIsFm || Options.CurrentGameMode is CustomGameMode.HotPotato or CustomGameMode.HideAndSeek or CustomGameMode.Speedrun or CustomGameMode.CaptureTheFlag or CustomGameMode.NaturalDisasters or CustomGameMode.RoomRush or CustomGameMode.KingOfTheZones or CustomGameMode.Quiz or CustomGameMode.TheMindGame or CustomGameMode.BedWars or CustomGameMode.Deathrace or CustomGameMode.Mingle or CustomGameMode.Snowdown or CustomGameMode.LoopWanted; + bool gmIsFmhh = gmIsFm || Options.CurrentGameMode is CustomGameMode.HotPotato or CustomGameMode.HideAndSeek or CustomGameMode.Speedrun or CustomGameMode.CaptureTheFlag or CustomGameMode.NaturalDisasters or CustomGameMode.RoomRush or CustomGameMode.KingOfTheZones or CustomGameMode.Quiz or CustomGameMode.TheMindGame or CustomGameMode.BedWars or CustomGameMode.Deathrace or CustomGameMode.Mingle or CustomGameMode.Snowdown or CustomGameMode.DoomTag; sb.Append($"\n{secondsIn / 60:00}:{secondsIn % 60:00} {Main.AllPlayerNames[key]} ({(gmIsFmhh ? string.Empty : Utils.GetDisplayRoleName(key, pure: true))}{(gmIsFm ? string.Empty : Utils.GetSubRolesText(key, summary: true))}) [{Utils.GetVitalText(key)}]"); if (killerId != byte.MaxValue && killerId != key) sb.Append($"\n\t⇐ {Main.AllPlayerNames[killerId]} ({(gmIsFmhh ? string.Empty : Utils.GetDisplayRoleName(killerId, pure: true))}{(gmIsFm ? string.Empty : Utils.GetSubRolesText(killerId, summary: true))})"); } @@ -601,7 +601,7 @@ internal static class SetEverythingUpPatch case CustomGameMode.Deathrace: case CustomGameMode.BedWars: case CustomGameMode.Quiz: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: { foreach (byte id in cloneRoles.Where(EndGamePatch.SummaryText.ContainsKey)) sb.Append('\n').Append(EndGamePatch.SummaryText[id]); diff --git a/Patches/PlayerControlPatch.cs b/Patches/PlayerControlPatch.cs index 080ab5cda..cb5c0378d 100644 --- a/Patches/PlayerControlPatch.cs +++ b/Patches/PlayerControlPatch.cs @@ -258,8 +258,8 @@ internal static class CheckMurderPatch case CustomGameMode.Snowdown: Snowdown.OnCheckMurder(killer, target); return false; - case CustomGameMode.LoopWanted: - LoopWanted.OnCheckMurder(killer, target); + case CustomGameMode.DoomTag: + DoomTag.OnCheckMurder(killer, target); return false; } @@ -2311,7 +2311,7 @@ internal static class EnterVentPatch case CustomGameMode.TheMindGame: case CustomGameMode.Quiz: case CustomGameMode.SoloPVP when !SoloPVP.CanVent: - case CustomGameMode.LoopWanted: + case CustomGameMode.DoomTag: pc.MyPhysics?.RpcBootFromVent(__instance.Id); break; } diff --git a/Patches/ShipStatusPatch.cs b/Patches/ShipStatusPatch.cs index 4c54984bb..d8fafa0d7 100644 --- a/Patches/ShipStatusPatch.cs +++ b/Patches/ShipStatusPatch.cs @@ -260,7 +260,7 @@ internal static class CloseDoorsPatch { public static bool Prefix(ShipStatus __instance, [HarmonyArgument(0)] SystemTypes room) { - bool allow = !AntiBlackout.SkipTasks && Options.CurrentGameMode is not CustomGameMode.SoloPVP and not CustomGameMode.FFA and not CustomGameMode.StopAndGo and not CustomGameMode.HotPotato and not CustomGameMode.Speedrun and not CustomGameMode.CaptureTheFlag and not CustomGameMode.NaturalDisasters and not CustomGameMode.RoomRush and not CustomGameMode.KingOfTheZones and not CustomGameMode.Quiz and not CustomGameMode.TheMindGame and not CustomGameMode.BedWars and not CustomGameMode.Deathrace and not CustomGameMode.Mingle and not CustomGameMode.Snowdown and not CustomGameMode.LoopWanted; + bool allow = !AntiBlackout.SkipTasks && Options.CurrentGameMode is not CustomGameMode.SoloPVP and not CustomGameMode.FFA and not CustomGameMode.StopAndGo and not CustomGameMode.HotPotato and not CustomGameMode.Speedrun and not CustomGameMode.CaptureTheFlag and not CustomGameMode.NaturalDisasters and not CustomGameMode.RoomRush and not CustomGameMode.KingOfTheZones and not CustomGameMode.Quiz and not CustomGameMode.TheMindGame and not CustomGameMode.BedWars and not CustomGameMode.Deathrace and not CustomGameMode.Mingle and not CustomGameMode.Snowdown and not CustomGameMode.DoomTag; if (Doorjammer.JammedRooms.Contains(room)) allow = false; if (SecurityGuard.BlockSabo.Count > 0) allow = false; diff --git a/Resources/Lang/en_US.json b/Resources/Lang/en_US.json index 803817481..2e0b9df7b 100644 --- a/Resources/Lang/en_US.json +++ b/Resources/Lang/en_US.json @@ -4090,9 +4090,9 @@ "SnowdownPlayer": "SNOWDOWN", "SnowdownPlayerInfo": "THROW SNOWBALLS AT PLAYERS", "SnowdownPlayerInfoLong": "THROW SNOWBALLS AT PLAYERS", - "LoopHunter": "LOOP HUNTER", - "LoopHunterInfo": "KILL YOUR ASSIGNED TARGET AND SURVIVE", - "LoopHunterInfoLong": "KILL YOUR ASSIGNED TARGET AND SURVIVE", + "Tagger": "TAGGER", + "TaggerInfo": "KILL YOUR ASSIGNED TARGET AND SURVIVE", + "TaggerInfoLong": "KILL YOUR ASSIGNED TARGET AND SURVIVE", "TMGPlayer": "THE MIND GAME", "TMGPlayerInfo": "THINK WITH OTHERS' BRAINS TO WIN", "TMGPlayerInfoLong": "THINK WITH OTHERS' BRAINS TO WIN", @@ -8164,24 +8164,24 @@ "Snowdown.SnowballThrowSpeedOption": "Snowball Throwing Speed", "SnowdownButtonText": "THROW", - "LoopWanted": "LOOP WANTED", - "ModeLoopWanted": "Gamemode: Loop Wanted", - "ModeDescribe.LoopWanted": "In the Loop Wanted gamemode, every player has an assigned assassination target marked with an arrow. You can ONLY kill your designated target. Killing the wrong target results in a punishment (suicide / lower vision). When you kill your target, you inherit their target. When only a few players remain, Carnival Mode activates: everyone gets a speed boost and reduced kill cooldown. Last player alive wins!", - "GameModeTutorial.LoopWanted": "The current game mode is <#D9BAA5>Loop Wanted.\\nEach player has a target marked with an arrow.\\nYou can ONLY kill your target.\\nKilling the wrong target will punish you.\\nYour target transfers when you kill correctly.\\nCarnival mode activates when few remain!", - "LoopWanted.BaseKillCooldown": "Base Kill Cooldown", - "LoopWanted.PunishmentMode": "Wrong Kill Punishment", - "LoopWanted.PunishSuicide": "Suicide", - "LoopWanted.PunishLowerVision": "Lower Vision", - "LoopWanted.LowerVisionMultiplier": "Lowered Vision Multiplier", - "LoopWanted.CarnivalPlayerCount": "Players to Trigger Carnival Mode", - "LoopWanted.CarnivalKillCooldown": "Carnival Mode Kill Cooldown", - "LoopWanted.CarnivalSpeedMultiplier": "Carnival Mode Speed Multiplier", - "LoopWanted.ShowTargetArrow": "Show Target Arrow", - "LoopWanted.CurrentTarget": "Current Target", - "LoopWanted.CarnivalModeActivated": "Carnival Mode! Speed up and kill faster!", - "LoopWanted.CarnivalModeHUD": "CARNIVAL", - "LoopWanted.WrongKillSuicide": "Wrong target! You committed suicide.", - "LoopWanted.WrongKillLowerVision": "Wrong target! Your vision has been reduced.", + "DoomTag": "DOOM TAG", + "ModeDoomTag": "Gamemode: Doom Tag", + "ModeDescribe.DoomTag": "In the Doom Tag gamemode, every player has an assigned assassination target marked with an arrow. You can ONLY kill your designated target. Killing the wrong target results in a punishment (suicide / lower vision). When you kill your target, you inherit their target. When only a few players remain, Carnival Mode activates: everyone gets a speed boost and reduced kill cooldown. Last player alive wins!", + "GameModeTutorial.DoomTag": "The current game mode is <#D9BAA5>Doom Tag.\\nEach player has a target marked with an arrow.\\nYou can ONLY kill your target.\\nKilling the wrong target will punish you.\\nYour target transfers when you kill correctly.\\nCarnival mode activates when few remain!", + "DoomTag.BaseKillCooldown": "Base Kill Cooldown", + "DoomTag.PunishmentMode": "Wrong Kill Punishment", + "DoomTag.PunishSuicide": "Suicide", + "DoomTag.PunishLowerVision": "Lower Vision", + "DoomTag.LowerVisionMultiplier": "Lowered Vision Multiplier", + "DoomTag.CarnivalPlayerCount": "Players to Trigger Carnival Mode", + "DoomTag.CarnivalKillCooldown": "Carnival Mode Kill Cooldown", + "DoomTag.CarnivalSpeedMultiplier": "Carnival Mode Speed Multiplier", + "DoomTag.ShowTargetArrow": "Show Target Arrow", + "DoomTag.CurrentTarget": "Current Target", + "DoomTag.CarnivalModeActivated": "Carnival Mode! Speed up and kill faster!", + "DoomTag.CarnivalModeHUD": "CARNIVAL", + "DoomTag.WrongKillSuicide": "Wrong target! You committed suicide.", + "DoomTag.WrongKillLowerVision": "Wrong target! Your vision has been reduced.", "SoloPVP": "SOLO PVP", "ModeSoloPVP": "Gamemode: Solo PVP", diff --git a/Resources/Lang/zh_CN.json b/Resources/Lang/zh_CN.json index 4f6f9750b..2c4322e79 100644 --- a/Resources/Lang/zh_CN.json +++ b/Resources/Lang/zh_CN.json @@ -4089,7 +4089,7 @@ "SnowdownPlayer": "大雪纷飞", "SnowdownPlayerInfo": "吃我一记雪球", "SnowdownPlayerInfoLong": "吃我一记雪球", - "LoopHunter": "循环追猎者", + "Tagger": "循环追猎者", "LoopHunterInfo": "追杀你的指定目标并活到最后", "LoopHunterInfoLong": "追杀你的指定目标并活到最后", "TMGPlayer": "心理游戏", @@ -8163,24 +8163,24 @@ "Snowdown.SnowballThrowSpeedOption": "丢雪球的速度", "SnowdownButtonText": "丢", - "LoopWanted": "循环追捕令", - "ModeLoopWanted": "游戏模式:循环追捕令", - "ModeDescribe.LoopWanted": "在循环追捕令游戏模式中,每个玩家都有一个带有箭头的追杀目标。你只能击杀你被指定的目标。击杀错误目标会受到惩罚(自杀 / 冷却增加 / 视野降低)。当你击杀目标后,目标的追杀对象将转移到你身上。当剩余人数足够少时,将进入狂欢状态——全员加速且击杀冷却减少。活到最后的人获胜!", - "GameModeTutorial.LoopWanted": "当前游戏模式为:<#ffb432>循环追捕令。\\n每个玩家都有一个带箭头的追杀目标。\\n你只能击杀你所指定目标!\\n击杀错误目标会受到惩罚。\\n击杀正确目标后目标转移。\\n剩余人数过少时将进入狂欢状态!", - "LoopWanted.BaseKillCooldown": "基础击杀冷却", - "LoopWanted.PunishmentMode": "击杀错误后的惩罚", - "LoopWanted.PunishSuicide": "自杀", - "LoopWanted.PunishLowerVision": "视野降低", - "LoopWanted.LowerVisionMultiplier": "降低视野倍率", - "LoopWanted.CarnivalPlayerCount": "进入狂欢模式的人数", - "LoopWanted.CarnivalKillCooldown": "狂欢状态击杀冷却", - "LoopWanted.CarnivalSpeedMultiplier": "狂欢状态下加速倍率", - "LoopWanted.ShowTargetArrow": "显示目标箭头", - "LoopWanted.CurrentTarget": "当前目标", - "LoopWanted.CarnivalModeActivated": "进入狂欢状态!全速前进,击杀加速!", - "LoopWanted.CarnivalModeHUD": "狂欢中", - "LoopWanted.WrongKillSuicide": "目标是错误的!你自杀了。", - "LoopWanted.WrongKillLowerVision": "目标是错误的!你的视野降低了。", + "DoomTag": "循环追捕令", + "ModeDoomTag": "游戏模式:循环追捕令", + "ModeDescribe.DoomTag": "在循环追捕令游戏模式中,每个玩家都有一个带有箭头的追杀目标。你只能击杀你被指定的目标。击杀错误目标会受到惩罚(自杀 / 冷却增加 / 视野降低)。当你击杀目标后,目标的追杀对象将转移到你身上。当剩余人数足够少时,将进入狂欢状态——全员加速且击杀冷却减少。活到最后的人获胜!", + "GameModeTutorial.DoomTag": "当前游戏模式为:<#ffb432>循环追捕令。\\n每个玩家都有一个带箭头的追杀目标。\\n你只能击杀你所指定目标!\\n击杀错误目标会受到惩罚。\\n击杀正确目标后目标转移。\\n剩余人数过少时将进入狂欢状态!", + "DoomTag.BaseKillCooldown": "基础击杀冷却", + "DoomTag.PunishmentMode": "击杀错误后的惩罚", + "DoomTag.PunishSuicide": "自杀", + "DoomTag.PunishLowerVision": "视野降低", + "DoomTag.LowerVisionMultiplier": "降低视野倍率", + "DoomTag.CarnivalPlayerCount": "进入狂欢模式的人数", + "DoomTag.CarnivalKillCooldown": "狂欢状态击杀冷却", + "DoomTag.CarnivalSpeedMultiplier": "狂欢状态下加速倍率", + "DoomTag.ShowTargetArrow": "显示目标箭头", + "DoomTag.CurrentTarget": "当前目标", + "DoomTag.CarnivalModeActivated": "进入狂欢状态!全速前进,击杀加速!", + "DoomTag.CarnivalModeHUD": "狂欢中", + "DoomTag.WrongKillSuicide": "目标是错误的!你自杀了。", + "DoomTag.WrongKillLowerVision": "目标是错误的!你的视野降低了。", "SoloPVP": "角逐竞技", "ModeSoloPVP": "游戏模式:角逐竞技",