diff --git a/CTA/CustomTeamAssigner/App.xaml b/CTA/CustomTeamAssigner/App.xaml
new file mode 100644
index 000000000..f84539170
--- /dev/null
+++ b/CTA/CustomTeamAssigner/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/CTA/CustomTeamAssigner/App.xaml.cs b/CTA/CustomTeamAssigner/App.xaml.cs
new file mode 100644
index 000000000..0b0151343
--- /dev/null
+++ b/CTA/CustomTeamAssigner/App.xaml.cs
@@ -0,0 +1,14 @@
+using System.Configuration;
+using System.Data;
+using System.Windows;
+
+namespace CustomTeamAssigner
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+
+}
diff --git a/CTA/CustomTeamAssigner/AssemblyInfo.cs b/CTA/CustomTeamAssigner/AssemblyInfo.cs
new file mode 100644
index 000000000..b0ec82757
--- /dev/null
+++ b/CTA/CustomTeamAssigner/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/CTA/CustomTeamAssigner/CustomRoles.cs b/CTA/CustomTeamAssigner/CustomRoles.cs
new file mode 100644
index 000000000..948b0fc1b
--- /dev/null
+++ b/CTA/CustomTeamAssigner/CustomRoles.cs
@@ -0,0 +1,388 @@
+
+namespace EHR;
+
+public enum CustomRoles
+{
+ //Default
+ Crewmate = 0,
+
+ //Impostors (Vanilla)
+ Impostor,
+ Shapeshifter,
+
+ // Vanilla Remakes
+ ImpostorTOHE,
+ ShapeshifterTOHE,
+
+ //Impostors
+
+ Hacker, // Anonymous
+ AntiAdminer,
+ Sans, // Arrogance
+ Bard,
+ Blackmailer,
+ Bomber,
+ BountyHunter,
+ OverKiller, // Butcher
+ Camouflager,
+ Capitalism,
+ Cantankerous,
+ Changeling,
+ Chronomancer,
+ Cleaner,
+ Commander,
+ EvilDiviner, // Consigliere
+ Consort,
+ Councillor,
+ Crewpostor,
+ CursedWolf,
+ Deathpact,
+ Devourer,
+ Disperser,
+ Duellist,
+ Dazzler,
+ Escapee,
+ Eraser,
+ EvilGuesser,
+ EvilTracker,
+ FireWorks,
+ Freezer,
+ Gambler,
+ Gangster,
+ Godfather,
+ Greedier,
+ Hangman,
+ Hitman,
+ Inhibitor,
+ Kamikaze,
+ Kidnapper,
+ Minimalism, // Killing Machine
+ BallLightning, // Lightning
+ Librarian,
+ Lurker,
+ Mafioso,
+ Mastermind,
+ Mafia, // Nemesis
+ SerialKiller, // Mercenary
+ Miner,
+ Morphling,
+ Assassin, // Ninja
+ Nuker,
+ Nullifier,
+ Parasite,
+ Penguin,
+ Puppeteer,
+ QuickShooter,
+ Refugee,
+ RiftMaker,
+ Saboteur,
+ Sapper,
+ Scavenger,
+ Silencer,
+ Sniper,
+ ImperiusCurse, // Soul Catcher
+ Swapster,
+ Swiftclaw,
+ Swooper,
+ Stealth,
+ TimeThief,
+ BoobyTrap, // Trapster
+ Trickster,
+ Twister,
+ Underdog,
+ Undertaker,
+ Vampire,
+ Vindicator,
+ Visionary,
+ Warlock,
+ Wildling,
+ Witch,
+ YinYanger,
+ Zombie,
+
+ //Crewmates (Vanilla)
+ Engineer,
+ GuardianAngel,
+ Scientist,
+
+ // Vanilla Remakes
+ CrewmateTOHE,
+ EngineerTOHE,
+ GuardianAngelTOHE,
+ ScientistTOHE,
+
+ // Crewmate
+
+ Addict,
+ Aid,
+ Alchemist,
+ Altruist,
+ Analyzer,
+ Autocrat,
+ Beacon,
+ Benefactor,
+ Bodyguard,
+ CameraMan,
+ CyberStar, // Celebrity
+ Chameleon,
+ Cleanser,
+ Convener,
+ CopyCat,
+ Bloodhound, // Coroner
+ Crusader,
+ Demolitionist,
+ Deputy,
+ Detective,
+ Detour,
+ Dictator,
+ Doctor,
+ DonutDelivery,
+ Doormaster,
+ DovesOfNeace,
+ Drainer,
+ Druid,
+ Electric,
+ Enigma,
+ Escort,
+ Express,
+ Farseer,
+ Divinator, // Fortune Teller
+ Gaulois,
+ Grenadier,
+ GuessManagerRole,
+ Guardian,
+ Ignitor,
+ Insight,
+ ParityCop, // Inspector
+ Jailor,
+ Judge,
+ Needy, // Lazy Guy
+ Lighter,
+ Lookout,
+ Luckey,
+ Markseeker,
+ Marshall,
+ Mathematician,
+ Mayor,
+ SabotageMaster, // Mechanic
+ Medic,
+ Mediumshiper,
+ Merchant,
+ Monitor,
+ Mole,
+ Monarch,
+ Mortician,
+ NiceEraser,
+ NiceGuesser,
+ NiceHacker,
+ NiceSwapper,
+ Nightmare,
+ Observer,
+ Oracle,
+ Paranoia,
+ Perceiver,
+ Philantropist,
+ Psychic,
+ Rabbit,
+ Randomizer,
+ Ricochet,
+ Sentinel,
+ SecurityGuard,
+ Sheriff,
+ Shiftguard,
+ Snitch,
+ Spiritualist,
+ Speedrunner,
+ SpeedBooster,
+ Spy,
+ SuperStar,
+ TaskManager,
+ Tether,
+ TimeManager,
+ TimeMaster,
+ Tornado,
+ Tracker,
+ Transmitter,
+ Transporter,
+ Tracefinder,
+ Tunneler,
+ Ventguard,
+ Veteran,
+ SwordsMan, // Vigilante
+ Witness,
+
+ //Neutrals
+
+ Agitater,
+ Amnesiac,
+ Arsonist,
+ Bandit,
+ BloodKnight,
+ Bubble,
+ Collector,
+ Deathknight,
+ Gamer, // Demon
+ Doppelganger,
+ Doomsayer,
+ Eclipse,
+ Enderman,
+ Executioner,
+ Totocalcio, // Follower
+ Glitch,
+ God,
+ FFF, // Hater
+ HeadHunter,
+ HexMaster,
+ Hookshot,
+ Imitator,
+ Impartial,
+ Innocent,
+ Jackal,
+ Jester,
+ Jinx,
+ Juggernaut,
+ Konan,
+ Lawyer,
+ Magician,
+ Mario,
+ Maverick,
+ Medusa,
+ Mycologist,
+ Necromancer,
+ Opportunist,
+ Pelican,
+ Pestilence,
+ Phantom,
+ Pickpocket,
+ PlagueBearer,
+ PlagueDoctor,
+ Poisoner,
+ Postman,
+ Predator,
+ Provocateur,
+ Pursuer,
+ Pyromaniac,
+ Reckless,
+ Revolutionist,
+ Ritualist,
+ Romantic,
+ RuthlessRomantic,
+ NSerialKiller, // Serial Killer
+ Sidekick,
+ SoulHunter,
+ Spiritcaller,
+ Sprayer,
+ DarkHide, // Stalker
+ Succubus,
+ Sunnyboy,
+ Terrorist,
+ Tiger,
+ Traitor,
+ Vengeance,
+ VengefulRomantic,
+ Virus,
+ Vulture,
+ Wraith,
+ Werewolf,
+ WeaponMaster,
+ Workaholic,
+
+ //SoloKombat
+ KB_Normal,
+
+ //FFA
+ Killer,
+
+ //MoveAndStop
+ Tasker,
+
+ //HotPotato
+ Potato,
+
+ //H&S
+ Hider,
+ Seeker,
+ Fox,
+ Troll,
+
+ //GM
+ GM,
+
+ // ????
+ Convict,
+
+
+ // Sub-role after 500
+ NotAssigned = 500,
+ Antidote,
+ Asthmatic,
+ Autopsy,
+ Avanger,
+ Bait,
+ Busy,
+ Trapper, // Beartrap
+ Bewilder,
+ Bloodlust,
+ Charmed,
+ Circumvent,
+ Cleansed,
+ Clumsy,
+ Contagious,
+ Damocles,
+ DeadlyQuota,
+ Disco,
+ Diseased,
+ Unreportable, // Disregarded
+ DoubleShot,
+ Egoist,
+ EvilSpirit,
+ Flashman,
+ Fool,
+ Giant,
+ Glow,
+ Gravestone,
+ Guesser,
+ Haste,
+ Haunter, // Ghost role
+ Knighted,
+ LastImpostor,
+ Lazy,
+ Lovers,
+ Loyal,
+ Lucky,
+ Madmate,
+ Magnet,
+ Mare,
+ Mimic,
+ Minion, // Ghost role
+ Mischievous,
+ Necroview,
+ Ntr, // Neptune
+ Nimble,
+ Oblivious,
+ Onbound,
+ Specter, // Ghost role
+ Physicist,
+ Rascal,
+ Reach,
+ Recruit,
+ Rogue,
+ DualPersonality, // Schizophrenic
+ Seer,
+ Sleuth,
+ Stained,
+ Taskcounter,
+ TicketsStealer, // Stealer
+ Stressed,
+ Swift,
+ Sunglasses,
+ Brakar, // Tiebreaker
+ Torch,
+ Truant,
+ Undead,
+ Unlucky,
+ Warden, // Ghost role
+ Watcher,
+ Workhorse,
+ Youtuber
+}
diff --git a/CTA/CustomTeamAssigner/CustomTeamAssigner.csproj b/CTA/CustomTeamAssigner/CustomTeamAssigner.csproj
new file mode 100644
index 000000000..ec79c2791
--- /dev/null
+++ b/CTA/CustomTeamAssigner/CustomTeamAssigner.csproj
@@ -0,0 +1,21 @@
+
+
+
+ WinExe
+ net8.0-windows
+ enable
+ enable
+ true
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/CTA/CustomTeamAssigner/CustomTeamAssigner.sln b/CTA/CustomTeamAssigner/CustomTeamAssigner.sln
new file mode 100644
index 000000000..2c2155e5d
--- /dev/null
+++ b/CTA/CustomTeamAssigner/CustomTeamAssigner.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.34707.107
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomTeamAssigner", "CustomTeamAssigner.csproj", "{B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {7D0AF6B5-F7EA-440B-BEFF-CA295AF3CA1D}
+ EndGlobalSection
+EndGlobal
diff --git a/CTA/CustomTeamAssigner/MainWindow.xaml b/CTA/CustomTeamAssigner/MainWindow.xaml
new file mode 100644
index 000000000..4e657cae6
--- /dev/null
+++ b/CTA/CustomTeamAssigner/MainWindow.xaml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CTA/CustomTeamAssigner/MainWindow.xaml.cs b/CTA/CustomTeamAssigner/MainWindow.xaml.cs
new file mode 100644
index 000000000..74fdee39e
--- /dev/null
+++ b/CTA/CustomTeamAssigner/MainWindow.xaml.cs
@@ -0,0 +1,49 @@
+using System.IO;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Microsoft.Win32;
+
+namespace CustomTeamAssigner
+{
+ public partial class MainWindow : Window
+ {
+ public static MainWindow Instance { get; private set; } = null!;
+
+ public MainWindow()
+ {
+ InitializeComponent();
+ Instance = this;
+ }
+
+ void ImportPlaySet(object sender, RoutedEventArgs e)
+ {
+ OpenFileDialog ofd = new()
+ {
+ Filter = "Text files (*.txt)|*.txt",
+ RestoreDirectory = true
+ };
+
+ if (ofd.ShowDialog() == true)
+ {
+ File.ReadAllLines(ofd.FileName).Do(line => new Team(line.Split(';')[0]).Import(line));
+
+ Navigator.NavigationService.Navigate(new PlaySetListerPage());
+ MainGrid.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ void CreateNewPlaySet(object sender, RoutedEventArgs e)
+ {
+ }
+
+ void Exit(object sender, RoutedEventArgs e) => Close();
+ }
+}
\ No newline at end of file
diff --git a/CTA/CustomTeamAssigner/PlaySetListerPage.xaml b/CTA/CustomTeamAssigner/PlaySetListerPage.xaml
new file mode 100644
index 000000000..0e08e69ea
--- /dev/null
+++ b/CTA/CustomTeamAssigner/PlaySetListerPage.xaml
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CTA/CustomTeamAssigner/PlaySetListerPage.xaml.cs b/CTA/CustomTeamAssigner/PlaySetListerPage.xaml.cs
new file mode 100644
index 000000000..fbe3a4c99
--- /dev/null
+++ b/CTA/CustomTeamAssigner/PlaySetListerPage.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace CustomTeamAssigner
+{
+ public partial class PlaySetListerPage : Page
+ {
+ public PlaySetListerPage()
+ {
+ InitializeComponent();
+ TeamListBox.ItemsSource = Utils.Teams.Select(x => x.TeamName);
+ }
+
+ void Back(object sender, RoutedEventArgs e) => MainWindow.Instance.Navigator.NavigationService.GoBack();
+ }
+}
diff --git a/CTA/CustomTeamAssigner/Team.cs b/CTA/CustomTeamAssigner/Team.cs
new file mode 100644
index 000000000..50e832a3e
--- /dev/null
+++ b/CTA/CustomTeamAssigner/Team.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using EHR;
+
+namespace CustomTeamAssigner
+{
+ internal class Team(string teamName)
+ {
+ public string RoleRevealScreenTitle { get; set; } = "*";
+
+ public string RoleRevealScreenSubtitle { get; set; } = "*";
+
+ public string RoleRevealScreenBackgroundColor { get; set; } = "*";
+
+ public string TeamName
+ {
+ get => teamName;
+ set => teamName = value;
+ }
+
+ public List TeamMembers { get; set; } = [];
+
+ public void Import(string line)
+ {
+ try
+ {
+ string[] parts = line.Split(';')[1..];
+
+ string title = parts[0];
+ string subtitle = parts[1];
+ string bgColor = parts[2];
+
+ TeamMembers = parts[3].Split(',').Select(member => Enum.Parse(member, true)).ToList();
+
+ RoleRevealScreenTitle = title;
+ RoleRevealScreenSubtitle = subtitle;
+ RoleRevealScreenBackgroundColor = bgColor;
+ }
+ catch (Exception e)
+ {
+ switch (e)
+ {
+ case NullReferenceException:
+ MessageBox.Show("The file is empty.", "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
+ break;
+ case InvalidOperationException:
+ case IndexOutOfRangeException:
+ MessageBox.Show("The file is not formatted correctly.", "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
+ break;
+ case ArgumentException:
+ MessageBox.Show("A team member role could not be recognized from the given string.", "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
+ break;
+ default:
+ MessageBox.Show(e.Message, "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
+ break;
+ }
+ }
+ finally
+ {
+ Utils.Teams.Add(this);
+ }
+ }
+
+ public string Export
+ {
+ get
+ {
+ StringBuilder sb = new();
+ sb.Append(RoleRevealScreenTitle);
+ sb.Append(';');
+ sb.Append(RoleRevealScreenSubtitle);
+ sb.Append(';');
+ sb.Append(RoleRevealScreenBackgroundColor);
+ sb.Append(';');
+ sb.Append(string.Join(",", TeamMembers));
+ return sb.ToString();
+ }
+ }
+ }
+}
diff --git a/CTA/CustomTeamAssigner/TeamEditorPage.xaml b/CTA/CustomTeamAssigner/TeamEditorPage.xaml
new file mode 100644
index 000000000..769068d6c
--- /dev/null
+++ b/CTA/CustomTeamAssigner/TeamEditorPage.xaml
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CTA/CustomTeamAssigner/TeamEditorPage.xaml.cs b/CTA/CustomTeamAssigner/TeamEditorPage.xaml.cs
new file mode 100644
index 000000000..773fe5172
--- /dev/null
+++ b/CTA/CustomTeamAssigner/TeamEditorPage.xaml.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace CustomTeamAssigner
+{
+ public partial class TeamEditorPage : Page
+ {
+ public TeamEditorPage()
+ {
+ InitializeComponent();
+ }
+
+ void OverrideColorCheck(object sender, RoutedEventArgs e) => TeamColorTextBox.IsEnabled = OverrideColorCheckBox.IsChecked == true;
+ void OverrideTitleCheck(object sender, RoutedEventArgs e) => TeamTitleTextBox.IsEnabled = OverrideTitleCheckBox.IsChecked == true;
+ void OverrideSubTitleCheck(object sender, RoutedEventArgs e) => TeamSubTitleTextBox.IsEnabled = OverrideSubTitleCheckBox.IsChecked == true;
+ }
+}
diff --git a/CTA/CustomTeamAssigner/Utils.cs b/CTA/CustomTeamAssigner/Utils.cs
new file mode 100644
index 000000000..7ef08cd3a
--- /dev/null
+++ b/CTA/CustomTeamAssigner/Utils.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Media;
+
+namespace CustomTeamAssigner
+{
+ internal static class Utils
+ {
+ public static HashSet Teams = [];
+
+ public const string OutputFileName = "CTA_Data.txt";
+
+ public static Color ToColor(this string htmlColor) => (Color)ColorConverter.ConvertFromString(htmlColor);
+
+ public static void Do(this IEnumerable enumerable, Action action)
+ {
+ foreach (var item in enumerable)
+ {
+ action(item);
+ }
+ }
+ }
+}
diff --git a/CTA/CustomTeamAssigner/bg.jpg b/CTA/CustomTeamAssigner/bg.jpg
new file mode 100644
index 000000000..548c93eec
Binary files /dev/null and b/CTA/CustomTeamAssigner/bg.jpg differ
diff --git a/CustomRoles.cs b/CustomRoles.cs
new file mode 100644
index 000000000..948b0fc1b
--- /dev/null
+++ b/CustomRoles.cs
@@ -0,0 +1,388 @@
+
+namespace EHR;
+
+public enum CustomRoles
+{
+ //Default
+ Crewmate = 0,
+
+ //Impostors (Vanilla)
+ Impostor,
+ Shapeshifter,
+
+ // Vanilla Remakes
+ ImpostorTOHE,
+ ShapeshifterTOHE,
+
+ //Impostors
+
+ Hacker, // Anonymous
+ AntiAdminer,
+ Sans, // Arrogance
+ Bard,
+ Blackmailer,
+ Bomber,
+ BountyHunter,
+ OverKiller, // Butcher
+ Camouflager,
+ Capitalism,
+ Cantankerous,
+ Changeling,
+ Chronomancer,
+ Cleaner,
+ Commander,
+ EvilDiviner, // Consigliere
+ Consort,
+ Councillor,
+ Crewpostor,
+ CursedWolf,
+ Deathpact,
+ Devourer,
+ Disperser,
+ Duellist,
+ Dazzler,
+ Escapee,
+ Eraser,
+ EvilGuesser,
+ EvilTracker,
+ FireWorks,
+ Freezer,
+ Gambler,
+ Gangster,
+ Godfather,
+ Greedier,
+ Hangman,
+ Hitman,
+ Inhibitor,
+ Kamikaze,
+ Kidnapper,
+ Minimalism, // Killing Machine
+ BallLightning, // Lightning
+ Librarian,
+ Lurker,
+ Mafioso,
+ Mastermind,
+ Mafia, // Nemesis
+ SerialKiller, // Mercenary
+ Miner,
+ Morphling,
+ Assassin, // Ninja
+ Nuker,
+ Nullifier,
+ Parasite,
+ Penguin,
+ Puppeteer,
+ QuickShooter,
+ Refugee,
+ RiftMaker,
+ Saboteur,
+ Sapper,
+ Scavenger,
+ Silencer,
+ Sniper,
+ ImperiusCurse, // Soul Catcher
+ Swapster,
+ Swiftclaw,
+ Swooper,
+ Stealth,
+ TimeThief,
+ BoobyTrap, // Trapster
+ Trickster,
+ Twister,
+ Underdog,
+ Undertaker,
+ Vampire,
+ Vindicator,
+ Visionary,
+ Warlock,
+ Wildling,
+ Witch,
+ YinYanger,
+ Zombie,
+
+ //Crewmates (Vanilla)
+ Engineer,
+ GuardianAngel,
+ Scientist,
+
+ // Vanilla Remakes
+ CrewmateTOHE,
+ EngineerTOHE,
+ GuardianAngelTOHE,
+ ScientistTOHE,
+
+ // Crewmate
+
+ Addict,
+ Aid,
+ Alchemist,
+ Altruist,
+ Analyzer,
+ Autocrat,
+ Beacon,
+ Benefactor,
+ Bodyguard,
+ CameraMan,
+ CyberStar, // Celebrity
+ Chameleon,
+ Cleanser,
+ Convener,
+ CopyCat,
+ Bloodhound, // Coroner
+ Crusader,
+ Demolitionist,
+ Deputy,
+ Detective,
+ Detour,
+ Dictator,
+ Doctor,
+ DonutDelivery,
+ Doormaster,
+ DovesOfNeace,
+ Drainer,
+ Druid,
+ Electric,
+ Enigma,
+ Escort,
+ Express,
+ Farseer,
+ Divinator, // Fortune Teller
+ Gaulois,
+ Grenadier,
+ GuessManagerRole,
+ Guardian,
+ Ignitor,
+ Insight,
+ ParityCop, // Inspector
+ Jailor,
+ Judge,
+ Needy, // Lazy Guy
+ Lighter,
+ Lookout,
+ Luckey,
+ Markseeker,
+ Marshall,
+ Mathematician,
+ Mayor,
+ SabotageMaster, // Mechanic
+ Medic,
+ Mediumshiper,
+ Merchant,
+ Monitor,
+ Mole,
+ Monarch,
+ Mortician,
+ NiceEraser,
+ NiceGuesser,
+ NiceHacker,
+ NiceSwapper,
+ Nightmare,
+ Observer,
+ Oracle,
+ Paranoia,
+ Perceiver,
+ Philantropist,
+ Psychic,
+ Rabbit,
+ Randomizer,
+ Ricochet,
+ Sentinel,
+ SecurityGuard,
+ Sheriff,
+ Shiftguard,
+ Snitch,
+ Spiritualist,
+ Speedrunner,
+ SpeedBooster,
+ Spy,
+ SuperStar,
+ TaskManager,
+ Tether,
+ TimeManager,
+ TimeMaster,
+ Tornado,
+ Tracker,
+ Transmitter,
+ Transporter,
+ Tracefinder,
+ Tunneler,
+ Ventguard,
+ Veteran,
+ SwordsMan, // Vigilante
+ Witness,
+
+ //Neutrals
+
+ Agitater,
+ Amnesiac,
+ Arsonist,
+ Bandit,
+ BloodKnight,
+ Bubble,
+ Collector,
+ Deathknight,
+ Gamer, // Demon
+ Doppelganger,
+ Doomsayer,
+ Eclipse,
+ Enderman,
+ Executioner,
+ Totocalcio, // Follower
+ Glitch,
+ God,
+ FFF, // Hater
+ HeadHunter,
+ HexMaster,
+ Hookshot,
+ Imitator,
+ Impartial,
+ Innocent,
+ Jackal,
+ Jester,
+ Jinx,
+ Juggernaut,
+ Konan,
+ Lawyer,
+ Magician,
+ Mario,
+ Maverick,
+ Medusa,
+ Mycologist,
+ Necromancer,
+ Opportunist,
+ Pelican,
+ Pestilence,
+ Phantom,
+ Pickpocket,
+ PlagueBearer,
+ PlagueDoctor,
+ Poisoner,
+ Postman,
+ Predator,
+ Provocateur,
+ Pursuer,
+ Pyromaniac,
+ Reckless,
+ Revolutionist,
+ Ritualist,
+ Romantic,
+ RuthlessRomantic,
+ NSerialKiller, // Serial Killer
+ Sidekick,
+ SoulHunter,
+ Spiritcaller,
+ Sprayer,
+ DarkHide, // Stalker
+ Succubus,
+ Sunnyboy,
+ Terrorist,
+ Tiger,
+ Traitor,
+ Vengeance,
+ VengefulRomantic,
+ Virus,
+ Vulture,
+ Wraith,
+ Werewolf,
+ WeaponMaster,
+ Workaholic,
+
+ //SoloKombat
+ KB_Normal,
+
+ //FFA
+ Killer,
+
+ //MoveAndStop
+ Tasker,
+
+ //HotPotato
+ Potato,
+
+ //H&S
+ Hider,
+ Seeker,
+ Fox,
+ Troll,
+
+ //GM
+ GM,
+
+ // ????
+ Convict,
+
+
+ // Sub-role after 500
+ NotAssigned = 500,
+ Antidote,
+ Asthmatic,
+ Autopsy,
+ Avanger,
+ Bait,
+ Busy,
+ Trapper, // Beartrap
+ Bewilder,
+ Bloodlust,
+ Charmed,
+ Circumvent,
+ Cleansed,
+ Clumsy,
+ Contagious,
+ Damocles,
+ DeadlyQuota,
+ Disco,
+ Diseased,
+ Unreportable, // Disregarded
+ DoubleShot,
+ Egoist,
+ EvilSpirit,
+ Flashman,
+ Fool,
+ Giant,
+ Glow,
+ Gravestone,
+ Guesser,
+ Haste,
+ Haunter, // Ghost role
+ Knighted,
+ LastImpostor,
+ Lazy,
+ Lovers,
+ Loyal,
+ Lucky,
+ Madmate,
+ Magnet,
+ Mare,
+ Mimic,
+ Minion, // Ghost role
+ Mischievous,
+ Necroview,
+ Ntr, // Neptune
+ Nimble,
+ Oblivious,
+ Onbound,
+ Specter, // Ghost role
+ Physicist,
+ Rascal,
+ Reach,
+ Recruit,
+ Rogue,
+ DualPersonality, // Schizophrenic
+ Seer,
+ Sleuth,
+ Stained,
+ Taskcounter,
+ TicketsStealer, // Stealer
+ Stressed,
+ Swift,
+ Sunglasses,
+ Brakar, // Tiebreaker
+ Torch,
+ Truant,
+ Undead,
+ Unlucky,
+ Warden, // Ghost role
+ Watcher,
+ Workhorse,
+ Youtuber
+}
diff --git a/EHR.csproj b/EHR.csproj
index ee35462d5..85905ad10 100644
--- a/EHR.csproj
+++ b/EHR.csproj
@@ -17,6 +17,12 @@
+
+
+
+
+
+
@@ -47,4 +53,7 @@
+
+
+
diff --git a/main.cs b/main.cs
index 97317642e..23334042c 100644
--- a/main.cs
+++ b/main.cs
@@ -626,392 +626,6 @@ public enum Team
Crewmate = 4
}
-public enum CustomRoles
-{
- //Default
- Crewmate = 0,
-
- //Impostors (Vanilla)
- Impostor,
- Shapeshifter,
-
- // Vanilla Remakes
- ImpostorTOHE,
- ShapeshifterTOHE,
-
- //Impostors
-
- Hacker, // Anonymous
- AntiAdminer,
- Sans, // Arrogance
- Bard,
- Blackmailer,
- Bomber,
- BountyHunter,
- OverKiller, // Butcher
- Camouflager,
- Capitalism,
- Cantankerous,
- Changeling,
- Chronomancer,
- Cleaner,
- Commander,
- EvilDiviner, // Consigliere
- Consort,
- Councillor,
- Crewpostor,
- CursedWolf,
- Deathpact,
- Devourer,
- Disperser,
- Duellist,
- Dazzler,
- Escapee,
- Eraser,
- EvilGuesser,
- EvilTracker,
- FireWorks,
- Freezer,
- Gambler,
- Gangster,
- Godfather,
- Greedier,
- Hangman,
- Hitman,
- Inhibitor,
- Kamikaze,
- Kidnapper,
- Minimalism, // Killing Machine
- BallLightning, // Lightning
- Librarian,
- Lurker,
- Mafioso,
- Mastermind,
- Mafia, // Nemesis
- SerialKiller, // Mercenary
- Miner,
- Morphling,
- Assassin, // Ninja
- Nuker,
- Nullifier,
- Parasite,
- Penguin,
- Puppeteer,
- QuickShooter,
- Refugee,
- RiftMaker,
- Saboteur,
- Sapper,
- Scavenger,
- Silencer,
- Sniper,
- ImperiusCurse, // Soul Catcher
- Swapster,
- Swiftclaw,
- Swooper,
- Stealth,
- TimeThief,
- BoobyTrap, // Trapster
- Trickster,
- Twister,
- Underdog,
- Undertaker,
- Vampire,
- Vindicator,
- Visionary,
- Warlock,
- Wildling,
- Witch,
- YinYanger,
- Zombie,
-
- //Crewmates (Vanilla)
- Engineer,
- GuardianAngel,
- Scientist,
-
- // Vanilla Remakes
- CrewmateTOHE,
- EngineerTOHE,
- GuardianAngelTOHE,
- ScientistTOHE,
-
- // Crewmate
-
- Addict,
- Aid,
- Alchemist,
- Altruist,
- Analyzer,
- Autocrat,
- Beacon,
- Benefactor,
- Bodyguard,
- CameraMan,
- CyberStar, // Celebrity
- Chameleon,
- Cleanser,
- Convener,
- CopyCat,
- Bloodhound, // Coroner
- Crusader,
- Demolitionist,
- Deputy,
- Detective,
- Detour,
- Dictator,
- Doctor,
- DonutDelivery,
- Doormaster,
- DovesOfNeace,
- Drainer,
- Druid,
- Electric,
- Enigma,
- Escort,
- Express,
- Farseer,
- Divinator, // Fortune Teller
- Gaulois,
- Grenadier,
- GuessManagerRole,
- Guardian,
- Ignitor,
- Insight,
- ParityCop, // Inspector
- Jailor,
- Judge,
- Needy, // Lazy Guy
- Lighter,
- Lookout,
- Luckey,
- Markseeker,
- Marshall,
- Mathematician,
- Mayor,
- SabotageMaster, // Mechanic
- Medic,
- Mediumshiper,
- Merchant,
- Monitor,
- Mole,
- Monarch,
- Mortician,
- NiceEraser,
- NiceGuesser,
- NiceHacker,
- NiceSwapper,
- Nightmare,
- Observer,
- Oracle,
- Paranoia,
- Perceiver,
- Philantropist,
- Psychic,
- Rabbit,
- Randomizer,
- Ricochet,
- Sentinel,
- SecurityGuard,
- Sheriff,
- Shiftguard,
- Snitch,
- Spiritualist,
- Speedrunner,
- SpeedBooster,
- Spy,
- SuperStar,
- TaskManager,
- Tether,
- TimeManager,
- TimeMaster,
- Tornado,
- Tracker,
- Transmitter,
- Transporter,
- Tracefinder,
- Tunneler,
- Ventguard,
- Veteran,
- SwordsMan, // Vigilante
- Witness,
-
- //Neutrals
-
- Agitater,
- Amnesiac,
- Arsonist,
- Bandit,
- BloodKnight,
- Bubble,
- Collector,
- Deathknight,
- Gamer, // Demon
- Doppelganger,
- Doomsayer,
- Eclipse,
- Enderman,
- Executioner,
- Totocalcio, // Follower
- Glitch,
- God,
- FFF, // Hater
- HeadHunter,
- HexMaster,
- Hookshot,
- Imitator,
- Impartial,
- Innocent,
- Jackal,
- Jester,
- Jinx,
- Juggernaut,
- Konan,
- Lawyer,
- Magician,
- Mario,
- Maverick,
- Medusa,
- Mycologist,
- Necromancer,
- Opportunist,
- Pelican,
- Pestilence,
- Phantom,
- Pickpocket,
- PlagueBearer,
- PlagueDoctor,
- Poisoner,
- Postman,
- Predator,
- Provocateur,
- Pursuer,
- Pyromaniac,
- Reckless,
- Revolutionist,
- Ritualist,
- Romantic,
- RuthlessRomantic,
- NSerialKiller, // Serial Killer
- Sidekick,
- SoulHunter,
- Spiritcaller,
- Sprayer,
- DarkHide, // Stalker
- Succubus,
- Sunnyboy,
- Terrorist,
- Tiger,
- Traitor,
- Vengeance,
- VengefulRomantic,
- Virus,
- Vulture,
- Wraith,
- Werewolf,
- WeaponMaster,
- Workaholic,
-
- //SoloKombat
- KB_Normal,
-
- //FFA
- Killer,
-
- //MoveAndStop
- Tasker,
-
- //HotPotato
- Potato,
-
- //H&S
- Hider,
- Seeker,
- Fox,
- Troll,
-
- //GM
- GM,
-
- // ????
- Convict,
-
-
- // Sub-role after 500
- NotAssigned = 500,
- Antidote,
- Asthmatic,
- Autopsy,
- Avanger,
- Bait,
- Busy,
- Trapper, // Beartrap
- Bewilder,
- Bloodlust,
- Charmed,
- Circumvent,
- Cleansed,
- Clumsy,
- Contagious,
- Damocles,
- DeadlyQuota,
- Disco,
- Diseased,
- Unreportable, // Disregarded
- DoubleShot,
- Egoist,
- EvilSpirit,
- Flashman,
- Fool,
- Giant,
- Glow,
- Gravestone,
- Guesser,
- Haste,
- Haunter, // Ghost role
- Knighted,
- LastImpostor,
- Lazy,
- Lovers,
- Loyal,
- Lucky,
- Madmate,
- Magnet,
- Mare,
- Mimic,
- Minion, // Ghost role
- Mischievous,
- Necroview,
- Ntr, // Neptune
- Nimble,
- Oblivious,
- Onbound,
- Specter, // Ghost role
- Physicist,
- Rascal,
- Reach,
- Recruit,
- Rogue,
- DualPersonality, // Schizophrenic
- Seer,
- Sleuth,
- Stained,
- Taskcounter,
- TicketsStealer, // Stealer
- Stressed,
- Swift,
- Sunglasses,
- Brakar, // Tiebreaker
- Torch,
- Truant,
- Undead,
- Unlucky,
- Warden, // Ghost role
- Watcher,
- Workhorse,
- Youtuber
-}
-
#pragma warning disable IDE0079 // Remove unnecessary suppression
[SuppressMessage("ReSharper", "UnusedMember.Global")]
#pragma warning restore IDE0079 // Remove unnecessary suppression