diff --git a/baystation12.dme b/baystation12.dme
index 6e27d465476..d2b7b61fcf4 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -417,6 +417,7 @@
#include "code\game\gamemodes\intercept_report.dm"
#include "code\game\gamemodes\objective.dm"
#include "code\game\gamemodes\setupgame.dm"
+#include "code\game\gamemodes\autotraitor\autotraitor.dm"
#include "code\game\gamemodes\blob\blob.dm"
#include "code\game\gamemodes\blob\blob_finish.dm"
#include "code\game\gamemodes\blob\blob_report.dm"
@@ -454,6 +455,7 @@
#include "code\game\gamemodes\nuclear\nuclearbomb.dm"
#include "code\game\gamemodes\nuclear\pinpointer.dm"
#include "code\game\gamemodes\revolution\revolution.dm"
+#include "code\game\gamemodes\revolution\rp_revolution.dm"
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
#include "code\game\gamemodes\sandbox\sandbox.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index 930fe363f8c..e9c7b7f794d 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -7,12 +7,17 @@
config_tag = "Extend-A-Traitormongous"
var/list/possible_traitors
+ var/num_players = 0
/datum/game_mode/traitor/autotraitor/announce()
..()
- world << "This is a test bed for theories and methods to implement an infinite traitor round. Traitors will be added to the round automagically as needed.
Expect bugs."
+ world << "Game mode is AutoTraitor. Traitors will be added to the round automagically as needed.
Expect bugs."
/datum/game_mode/traitor/autotraitor/pre_setup()
+
+ if(config.protect_roles_from_antagonist)
+ restricted_jobs += protected_jobs
+
possible_traitors = get_players_for_role(BE_TRAITOR)
for(var/datum/mind/player in possible_traitors)
@@ -134,33 +139,6 @@
//else
//message_admins("Number of Traitors is at maximum. Not making a new Traitor.")
-
-/* Old equation. Commenting out.
- target_traitors = max(1, min(round((playercount + r) / 10, 1), traitors_possible))
- message_admins("Target Traitor Count is: [target_traitors]")
-
- if (traitorcount < target_traitors)
- message_admins("Number of Traitors is below Target. Making a new Traitor.")
- var/mob/living/newtraitor = pick(possible_traitors)
- message_admins("[newtraitor.real_name] is the new Traitor.")
-
- for(var/datum/objective/o in SelectObjectives(newtraitor.mind.assigned_role, newtraitor.mind))
- o.owner = newtraitor.mind
- newtraitor.mind.objectives += o
-
- equip_traitor(newtraitor)
- traitors += newtraitor.mind
- newtraitor << "\red ATTENTION: \black It is time to pay your debt to the Syndicate..."
- newtraitor << "You are now a traitor."
- newtraitor.mind.special_role = "traitor"
- var/obj_count = 1
- newtraitor << "\blue Your current objectives:"
- for(var/datum/objective/objective in newtraitor.mind.objectives)
- newtraitor << "Objective #[obj_count]: [objective.explanation_text]"
- obj_count++
- else
- message_admins("Number of Traitors is at Target. No new Traitor.")
-*/
traitorcheckloop()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 5240f2b3674..0f33bddb993 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -324,6 +324,8 @@ Whitespace:Seperator;
// Less if there are not enough valid players in the game entirely to make recommended_enemies.
+/datum/game_mode/proc/latespawn(var/mob)
+
/datum/game_mode/proc/check_player_role_pref(var/role, var/mob/new_player/player)
if(player.preferences.be_special & role)
return 1
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 3cf36ab5e36..ce43e6e1130 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -25,6 +25,7 @@
var/played = 0
var/be_alien = 0 //Check if that guy wants to be an alien
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI
+ var/be_syndicate = 1 //Consider client for late-game autotraitor
var/activeslot = 1 //Default active slot!
var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 97b123825b1..4759f8cdc71 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -344,6 +344,11 @@
character.loc = pick(latejoin)
character.lastarea = get_area(loc)
+ if(character.client)
+ character.client.be_syndicate = preferences.be_special
+
+ ticker.mode.latespawn(character)
+
if(character.mind.assigned_role != "Cyborg")
data_core.manifest_inject(character)
ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm
index d226be17772..b02c49ba8be 100644
--- a/code/modules/mob/new_player/preferences.dm
+++ b/code/modules/mob/new_player/preferences.dm
@@ -1128,6 +1128,7 @@ datum/preferences
C.midis = src.midis
C.be_alien = be_special & BE_ALIEN
C.be_pai = be_special & BE_PAI
+ C.be_syndicate = be_special & BE_TRAITOR
if(isnull(src.ghost_ears)) src.ghost_ears = 1 //There were problems where the default was null before someone saved their profile.
C.ghost_ears = src.ghost_ears
C.ghost_sight = src.ghost_sight