Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Neutral Apocalypse #637

Closed
wants to merge 19 commits into from
Closed
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Modules/AntiBlackout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public static class AntiBlackout
|| PotionMaster.IsEnable || Wraith.IsEnable
|| Necromancer.IsEnable || Doppelganger.IsEnable
|| PlagueDoctor.IsEnable || CustomRoles.Sidekick.RoleExist(true)
|| (CustomRoles.Arsonist.RoleExist(true) && Options.ArsonistCanIgniteAnytime.GetBool());
|| (CustomRoles.Arsonist.RoleExist(true) && Options.ArsonistCanIgniteAnytime.GetBool()) || CustomRoles.Death.RoleExist(true);

///<summary>
///Difference between the number of non-impostors and the number of imposters
Expand Down
34 changes: 21 additions & 13 deletions Modules/CustomRolesHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -508,10 +508,8 @@ CustomRoles.Shroud or
CustomRoles.Virus or
CustomRoles.BloodKnight or
CustomRoles.Spiritcaller or
CustomRoles.PlagueBearer or
CustomRoles.Agitater or
CustomRoles.RuthlessRomantic or
CustomRoles.Pestilence;
CustomRoles.RuthlessRomantic;
}
public static bool IsNonNK(this CustomRoles role) // ROLE ASSIGNING, NOT NEUTRAL TYPE
{
Expand All @@ -529,6 +527,7 @@ CustomRoles.Opportunist or
CustomRoles.Pursuer or
CustomRoles.Shaman or
CustomRoles.SoulCollector or
CustomRoles.PlagueBearer or
CustomRoles.NWitch or
CustomRoles.CursedSoul or
CustomRoles.Doomsayer or
Expand Down Expand Up @@ -595,7 +594,6 @@ CustomRoles.Collector or
CustomRoles.Succubus or
CustomRoles.Phantom or
CustomRoles.Mario or
CustomRoles.SoulCollector or
CustomRoles.Pirate or
CustomRoles.Terrorist or
CustomRoles.Vulture or
Expand All @@ -604,6 +602,14 @@ CustomRoles.Solsticer or
CustomRoles.Revolutionist or
CustomRoles.Provocateur;
}
public static bool IsNA(this CustomRoles role)
{
return role is
CustomRoles.PlagueBearer or
CustomRoles.Pestilence or
CustomRoles.SoulCollector or
CustomRoles.Death;
}
public static bool IsSnitchTarget(this CustomRoles role)
{
if (role is CustomRoles.Arsonist && Options.ArsonistCanIgniteAnytime.GetBool()) return true;
Expand Down Expand Up @@ -769,6 +775,7 @@ CustomRoles.NWitch or
CustomRoles.Shroud or
CustomRoles.Wraith or
CustomRoles.SoulCollector or
CustomRoles.Death or
CustomRoles.Vulture or
CustomRoles.Taskinator or
CustomRoles.Convict or
Expand Down Expand Up @@ -1882,8 +1889,10 @@ public static CountTypes GetCountTypes(this CustomRoles role)
CustomRoles.Shroud => CountTypes.Shroud,
CustomRoles.Werewolf => CountTypes.Werewolf,
CustomRoles.Wraith => CountTypes.Wraith,
CustomRoles.Pestilence => CountTypes.Pestilence,
CustomRoles.PlagueBearer => CountTypes.PlagueBearer,
CustomRoles.Pestilence => CountTypes.Apocalypse,
CustomRoles.PlagueBearer => CountTypes.Apocalypse,
CustomRoles.SoulCollector => CountTypes.Apocalypse,
CustomRoles.Death => CountTypes.Apocalypse,
CustomRoles.Agitater => CountTypes.Agitater,
CustomRoles.Parasite => CountTypes.Impostor,
CustomRoles.NSerialKiller => CountTypes.NSerialKiller,
Expand Down Expand Up @@ -1958,16 +1967,17 @@ public static CountTypes GetCountTypes(this CustomRoles role)
CustomRoles.Pickpocket => CustomWinner.Pickpocket,
CustomRoles.Traitor => CustomWinner.Traitor,
CustomRoles.Vulture => CustomWinner.Vulture,
CustomRoles.Pestilence => CustomWinner.Pestilence,
CustomRoles.Apocalypse => CustomWinner.Apocalypse,
CustomRoles.Medusa => CustomWinner.Medusa,
CustomRoles.Spiritcaller => CustomWinner.Spiritcaller,
CustomRoles.Glitch => CustomWinner.Glitch,
CustomRoles.PlagueBearer => CustomWinner.Plaguebearer,
//CustomRoles.PlagueBearer => CustomWinner.Apocalypse,
CustomRoles.Masochist => CustomWinner.Masochist,
CustomRoles.Doomsayer => CustomWinner.Doomsayer,
CustomRoles.Shroud => CustomWinner.Shroud,
CustomRoles.Seeker => CustomWinner.Seeker,
CustomRoles.SoulCollector => CustomWinner.SoulCollector,
//CustomRoles.SoulCollector => CustomWinner.Apocalypse,
//CustomRoles.Death => CustomWinner.Apocalypse,
CustomRoles.RuthlessRomantic => CustomWinner.RuthlessRomantic,
CustomRoles.Mini => CustomWinner.NiceMini,
CustomRoles.Doppelganger => CustomWinner.Doppelganger,
Expand All @@ -1993,8 +2003,6 @@ public static CountTypes GetCountTypes(this CustomRoles role)
CountTypes.Shroud => CustomRoles.Shroud,
CountTypes.Werewolf => CustomRoles.Werewolf,
CountTypes.Wraith => CustomRoles.Wraith,
CountTypes.Pestilence => CustomRoles.Pestilence,
CountTypes.PlagueBearer => CustomRoles.PlagueBearer,
CountTypes.Agitater => CustomRoles.Agitater,
CountTypes.NSerialKiller => CustomRoles.NSerialKiller,
CountTypes.Juggernaut => CustomRoles.Juggernaut,
Expand All @@ -2015,6 +2023,7 @@ public static CountTypes GetCountTypes(this CustomRoles role)
CountTypes.Spiritcaller => CustomRoles.Spiritcaller,
CountTypes.Arsonist => CustomRoles.Arsonist,
CountTypes.RuthlessRomantic => CustomRoles.RuthlessRomantic,
CountTypes.Apocalypse => CustomRoles.Apocalypse,
//CountTypes.Impostor => CustomRoles.ImpostorTOHE,
//CountTypes.Crew => CustomRoles.CrewmateTOHE,
//CountTypes.None => throw new System.NotImplementedException(),
Expand Down Expand Up @@ -2062,8 +2071,7 @@ public enum CountTypes
Traitor,
Medusa,
Spiritcaller,
Pestilence,
PlagueBearer,
Apocalypse,
Glitch,
Arsonist,
Huntsman,
Expand Down
3 changes: 2 additions & 1 deletion Modules/ExtendedPlayerControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1315,6 +1315,7 @@ public static List<PlayerControl> GetPlayersInAbilityRangeSorted(this PlayerCont
public static bool IsNeutralBenign(this PlayerControl player) => player.GetCustomRole().IsNB();
public static bool IsNeutralEvil(this PlayerControl player) => player.GetCustomRole().IsNE();
public static bool IsNeutralChaos(this PlayerControl player) => player.GetCustomRole().IsNC();
public static bool IsNeutralApocalypse(this PlayerControl player) => player.GetCustomRole().IsNA();
public static bool IsNonNeutralKiller(this PlayerControl player) => player.GetCustomRole().IsNonNK();
public static bool IsSnitchTarget(this PlayerControl player) => player.GetCustomRole().IsSnitchTarget();

Expand Down Expand Up @@ -1371,7 +1372,7 @@ public static bool KnowRoleTarget(PlayerControl seer, PlayerControl target)
(target.Is(CustomRoles.President) && seer.Is(CustomRoles.Madmate) && President.MadmatesSeePresident.GetBool() && President.CheckPresidentReveal[target.PlayerId] == true) ||
(target.Is(CustomRoles.President) && seer.GetCustomRole().IsNeutral() && President.NeutralsSeePresident.GetBool() && President.CheckPresidentReveal[target.PlayerId] == true) ||
(target.Is(CustomRoles.President) && (seer.GetCustomRole().IsImpostorTeam()) && President.ImpsSeePresident.GetBool() && President.CheckPresidentReveal[target.PlayerId] == true)) return true;

else if (target.IsNeutralApocalypse() && seer.IsNeutralApocalypse()) return true;

else return false;
}
Expand Down
1 change: 1 addition & 0 deletions Modules/GameState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,7 @@ public enum DeathReason
Targeted,
Retribution,
WrongAnswer,
Armageddon,

