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)