diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index b528394a39d..938a8ec180a 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -9,10 +9,10 @@
/proc/is_convertable_to_cult(datum/mind/mind)
if(!istype(mind)) return 0
- //This makes security unconvertable. *comments out*
-/* for(var/obj/item/weapon/implant/loyalty/L in mind.current)
+/* if(istype(mind.current, /mob/living/carbon/human) && (mind.assigned_role in list("Captain", "Head of Security", "Security Officer", "Detective", "Chaplain", "Warden"))) return 0
+ for(var/obj/item/weapon/implant/loyalty/L in mind.current)
if(L && L.implanted)
- return 0 */
+ return 0*/
return 1
@@ -20,10 +20,14 @@
name = "cult"
config_tag = "cult"
restricted_jobs = list("AI", "Cyborg")
+// protected_jobs = list("Security Officer", "Warden", "Detective", "Captain", "Head of Security")
required_players = 3
required_enemies = 3
recommended_enemies = 4
+ uplink_welcome = "Nar-Sie Uplink Console:"
+ uplink_uses = 10
+
var/datum/mind/sacrifice_target = null
var/finished = 0
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
@@ -40,9 +44,6 @@
var/const/max_cultists_to_start = 4
var/acolytes_survived = 0
- uplink_welcome = "Nar-Sie Uplink Console:"
- uplink_uses = 10
-
/datum/game_mode/cult/announce()
world << "The current game mode is - Cult!"
@@ -50,6 +51,15 @@
/datum/game_mode/cult/pre_setup()
+ if(prob(50) || num_players() < 10) // don't give summon nar-sie if less than 10 people, it's literally impossible in that case!
+ objectives += "survive"
+ objectives += "sacrifice"
+ else
+ objectives += "eldergod"
+ objectives += "sacrifice"
+
+ if(config.protect_roles_from_antagonist)
+ restricted_jobs += protected_jobs
var/list/cultists_possible = get_players_for_role(BE_CULTIST)
for(var/datum/mind/player in cultists_possible)
@@ -64,26 +74,18 @@
cultists_possible -= cultist
cult += cultist
- // don't give summon nar-sie if less than 10 people,
- // it's literally impossible in that case!
- if(prob(50) || num_players() < 10)
- objectives += "survive"
- objectives += "sacrifice"
- else
- objectives += "eldergod"
- objectives += "sacrifice"
-
return (cult.len>0)
/datum/game_mode/cult/post_setup()
modePlayer += cult
if("sacrifice" in objectives)
- var/list/possible_targets = list()
+ var/list/possible_targets = get_unconvertables()
- for(var/mob/living/carbon/human/player in world)
- if(player.mind && !(player.mind in cult))
- possible_targets += player.mind
+ if(!possible_targets.len)
+ for(var/mob/living/carbon/human/player in world)
+ if(player.mind && !(player.mind in cult))
+ possible_targets += player.mind
if(possible_targets.len > 0)
sacrifice_target = pick(possible_targets)
@@ -254,6 +256,14 @@
del(I)
+/datum/game_mode/cult/proc/get_unconvertables()
+ var/list/ucs = list()
+ for(var/mob/living/carbon/human/player in world)
+ if(!is_convertable_to_cult(player.mind))
+ ucs += player.mind
+ return ucs
+
+
/datum/game_mode/cult/proc/check_cult_victory()
var/cult_fail = 0
if(objectives.Find("survive"))
@@ -301,23 +311,30 @@
if("survive")
if(!check_survive())
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \green Success!"
+ //feedback_add_details("cult_objective","cult_survive|SUCCESS|[acolytes_needed]")
else
explanation = "Make sure at least [acolytes_needed] acolytes escape on the shuttle. \red Failed."
+ //feedback_add_details("cult_objective","cult_survive|FAIL|[acolytes_needed]")
if("sacrifice")
if(!sacrifice_target)
explanation = "Free objective"
else
if(sacrificed.Find(sacrifice_target))
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \green Success!"
+ //feedback_add_details("cult_objective","cult_sacrifice|SUCCESS")
else if(sacrifice_target && sacrifice_target.current)
explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \red Failed."
+ //feedback_add_details("cult_objective","cult_sacrifice|FAIL")
else
explanation = "Sacrifice Unknown, the Unknown whos body was likely gibbed. \red Failed."
+ //feedback_add_details("cult_objective","cult_sacrifice|FAIL|GIBBED")
if("eldergod")
if(!eldergod)
explanation = "Summon Nar-Sie. \green Success!"
+ //feedback_add_details("cult_objective","cult_narsie|SUCCESS")
else
explanation = "Summon Nar-Sie. \red Failed."
+ //feedback_add_details("cult_objective","cult_narsie|FAIL")
world << "Objective #[obj_count]: [explanation]"
..()
diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm
index 76113946fba..94dfc03b75c 100644
--- a/code/game/gamemodes/meteor/meteor.dm
+++ b/code/game/gamemodes/meteor/meteor.dm
@@ -52,8 +52,8 @@
else
survivors[player.real_name] = "alive"
- feedback_set_details("round_end_result","end - evacuation")
- feedback_set("round_end_result",survivors.len)
+ //feedback_set_details("round_end_result","end - evacuation")
+ //feedback_set("round_end_result",survivors.len)
if (survivors.len)
world << "\blue The following survived the meteor attack!"
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 2f86ac6568d..fd090b36c09 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -132,9 +132,9 @@
if(!leader_selected)
prepare_syndicate_leader(synd_mind, nuke_code)
leader_selected = 1
- //else
- //synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]"
- //agent_number++
+/* else
+ synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]"
+ agent_number++*/
equip_syndicate(synd_mind.current,freq)
update_synd_icons_added(synd_mind)
@@ -166,10 +166,10 @@
/datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code)
- // var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
- // spawn(1) // don't change names anymore!
- // NukeNameAssign(nukelastname(synd_mind.current),syndicates) //allows time for the rest of the syndies to be chosen
- //synd_mind.current.real_name = "[syndicate_name()] [leader_title]"
+/* var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
+ spawn(1)
+ NukeNameAssign(nukelastname(synd_mind.current),syndicates) //allows time for the rest of the syndies to be chosen
+ synd_mind.current.real_name = "[syndicate_name()] [leader_title]"*/
if (nuke_code)
synd_mind.store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
synd_mind.current << "The nuclear authorization code is: [nuke_code]"
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 04d534826dd..bf996b30ee1 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -40,6 +40,10 @@
//Gets the round setup, cancelling if there's not enough players at the start//
///////////////////////////////////////////////////////////////////////////////
/datum/game_mode/revolution/pre_setup()
+
+ if(config.protect_roles_from_antagonist)
+ restricted_jobs += protected_jobs
+
var/list/datum/mind/possible_headrevs = get_players_for_role(BE_REV)
var/head_check = 0
diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm
index e6f51b9dacb..f3c83149600 100644
--- a/code/game/gamemodes/sandbox/sandbox.dm
+++ b/code/game/gamemodes/sandbox/sandbox.dm
@@ -15,9 +15,6 @@
for(var/mob/M in world)
if(M.client)
M.CanBuild()
-
-// setup_sectors()
-// spawn_exporation_packs()
return 1
/datum/game_mode/sandbox/check_finished()
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index f2a79377d8d..87c782a3dec 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -6,6 +6,7 @@
name = "traitor"
config_tag = "traitor"
restricted_jobs = list("Cyborg", "AI")//Approved by headmins for a week test, if you see this it would be nice if you didn't spread it everywhere
+// protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
required_players = 0
required_enemies = 1
recommended_enemies = 4
@@ -29,6 +30,10 @@
/datum/game_mode/traitor/pre_setup()
+
+ if(config.protect_roles_from_antagonist)
+ restricted_jobs += protected_jobs
+
var/list/possible_traitors = get_players_for_role(BE_TRAITOR)
// stop setup if no possible traitors
@@ -118,6 +123,7 @@
/datum/game_mode/traitor/declare_completion()
+ ..()
return//Traitors will be checked as part of check_extra_completion. Leaving this here as a reminder.
@@ -166,15 +172,19 @@
for(var/datum/objective/objective in traitor.objectives)
if(objective.check_completion())
world << "Objective #[count]: [objective.explanation_text] \green Success"
+ //feedback_add_details("traitor_objective","[objective.type]|SUCCESS")
else
world << "Objective #[count]: [objective.explanation_text] \red Failed"
+ //feedback_add_details("traitor_objective","[objective.type]|FAIL")
traitorwin = 0
count++
if(traitorwin)
world << "The [special_role_text] was successful!"
+ //feedback_add_details("traitor_success","SUCCESS")
else
world << "The [special_role_text] has failed!"
+ //feedback_add_details("traitor_success","FAIL")
return 1
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index 9ae136270a6..2fc32363892 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -183,15 +183,19 @@
for(var/datum/objective/objective in wizard.objectives)
if(objective.check_completion())
world << "Objective #[count]: [objective.explanation_text] \green Success"
+ //feedback_add_details("wizard_objective","[objective.type]|SUCCESS")
else
world << "Objective #[count]: [objective.explanation_text] \red Failed"
+ //feedback_add_details("wizard_objective","[objective.type]|FAIL")
wizardwin = 0
count++
if(wizard.current && wizard.current.stat!=2 && wizardwin)
world << "The wizard was successful!"
+ //feedback_add_details("wizard_success","SUCCESS")
else
world << "The wizard has failed!"
+ //feedback_add_details("wizard_success","FAIL")
return 1
//OTHER PROCS
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 0f079a9ffed..f926b53445e 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -4,7 +4,6 @@ var/global/datum/controller/occupations/job_master
var
//List of all jobs
list/occupations = list()
- list/occupations2 = list()
//Players who need jobs
list/unassigned = list()
//Debug info
@@ -28,6 +27,8 @@ var/global/datum/controller/occupations/job_master
if(!job) continue
if(job.faction != faction) continue
occupations += job
+
+
return 1
@@ -151,6 +152,8 @@ var/global/datum/controller/occupations/job_master
Debug("Running DO")
SetupOccupations()
+ occupations = shuffle(occupations) //Shuffles job-list at round start so that people don't have their job picks randomized
+
//Get the players who are ready
for(var/mob/new_player/player in world)
if((player) && (player.client) && (player.ready) && (player.mind) && (!player.mind.assigned_role))
@@ -160,7 +163,8 @@ var/global/datum/controller/occupations/job_master
if(unassigned.len == 0) return 0
//Shuffle players and jobs
unassigned = shuffle(unassigned)
- occupations2 = shuffle(occupations)
+
+ //HandleFeedbackGathering()
//Assistants are checked first
Debug("DO, Running Assistant Check 1")
@@ -186,11 +190,14 @@ var/global/datum/controller/occupations/job_master
//Other jobs are now checked
Debug("DO, Running Standard Check")
for(var/level = 1 to 3)
- for(var/datum/job/job in occupations2)
+ for(var/datum/job/job in occupations)
Debug("Checking job: [job]")
- if(!job) continue
- if(!unassigned.len) break
- if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1) continue
+ if(!job)
+ continue
+ if(!unassigned.len)
+ break
+ if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1)
+ continue
var/list/candidates = FindOccupationCandidates(job, level)
while(candidates.len && ((job.current_positions < job.spawn_positions) || job.spawn_positions == -1))
var/mob/new_player/candidate = pick(candidates)
@@ -294,7 +301,7 @@ var/global/datum/controller/occupations/job_master
if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store))
H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears)
H.equip_if_possible(new /obj/item/device/pda(H), H.slot_belt)
- if(locate(/obj/item/device/pda,H))//I bet this could just use locate
+ if(locate(/obj/item/device/pda,H))//I bet this could just use locate. It can --SkyMarshal
var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H)
pda.owner = H.real_name
pda.ownjob = H.wear_id.assignment
@@ -344,4 +351,32 @@ var/global/datum/controller/occupations/job_master
if(name == "AI" || name == "Cyborg")//I dont like this here but it will do for now
J.total_positions = 0
- return 1
\ No newline at end of file
+ return 1
+
+/*
+ proc/HandleFeedbackGathering()
+ for(var/datum/job/job in occupations)
+ var/tmp_str = "|[job.title]|"
+
+ var/level1 = 0 //high
+ var/level2 = 0 //medium
+ var/level3 = 0 //low
+ var/level4 = 0 //never
+ var/level5 = 0 //banned
+ for(var/mob/new_player/player in world)
+ if(!((player) && (player.client) && (player.ready) && (player.mind) && (!player.mind.assigned_role)))
+ continue //This player is not ready
+ if(jobban_isbanned(player, job.title))
+ level5++
+ continue
+ if(player.preferences.GetJobDepartment(job, 1) & job.flag)
+ level1++
+ else if(player.preferences.GetJobDepartment(job, 2) & job.flag)
+ level2++
+ else if(player.preferences.GetJobDepartment(job, 3) & job.flag)
+ level3++
+ else level4++ //not selected
+
+ tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|-"
+ feedback_add_details("job_preferences",tmp_str)
+*/
\ No newline at end of file
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 16ebc0e5699..c6d1d0e5472 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -319,8 +319,6 @@
for (var/O in listening)
world << O
var/list/V = view(message_range, T)
- var/list/W = V
-
//find mobs in lockers, cryo, intellicards, brains, MMIs, and so on.
for (var/mob/M in world)
if (!M.client)
@@ -378,6 +376,13 @@
if(O && !istype(O.loc, /obj/item/weapon/storage))
O.hear_talk(src, message)
+
+/* Commented out as replaced by code above from BS12
+ for (var/obj/O in ((V | contents)-used_radios)) //radio in pocket could work, radio in backpack wouldn't --rastaf0
+ spawn (0)
+ if (O)
+ O.hear_talk(src, message)
+*/
if(isbrain(src))//For brains to properly talk if they are in an MMI..or in a brain. Could be extended to other mobs I guess.
for(var/obj/O in loc)//Kinda ugly but whatever.
if(O)