//Please add all new roles with deathreason & new deathreason in Susceptible.CallEnabledAndChange
etc = -1,
Expand Down
3 changes: 3 additions & 0 deletions Modules/NameColorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,9 @@ private static bool KnowTargetRoleColor(PlayerControl seer, PlayerControl target
// PlagueDoctor
if (seer.Is(CustomRoles.PlagueDoctor) && target.Is(CustomRoles.PlagueDoctor)) color = Main.roleColors[CustomRoles.PlagueDoctor];

// Apocalypse
if (seer.IsNeutralApocalypse() && target.IsNeutralApocalypse()) color = Main.roleColors[CustomRoles.Death];

if (color != "") return true;
else return seer == target
|| (Main.GodMode.Value && seer.AmOwner)
Expand Down
11 changes: 8 additions & 3 deletions Modules/OptionHolder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2339,7 +2339,6 @@ public static void Load()
*/
Solsticer.SetupCustomOption();

SoulCollector.SetupCustomOption();

SetupRoleOptions(15400, TabGroup.NeutralRoles, CustomRoles.Terrorist);
CanTerroristSuicideWin = BooleanOptionItem.Create(15402, "CanTerroristSuicideWin", false, TabGroup.NeutralRoles, false)
Expand Down Expand Up @@ -2424,8 +2423,6 @@ public static void Load()

Poisoner.SetupCustomOption();

PlagueBearer.SetupCustomOption();

PotionMaster.SetupCustomOption();

Pyromaniac.SetupCustomOption();
Expand All @@ -2447,6 +2444,14 @@ public static void Load()

Wraith.SetupCustomOption();

TextOptionItem.Create(10000015, "RoleType.NeutralApocalypse", TabGroup.NeutralRoles)
.SetGameMode(CustomGameMode.Standard)
.SetColor(new Color32(127, 140, 141, byte.MaxValue));

PlagueBearer.SetupCustomOption();

SoulCollector.SetupCustomOption();

#endregion

#region Add-Ons Settings
Expand Down
2 changes: 1 addition & 1 deletion Modules/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,7 @@ public static bool HasTasks(GameData.PlayerInfo p, bool ForRecompute = true)
case CustomRoles.Agitater:
case CustomRoles.Jinx:
case CustomRoles.SoulCollector:
case CustomRoles.Death:
case CustomRoles.SchrodingersCat:
case CustomRoles.Parasite:
case CustomRoles.Crusader:
Expand Down Expand Up @@ -2452,7 +2453,6 @@ public static Task DoNotifyRoles(bool isForMeeting = false, PlayerControl Specif
if (PlagueBearer.IsPlagued(seer.PlayerId, target.PlayerId))
{
TargetMark.Append($"<color={GetRoleColorCode(CustomRoles.PlagueBearer)}>●</color>");
PlagueBearer.SendRPC(seer, target);
}
break;

Expand Down
19 changes: 16 additions & 3 deletions Patches/CheckGameEndPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ public static bool Prefix()
CustomWinnerHolder.WinnerIds.Add(pc.PlayerId);
}
break;
case CustomWinner.Apocalypse:
if ((pc.IsNeutralApocalypse()) && (countType == CountTypes.Apocalypse || pc.Is(CustomRoles.Soulless))
&& !CustomWinnerHolder.WinnerIds.Contains(pc.PlayerId))
{
CustomWinnerHolder.WinnerIds.Add(pc.PlayerId);
}
break;
case CustomWinner.Succubus:
if (pc.Is(CustomRoles.Charmed) && !CustomWinnerHolder.WinnerIds.Contains(pc.PlayerId))
{
Expand Down Expand Up @@ -158,7 +165,7 @@ public static bool Prefix()
foreach (var pc in Main.AllPlayerControls)
{
if (pc.Is(CustomRoles.Phantom) && pc.GetPlayerTaskState().IsTaskFinished && pc.Data.IsDead
&& (((CustomWinnerHolder.WinnerTeam == CustomWinner.Impostor || CustomWinnerHolder.WinnerTeam == CustomWinner.Crewmate || CustomWinnerHolder.WinnerTeam == CustomWinner.Jackal || CustomWinnerHolder.WinnerTeam == CustomWinner.BloodKnight || CustomWinnerHolder.WinnerTeam == CustomWinner.SerialKiller || CustomWinnerHolder.WinnerTeam == CustomWinner.Juggernaut || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Doppelganger || CustomWinnerHolder.WinnerTeam == CustomWinner.PotionMaster || CustomWinnerHolder.WinnerTeam == CustomWinner.Poisoner || CustomWinnerHolder.WinnerTeam == CustomWinner.Succubus || CustomWinnerHolder.WinnerTeam == CustomWinner.Infectious || CustomWinnerHolder.WinnerTeam == CustomWinner.Jinx || CustomWinnerHolder.WinnerTeam == CustomWinner.Virus || CustomWinnerHolder.WinnerTeam == CustomWinner.Arsonist || CustomWinnerHolder.WinnerTeam == CustomWinner.Pelican || CustomWinnerHolder.WinnerTeam == CustomWinner.Wraith || CustomWinnerHolder.WinnerTeam == CustomWinner.Agitater || CustomWinnerHolder.WinnerTeam == CustomWinner.Pestilence || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Rogue || CustomWinnerHolder.WinnerTeam == CustomWinner.Spiritcaller || CustomWinnerHolder.WinnerTeam == CustomWinner.Quizmaster ) && (Options.PhantomSnatchesWin.GetBool() || CustomWinnerHolder.WinnerTeam == CustomWinner.PlagueDoctor)))) //|| CustomWinnerHolder.WinnerTeam == CustomWinner.Occultist
&& (((CustomWinnerHolder.WinnerTeam == CustomWinner.Impostor || CustomWinnerHolder.WinnerTeam == CustomWinner.Crewmate || CustomWinnerHolder.WinnerTeam == CustomWinner.Jackal || CustomWinnerHolder.WinnerTeam == CustomWinner.BloodKnight || CustomWinnerHolder.WinnerTeam == CustomWinner.SerialKiller || CustomWinnerHolder.WinnerTeam == CustomWinner.Juggernaut || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Doppelganger || CustomWinnerHolder.WinnerTeam == CustomWinner.PotionMaster || CustomWinnerHolder.WinnerTeam == CustomWinner.Poisoner || CustomWinnerHolder.WinnerTeam == CustomWinner.Succubus || CustomWinnerHolder.WinnerTeam == CustomWinner.Infectious || CustomWinnerHolder.WinnerTeam == CustomWinner.Jinx || CustomWinnerHolder.WinnerTeam == CustomWinner.Virus || CustomWinnerHolder.WinnerTeam == CustomWinner.Arsonist || CustomWinnerHolder.WinnerTeam == CustomWinner.Pelican || CustomWinnerHolder.WinnerTeam == CustomWinner.Wraith || CustomWinnerHolder.WinnerTeam == CustomWinner.Agitater || CustomWinnerHolder.WinnerTeam == CustomWinner.Apocalypse || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Rogue || CustomWinnerHolder.WinnerTeam == CustomWinner.Spiritcaller || CustomWinnerHolder.WinnerTeam == CustomWinner.Quizmaster ) && (Options.PhantomSnatchesWin.GetBool() || CustomWinnerHolder.WinnerTeam == CustomWinner.PlagueDoctor)))) //|| CustomWinnerHolder.WinnerTeam == CustomWinner.Occultist
{
reason = GameOverReason.ImpostorByKill;
if (!CustomWinnerHolder.CheckForConvertedWinner(pc.PlayerId))
Expand All @@ -171,7 +178,7 @@ public static bool Prefix()
foreach (var pc in Main.AllPlayerControls)
{
if (pc.Is(CustomRoles.CursedSoul) && !pc.Data.IsDead
&& (((CustomWinnerHolder.WinnerTeam == CustomWinner.Impostor || CustomWinnerHolder.WinnerTeam == CustomWinner.Crewmate || CustomWinnerHolder.WinnerTeam == CustomWinner.Jackal || CustomWinnerHolder.WinnerTeam == CustomWinner.BloodKnight || CustomWinnerHolder.WinnerTeam == CustomWinner.SerialKiller || CustomWinnerHolder.WinnerTeam == CustomWinner.Juggernaut || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Doppelganger || CustomWinnerHolder.WinnerTeam == CustomWinner.PotionMaster || CustomWinnerHolder.WinnerTeam == CustomWinner.Poisoner || CustomWinnerHolder.WinnerTeam == CustomWinner.Succubus || CustomWinnerHolder.WinnerTeam == CustomWinner.Infectious || CustomWinnerHolder.WinnerTeam == CustomWinner.Jinx || CustomWinnerHolder.WinnerTeam == CustomWinner.Virus || CustomWinnerHolder.WinnerTeam == CustomWinner.Arsonist || CustomWinnerHolder.WinnerTeam == CustomWinner.Pelican || CustomWinnerHolder.WinnerTeam == CustomWinner.Wraith || CustomWinnerHolder.WinnerTeam == CustomWinner.Agitater || CustomWinnerHolder.WinnerTeam == CustomWinner.Pestilence || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Rogue || CustomWinnerHolder.WinnerTeam == CustomWinner.Jester || CustomWinnerHolder.WinnerTeam == CustomWinner.Executioner || CustomWinnerHolder.WinnerTeam == CustomWinner.PlagueDoctor)))) // || CustomWinnerHolder.WinnerTeam == CustomWinner.Occultist
&& (((CustomWinnerHolder.WinnerTeam == CustomWinner.Impostor || CustomWinnerHolder.WinnerTeam == CustomWinner.Crewmate || CustomWinnerHolder.WinnerTeam == CustomWinner.Jackal || CustomWinnerHolder.WinnerTeam == CustomWinner.BloodKnight || CustomWinnerHolder.WinnerTeam == CustomWinner.SerialKiller || CustomWinnerHolder.WinnerTeam == CustomWinner.Juggernaut || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Doppelganger || CustomWinnerHolder.WinnerTeam == CustomWinner.PotionMaster || CustomWinnerHolder.WinnerTeam == CustomWinner.Poisoner || CustomWinnerHolder.WinnerTeam == CustomWinner.Succubus || CustomWinnerHolder.WinnerTeam == CustomWinner.Infectious || CustomWinnerHolder.WinnerTeam == CustomWinner.Jinx || CustomWinnerHolder.WinnerTeam == CustomWinner.Virus || CustomWinnerHolder.WinnerTeam == CustomWinner.Arsonist || CustomWinnerHolder.WinnerTeam == CustomWinner.Pelican || CustomWinnerHolder.WinnerTeam == CustomWinner.Wraith || CustomWinnerHolder.WinnerTeam == CustomWinner.Agitater || CustomWinnerHolder.WinnerTeam == CustomWinner.Apocalypse || CustomWinnerHolder.WinnerTeam == CustomWinner.Bandit || CustomWinnerHolder.WinnerTeam == CustomWinner.Rogue || CustomWinnerHolder.WinnerTeam == CustomWinner.Jester || CustomWinnerHolder.WinnerTeam == CustomWinner.Executioner || CustomWinnerHolder.WinnerTeam == CustomWinner.PlagueDoctor)))) // || CustomWinnerHolder.WinnerTeam == CustomWinner.Occultist
{
reason = GameOverReason.ImpostorByKill;
if (!CustomWinnerHolder.CheckForConvertedWinner(pc.PlayerId))
Expand Down Expand Up @@ -383,7 +390,13 @@ public static bool Prefix()
CustomWinnerHolder.AdditionalWinnerTeams.Add(AdditionalWinners.Romantic);
}
}
foreach (var pc in Main.AllPlayerControls.Where(x => x.IsNeutralApocalypse() && Main.AllAlivePlayerControls.All(p => p.IsNeutralApocalypse()))) {
if (!CustomWinnerHolder.WinnerIds.Contains(pc.PlayerId))
CustomWinnerHolder.WinnerIds.Add(pc.PlayerId);

if (!CustomWinnerHolder.WinnerRoles.Contains(pc.GetCustomRole()))
CustomWinnerHolder.WinnerRoles.Add(pc.GetCustomRole());
}
foreach (var pc in Main.AllPlayerControls.Where(x => x.Is(CustomRoles.RuthlessRomantic)).ToArray())
{
if (Romantic.BetPlayer.TryGetValue(pc.PlayerId, out var betTarget) && (
Expand Down Expand Up @@ -638,7 +651,7 @@ public static bool CheckGameEndByLivingPlayers(out GameOverReason reason)
var winnerRole = winners[0].Key.GetNeutralCustomRoleFromCountType();
reason = GameOverReason.ImpostorByKill;
CustomWinnerHolder.ResetAndSetWinner(winnerRole.GetNeutralCustomWinnerFromRole());
CustomWinnerHolder.WinnerRoles.Add(winnerRole);
if (winnerRole != CustomRoles.Apocalypse) CustomWinnerHolder.WinnerRoles.Add(winnerRole);
}
else if (winnnerLength == 0)
{
Expand Down
5 changes: 5 additions & 0 deletions Patches/MeetingHudPatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,11 @@ void AddMsg(string text, byte sendTo = 255, string title = "")
string separator = TranslationController.Instance.currentLanguage.languageID is SupportedLangs.English or SupportedLangs.Russian ? "], [" : "】, 【";
AddMsg(string.Format(GetString("BaitAdviceAlive"), string.Join(separator, baitAliveList)), 255, Utils.ColorString(Utils.GetRoleColor(CustomRoles.Bait), GetString("BaitAliveTitle")));
}
//Death Notify
if (CustomRoles.Death.RoleExist())
{
AddMsg(string.Format(GetString("SoulCollectorTransform")), 255, Utils.ColorString(Utils.GetRoleColor(CustomRoles.SoulCollector), GetString("ApocalypseIsNigh")));
}
string MimicMsg = "";
foreach (var pc in Main.AllPlayerControls)
{
Expand Down
Loading