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