diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index d4ddddffe06..64b83fb671d 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -6,8 +6,10 @@
name = "changeling"
config_tag = "changeling"
restricted_jobs = list("AI", "Cyborg")
- required_players = 15
- required_enemies = 1
+ required_players = 1
+ required_enemies = 15
+ recommended_enemies = 1
+
uplink_welcome = "Syndicate Uplink Console:"
uplink_uses = 10
diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm
index 6d0a359a5b6..f6fde205a10 100644
--- a/code/game/gamemodes/changeling/traitor_chan.dm
+++ b/code/game/gamemodes/changeling/traitor_chan.dm
@@ -4,6 +4,7 @@
traitors_possible = 3 //hard limit on traitors if scaling is turned off
required_players = 20
required_enemies = 2
+ recommended_enemies = 3
/datum/game_mode/traitor/changeling/announce()
world << "The current game mode is - Traitor+Changeling!"
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 9fb82265024..1b93538b354 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -22,6 +22,7 @@
restricted_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Security")
required_players = 15
required_enemies = 3
+ recommended_enemies = 4
uplink_welcome = "Nar-Sie Uplink Console:"
uplink_uses = 10
@@ -68,6 +69,7 @@
var/datum/mind/cultist = pick(cultists_possible)
cultists_possible -= cultist
cult += cultist
+
return (cult.len>0)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 36c27ac0dca..dc7cd397d1c 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -23,6 +23,7 @@
list/restricted_jobs = list()
required_players = 0
required_enemies = 0
+ recommended_enemies = 0
uplink_welcome
uplink_uses
uplink_items = {"Highly Visible and Dangerous Weapons;
@@ -43,12 +44,11 @@ Stealth and Camouflage Items;
/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
/obj/item/weapon/card/id/syndicate:3:Agent ID card;
/obj/item/clothing/mask/gas/voice:4:Voice Changer;
-/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
/obj/item/device/chameleon:4:Chameleon-Projector;
/obj/item/weapon/cloaking_device:4:Cloaking Device;
Whitespace:Seperator;
Devices and Tools;
-/obj/item/weapon/card/emag:4:Cryptographic Sequencer;
+/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
/obj/item/weapon/storage/syndie_kit/space:3:Space Suit;
/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
@@ -66,6 +66,11 @@ Badassery;
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);
Whitespace:Seperator;"}
+// Items removed from above:
+/*
+/obj/item/clothing/glasses/thermal:4:Thermal Imaging Glasses;
+
+*/
/datum/game_mode/proc/announce() //to be calles when round starts
world << "Notice: [src] did not define announce()"
@@ -228,23 +233,89 @@ Whitespace:Seperator;"}
/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=1)
var/list/candidates = list()
+ var/list/drafted = list()
+ var/datum/mind/applicant = null
+
for(var/mob/new_player/player in world)
if(player.client && player.ready)
if(player.preferences.be_special & role)
if(!jobban_isbanned(player, "Syndicate"))
- candidates += player.mind
+ candidates += player.mind // Get a list of all the people who want to be the antagonist for this round
- if(candidates.len < required_enemies)
+ if(restricted_jobs)
+ for(var/datum/mind/player in candidates)
+ for(var/job in restricted_jobs) // Remove people who want to be antagonist but have a job already that precludes it
+ if(player.assigned_role == job)
+ candidates -= player
+
+ if(candidates.len < recommended_enemies)
for(var/mob/new_player/player in world)
if (player.client && player.ready)
- if(!jobban_isbanned(player, "Syndicate"))
- candidates += player.mind
+ if(!(player.preferences.be_special & role)) // We don't have enough people who want to be antagonist, make a seperate list of people who don't want to be one
+ if(!jobban_isbanned(player, "Syndicate"))
+ drafted += player.mind
- if(candidates.len < required_enemies && override_jobbans) //just to be safe. Ignored jobbans are better than broken round. Shouldn't happen usually. --rastaf0
+ if(restricted_jobs)
+ for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist
+ for(var/job in restricted_jobs)
+ if(player.assigned_role == job)
+ drafted -= player
+
+ while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates
+ applicant += pick(drafted)
+ if(applicant)
+ candidates += applicant
+ drafted.Remove(applicant)
+
+ else // Not enough scrubs, ABORT ABORT ABORT
+ break
+
+ if(candidates.len < recommended_enemies && override_jobbans) //If we still don't have enough people, we're going to start drafting banned people.
for(var/mob/new_player/player in world)
if (player.client && player.ready)
- candidates += player.mind
- return candidates
+ if(jobban_isbanned(player, "Syndicate"))
+ drafted += player.mind
+
+ if(restricted_jobs)
+ for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist
+ for(var/job in restricted_jobs)
+ if(player.assigned_role == job)
+ drafted -= player
+
+ while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates
+ applicant += pick(drafted)
+ if(applicant)
+ candidates += applicant
+ drafted.Remove(applicant)
+
+ else
+ break
+
+
+
+ for(var/obj/debug/debugger/B in world)
+ B.list1 = candidates.Copy(0)
+
+ return candidates // Return percisely the number of people needed (or less, but can't help with that), consisting of all people who want to be it + minium number of draftees.
+
+/obj/debug/debugger
+ name = "Quantum Debugger"
+ desc = "A quantum debugger used by Centcomm Reality Engineers to help monitor transiant variables."
+ icon = 'stationobjs.dmi'
+ icon_state = "blackbox"
+
+ var/list/list1
+ var/list/list2
+ var/list/list3
+ var/list/list4
+ var/list/list5
+
+ var/var1
+ var/var2
+ var/var3
+ var/var4
+ var/var5
+
/datum/game_mode/proc/check_player_role_pref(var/role, var/mob/new_player/player)
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 36b7496aa40..4ae0e028a47 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -6,6 +6,7 @@
config_tag = "malfunction"
required_players = 20
required_enemies = 1
+ recommended_enemies = 1
uplink_welcome = "Crazy AI Uplink Console:"
uplink_uses = 10
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 5502ef94625..ce8321492c6 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -7,6 +7,7 @@
config_tag = "nuclear"
required_players = 15
required_enemies = 5
+ recommended_enemies = 5
uplink_welcome = "Corporate Backed Uplink Console:"
uplink_uses = 40
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 549cb1fed2e..9e473cafbe7 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -17,6 +17,8 @@
restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
required_players = 20
required_enemies = 3
+ recommended_enemies = 3
+
uplink_welcome = "Revolutionary Uplink Console:"
uplink_uses = 10
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 6749918f241..31a7e69dccd 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -8,6 +8,8 @@
restricted_jobs = list("Cyborg", "AI", "Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_players = 0
required_enemies = 1
+ recommended_enemies = 4
+
uplink_welcome = "Syndicate Uplink Console:"
uplink_uses = 10
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index fe785d2be05..3c7f6247b15 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -7,6 +7,7 @@
config_tag = "wizard"
required_players = 0
required_enemies = 1
+ recommended_enemies = 1
uplink_welcome = "Wizardly Uplink Console:"
uplink_uses = 10