From b1ec51b680c85738a1ca754e9e612009b5232aeb Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 03:46:04 -0400 Subject: [PATCH 001/144] adds basic procs for crew objectives --- code/citadel/cit_crewobjectives.dm | 44 ++++++++++++++++++++++++++++++ code/citadel/cit_miscreants.dm | 0 2 files changed, 44 insertions(+) create mode 100644 code/citadel/cit_crewobjectives.dm create mode 100644 code/citadel/cit_miscreants.dm diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm new file mode 100644 index 0000000000..70994f1e64 --- /dev/null +++ b/code/citadel/cit_crewobjectives.dm @@ -0,0 +1,44 @@ +/datum/controller/subsystem/ticker/proc/generate_crew_objectives() + for(var/datum/mind/crewMind in get_crewmember_minds()) + if(prob(10) && GLOB.master_mode != "extended")//extended is supposed to have less chaos + generate_miscreant_objectives(crewMind) + else + generate_individual_objectives(crewMind) + return + +/datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind) + if(!crewMind) + return + if(!crewMind.current || !crewMind.objectives || crewMind.special_role) + return + if(!crewMind.assigned_role) + return + var/rolePathString = "/datum/objective/crew/[rolePathString]" + var/rolePath = text2path(rolePathString) + if (isnull(rolePath)) + return + var/list/objectiveTypes = typesof(rolePath) - rolePath + if(!objectiveTypes.len) + return + + var/selectedType = pick(objectiveTypes) + var/datum/objective/crew/newObjective = new selectedType + newObjective.owner = crewMind + crewMind.objectives += newObjective + crewMind.announce_objectives() + +/datum/objective/crew/ + explanation_text = "Yell on the coderbus discussion channel on Citadel's discord if this ever shows up. Something just broke here, dude" + +/datum/objective/crew/proc/setup() + +/datum/objective/crew/captain/ + +/datum/objective/crew/captain/hat + explanation_text = "Don't lose your hat." + +/datum/objective/crew/captain/hat/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) + return 1 + else + return 0 diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm new file mode 100644 index 0000000000..e69de29bb2 From 790b52cf05adf7db4c58f11c5c965d86b57abd9c Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 03:50:13 -0400 Subject: [PATCH 002/144] calls crew objective generation roundstart --- code/controllers/subsystem/ticker.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index d196c9cb10..aed5a01d1f 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -208,6 +208,7 @@ SUBSYSTEM_DEF(ticker) GLOB.start_landmarks_list = shuffle(GLOB.start_landmarks_list) //Shuffle the order of spawn points so they dont always predictably spawn bottom-up and right-to-left create_characters() //Create player characters collect_minds() + generate_crew_objectives() equip_characters() SSoverlays.Flush() //Flush the majority of the shit From 71805de4aa52ea2de185225a81230c0f254a9473 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 03:53:01 -0400 Subject: [PATCH 003/144] extra failsafe --- code/citadel/cit_crewobjectives.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 70994f1e64..29d7ae950f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -20,9 +20,10 @@ var/list/objectiveTypes = typesof(rolePath) - rolePath if(!objectiveTypes.len) return - var/selectedType = pick(objectiveTypes) var/datum/objective/crew/newObjective = new selectedType + if(!newObjective) + return newObjective.owner = crewMind crewMind.objectives += newObjective crewMind.announce_objectives() From 6b8e46cdaee0440a6762365cbdd3d0be69643a64 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 04:10:40 -0400 Subject: [PATCH 004/144] Aaaaaand the basic miscreant stuff --- code/citadel/cit_crewobjectives.dm | 2 +- code/citadel/cit_miscreants.dm | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 29d7ae950f..b9085260bf 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -29,7 +29,7 @@ crewMind.announce_objectives() /datum/objective/crew/ - explanation_text = "Yell on the coderbus discussion channel on Citadel's discord if this ever shows up. Something just broke here, dude" + explanation_text = "Yell on the coderbus discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" /datum/objective/crew/proc/setup() diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index e69de29bb2..ea23a74722 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -0,0 +1,28 @@ +/datum/controller/subsystem/ticker/proc/generate_miscreant_objectives(var/datum/mind/crewMind) + if(GLOB.master_mode == "extended") + return //Thinking about it, extended's chaos whether or not mini-antags are present. But eh, whatever. Here's a sanity check. + if(!crewMind) + return + if(!crewMind.current || !crewMind.objectives || crewMind.special_role) + return + if(!crewMind.assigned_role) + return + var/list/objectiveTypes = typesof(/datum/objective/miscreant) - /datum/objective/miscreant + if(!objectiveTypes.len) + return + var/selectedType = pick(objectiveTypes) + var/datum/objective/crew/newObjective = new selectedType + if(!newObjective) + return + newObjective.owner = crewMind + crewMind.objectives += newObjective + crewMind.special_role = "miscreant" + to_chat(crewMind, "You are a Miscreant.") + to_chat(crewMind, "Pursuing your objective is purely optional, but it is not tracked. You may not commit any traitorous acts not directly related to them.") + crewMind.announce_objectives() + +/datum/objective/miscreant + explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the coderbus discussion channel of citadels discord." + +/datum/objective/miscreant/blockade + explanation_text = "Try to completely block off access to an area, claiming that it's too dangerous." \ No newline at end of file From d4f280495ed5ab18e2f7989a3834fdbd101e9ff7 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 04:11:50 -0400 Subject: [PATCH 005/144] almost forgot the .dme --- tgstation.dme | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tgstation.dme b/tgstation.dme index ee43dcafd7..19ea044625 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -164,10 +164,12 @@ #include "code\citadel\_cit_helpers.dm" #include "code\citadel\cit_areas.dm" #include "code\citadel\cit_arousal.dm" +#include "code\citadel\cit_crewobjectives.dm" #include "code\citadel\cit_emotes.dm" #include "code\citadel\cit_genemods.dm" #include "code\citadel\cit_guns.dm" #include "code\citadel\cit_kegs.dm" +#include "code\citadel\cit_miscreants.dm" #include "code\citadel\cit_reagents.dm" #include "code\citadel\cit_spawners.dm" #include "code\citadel\cit_uniforms.dm" From 42415aa81fd432d7b72dc9b2f89bae7c128b1317 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 04:18:41 -0400 Subject: [PATCH 006/144] aaaaaaaaaand extra miscreant objectives --- code/citadel/cit_miscreants.dm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index ea23a74722..241e65c09e 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -25,4 +25,19 @@ explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the coderbus discussion channel of citadels discord." /datum/objective/miscreant/blockade - explanation_text = "Try to completely block off access to an area, claiming that it's too dangerous." \ No newline at end of file + explanation_text = "Try to completely block off access to an area, under the pretense that it's too dangerous." + +/datum/objective/miscreant/incompetent + explanation_text = "Be as useless and incompetent as possible without getting killed." + +/datum/objective/miscreant/strike + explanation_text = "Try to convince your department to go on strike, and refuse to do any work." + +/datum/objective/miscreant/litterbug + explanation_text = "Make a huge mess wherever you go." + +/datum/objective/miscreant/stalk + explanation_text = "Single out a crew member and stalk them everywhere." + +/datum/objective/miscreant/creepy + explanation_text = "Sneak around looking as suspicious as possible without actually doing anything illegal." From 15f70e194312ec775c57962771c36bf5ef8ae003 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 04:34:46 -0400 Subject: [PATCH 007/144] get_crewmember_minds isn't global? --- code/citadel/cit_crewobjectives.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index b9085260bf..fdfe18600e 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,5 +1,11 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() - for(var/datum/mind/crewMind in get_crewmember_minds()) + var/crewMembers = list() + for(var/V in GLOB.datacore.locked) + var/datum/data/record/R = V + var/mob/M = R.fields["reference"] + if(M && M.mind) + crewMembers += M.mind + for(var/datum/mind/crewMind in crewMembers) if(prob(10) && GLOB.master_mode != "extended")//extended is supposed to have less chaos generate_miscreant_objectives(crewMind) else From edc9c144250458e6368824bda306b9545f77ea47 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 04:37:16 -0400 Subject: [PATCH 008/144] dont code at 4 am --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index fdfe18600e..172c506d7c 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -19,7 +19,7 @@ return if(!crewMind.assigned_role) return - var/rolePathString = "/datum/objective/crew/[rolePathString]" + var/rolePathString = "/datum/objective/crew/[crewMind.assigned_role]" var/rolePath = text2path(rolePathString) if (isnull(rolePath)) return From 6ebdf0f6b9da2829f95adaaa6cef7f188037b2d2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 04:42:47 -0400 Subject: [PATCH 009/144] dont code at 4 am 2: electric boogaloo --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 172c506d7c..81edaa6d8f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,6 +1,6 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() var/crewMembers = list() - for(var/V in GLOB.datacore.locked) + for(var/V in GLOB.data_core.locked) var/datum/data/record/R = V var/mob/M = R.fields["reference"] if(M && M.mind) From f3a5eb58ea2a8462c434a52ddbd94aa58822a86d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 05:03:03 -0400 Subject: [PATCH 010/144] hm --- code/citadel/cit_crewobjectives.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 81edaa6d8f..b594c01e2c 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,11 +1,5 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() - var/crewMembers = list() - for(var/V in GLOB.data_core.locked) - var/datum/data/record/R = V - var/mob/M = R.fields["reference"] - if(M && M.mind) - crewMembers += M.mind - for(var/datum/mind/crewMind in crewMembers) + for(var/datum/mind/crewMind in SSticker.minds) if(prob(10) && GLOB.master_mode != "extended")//extended is supposed to have less chaos generate_miscreant_objectives(crewMind) else From 6af0856de10256c047c8910426a0bae2b35a8f44 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 05:22:12 -0400 Subject: [PATCH 011/144] too tired to find the stringtolowercase function --- code/citadel/cit_crewobjectives.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index b594c01e2c..58a494fe98 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -33,12 +33,12 @@ /datum/objective/crew/proc/setup() -/datum/objective/crew/captain/ +/datum/objective/crew/Captain/ -/datum/objective/crew/captain/hat +/datum/objective/crew/Captain/hat explanation_text = "Don't lose your hat." -/datum/objective/crew/captain/hat/check_completion() +/datum/objective/crew/Captain/hat/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) return 1 else From b9712da5c864bcfefd46414ccc8a186b649cdace Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 05:49:31 -0400 Subject: [PATCH 012/144] properly fixes crew objective paths --- code/citadel/cit_crewobjectives.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 58a494fe98..b3b8c4be26 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -13,7 +13,7 @@ return if(!crewMind.assigned_role) return - var/rolePathString = "/datum/objective/crew/[crewMind.assigned_role]" + var/rolePathString = "/datum/objective/crew/[ckey(crewMind.assigned_role)]" var/rolePath = text2path(rolePathString) if (isnull(rolePath)) return @@ -33,12 +33,12 @@ /datum/objective/crew/proc/setup() -/datum/objective/crew/Captain/ +/datum/objective/crew/captain/ -/datum/objective/crew/Captain/hat +/datum/objective/crew/captain/hat explanation_text = "Don't lose your hat." -/datum/objective/crew/Captain/hat/check_completion() +/datum/objective/crew/captain/hat/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) return 1 else From fc71faa59323379ddd26e3bea882884dbffba916 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 06:23:48 -0400 Subject: [PATCH 013/144] latejoin objectives and miscreants --- code/modules/mob/dead/new_player/new_player.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index b11c6bc336..1dd48f69af 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -367,6 +367,10 @@ if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() + if(prob(10) && GLOB.master_mode != "extended") + humanc.generate_miscreant_objectives() + else + humanc.generate_individual_objectives() GLOB.joined_player_list += character.ckey GLOB.latejoiners += character From e791a5a6379b4c15daa76da0bedeb854ea4380b8 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 06:31:55 -0400 Subject: [PATCH 014/144] hmm --- code/modules/mob/dead/new_player/new_player.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 1dd48f69af..7cdcae1281 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -355,6 +355,10 @@ var/mob/living/carbon/human/humanc if(ishuman(character)) + if(prob(10) && GLOB.master_mode != "extended") + humanc.generate_miscreant_objectives() + else + humanc.generate_individual_objectives() humanc = character //Let's retypecast the var to be human, if(humanc) //These procs all expect humans @@ -367,10 +371,6 @@ if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() - if(prob(10) && GLOB.master_mode != "extended") - humanc.generate_miscreant_objectives() - else - humanc.generate_individual_objectives() GLOB.joined_player_list += character.ckey GLOB.latejoiners += character From a35126a5b26fcbf176dc301c4cf901b12fd4e07f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 06:37:46 -0400 Subject: [PATCH 015/144] unnngh --- code/modules/mob/dead/new_player/new_player.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 7cdcae1281..428773bd9b 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -355,10 +355,6 @@ var/mob/living/carbon/human/humanc if(ishuman(character)) - if(prob(10) && GLOB.master_mode != "extended") - humanc.generate_miscreant_objectives() - else - humanc.generate_individual_objectives() humanc = character //Let's retypecast the var to be human, if(humanc) //These procs all expect humans @@ -371,6 +367,10 @@ if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() + if(prob(10) && GLOB.master_mode != "extended") + SSticker.generate_miscreant_objectives(humanc.mind) + else + SSticker.generate_individual_objectives(humanc.mind) GLOB.joined_player_list += character.ckey GLOB.latejoiners += character From c56f82f6dde184ee09090b03b843fbb1a274aeb8 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 07:15:16 -0400 Subject: [PATCH 016/144] displays completed crew objectives and miscreants at round end --- code/controllers/subsystem/ticker.dm | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index aed5a01d1f..e79c477486 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -468,6 +468,20 @@ SUBSYSTEM_DEF(ticker) var/num_survivors = 0 var/num_escapees = 0 var/num_shuttle_escapees = 0 + var/list/successfulCrew = list() + var/list/miscreants = list() + + for(var/datum/mind/crewMind in minds) + if(!crewMind.current || !crewMind.objectives.len) + continue + if(var/datum/objective/miscreant/MO in crewMind.objectives) + miscreants += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [MO.explanation_text]" + if(var/datum/objective/crew/CO in crewMind.objectives) + if(CO.check_completion()) + to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!" + successfulCrew += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [CO.explanation_text]" + else + to_chat(crewMind.current, "
Objective: [CO.explanation_text] Failed." to_chat(world, "


The round has ended.") @@ -586,6 +600,22 @@ SUBSYSTEM_DEF(ticker) CHECK_TICK + if (successfulCrew.len) + tochat(world, "The following crew members completed their Crew Objectives:") + for(var/i in successfulCrew) + tochat(world, "[i]") + else + tochat(world, "Nobody completed their Crew Objectives!") + + CHECK_TICK + + if (miscreants.len) + tochat(world, " The following crew members were miscreants:") + for(var/i in miscreants) + tochat(world, "[i]") + + CHECK_TICK + mode.declare_station_goal_completion() CHECK_TICK From 9526f703a44055849c349cc66d9d91d40e22aeaf Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 07:20:45 -0400 Subject: [PATCH 017/144] coding, period, is a horrendous idea --- code/controllers/subsystem/ticker.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index e79c477486..502c24492f 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -478,10 +478,10 @@ SUBSYSTEM_DEF(ticker) miscreants += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [MO.explanation_text]" if(var/datum/objective/crew/CO in crewMind.objectives) if(CO.check_completion()) - to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!" + to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!") successfulCrew += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [CO.explanation_text]" else - to_chat(crewMind.current, "
Objective: [CO.explanation_text] Failed." + to_chat(crewMind.current, "
Objective: [CO.explanation_text] Failed.") to_chat(world, "


The round has ended.") From 764df7609b8566fe545acf6e54068e7fb851b6db Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 07:25:04 -0400 Subject: [PATCH 018/144] byond is trash and so is my coding --- code/controllers/subsystem/ticker.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 502c24492f..b386f3943d 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -474,9 +474,9 @@ SUBSYSTEM_DEF(ticker) for(var/datum/mind/crewMind in minds) if(!crewMind.current || !crewMind.objectives.len) continue - if(var/datum/objective/miscreant/MO in crewMind.objectives) + for(var/datum/objective/miscreant/MO in crewMind.objectives) miscreants += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [MO.explanation_text]" - if(var/datum/objective/crew/CO in crewMind.objectives) + for(var/datum/objective/crew/CO in crewMind.objectives) if(CO.check_completion()) to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!") successfulCrew += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [CO.explanation_text]" From 26a63c2f76f139a7e65675487a04e7e45bb451ee Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 07:29:51 -0400 Subject: [PATCH 019/144] should compile just fine now --- code/controllers/subsystem/ticker.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index b386f3943d..0c59407ca8 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -601,18 +601,18 @@ SUBSYSTEM_DEF(ticker) CHECK_TICK if (successfulCrew.len) - tochat(world, "The following crew members completed their Crew Objectives:") + to_chat(world, "The following crew members completed their Crew Objectives:") for(var/i in successfulCrew) - tochat(world, "[i]") + to_chat(world, "[i]") else - tochat(world, "Nobody completed their Crew Objectives!") + to_chat(world, "Nobody completed their Crew Objectives!") CHECK_TICK if (miscreants.len) - tochat(world, " The following crew members were miscreants:") + to_chat(world, " The following crew members were miscreants:") for(var/i in miscreants) - tochat(world, "[i]") + to_chat(world, "[i]") CHECK_TICK From 964a591c98729e9450596bedec165f2e012ceb2b Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 07:42:04 -0400 Subject: [PATCH 020/144] adds more miscreant objectives --- code/citadel/cit_miscreants.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index 241e65c09e..e383dfbb51 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -41,3 +41,12 @@ /datum/objective/miscreant/creepy explanation_text = "Sneak around looking as suspicious as possible without actually doing anything illegal." + +/datum/objective/miscreant/construction + explanation_text = "Perform obnoxious construction and renovation projects. Insist that you're just doing your job." + +/datum/objective/miscreant/access + explanation_text = "Make as much of the station as possible accessible to the public." + +/datum/objective/miscreant/whiny + explanation_text = "Complain incessantly about every minor issue you find." From 2e0c36024e5821ff2094ee7e34e4b8b31a8828d2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 15:41:22 -0400 Subject: [PATCH 021/144] Small cleanup --- code/controllers/subsystem/ticker.dm | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0c59407ca8..5ad749836b 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -471,18 +471,6 @@ SUBSYSTEM_DEF(ticker) var/list/successfulCrew = list() var/list/miscreants = list() - for(var/datum/mind/crewMind in minds) - if(!crewMind.current || !crewMind.objectives.len) - continue - for(var/datum/objective/miscreant/MO in crewMind.objectives) - miscreants += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [MO.explanation_text]" - for(var/datum/objective/crew/CO in crewMind.objectives) - if(CO.check_completion()) - to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!") - successfulCrew += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [CO.explanation_text]" - else - to_chat(crewMind.current, "
Objective: [CO.explanation_text] Failed.") - to_chat(world, "


The round has ended.") //Player status report @@ -600,12 +588,26 @@ SUBSYSTEM_DEF(ticker) CHECK_TICK + for(var/datum/mind/crewMind in minds) + if(!crewMind.current || !crewMind.objectives.len) + continue + for(var/datum/objective/miscreant/MO in crewMind.objectives) + miscreants += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [MO.explanation_text]" + for(var/datum/objective/crew/CO in crewMind.objectives) + if(CO.check_completion()) + to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!") + successfulCrew += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [CO.explanation_text]" + else + to_chat(crewMind.current, "
Objective: [CO.explanation_text] Failed.") + if (successfulCrew.len) to_chat(world, "The following crew members completed their Crew Objectives:") for(var/i in successfulCrew) to_chat(world, "[i]") + to_chat(world, "
") else to_chat(world, "Nobody completed their Crew Objectives!") + to_chat(world, "
") CHECK_TICK From 2ade816524569100d380c122e29cd83ba6cf3d01 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 17:47:01 -0400 Subject: [PATCH 022/144] More objectives --- code/citadel/cit_crewobjectives.dm | 65 ++++++++++++++++++++++++++++ code/citadel/cit_miscreants.dm | 3 ++ code/controllers/subsystem/ticker.dm | 1 + 3 files changed, 69 insertions(+) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index b3b8c4be26..6935106ed6 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -33,6 +33,8 @@ /datum/objective/crew/proc/setup() +/* COMMAND OBJECTIVES */ + /datum/objective/crew/captain/ /datum/objective/crew/captain/hat @@ -43,3 +45,66 @@ return 1 else return 0 + +/datum/objective/crew/captain/datfukkendisk + explanation_text = "Defend the nuclear authentication disk at all costs, and personally deliver it to Centcom." + +/datum/objective/crew/captain/datfukkendisk/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 + +/* SECURITY OBJECTIVES */ + +/datum/objective/crew/headofsecurity/ + +/datum/objective/crew/headofsecurity/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/headofsecurity/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(owner)) + if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/securityofficer/ + +/datum/objective/crew/securityofficer/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/securityofficer/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(owner)) + if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/detective/ + +/datum/objective/crew/detective/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/detective/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(owner)) + if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/lawyer/ + +/datum/objective/crew/lawyer/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/lawyer/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(owner)) + if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index e383dfbb51..dcfe4b4b26 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -50,3 +50,6 @@ /datum/objective/miscreant/whiny explanation_text = "Complain incessantly about every minor issue you find." + +/datum/objective/miscreant/immersions + explanation_text = "Act as out of character as you possibly can." diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 5ad749836b..d288a7fe58 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -615,6 +615,7 @@ SUBSYSTEM_DEF(ticker) to_chat(world, " The following crew members were miscreants:") for(var/i in miscreants) to_chat(world, "[i]") + to_chat(world, "
") CHECK_TICK From d6ec2184dfb28ced4485f8fbce47ba806e42cbf2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 18:20:17 -0400 Subject: [PATCH 023/144] welp. my code is shit --- code/citadel/cit_crewobjectives.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 6935106ed6..7ca624f683 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -66,7 +66,7 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(owner)) - if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -79,7 +79,7 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(owner)) - if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -92,7 +92,7 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(owner)) - if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -105,6 +105,6 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(owner)) - if(!M.special_role && !M.assigned_role = "Security Officer" && !M.assigned_role = "Detective" && !M.assigned_role = "Head of Security" && !M.assigned_role = "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 From 35bdf826cd8b999902f7a04da30a2adecaf825e3 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 18:36:52 -0400 Subject: [PATCH 024/144] byond was a mistake --- code/citadel/cit_miscreants.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index dcfe4b4b26..621b7701dc 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -11,7 +11,7 @@ if(!objectiveTypes.len) return var/selectedType = pick(objectiveTypes) - var/datum/objective/crew/newObjective = new selectedType + var/datum/objective/miscreant/newObjective = new selectedType if(!newObjective) return newObjective.owner = crewMind From 3d4d2d702426e36b973aac417deb3cd27598a3f3 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 22:04:52 -0400 Subject: [PATCH 025/144] Adjustments, adds a basic objective for roboticists --- code/citadel/cit_crewobjectives.dm | 56 ++++++++++++++++++++++++++-- code/citadel/cit_miscreants.dm | 2 +- code/controllers/subsystem/ticker.dm | 4 +- 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 7ca624f683..76ab337891 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -65,7 +65,7 @@ /datum/objective/crew/headofsecurity/justicecrew/check_completion() if(owner.current) for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(owner)) + if(M.current && isliving(M.current)) if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -78,7 +78,7 @@ /datum/objective/crew/securityofficer/justicecrew/check_completion() if(owner.current) for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(owner)) + if(M.current && isliving(M.current)) if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -91,7 +91,7 @@ /datum/objective/crew/detective/justicecrew/check_completion() if(owner.current) for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(owner)) + if(M.current && isliving(M.current)) if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -104,7 +104,55 @@ /datum/objective/crew/lawyer/justicecrew/check_completion() if(owner.current) for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(owner)) + if(M.current && isliving(M.current)) if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) return 0 return 1 + +/* SCIENCE OBJECTIVES */ + +/datum/objective/crew/researchdirector/ + +/datum/objective/crew/researchdirector/cyborgs + explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." + +/datum/objective/crew/researchdirector/cyborgs/New() + target_amount = rand(3,20) + update_explanation_text() + +/datum/objective/crew/researchdirector/cyborgs/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." + +/datum/objective/crew/researchdirector/cyborgs/check_completion() + var/borgcount = target_amount + for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) + if(!R.stat == DEAD) + borgcount-- + if(borgcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/roboticist/ + +/datum/objective/crew/roboticist/cyborgs + explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." + +/datum/objective/crew/roboticist/cyborgs/New() + target_amount = rand(3,20) + update_explanation_text() + +/datum/objective/crew/roboticist/cyborgs/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." + +/datum/objective/crew/roboticist/cyborgs/check_completion() + var/borgcount = target_amount + for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) + if(!R.stat == DEAD) + borgcount-- + if(borgcount <= 0) + return 1 + else + return 0 diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index 621b7701dc..d362f74251 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -18,7 +18,7 @@ crewMind.objectives += newObjective crewMind.special_role = "miscreant" to_chat(crewMind, "You are a Miscreant.") - to_chat(crewMind, "Pursuing your objective is purely optional, but it is not tracked. You may not commit any traitorous acts not directly related to them.") + to_chat(crewMind, "Pursuing your objective is entirely optional, but it isn't tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") crewMind.announce_objectives() /datum/objective/miscreant diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index d288a7fe58..dfe55379f1 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -595,10 +595,10 @@ SUBSYSTEM_DEF(ticker) miscreants += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [MO.explanation_text]" for(var/datum/objective/crew/CO in crewMind.objectives) if(CO.check_completion()) - to_chat(crewMind.current, "
Objective: [CO.explanation_text] Success!") + to_chat(crewMind.current, "
Your objective: [CO.explanation_text] Success!") successfulCrew += "[crewMind.current.real_name] (Played by: [crewMind.key]). Objective: [CO.explanation_text]" else - to_chat(crewMind.current, "
Objective: [CO.explanation_text] Failed.") + to_chat(crewMind.current, "
Your objective: [CO.explanation_text] Failed.") if (successfulCrew.len) to_chat(world, "The following crew members completed their Crew Objectives:") From dce076f76b1752625d457a9988429150dd1b6a2d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 22:45:53 -0400 Subject: [PATCH 026/144] just to make sure nothing breaks --- code/citadel/cit_crewobjectives.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 76ab337891..71a146fc22 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -117,6 +117,7 @@ explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." /datum/objective/crew/researchdirector/cyborgs/New() + . = ..() target_amount = rand(3,20) update_explanation_text() @@ -140,6 +141,7 @@ explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." /datum/objective/crew/roboticist/cyborgs/New() + . = ..() target_amount = rand(3,20) update_explanation_text() From 4af7100b7b519f7c85bdd70602cbb697834a8bc6 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 4 Sep 2017 23:34:37 -0400 Subject: [PATCH 027/144] Adds potential for conflict between captain, HOP, and HOS. also adds a unique HOP objective --- code/citadel/cit_crewobjectives.dm | 33 +++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 71a146fc22..c5e929aca5 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -47,7 +47,7 @@ return 0 /datum/objective/crew/captain/datfukkendisk - explanation_text = "Defend the nuclear authentication disk at all costs, and personally deliver it to Centcom." + explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." /datum/objective/crew/captain/datfukkendisk/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) @@ -55,6 +55,28 @@ else return 0 +/datum/objective/crew/headofpersonnel/ + +/datum/objective/crew/headofpersonnel/ian + explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift." + +/datum/objective/crew/headofpersonnel/ian/check_completion() + if(owner.current) + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in world) + if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) + return 1 + return 0 + return 0 + +/datum/objective/crew/headofpersonnel/datfukkendisk + explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." + +/datum/objective/crew/headofpersonnel/datfukkendisk/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 + /* SECURITY OBJECTIVES */ /datum/objective/crew/headofsecurity/ @@ -70,6 +92,15 @@ return 0 return 1 +/datum/objective/crew/headofsecurity/datfukkendisk + explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." + +/datum/objective/crew/headofsecurity/datfukkendisk/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 + /datum/objective/crew/securityofficer/ /datum/objective/crew/securityofficer/justicecrew From 38e4c86666f9dfa59560a82647b9cb72f42e4fe9 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 01:12:05 -0400 Subject: [PATCH 028/144] more objectives + fixes --- code/citadel/cit_crewobjectives.dm | 66 ++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index c5e929aca5..63a0347951 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -88,7 +88,7 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -110,7 +110,20 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/warden/ + +/datum/objective/crew/warden/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/warden/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(M.current)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -123,7 +136,7 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -136,7 +149,7 @@ if(owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) return 0 return 1 @@ -189,3 +202,48 @@ return 1 else return 0 + +/* ENGINEERING OBJECTIVES */ + +/* MEDICAL OBJECTIVES */ + +/datum/objective/crew/chiefmedicalofficer/ + +/datum/objective/crew/chiefmedicalofficer/morgue + explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + +/datum/objective/crew/chiefmedicalofficer/morgue/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(get_area.H != /area/medical/morgue) + return 0 + return 1 + +/datum/objective/crew/geneticist + +/datum/objective/crew/geneticist/morgue + explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + +/datum/objective/crew/geneticist/morgue/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(get_area.H != /area/medical/morgue) + return 0 + return 1 + +/datum/objective/crew/medicaldoctor + +/datum/objective/crew/medicaldoctor/morgue + explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + +/datum/objective/crew/medicaldoctor/morgue/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(get_area.H != /area/medical/morgue) + return 0 + return 1 + + +/* CARGO OBJECTIVES */ + +/* CIVILLIAN OBJECTIVES */ From af7ad3e620541514c93fda91af45e96cf6ac6200 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 01:21:18 -0400 Subject: [PATCH 029/144] reee --- code/citadel/cit_crewobjectives.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 63a0347951..7d396e3e33 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -215,7 +215,7 @@ /datum/objective/crew/chiefmedicalofficer/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION) - if(get_area.H != /area/medical/morgue) + if(get_area(H) != /area/medical/morgue) return 0 return 1 @@ -227,7 +227,7 @@ /datum/objective/crew/geneticist/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION) - if(get_area.H != /area/medical/morgue) + if(get_area(H) != /area/medical/morgue) return 0 return 1 @@ -239,7 +239,7 @@ /datum/objective/crew/medicaldoctor/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION) - if(get_area.H != /area/medical/morgue) + if(get_area(H) != /area/medical/morgue) return 0 return 1 From 396251665e4dfad3d76bd48589ab2df5f292015b Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 01:40:35 -0400 Subject: [PATCH 030/144] added comments to show where objectives are ported from --- code/citadel/cit_crewobjectives.dm | 20 ++++++++++---------- code/citadel/cit_miscreants.dm | 4 ++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 7d396e3e33..2c3b0d8524 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -37,7 +37,7 @@ /datum/objective/crew/captain/ -/datum/objective/crew/captain/hat +/datum/objective/crew/captain/hat //Ported from Goon explanation_text = "Don't lose your hat." /datum/objective/crew/captain/hat/check_completion() @@ -46,7 +46,7 @@ else return 0 -/datum/objective/crew/captain/datfukkendisk +/datum/objective/crew/captain/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." /datum/objective/crew/captain/datfukkendisk/check_completion() @@ -57,7 +57,7 @@ /datum/objective/crew/headofpersonnel/ -/datum/objective/crew/headofpersonnel/ian +/datum/objective/crew/headofpersonnel/ian //Ported from old Hippie explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift." /datum/objective/crew/headofpersonnel/ian/check_completion() @@ -68,7 +68,7 @@ return 0 return 0 -/datum/objective/crew/headofpersonnel/datfukkendisk +/datum/objective/crew/headofpersonnel/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." /datum/objective/crew/headofpersonnel/datfukkendisk/check_completion() @@ -92,7 +92,7 @@ return 0 return 1 -/datum/objective/crew/headofsecurity/datfukkendisk +/datum/objective/crew/headofsecurity/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." /datum/objective/crew/headofsecurity/datfukkendisk/check_completion() @@ -157,7 +157,7 @@ /datum/objective/crew/researchdirector/ -/datum/objective/crew/researchdirector/cyborgs +/datum/objective/crew/researchdirector/cyborgs //Ported from old Hippie explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." /datum/objective/crew/researchdirector/cyborgs/New() @@ -181,7 +181,7 @@ /datum/objective/crew/roboticist/ -/datum/objective/crew/roboticist/cyborgs +/datum/objective/crew/roboticist/cyborgs //Ported from old Hippie explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." /datum/objective/crew/roboticist/cyborgs/New() @@ -209,7 +209,7 @@ /datum/objective/crew/chiefmedicalofficer/ -/datum/objective/crew/chiefmedicalofficer/morgue +/datum/objective/crew/chiefmedicalofficer/morgue //Ported from old Hippie explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." /datum/objective/crew/chiefmedicalofficer/morgue/check_completion() @@ -221,7 +221,7 @@ /datum/objective/crew/geneticist -/datum/objective/crew/geneticist/morgue +/datum/objective/crew/geneticist/morgue //Ported from old Hippie explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." /datum/objective/crew/geneticist/morgue/check_completion() @@ -233,7 +233,7 @@ /datum/objective/crew/medicaldoctor -/datum/objective/crew/medicaldoctor/morgue +/datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." /datum/objective/crew/medicaldoctor/morgue/check_completion() diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index d362f74251..fbd89c1827 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -24,6 +24,8 @@ /datum/objective/miscreant explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the coderbus discussion channel of citadels discord." +/* Goon's Miscreant Objectives */ + /datum/objective/miscreant/blockade explanation_text = "Try to completely block off access to an area, under the pretense that it's too dangerous." @@ -51,5 +53,7 @@ /datum/objective/miscreant/whiny explanation_text = "Complain incessantly about every minor issue you find." +/* Citadel's Miscreant Objectives */ + /datum/objective/miscreant/immersions explanation_text = "Act as out of character as you possibly can." From 6313f24c6a9f9b6c4cf2e1251af70dc0c121e773 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 01:57:00 -0400 Subject: [PATCH 031/144] adds petsplosion for assistants --- code/citadel/cit_crewobjectives.dm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 2c3b0d8524..e63cc22e6b 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -247,3 +247,27 @@ /* CARGO OBJECTIVES */ /* CIVILLIAN OBJECTIVES */ + +/datum/objective/crew/assistant + +/datum/objective/crew/assistant/petsplosion + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) animals on the station by the end of the shift. Anthropomorphic animals do not count." + +/datum/objective/crew/assistant/petsplosion/New() + . = ..() + target_amount = rand(5,75) + update_explanation_text() + +/datum/objective/crew/assistant/petsplosion/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] animals on the station by the end of the shift. Anthropomorphic animals do not count." + +/datum/objective/crew/assistant/petsplosion/check_completion() + var/petcount = target_amount + for(var/mob/living/simple_animal/pet/P in world) + if(!P.stat == DEAD) + petcount-- + if(petcount <= 0) + return 1 + else + return 0 From e340a0fd5ba763235b9a122381943f521d41d63c Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 11:37:53 -0400 Subject: [PATCH 032/144] improves petsplosion, adds it to cargo tech and qm --- code/citadel/cit_crewobjectives.dm | 78 +++++++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index e63cc22e6b..8c883a3d30 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -62,7 +62,7 @@ /datum/objective/crew/headofpersonnel/ian/check_completion() if(owner.current) - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in world) + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list) if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) return 1 return 0 @@ -246,27 +246,93 @@ /* CARGO OBJECTIVES */ +/datum/objective/crew/quartermaster + +/datum/objective/crew/quartermaster/petsplosion + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/quartermaster/petsplosion/New() + . = ..() + target_amount = rand(10,75) + update_explanation_text() + +/datum/objective/crew/quartermaster/petsplosion/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/quartermaster/petsplosion/check_completion() + var/petcount = target_amount + for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) + if(!P.stat == DEAD) + if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + petcount-- + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(istype(H.neck, /obj/item/clothing/neck/petcollar) + petcount-- + if(petcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/cargotechnician + +/datum/objective/crew/cargotechnician/petsplosion + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/assistant/petsplosion/New() + . = ..() + target_amount = rand(10,75) + update_explanation_text() + +/datum/objective/crew/cargotechnician/petsplosion/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/cargotechnician/petsplosion/check_completion() + var/petcount = target_amount + for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) + if(!P.stat == DEAD) + if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + petcount-- + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(istype(H.neck, /obj/item/clothing/neck/petcollar) + petcount-- + if(petcount <= 0) + return 1 + else + return 0 + /* CIVILLIAN OBJECTIVES */ /datum/objective/crew/assistant /datum/objective/crew/assistant/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) animals on the station by the end of the shift. Anthropomorphic animals do not count." + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) pets on the station by the end of the shift. Interpret this as you wish." /datum/objective/crew/assistant/petsplosion/New() . = ..() - target_amount = rand(5,75) + target_amount = rand(10,75) update_explanation_text() /datum/objective/crew/assistant/petsplosion/update_explanation_text() . = ..() - explanation_text = "Ensure there are at least [target_amount] animals on the station by the end of the shift. Anthropomorphic animals do not count." + explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." /datum/objective/crew/assistant/petsplosion/check_completion() var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in world) + for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) if(!P.stat == DEAD) - petcount-- + if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + petcount-- + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(istype(H.neck, /obj/item/clothing/neck/petcollar) + petcount-- if(petcount <= 0) return 1 else From 3a0d1dc982b4aec990cf7f664152d54355cb7843 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 12:01:00 -0400 Subject: [PATCH 033/144] Nerfs compiling errors, lowers expectations for assistants --- code/citadel/cit_crewobjectives.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 8c883a3d30..e05c90e1d8 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -269,7 +269,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.neck, /obj/item/clothing/neck/petcollar) + if(istype(H.neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) return 1 @@ -299,7 +299,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.neck, /obj/item/clothing/neck/petcollar) + if(istype(H.neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) return 1 @@ -315,7 +315,7 @@ /datum/objective/crew/assistant/petsplosion/New() . = ..() - target_amount = rand(10,75) + target_amount = rand(10,25) update_explanation_text() /datum/objective/crew/assistant/petsplosion/update_explanation_text() @@ -331,7 +331,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.neck, /obj/item/clothing/neck/petcollar) + if(istype(H.neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) return 1 From c2d86f12e99c158acfb49623cd8e281c79cd898f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 12:44:07 -0400 Subject: [PATCH 034/144] gives the bartender ONE JOB and actually nerfs compiling errors --- code/citadel/cit_crewobjectives.dm | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index e05c90e1d8..3bed8fb1a9 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -269,7 +269,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.neck, /obj/item/clothing/neck/petcollar)) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) return 1 @@ -299,7 +299,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.neck, /obj/item/clothing/neck/petcollar)) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) return 1 @@ -308,6 +308,19 @@ /* CIVILLIAN OBJECTIVES */ +/datum/objective/crew/bartender + +/datum/objective/crew/bartender/responsibility + explanation_text = "Make sure nobody dies of alchohol poisoning." + +/datum/objective/crew/bartender/responsibility/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.reagents) + if(H.reagents.has_reagent(ethanol)) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + return 0 + return 1 + /datum/objective/crew/assistant /datum/objective/crew/assistant/petsplosion @@ -331,7 +344,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.neck, /obj/item/clothing/neck/petcollar)) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) return 1 From 2cb959b4cf8ee4c2fdce2d0077746d463459339d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 12:54:43 -0400 Subject: [PATCH 035/144] daMNIT --- code/citadel/cit_crewobjectives.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 3bed8fb1a9..21c99604fb 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -316,8 +316,8 @@ /datum/objective/crew/bartender/responsibility/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.reagents) - if(H.reagents.has_reagent(ethanol)) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + if(H.reagents.has_reagent(typesof(/datum/reagent/consumable/ethanol))) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) return 0 return 1 From eb03ce69d4e9dfa2e3a22f09d753cf42c0eda9c6 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 12:59:05 -0400 Subject: [PATCH 036/144] it'll work properly eventually --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 21c99604fb..c113889502 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -316,7 +316,7 @@ /datum/objective/crew/bartender/responsibility/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.reagents) - if(H.reagents.has_reagent(typesof(/datum/reagent/consumable/ethanol))) + if(H.reagents.has_reagent(typesof(/datum/reagent/consumable/ethanol).id)) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) return 0 return 1 From 32504f73f88d89a51cd50c9b6d9d9486cd97d544 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 14:37:17 -0400 Subject: [PATCH 037/144] hoPEFULLY FIXES IT, adds chem objective for chemists and CMOs --- code/citadel/cit_crewobjectives.dm | 68 ++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index c113889502..bee028c89f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -219,6 +219,35 @@ return 0 return 1 +/datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie with adjustments + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the codebus discussion channel of citadel's discord) in their bloodstream when the shift ends." + +/datum/objective/crew/chiefmedicalofficer/chems/New() + . = ..() + target_amount = rand(2,5) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + chempath = pick(typesof(/datum/reagent/drug) - blacklist, typesof(/datum/reagent/medicine) - blacklist, /datum/reagent/aphrodisiac, /datum/reagent/anaphrodisiac) + targetchem = chempath.id + update_explanation_text() + +/datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() + . = ..() + explanation_text = "Ensure at least [target_amount] living crew members have [chempath.name] in their bloodstream when the shift ends." + +/datum/objective/crew/chiefmedicalofficer/chems/check_completion() + var/gotchems = 0 + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD && H.reagents) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.reagents.has_reagent(targetchem) + gotchems += 1 + if(gotchems >= target_amount) + return 1 + else + return 0 + /datum/objective/crew/geneticist /datum/objective/crew/geneticist/morgue //Ported from old Hippie @@ -231,6 +260,37 @@ return 0 return 1 +/datum/objective/crew/chemist/ + +/datum/objective/crew/chemist/chems //Ported from old Hippie with adjustments + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the codebus discussion channel of citadel's discord) in their bloodstream when the shift ends." + +/datum/objective/crew/chemist/chems/New() + . = ..() + target_amount = rand(2,5) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + chempath = pick(typesof(/datum/reagent/drug) - blacklist, typesof(/datum/reagent/medicine) - blacklist, /datum/reagent/aphrodisiac, /datum/reagent/anaphrodisiac) + targetchem = chempath.id + update_explanation_text() + +/datum/objective/crew/chemist/chems/update_explanation_text() + . = ..() + explanation_text = "Ensure at least [target_amount] living crew members have [chempath.name] in their bloodstream when the shift ends." + +/datum/objective/crew/chemist/chems/check_completion() + var/gotchems = 0 + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD && H.reagents) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.reagents.has_reagent(targetchem) + gotchems += 1 + if(gotchems >= target_amount) + return 1 + else + return 0 + /datum/objective/crew/medicaldoctor /datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie @@ -316,9 +376,11 @@ /datum/objective/crew/bartender/responsibility/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.reagents) - if(H.reagents.has_reagent(typesof(/datum/reagent/consumable/ethanol).id)) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - return 0 + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + for(/datum/reagent/consumable/ethanol/A in typesof(/datum/reagent/consumable/ethanol)) + if(A) + if(A.volume >= 5) + return 0 return 1 /datum/objective/crew/assistant From 6f47ac46d00d73aa5f305b64ff0be5b200e76483 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 14:51:37 -0400 Subject: [PATCH 038/144] hopefully fixes the compile errors --- code/citadel/cit_crewobjectives.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index bee028c89f..8c8a3b8e4b 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -237,13 +237,13 @@ explanation_text = "Ensure at least [target_amount] living crew members have [chempath.name] in their bloodstream when the shift ends." /datum/objective/crew/chiefmedicalofficer/chems/check_completion() - var/gotchems = 0 + var/gotchems = target_amount for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(H.reagents.has_reagent(targetchem) - gotchems += 1 - if(gotchems >= target_amount) + gotchems-- + if(gotchems <= 0) return 1 else return 0 @@ -280,13 +280,13 @@ explanation_text = "Ensure at least [target_amount] living crew members have [chempath.name] in their bloodstream when the shift ends." /datum/objective/crew/chemist/chems/check_completion() - var/gotchems = 0 + var/gotchems = target_amount for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(H.reagents.has_reagent(targetchem) - gotchems += 1 - if(gotchems >= target_amount) + gotchems-- + if(gotchems <= 0) return 1 else return 0 From fd8c9bc57d2e269c35465c1e67acc50d888f836e Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 15:00:22 -0400 Subject: [PATCH 039/144] where has my life gone --- code/citadel/cit_crewobjectives.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 8c8a3b8e4b..ca97f20f6d 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -241,7 +241,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(H.reagents.has_reagent(targetchem) + if(H.reagents.has_reagent(targetchem)) gotchems-- if(gotchems <= 0) return 1 @@ -284,7 +284,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(H.reagents.has_reagent(targetchem) + if(H.reagents.has_reagent(targetchem)) gotchems-- if(gotchems <= 0) return 1 From fe8f42bb5fca3039e44dea0ce813a7ee00d5a5f2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 15:07:54 -0400 Subject: [PATCH 040/144] thERE WE GO --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index ca97f20f6d..7fc088a554 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -377,7 +377,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - for(/datum/reagent/consumable/ethanol/A in typesof(/datum/reagent/consumable/ethanol)) + for(var/datum/reagent/consumable/ethanol/A in typesof(/datum/reagent/consumable/ethanol)) if(A) if(A.volume >= 5) return 0 From d7e201bec845b0d4ad261ea13a4cd96d42bc3c3f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 17:37:50 -0400 Subject: [PATCH 041/144] nerfs chem objective (makes it only give only one chem as the target as its supposed to) --- code/citadel/cit_crewobjectives.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 7fc088a554..f6ea333413 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -228,7 +228,10 @@ . = ..() target_amount = rand(2,5) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) - chempath = pick(typesof(/datum/reagent/drug) - blacklist, typesof(/datum/reagent/medicine) - blacklist, /datum/reagent/aphrodisiac, /datum/reagent/anaphrodisiac) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/meds = typesof(/datum/reagent/medicine) - blacklist + var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) targetchem = chempath.id update_explanation_text() @@ -271,7 +274,10 @@ . = ..() target_amount = rand(2,5) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) - chempath = pick(typesof(/datum/reagent/drug) - blacklist, typesof(/datum/reagent/medicine) - blacklist, /datum/reagent/aphrodisiac, /datum/reagent/anaphrodisiac) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/meds = typesof(/datum/reagent/medicine) - blacklist + var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) targetchem = chempath.id update_explanation_text() From e6246d1f1a6f013546f4afe5f4ccf91fbbc1bcc6 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 17:47:02 -0400 Subject: [PATCH 042/144] fixes runtime --- code/citadel/cit_crewobjectives.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index f6ea333413..024ddaaa98 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -232,7 +232,7 @@ var/meds = typesof(/datum/reagent/medicine) - blacklist var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac chempath = pick(chemlist) - targetchem = chempath.id + targetchem = initial(chempath.id) update_explanation_text() /datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() @@ -278,7 +278,7 @@ var/meds = typesof(/datum/reagent/medicine) - blacklist var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac chempath = pick(chemlist) - targetchem = chempath.id + targetchem = initial(chempath.id) update_explanation_text() /datum/objective/crew/chemist/chems/update_explanation_text() From 60e9682ce25efad32ec4300b489fc421833b25cd Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 17:50:20 -0400 Subject: [PATCH 043/144] I'm blind --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 024ddaaa98..e2ddb0572b 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -383,7 +383,7 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - for(var/datum/reagent/consumable/ethanol/A in typesof(/datum/reagent/consumable/ethanol)) + for(var/datum/reagent/consumable/ethanol/A in H.reagents) if(A) if(A.volume >= 5) return 0 From 71ae5732601b56c8656105603c6d0b5ae95955bc Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 18:03:34 -0400 Subject: [PATCH 044/144] patches ANOTHER runtime. jesus im bad at this --- code/citadel/cit_crewobjectives.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index e2ddb0572b..82871c44f5 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -237,7 +237,7 @@ /datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() . = ..() - explanation_text = "Ensure at least [target_amount] living crew members have [chempath.name] in their bloodstream when the shift ends." + explanation_text = "Ensure at least [target_amount] living crew members have [initial(chempath.name)] in their bloodstream when the shift ends." /datum/objective/crew/chiefmedicalofficer/chems/check_completion() var/gotchems = target_amount @@ -283,7 +283,7 @@ /datum/objective/crew/chemist/chems/update_explanation_text() . = ..() - explanation_text = "Ensure at least [target_amount] living crew members have [chempath.name] in their bloodstream when the shift ends." + explanation_text = "Ensure at least [target_amount] living crew members have [initial(chempath.name)] in their bloodstream when the shift ends." /datum/objective/crew/chemist/chems/check_completion() var/gotchems = target_amount From a196eccb26b62965b0b47565d1cc7647f2733059 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 19:21:29 -0400 Subject: [PATCH 045/144] should fix responsibility objective. hopefully --- code/citadel/cit_crewobjectives.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 82871c44f5..8994d4e547 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -380,10 +380,11 @@ explanation_text = "Make sure nobody dies of alchohol poisoning." /datum/objective/crew/bartender/responsibility/check_completion() + var/boozetypes = typesof(/datum/reagent/consumable/ethanol) for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.reagents) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - for(var/datum/reagent/consumable/ethanol/A in H.reagents) + for(boozetypes/A in H.reagents) if(A) if(A.volume >= 5) return 0 From 830eef1207848653536fd53136b995b0e2f9d32d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 20:00:26 -0400 Subject: [PATCH 046/144] ... theres a var for that --- code/citadel/cit_crewobjectives.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 8994d4e547..f2702695b9 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -380,14 +380,10 @@ explanation_text = "Make sure nobody dies of alchohol poisoning." /datum/objective/crew/bartender/responsibility/check_completion() - var/boozetypes = typesof(/datum/reagent/consumable/ethanol) for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.reagents) + if(H.stat == DEAD && H.drunkenness >= 80) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - for(boozetypes/A in H.reagents) - if(A) - if(A.volume >= 5) - return 0 + return 0 return 1 /datum/objective/crew/assistant From dd0f5506cf29865b2a869791945834fa68f55f79 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 20:08:19 -0400 Subject: [PATCH 047/144] updates error text --- code/citadel/cit_crewobjectives.dm | 16 ++++++++-------- code/citadel/cit_miscreants.dm | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index f2702695b9..8e08c464af 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -29,7 +29,7 @@ crewMind.announce_objectives() /datum/objective/crew/ - explanation_text = "Yell on the coderbus discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" + explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" /datum/objective/crew/proc/setup() @@ -158,7 +158,7 @@ /datum/objective/crew/researchdirector/ /datum/objective/crew/researchdirector/cyborgs //Ported from old Hippie - explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." + explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." /datum/objective/crew/researchdirector/cyborgs/New() . = ..() @@ -182,7 +182,7 @@ /datum/objective/crew/roboticist/ /datum/objective/crew/roboticist/cyborgs //Ported from old Hippie - explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's codebus discussion channel about this) functioning cyborgs when the shift ends." + explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." /datum/objective/crew/roboticist/cyborgs/New() . = ..() @@ -222,7 +222,7 @@ /datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie with adjustments var/targetchem = "none" var/datum/reagent/chempath - explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the codebus discussion channel of citadel's discord) in their bloodstream when the shift ends." + explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the development discussion channel of citadel's discord) in their bloodstream when the shift ends." /datum/objective/crew/chiefmedicalofficer/chems/New() . = ..() @@ -268,7 +268,7 @@ /datum/objective/crew/chemist/chems //Ported from old Hippie with adjustments var/targetchem = "none" var/datum/reagent/chempath - explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the codebus discussion channel of citadel's discord) in their bloodstream when the shift ends." + explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the development discussion channel of citadel's discord) in their bloodstream when the shift ends." /datum/objective/crew/chemist/chems/New() . = ..() @@ -315,7 +315,7 @@ /datum/objective/crew/quartermaster /datum/objective/crew/quartermaster/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." /datum/objective/crew/quartermaster/petsplosion/New() . = ..() @@ -345,7 +345,7 @@ /datum/objective/crew/cargotechnician /datum/objective/crew/cargotechnician/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." /datum/objective/crew/assistant/petsplosion/New() . = ..() @@ -389,7 +389,7 @@ /datum/objective/crew/assistant /datum/objective/crew/assistant/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the codebus discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." /datum/objective/crew/assistant/petsplosion/New() . = ..() diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index fbd89c1827..722cd53727 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -22,7 +22,7 @@ crewMind.announce_objectives() /datum/objective/miscreant - explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the coderbus discussion channel of citadels discord." + explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord." /* Goon's Miscreant Objectives */ From a5b335885f677d40affb82381def332edb55d2f9 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 21:41:11 -0400 Subject: [PATCH 048/144] janitor cleaning objective --- code/citadel/cit_crewobjectives.dm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 8e08c464af..636c618f64 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -386,6 +386,31 @@ return 0 return 1 +/datum/objective/crew/janitor + +/datum/objective/crew/janitor/clean //ported from old Hippie + var/list/areas = list() + explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." + +/datum/objective/crew/janitor/clean/new() + . = ..() + var/list/possibleareas = GLOB.teleportlocs + for(var/i in 1 to rand(1,4)) + areas |= pick_n_take(possibleareas) + update_explanation_text() + +/datum/objective/crew/janitor/clean/update_explanation_text() + . = ..() + explanation_text = "Ensure that " + for(var/i in 1 to areas.len) + var/area/A = areas[i] + explanation_text += "[A.name]" + if(i != areas.len) + explanation_text += ", and " + explanation_text += " remain[(areas.len ==1) ? "s" : ""] spotless at the end of the shift." + +/datum/objective/crew/janitor/clean/check_completion() + /datum/objective/crew/assistant /datum/objective/crew/assistant/petsplosion From dda6e59817116491d6d852e13bb0ab0e399bad73 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 21:49:00 -0400 Subject: [PATCH 049/144] I haven't had a breath of fresh air for two days now --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 636c618f64..322b88a7eb 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -392,7 +392,7 @@ var/list/areas = list() explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." -/datum/objective/crew/janitor/clean/new() +/datum/objective/crew/janitor/clean/New() . = ..() var/list/possibleareas = GLOB.teleportlocs for(var/i in 1 to rand(1,4)) From c1d1cc5cb187aa4de3356145891dca33d4768411 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 21:56:59 -0400 Subject: [PATCH 050/144] gramatically correct spaghetti code --- code/citadel/cit_crewobjectives.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 322b88a7eb..4075e669ad 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -401,13 +401,15 @@ /datum/objective/crew/janitor/clean/update_explanation_text() . = ..() - explanation_text = "Ensure that " + explanation_text = "Ensure that the " for(var/i in 1 to areas.len) var/area/A = areas[i] explanation_text += "[A.name]" - if(i != areas.len) - explanation_text += ", and " - explanation_text += " remain[(areas.len ==1) ? "s" : ""] spotless at the end of the shift." + if(i != areas.len && areas.len >= 3) + explanation_text += ", " + if(i == areas.len - 1) + explanation_text += "and " + explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] spotless at the end of the shift." /datum/objective/crew/janitor/clean/check_completion() From 855455a6cad93699d511f7f9a3b11e1ff4473517 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 5 Sep 2017 22:27:27 -0400 Subject: [PATCH 051/144] nerfs runtimes, buffs memory retention --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 4075e669ad..194e8682ae 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -404,7 +404,7 @@ explanation_text = "Ensure that the " for(var/i in 1 to areas.len) var/area/A = areas[i] - explanation_text += "[A.name]" + explanation_text += "[A]" if(i != areas.len && areas.len >= 3) explanation_text += ", " if(i == areas.len - 1) From 146d11dfad0b0d4d356d0f6e5a661263f54752c9 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 02:06:36 -0400 Subject: [PATCH 052/144] nerfs bad rng --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 194e8682ae..2cbb958f24 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -394,7 +394,7 @@ /datum/objective/crew/janitor/clean/New() . = ..() - var/list/possibleareas = GLOB.teleportlocs + var/list/possibleareas = GLOB.teleportlocs - /area/space for(var/i in 1 to rand(1,4)) areas |= pick_n_take(possibleareas) update_explanation_text() From c9a340de27f8e71648594d319f1c59633ae7963c Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 13:18:39 -0400 Subject: [PATCH 053/144] fixes janitor objective, tones down other objectives --- code/citadel/cit_crewobjectives.dm | 44 +++++++++++++----------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 2cbb958f24..53868fa084 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -219,14 +219,13 @@ return 0 return 1 -/datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie with adjustments +/datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie var/targetchem = "none" var/datum/reagent/chempath - explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the development discussion channel of citadel's discord) in their bloodstream when the shift ends." + explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." /datum/objective/crew/chiefmedicalofficer/chems/New() . = ..() - target_amount = rand(2,5) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist @@ -237,17 +236,14 @@ /datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() . = ..() - explanation_text = "Ensure at least [target_amount] living crew members have [initial(chempath.name)] in their bloodstream when the shift ends." + explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." /datum/objective/crew/chiefmedicalofficer/chems/check_completion() var/gotchems = target_amount - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD && H.reagents) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(H.reagents.has_reagent(targetchem)) - gotchems-- - if(gotchems <= 0) - return 1 + if(owner.current) + if(!owner.stat == DEAD && owner.reagents) + if(owner.reagents.has_reagent(targetchem)) + return 1 else return 0 @@ -265,14 +261,13 @@ /datum/objective/crew/chemist/ -/datum/objective/crew/chemist/chems //Ported from old Hippie with adjustments +/datum/objective/crew/chemist/chems //Ported from old Hippie var/targetchem = "none" var/datum/reagent/chempath - explanation_text = "Ensure at least (yo something broke here) living crew members have (yell about this in the development discussion channel of citadel's discord) in their bloodstream when the shift ends." + explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." /datum/objective/crew/chemist/chems/New() . = ..() - target_amount = rand(2,5) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist @@ -283,17 +278,14 @@ /datum/objective/crew/chemist/chems/update_explanation_text() . = ..() - explanation_text = "Ensure at least [target_amount] living crew members have [initial(chempath.name)] in their bloodstream when the shift ends." + explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." /datum/objective/crew/chemist/chems/check_completion() var/gotchems = target_amount - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD && H.reagents) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(H.reagents.has_reagent(targetchem)) - gotchems-- - if(gotchems <= 0) - return 1 + if(owner.current) + if(!owner.stat == DEAD && owner.reagents) + if(owner.reagents.has_reagent(targetchem)) + return 1 else return 0 @@ -319,7 +311,6 @@ /datum/objective/crew/quartermaster/petsplosion/New() . = ..() - target_amount = rand(10,75) update_explanation_text() /datum/objective/crew/quartermaster/petsplosion/update_explanation_text() @@ -349,7 +340,6 @@ /datum/objective/crew/assistant/petsplosion/New() . = ..() - target_amount = rand(10,75) update_explanation_text() /datum/objective/crew/cargotechnician/petsplosion/update_explanation_text() @@ -412,6 +402,10 @@ explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] spotless at the end of the shift." /datum/objective/crew/janitor/clean/check_completion() + for(var/area/A in areas) + for(var/obj/effect/decal/A in area_contents(A) + return 0 + return 1 /datum/objective/crew/assistant @@ -420,7 +414,7 @@ /datum/objective/crew/assistant/petsplosion/New() . = ..() - target_amount = rand(10,25) + target_amount = rand(10,20) update_explanation_text() /datum/objective/crew/assistant/petsplosion/update_explanation_text() From d996b7ab7560cf59c2aeaf69081bbcce6a5b7c69 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 13:35:56 -0400 Subject: [PATCH 054/144] adds "kill bubblegum" objective for shaft miners --- code/citadel/cit_crewobjectives.dm | 19 ++++++++++++++++--- code/citadel/cit_miscreants.dm | 6 ++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 53868fa084..3d2fcc10ba 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -162,7 +162,7 @@ /datum/objective/crew/researchdirector/cyborgs/New() . = ..() - target_amount = rand(3,20) + target_amount = rand(3,10) update_explanation_text() /datum/objective/crew/researchdirector/cyborgs/update_explanation_text() @@ -186,7 +186,7 @@ /datum/objective/crew/roboticist/cyborgs/New() . = ..() - target_amount = rand(3,20) + target_amount = rand(3,10) update_explanation_text() /datum/objective/crew/roboticist/cyborgs/update_explanation_text() @@ -311,6 +311,7 @@ /datum/objective/crew/quartermaster/petsplosion/New() . = ..() + target_amount = rand(10,30) update_explanation_text() /datum/objective/crew/quartermaster/petsplosion/update_explanation_text() @@ -338,8 +339,9 @@ /datum/objective/crew/cargotechnician/petsplosion explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." -/datum/objective/crew/assistant/petsplosion/New() +/datum/objective/crew/cargotechnician/petsplosion/New() . = ..() + target_amount = rand(10,30) update_explanation_text() /datum/objective/crew/cargotechnician/petsplosion/update_explanation_text() @@ -362,6 +364,17 @@ else return 0 +/datum/objective/crew/shaftminer + +/datum/objective/crew/shaftminer/bubblegum + explanation_text = "Ensure Bubblegum is dead at the end of the shift." + +/datum/objective/crew/shaftminer/bubblegum/check_completion() + for(var/mob/living/simple_animal/hostile/megafuana/bubblegum/B in GLOB.mob_list) + if(!B.stat == DEAD) + return 0 + return 1 + /* CIVILLIAN OBJECTIVES */ /datum/objective/crew/bartender diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index 722cd53727..19e75047f5 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -53,7 +53,13 @@ /datum/objective/miscreant/whiny explanation_text = "Complain incessantly about every minor issue you find." +/datum/objective/miscreant/damage + explanation_text = "Cause as much property damage as possible without actually harming anyone." + /* Citadel's Miscreant Objectives */ /datum/objective/miscreant/immersions explanation_text = "Act as out of character as you possibly can." + +/datum/objective/miscreant/racism + explanation_text = "Attempt to establish superiority of your race." From 94354c3dd67bc5361e0e4fb203bc32c4a296847b Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 14:14:18 -0400 Subject: [PATCH 055/144] more janitor adjustments --- code/citadel/cit_crewobjectives.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 3d2fcc10ba..2ac404375f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -397,8 +397,8 @@ /datum/objective/crew/janitor/clean/New() . = ..() - var/list/possibleareas = GLOB.teleportlocs - /area/space - for(var/i in 1 to rand(1,4)) + var/list/possibleareas = GLOB.teleportlocs - /area - typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat) + for(var/i in 1 to rand(1,6)) areas |= pick_n_take(possibleareas) update_explanation_text() @@ -412,7 +412,7 @@ explanation_text += ", " if(i == areas.len - 1) explanation_text += "and " - explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] spotless at the end of the shift." + explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift." /datum/objective/crew/janitor/clean/check_completion() for(var/area/A in areas) From 02cc0b2db1906f31eb01a37f9e3a10356413e1a5 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 14:19:25 -0400 Subject: [PATCH 056/144] should fix compiling errors --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 2ac404375f..06a8071a0f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -416,7 +416,7 @@ /datum/objective/crew/janitor/clean/check_completion() for(var/area/A in areas) - for(var/obj/effect/decal/A in area_contents(A) + for(var/obj/effect/decal/cleanable/A in area_contents(A)) return 0 return 1 From 367c6c8adaac2b51baaab53be1cbf15b43076887 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 14:37:01 -0400 Subject: [PATCH 057/144] im bad at this coding thing --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 06a8071a0f..61b772494e 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -370,7 +370,7 @@ explanation_text = "Ensure Bubblegum is dead at the end of the shift." /datum/objective/crew/shaftminer/bubblegum/check_completion() - for(var/mob/living/simple_animal/hostile/megafuana/bubblegum/B in GLOB.mob_list) + for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) if(!B.stat == DEAD) return 0 return 1 From be5013c2a03054a4134a7c198db05efbef7f18d4 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 14:37:59 -0400 Subject: [PATCH 058/144] aaaAAAUUGH --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 61b772494e..55eb6da781 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -416,7 +416,7 @@ /datum/objective/crew/janitor/clean/check_completion() for(var/area/A in areas) - for(var/obj/effect/decal/cleanable/A in area_contents(A)) + for(var/obj/effect/decal/cleanable/C in area_contents(A)) return 0 return 1 From 1753a4509a32237efa84585925123e5b6ec27311 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 14:51:28 -0400 Subject: [PATCH 059/144] there we go. compiling errors fixed. --- code/citadel/cit_crewobjectives.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 55eb6da781..93041f4707 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -241,8 +241,8 @@ /datum/objective/crew/chiefmedicalofficer/chems/check_completion() var/gotchems = target_amount if(owner.current) - if(!owner.stat == DEAD && owner.reagents) - if(owner.reagents.has_reagent(targetchem)) + if(!owner.current.stat == DEAD && owner.current.reagents) + if(owner.current.reagents.has_reagent(targetchem)) return 1 else return 0 @@ -283,8 +283,8 @@ /datum/objective/crew/chemist/chems/check_completion() var/gotchems = target_amount if(owner.current) - if(!owner.stat == DEAD && owner.reagents) - if(owner.reagents.has_reagent(targetchem)) + if(!owner.current.stat == DEAD && owner.current.reagents) + if(owner.current.reagents.has_reagent(targetchem)) return 1 else return 0 From 4bcb9f16290886b5709ea12989d1913cc201e29a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 16:34:38 -0400 Subject: [PATCH 060/144] druglord objective + fixes --- code/citadel/cit_crewobjectives.dm | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 93041f4707..8412cb1831 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -239,7 +239,6 @@ explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." /datum/objective/crew/chiefmedicalofficer/chems/check_completion() - var/gotchems = target_amount if(owner.current) if(!owner.current.stat == DEAD && owner.current.reagents) if(owner.current.reagents.has_reagent(targetchem)) @@ -281,7 +280,6 @@ explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." /datum/objective/crew/chemist/chems/check_completion() - var/gotchems = target_amount if(owner.current) if(!owner.current.stat == DEAD && owner.current.reagents) if(owner.current.reagents.has_reagent(targetchem)) @@ -289,6 +287,30 @@ else return 0 +/datum/objective/crew/chemist/druglord //ported from hippie, + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Have at least (somethin broke here) pills containing (report this on the development discussion channel of citadel's discord) when the shift ends." + +/datum/objective/crew/chemist/druglord/New() + . = ..() + target_amount = rand(5,50) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/chemlist = drugs + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) + targetchem = initial(chempath.id) + update_explanation_text() + +/datum/objective/crew/chemist/druglord/update_explanation_text() + . = ..() + explanation_text = "Have at least [target_amount] pills containing [initial(chempath.name)] when the shift ends." + +/datum/objective/crew/chemist/druglord/check_completion() + if(owner.current) + if(owner.current.contents) + + /datum/objective/crew/medicaldoctor /datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie From 49152d4bdb69c53a9370daac2b03c3869540cc64 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 16:46:28 -0400 Subject: [PATCH 061/144] Bluh --- code/citadel/cit_crewobjectives.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 8412cb1831..b00b63f103 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -287,7 +287,7 @@ else return 0 -/datum/objective/crew/chemist/druglord //ported from hippie, +/datum/objective/crew/chemist/druglord //ported from old Hippie with adjustments var/targetchem = "none" var/datum/reagent/chempath explanation_text = "Have at least (somethin broke here) pills containing (report this on the development discussion channel of citadel's discord) when the shift ends." @@ -307,9 +307,16 @@ explanation_text = "Have at least [target_amount] pills containing [initial(chempath.name)] when the shift ends." /datum/objective/crew/chemist/druglord/check_completion() + var/pillcount = target_amount if(owner.current) if(owner.current.contents) - + for(var/item/reagent_containers/pill/P in owner.current.get_contents()) + if(P.reagents.has_reagent(targetchem)) + pillcount-- + if(pillcount <= 0) + return 1 + else + return 0 /datum/objective/crew/medicaldoctor From 44729f3944501cd280724fd0ef5553c32588119e Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 16:55:31 -0400 Subject: [PATCH 062/144] ya shittin me right now? --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index b00b63f103..7be5c71960 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -310,7 +310,7 @@ var/pillcount = target_amount if(owner.current) if(owner.current.contents) - for(var/item/reagent_containers/pill/P in owner.current.get_contents()) + for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents()) if(P.reagents.has_reagent(targetchem)) pillcount-- if(pillcount <= 0) From 98e30a70a7a777c967ef83eef00761a3c2cc4f2a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 17:12:12 -0400 Subject: [PATCH 063/144] adds druglorg objective to botanist --- code/citadel/cit_crewobjectives.dm | 40 +++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 7be5c71960..8740b845ff 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -226,7 +226,7 @@ /datum/objective/crew/chiefmedicalofficer/chems/New() . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac @@ -267,7 +267,7 @@ /datum/objective/crew/chemist/chems/New() . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/blacklist = list(/datum/reagent/drug, /datum/reagetn/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac @@ -295,7 +295,7 @@ /datum/objective/crew/chemist/druglord/New() . = ..() target_amount = rand(5,50) - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/nicotine, /datum/reagent/drug/menthol) var/drugs = typesof(/datum/reagent/drug) - blacklist var/chemlist = drugs + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac chempath = pick(chemlist) @@ -406,6 +406,40 @@ /* CIVILLIAN OBJECTIVES */ +/datum/objective/crew/botanist + +/datum/objective/crew/botanist/druglord //ported from old Hippie with adjustments + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends." + +/datum/objective/crew/botanist/druglord/New() + . = ..() + target_amount = rand(3,20) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/meds = typesof(/datum/reagent/medicine) - blacklist + var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) + targetchem = initial(chempath.id) + update_explanation_text() + +/datum/objective/crew/botanist/druglord/update_explanation_text() + . = ..() + explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends." + +/datum/objective/crew/botanist/druglord/check_completion() + var/pillcount = target_amount + if(owner.current) + if(owner.current.contents) + for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents()) + if(P.reagents.has_reagent(targetchem)) + pillcount-- + if(pillcount <= 0) + return 1 + else + return 0 + /datum/objective/crew/bartender /datum/objective/crew/bartender/responsibility From f52fa8e2e9cee510c48f7c9b85b77fc66c76505d Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 17:18:45 -0400 Subject: [PATCH 064/144] it's probably a better idea to do this while sober --- code/citadel/cit_crewobjectives.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 8740b845ff..58fc652a8f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -267,7 +267,7 @@ /datum/objective/crew/chemist/chems/New() . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagetn/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac @@ -295,7 +295,7 @@ /datum/objective/crew/chemist/druglord/New() . = ..() target_amount = rand(5,50) - var/blacklist = list(/datum/reagent/drug, /datum/reagent/nicotine, /datum/reagent/drug/menthol) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) var/drugs = typesof(/datum/reagent/drug) - blacklist var/chemlist = drugs + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac chempath = pick(chemlist) From 0b04dd521136b4b1089f4bcdf133b84a3d58f3e2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 17:50:41 -0400 Subject: [PATCH 065/144] no harmful viruses objective for virologists --- code/citadel/cit_crewobjectives.dm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 58fc652a8f..6181947653 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -318,6 +318,19 @@ else return 0 +/datum/objective/crew/virologist + +/datum/objective/crew/virologist/noinfections + explanation_text = "Ensure no living crew members are infected with harmful viruses at the end of the shift" + +/datum/objective/crew/virologist/noinfections/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z = ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.check_virus() == 2) + return 0 + return 1 + /datum/objective/crew/medicaldoctor /datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie From 8ef2b39d4410bfcf9a8a4722738aa6b5bd5c39ce Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 18:34:05 -0400 Subject: [PATCH 066/144] adds clown slip objective --- code/citadel/cit_crewobjectives.dm | 27 ++++++++++++++++++- .../objects/items/devices/PDA/PDA_types.dm | 2 ++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 6181947653..1055d9f6ad 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -326,7 +326,7 @@ /datum/objective/crew/virologist/noinfections/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) - if(H.z = ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(H.check_virus() == 2) return 0 return 1 @@ -496,6 +496,31 @@ return 0 return 1 +/datum/objective/crew/clown + +/datum/objective/crew/clown/slipster //ported from old Hippie with adjustments + explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift." + +/datum/objective/crew/clown/slipster/New() + . = ..() + target_amount = rand(5, 20) + update_explanation_text() + +/datum/objective/crew/clown/slipster/update_explanation_text() + . = ..() + explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift." + +/datum/objective/crew/clown/slipster/check_completion() + var/uniqueslips = list() + if(owner.current) + for(/obj/item/device/pda/clown/PDA in get_contents(owner.current)) //100% open for badmin abuse + for(var/mob/living/carbon/human/H in PDA.slipvictims) + uniqueslips |= H + if(uniqueslips.len >= target_amount) + return 1 + else + return 0 + /datum/objective/crew/assistant /datum/objective/crew/assistant/petsplosion diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 08e417b9d5..4f2db14fa6 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -6,6 +6,7 @@ icon_state = "pda-clown" desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings." ttone = "honk" + var/slipvictims = list() /obj/item/device/pda/clown/Initialize() . = ..() @@ -18,6 +19,7 @@ return var/mob/living/carbon/human/M = S.slip_victim if (istype(M) && (M.real_name != src.owner)) + slipvictims |= M var/obj/item/cartridge/virus/clown/cart = cartridge if(istype(cart) && cart.charges < 5) cart.charges++ From 5e25464e1a359710ba4296dcbb25a29aad134951 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 18:56:59 -0400 Subject: [PATCH 067/144] sweet jesus im absolutely horrid at this --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 1055d9f6ad..ac3d51c61f 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -513,7 +513,7 @@ /datum/objective/crew/clown/slipster/check_completion() var/uniqueslips = list() if(owner.current) - for(/obj/item/device/pda/clown/PDA in get_contents(owner.current)) //100% open for badmin abuse + for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) //100% open for badmin abuse for(var/mob/living/carbon/human/H in PDA.slipvictims) uniqueslips |= H if(uniqueslips.len >= target_amount) From 879eb6e448b13f6c9d705389beaeae8374689382 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 20:04:19 -0400 Subject: [PATCH 068/144] more objectives, hopefully fixes compiling errors --- code/citadel/cit_crewobjectives.dm | 35 +++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index ac3d51c61f..31cd2279c9 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -511,7 +511,7 @@ explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift." /datum/objective/crew/clown/slipster/check_completion() - var/uniqueslips = list() + var/list/uniqueslips = list() if(owner.current) for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) //100% open for badmin abuse for(var/mob/living/carbon/human/H in PDA.slipvictims) @@ -521,8 +521,41 @@ else return 0 +/datum/objective/crew/mime + +/datum/objective/crew/mime/vow //ported from old Hippie + explanation_text = "Never break your vow of silence." + +/datum/objective/crew/mime/vow/check_completion() + var/list/say_log = owner.logging[INDIVIDUAL_SAY_LOG] + if(owner.current) + if(say_log.len > 0) + return 0 + return 1 + /datum/objective/crew/assistant +/datum/objective/crew/assistant/departmentclothes + var/obj/item/clothing/under/rank/targetuniform + explanation_text = "Be wearing a (Yo, this objective broke. report this to citadels discord via the development channel) at the end of the shift." + +/datum/objective/crew/assistant/departmentclothes/New() + . = ..() + var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt) + var/list/validclothes = typesof(/obj/item/clothing/under/rank) - blacklist + targetuniform = pick(validclothes) + update_explanation_text() + +/datum/objective/crew/assistant/departmentclothes/update_explanation_text() + . = ..() + explanation_text = "Be wearing a [targetuniform] at the end of the shift. + +/datum/objective/crew/assistant/departmentclothes/check_completion() + if(owner.current) + if(istype(H.w_uniform, targetuniform) + return 1 + return 0 + /datum/objective/crew/assistant/petsplosion explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." From 19628a2d9f2b3ce6c7107f8dca113d1be4eafdc0 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 20:23:19 -0400 Subject: [PATCH 069/144] hnnnnnnnnngh --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 31cd2279c9..4c54fbad78 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -552,7 +552,7 @@ /datum/objective/crew/assistant/departmentclothes/check_completion() if(owner.current) - if(istype(H.w_uniform, targetuniform) + if(istype(H.w_uniform, targetuniform)) return 1 return 0 From fe4839db72abfbb443677204db246a9ceef46554 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 20:30:12 -0400 Subject: [PATCH 070/144] compile dammit --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 4c54fbad78..394bd554ea 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -527,8 +527,8 @@ explanation_text = "Never break your vow of silence." /datum/objective/crew/mime/vow/check_completion() - var/list/say_log = owner.logging[INDIVIDUAL_SAY_LOG] if(owner.current) + var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] if(say_log.len > 0) return 0 return 1 From 16669efe4a205a99af56899073b136867fc25cf6 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 20:39:49 -0400 Subject: [PATCH 071/144] thERE WE GO --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 394bd554ea..c2924f1c1c 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -548,7 +548,7 @@ /datum/objective/crew/assistant/departmentclothes/update_explanation_text() . = ..() - explanation_text = "Be wearing a [targetuniform] at the end of the shift. + explanation_text = "Be wearing a [targetuniform] at the end of the shift." /datum/objective/crew/assistant/departmentclothes/check_completion() if(owner.current) From fb0fd1ca107818de90b082400c03bbb36e4e439b Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 20:52:28 -0400 Subject: [PATCH 072/144] adds comma --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index c2924f1c1c..a57f8665c3 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -541,7 +541,7 @@ /datum/objective/crew/assistant/departmentclothes/New() . = ..() - var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt) + var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt) var/list/validclothes = typesof(/obj/item/clothing/under/rank) - blacklist targetuniform = pick(validclothes) update_explanation_text() From 15ab156b86c2b2377a8bde90c1ad7ee4c506733e Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 21:04:45 -0400 Subject: [PATCH 073/144] moves crew objectives into separate files --- code/citadel/cit_crewobjectives.dm | 551 ------------------ .../cit_crewobjectives_cargo.dm | 72 +++ .../cit_crewobjectives_civilian.dm | 166 ++++++ .../cit_crewobjectives_command.dm | 43 ++ .../cit_crewobjectives_medical.dm | 137 +++++ .../cit_crewobjectives_science.dm | 49 ++ .../cit_crewobjectives_security.dm | 75 +++ tgstation.dme | 6 + 8 files changed, 548 insertions(+), 551 deletions(-) create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_cargo.dm create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_civilian.dm create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_command.dm create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_medical.dm create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_science.dm create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_security.dm diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index a57f8665c3..83422bd054 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -32,554 +32,3 @@ explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" /datum/objective/crew/proc/setup() - -/* COMMAND OBJECTIVES */ - -/datum/objective/crew/captain/ - -/datum/objective/crew/captain/hat //Ported from Goon - explanation_text = "Don't lose your hat." - -/datum/objective/crew/captain/hat/check_completion() - if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) - return 1 - else - return 0 - -/datum/objective/crew/captain/datfukkendisk //Ported from old Hippie - explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." - -/datum/objective/crew/captain/datfukkendisk/check_completion() - if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 - else - return 0 - -/datum/objective/crew/headofpersonnel/ - -/datum/objective/crew/headofpersonnel/ian //Ported from old Hippie - explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift." - -/datum/objective/crew/headofpersonnel/ian/check_completion() - if(owner.current) - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list) - if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) - return 1 - return 0 - return 0 - -/datum/objective/crew/headofpersonnel/datfukkendisk //Ported from old Hippie - explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." - -/datum/objective/crew/headofpersonnel/datfukkendisk/check_completion() - if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 - else - return 0 - -/* SECURITY OBJECTIVES */ - -/datum/objective/crew/headofsecurity/ - -/datum/objective/crew/headofsecurity/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - -/datum/objective/crew/headofsecurity/justicecrew/check_completion() - if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 - -/datum/objective/crew/headofsecurity/datfukkendisk //Ported from old Hippie - explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." - -/datum/objective/crew/headofsecurity/datfukkendisk/check_completion() - if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 - else - return 0 - -/datum/objective/crew/securityofficer/ - -/datum/objective/crew/securityofficer/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - -/datum/objective/crew/securityofficer/justicecrew/check_completion() - if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 - -/datum/objective/crew/warden/ - -/datum/objective/crew/warden/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - -/datum/objective/crew/warden/justicecrew/check_completion() - if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 - -/datum/objective/crew/detective/ - -/datum/objective/crew/detective/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - -/datum/objective/crew/detective/justicecrew/check_completion() - if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 - -/datum/objective/crew/lawyer/ - -/datum/objective/crew/lawyer/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - -/datum/objective/crew/lawyer/justicecrew/check_completion() - if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 - -/* SCIENCE OBJECTIVES */ - -/datum/objective/crew/researchdirector/ - -/datum/objective/crew/researchdirector/cyborgs //Ported from old Hippie - explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." - -/datum/objective/crew/researchdirector/cyborgs/New() - . = ..() - target_amount = rand(3,10) - update_explanation_text() - -/datum/objective/crew/researchdirector/cyborgs/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." - -/datum/objective/crew/researchdirector/cyborgs/check_completion() - var/borgcount = target_amount - for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if(!R.stat == DEAD) - borgcount-- - if(borgcount <= 0) - return 1 - else - return 0 - -/datum/objective/crew/roboticist/ - -/datum/objective/crew/roboticist/cyborgs //Ported from old Hippie - explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." - -/datum/objective/crew/roboticist/cyborgs/New() - . = ..() - target_amount = rand(3,10) - update_explanation_text() - -/datum/objective/crew/roboticist/cyborgs/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." - -/datum/objective/crew/roboticist/cyborgs/check_completion() - var/borgcount = target_amount - for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if(!R.stat == DEAD) - borgcount-- - if(borgcount <= 0) - return 1 - else - return 0 - -/* ENGINEERING OBJECTIVES */ - -/* MEDICAL OBJECTIVES */ - -/datum/objective/crew/chiefmedicalofficer/ - -/datum/objective/crew/chiefmedicalofficer/morgue //Ported from old Hippie - explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." - -/datum/objective/crew/chiefmedicalofficer/morgue/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION) - if(get_area(H) != /area/medical/morgue) - return 0 - return 1 - -/datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." - -/datum/objective/crew/chiefmedicalofficer/chems/New() - . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() - . = ..() - explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." - -/datum/objective/crew/chiefmedicalofficer/chems/check_completion() - if(owner.current) - if(!owner.current.stat == DEAD && owner.current.reagents) - if(owner.current.reagents.has_reagent(targetchem)) - return 1 - else - return 0 - -/datum/objective/crew/geneticist - -/datum/objective/crew/geneticist/morgue //Ported from old Hippie - explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." - -/datum/objective/crew/geneticist/morgue/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION) - if(get_area(H) != /area/medical/morgue) - return 0 - return 1 - -/datum/objective/crew/chemist/ - -/datum/objective/crew/chemist/chems //Ported from old Hippie - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." - -/datum/objective/crew/chemist/chems/New() - . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/chemist/chems/update_explanation_text() - . = ..() - explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." - -/datum/objective/crew/chemist/chems/check_completion() - if(owner.current) - if(!owner.current.stat == DEAD && owner.current.reagents) - if(owner.current.reagents.has_reagent(targetchem)) - return 1 - else - return 0 - -/datum/objective/crew/chemist/druglord //ported from old Hippie with adjustments - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have at least (somethin broke here) pills containing (report this on the development discussion channel of citadel's discord) when the shift ends." - -/datum/objective/crew/chemist/druglord/New() - . = ..() - target_amount = rand(5,50) - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/chemlist = drugs + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/chemist/druglord/update_explanation_text() - . = ..() - explanation_text = "Have at least [target_amount] pills containing [initial(chempath.name)] when the shift ends." - -/datum/objective/crew/chemist/druglord/check_completion() - var/pillcount = target_amount - if(owner.current) - if(owner.current.contents) - for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents()) - if(P.reagents.has_reagent(targetchem)) - pillcount-- - if(pillcount <= 0) - return 1 - else - return 0 - -/datum/objective/crew/virologist - -/datum/objective/crew/virologist/noinfections - explanation_text = "Ensure no living crew members are infected with harmful viruses at the end of the shift" - -/datum/objective/crew/virologist/noinfections/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(H.check_virus() == 2) - return 0 - return 1 - -/datum/objective/crew/medicaldoctor - -/datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie - explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." - -/datum/objective/crew/medicaldoctor/morgue/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION) - if(get_area(H) != /area/medical/morgue) - return 0 - return 1 - - -/* CARGO OBJECTIVES */ - -/datum/objective/crew/quartermaster - -/datum/objective/crew/quartermaster/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/quartermaster/petsplosion/New() - . = ..() - target_amount = rand(10,30) - update_explanation_text() - -/datum/objective/crew/quartermaster/petsplosion/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/quartermaster/petsplosion/check_completion() - var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!P.stat == DEAD) - if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) - petcount-- - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) - petcount-- - if(petcount <= 0) - return 1 - else - return 0 - -/datum/objective/crew/cargotechnician - -/datum/objective/crew/cargotechnician/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/cargotechnician/petsplosion/New() - . = ..() - target_amount = rand(10,30) - update_explanation_text() - -/datum/objective/crew/cargotechnician/petsplosion/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/cargotechnician/petsplosion/check_completion() - var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!P.stat == DEAD) - if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) - petcount-- - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) - petcount-- - if(petcount <= 0) - return 1 - else - return 0 - -/datum/objective/crew/shaftminer - -/datum/objective/crew/shaftminer/bubblegum - explanation_text = "Ensure Bubblegum is dead at the end of the shift." - -/datum/objective/crew/shaftminer/bubblegum/check_completion() - for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) - if(!B.stat == DEAD) - return 0 - return 1 - -/* CIVILLIAN OBJECTIVES */ - -/datum/objective/crew/botanist - -/datum/objective/crew/botanist/druglord //ported from old Hippie with adjustments - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends." - -/datum/objective/crew/botanist/druglord/New() - . = ..() - target_amount = rand(3,20) - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/botanist/druglord/update_explanation_text() - . = ..() - explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends." - -/datum/objective/crew/botanist/druglord/check_completion() - var/pillcount = target_amount - if(owner.current) - if(owner.current.contents) - for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents()) - if(P.reagents.has_reagent(targetchem)) - pillcount-- - if(pillcount <= 0) - return 1 - else - return 0 - -/datum/objective/crew/bartender - -/datum/objective/crew/bartender/responsibility - explanation_text = "Make sure nobody dies of alchohol poisoning." - -/datum/objective/crew/bartender/responsibility/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.drunkenness >= 80) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - return 0 - return 1 - -/datum/objective/crew/janitor - -/datum/objective/crew/janitor/clean //ported from old Hippie - var/list/areas = list() - explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." - -/datum/objective/crew/janitor/clean/New() - . = ..() - var/list/possibleareas = GLOB.teleportlocs - /area - typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat) - for(var/i in 1 to rand(1,6)) - areas |= pick_n_take(possibleareas) - update_explanation_text() - -/datum/objective/crew/janitor/clean/update_explanation_text() - . = ..() - explanation_text = "Ensure that the " - for(var/i in 1 to areas.len) - var/area/A = areas[i] - explanation_text += "[A]" - if(i != areas.len && areas.len >= 3) - explanation_text += ", " - if(i == areas.len - 1) - explanation_text += "and " - explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift." - -/datum/objective/crew/janitor/clean/check_completion() - for(var/area/A in areas) - for(var/obj/effect/decal/cleanable/C in area_contents(A)) - return 0 - return 1 - -/datum/objective/crew/clown - -/datum/objective/crew/clown/slipster //ported from old Hippie with adjustments - explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift." - -/datum/objective/crew/clown/slipster/New() - . = ..() - target_amount = rand(5, 20) - update_explanation_text() - -/datum/objective/crew/clown/slipster/update_explanation_text() - . = ..() - explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift." - -/datum/objective/crew/clown/slipster/check_completion() - var/list/uniqueslips = list() - if(owner.current) - for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) //100% open for badmin abuse - for(var/mob/living/carbon/human/H in PDA.slipvictims) - uniqueslips |= H - if(uniqueslips.len >= target_amount) - return 1 - else - return 0 - -/datum/objective/crew/mime - -/datum/objective/crew/mime/vow //ported from old Hippie - explanation_text = "Never break your vow of silence." - -/datum/objective/crew/mime/vow/check_completion() - if(owner.current) - var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] - if(say_log.len > 0) - return 0 - return 1 - -/datum/objective/crew/assistant - -/datum/objective/crew/assistant/departmentclothes - var/obj/item/clothing/under/rank/targetuniform - explanation_text = "Be wearing a (Yo, this objective broke. report this to citadels discord via the development channel) at the end of the shift." - -/datum/objective/crew/assistant/departmentclothes/New() - . = ..() - var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt) - var/list/validclothes = typesof(/obj/item/clothing/under/rank) - blacklist - targetuniform = pick(validclothes) - update_explanation_text() - -/datum/objective/crew/assistant/departmentclothes/update_explanation_text() - . = ..() - explanation_text = "Be wearing a [targetuniform] at the end of the shift." - -/datum/objective/crew/assistant/departmentclothes/check_completion() - if(owner.current) - if(istype(H.w_uniform, targetuniform)) - return 1 - return 0 - -/datum/objective/crew/assistant/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/assistant/petsplosion/New() - . = ..() - target_amount = rand(10,20) - update_explanation_text() - -/datum/objective/crew/assistant/petsplosion/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/assistant/petsplosion/check_completion() - var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!P.stat == DEAD) - if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) - petcount-- - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) - petcount-- - if(petcount <= 0) - return 1 - else - return 0 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm new file mode 100644 index 0000000000..8ce77ed93b --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -0,0 +1,72 @@ +/* CARGO OBJECTIVES */ + +/datum/objective/crew/quartermaster + +/datum/objective/crew/quartermaster/petsplosion + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/quartermaster/petsplosion/New() + . = ..() + target_amount = rand(10,30) + update_explanation_text() + +/datum/objective/crew/quartermaster/petsplosion/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/quartermaster/petsplosion/check_completion() + var/petcount = target_amount + for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) + if(!P.stat == DEAD) + if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + petcount-- + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) + petcount-- + if(petcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/cargotechnician + +/datum/objective/crew/cargotechnician/petsplosion + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/cargotechnician/petsplosion/New() + . = ..() + target_amount = rand(10,30) + update_explanation_text() + +/datum/objective/crew/cargotechnician/petsplosion/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/cargotechnician/petsplosion/check_completion() + var/petcount = target_amount + for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) + if(!P.stat == DEAD) + if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + petcount-- + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) + petcount-- + if(petcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/shaftminer + +/datum/objective/crew/shaftminer/bubblegum + explanation_text = "Ensure Bubblegum is dead at the end of the shift." + +/datum/objective/crew/shaftminer/bubblegum/check_completion() + for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) + if(!B.stat == DEAD) + return 0 + return 1 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm new file mode 100644 index 0000000000..57d54acf5a --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -0,0 +1,166 @@ +/* CIVILIAN OBJECTIVES */ + +/datum/objective/crew/botanist + +/datum/objective/crew/botanist/druglord //ported from old Hippie with adjustments + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends." + +/datum/objective/crew/botanist/druglord/New() + . = ..() + target_amount = rand(3,20) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/meds = typesof(/datum/reagent/medicine) - blacklist + var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) + targetchem = initial(chempath.id) + update_explanation_text() + +/datum/objective/crew/botanist/druglord/update_explanation_text() + . = ..() + explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends." + +/datum/objective/crew/botanist/druglord/check_completion() + var/pillcount = target_amount + if(owner.current) + if(owner.current.contents) + for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents()) + if(P.reagents.has_reagent(targetchem)) + pillcount-- + if(pillcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/bartender + +/datum/objective/crew/bartender/responsibility + explanation_text = "Make sure nobody dies of alchohol poisoning." + +/datum/objective/crew/bartender/responsibility/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.drunkenness >= 80) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + return 0 + return 1 + +/datum/objective/crew/janitor + +/datum/objective/crew/janitor/clean //ported from old Hippie + var/list/areas = list() + explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." + +/datum/objective/crew/janitor/clean/New() + . = ..() + var/list/possibleareas = GLOB.teleportlocs - /area - typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat) + for(var/i in 1 to rand(1,6)) + areas |= pick_n_take(possibleareas) + update_explanation_text() + +/datum/objective/crew/janitor/clean/update_explanation_text() + . = ..() + explanation_text = "Ensure that the " + for(var/i in 1 to areas.len) + var/area/A = areas[i] + explanation_text += "[A]" + if(i != areas.len && areas.len >= 3) + explanation_text += ", " + if(i == areas.len - 1) + explanation_text += "and " + explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift." + +/datum/objective/crew/janitor/clean/check_completion() + for(var/area/A in areas) + for(var/obj/effect/decal/cleanable/C in area_contents(A)) + return 0 + return 1 + +/datum/objective/crew/clown + +/datum/objective/crew/clown/slipster //ported from old Hippie with adjustments + explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift." + +/datum/objective/crew/clown/slipster/New() + . = ..() + target_amount = rand(5, 20) + update_explanation_text() + +/datum/objective/crew/clown/slipster/update_explanation_text() + . = ..() + explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift." + +/datum/objective/crew/clown/slipster/check_completion() + var/list/uniqueslips = list() + if(owner.current) + for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) //100% open for badmin abuse + for(var/mob/living/carbon/human/H in PDA.slipvictims) + uniqueslips |= H + if(uniqueslips.len >= target_amount) + return 1 + else + return 0 + +/datum/objective/crew/mime + +/datum/objective/crew/mime/vow //ported from old Hippie + explanation_text = "Never break your vow of silence." + +/datum/objective/crew/mime/vow/check_completion() + if(owner.current) + var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] + if(say_log.len > 0) + return 0 + return 1 + +/datum/objective/crew/assistant + +/datum/objective/crew/assistant/departmentclothes + var/obj/item/clothing/under/rank/targetuniform + explanation_text = "Be wearing a (Yo, this objective broke. report this to citadels discord via the development channel) at the end of the shift." + +/datum/objective/crew/assistant/departmentclothes/New() + . = ..() + var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt) + var/list/validclothes = typesof(/obj/item/clothing/under/rank) - blacklist + targetuniform = pick(validclothes) + update_explanation_text() + +/datum/objective/crew/assistant/departmentclothes/update_explanation_text() + . = ..() + explanation_text = "Be wearing a [targetuniform] at the end of the shift." + +/datum/objective/crew/assistant/departmentclothes/check_completion() + if(owner.current) + if(istype(owner.current.w_uniform, targetuniform)) + return 1 + return 0 + +/datum/objective/crew/assistant/petsplosion + explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/assistant/petsplosion/New() + . = ..() + target_amount = rand(10,20) + update_explanation_text() + +/datum/objective/crew/assistant/petsplosion/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." + +/datum/objective/crew/assistant/petsplosion/check_completion() + var/petcount = target_amount + for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) + if(!P.stat == DEAD) + if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + petcount-- + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) + petcount-- + if(petcount <= 0) + return 1 + else + return 0 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_command.dm b/code/citadel/crew_objectives/cit_crewobjectives_command.dm new file mode 100644 index 0000000000..c82954d6b2 --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_command.dm @@ -0,0 +1,43 @@ +/* COMMAND OBJECTIVES */ + +/datum/objective/crew/captain/ + +/datum/objective/crew/captain/hat //Ported from Goon + explanation_text = "Don't lose your hat." + +/datum/objective/crew/captain/hat/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) + return 1 + else + return 0 + +/datum/objective/crew/captain/datfukkendisk //Ported from old Hippie + explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." + +/datum/objective/crew/captain/datfukkendisk/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 + +/datum/objective/crew/headofpersonnel/ + +/datum/objective/crew/headofpersonnel/ian //Ported from old Hippie + explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift." + +/datum/objective/crew/headofpersonnel/ian/check_completion() + if(owner.current) + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list) + if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) + return 1 + return 0 + return 0 + +/datum/objective/crew/headofpersonnel/datfukkendisk //Ported from old Hippie + explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." + +/datum/objective/crew/headofpersonnel/datfukkendisk/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm new file mode 100644 index 0000000000..0e3c92b338 --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm @@ -0,0 +1,137 @@ +/* MEDICAL OBJECTIVES */ + +/datum/objective/crew/chiefmedicalofficer/ + +/datum/objective/crew/chiefmedicalofficer/morgue //Ported from old Hippie + explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + +/datum/objective/crew/chiefmedicalofficer/morgue/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(get_area(H) != /area/medical/morgue) + return 0 + return 1 + +/datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." + +/datum/objective/crew/chiefmedicalofficer/chems/New() + . = ..() + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/meds = typesof(/datum/reagent/medicine) - blacklist + var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) + targetchem = initial(chempath.id) + update_explanation_text() + +/datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() + . = ..() + explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." + +/datum/objective/crew/chiefmedicalofficer/chems/check_completion() + if(owner.current) + if(!owner.current.stat == DEAD && owner.current.reagents) + if(owner.current.reagents.has_reagent(targetchem)) + return 1 + else + return 0 + +/datum/objective/crew/geneticist + +/datum/objective/crew/geneticist/morgue //Ported from old Hippie + explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + +/datum/objective/crew/geneticist/morgue/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(get_area(H) != /area/medical/morgue) + return 0 + return 1 + +/datum/objective/crew/chemist/ + +/datum/objective/crew/chemist/chems //Ported from old Hippie + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." + +/datum/objective/crew/chemist/chems/New() + . = ..() + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/meds = typesof(/datum/reagent/medicine) - blacklist + var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) + targetchem = initial(chempath.id) + update_explanation_text() + +/datum/objective/crew/chemist/chems/update_explanation_text() + . = ..() + explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." + +/datum/objective/crew/chemist/chems/check_completion() + if(owner.current) + if(!owner.current.stat == DEAD && owner.current.reagents) + if(owner.current.reagents.has_reagent(targetchem)) + return 1 + else + return 0 + +/datum/objective/crew/chemist/druglord //ported from old Hippie with adjustments + var/targetchem = "none" + var/datum/reagent/chempath + explanation_text = "Have at least (somethin broke here) pills containing (report this on the development discussion channel of citadel's discord) when the shift ends." + +/datum/objective/crew/chemist/druglord/New() + . = ..() + target_amount = rand(5,50) + var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) + var/drugs = typesof(/datum/reagent/drug) - blacklist + var/chemlist = drugs + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + chempath = pick(chemlist) + targetchem = initial(chempath.id) + update_explanation_text() + +/datum/objective/crew/chemist/druglord/update_explanation_text() + . = ..() + explanation_text = "Have at least [target_amount] pills containing [initial(chempath.name)] when the shift ends." + +/datum/objective/crew/chemist/druglord/check_completion() + var/pillcount = target_amount + if(owner.current) + if(owner.current.contents) + for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents()) + if(P.reagents.has_reagent(targetchem)) + pillcount-- + if(pillcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/virologist + +/datum/objective/crew/virologist/noinfections + explanation_text = "Ensure no living crew members are infected with harmful viruses at the end of the shift" + +/datum/objective/crew/virologist/noinfections/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(!H.stat == DEAD) + if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.check_virus() == 2) + return 0 + return 1 + +/datum/objective/crew/medicaldoctor + +/datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie + explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + +/datum/objective/crew/medicaldoctor/morgue/check_completion() + for(var/mob/living/carbon/human/H in GLOB.mob_list) + if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(get_area(H) != /area/medical/morgue) + return 0 + return 1 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm new file mode 100644 index 0000000000..a186242141 --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -0,0 +1,49 @@ +/* SCIENCE OBJECTIVES */ + +/datum/objective/crew/researchdirector/ + +/datum/objective/crew/researchdirector/cyborgs //Ported from old Hippie + explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." + +/datum/objective/crew/researchdirector/cyborgs/New() + . = ..() + target_amount = rand(3,10) + update_explanation_text() + +/datum/objective/crew/researchdirector/cyborgs/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." + +/datum/objective/crew/researchdirector/cyborgs/check_completion() + var/borgcount = target_amount + for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) + if(!R.stat == DEAD) + borgcount-- + if(borgcount <= 0) + return 1 + else + return 0 + +/datum/objective/crew/roboticist/ + +/datum/objective/crew/roboticist/cyborgs //Ported from old Hippie + explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." + +/datum/objective/crew/roboticist/cyborgs/New() + . = ..() + target_amount = rand(3,10) + update_explanation_text() + +/datum/objective/crew/roboticist/cyborgs/update_explanation_text() + . = ..() + explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." + +/datum/objective/crew/roboticist/cyborgs/check_completion() + var/borgcount = target_amount + for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) + if(!R.stat == DEAD) + borgcount-- + if(borgcount <= 0) + return 1 + else + return 0 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_security.dm b/code/citadel/crew_objectives/cit_crewobjectives_security.dm new file mode 100644 index 0000000000..b453bd8633 --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_security.dm @@ -0,0 +1,75 @@ +/* SECURITY OBJECTIVES */ + +/datum/objective/crew/headofsecurity/ + +/datum/objective/crew/headofsecurity/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/headofsecurity/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(M.current)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/headofsecurity/datfukkendisk //Ported from old Hippie + explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." + +/datum/objective/crew/headofsecurity/datfukkendisk/check_completion() + if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 + +/datum/objective/crew/securityofficer/ + +/datum/objective/crew/securityofficer/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/securityofficer/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(M.current)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/warden/ + +/datum/objective/crew/warden/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/warden/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(M.current)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/detective/ + +/datum/objective/crew/detective/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/detective/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(M.current)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 + +/datum/objective/crew/lawyer/ + +/datum/objective/crew/lawyer/justicecrew + explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + +/datum/objective/crew/lawyer/justicecrew/check_completion() + if(owner.current) + for(var/datum/mind/M in SSticker.minds) + if(M.current && isliving(M.current)) + if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + return 0 + return 1 diff --git a/tgstation.dme b/tgstation.dme index 19ea044625..3d44b7c398 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -175,6 +175,12 @@ #include "code\citadel\cit_uniforms.dm" #include "code\citadel\cit_vendors.dm" #include "code\citadel\dogborgstuff.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_cargo.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_civilian.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_command.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_medical.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_science.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_security.dm" #include "code\citadel\custom_loadout\custom_items.dm" #include "code\citadel\custom_loadout\load_to_mob.dm" #include "code\citadel\custom_loadout\read_from_file.dm" From 68a6ff5cfbc2e167f29a9d4b22f03cac3411505f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 22:24:10 -0400 Subject: [PATCH 074/144] just,,, compile, please --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 57d54acf5a..eb1490c017 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -133,7 +133,8 @@ /datum/objective/crew/assistant/departmentclothes/check_completion() if(owner.current) - if(istype(owner.current.w_uniform, targetuniform)) + var/mob/living/carbon/human/H = owner.current + if(istype(H.w_uniform, targetuniform)) return 1 return 0 From a972a6272fad3761b933d2456bd23ff2bb70186e Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 6 Sep 2017 22:54:51 -0400 Subject: [PATCH 075/144] chef objective --- .../cit_crewobjectives_civilian.dm | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index eb1490c017..dc461041dd 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -34,6 +34,32 @@ else return 0 +/datum/objective/crew/chef + +/datum/objective/crew/chef/foodhoard + var/datum/crafting_recipe/food/targetfood + var/obj/item/reagent_containers/food/foodpath + explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom." + +/datum/objective/crew/chef/foodhoard/New() + . = ..() + target_amount = rand(2,10) + var/blacklist = list(/datum/crafting_recipe/food) + var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist + targetfood = pick(possiblefoods) + foodpath = targetfood.result + update_explanation_text() + +/datum/objective/crew/chef/foodhoard/update_explanation_text() + . = ..() + explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom." + +/datum/objective/crew/chef/foodhoard/check_completion() + if(owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) + return 1 + else + return 0 + /datum/objective/crew/bartender /datum/objective/crew/bartender/responsibility From d5151ed91899aa08e0ca4170f302993aacb7422c Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 7 Sep 2017 01:01:23 -0400 Subject: [PATCH 076/144] fixes --- code/citadel/cit_crewobjectives.dm | 2 +- .../crew_objectives/cit_crewobjectives_civilian.dm | 12 ++++++------ code/modules/mob/dead/new_player/new_player.dm | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 83422bd054..f40d1fff3c 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,6 +1,6 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() for(var/datum/mind/crewMind in SSticker.minds) - if(prob(10) && GLOB.master_mode != "extended")//extended is supposed to have less chaos + if(prob(10) && !issilicon(crewMind.current) && GLOB.master_mode != "extended")//extended is supposed to have less chaos generate_miscreant_objectives(crewMind) else generate_individual_objectives(crewMind) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index dc461041dd..188b825a3b 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -34,27 +34,27 @@ else return 0 -/datum/objective/crew/chef +/datum/objective/crew/cook -/datum/objective/crew/chef/foodhoard +/datum/objective/crew/cook/foodhoard var/datum/crafting_recipe/food/targetfood var/obj/item/reagent_containers/food/foodpath explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom." -/datum/objective/crew/chef/foodhoard/New() +/datum/objective/crew/cook/foodhoard/New() . = ..() target_amount = rand(2,10) var/blacklist = list(/datum/crafting_recipe/food) var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist targetfood = pick(possiblefoods) - foodpath = targetfood.result + foodpath = initial(targetfood.result) update_explanation_text() -/datum/objective/crew/chef/foodhoard/update_explanation_text() +/datum/objective/crew/cook/foodhoard/update_explanation_text() . = ..() explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom." -/datum/objective/crew/chef/foodhoard/check_completion() +/datum/objective/crew/cook/foodhoard/check_completion() if(owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) return 1 else diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 428773bd9b..19ed0bed9d 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -367,7 +367,7 @@ if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() - if(prob(10) && GLOB.master_mode != "extended") + if(prob(10) && !issilicon(humanc) && GLOB.master_mode != "extended") SSticker.generate_miscreant_objectives(humanc.mind) else SSticker.generate_individual_objectives(humanc.mind) From f8d149975ff0233209d2c7a72d15b7419d04b1ae Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 7 Sep 2017 15:43:17 -0400 Subject: [PATCH 077/144] engineering objectives, removes assistant petsplosion --- .../cit_crewobjectives_civilian.dm | 36 ++------------ .../cit_crewobjectives_engineering.dm | 47 +++++++++++++++++++ tgstation.dme | 1 + 3 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 code/citadel/crew_objectives/cit_crewobjectives_engineering.dm diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 188b825a3b..65bb949c37 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -87,14 +87,14 @@ /datum/objective/crew/janitor/clean/update_explanation_text() . = ..() - explanation_text = "Ensure that the " + explanation_text = "Ensure that the" for(var/i in 1 to areas.len) var/area/A = areas[i] - explanation_text += "[A]" + explanation_text += " [A]" if(i != areas.len && areas.len >= 3) - explanation_text += ", " + explanation_text += "," if(i == areas.len - 1) - explanation_text += "and " + explanation_text += "and" explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift." /datum/objective/crew/janitor/clean/check_completion() @@ -163,31 +163,3 @@ if(istype(H.w_uniform, targetuniform)) return 1 return 0 - -/datum/objective/crew/assistant/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/assistant/petsplosion/New() - . = ..() - target_amount = rand(10,20) - update_explanation_text() - -/datum/objective/crew/assistant/petsplosion/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/assistant/petsplosion/check_completion() - var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!P.stat == DEAD) - if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) - petcount-- - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) - petcount-- - if(petcount <= 0) - return 1 - else - return 0 diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm new file mode 100644 index 0000000000..88eaa9e237 --- /dev/null +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -0,0 +1,47 @@ +/* ENGINEERING OBJECTIVES */ + +/datum/objective/crew/chiefengineer + +/datum/objective/crew/chiefengineer/integrity //ported from old Hippie + explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends." + +/datum/objective/crew/chiefengineer/integrity/New() + . = ..() + target_amount = rand(60,95) + update_explanation_text() + +/datum/objective/crew/chiefengineer/integrity/update_explanation_text() + . = ..() + explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends." + +/datum/objective/crew/chiefengineer/integrity/check_completion() + var/datum/station_state/end_state = new /datum/station_state() + end_state.count() + var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) + if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount) + return 1 + else + return 0 + +/datum/objective/crew/stationengineer + +/datum/objective/crew/stationengineer/integrity + explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends." + +/datum/objective/crew/stationengineer/integrity/New() + . = ..() + target_amount = rand(60,95) + update_explanation_text() + +/datum/objective/crew/stationengineer/integrity/update_explanation_text() + . = ..() + explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends." + +/datum/objective/crew/stationengineer/integrity/check_completion() + var/datum/station_state/end_state = new /datum/station_state() + end_state.count() + var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) + if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount) + return 1 + else + return 0 diff --git a/tgstation.dme b/tgstation.dme index 3d44b7c398..da750b8b1d 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -178,6 +178,7 @@ #include "code\citadel\crew_objectives\cit_crewobjectives_cargo.dm" #include "code\citadel\crew_objectives\cit_crewobjectives_civilian.dm" #include "code\citadel\crew_objectives\cit_crewobjectives_command.dm" +#include "code\citadel\crew_objectives\cit_crewobjectives_engineering.dm" #include "code\citadel\crew_objectives\cit_crewobjectives_medical.dm" #include "code\citadel\crew_objectives\cit_crewobjectives_science.dm" #include "code\citadel\crew_objectives\cit_crewobjectives_security.dm" From 9116be1e53576f4a9a64284c5e8fedfdb926b4a2 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 16:20:40 -0400 Subject: [PATCH 078/144] Extra objectives for assistants, poly objective for CE --- .../cit_crewobjectives_civilian.dm | 64 +++++++++++++++++-- .../cit_crewobjectives_engineering.dm | 12 +++- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 65bb949c37..15c115128c 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -44,7 +44,7 @@ /datum/objective/crew/cook/foodhoard/New() . = ..() target_amount = rand(2,10) - var/blacklist = list(/datum/crafting_recipe/food) + var/blacklist = list(/datum/crafting_recipe/food, /datum/crafting_recipe/food/cak) var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist targetfood = pick(possiblefoods) foodpath = initial(targetfood.result) @@ -63,7 +63,7 @@ /datum/objective/crew/bartender /datum/objective/crew/bartender/responsibility - explanation_text = "Make sure nobody dies of alchohol poisoning." + explanation_text = "Make sure nobody dies of alcohol poisoning." /datum/objective/crew/bartender/responsibility/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) @@ -76,11 +76,16 @@ /datum/objective/crew/janitor/clean //ported from old Hippie var/list/areas = list() + var/hardmode = 0 explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." /datum/objective/crew/janitor/clean/New() . = ..() - var/list/possibleareas = GLOB.teleportlocs - /area - typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat) + if(prob(1)) + hardmode = 1 + var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat)) + var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine)) + var/list/possibleareas = GLOB.teleportlocs - /area - [(hardmode == 1) ? blacklisthard : blacklistnormal] for(var/i in 1 to rand(1,6)) areas |= pick_n_take(possibleareas) update_explanation_text() @@ -96,6 +101,8 @@ if(i == areas.len - 1) explanation_text += "and" explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift." + if(hardmode) + explanation_text += " Chop-chop." /datum/objective/crew/janitor/clean/check_completion() for(var/area/A in areas) @@ -120,7 +127,7 @@ /datum/objective/crew/clown/slipster/check_completion() var/list/uniqueslips = list() if(owner.current) - for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) //100% open for badmin abuse + for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) for(var/mob/living/carbon/human/H in PDA.slipvictims) uniqueslips |= H if(uniqueslips.len >= target_amount) @@ -163,3 +170,52 @@ if(istype(H.w_uniform, targetuniform)) return 1 return 0 + +/datum/objective/crew/assistant/spacesuit //ported from Goon + explanation_text = "Get your grubby hands on a space suit." + +/datum/objective/crew/assistant/spacesuit/New() + . = ..() + update_explanation_text() + +/datum/objective/crew/assistant/spacesuit/update_explanation_text() + . = ..() + if(owner.current) + var/mob/living/carbon/human/H = owner.current + explanation_text = "Get your " + if(H.dna.species.id == "avian") + explanation_text += "scratchy claws " + else if(H.dna.species.id == "mammal") + explanation_text += "dirty paws " + else if(H.dna.species.id == "aquatic") + explanation_text += "fishy hands " + else if(H.dna.species.id == "xeno") + explanation_text += "weird claws " + else if(H.dna.species.id == "guilmon") + explanation_text += "digital claws " + else if(H.dna.species.id == "lizard") + explanation_text += "slimy claws " + else if(H.dna.species.id == "datashark") + explanation_text += "glitchy hands " + else if(H.dna.species.id == "insect") + explanation_text += "gross grabbers " + else + explanation_text += "grubby hands " + explanation_text += "on a space suit." + +/datum/objective/crew/assistant/spacesuit/check_completion() + if(owner.current && owner.current.check_contents_for(typesof(/obj/item/clothing/suit/space))) + return 1 + else + return 0 + +/datum/objective/crew/assistant/promotion //ported from Goon + explanation_text = "Have a non-assistant ID registered to you at the end of the shift." + +/datum/objective/crew/assistant/promotion/check_completion() + if(owner.current) + var/mob/living/carbon/human/H = owner.current + if(istype(H.get_idcard()) + if(!H.get_assignment == "Assistant" && !H.get_assignment == "No id" && !H.get_assignment == "No job") + return 1 + return 0 \ No newline at end of file diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm index 88eaa9e237..20347c1e60 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -23,9 +23,19 @@ else return 0 +/datum/objective/crew/chiefengineer/poly + explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift." + +/datum/objective/crew/chiefengineer/poly/check_completion() + for(var/mob/living/simple_animal/pet/parrot/Poly/dumbbird in GLOB.mob_list) + if(!dumbbird.stat == DEAD && dumbbird.ears) + if(istype(dumbbird.ears, /obj/item/device/radio/headset) + return 1 + return 0 + /datum/objective/crew/stationengineer -/datum/objective/crew/stationengineer/integrity +/datum/objective/crew/stationengineer/integrity //ported from old Hippie explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends." /datum/objective/crew/stationengineer/integrity/New() From 547799c3acc4ad2c76c48ea614b2d815cd90d0d5 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 16:26:33 -0400 Subject: [PATCH 079/144] bluh --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 2 +- code/citadel/crew_objectives/cit_crewobjectives_engineering.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 15c115128c..c19059c85c 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -216,6 +216,6 @@ if(owner.current) var/mob/living/carbon/human/H = owner.current if(istype(H.get_idcard()) - if(!H.get_assignment == "Assistant" && !H.get_assignment == "No id" && !H.get_assignment == "No job") + if(!H.get_assignment() == "Assistant" && !H.get_assignment() == "No id" && !H.get_assignment() == "No job") return 1 return 0 \ No newline at end of file diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm index 20347c1e60..38d113f764 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -29,7 +29,7 @@ /datum/objective/crew/chiefengineer/poly/check_completion() for(var/mob/living/simple_animal/pet/parrot/Poly/dumbbird in GLOB.mob_list) if(!dumbbird.stat == DEAD && dumbbird.ears) - if(istype(dumbbird.ears, /obj/item/device/radio/headset) + if(istype(dumbbird.ears, /obj/item/device/radio/headset)) return 1 return 0 From c85291071484b2d05f244687f8bd3390640069d8 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 16:34:20 -0400 Subject: [PATCH 080/144] there we go --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index c19059c85c..4883481152 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -215,7 +215,7 @@ /datum/objective/crew/assistant/promotion/check_completion() if(owner.current) var/mob/living/carbon/human/H = owner.current - if(istype(H.get_idcard()) + if(istype(H.get_idcard())) if(!H.get_assignment() == "Assistant" && !H.get_assignment() == "No id" && !H.get_assignment() == "No job") return 1 return 0 \ No newline at end of file From 3852a246f8414745497816c683439671a80a2293 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 16:47:42 -0400 Subject: [PATCH 081/144] byond cant handle ternaries --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 4883481152..66674a2c93 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -85,7 +85,10 @@ hardmode = 1 var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat)) var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine)) - var/list/possibleareas = GLOB.teleportlocs - /area - [(hardmode == 1) ? blacklisthard : blacklistnormal] + if(hardmode) + var/list/possibleareas = GLOB.teleportlocs - /area - blacklisthard + else + var/list/possibleareas = GLOB.teleportlocs - /area - blacklistnormal for(var/i in 1 to rand(1,6)) areas |= pick_n_take(possibleareas) update_explanation_text() From 591a086a4f9a5d1eb732cabbcfe684f182298adf Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 17:17:59 -0400 Subject: [PATCH 082/144] .... apparently poly isn't a pet? --- code/citadel/crew_objectives/cit_crewobjectives_engineering.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm index 38d113f764..36a44ef9a7 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -27,7 +27,7 @@ explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift." /datum/objective/crew/chiefengineer/poly/check_completion() - for(var/mob/living/simple_animal/pet/parrot/Poly/dumbbird in GLOB.mob_list) + for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list) if(!dumbbird.stat == DEAD && dumbbird.ears) if(istype(dumbbird.ears, /obj/item/device/radio/headset)) return 1 From bed1f4d88efe2ae00ccf244912f6032e1d5698cb Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 17:27:57 -0400 Subject: [PATCH 083/144] gonna compile sooner or later --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 66674a2c93..008ee69996 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -85,10 +85,11 @@ hardmode = 1 var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat)) var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine)) + var/list/possibleareas = list() if(hardmode) - var/list/possibleareas = GLOB.teleportlocs - /area - blacklisthard + possibleareas = GLOB.teleportlocs - /area - blacklisthard else - var/list/possibleareas = GLOB.teleportlocs - /area - blacklistnormal + possibleareas = GLOB.teleportlocs - /area - blacklistnormal for(var/i in 1 to rand(1,6)) areas |= pick_n_take(possibleareas) update_explanation_text() From c1078c2c3ee1636d73a9116c8c8b4b9ae394e6eb Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 8 Sep 2017 17:56:42 -0400 Subject: [PATCH 084/144] eugh --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 008ee69996..c7324c2ff6 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -219,7 +219,8 @@ /datum/objective/crew/assistant/promotion/check_completion() if(owner.current) var/mob/living/carbon/human/H = owner.current - if(istype(H.get_idcard())) + var/obj/item/card/id/theID = H.get_idcard() + if(istype(theID)) if(!H.get_assignment() == "Assistant" && !H.get_assignment() == "No id" && !H.get_assignment() == "No job") return 1 return 0 \ No newline at end of file From 0ba79c0ad58f6b7ab92b4a65bac70ec774b05357 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 10 Sep 2017 02:46:06 -0400 Subject: [PATCH 085/144] i ded (replaces justicecrew for non-lawyer sec with a more open objective) --- .../cit_crewobjectives_security.dm | 114 ++++++++++++------ 1 file changed, 79 insertions(+), 35 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_security.dm b/code/citadel/crew_objectives/cit_crewobjectives_security.dm index b453bd8633..d0e2443591 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_security.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_security.dm @@ -2,17 +2,6 @@ /datum/objective/crew/headofsecurity/ -/datum/objective/crew/headofsecurity/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." - -/datum/objective/crew/headofsecurity/justicecrew/check_completion() - if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 - /datum/objective/crew/headofsecurity/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." @@ -22,44 +11,99 @@ else return 0 +/datum/objective/crew/headofsecurity/enjoyyourstay + explanation_text = "Welcome to Space Station 13. Enjoy your stay." + +/datum/objective/crew/headofsecurity/enjoyyourstay/New() + . = ..() + update_explanation_text() + +/datum/objective/crew/headofsecurity/enjoyyourstay/update_explanation_text() + . = ..() + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.") + explanation_text = pick(edglines) + +/datum/objective/crew/headofsecurity/enjoyyourstay/check_completion() + explanation_text = "Enforce Space Law at all costs." + if(owner.current) + var/mob/living/carbon/human/H = owner.current + var/obj/item/card/id/theID = H.get_idcard() + if(istype(theID)) + if(!H.get_assignment() == "Head of Security") + return 0 + return 1 + /datum/objective/crew/securityofficer/ -/datum/objective/crew/securityofficer/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." +/datum/objective/crew/securityofficer/enjoyyourstay + explanation_text = "Welcome to Space Station 13. Enjoy your stay." -/datum/objective/crew/securityofficer/justicecrew/check_completion() +/datum/objective/crew/securityofficer/enjoyyourstay/New() + . = ..() + update_explanation_text() + +/datum/objective/crew/securityofficer/enjoyyourstay/update_explanation_text() + . = ..() + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.") + explanation_text = pick(edglines) + +/datum/objective/crew/securityofficer/enjoyyourstay/check_completion() + explanation_text = "Enforce Space Law at all costs." if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 + var/mob/living/carbon/human/H = owner.current + var/obj/item/card/id/theID = H.get_idcard() + if(istype(theID)) + if(!H.get_assignment() == "Security Officer") + return 0 + return 1 /datum/objective/crew/warden/ -/datum/objective/crew/warden/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." +/datum/objective/crew/warden/enjoyyourstay + explanation_text = "Welcome to Space Station 13. Enjoy your stay." -/datum/objective/crew/warden/justicecrew/check_completion() +/datum/objective/crew/warden/enjoyyourstay/New() + . = ..() + update_explanation_text() + +/datum/objective/crew/warden/enjoyyourstay/update_explanation_text() + . = ..() + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.") + explanation_text = pick(edglines) + +/datum/objective/crew/warden/enjoyyourstay/check_completion() + explanation_text = "Enforce Space Law at all costs." if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 + var/mob/living/carbon/human/H = owner.current + var/obj/item/card/id/theID = H.get_idcard() + if(istype(theID)) + if(!H.get_assignment() == "Warden") + return 0 + return 1 /datum/objective/crew/detective/ -/datum/objective/crew/detective/justicecrew - explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." +/datum/objective/crew/detective/enjoyyourstay + explanation_text = "Welcome to Space Station 13. Enjoy your stay." -/datum/objective/crew/detective/justicecrew/check_completion() +/datum/objective/crew/detective/enjoyyourstay/New() + . = ..() + update_explanation_text() + +/datum/objective/crew/detective/enjoyyourstay/update_explanation_text() + . = ..() + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Well, at least you know fashion.") + explanation_text = pick(edglines) + +/datum/objective/crew/detective/enjoyyourstay/check_completion() + explanation_text = "Enforce Space Law at all costs." if(owner.current) - for(var/datum/mind/M in SSticker.minds) - if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 + var/mob/living/carbon/human/H = owner.current + var/obj/item/card/id/theID = H.get_idcard() + if(istype(theID)) + if(!H.get_assignment() == "Detective") + return 0 + return 1 /datum/objective/crew/lawyer/ From 45330c909aebad902e6c082bf27f6ed1530eb0bf Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 10 Sep 2017 02:51:58 -0400 Subject: [PATCH 086/144] aphrodisiac is drugs now, no need to add them to the chemlist manually --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 2 +- code/citadel/crew_objectives/cit_crewobjectives_medical.dm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index c7324c2ff6..4a51b1c3fa 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -13,7 +13,7 @@ var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + var/chemlist = drugs + meds chempath = pick(chemlist) targetchem = initial(chempath.id) update_explanation_text() diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm index 0e3c92b338..ea2b2dca77 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm @@ -22,7 +22,7 @@ var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + var/chemlist = drugs + meds chempath = pick(chemlist) targetchem = initial(chempath.id) update_explanation_text() @@ -63,7 +63,7 @@ var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + var/chemlist = drugs + meds chempath = pick(chemlist) targetchem = initial(chempath.id) update_explanation_text() @@ -90,7 +90,7 @@ target_amount = rand(5,50) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) var/drugs = typesof(/datum/reagent/drug) - blacklist - var/chemlist = drugs + /datum/reagent/anaphrodisiac + /datum/reagent/aphrodisiac + var/chemlist = drugs chempath = pick(chemlist) targetchem = initial(chempath.id) update_explanation_text() From 9676b9f26dfe0d2663541d194afdbbe54ede500a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sat, 16 Sep 2017 23:18:57 -0400 Subject: [PATCH 087/144] places the cat firmly on a table --- .../cit_crewobjectives_cargo.dm | 12 ++-- .../cit_crewobjectives_civilian.dm | 36 ++++++------ .../cit_crewobjectives_command.dm | 18 +++--- .../cit_crewobjectives_engineering.dm | 12 ++-- .../cit_crewobjectives_medical.dm | 28 +++++----- .../cit_crewobjectives_science.dm | 8 +-- .../cit_crewobjectives_security.dm | 56 ++++++------------- 7 files changed, 73 insertions(+), 97 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index 8ce77ed93b..bb3ef8b630 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -26,9 +26,9 @@ if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/cargotechnician @@ -56,9 +56,9 @@ if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/shaftminer @@ -68,5 +68,5 @@ /datum/objective/crew/shaftminer/bubblegum/check_completion() for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) if(!B.stat == DEAD) - return 0 - return 1 + return FALSE + return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 4a51b1c3fa..500196bf98 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -30,9 +30,9 @@ if(P.reagents.has_reagent(targetchem)) pillcount-- if(pillcount <= 0) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/cook @@ -56,9 +56,9 @@ /datum/objective/crew/cook/foodhoard/check_completion() if(owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/bartender @@ -69,8 +69,8 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.drunkenness >= 80) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/crew/janitor @@ -111,8 +111,8 @@ /datum/objective/crew/janitor/clean/check_completion() for(var/area/A in areas) for(var/obj/effect/decal/cleanable/C in area_contents(A)) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/crew/clown @@ -135,9 +135,9 @@ for(var/mob/living/carbon/human/H in PDA.slipvictims) uniqueslips |= H if(uniqueslips.len >= target_amount) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/mime @@ -148,8 +148,8 @@ if(owner.current) var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] if(say_log.len > 0) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/crew/assistant @@ -172,8 +172,8 @@ if(owner.current) var/mob/living/carbon/human/H = owner.current if(istype(H.w_uniform, targetuniform)) - return 1 - return 0 + return TRUE + return FALSE /datum/objective/crew/assistant/spacesuit //ported from Goon explanation_text = "Get your grubby hands on a space suit." @@ -209,9 +209,9 @@ /datum/objective/crew/assistant/spacesuit/check_completion() if(owner.current && owner.current.check_contents_for(typesof(/obj/item/clothing/suit/space))) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/assistant/promotion //ported from Goon explanation_text = "Have a non-assistant ID registered to you at the end of the shift." @@ -222,5 +222,5 @@ var/obj/item/card/id/theID = H.get_idcard() if(istype(theID)) if(!H.get_assignment() == "Assistant" && !H.get_assignment() == "No id" && !H.get_assignment() == "No job") - return 1 - return 0 \ No newline at end of file + return TRUE + return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_command.dm b/code/citadel/crew_objectives/cit_crewobjectives_command.dm index c82954d6b2..7ea715dfa8 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_command.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_command.dm @@ -7,18 +7,18 @@ /datum/objective/crew/captain/hat/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/captain/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." /datum/objective/crew/captain/datfukkendisk/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/headofpersonnel/ @@ -29,15 +29,15 @@ if(owner.current) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list) if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) - return 1 - return 0 - return 0 + return TRUE + return FALSE + return FALSE /datum/objective/crew/headofpersonnel/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." /datum/objective/crew/headofpersonnel/datfukkendisk/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 + return TRUE else - return 0 + return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm index 36a44ef9a7..bb042f50aa 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -19,9 +19,9 @@ end_state.count() var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/chiefengineer/poly explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift." @@ -30,8 +30,8 @@ for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list) if(!dumbbird.stat == DEAD && dumbbird.ears) if(istype(dumbbird.ears, /obj/item/device/radio/headset)) - return 1 - return 0 + return TRUE + return FALSE /datum/objective/crew/stationengineer @@ -52,6 +52,6 @@ end_state.count() var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount) - return 1 + return TRUE else - return 0 + return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm index ea2b2dca77..ec4228cc27 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm @@ -9,8 +9,8 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION) if(get_area(H) != /area/medical/morgue) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie var/targetchem = "none" @@ -35,9 +35,9 @@ if(owner.current) if(!owner.current.stat == DEAD && owner.current.reagents) if(owner.current.reagents.has_reagent(targetchem)) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/geneticist @@ -48,8 +48,8 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION) if(get_area(H) != /area/medical/morgue) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/crew/chemist/ @@ -76,9 +76,9 @@ if(owner.current) if(!owner.current.stat == DEAD && owner.current.reagents) if(owner.current.reagents.has_reagent(targetchem)) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/chemist/druglord //ported from old Hippie with adjustments var/targetchem = "none" @@ -107,9 +107,9 @@ if(P.reagents.has_reagent(targetchem)) pillcount-- if(pillcount <= 0) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/virologist @@ -121,8 +121,8 @@ if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(H.check_virus() == 2) - return 0 - return 1 + return FALSE + return TRUE /datum/objective/crew/medicaldoctor @@ -133,5 +133,5 @@ for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION) if(get_area(H) != /area/medical/morgue) - return 0 - return 1 + return FALSE + return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index a186242141..addca3dbbf 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -20,9 +20,9 @@ if(!R.stat == DEAD) borgcount-- if(borgcount <= 0) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/roboticist/ @@ -44,6 +44,6 @@ if(!R.stat == DEAD) borgcount-- if(borgcount <= 0) - return 1 + return TRUE else - return 0 + return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_security.dm b/code/citadel/crew_objectives/cit_crewobjectives_security.dm index d0e2443591..a20e48a6a5 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_security.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_security.dm @@ -7,9 +7,9 @@ /datum/objective/crew/headofsecurity/datfukkendisk/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/headofsecurity/enjoyyourstay explanation_text = "Welcome to Space Station 13. Enjoy your stay." @@ -20,18 +20,12 @@ /datum/objective/crew/headofsecurity/enjoyyourstay/update_explanation_text() . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.") + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.") explanation_text = pick(edglines) /datum/objective/crew/headofsecurity/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law at all costs." - if(owner.current) - var/mob/living/carbon/human/H = owner.current - var/obj/item/card/id/theID = H.get_idcard() - if(istype(theID)) - if(!H.get_assignment() == "Head of Security") - return 0 - return 1 + explanation_text = "Enforce Space Law to the best of your ability." + return TRUE /datum/objective/crew/securityofficer/ @@ -44,18 +38,12 @@ /datum/objective/crew/securityofficer/enjoyyourstay/update_explanation_text() . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.") + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.") explanation_text = pick(edglines) /datum/objective/crew/securityofficer/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law at all costs." - if(owner.current) - var/mob/living/carbon/human/H = owner.current - var/obj/item/card/id/theID = H.get_idcard() - if(istype(theID)) - if(!H.get_assignment() == "Security Officer") - return 0 - return 1 + explanation_text = "Enforce Space Law to the best of your ability." + return TRUE /datum/objective/crew/warden/ @@ -68,18 +56,12 @@ /datum/objective/crew/warden/enjoyyourstay/update_explanation_text() . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.") + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.") explanation_text = pick(edglines) /datum/objective/crew/warden/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law at all costs." - if(owner.current) - var/mob/living/carbon/human/H = owner.current - var/obj/item/card/id/theID = H.get_idcard() - if(istype(theID)) - if(!H.get_assignment() == "Warden") - return 0 - return 1 + explanation_text = "Enforce Space Law to the best of your ability." + return TRUE /datum/objective/crew/detective/ @@ -92,18 +74,12 @@ /datum/objective/crew/detective/enjoyyourstay/update_explanation_text() . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Well, at least you know fashion.") + var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.", "Well, at least you know fashion.") explanation_text = pick(edglines) /datum/objective/crew/detective/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law at all costs." - if(owner.current) - var/mob/living/carbon/human/H = owner.current - var/obj/item/card/id/theID = H.get_idcard() - if(istype(theID)) - if(!H.get_assignment() == "Detective") - return 0 - return 1 + explanation_text = "Enforce Space Law to the best of your ability." + return TRUE /datum/objective/crew/lawyer/ @@ -115,5 +91,5 @@ for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(M.current)) if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) - return 0 - return 1 + return FALSE + return TRUE From a10f27ff144bfda15b5d6c088d61f3ca5cbd01c4 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sat, 16 Sep 2017 23:44:39 -0400 Subject: [PATCH 088/144] runtime nerfs --- .../cit_crewobjectives_cargo.dm | 18 +++++++++--------- .../cit_crewobjectives_civilian.dm | 6 +++--- .../cit_crewobjectives_medical.dm | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index bb3ef8b630..aa2190e619 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -17,12 +17,12 @@ /datum/objective/crew/quartermaster/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!P.stat == DEAD) - if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + if!(P.stat == DEAD) + if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if!(H.stat == DEAD) + if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) @@ -47,12 +47,12 @@ /datum/objective/crew/cargotechnician/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!P.stat == DEAD) - if(P.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(P)]) + if!(P.stat == DEAD) + if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if!(H.stat == DEAD) + if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- if(petcount <= 0) @@ -67,6 +67,6 @@ /datum/objective/crew/shaftminer/bubblegum/check_completion() for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) - if(!B.stat == DEAD) + if!(B.stat == DEAD) return FALSE return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 500196bf98..69307ed7f7 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -68,7 +68,7 @@ /datum/objective/crew/bartender/responsibility/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.drunkenness >= 80) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) return FALSE return TRUE @@ -76,13 +76,13 @@ /datum/objective/crew/janitor/clean //ported from old Hippie var/list/areas = list() - var/hardmode = 0 + var/hardmode = FALSE explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." /datum/objective/crew/janitor/clean/New() . = ..() if(prob(1)) - hardmode = 1 + hardmode = TRUE var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat)) var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine)) var/list/possibleareas = list() diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm index ec4228cc27..4147884b09 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm @@ -7,7 +7,7 @@ /datum/objective/crew/chiefmedicalofficer/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(H.stat == DEAD && H.z == ZLEVEL_STATION_PRIMARY) if(get_area(H) != /area/medical/morgue) return FALSE return TRUE @@ -46,7 +46,7 @@ /datum/objective/crew/geneticist/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(H.stat == DEAD && H.z == ZLEVEL_STATION_PRIMARY) if(get_area(H) != /area/medical/morgue) return FALSE return TRUE @@ -119,7 +119,7 @@ /datum/objective/crew/virologist/noinfections/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) - if(H.z == ZLEVEL_STATION || SSshuttle.emergency.shuttle_areas[get_area(H)]) + if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(H.check_virus() == 2) return FALSE return TRUE @@ -131,7 +131,7 @@ /datum/objective/crew/medicaldoctor/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION) + if(H.stat == DEAD && H.z == ZLEVEL_STATION_PRIMARY) if(get_area(H) != /area/medical/morgue) return FALSE return TRUE From e8c7cb4f518a1acaaad3644e280ffc6f87bcfd5a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 17 Sep 2017 00:35:03 -0400 Subject: [PATCH 089/144] there we go --- .../crew_objectives/cit_crewobjectives_cargo.dm | 10 +++++----- .../crew_objectives/cit_crewobjectives_science.dm | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index aa2190e619..1215d0ce14 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -17,11 +17,11 @@ /datum/objective/crew/quartermaster/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if!(P.stat == DEAD) + if !(P.stat == DEAD) if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - if!(H.stat == DEAD) + if !(H.stat == DEAD) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- @@ -47,11 +47,11 @@ /datum/objective/crew/cargotechnician/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if!(P.stat == DEAD) + if !(P.stat == DEAD) if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - if!(H.stat == DEAD) + if !(H.stat == DEAD) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- @@ -67,6 +67,6 @@ /datum/objective/crew/shaftminer/bubblegum/check_completion() for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) - if!(B.stat == DEAD) + if !(B.stat == DEAD) return FALSE return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index addca3dbbf..2aaa47928e 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -17,7 +17,7 @@ /datum/objective/crew/researchdirector/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if(!R.stat == DEAD) + if !(R.stat == DEAD) borgcount-- if(borgcount <= 0) return TRUE @@ -41,7 +41,7 @@ /datum/objective/crew/roboticist/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if(!R.stat == DEAD) + if !(R.stat == DEAD) borgcount-- if(borgcount <= 0) return TRUE From e20d45f3d51b8b5f0fafb53d3ff88d7028629be6 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 17 Sep 2017 00:47:14 -0400 Subject: [PATCH 090/144] how is this intuitive in any way, shape, or form --- .../crew_objectives/cit_crewobjectives_cargo.dm | 10 +++++----- .../crew_objectives/cit_crewobjectives_science.dm | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index 1215d0ce14..e82a001883 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -17,11 +17,11 @@ /datum/objective/crew/quartermaster/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if !(P.stat == DEAD) + !(P.stat == DEAD) if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - if !(H.stat == DEAD) + !(H.stat == DEAD) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- @@ -47,11 +47,11 @@ /datum/objective/crew/cargotechnician/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if !(P.stat == DEAD) + !(P.stat == DEAD) if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - if !(H.stat == DEAD) + !(H.stat == DEAD) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- @@ -67,6 +67,6 @@ /datum/objective/crew/shaftminer/bubblegum/check_completion() for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) - if !(B.stat == DEAD) + !(B.stat == DEAD) return FALSE return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index 2aaa47928e..5f7d6cbf7f 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -17,7 +17,7 @@ /datum/objective/crew/researchdirector/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if !(R.stat == DEAD) + !(R.stat == DEAD) borgcount-- if(borgcount <= 0) return TRUE @@ -41,7 +41,7 @@ /datum/objective/crew/roboticist/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if !(R.stat == DEAD) + !(R.stat == DEAD) borgcount-- if(borgcount <= 0) return TRUE From 428a416447dac3f90318bb61c74838de13829494 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 17 Sep 2017 01:10:12 -0400 Subject: [PATCH 091/144] friendly reminder that mekhi anderson belongs on the table --- .../crew_objectives/cit_crewobjectives_cargo.dm | 10 +++++----- .../crew_objectives/cit_crewobjectives_science.dm | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index e82a001883..dac2e15435 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -17,11 +17,11 @@ /datum/objective/crew/quartermaster/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - !(P.stat == DEAD) + if(!(P.stat == DEAD)) if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - !(H.stat == DEAD) + if(!(H.stat == DEAD)) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- @@ -47,11 +47,11 @@ /datum/objective/crew/cargotechnician/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - !(P.stat == DEAD) + if(!(P.stat == DEAD)) if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) petcount-- for(var/mob/living/carbon/human/H in GLOB.mob_list) - !(H.stat == DEAD) + if(!(H.stat == DEAD)) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) petcount-- @@ -67,6 +67,6 @@ /datum/objective/crew/shaftminer/bubblegum/check_completion() for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) - !(B.stat == DEAD) + if(!(B.stat == DEAD)) return FALSE return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index 5f7d6cbf7f..552414746f 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -17,7 +17,7 @@ /datum/objective/crew/researchdirector/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - !(R.stat == DEAD) + if(!(R.stat == DEAD)) borgcount-- if(borgcount <= 0) return TRUE @@ -41,7 +41,7 @@ /datum/objective/crew/roboticist/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - !(R.stat == DEAD) + if(!(R.stat == DEAD)) borgcount-- if(borgcount <= 0) return TRUE From d2ffa0def679a365bb09af16f99b918465ba3b05 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 17 Sep 2017 01:20:29 -0400 Subject: [PATCH 092/144] fixed. 100% fixed. i hope. --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 2 +- code/citadel/crew_objectives/cit_crewobjectives_engineering.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 69307ed7f7..a3bc8e10df 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -221,6 +221,6 @@ var/mob/living/carbon/human/H = owner.current var/obj/item/card/id/theID = H.get_idcard() if(istype(theID)) - if(!H.get_assignment() == "Assistant" && !H.get_assignment() == "No id" && !H.get_assignment() == "No job") + if(!(H.get_assignment() == "Assistant") && !(H.get_assignment() == "No id") && !(H.get_assignment() == "No job")) return TRUE return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm index bb042f50aa..5c2f9bd03d 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -28,7 +28,7 @@ /datum/objective/crew/chiefengineer/poly/check_completion() for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list) - if(!dumbbird.stat == DEAD && dumbbird.ears) + if(!(dumbbird.stat == DEAD) && dumbbird.ears) if(istype(dumbbird.ears, /obj/item/device/radio/headset)) return TRUE return FALSE From e0837a45b63b5f57154a76e2fb36984e67daead9 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 20:29:03 -0400 Subject: [PATCH 093/144] basic config stuff --- code/citadel/cit_crewobjectives.dm | 5 +++-- code/controllers/configuration.dm | 10 ++++++++++ config/game_options.txt | 11 +++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index f40d1fff3c..849dcef544 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,9 +1,10 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() for(var/datum/mind/crewMind in SSticker.minds) - if(prob(10) && !issilicon(crewMind.current) && GLOB.master_mode != "extended")//extended is supposed to have less chaos + if(prob(10) && !issilicon(crewMind.current) && GLOB.miscreants_allowed) generate_miscreant_objectives(crewMind) else - generate_individual_objectives(crewMind) + if(config.allow_crew_objectives) + generate_individual_objectives(crewMind) return /datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index d19484fd3f..43b7a2f258 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -286,6 +286,10 @@ GLOBAL_PROTECT(config_dir) var/debug_admin_hrefs = FALSE //turns off admin href token protection for debugging purposes + var/allow_crew_objectives = FALSE + var/allow_miscreants = FALSE + var/allow_extended_miscreants = FALSE + /datum/configuration/New() gamemode_cache = typecacheof(/datum/game_mode,TRUE) for(var/T in gamemode_cache) @@ -816,6 +820,12 @@ GLOBAL_PROTECT(config_dir) arrivals_shuttle_require_safe_latejoin = TRUE if("mice_roundstart") mice_roundstart = text2num(value) + if("allow_crew_objectives") + allow_crew_objectives = TRUE + if("allow_miscreants") + allow_miscreants = TRUE + if("allow_extended_miscreants") + allow_extended_miscreants = TRUE else WRITE_FILE(GLOB.config_error_log, "Unknown setting in configuration: '[name]'") else if(type == "policies") diff --git a/config/game_options.txt b/config/game_options.txt index bc178fcfcd..2f2f22165d 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -491,3 +491,14 @@ ARRIVALS_SHUTTLE_DOCK_WINDOW 55 MICE_ROUNDSTART 10 + +## CREW OBJECTIVES ## +## Comment to disable objectives for innocent crew members. +ALLOW_CREW_OBJECTIVES + +## MISCREANTS ## +## Comment to allow miscreants to spawn. Miscreants are a mini-antag with objectives that are not tracked. +ALLOW_MISCREANTS + +## Uncomment to let miscreants spawn during Extended. I hold no responsibility for fun that may occur while this is enabled. +#ALLOW_EXTENDED_MISCREANTS \ No newline at end of file From fac0e751036bf240323eb8042844eda1561ec05c Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 20:49:42 -0400 Subject: [PATCH 094/144] blegh --- code/citadel/_cit_helpers.dm | 3 +++ code/citadel/cit_crewobjectives.dm | 5 ++++- code/citadel/cit_miscreants.dm | 11 +++++++---- code/controllers/subsystem/ticker.dm | 4 ++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/code/citadel/_cit_helpers.dm b/code/citadel/_cit_helpers.dm index f20e59b0b6..9ac58122fe 100644 --- a/code/citadel/_cit_helpers.dm +++ b/code/citadel/_cit_helpers.dm @@ -93,6 +93,9 @@ GLOBAL_LIST_EMPTY(mentors) GLOBAL_VAR_INIT(looc_allowed, 1) GLOBAL_VAR_INIT(dlooc_allowed, 1) +//Crew objective and miscreants stuff +GLOBAL_VAR_INIT(miscreants_allowed, FALSE) + /client/proc/reload_mentors() set name = "Reload Mentors" set category = "Admin" diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 849dcef544..7a4e68850b 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -8,6 +8,8 @@ return /datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind) + if(!config.allow_crew_objectives) + return if(!crewMind) return if(!crewMind.current || !crewMind.objectives || crewMind.special_role) @@ -27,7 +29,8 @@ return newObjective.owner = crewMind crewMind.objectives += newObjective - crewMind.announce_objectives() + to_chat(crewMind, "Your objective: [newObjective.explanation_text]") + //crewMind.announce_objectives() /datum/objective/crew/ explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index 19e75047f5..cc5a3afa98 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -1,12 +1,14 @@ /datum/controller/subsystem/ticker/proc/generate_miscreant_objectives(var/datum/mind/crewMind) - if(GLOB.master_mode == "extended") - return //Thinking about it, extended's chaos whether or not mini-antags are present. But eh, whatever. Here's a sanity check. + if(!GLOB.miscreants_allowed) + return if(!crewMind) return if(!crewMind.current || !crewMind.objectives || crewMind.special_role) return if(!crewMind.assigned_role) return + if(jobban_isbanned(crewMind, "Syndicate")) + return var/list/objectiveTypes = typesof(/datum/objective/miscreant) - /datum/objective/miscreant if(!objectiveTypes.len) return @@ -18,8 +20,9 @@ crewMind.objectives += newObjective crewMind.special_role = "miscreant" to_chat(crewMind, "You are a Miscreant.") - to_chat(crewMind, "Pursuing your objective is entirely optional, but it isn't tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") - crewMind.announce_objectives() + to_chat(crewMind, "Pursuing your objective is entirely optional, but it isn't tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") + to_chat(crewMind, "Your objective: [newObjective.explanation_text]") + //crewMind.announce_objectives() /datum/objective/miscreant explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord." diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 6d458cb0ee..cee83cb3b8 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -211,6 +211,10 @@ SUBSYSTEM_DEF(ticker) GLOB.start_landmarks_list = shuffle(GLOB.start_landmarks_list) //Shuffle the order of spawn points so they dont always predictably spawn bottom-up and right-to-left create_characters() //Create player characters collect_minds() + if(config.allow_extended_miscreants && GLOB.master_mode == "extended") + GLOB.miscreants_allowed = TRUE + if(config.allow_miscreants && GLOB.master_mode != "extended") + GLOB.miscreants_allowed = TRUE generate_crew_objectives() equip_characters() From 5f65202cfd0fb36f78e2adb661f0ef72b3940706 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 20:56:16 -0400 Subject: [PATCH 095/144] added config option to enable or disable miscreants and crew objectives --- code/citadel/cit_crewobjectives.dm | 2 +- code/modules/mob/dead/new_player/new_player.dm | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 7a4e68850b..172f1b59d3 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,6 +1,6 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() for(var/datum/mind/crewMind in SSticker.minds) - if(prob(10) && !issilicon(crewMind.current) && GLOB.miscreants_allowed) + if(prob(10) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed) generate_miscreant_objectives(crewMind) else if(config.allow_crew_objectives) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 349ee546a4..bf8836fb72 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -367,10 +367,11 @@ if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() - if(prob(10) && !issilicon(humanc) && GLOB.master_mode != "extended") + if(prob(10) && !issilicon(humanc) && !jobban_isbanned(humanc.mind, "Syndicate") && GLOB.miscreants_allowed) SSticker.generate_miscreant_objectives(humanc.mind) else - SSticker.generate_individual_objectives(humanc.mind) + if(config.allow_crew_objectives) + SSticker.generate_individual_objectives(humanc.mind) GLOB.joined_player_list += character.ckey GLOB.latejoiners += character From 2c528bb0e36793aaca5c4308dbfb0224a0fee651 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 21:11:25 -0400 Subject: [PATCH 096/144] removes some of the more tide-y objectives, cleans comments --- code/citadel/cit_crewobjectives.dm | 1 - code/citadel/cit_miscreants.dm | 7 ------- 2 files changed, 8 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 172f1b59d3..6b620215b4 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -30,7 +30,6 @@ newObjective.owner = crewMind crewMind.objectives += newObjective to_chat(crewMind, "Your objective: [newObjective.explanation_text]") - //crewMind.announce_objectives() /datum/objective/crew/ explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index cc5a3afa98..f33f6815af 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -22,7 +22,6 @@ to_chat(crewMind, "You are a Miscreant.") to_chat(crewMind, "Pursuing your objective is entirely optional, but it isn't tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") to_chat(crewMind, "Your objective: [newObjective.explanation_text]") - //crewMind.announce_objectives() /datum/objective/miscreant explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord." @@ -35,9 +34,6 @@ /datum/objective/miscreant/incompetent explanation_text = "Be as useless and incompetent as possible without getting killed." -/datum/objective/miscreant/strike - explanation_text = "Try to convince your department to go on strike, and refuse to do any work." - /datum/objective/miscreant/litterbug explanation_text = "Make a huge mess wherever you go." @@ -56,9 +52,6 @@ /datum/objective/miscreant/whiny explanation_text = "Complain incessantly about every minor issue you find." -/datum/objective/miscreant/damage - explanation_text = "Cause as much property damage as possible without actually harming anyone." - /* Citadel's Miscreant Objectives */ /datum/objective/miscreant/immersions From f2b63c11595c45b03e695f0f3ed78df79bfd3317 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 22:33:00 -0400 Subject: [PATCH 097/144] *foaming at mouth in far distance* --- .../crew_objectives/cit_crewobjectives_civilian.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index a3bc8e10df..61f4c4efe9 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -166,10 +166,10 @@ /datum/objective/crew/assistant/departmentclothes/update_explanation_text() . = ..() - explanation_text = "Be wearing a [targetuniform] at the end of the shift." + explanation_text = "Be wearing a [initial(targetuniform.name)] at the end of the shift." /datum/objective/crew/assistant/departmentclothes/check_completion() - if(owner.current) + if(owner && owner.current) var/mob/living/carbon/human/H = owner.current if(istype(H.w_uniform, targetuniform)) return TRUE @@ -184,7 +184,7 @@ /datum/objective/crew/assistant/spacesuit/update_explanation_text() . = ..() - if(owner.current) + if(owner && owner.current) var/mob/living/carbon/human/H = owner.current explanation_text = "Get your " if(H.dna.species.id == "avian") @@ -217,7 +217,7 @@ explanation_text = "Have a non-assistant ID registered to you at the end of the shift." /datum/objective/crew/assistant/promotion/check_completion() - if(owner.current) + if(owner && owner.current) var/mob/living/carbon/human/H = owner.current var/obj/item/card/id/theID = H.get_idcard() if(istype(theID)) From ba05e177fd813a5a6976ceeebbcdb20699ccd851 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 22:53:47 -0400 Subject: [PATCH 098/144] ffs work already --- .../cit_crewobjectives_civilian.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 61f4c4efe9..7caaffcde4 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -187,21 +187,21 @@ if(owner && owner.current) var/mob/living/carbon/human/H = owner.current explanation_text = "Get your " - if(H.dna.species.id == "avian") + if(H.dna.species == /datum/species/avian) explanation_text += "scratchy claws " - else if(H.dna.species.id == "mammal") + else if(H.dna.species == /datum/species/mammal) explanation_text += "dirty paws " - else if(H.dna.species.id == "aquatic") + else if(H.dna.species == /datum/species/aquatic) explanation_text += "fishy hands " - else if(H.dna.species.id == "xeno") + else if(H.dna.species == /datum/species/xeno) explanation_text += "weird claws " - else if(H.dna.species.id == "guilmon") + else if(H.dna.species == /datum/species/guilmon) explanation_text += "digital claws " - else if(H.dna.species.id == "lizard") + else if(H.dna.species == /datum/species/lizard) explanation_text += "slimy claws " - else if(H.dna.species.id == "datashark") + else if(H.dna.species == /datum/species/datashark) explanation_text += "glitchy hands " - else if(H.dna.species.id == "insect") + else if(H.dna.species == /datum/species/insect) explanation_text += "gross grabbers " else explanation_text += "grubby hands " From f69ab93a2c4ecb9b8c76241d756938f95508f21a Mon Sep 17 00:00:00 2001 From: deathride58 Date: Tue, 19 Sep 2017 23:31:08 -0400 Subject: [PATCH 099/144] theres a proc for that --- .../cit_crewobjectives_civilian.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 7caaffcde4..1da2294a70 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -187,21 +187,21 @@ if(owner && owner.current) var/mob/living/carbon/human/H = owner.current explanation_text = "Get your " - if(H.dna.species == /datum/species/avian) + if(is_species(H, /datum/species/avian)) explanation_text += "scratchy claws " - else if(H.dna.species == /datum/species/mammal) + else if(is_species(H, /datum/species/mammal)) explanation_text += "dirty paws " - else if(H.dna.species == /datum/species/aquatic) + else if(is_species(H, /datum/species/aquatic)) explanation_text += "fishy hands " - else if(H.dna.species == /datum/species/xeno) + else if(is_species(H, /datum/species/xeno)) explanation_text += "weird claws " - else if(H.dna.species == /datum/species/guilmon) + else if(is_species(H, /datum/species/guilmon)) explanation_text += "digital claws " - else if(H.dna.species == /datum/species/lizard) + else if(is_species(H, /datum/species/lizard)) explanation_text += "slimy claws " - else if(H.dna.species == /datum/species/datashark) + else if(is_species(H, /datum/species/shark/datashark)) explanation_text += "glitchy hands " - else if(H.dna.species == /datum/species/insect) + else if(is_species(H, /datum/species/insect)) explanation_text += "gross grabbers " else explanation_text += "grubby hands " From fb7f2d0ab89f2361c92d40e865ffb37f5fc7c7e4 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 20 Sep 2017 16:03:56 -0400 Subject: [PATCH 100/144] fixes all the roundstart related issues --- code/controllers/subsystem/ticker.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index cee83cb3b8..94d4d90d23 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -211,11 +211,6 @@ SUBSYSTEM_DEF(ticker) GLOB.start_landmarks_list = shuffle(GLOB.start_landmarks_list) //Shuffle the order of spawn points so they dont always predictably spawn bottom-up and right-to-left create_characters() //Create player characters collect_minds() - if(config.allow_extended_miscreants && GLOB.master_mode == "extended") - GLOB.miscreants_allowed = TRUE - if(config.allow_miscreants && GLOB.master_mode != "extended") - GLOB.miscreants_allowed = TRUE - generate_crew_objectives() equip_characters() SSoverlays.Flush() //Flush the majority of the shit @@ -258,6 +253,13 @@ SUBSYSTEM_DEF(ticker) //Deleting Startpoints but we need the ai point to AI-ize people later if(S.name != "AI") qdel(S) + + //assign crew objectives and generate miscreants + if(config.allow_extended_miscreants && GLOB.master_mode == "extended") + GLOB.miscreants_allowed = TRUE + if(config.allow_miscreants && GLOB.master_mode != "extended") + GLOB.miscreants_allowed = TRUE + generate_crew_objectives() var/list/adm = get_admin_counts() var/list/allmins = adm["present"] From 4473b24180a37c098e2d1d8bdb2b67fdaad8db30 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 20 Sep 2017 21:58:42 -0400 Subject: [PATCH 101/144] work dammit --- .../cit_crewobjectives_civilian.dm | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 1da2294a70..92779c573f 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -186,26 +186,27 @@ . = ..() if(owner && owner.current) var/mob/living/carbon/human/H = owner.current - explanation_text = "Get your " - if(is_species(H, /datum/species/avian)) - explanation_text += "scratchy claws " - else if(is_species(H, /datum/species/mammal)) - explanation_text += "dirty paws " - else if(is_species(H, /datum/species/aquatic)) - explanation_text += "fishy hands " - else if(is_species(H, /datum/species/xeno)) - explanation_text += "weird claws " - else if(is_species(H, /datum/species/guilmon)) - explanation_text += "digital claws " - else if(is_species(H, /datum/species/lizard)) - explanation_text += "slimy claws " - else if(is_species(H, /datum/species/shark/datashark)) - explanation_text += "glitchy hands " - else if(is_species(H, /datum/species/insect)) - explanation_text += "gross grabbers " - else - explanation_text += "grubby hands " - explanation_text += "on a space suit." + if(H && H.dna && H.dna.species) + explanation_text = "Get your " + if(H.dna.species == /datum/species/avian) + explanation_text += "scratchy claws " + else if(H.dna.species == /datum/species/mammal) + explanation_text += "dirty paws " + else if(H.dna.species == /datum/species/aquatic) + explanation_text += "fishy hands " + else if(H.dna.species == /datum/species/xeno) + explanation_text += "weird claws " + else if(H.dna.species == /datum/species/guilmon) + explanation_text += "digital claws " + else if(H.dna.species == /datum/species/lizard) + explanation_text += "slimy claws " + else if(H.dna.species == /datum/species/shark/datashark) + explanation_text += "glitchy hands " + else if(H.dna.species == /datum/species/insect) + explanation_text += "gross grabbers " + else + explanation_text += "grubby hands " + explanation_text += "on a space suit." /datum/objective/crew/assistant/spacesuit/check_completion() if(owner.current && owner.current.check_contents_for(typesof(/obj/item/clothing/suit/space))) From b55ad7383ea4b7d00a317a56bbb5f65dcea6b787 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 21 Sep 2017 00:14:03 -0400 Subject: [PATCH 102/144] i give up --- .../cit_crewobjectives_civilian.dm | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 92779c573f..922430fd62 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -178,6 +178,7 @@ /datum/objective/crew/assistant/spacesuit //ported from Goon explanation_text = "Get your grubby hands on a space suit." +/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards. /datum/objective/crew/assistant/spacesuit/New() . = ..() update_explanation_text() @@ -186,27 +187,27 @@ . = ..() if(owner && owner.current) var/mob/living/carbon/human/H = owner.current - if(H && H.dna && H.dna.species) + if(H && H.dna && H.dna.species && H.dna.species.id) explanation_text = "Get your " - if(H.dna.species == /datum/species/avian) + if(H.dna.species.id == "avian") explanation_text += "scratchy claws " - else if(H.dna.species == /datum/species/mammal) + else if(H.dna.species.id == "mammal") explanation_text += "dirty paws " - else if(H.dna.species == /datum/species/aquatic) + else if(H.dna.species.id == "aquatic") explanation_text += "fishy hands " - else if(H.dna.species == /datum/species/xeno) + else if(H.dna.species.id == "xeno") explanation_text += "weird claws " - else if(H.dna.species == /datum/species/guilmon) + else if(H.dna.species.id == "guilmon") explanation_text += "digital claws " - else if(H.dna.species == /datum/species/lizard) + else if(H.dna.species.id == "lizard") explanation_text += "slimy claws " - else if(H.dna.species == /datum/species/shark/datashark) + else if(H.dna.species.id == "datashark") explanation_text += "glitchy hands " - else if(H.dna.species == /datum/species/insect) + else if(H.dna.species.id == "insect") explanation_text += "gross grabbers " else explanation_text += "grubby hands " - explanation_text += "on a space suit." + explanation_text += "on a space suit."*/ /datum/objective/crew/assistant/spacesuit/check_completion() if(owner.current && owner.current.check_contents_for(typesof(/obj/item/clothing/suit/space))) From 160246396eee40a27459bd4699ca9cad0e90a49f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 21 Sep 2017 00:57:51 -0400 Subject: [PATCH 103/144] spacesuit objective rebrand --- .../cit_crewobjectives_civilian.dm | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 922430fd62..ddcb20dfce 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -175,16 +175,20 @@ return TRUE return FALSE -/datum/objective/crew/assistant/spacesuit //ported from Goon - explanation_text = "Get your grubby hands on a space suit." +/datum/objective/crew/assistant/pwrgame //ported from Goon + var/obj/item/clothing/targettidegarb + explanation_text = "Get your grubby hands on a [Dear god something broke. Report this to Citadel's development dicussion channel]." -/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards. -/datum/objective/crew/assistant/spacesuit/New() +/datum/objective/crew/assistant/pwrgame/New() . = ..() + var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask, /obj/item/clothing/suit/space) + targettidegarb = pick(muhvalids) update_explanation_text() -/datum/objective/crew/assistant/spacesuit/update_explanation_text() +/datum/objective/crew/assistant/pwrgame/update_explanation_text() . = ..() + explanation_text = "Get your grubby hands on a [initial(targettidegarb.name)]." +/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards. if(owner && owner.current) var/mob/living/carbon/human/H = owner.current if(H && H.dna && H.dna.species && H.dna.species.id) @@ -207,10 +211,10 @@ explanation_text += "gross grabbers " else explanation_text += "grubby hands " - explanation_text += "on a space suit."*/ + explanation_text += "on a space suit."//replace this if you're making this monstrosity work */ -/datum/objective/crew/assistant/spacesuit/check_completion() - if(owner.current && owner.current.check_contents_for(typesof(/obj/item/clothing/suit/space))) +/datum/objective/crew/assistant/pwrgame/check_completion() + if(owner.current && owner.current.check_contents_for(typesof(targettidegarb))) return TRUE else return FALSE From 7e1d0afac793c1aeb0baa67ac77b2c5506aaff66 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sat, 23 Sep 2017 01:40:47 -0400 Subject: [PATCH 104/144] fixes runtimes --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index ddcb20dfce..ca884977b9 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -177,7 +177,7 @@ /datum/objective/crew/assistant/pwrgame //ported from Goon var/obj/item/clothing/targettidegarb - explanation_text = "Get your grubby hands on a [Dear god something broke. Report this to Citadel's development dicussion channel]." + explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)." /datum/objective/crew/assistant/pwrgame/New() . = ..() @@ -211,7 +211,7 @@ explanation_text += "gross grabbers " else explanation_text += "grubby hands " - explanation_text += "on a space suit."//replace this if you're making this monstrosity work */ + explanation_text += "on a space suit." replace this if you're making this monstrosity work */ /datum/objective/crew/assistant/pwrgame/check_completion() if(owner.current && owner.current.check_contents_for(typesof(targettidegarb))) From 43574eefe11b73eea42b93c4e84bdded00e59121 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 00:30:38 -0400 Subject: [PATCH 105/144] adds chaplain and curator objectives --- .../cit_crewobjectives_civilian.dm | 57 ++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index ca884977b9..94ac116446 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -130,7 +130,7 @@ /datum/objective/crew/clown/slipster/check_completion() var/list/uniqueslips = list() - if(owner.current) + if(owner && owner.current) for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) for(var/mob/living/carbon/human/H in PDA.slipvictims) uniqueslips |= H @@ -145,12 +145,65 @@ explanation_text = "Never break your vow of silence." /datum/objective/crew/mime/vow/check_completion() - if(owner.current) + if(owner && owner.current) var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] if(say_log.len > 0) return FALSE return TRUE +/datum/objective/crew/chaplain + +/datum/objective/crew/chaplain/nullrod + explanation_text = "Don't lose your holy rod." + +/datum/objective/crew/chaplain/nullrod/New() + . = ..() + update_explanation_text() + +/datum/objective/crew/chaplain/nullrod/update_explanation_text() + . = ..() + explanation_text = "Don't lose your holy rod." + if(owner && owner.current) + if(owner.current.getorgan(/obj/item/organ/genital/penis)) + explanation_text += " Interpret this as you wish." + +/datum/objective/crew/chaplain/nullrod/check_completion() + explanation_text = "Don't lose your holy rod." + if(owner && owner.current) + if(owner.current.check_contents_for(typesof(/obj/item/nullrod))) + return 1 + if(owner.current.getorgan(/obj/item/organ/genital/penis)) + return 1 + return 0 + +/datum/objective/crew/curator + +/datum/objective/crew/curator/reporter //ported from old hippie + var/charcount = 100 + explanation_text = "Write at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters." + +/datum/objective/crew/curator/reporter/New() + . = ..() + target_amount = rand(2,10) + charcount = rand(20,250) + update_explanation_text() + +/datum/objective/crew/curator/reporter/update_explanation_text() + . = ..() + explanation_text = "Write at least [target_amount] articles containing at least [charcount] characters." + +/datum/objective/crew/curator/reporter/check_completion() + if(owner && owner.current) + for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) + for(var/datum/newscaster/feed_message/msg in chan.messages) + if(msg.returnAuthor() == owner.current.real_name) + if(length(msg.returnBody()) >= charcount) + target_amount-- + if(target_amount <= 0) + return 1 + else + return 0 + /datum/objective/crew/assistant /datum/objective/crew/assistant/departmentclothes From 226ad9ddde38cd9ebaf9457f2e60c5e4c8b340cb Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 01:10:42 -0400 Subject: [PATCH 106/144] adjustments --- code/citadel/cit_crewobjectives.dm | 2 +- code/citadel/cit_miscreants.dm | 2 +- .../cit_crewobjectives_civilian.dm | 10 +++++----- code/controllers/subsystem/ticker.dm | 16 ++++++++-------- code/modules/mob/dead/new_player/new_player.dm | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 6b620215b4..73e6787334 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -1,6 +1,6 @@ /datum/controller/subsystem/ticker/proc/generate_crew_objectives() for(var/datum/mind/crewMind in SSticker.minds) - if(prob(10) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed) + if(prob(2) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed) generate_miscreant_objectives(crewMind) else if(config.allow_crew_objectives) diff --git a/code/citadel/cit_miscreants.dm b/code/citadel/cit_miscreants.dm index f33f6815af..f828127b55 100644 --- a/code/citadel/cit_miscreants.dm +++ b/code/citadel/cit_miscreants.dm @@ -20,7 +20,7 @@ crewMind.objectives += newObjective crewMind.special_role = "miscreant" to_chat(crewMind, "You are a Miscreant.") - to_chat(crewMind, "Pursuing your objective is entirely optional, but it isn't tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") + to_chat(crewMind, "Pursuing your objective is entirely optional, as the completion of your objective is unable to be tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.") to_chat(crewMind, "Your objective: [newObjective.explanation_text]") /datum/objective/miscreant diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 94ac116446..3b81007a17 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -171,10 +171,10 @@ explanation_text = "Don't lose your holy rod." if(owner && owner.current) if(owner.current.check_contents_for(typesof(/obj/item/nullrod))) - return 1 + return TRUE if(owner.current.getorgan(/obj/item/organ/genital/penis)) - return 1 - return 0 + return TRUE + return FALSE /datum/objective/crew/curator @@ -200,9 +200,9 @@ if(length(msg.returnBody()) >= charcount) target_amount-- if(target_amount <= 0) - return 1 + return TRUE else - return 0 + return FALSE /datum/objective/crew/assistant diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 82b91bfa67..db0ab6abda 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -614,21 +614,21 @@ SUBSYSTEM_DEF(ticker) to_chat(crewMind.current, "
Your objective: [CO.explanation_text] Failed.") if (successfulCrew.len) - to_chat(world, "The following crew members completed their Crew Objectives:") + var/completedObjectives = "The following crew members completed their Crew Objectives:
" for(var/i in successfulCrew) - to_chat(world, "[i]") - to_chat(world, "
") + completedObjectives += "[i]
" + to_chat(world, "[completedObjectives]
") else - to_chat(world, "Nobody completed their Crew Objectives!") - to_chat(world, "
") + if(config.allow_crew_objectives) + to_chat(world, "Nobody completed their Crew Objectives!
") CHECK_TICK if (miscreants.len) - to_chat(world, " The following crew members were miscreants:") + var/miscreantObjectives = "The following crew members were miscreants:
" for(var/i in miscreants) - to_chat(world, "[i]") - to_chat(world, "
") + miscreantObjectives += "[i]
" + to_chat(world, "[miscreantObjectives]
") CHECK_TICK diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 00f664b59c..ff6eadb42c 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -370,7 +370,7 @@ if(GLOB.highlander) to_chat(humanc, "THERE CAN BE ONLY ONE!!!") humanc.make_scottish() - if(prob(10) && !issilicon(humanc) && !jobban_isbanned(humanc.mind, "Syndicate") && GLOB.miscreants_allowed) + if(prob(2) && !issilicon(humanc) && !jobban_isbanned(humanc.mind, "Syndicate") && GLOB.miscreants_allowed) SSticker.generate_miscreant_objectives(humanc.mind) else if(config.allow_crew_objectives) From 3711461873ad67f66617a7ba843069671d1c25dd Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 01:32:58 -0400 Subject: [PATCH 107/144] makes the nukedisk objective exclusive to captain --- .../crew_objectives/cit_crewobjectives_command.dm | 9 --------- .../crew_objectives/cit_crewobjectives_security.dm | 9 --------- 2 files changed, 18 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_command.dm b/code/citadel/crew_objectives/cit_crewobjectives_command.dm index 7ea715dfa8..1ee6beaee6 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_command.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_command.dm @@ -32,12 +32,3 @@ return TRUE return FALSE return FALSE - -/datum/objective/crew/headofpersonnel/datfukkendisk //Ported from old Hippie - explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." - -/datum/objective/crew/headofpersonnel/datfukkendisk/check_completion() - if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return TRUE - else - return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_security.dm b/code/citadel/crew_objectives/cit_crewobjectives_security.dm index a20e48a6a5..b0b9bb3b55 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_security.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_security.dm @@ -2,15 +2,6 @@ /datum/objective/crew/headofsecurity/ -/datum/objective/crew/headofsecurity/datfukkendisk //Ported from old Hippie - explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." - -/datum/objective/crew/headofsecurity/datfukkendisk/check_completion() - if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) - return TRUE - else - return FALSE - /datum/objective/crew/headofsecurity/enjoyyourstay explanation_text = "Welcome to Space Station 13. Enjoy your stay." From de15e8fa6be779cc581409575bc07b0c627afdb0 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 19:08:35 -0400 Subject: [PATCH 108/144] Fixes reporter objective --- .../cit_crewobjectives_civilian.dm | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 3b81007a17..f6defe3242 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -156,19 +156,7 @@ /datum/objective/crew/chaplain/nullrod explanation_text = "Don't lose your holy rod." -/datum/objective/crew/chaplain/nullrod/New() - . = ..() - update_explanation_text() - -/datum/objective/crew/chaplain/nullrod/update_explanation_text() - . = ..() - explanation_text = "Don't lose your holy rod." - if(owner && owner.current) - if(owner.current.getorgan(/obj/item/organ/genital/penis)) - explanation_text += " Interpret this as you wish." - /datum/objective/crew/chaplain/nullrod/check_completion() - explanation_text = "Don't lose your holy rod." if(owner && owner.current) if(owner.current.check_contents_for(typesof(/obj/item/nullrod))) return TRUE @@ -180,7 +168,7 @@ /datum/objective/crew/curator/reporter //ported from old hippie var/charcount = 100 - explanation_text = "Write at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters." + explanation_text = "Publish at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters." /datum/objective/crew/curator/reporter/New() . = ..() @@ -190,13 +178,14 @@ /datum/objective/crew/curator/reporter/update_explanation_text() . = ..() - explanation_text = "Write at least [target_amount] articles containing at least [charcount] characters." + explanation_text = "Publish at least [target_amount] articles containing at least [charcount] characters." /datum/objective/crew/curator/reporter/check_completion() if(owner && owner.current) + var/ownername = "[ckey(owner.current.real_name)][ckey(owner.assigned_role)]" for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) for(var/datum/newscaster/feed_message/msg in chan.messages) - if(msg.returnAuthor() == owner.current.real_name) + if(ckey(msg.returnAuthor()) == ckey(ownername)) if(length(msg.returnBody()) >= charcount) target_amount-- if(target_amount <= 0) From bf3644d64eca5ddfaabe15da6c76c70cf29fa9f4 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 19:41:13 -0400 Subject: [PATCH 109/144] adds points objective for cargonians --- .../cit_crewobjectives_cargo.dm | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index dac2e15435..e396f57a9e 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -30,6 +30,23 @@ else return FALSE +/datum/objective/crew/quartermaster/points //ported from old hippie + explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift." + +/datum/objective/crew/quartermaster/points/New() + . = ..() + target_amount = rand(25000,100000) + update_explanation_text() + +/datum/objective/crew/quartermaster/points/update_explanation_text() + explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." + +/datum/objective/crew/quartermaster/points/check_completion() + if(SSshuttle.points >= target_amount) + return TRUE + else + return FALSE + /datum/objective/crew/cargotechnician /datum/objective/crew/cargotechnician/petsplosion @@ -60,6 +77,23 @@ else return FALSE +/datum/objective/crew/cargotechnician/points //ported from old hippie + explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift." + +/datum/objective/crew/cargotechnician/points/New() + . = ..() + target_amount = rand(25000,100000) + update_explanation_text() + +/datum/objective/crew/cargotechnician/points/update_explanation_text() + explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." + +/datum/objective/crew/cargotechnician/points/check_completion() + if(SSshuttle.points >= target_amount) + return TRUE + else + return FALSE + /datum/objective/crew/shaftminer /datum/objective/crew/shaftminer/bubblegum From 77048785cd5ebaa35d4e3f3d634bc42b8a275506 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 19:53:11 -0400 Subject: [PATCH 110/144] gives miners a quest for fat stacks --- .../cit_crewobjectives_cargo.dm | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index e396f57a9e..392ec3a7e1 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -39,6 +39,7 @@ update_explanation_text() /datum/objective/crew/quartermaster/points/update_explanation_text() + . = ..() explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." /datum/objective/crew/quartermaster/points/check_completion() @@ -86,6 +87,7 @@ update_explanation_text() /datum/objective/crew/cargotechnician/points/update_explanation_text() + . = ..() explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." /datum/objective/crew/cargotechnician/points/check_completion() @@ -104,3 +106,24 @@ if(!(B.stat == DEAD)) return FALSE return TRUE + +/datum/objective/crew/shaftminer/fatstacks //ported from old hippie + explanation_text = "Have at least (something broke, report this to the development discussion channel of citadels discord) mining points on your ID at the end of the shift." + +/datum/objective/crew/shaftminer/fatstacks/New() + . = ..() + target_amount = rand(15000,50000) + update_explanation_text() + +/datum/objective/crew/shaftminer/fatstacks/update_explanation_text() + . = ..() + explanation_text = "Have at least [target_amount] mining points on your ID at the end of the shift." + +/datum/objective/crew/shaftminer/fatstacks/check_completion() + if(owner && owner.current) + var/mob/living/carbon/human/H = owner.current + var/obj/item/card/id/theID = H.get_idcard() + if(istype(theID)) + if(theID.mining_points >= target_amount) + return TRUE + return FALSE From e81d692b8c88286f0cbe304e8db6af40653faaf1 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Thu, 28 Sep 2017 20:30:53 -0400 Subject: [PATCH 111/144] adds research objective for scientists --- .../cit_crewobjectives_science.dm | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index 552414746f..d028a453bc 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -24,6 +24,48 @@ else return FALSE +/datum/objective/crew/researchdirector/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs. + var/datum/design/targetdesign + explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift." + +/datum/objective/crew/researchdirector/research/New() + . = ..() + targetdesign = pick(subtypesof(/datum/design)) + update_explanation_text() + +/datum/objective/crew/researchdirector/research/update_explanation_text() + . = ..() + explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift." + +/datum/objective/crew/researchdirector/research/check_completion() + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) + if(S && S.files && S.files.known_designs) + if(targetdesign in S.files.known_designs) + return TRUE + return FALSE + +/datum/objective/crew/scientist/ + +/datum/objective/crew/scientist/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs. + var/datum/design/targetdesign + explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift." + +/datum/objective/crew/scientist/research/New() + . = ..() + targetdesign = pick(subtypesof(/datum/design)) + update_explanation_text() + +/datum/objective/crew/scientist/research/update_explanation_text() + . = ..() + explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift." + +/datum/objective/crew/scientist/research/check_completion() + for(var/obj/machinery/r_n_d/server/S in GLOB.machines) + if(S && S.files && S.files.known_designs) + if(targetdesign in S.files.known_designs) + return TRUE + return FALSE + /datum/objective/crew/roboticist/ /datum/objective/crew/roboticist/cyborgs //Ported from old Hippie From f2f5c6d53ef9e591168cfca4287fbb9118a44c7f Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 29 Sep 2017 16:55:38 -0400 Subject: [PATCH 112/144] completely reworks how objectives are selected, reduces copypasta --- code/citadel/cit_crewobjectives.dm | 23 ++-- .../cit_crewobjectives_cargo.dm | 84 ++++----------- .../cit_crewobjectives_civilian.dm | 101 ++++++++---------- .../cit_crewobjectives_command.dm | 19 ++-- .../cit_crewobjectives_engineering.dm | 39 ++----- .../cit_crewobjectives_medical.dm | 85 +++------------ .../cit_crewobjectives_science.dm | 68 ++---------- .../cit_crewobjectives_security.dm | 81 +++----------- 8 files changed, 139 insertions(+), 361 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 73e6787334..ed2a05bdd6 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -16,22 +16,31 @@ return if(!crewMind.assigned_role) return - var/rolePathString = "/datum/objective/crew/[ckey(crewMind.assigned_role)]" - var/rolePath = text2path(rolePathString) - if (isnull(rolePath)) + var/validobjs = get_valid_crew_objs(ckey(crewMind.assigned_role)) + if(isnull(validobjs)) return - var/list/objectiveTypes = typesof(rolePath) - rolePath - if(!objectiveTypes.len) + if(!validobjs.len) return - var/selectedType = pick(objectiveTypes) - var/datum/objective/crew/newObjective = new selectedType + var/selectedObj = pick(validobjs) + var/datum/objective/crew/newObjective = new selectedObj if(!newObjective) return newObjective.owner = crewMind crewMind.objectives += newObjective to_chat(crewMind, "Your objective: [newObjective.explanation_text]") +/datum/controller/subsystem/ticker/proc/get_valid_crew_objs(var/job = "")//taken from old hippie with adjustments + var/list/objpaths = typesof(/datum/objective/crew) + var/list/objlist = list() + for(/datum/objective/crew/obj in objpaths) + if(obj && initial(obj.jobs)) + var/list/availableto = splittext(initial(obj.jobs),",") + if(job in availableto) + objlist += obj + return objlist + /datum/objective/crew/ + var/jobs = "" explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude" /datum/objective/crew/proc/setup() diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm index 392ec3a7e1..d164123c4d 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm @@ -1,20 +1,19 @@ /* CARGO OBJECTIVES */ -/datum/objective/crew/quartermaster - -/datum/objective/crew/quartermaster/petsplosion +/datum/objective/crew/petsplosion explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." + jobs = "quartermaster,cargotechnician" -/datum/objective/crew/quartermaster/petsplosion/New() +/datum/objective/crew/petsplosion/New() . = ..() target_amount = rand(10,30) update_explanation_text() -/datum/objective/crew/quartermaster/petsplosion/update_explanation_text() +/datum/objective/crew/petsplosion/update_explanation_text() . = ..() explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." -/datum/objective/crew/quartermaster/petsplosion/check_completion() +/datum/objective/crew/petsplosion/check_completion() var/petcount = target_amount for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) if(!(P.stat == DEAD)) @@ -30,96 +29,49 @@ else return FALSE -/datum/objective/crew/quartermaster/points //ported from old hippie +/datum/objective/crew/points //ported from old hippie explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift." + jobs = "quartermaster,cargotechnician" -/datum/objective/crew/quartermaster/points/New() +/datum/objective/crew/points/New() . = ..() target_amount = rand(25000,100000) update_explanation_text() -/datum/objective/crew/quartermaster/points/update_explanation_text() +/datum/objective/crew/points/update_explanation_text() . = ..() explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." -/datum/objective/crew/quartermaster/points/check_completion() +/datum/objective/crew/points/check_completion() if(SSshuttle.points >= target_amount) return TRUE else return FALSE -/datum/objective/crew/cargotechnician - -/datum/objective/crew/cargotechnician/petsplosion - explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/cargotechnician/petsplosion/New() - . = ..() - target_amount = rand(10,30) - update_explanation_text() - -/datum/objective/crew/cargotechnician/petsplosion/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish." - -/datum/objective/crew/cargotechnician/petsplosion/check_completion() - var/petcount = target_amount - for(var/mob/living/simple_animal/pet/P in GLOB.mob_list) - if(!(P.stat == DEAD)) - if(P.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(P)]) - petcount-- - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(!(H.stat == DEAD)) - if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) - if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar)) - petcount-- - if(petcount <= 0) - return TRUE - else - return FALSE - -/datum/objective/crew/cargotechnician/points //ported from old hippie - explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift." - -/datum/objective/crew/cargotechnician/points/New() - . = ..() - target_amount = rand(25000,100000) - update_explanation_text() - -/datum/objective/crew/cargotechnician/points/update_explanation_text() - . = ..() - explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift." - -/datum/objective/crew/cargotechnician/points/check_completion() - if(SSshuttle.points >= target_amount) - return TRUE - else - return FALSE - -/datum/objective/crew/shaftminer - -/datum/objective/crew/shaftminer/bubblegum +/datum/objective/crew/bubblegum explanation_text = "Ensure Bubblegum is dead at the end of the shift." + jobs = "shaftminer" -/datum/objective/crew/shaftminer/bubblegum/check_completion() +/datum/objective/crew/bubblegum/check_completion() for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list) if(!(B.stat == DEAD)) return FALSE return TRUE -/datum/objective/crew/shaftminer/fatstacks //ported from old hippie +/datum/objective/crew/fatstacks //ported from old hippie explanation_text = "Have at least (something broke, report this to the development discussion channel of citadels discord) mining points on your ID at the end of the shift." + jobs = "shaftminer" -/datum/objective/crew/shaftminer/fatstacks/New() +/datum/objective/crew/fatstacks/New() . = ..() target_amount = rand(15000,50000) update_explanation_text() -/datum/objective/crew/shaftminer/fatstacks/update_explanation_text() +/datum/objective/crew/fatstacks/update_explanation_text() . = ..() explanation_text = "Have at least [target_amount] mining points on your ID at the end of the shift." -/datum/objective/crew/shaftminer/fatstacks/check_completion() +/datum/objective/crew/fatstacks/check_completion() if(owner && owner.current) var/mob/living/carbon/human/H = owner.current var/obj/item/card/id/theID = H.get_idcard() diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index f6defe3242..054e707fd9 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -1,13 +1,12 @@ /* CIVILIAN OBJECTIVES */ -/datum/objective/crew/botanist - -/datum/objective/crew/botanist/druglord //ported from old Hippie with adjustments +/datum/objective/crew/druglordbot //ported from old Hippie with adjustments var/targetchem = "none" var/datum/reagent/chempath explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends." + jobs = "botanist" -/datum/objective/crew/botanist/druglord/New() +/datum/objective/crew/druglordbot/New() . = ..() target_amount = rand(3,20) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) @@ -18,11 +17,11 @@ targetchem = initial(chempath.id) update_explanation_text() -/datum/objective/crew/botanist/druglord/update_explanation_text() +/datum/objective/crew/druglordbot/update_explanation_text() . = ..() explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends." -/datum/objective/crew/botanist/druglord/check_completion() +/datum/objective/crew/druglordbot/check_completion() var/pillcount = target_amount if(owner.current) if(owner.current.contents) @@ -34,14 +33,13 @@ else return FALSE -/datum/objective/crew/cook - -/datum/objective/crew/cook/foodhoard +/datum/objective/crew/foodhoard var/datum/crafting_recipe/food/targetfood var/obj/item/reagent_containers/food/foodpath explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom." + jobs = "cook" -/datum/objective/crew/cook/foodhoard/New() +/datum/objective/crew/foodhoard/New() . = ..() target_amount = rand(2,10) var/blacklist = list(/datum/crafting_recipe/food, /datum/crafting_recipe/food/cak) @@ -50,36 +48,34 @@ foodpath = initial(targetfood.result) update_explanation_text() -/datum/objective/crew/cook/foodhoard/update_explanation_text() +/datum/objective/crew/foodhoard/update_explanation_text() . = ..() explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom." -/datum/objective/crew/cook/foodhoard/check_completion() +/datum/objective/crew/foodhoard/check_completion() if(owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) return TRUE else return FALSE -/datum/objective/crew/bartender - -/datum/objective/crew/bartender/responsibility +/datum/objective/crew/responsibility explanation_text = "Make sure nobody dies of alcohol poisoning." + jobs = "bartender" -/datum/objective/crew/bartender/responsibility/check_completion() +/datum/objective/crew/responsibility/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.drunkenness >= 80) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) return FALSE return TRUE -/datum/objective/crew/janitor - -/datum/objective/crew/janitor/clean //ported from old Hippie +/datum/objective/crew/clean //ported from old Hippie var/list/areas = list() var/hardmode = FALSE explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift." + jobs = "janitor" -/datum/objective/crew/janitor/clean/New() +/datum/objective/crew/clean/New() . = ..() if(prob(1)) hardmode = TRUE @@ -94,7 +90,7 @@ areas |= pick_n_take(possibleareas) update_explanation_text() -/datum/objective/crew/janitor/clean/update_explanation_text() +/datum/objective/crew/clean/update_explanation_text() . = ..() explanation_text = "Ensure that the" for(var/i in 1 to areas.len) @@ -108,27 +104,26 @@ if(hardmode) explanation_text += " Chop-chop." -/datum/objective/crew/janitor/clean/check_completion() +/datum/objective/crew/clean/check_completion() for(var/area/A in areas) for(var/obj/effect/decal/cleanable/C in area_contents(A)) return FALSE return TRUE -/datum/objective/crew/clown - -/datum/objective/crew/clown/slipster //ported from old Hippie with adjustments +/datum/objective/crew/slipster //ported from old Hippie with adjustments explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift." + jobs = "clown" -/datum/objective/crew/clown/slipster/New() +/datum/objective/crew/slipster/New() . = ..() target_amount = rand(5, 20) update_explanation_text() -/datum/objective/crew/clown/slipster/update_explanation_text() +/datum/objective/crew/slipster/update_explanation_text() . = ..() explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift." -/datum/objective/crew/clown/slipster/check_completion() +/datum/objective/crew/slipster/check_completion() var/list/uniqueslips = list() if(owner && owner.current) for(var/obj/item/device/pda/clown/PDA in owner.current.get_contents()) @@ -139,24 +134,22 @@ else return FALSE -/datum/objective/crew/mime - -/datum/objective/crew/mime/vow //ported from old Hippie +/datum/objective/crew/vow //ported from old Hippie explanation_text = "Never break your vow of silence." + jobs = "mime" -/datum/objective/crew/mime/vow/check_completion() +/datum/objective/crew/vow/check_completion() if(owner && owner.current) var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG] if(say_log.len > 0) return FALSE return TRUE -/datum/objective/crew/chaplain - -/datum/objective/crew/chaplain/nullrod +/datum/objective/crew/nullrod explanation_text = "Don't lose your holy rod." + jobs = "chaplain" -/datum/objective/crew/chaplain/nullrod/check_completion() +/datum/objective/crew/nullrod/check_completion() if(owner && owner.current) if(owner.current.check_contents_for(typesof(/obj/item/nullrod))) return TRUE @@ -164,23 +157,22 @@ return TRUE return FALSE -/datum/objective/crew/curator - -/datum/objective/crew/curator/reporter //ported from old hippie +/datum/objective/crew/reporter //ported from old hippie var/charcount = 100 explanation_text = "Publish at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters." + jobs = "curator" -/datum/objective/crew/curator/reporter/New() +/datum/objective/crew/reporter/New() . = ..() target_amount = rand(2,10) charcount = rand(20,250) update_explanation_text() -/datum/objective/crew/curator/reporter/update_explanation_text() +/datum/objective/crew/reporter/update_explanation_text() . = ..() explanation_text = "Publish at least [target_amount] articles containing at least [charcount] characters." -/datum/objective/crew/curator/reporter/check_completion() +/datum/objective/crew/reporter/check_completion() if(owner && owner.current) var/ownername = "[ckey(owner.current.real_name)][ckey(owner.assigned_role)]" for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) @@ -193,41 +185,41 @@ else return FALSE -/datum/objective/crew/assistant - -/datum/objective/crew/assistant/departmentclothes +/datum/objective/crew/departmentclothes var/obj/item/clothing/under/rank/targetuniform explanation_text = "Be wearing a (Yo, this objective broke. report this to citadels discord via the development channel) at the end of the shift." + jobs = "assistant" -/datum/objective/crew/assistant/departmentclothes/New() +/datum/objective/crew/departmentclothes/New() . = ..() var/list/blacklist = list(/obj/item/clothing/under/rank, /obj/item/clothing/under/rank/miner, /obj/item/clothing/under/rank/medical/blue, /obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/purple, /obj/item/clothing/under/rank/security/grey, /obj/item/clothing/under/rank/warden/grey, /obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/mailman, /obj/item/clothing/under/rank/psyche, /obj/item/clothing/under/rank/clown/sexy, /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander, /obj/item/clothing/under/rank/security/navyblue/russian, /obj/item/clothing/under/rank/security/blueshirt) var/list/validclothes = typesof(/obj/item/clothing/under/rank) - blacklist targetuniform = pick(validclothes) update_explanation_text() -/datum/objective/crew/assistant/departmentclothes/update_explanation_text() +/datum/objective/crew/departmentclothes/update_explanation_text() . = ..() explanation_text = "Be wearing a [initial(targetuniform.name)] at the end of the shift." -/datum/objective/crew/assistant/departmentclothes/check_completion() +/datum/objective/crew/departmentclothes/check_completion() if(owner && owner.current) var/mob/living/carbon/human/H = owner.current if(istype(H.w_uniform, targetuniform)) return TRUE return FALSE -/datum/objective/crew/assistant/pwrgame //ported from Goon +/datum/objective/crew/pwrgame //ported from Goon with adjustments var/obj/item/clothing/targettidegarb explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)." + jobs = "assistant" -/datum/objective/crew/assistant/pwrgame/New() +/datum/objective/crew/pwrgame/New() . = ..() var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask, /obj/item/clothing/suit/space) targettidegarb = pick(muhvalids) update_explanation_text() -/datum/objective/crew/assistant/pwrgame/update_explanation_text() +/datum/objective/crew/pwrgame/update_explanation_text() . = ..() explanation_text = "Get your grubby hands on a [initial(targettidegarb.name)]." /* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards. @@ -255,16 +247,17 @@ explanation_text += "grubby hands " explanation_text += "on a space suit." replace this if you're making this monstrosity work */ -/datum/objective/crew/assistant/pwrgame/check_completion() +/datum/objective/crew/pwrgame/check_completion() if(owner.current && owner.current.check_contents_for(typesof(targettidegarb))) return TRUE else return FALSE -/datum/objective/crew/assistant/promotion //ported from Goon +/datum/objective/crew/promotion //ported from Goon explanation_text = "Have a non-assistant ID registered to you at the end of the shift." + jobs = "assistant" -/datum/objective/crew/assistant/promotion/check_completion() +/datum/objective/crew/promotion/check_completion() if(owner && owner.current) var/mob/living/carbon/human/H = owner.current var/obj/item/card/id/theID = H.get_idcard() diff --git a/code/citadel/crew_objectives/cit_crewobjectives_command.dm b/code/citadel/crew_objectives/cit_crewobjectives_command.dm index 1ee6beaee6..b4f0d07c08 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_command.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_command.dm @@ -1,31 +1,30 @@ /* COMMAND OBJECTIVES */ -/datum/objective/crew/captain/ - -/datum/objective/crew/captain/hat //Ported from Goon +/datum/objective/crew/caphat //Ported from Goon explanation_text = "Don't lose your hat." + jobs = "captain" -/datum/objective/crew/captain/hat/check_completion() +/datum/objective/crew/caphat/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat)) return TRUE else return FALSE -/datum/objective/crew/captain/datfukkendisk //Ported from old Hippie +/datum/objective/crew/datfukkendisk //Ported from old Hippie explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom." + jobs = "captain" //give this to other heads at your own risk. -/datum/objective/crew/captain/datfukkendisk/check_completion() +/datum/objective/crew/datfukkendisk/check_completion() if(owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)]) return TRUE else return FALSE -/datum/objective/crew/headofpersonnel/ - -/datum/objective/crew/headofpersonnel/ian //Ported from old Hippie +/datum/objective/crew/ian //Ported from old Hippie explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift." + jobs = "headofpersonnel" -/datum/objective/crew/headofpersonnel/ian/check_completion() +/datum/objective/crew/ian/check_completion() if(owner.current) for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list) if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)]) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm index 5c2f9bd03d..7cf523fd2c 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm @@ -1,20 +1,19 @@ /* ENGINEERING OBJECTIVES */ -/datum/objective/crew/chiefengineer - -/datum/objective/crew/chiefengineer/integrity //ported from old Hippie +/datum/objective/crew/integrity //ported from old Hippie explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends." + jobs = "chiefengineer,stationengineer" -/datum/objective/crew/chiefengineer/integrity/New() +/datum/objective/crew/integrity/New() . = ..() target_amount = rand(60,95) update_explanation_text() -/datum/objective/crew/chiefengineer/integrity/update_explanation_text() +/datum/objective/crew/integrity/update_explanation_text() . = ..() explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends." -/datum/objective/crew/chiefengineer/integrity/check_completion() +/datum/objective/crew/integrity/check_completion() var/datum/station_state/end_state = new /datum/station_state() end_state.count() var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) @@ -23,35 +22,13 @@ else return FALSE -/datum/objective/crew/chiefengineer/poly +/datum/objective/crew/poly explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift." + jobs = "chiefengineer" -/datum/objective/crew/chiefengineer/poly/check_completion() +/datum/objective/crew/poly/check_completion() for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list) if(!(dumbbird.stat == DEAD) && dumbbird.ears) if(istype(dumbbird.ears, /obj/item/device/radio/headset)) return TRUE return FALSE - -/datum/objective/crew/stationengineer - -/datum/objective/crew/stationengineer/integrity //ported from old Hippie - explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends." - -/datum/objective/crew/stationengineer/integrity/New() - . = ..() - target_amount = rand(60,95) - update_explanation_text() - -/datum/objective/crew/stationengineer/integrity/update_explanation_text() - . = ..() - explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends." - -/datum/objective/crew/stationengineer/integrity/check_completion() - var/datum/station_state/end_state = new /datum/station_state() - end_state.count() - var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) - if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount) - return TRUE - else - return FALSE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm index 4147884b09..9a9010930d 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm @@ -1,23 +1,23 @@ /* MEDICAL OBJECTIVES */ -/datum/objective/crew/chiefmedicalofficer/ - -/datum/objective/crew/chiefmedicalofficer/morgue //Ported from old Hippie +/datum/objective/crew/morgue //Ported from old Hippie explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." + jobs = "chiefmedicalofficer,geneticist,medicaldoctor" -/datum/objective/crew/chiefmedicalofficer/morgue/check_completion() +/datum/objective/crew/morgue/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(H.stat == DEAD && H.z == ZLEVEL_STATION_PRIMARY) if(get_area(H) != /area/medical/morgue) return FALSE return TRUE -/datum/objective/crew/chiefmedicalofficer/chems //Ported from old Hippie +/datum/objective/crew/chems //Ported from old Hippie var/targetchem = "none" var/datum/reagent/chempath explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." + jobs = "chiefmedicalofficer,chemist" -/datum/objective/crew/chiefmedicalofficer/chems/New() +/datum/objective/crew/chems/New() . = ..() var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) var/drugs = typesof(/datum/reagent/drug) - blacklist @@ -27,11 +27,11 @@ targetchem = initial(chempath.id) update_explanation_text() -/datum/objective/crew/chiefmedicalofficer/chems/update_explanation_text() +/datum/objective/crew/chems/update_explanation_text() . = ..() explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." -/datum/objective/crew/chiefmedicalofficer/chems/check_completion() +/datum/objective/crew/chems/check_completion() if(owner.current) if(!owner.current.stat == DEAD && owner.current.reagents) if(owner.current.reagents.has_reagent(targetchem)) @@ -39,53 +39,13 @@ else return FALSE -/datum/objective/crew/geneticist - -/datum/objective/crew/geneticist/morgue //Ported from old Hippie - explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." - -/datum/objective/crew/geneticist/morgue/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION_PRIMARY) - if(get_area(H) != /area/medical/morgue) - return FALSE - return TRUE - -/datum/objective/crew/chemist/ - -/datum/objective/crew/chemist/chems //Ported from old Hippie - var/targetchem = "none" - var/datum/reagent/chempath - explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends." - -/datum/objective/crew/chemist/chems/New() - . = ..() - var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingAdrenaline, /datum/reagent/medicine/changelingAdrenaline2) - var/drugs = typesof(/datum/reagent/drug) - blacklist - var/meds = typesof(/datum/reagent/medicine) - blacklist - var/chemlist = drugs + meds - chempath = pick(chemlist) - targetchem = initial(chempath.id) - update_explanation_text() - -/datum/objective/crew/chemist/chems/update_explanation_text() - . = ..() - explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends." - -/datum/objective/crew/chemist/chems/check_completion() - if(owner.current) - if(!owner.current.stat == DEAD && owner.current.reagents) - if(owner.current.reagents.has_reagent(targetchem)) - return TRUE - else - return FALSE - -/datum/objective/crew/chemist/druglord //ported from old Hippie with adjustments +/datum/objective/crew/druglordchem //ported from old Hippie with adjustments var/targetchem = "none" var/datum/reagent/chempath explanation_text = "Have at least (somethin broke here) pills containing (report this on the development discussion channel of citadel's discord) when the shift ends." + jobs = "chemist" -/datum/objective/crew/chemist/druglord/New() +/datum/objective/crew/druglordchem/New() . = ..() target_amount = rand(5,50) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) @@ -95,11 +55,11 @@ targetchem = initial(chempath.id) update_explanation_text() -/datum/objective/crew/chemist/druglord/update_explanation_text() +/datum/objective/crew/druglordchem/update_explanation_text() . = ..() explanation_text = "Have at least [target_amount] pills containing [initial(chempath.name)] when the shift ends." -/datum/objective/crew/chemist/druglord/check_completion() +/datum/objective/crew/druglordchem/check_completion() var/pillcount = target_amount if(owner.current) if(owner.current.contents) @@ -111,27 +71,14 @@ else return FALSE -/datum/objective/crew/virologist - -/datum/objective/crew/virologist/noinfections +/datum/objective/crew/noinfections explanation_text = "Ensure no living crew members are infected with harmful viruses at the end of the shift" + jobs = "virologist" -/datum/objective/crew/virologist/noinfections/check_completion() +/datum/objective/crew/noinfections/check_completion() for(var/mob/living/carbon/human/H in GLOB.mob_list) if(!H.stat == DEAD) if(H.z == ZLEVEL_STATION_PRIMARY || SSshuttle.emergency.shuttle_areas[get_area(H)]) if(H.check_virus() == 2) return FALSE return TRUE - -/datum/objective/crew/medicaldoctor - -/datum/objective/crew/medicaldoctor/morgue //Ported from old Hippie - explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends." - -/datum/objective/crew/medicaldoctor/morgue/check_completion() - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat == DEAD && H.z == ZLEVEL_STATION_PRIMARY) - if(get_area(H) != /area/medical/morgue) - return FALSE - return TRUE diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm index d028a453bc..f04f97b174 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm @@ -1,20 +1,19 @@ /* SCIENCE OBJECTIVES */ -/datum/objective/crew/researchdirector/ - -/datum/objective/crew/researchdirector/cyborgs //Ported from old Hippie +/datum/objective/crew/cyborgs //Ported from old Hippie explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." + jobs = "researchdirector,roboticist" -/datum/objective/crew/researchdirector/cyborgs/New() +/datum/objective/crew/cyborgs/New() . = ..() target_amount = rand(3,10) update_explanation_text() -/datum/objective/crew/researchdirector/cyborgs/update_explanation_text() +/datum/objective/crew/cyborgs/update_explanation_text() . = ..() explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." -/datum/objective/crew/researchdirector/cyborgs/check_completion() +/datum/objective/crew/cyborgs/check_completion() var/borgcount = target_amount for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) if(!(R.stat == DEAD)) @@ -24,68 +23,23 @@ else return FALSE -/datum/objective/crew/researchdirector/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs. +/datum/objective/crew/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs. var/datum/design/targetdesign explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift." + jobs = "researchdirector,scientist" -/datum/objective/crew/researchdirector/research/New() +/datum/objective/crew/research/New() . = ..() targetdesign = pick(subtypesof(/datum/design)) update_explanation_text() -/datum/objective/crew/researchdirector/research/update_explanation_text() +/datum/objective/crew/research/update_explanation_text() . = ..() explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift." -/datum/objective/crew/researchdirector/research/check_completion() +/datum/objective/crew/research/check_completion() for(var/obj/machinery/r_n_d/server/S in GLOB.machines) if(S && S.files && S.files.known_designs) if(targetdesign in S.files.known_designs) return TRUE - return FALSE - -/datum/objective/crew/scientist/ - -/datum/objective/crew/scientist/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs. - var/datum/design/targetdesign - explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift." - -/datum/objective/crew/scientist/research/New() - . = ..() - targetdesign = pick(subtypesof(/datum/design)) - update_explanation_text() - -/datum/objective/crew/scientist/research/update_explanation_text() - . = ..() - explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift." - -/datum/objective/crew/scientist/research/check_completion() - for(var/obj/machinery/r_n_d/server/S in GLOB.machines) - if(S && S.files && S.files.known_designs) - if(targetdesign in S.files.known_designs) - return TRUE - return FALSE - -/datum/objective/crew/roboticist/ - -/datum/objective/crew/roboticist/cyborgs //Ported from old Hippie - explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends." - -/datum/objective/crew/roboticist/cyborgs/New() - . = ..() - target_amount = rand(3,10) - update_explanation_text() - -/datum/objective/crew/roboticist/cyborgs/update_explanation_text() - . = ..() - explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends." - -/datum/objective/crew/roboticist/cyborgs/check_completion() - var/borgcount = target_amount - for(var/mob/living/silicon/robot/R in GLOB.living_mob_list) - if(!(R.stat == DEAD)) - borgcount-- - if(borgcount <= 0) - return TRUE - else - return FALSE + return FALSE \ No newline at end of file diff --git a/code/citadel/crew_objectives/cit_crewobjectives_security.dm b/code/citadel/crew_objectives/cit_crewobjectives_security.dm index b0b9bb3b55..4e1ca87582 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_security.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_security.dm @@ -1,86 +1,33 @@ /* SECURITY OBJECTIVES */ -/datum/objective/crew/headofsecurity/ - -/datum/objective/crew/headofsecurity/enjoyyourstay +/datum/objective/crew/enjoyyourstay explanation_text = "Welcome to Space Station 13. Enjoy your stay." - -/datum/objective/crew/headofsecurity/enjoyyourstay/New() - . = ..() - update_explanation_text() - -/datum/objective/crew/headofsecurity/enjoyyourstay/update_explanation_text() - . = ..() + jobs = "headofsecurity,securityofficer,warden,detective" var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.") - explanation_text = pick(edglines) -/datum/objective/crew/headofsecurity/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law to the best of your ability." - return TRUE - -/datum/objective/crew/securityofficer/ - -/datum/objective/crew/securityofficer/enjoyyourstay - explanation_text = "Welcome to Space Station 13. Enjoy your stay." - -/datum/objective/crew/securityofficer/enjoyyourstay/New() +/datum/objective/crew/enjoyyourstay/New() . = ..() update_explanation_text() -/datum/objective/crew/securityofficer/enjoyyourstay/update_explanation_text() +/datum/objective/crew/enjoyyourstay/update_explanation_text() . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.") explanation_text = pick(edglines) -/datum/objective/crew/securityofficer/enjoyyourstay/check_completion() +/datum/objective/crew/enjoyyourstay/check_completion() explanation_text = "Enforce Space Law to the best of your ability." - return TRUE + if(owner && owner.current) + if(owner.current.stat != DEAD) + return TRUE + return FALSE -/datum/objective/crew/warden/ - -/datum/objective/crew/warden/enjoyyourstay - explanation_text = "Welcome to Space Station 13. Enjoy your stay." - -/datum/objective/crew/warden/enjoyyourstay/New() - . = ..() - update_explanation_text() - -/datum/objective/crew/warden/enjoyyourstay/update_explanation_text() - . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.") - explanation_text = pick(edglines) - -/datum/objective/crew/warden/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law to the best of your ability." - return TRUE - -/datum/objective/crew/detective/ - -/datum/objective/crew/detective/enjoyyourstay - explanation_text = "Welcome to Space Station 13. Enjoy your stay." - -/datum/objective/crew/detective/enjoyyourstay/New() - . = ..() - update_explanation_text() - -/datum/objective/crew/detective/enjoyyourstay/update_explanation_text() - . = ..() - var/list/edglines = list("Welcome to Space Station 13. Enjoy your stay.", "You signed up for this.", "Abandon hope.", "The tide's gonna stop eventually.", "Hey, someone's gotta do it.", "No, you can't resign.", "Security is a mission, not an intermission.", "Well, at least you know fashion.") - explanation_text = pick(edglines) - -/datum/objective/crew/detective/enjoyyourstay/check_completion() - explanation_text = "Enforce Space Law to the best of your ability." - return TRUE - -/datum/objective/crew/lawyer/ - -/datum/objective/crew/lawyer/justicecrew +/datum/objective/crew/justicecrew explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends." + jobs = "lawyer" -/datum/objective/crew/lawyer/justicecrew/check_completion() - if(owner.current) +/datum/objective/crew/justicecrew/check_completion() + if(owner && owner.current) for(var/datum/mind/M in SSticker.minds) if(M.current && isliving(M.current)) - if(!M.special_role && !M.assigned_role == "Security Officer" && !M.assigned_role == "Detective" && !M.assigned_role == "Head of Security" && !M.assigned_role == "Lawyer" && !M.assigned_role == "Warden" && get_area(M.current) != typesof(/area/security)) + if(!M.special_role && !(M.assigned_role == "Security Officer") && !(M.assigned_role == "Detective") && !(M.assigned_role == "Head of Security") && !(M.assigned_role == "Lawyer") && !(M.assigned_role == "Warden") && get_area(M.current) != typesof(/area/security)) return FALSE return TRUE From 808b0b6d9affa39c165518516283baf749cdb287 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 29 Sep 2017 17:02:19 -0400 Subject: [PATCH 113/144] guess whos bad at coding --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index ed2a05bdd6..91b7594e6a 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -32,7 +32,7 @@ /datum/controller/subsystem/ticker/proc/get_valid_crew_objs(var/job = "")//taken from old hippie with adjustments var/list/objpaths = typesof(/datum/objective/crew) var/list/objlist = list() - for(/datum/objective/crew/obj in objpaths) + for(var/datum/objective/crew/obj in objpaths) if(obj && initial(obj.jobs)) var/list/availableto = splittext(initial(obj.jobs),",") if(job in availableto) From 6b81ecbeb0d65f26bdc71cf92b7c34e93288ca84 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 29 Sep 2017 17:46:59 -0400 Subject: [PATCH 114/144] time for 150 hours of testing --- code/citadel/cit_crewobjectives.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 91b7594e6a..1675ca8f03 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -16,7 +16,7 @@ return if(!crewMind.assigned_role) return - var/validobjs = get_valid_crew_objs(ckey(crewMind.assigned_role)) + var/list/validobjs = get_valid_crew_objs(ckey(crewMind.assigned_role)) if(isnull(validobjs)) return if(!validobjs.len) From e04e05d8b78423e7913268e185315886610e3405 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 1 Oct 2017 19:37:15 -0400 Subject: [PATCH 115/144] 150 HOURS OF CODING --- code/citadel/cit_crewobjectives.dm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 1675ca8f03..0dad401786 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -17,9 +17,7 @@ if(!crewMind.assigned_role) return var/list/validobjs = get_valid_crew_objs(ckey(crewMind.assigned_role)) - if(isnull(validobjs)) - return - if(!validobjs.len) + if(!validobjs || !validobjs.len) return var/selectedObj = pick(validobjs) var/datum/objective/crew/newObjective = new selectedObj @@ -32,11 +30,11 @@ /datum/controller/subsystem/ticker/proc/get_valid_crew_objs(var/job = "")//taken from old hippie with adjustments var/list/objpaths = typesof(/datum/objective/crew) var/list/objlist = list() - for(var/datum/objective/crew/obj in objpaths) - if(obj && initial(obj.jobs)) - var/list/availableto = splittext(initial(obj.jobs),",") - if(job in availableto) - objlist += obj + for(var/hoorayhackyshit in objpaths) + var/datum/objective/crew/obj = hoorayhackyshit //dm is not a sane language in any way, shape, or form. + var/list/availableto = splittext(initial(obj.jobs),",") + if(job in availableto) + objlist += obj return objlist /datum/objective/crew/ From 70f06cfe356b35d6b42db922ada1cf593b42f313 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Sun, 1 Oct 2017 19:56:44 -0400 Subject: [PATCH 116/144] config. > CONFIG_GET --- code/controllers/configuration/entries/game_options.dm | 4 ++++ code/controllers/subsystem/ticker.dm | 6 +++--- code/modules/mob/dead/new_player/new_player.dm | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 106804a576..65c7dbaf4c 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -256,6 +256,10 @@ CONFIG_DEF(number/bombcap) value = 14 min_val = 4 +CONFIG_DEF(flag/allow_crew_objectives) +CONFIG_DEF(flag/allow_miscreants) +CONFIG_DEF(flag/allow_extended_miscreants) + /datum/config_entry/number/bombcap/ValidateAndSet(str_val) . = ..() if(.) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 6cbd70fd96..911b72e4da 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -260,9 +260,9 @@ SUBSYSTEM_DEF(ticker) qdel(S) //assign crew objectives and generate miscreants - if(config.allow_extended_miscreants && GLOB.master_mode == "extended") + if(CONFIG_GET(flag/allow_extended_miscreants) && GLOB.master_mode == "extended") GLOB.miscreants_allowed = TRUE - if(config.allow_miscreants && GLOB.master_mode != "extended") + if(CONFIG_GET(flag/allow_miscreants) && GLOB.master_mode != "extended") GLOB.miscreants_allowed = TRUE generate_crew_objectives() @@ -484,7 +484,7 @@ SUBSYSTEM_DEF(ticker) completedObjectives += "[i]
" to_chat(world, "[completedObjectives]
") else - if(config.allow_crew_objectives) + if(CONFIG_GET(flag/allow_crew_objectives)) to_chat(world, "Nobody completed their Crew Objectives!
") CHECK_TICK diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 5fe72f1938..167f1037c3 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -376,7 +376,7 @@ if(prob(2) && !issilicon(humanc) && !jobban_isbanned(humanc.mind, "Syndicate") && GLOB.miscreants_allowed) SSticker.generate_miscreant_objectives(humanc.mind) else - if(config.allow_crew_objectives) + if(CONFIG_GET(flag/allow_crew_objectives)) SSticker.generate_individual_objectives(humanc.mind) GLOB.joined_player_list += character.ckey From f7c6c8b4400c00be180489d35a3a49c4e94adbaa Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 2 Oct 2017 18:53:57 -0400 Subject: [PATCH 117/144] config. > CONFIG_GET 2: "all checks have failed" boogaloo --- code/citadel/cit_crewobjectives.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/citadel/cit_crewobjectives.dm b/code/citadel/cit_crewobjectives.dm index 0dad401786..2d9149f5b1 100644 --- a/code/citadel/cit_crewobjectives.dm +++ b/code/citadel/cit_crewobjectives.dm @@ -3,12 +3,12 @@ if(prob(2) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed) generate_miscreant_objectives(crewMind) else - if(config.allow_crew_objectives) + if(CONFIG_GET(flag/allow_crew_objectives)) generate_individual_objectives(crewMind) return /datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind) - if(!config.allow_crew_objectives) + if(!(CONFIG_GET(flag/allow_crew_objectives))) return if(!crewMind) return From b37556a9511ffedbcd2e760bf7bf09a280570e22 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Wed, 4 Oct 2017 20:19:43 -0400 Subject: [PATCH 118/144] makes responsibility objective a little more clear --- code/citadel/crew_objectives/cit_crewobjectives_civilian.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm index 054e707fd9..81427c7951 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm @@ -59,7 +59,7 @@ return FALSE /datum/objective/crew/responsibility - explanation_text = "Make sure nobody dies of alcohol poisoning." + explanation_text = "Make sure nobody dies with alcohol poisoning." jobs = "bartender" /datum/objective/crew/responsibility/check_completion() From 20c5749416020f8c6c9367ec15d0cc6ff54d9ae0 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Thu, 5 Oct 2017 19:16:47 -0400 Subject: [PATCH 119/144] Cleans up leftover Hand of God gamemode references --- code/_onclick/hud/_defines.dm | 159 ++++++++++++++++++++++++++++ code/_onclick/hud/hud.dm | 5 - code/_onclick/hud/screen_objects.dm | 5 - tgstation.dme | 1 - 4 files changed, 159 insertions(+), 11 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index ce7014d765..15eed9169d 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /* These defines specificy screen locations. For more information, see the byond documentation on the screen_loc var. @@ -160,3 +161,161 @@ #define ui_deityhealth "EAST-1:28,CENTER-2:13" #define ui_deitypower "EAST-1:28,CENTER-1:15" #define ui_deityfollowers "EAST-1:28,CENTER:17" +======= +/* + These defines specificy screen locations. For more information, see the byond documentation on the screen_loc var. + + The short version: + + Everything is encoded as strings because apparently that's how Byond rolls. + + "1,1" is the bottom left square of the user's screen. This aligns perfectly with the turf grid. + "1:2,3:4" is the square (1,3) with pixel offsets (+2, +4); slightly right and slightly above the turf grid. + Pixel offsets are used so you don't perfectly hide the turf under them, that would be crappy. + + In addition, the keywords NORTH, SOUTH, EAST, WEST and CENTER can be used to represent their respective + screen borders. NORTH-1, for example, is the row just below the upper edge. Useful if you want your + UI to scale with screen size. + + The size of the user's screen is defined by client.view (indirectly by world.view), in our case "15x15". + Therefore, the top right corner (except during admin shenanigans) is at "15,15" +*/ + +//Lower left, persistent menu +#define ui_inventory "WEST:6,SOUTH:5" + +//Middle left indicators +#define ui_lingchemdisplay "WEST,CENTER-1:15" +#define ui_lingstingdisplay "WEST:6,CENTER-3:11" +#define ui_crafting "12:-10,1:5" +#define ui_building "12:-10,1:21" +#define ui_language_menu "11:6,2:-11" + +#define ui_devilsouldisplay "WEST:6,CENTER-1:15" + +//Lower center, persistent menu +#define ui_sstore1 "CENTER-5:10,SOUTH:5" +#define ui_id "CENTER-4:12,SOUTH:5" +#define ui_belt "CENTER-3:14,SOUTH:5" +#define ui_back "CENTER-2:14,SOUTH:5" + +/proc/ui_hand_position(i) //values based on old hand ui positions (CENTER:-/+16,SOUTH:5) + var/x_off = -(!(i % 2)) + var/y_off = round((i-1) / 2) + return"CENTER+[x_off]:16,SOUTH+[y_off]:5" + +/proc/ui_equip_position(mob/M) + var/y_off = round((M.held_items.len-1) / 2) //values based on old equip ui position (CENTER: +/-16,SOUTH+1:5) + return "CENTER:-16,SOUTH+[y_off+1]:5" + +/proc/ui_swaphand_position(mob/M, which = 1) //values based on old swaphand ui positions (CENTER: +/-16,SOUTH+1:5) + var/x_off = which == 1 ? -1 : 0 + var/y_off = round((M.held_items.len-1) / 2) + return "CENTER+[x_off]:16,SOUTH+[y_off+1]:5" + +#define ui_storage1 "CENTER+1:18,SOUTH:5" +#define ui_storage2 "CENTER+2:20,SOUTH:5" + +#define ui_borg_sensor "CENTER-3:16, SOUTH:5" //borgs +#define ui_borg_lamp "CENTER-4:16, SOUTH:5" //borgs +#define ui_borg_thrusters "CENTER-5:16, SOUTH:5" //borgs +#define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs +#define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs +#define ui_inv3 "CENTER :16,SOUTH:5" //borgs +#define ui_borg_module "CENTER+1:16,SOUTH:5" //borgs +#define ui_borg_store "CENTER+2:16,SOUTH:5" //borgs +#define ui_borg_camera "CENTER+3:21,SOUTH:5" //borgs +#define ui_borg_album "CENTER+4:21,SOUTH:5" //borgs +#define ui_borg_language_menu "CENTER+4:21,SOUTH+1:5" //borgs + +#define ui_monkey_head "CENTER-5:13,SOUTH:5" //monkey +#define ui_monkey_mask "CENTER-4:14,SOUTH:5" //monkey +#define ui_monkey_neck "CENTER-3:15,SOUTH:5" //monkey +#define ui_monkey_back "CENTER-2:16,SOUTH:5" //monkey + +#define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien +#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien +#define ui_alien_language_menu "EAST-3:26,SOUTH:5" //alien + +#define ui_drone_drop "CENTER+1:18,SOUTH:5" //maintenance drones +#define ui_drone_pull "CENTER+2:2,SOUTH:5" //maintenance drones +#define ui_drone_storage "CENTER-2:14,SOUTH:5" //maintenance drones +#define ui_drone_head "CENTER-3:14,SOUTH:5" //maintenance drones + +//Lower right, persistent menu +#define ui_drop_throw "EAST-1:28,SOUTH+1:7" +#define ui_pull_resist "EAST-2:26,SOUTH+1:7" +#define ui_movi "EAST-2:26,SOUTH:5" +#define ui_acti "EAST-3:24,SOUTH:5" +#define ui_zonesel "EAST-1:28,SOUTH:5" +#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12) + +#define ui_borg_pull "EAST-2:26,SOUTH+1:7" +#define ui_borg_radio "EAST-1:28,SOUTH+1:7" +#define ui_borg_intents "EAST-2:26,SOUTH:5" + + +//Upper-middle right (alerts) +#define ui_alert1 "EAST-1:28,CENTER+5:27" +#define ui_alert2 "EAST-1:28,CENTER+4:25" +#define ui_alert3 "EAST-1:28,CENTER+3:23" +#define ui_alert4 "EAST-1:28,CENTER+2:21" +#define ui_alert5 "EAST-1:28,CENTER+1:19" + + +//Middle right (status indicators) +#define ui_healthdoll "EAST-1:28,CENTER-2:13" +#define ui_health "EAST-1:28,CENTER-1:15" +#define ui_internal "EAST-1:28,CENTER:17" + +//borgs +#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. + +//aliens +#define ui_alien_health "EAST,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. +#define ui_alienplasmadisplay "EAST,CENTER-2:15" +#define ui_alien_queen_finder "EAST,CENTER-3:15" + +//constructs +#define ui_construct_pull "EAST,CENTER-2:15" +#define ui_construct_health "EAST,CENTER:15" //same as borgs and humans + +// AI + +#define ui_ai_core "SOUTH:6,WEST" +#define ui_ai_camera_list "SOUTH:6,WEST+1" +#define ui_ai_track_with_camera "SOUTH:6,WEST+2" +#define ui_ai_camera_light "SOUTH:6,WEST+3" +#define ui_ai_crew_monitor "SOUTH:6,WEST+4" +#define ui_ai_crew_manifest "SOUTH:6,WEST+5" +#define ui_ai_alerts "SOUTH:6,WEST+6" +#define ui_ai_announcement "SOUTH:6,WEST+7" +#define ui_ai_shuttle "SOUTH:6,WEST+8" +#define ui_ai_state_laws "SOUTH:6,WEST+9" +#define ui_ai_pda_send "SOUTH:6,WEST+10" +#define ui_ai_pda_log "SOUTH:6,WEST+11" +#define ui_ai_take_picture "SOUTH:6,WEST+12" +#define ui_ai_view_images "SOUTH:6,WEST+13" +#define ui_ai_sensor "SOUTH:6,WEST+14" + +//Pop-up inventory +#define ui_shoes "WEST+1:8,SOUTH:5" + +#define ui_iclothing "WEST:6,SOUTH+1:7" +#define ui_oclothing "WEST+1:8,SOUTH+1:7" +#define ui_gloves "WEST+2:10,SOUTH+1:7" + +#define ui_glasses "WEST:6,SOUTH+3:11" +#define ui_mask "WEST+1:8,SOUTH+2:9" +#define ui_ears "WEST+2:10,SOUTH+2:9" +#define ui_neck "WEST:6,SOUTH+2:9" +#define ui_head "WEST+1:8,SOUTH+3:11" + +//Ghosts + +#define ui_ghost_jumptomob "SOUTH:6,CENTER-2:24" +#define ui_ghost_orbit "SOUTH:6,CENTER-1:24" +#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24" +#define ui_ghost_teleport "SOUTH:6,CENTER+1:24" +#define ui_ghost_pai "SOUTH: 6, CENTER+2:24" +>>>>>>> 7d98788... Cleans up leftover Hand of God gamemode references (#31326) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 8c1c5a983c..a212d46f99 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -23,9 +23,6 @@ var/obj/screen/devil/soul_counter/devilsouldisplay - var/obj/screen/deity_power_display - var/obj/screen/deity_follower_display - var/obj/screen/nightvisionicon var/obj/screen/action_intent var/obj/screen/zone_select @@ -114,8 +111,6 @@ blobpwrdisplay = null alien_plasma_display = null alien_queen_finder = null - deity_power_display = null - deity_follower_display = null nightvisionicon = null if(plane_masters.len) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 0906a099a0..397e04a4f5 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -485,11 +485,6 @@ icon = 'icons/mob/screen_cyborg.dmi' screen_loc = ui_borg_health -/obj/screen/healths/deity - name = "Nexus Health" - icon_state = "deity_nexus" - screen_loc = ui_deityhealth - /obj/screen/healths/blob name = "blob health" icon_state = "block" diff --git a/tgstation.dme b/tgstation.dme index 8b927cf2bb..04de6d70bc 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -130,7 +130,6 @@ #include "code\_onclick\click.dm" #include "code\_onclick\cyborg.dm" #include "code\_onclick\drag_drop.dm" -#include "code\_onclick\god.dm" #include "code\_onclick\item_attack.dm" #include "code\_onclick\observer.dm" #include "code\_onclick\other_mobs.dm" From a1202bcec7bdbef048a6980f2f00a4939142ad21 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Thu, 5 Oct 2017 02:53:27 -0400 Subject: [PATCH 120/144] Adds missing warning lines under firedoors in xeno --- _maps/map_files/Deltastation/DeltaStation2.dmm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index efae305c74..b2c40d5672 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -141054,9 +141054,9 @@ cHW cHW cHW cOy -cQx -cRP -cTA +epl +epm +epn cOy cHW cHS @@ -155987,7 +155987,7 @@ esD dAw dBO dDd -esF +esB dFd dGE dHP @@ -156238,13 +156238,13 @@ drs dsS drs dvx -esA +esz dyb dzf dAx dBP dDe -esG +esB dFe dGF dHP @@ -157015,7 +157015,7 @@ dzi dAA dBS esE -esH +esB dEY dGA dHP From 5a390937aebfa1023051fc4e348cd1c3bf7bfbd2 Mon Sep 17 00:00:00 2001 From: oranges Date: Thu, 5 Oct 2017 08:17:27 +0000 Subject: [PATCH 122/144] Fix spelling of conscious --- code/modules/mob/living/carbon/human/examine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 0ca0bed9fc..c120f4f637 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -281,7 +281,7 @@ if(getBrainLoss() >= 60) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" if(InCritical()) - msg += "[t_He] is barely concious.\n" + msg += "[t_He] is barely conscious.\n" if(getorgan(/obj/item/organ/brain)) if(istype(src, /mob/living/carbon/human/interactive)) var/mob/living/carbon/human/interactive/auto = src From 0dc8bd5d8318668516827c6900925d3b92a3e1b9 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Thu, 5 Oct 2017 02:09:55 -0400 Subject: [PATCH 124/144] Sets turf decal layer --- code/__DEFINES/layers.dm | 1 + code/game/objects/effects/decals/decal.dm | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index d33eaa35da..ee9e97cbd9 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -20,6 +20,7 @@ #define LATTICE_LAYER 2.2 #define DISPOSAL_PIPE_LAYER 2.3 #define GAS_PIPE_HIDDEN_LAYER 2.35 +#define TURF_DECAL_LAYER 2.39 #define WIRE_LAYER 2.4 #define WIRE_TERMINAL_LAYER 2.45 #define GAS_SCRUBBER_LAYER 2.46 diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 14a8e25eba..d9b217b91b 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -1,6 +1,7 @@ /obj/effect/decal name = "decal" anchored = TRUE +<<<<<<< HEAD resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/decal/ex_act(severity, target) @@ -19,6 +20,27 @@ var/group = TURF_DECAL_PAINT icon = 'icons/turf/decals.dmi' icon_state = "warningline" +======= + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/effect/decal/ex_act(severity, target) + qdel(src) + +/obj/effect/decal/fire_act(exposed_temperature, exposed_volume) + if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava + qdel(src) + +/obj/effect/decal/HandleTurfChange(turf/T) + ..() + if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || istype(T, /turf/open/chasm))) + qdel(src) + +/obj/effect/turf_decal + var/group = TURF_DECAL_PAINT + icon = 'icons/turf/decals.dmi' + icon_state = "warningline" + layer = TURF_DECAL_LAYER +>>>>>>> 41430d7... Sets decal layer anchored = TRUE //in case we need some special decals From 97e5c9b59002b7d1c41941cb652038744957ca08 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Wed, 4 Oct 2017 23:20:12 -0400 Subject: [PATCH 125/144] Fixes runed metal and brass sprites --- code/game/objects/items/stacks/sheets/sheet_types.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 0d30d7f7b3..f19c384f98 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -274,7 +274,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ desc = "Sheets of cold metal with shifting inscriptions writ upon them." singular_name = "runed metal sheet" icon_state = "sheet-runed" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/stack_objects.dmi' sheettype = "runed" merge_type = /obj/item/stack/sheet/runed_metal novariants = TRUE @@ -326,7 +326,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ desc = "Sheets made out of brass." singular_name = "brass sheet" icon_state = "sheet-brass" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/stack_objects.dmi' resistance_flags = FIRE_PROOF | ACID_PROOF throwforce = 10 max_amount = 50 From 1d4078cd636dc878b6405c80a97f0eebc8ef7800 Mon Sep 17 00:00:00 2001 From: Michiyamenotehifunana <31995558+Michiyamenotehifunana@users.noreply.github.com> Date: Fri, 6 Oct 2017 16:24:30 +0800 Subject: [PATCH 127/144] Adds more toy guns moar foam moar lasertag --- code/citadel/cit_guns.dm | 150 +++++++++++++++++++++++++++++++++++- icons/obj/guns/cit_guns.dmi | Bin 32918 -> 38472 bytes sound/weapons/raygun.ogg | Bin 0 -> 24147 bytes 3 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 sound/weapons/raygun.ogg diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index 73a98db4e3..3dea7ce6e0 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -182,7 +182,7 @@ multiple_sprites = 2 /obj/item/gun/ballistic/automatic/x9/toy - name = "donksoft X9" + name = "\improper Foam Force X9" desc = "An old but reliable assault rifle made for combat against unknown enemies. Appears to be hastily converted. Ages 8 and up." icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "toy9" @@ -192,6 +192,14 @@ casing_ejector = 0 spread = 45 //MAXIMUM XCOM MEMES (actually that'd be 90 spread) +/datum/design/foam_x9 + name = "Foam Force X9 Rifle" + id = "foam_x9" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20000, MAT_GLASS = 10000) + build_path = /obj/item/gun/ballistic/automatic/x9/toy + category = list("hacked", "Misc") + ////////XCOM2 Magpistol///////// @@ -470,6 +478,34 @@ materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500) build_path = /obj/item/ammo_box/magazine/mmag +///foamagrifle/// + +/obj/item/ammo_box/magazine/toy/foamag + name = "foam force magrifle magazine" + icon = 'icons/obj/guns/cit_guns.dmi' + icon_state = "foamagmag" + max_ammo = 15 + multiple_sprites = 2 + ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag + +/obj/item/gun/ballistic/automatic/magrifle/toy + name = "foamag rifle" + desc = "A foam launching magnetic rifle. Ages 8 and up." + icon_state = "foamagrifle" + needs_permit = 0 + mag_type = /obj/item/ammo_box/magazine/toy/foamag + casing_ejector = FALSE + origin_tech = "combat=2;engineering=2;magnets=2" + +/datum/design/foam_magrifle + name = "Foam Force MagRifle" + id = "foam_magrifle" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000, MAT_GLASS = 7500) + build_path = /obj/item/gun/ballistic/automatic/magrifle/toy + category = list("hacked", "Misc") + + //////Hyper-Burst Rifle////// ///projectiles/// @@ -556,6 +592,53 @@ ..() icon_state = "hyperburst[magazine ? "-[get_ammo()]" : ""][chambered ? "" : "-e"]" +///toy memes/// + +/obj/item/projectile/beam/lasertag/mag //the projectile, compatible with regular laser tag armor + icon = 'icons/obj/guns/cit_guns.dmi' + icon_state = "magjectile-toy" + name = "lasertag magbolt" + forcedodge = TRUE //for penetration memes + range = 5 //so it isn't super annoying + light_range = 2 + light_color = LIGHT_COLOR_YELLOW + eyeblur = 0 + +/obj/item/ammo_casing/energy/laser/magtag + projectile_type = /obj/item/projectile/beam/lasertag/mag + select_name = "magtag" + pellets = 3 + variance = 30 + e_cost = 1000 + fire_sound = 'sound/weapons/magburst.ogg' + +/obj/item/gun/energy/laser/practice/hyperburst + name = "toy hyper-burst launcher" + desc = "A toy laser with a unique beam shaping lens that projects harmless bolts capable of going through objects. Compatible with existing laser tag systems." + ammo_type = list(/obj/item/ammo_casing/energy/laser/magtag) + icon = 'icons/obj/guns/cit_guns.dmi' + icon_state = "toyburst" + clumsy_check = 0 + needs_permit = 0 + fire_delay = 40 + weapon_weight = WEAPON_HEAVY + selfcharge = 1 + charge_delay = 2 + recoil = 2 + cell_type = /obj/item/stock_parts/cell/toymagburst + +/obj/item/stock_parts/cell/toymagburst + name = "toy mag burst rifle power supply" + maxcharge = 4000 + +/datum/design/foam_hyperburst + name = "MagTag Hyper Rifle" + id = "foam_hyperburst" + build_type = AUTOLATHE + materials = list(MAT_METAL = 35000, MAT_GLASS = 15000) + build_path = /obj/item/gun/energy/laser/practice/hyperburst + category = list("hacked", "Misc") + /* made redundant by reskinnable stetchkins //////Stealth Pistol////// @@ -583,6 +666,40 @@ */ +///foam stealth pistol/// + +/obj/item/gun/ballistic/automatic/toy/pistol/stealth + name = "foam force stealth pistol" + desc = "A small, easily concealable toy bullpup handgun. Ages 8 and up." + icon = 'icons/obj/guns/cit_guns.dmi' + icon_state = "foamsp" + w_class = WEIGHT_CLASS_SMALL + mag_type = /obj/item/ammo_box/magazine/toy/pistol + can_suppress = 0 + fire_sound = 'sound/weapons/gunshot_silenced.ogg' + suppressed = 1 + burst_size = 1 + fire_delay = 0 + actions_types = list() + +/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon() + ..() + if(magazine) + cut_overlays() + add_overlay("foamsp-magazine") + else + cut_overlays() + icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" + +/datum/design/foam_sp + name = "Foam Force Stealth Pistol" + id = "foam_sp" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000, MAT_GLASS = 1000) + build_path = /obj/item/gun/ballistic/automatic/toy/pistol/stealth + category = list("hacked", "Misc") + + //////10mm soporific bullets////// obj/item/projectile/bullet/c10mm/soporific @@ -768,4 +885,33 @@ obj/item/projectile/bullet/c10mm/soporific cut_overlays() add_overlay("[unique_reskin[current_skin]]-magazine") else - cut_overlays() \ No newline at end of file + cut_overlays() + +/////////RAYGUN MEMES///////// + +/obj/item/projectile/beam/lasertag/ray //the projectile, compatible with regular laser tag armor + icon = 'icons/obj/guns/cit_guns.dmi' + icon_state = "ray" + name = "ray bolt" + eyeblur = 0 + +/obj/item/ammo_casing/energy/laser/raytag + projectile_type = /obj/item/projectile/beam/lasertag/ray + select_name = "raytag" + fire_sound = 'sound/weapons/raygun.ogg' + +/obj/item/gun/energy/laser/practice/raygun + name = "toy ray gun" + icon = 'icons/obj/guns/cit_guns.dmi' + icon_state = "raygun" + desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems." + ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag) + selfcharge = 1 + +/datum/design/toyray + name = "RayTag Gun" + id = "toyray" + build_type = AUTOLATHE + materials = list(MAT_METAL = 7500, MAT_GLASS = 1000) + build_path = /obj/item/gun/energy/laser/practice/raygun + category = list("hacked", "Misc") diff --git a/icons/obj/guns/cit_guns.dmi b/icons/obj/guns/cit_guns.dmi index c6b2ffe49f96ecf708714d7d7ac85a93647baf41..99fe102ffebfc93d59b390f2c9d7a931f81c2cac 100644 GIT binary patch literal 38472 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 Oz>B;!gmjr0k@Y`HU}2j8 literal 32918 zcmaI71yqz@)IK^iiUNXkDj-O!bR!@g(mg042uODfrKm`kNUEfOpdbwcC{hxVk~6e) zGXqTAgTL?l-+R|x>#~+Oyd2Is?>YPI{p@Ey=aqq;`qj(Kmmv_yRZR_5LkNT*;^H4U zDR@%Y{S6L*5WWjGHuqI^^s)DL@$_}^cm{z4=HzB}Jev`{@?vP;hl?8rU&;84t&+c4eC6ydYb`r+z$AmdtRs zIB`$@HSfzLQ0G|gc(=UJ)I<(@>7iADA5iiCnC=JeK+$O#3X4-146Sy{ES@R-i6Fy$4l&1)F%sv!2Yvta#M zz3Wrn++L$%5}qQAQ$LHl<+S2Nh|Zrg2fEAXEQEx;g;>~rIk-vs%YJ{ni@bdYC0kedG3qV0o<^Qh*u z?qE=SV<5+MAZmN8cQ!c@tDz*_B7em$P?D+L^CN4!XFYp6Z6o7#j5p46l&0-u;f@iy zgpBEZwWj#}M@CO$I&Y1UKi6I3eSYlnrnczupE=~+wj=z{xkd ziBl5xqaRNO?!_91?z)+;Q0Th|vF7PX#L_zY=;XQO9S+N^Ig)?<@yhVZ>y$S}S3N)c zDAV#>fbV1dMzz1i(BnAenvP$1kNvKc6kAJpc2$2hRq$nF*D4*!jc(Y-bcS}wMttA`wu4~(B#a>K;|0M zd`kbe{HQ|+jc_{0Z!aKDxB2h#L4Pu^DGx1 z2*ar9B9u6(Rrx*;f*+&E)r=v8kxJC>UtR`J$!}hNNI*{P{(7RQIXkrJUqMEdQ8jHXTI(%e)oVDtd54W=O<#t%p|gOAX{_IsHV*-I4;88{gz*@mg6E- zwmlmGs;)^!qWh=e*b2FR&U$yMyngjK;qF=UV-5>jyYsE`3RL2K_^J7D ztegVXGJdyd)3j$2iq8){`mL_>POPkVi8ntqYN|zrR6|1p!YM4QXVV75<2DZK5qjNj z681GyQo(4^kdvL`{(!$pn|A}|=;Yw-0YBqIw0972Mfs4Ef1R4!!`wL`A54O_yg~xsv?%!}bZ!HXS6gr>Y-C>$^5@er_H^mfMLbaPso<`e4wh zDOGLn-tk&n9DmCth)OHi&VhCFR;|l! z-_9YVP z*snbL{=#eZ7t@0T*7bwcwy^VR%Sv|1h9Z^i`PPu;mOO>9rnAug3?ZF-gk{i@Kygx zbGSbdWUh(3?2rStV4oL`b~-**R6H&2{VJ*7kYOt?hc~_aWH5c-dnfj2>)so`&0CG3 zh&#;zPc(UW^!p&dwtOx2W<2048|77`tm;HOJUlvia#{DD42nrx?x_yt$xHjJUb$$d ziH}&ye`Flz3j9qfST-XwGj(@&_nLfdKUZh**pWUnXJPclHbc8(rcJQ|wDl2h>v{am zTen_-1$sfr*7r(`GY%FAO~)~aD3RUm-kVQcv@PT-8ake z2bn1!e%Jj?o794_NfA~{I4(Jdol6iKdBC_2e$F70Q&R3fetc8?wc^L+mY9`(W*XV< zQMkTjLOz<|mCa{DWSmGFa@A{cZ-21L%Gx7wrx%zJ2e0D!R*moGL_9E*ug~VVHRZ4A zXs(M*-jVgMuy-y=p(G5%9{(O`33@Kf#+b^hZz@3Mk%$aiPFCV{F08EuF1~rR-UG@i zIOV6Ob#jYpkhR?tSDw&T-rNlibfNj<#iu{U;DsscHim--ejJPukXk zl{d?3B3V3Ik~#3`Ziw%0#@OQW)uMxwbvcL!tMoyPm?tvzAc0NP6G_>)e@rP}w7mWB z4elDbT=MNiW^pa|u#oRY3X+WZ;|Pu{w?Gdn4m!c7G_;ER=G^0buFFu&VkTx)^3q5q znOToYEM-we#T&ou{?aljt;syIk#R;~MMPo2JO-Aw{q5netOcu94m(B0jzf(NC1zrJD7MP;h3~PW%>kpXU*75@AUQTRtI3Jks3s=@mQPip>!O^8-f$@9P1>^X z5G=0^QCfz^@6%Vv7kQ=ywT7(q?R-~Ezwz-Vnt~YjUbi)3skHfyW6Eu-%J*!_AM2sR zFYAsy#F)pC9B!Bm;*;ykYJKXQoZI;%Y zliD{hZJ~hB?8h~Lhn!J?6njsG@~-Z_sJ*930+7%&&vZf6)g$#p_G7g5@IP1-<^QU_ zpo;UE)ac!R;Axu@6(JJU3e!j`K}i5;6{$q_gO3x8{nFrH7sS_ImqNf}&imK?|1lSw zKf-HiKBYT8q`$lWJ!!rMih`I>S=8B&MD*FLl{X%TWs>%G;Hy(dlYriIYBzL{|AoP; zkfU8hK5*=Zy}bC_y4fe6uT=YO4%y_nX68z4+f0Soy1pWY|3)jNa>aFa-p`y&;l9Sk zrt9k~20kz_kcrLLiQKpm850vw`0ibncUYMG@87=}uds;k=rmT^4#|z6pq%8q8{Z-> z!dW3Q%(z;^a1|;WN+TK-c78%&U~2kvtjtJLGsrAY#*d#gnjp|DPuw-bXZ_e)O^sx2 zD1U9SD^6AN=&8TT%{i(BWW8MnA>?NwN8;~)uEwZDZ+}e@pEdIJG9)kL#Dz5c-b-G% zd0z@oW?5uKp~LH()YR`-6e4lJza(^hgolz%=7))yjhgO&4wK!V>PJek;AoP4$Q_JJF=1;Vhmw*btqg z+2bz}r|JftH}hSqTInq^?l4}#9Av_MEnt?G%qiUaf9w>FP?X%YrbjpI^8b z@0z8$v|f6AqEmJ&^WXmy;cm}WIsP4fUt!%y6OoTcGaIJRR_8s#4TAkh*cK2Fa2@~I zcpidcQPa`60uJ;QHkmZqScNO)ifQLi%d-?>s-A2~57V`HaA0kk{k_(51A?tr%|!5u zA3l6YQpkMy`s^Oqayq)Mnjr=4r%yjE$*;9&X9{0D87b1fEi8OXTzq_O_XaDv2@eZ< zLWCDNWG}GahAS123DZT?9hZCJ9;>AWWeVF6BLDRI9R1BuO?;-CIeM@n*&SINFA>)-)c0RGV?Mrz8=m6z}t@>stMO&4|;KtuOQBomu&wcx0C;hh3iE%&XhSyQ;bIQD1U+AS$6^4gh|K0XFO zT2ot_i=Y2Bo2-9rgFL0}!M@KziO??G`%kL_hR`o>z)2;M^Y7m+J@R@}$BrnGl@A|O z-mu$TKT*m7uN3;%fRKsFbp?Z&dW7GpsZq@QhQN;4BvdGIt~1JemO+F~*q3y8a=h9U zJni0(HP3hl?G?+|>f8IZFq#1@=#O-mdbm8N zey&V({8{rDW5xuwdGh$b4wzmG)V_ zs<8Y{!t^xh*^yR3ZA(TZmZs6%wtww8v~=^dw1D1x*$cRms*4-}j$Vul#q4(jtaCL& zUlDt~oe9%oWMDv@fh4PbI?n$D=_5x)?;eJqv7!*Uo|b*j(O=q-I=Hrt&h#_uEg|!W z7T-xN(Y5{sjQgxWtAkUlcID%msj<6%Meam&x0i@M>SUI_ef!eK-{fP2pDQP2ntb-R z@Ls=zLI!COvg}mszH$=v&z@_bnh)#Y*!Xwvn41E22k#A8-|k3P5Mua@q}tnr;+eOv zwF6MhR_j+Ei}j!=bs=MmqAGCRGc#}Wep@@HqneivHJ8%&mQ^br7Yn)hmIh;JXov<7 z8lrB=&1GMC_B=B^{R<4gd;cJj+9mwsKEdhKlYB?)+3~Mz$;4QW@IOmyv!fhmN$aM6 z2|dETRbeOd?XD1ASCvpeTo1>f_ghY;`7RxmoqogltPS4r{cAu&ORK4&VTZ?^>`F3o zByoi9DVtW=Uc`i|wljVc6BG9a6PDS6QQQd>rix@Bem&_*;9>=T@bTf*@P(T+*rK9@ z!%NTFPMs*(ME=DHNn3%4T-h~^u(P8}Yjvs>2T8$aeKra*5`tP%oE~u&L14l<5iR^e1inc47yarNOO-;>N{~7n5udJR! z;UU}?0}Mx-+FY#_@|yD#Snd~Y){*xTnB`q09^GBP{FYk!qvg#oJPBdzUL$QorJhYWDlf}d%C5HdTYi{LPjwGVsaXvkhVH+0#yhr57Ga~>vlmI004qJsDDBSEukd7Pzigm1f-{-nkf%=8j5|a|Q+e+pl{18G zE-T%?A9ZFcW!c%uVGA#X5c0awMX1ha3z5uvnrZ|OkKkTizD<2l2;6|7g+*`YbBb)@ z_hm*UcLDg+DOO(r1kZC$>dUYO>`jvEoOiSELdmFXQQ6((o{-VW(;M>{FX!;JskC#Qtj$ToWB>DqP-bAn+Om9*FK0 zQA2Jco}k zRHC2{Woo;(+>(_1#Wd61lQdg5m{^fFx_Vid&{Ki(a*6dEjOwubxBa+403VF)_qCw^EmWjSrlge|5M7cJM~hqqyx3MevdUVJ$Ca zdIVL@ZNZ^*N?&>O&osSB)zs9QObNC2pm)O~h1IzR3+kbU==Qk|Ng&(4KEp`iBh4FDmF z3JN&+l&dSx)3xke+=VV?xmXl%e+Mca8fb8W*p2I0SsTi@dv~G_%)#Nw%yLf7okv&O zKdQrpRS4JD*DI{0b%u%w+A@%8UcvwQV%Ph`#ZXTB){A+?1q6OI-J&M&Y-=jwM6uwyK{(E>*Qw^( z4wA|McywmD!0P!9j!ssH)#YbxIf4^;E@j>n?rT29ZZ%WYQ*K+cjj2=$Xr9QD#Ft;@JGh*6KD<@Cv|O9LxYrr+aINW*yx64 z3K(Oj-ZDQGm=&?q3-&y@AR13=`5NFKqoN266GfJbGHoB@FsB=yU4V%ohP(uvZ$`E?)!PiwV1RFXFor2Uj01ZE1I*?>RQ^` z_9nlH*#nUTgU|3xH6#9?`fn@q$zzKmq6_vU&obSlyJDViVlP~iXJ=lNv%TspZs_eD zqU?bOAo2l}{l~4Yx;WzKB$|sHdpZPjI^Gxuq0@B>bWSLmrE~HBJ1MW5&rcdX`|jLT zL(ddLXK4&Un&~?EnWO-q?A{iQJ-{;#xtt;Iu1L-YMu+UOaYk~neYxq*OCfMewEt^b ztrnkNPDIz^1!RYM)JOm?Ch}a3gjy=N#7^(;R$>8mD3y}k?RG3n-=l)y^K8_7h)1y; z2qKLwEjh1fJ(kebr>v)T3UTGlJ_F*Dkl`{T-USbp@C#2aQ5y2|75r7NS zF451Yv^-NmM=vqZDIx#nM%|vA;s6oUv*S16vFhLG{Jr`Kk&Ez0t;%dw(1|#~ejp@g zZ8f4U@jFpJ!%oB-f%-FVmT=*PuDhie&#(xavPpd-&vi1{kMw{ zrtPfjB2%VzIASm3#Aju=s2G*WI>D~$LrZC3yP)+Rs*9#K#ya2(j#@Cx6V zrsx#Gu+5856Tdncy|h(19K`kK`Il`p>@ub*0k`TrTbFQ--CSZIzpr#&3VBDb;PL$T zw_%cU>N6?01(4#^2~Pz2 zEdy0;s-mq+MzPJ%VF$L3h1+W%X&mV44@$8+>Fx$?_{sZ=Lo4*&L6a8OmPd|c$&2CA z4`KqborpRt!9oZLk{K=k+x!}F^w0L9t9Dw|cS5pe1qkuco`>O(drmmy(T6jZXopga zR`uZ)nONm9@|0z=EEJztr_4egy$*fl`aHT{!eRdgy~2&R@el+yVJ%_zMp`_z$6vOH z7&zOK70ECohM-}g?T*zP??4Gr6>$rhqUY7XY0Yz6JLR4lsLNDiGc!?SmZIH48RuDg z#+tAqmV)p|z=bMe&^)k@=`VA99tXqlTgqU52wp$CWo^$&PAYv(i>DTnnWo!=nRX{n zK$x8jgi|vvgkDjUIY+HH2opY#;*gEG0HXf+uj9HKbYdyv)2TSvc{yYy9^!E4SEiok z3R+dBuK27K_pS}rp?{Zg{jx%jCfC)T1K7{d<~?e$d^KKtl`LJ5OU{EiZ6LkdfpG-+zL?K>W@lxgeu2=@gN6|P zoxbjWNTCnFKn=^Z_u;}WVRwk&Og~bgf{wi@{bLmH^faAheO!Yikz!NC|8OyF=ZV)} zY*nb15ifd(L6RJM(|8WJ^M{E3Z8PfEDJ>kgs0-Y7c1wO<-r%PNl$63+DRERhS9K$C zct6`-g4HiRJJ#CeL>Uiy!1XD%O8C*ufyK9!Fwnt_R;WdLD~SDNSq%V`F1`+tHgEA^XoD zq*WSAc=oddUc;*8?$+c1MZ$1`wGTrh_~?5-e*D;I<`*~vHkTSmi@!muPGls+!Uj0hg*eR9~Q$d=K1*3 zgXO+g0m!#r2PVQ*xQvs}yPpt;_h0CCW=gMcU=lJ)9A8c-et)Xa(ECGD`2cV1;%NUU zdv)#>PIvV0>#mW}XatszI|(~vIJw>ooqD_-j`0v}gZ+9#^!7_S1v@qYd0y(nR77|T z!`GmP8{2+j^B+voV=d%Ln6j?VK2+ACkaPXv?2Q80KUh7JD`FM1AVny8kD1~*eV|z; z7lZ?YVMmvn?PVij^he z@;T(r=Z9n>6>IM4dn6W_RsDSMXMMCJC{&9rPQtX&jIg5u@{Sm$9_#5G&yGE%izFW($!ExzKVgGOb1GBZ{_68=a z#_IL!{hk;^L-C`~<0rrWY?wp^`GluBk~ugVHR(I9;^BcT>3Z3Ng-4tprnJK;<`t@h} zheyYuG*R1KcK5TcsRPnjsKlrd;rXpKIfHpJDxtlJuOp3l0qIQt+}S8&3EBpQ_!2gV z#OpuVJf~+KwbTFoPR!iCKa9ZcR%QT8qC!hJo&h3p+iFzGy6!j}%Gh|K_SFgcUVG1j z2$wt+)V~6bN-#0r;A~X9V?NAHT8gs!+o8~?j)Qb!a&wFQ(eDEq>h^CD;O*#Bdw2I#G3hJ~9!j6AkGz_bUsB0NnAR^iX?TI{_2G9GF$)$e3P9r^xE z1cB1b=|(hEli)OZgy2&lm0*N41g^;SFpbhJ6HohntNi|3?(jS|uMIzp4tuXc(yoEJFfWE(K|jol6h1%!dt?Mr z-!rQgtJA5;$=^Ik_+rw*foWhpS~A*@3Of_?XtDSK^5u3G5Bjn&$c>+izucFu+*fgO zTe(khx@$Kq^{Hn)z!%+kmQJ~F5sB^XW51FqiuvD{Ttcn!wTCgmF!UmuPp@ieTQWt- z=y~0@U%6*5z#yig+WqJe3w_-qr%yE;MeA?FVHhbCV(Lw<#gNku(ZTo4p*msIsxZ|;0e=^YpR<8=7RF_=yXTRNrLS&rWIBG%(S&PmDZkx zA8O%^-w_Rz>?T+(&J#!C6p`>Xa?Z7^Zebko1xoaa0fR?FA}`I~JW$^t%OU9@lwQ@D z3hS#|)-)8>pkGU)z|FsGGr3)0@_lz<657%We6siYp2>@d&&=UelGo?fhWyb{U8iO~ zH`8vBn_J5$M2AsE&=CL1)?3i<5<9DUh{^utJjyZr_WmAf532c{c##Y*!5M~;xk_FtCm0Hi+hc&FZZ zP{lJr?q+6yWQU7)^eTfYa3b|m*>C8PsMu`nbu`1?oQpI`q4ed3M+0Ge>V!K+44**&+Y4@F<rjj(H#R4$?duD@9v_y2IV zM207-zEAgA=uuo;^OyUcRiQ-E*Yuhb_|sBH&KPIfy}=NXtuni962+jrKgS zm!v8WB?oK78lO58g!4pvF1$k?a+ob1E>sEU_E~z8&E6=*I!*ui+@CK!@#`D~;U2VL zzq#VWzNLD+)sjY6;D(QZjE9vXu8jw_L~VxR8bG40)MGb@<5l1MBwJ1-OK;+_`X0TT z+dilT(N!zRO+!UZ9H7`^(iI5wQx6n``_GKf?+&fTj$VdPU-_2rgo&S-WDJa6G2_3v zjceR#w$GkTY>KMK$D3JtP= zc%MQo`^vf5j>mAI=F=ir2ezK-XV)%fUx0X06n1cf-lyF2_NTrr}yno4vc@^>6k9`xbv=;PPm*&DEh5{@kdxzcF-Z-SaX??ccd3 zn(ze%zBfw7_qQ`nk_my-f^di!Yj`C&22?_$PU3ADmQ04vEtR4m|LU=O`Lo~Pze8w= zaia<^A}?PgeScqafeiCs33XUGOWLPd&S%wMTEMmbN`c&Em;RU*g* zDII>k-Huou88NK$$Y)AX;=UN*mCh=y)NY7iY8HPo%7Ob-_VOZmL3F`Yh0TddE}&Tf zCH9& zD(iUi>+K!EP#7&O%atpPqL2s=IMx&`TcAjNL9L#?v(VDw>H6MHR+fL~N&GF|{(b)J z-{#)Qy<6L%`07~4{+z_=(6ARyxs?`9pBP{!t|+yeA|HnA!Mc;ZxHZpkbd3dSg1cSl z5=$rWIn`<4ejA{BN=r*UFDU?FmJrZQy$58@-yr9O$w?9C{9o^m-?xNgg_^J;e1LHX zTo~m1yqU}SSvyVwZ7w+3i^r@f_V)A)^Pn%m(AW;8n;y?+D(Kb6dK?rYc_x1!kXA3# z6V70IzMtO;&oom?OUZv7 zqu_}7WtiqU6BLjQ&Ls_G`5=5zMFn&Rl;OCz zxL8_M#jBve4hoX-@g$%$*`$`40oH(FavxVjmHx~cuchlQ8!If&;Y6o1go6>y9Dl01$#V?Owoiij1q4oa znpL=Yc*+yg)6>l>OU3|a_z(&mD$>qu2;9F3lt;p;+?r$mC@&RvccB#Shh}DEQiQ(R z!a_U3+x~p1is4?w$mjj%#CJS7P~lP&mb1}AfP9BE98XyF1}~ZHz#rX|_1}WDkDU_Z z4>gK0MlB!cw@=M;9rPhy!#6>ZCzso3ElYyZNraoSe#rr(g2tGA6cj3T5@ zU+fffwHM21`nQKjAm1$E<|^6yyT2*LbHpj89PZu$1o-EM#mhSbVO`pLm)JY25@GW# z_k;TBi4-x&;3<6hIz>cB#3X8UKp+hY3-jemBusmh(PT{AD0<^MPA~ULj(iBHU0OO= z+>()bcXk#Ga=v$R5@KSUnki>|{RtC5DXi3Z_)z&l#=>Hk;o4@N+aJ%k+DFmlu$@^O z@A_wR*~f^0d^LZRnQ`sB$Qh)?b1OEO(xhZB%z~+yfavXEr(#dz2LDM~KBv5VE+}_H zj!*LrXqT=1=zMI^WS|Keys*mnZPxP}dq;^U+#dnY3X*W3uOwRf8Bc^v=Du#_w0i1O>8DSHP17$1Ox66pahZA4 zPd>D<(e?YLo7>md$0rh?Q*L@{dM9=ovB4E_jmtKf;6Xg|bM_$huHAU-IgFti%Jkk* zKKOd-A$K0j#B6t-G;9$-B2A!ZgGkQ#rZ(vW2g{VdKzzUIxM>P_$xLA$M}P8v*%A}0L#ll-uZzki)+XlTYLI|{kgy}x|; z(7DnI9!sQU(_G`rEy|T)dKnkT3p{XNpO$TypK2WZaJI2|8PsVPmzF?1at+xL4RYv| zd_^n5xAL;^uERH-D;|y{Nw;?qyXOAz8RbbWTVI7#2XYgh;lC(7Pb`?AwC`wQNBBGs z+EssDL`aC|&Yff^Z2y*8`=El^J@hCl%hPW%A`w#Cv9`DH{W?AUUDpXgu$Y=UIu4*@ z%PQ@!z^N{Zv9M@fnVtQjjGvo{Q>5u7DIz&4*30%JWTbvgCs39Ov|yhOWde4#4iA8& zrg<(wuphGtg{SYdoqsgVwPqHELvI(X<%P_j3QkJ9tUb^3Jkup2_52Z@2P`5Ji2yYI zgEx%IRkp2TeVky1;Az62A$w-gh+Kp%c~7ec;@el6(94sB56#Uro<8LVj>v7kCF>Xz z6FL&+w&r{SH2AHd*edvm+^y8xe4v=$O zSw92D`;}XIMEt8@`FEko%53i2yHz&XzZdb^4VX$jf~^ zZJ7T%n+@63Tm#uGq&r!u`cM6?rL?$sI*`+uwu)vhw`ptW>N+m>Brh*78`#4jX*}dV#j*X@7HD8+&vIQf{ihV`IF{26w|6XUaifE*Oz{d#uAuANKHJ z@>vUj7;fiC!CR@X+&OZJz)$Ro419fP2|6ih|i5aK0e;C$kjr$+b7D?e;$z8%<;WJLHa~_7#1^L-VL-k z;|;_M2j1N;-|6Mb?DueW*(QpCh>?kG4n7Wa!Jb)-l~tZ%wFt17#s;Bx1zL zB31Da3vk%H`Mx<@pRAX7ZryrN33>eZ@fd9gBro(pGcz@cxbn&I#=fE7xA+$?NdIFb z($dp!^xp;5<7YH6YlCwuIy3!G&x+*HSQ#qhZ*`7+7u(X|(W=6r`M?_Tv!eyDuORL8 z9UfH#_({XiJ`^a8fMhx)C+E%h)2r*HsS{|)XE`@XWEtytVWmO;2~&GO^fHKUntQee zqRW7=WYB@b{ZLA!*o(=GT%6&;LI*G#Ac02$d71C_bb4VSH+xW_`R9rXU)vALgv?;o zOWwa%b`Pufg9!*k$o1aoD=r#}dA)afC}MMe9hUENCg%G3^;m)(&mV!@yM3F$M*zjj z+mGuNy>Q=4k3-Mj9Uh9LrlzDAcn<+#mDA#nS817vnvkctzt!}V>OiJU-NqJoO`Evpg9tm4Jv(7#OPSa{r>bFs&xs{unV6F_wn%oLhqdUi2FUtRQ1HHjL);o-% z()nw0ibS3{%SCMKALTe0N8>LkhW4|rt);Dm-QeYo1=Vk-fp;Xs%ZAl1E-p_?mVRZ; ztk?wvUWT`YM$i5-^^0jhx1c~Qe(9s4`!Lt~&&SO{0_uY4jR z(5g5UY78N`c?MeaHJkt$)o0CS>=+#DxCm&bg_$@ zmltSx7imHvdO3mog(y$@a0KR`f<#&Ql0vqG`{GewI%7`e{fAKo4N>`f=R3RAw+mcG z=iN`dDZRYBe*FA-a57W>V!3;GMua+s)_t!Lk2`<$>eT`e+AZ$vCeosy+U7M*S65b6 zbh7R~j|XVA5-saMBI-Wfe2{cQWo!~KkHWj%U0normwwB0AD>VVFZ?jtv#4{+Vh*i) zHg~xlb9x9)Gd)gXdDrt}M6qs&nVz=xM^M`Zbw|PmIXqC(T}XdG8>h{Qe6rT#%6h1X z|L)8Uj=&<~h%J29+@lliVL6ayeOZ(#gW-9{KH9qPNr#*W`mFxC)ax$$Tu~I3T?zS@ zBN*{r0~ z^1(6NS##(9JrGd7HiKYrXL(J=5TaPYRDuN7P`j3X3DYNJPFimseL)TV#wM z>4EYy5M5QCkZsD2MqkWU3&|mB2Y~?P@l{RglNU5-mGyktfXtknocq9q0Gk8GK?`)7 zAY%x`oz_+xLxRub7uZ9AmnUn_w86*D4H=i^v&i}jQn$?bUxs;N-M><`KdS;S`EIvO zHl{c2lY%9fJMxNM%@iP+fyUKye^Cv1)CSLmo4vi70O9xb3ux%+efadLPb4#HJowYA z^18Zj_bA&$r-#{&`AI(ZBJZ~gN;{9u94b_HZ(b9>&$Xdmu(D$sO-3u-KqDc>IinNsgA31K>p>w7PQOICSS9S775;k<)YQa-+(0gy!hQTO zgRL@1J@U4Ch9eNNcE6(S20#rY&U-`Nd`Y{6Xta)3W>0O@c%5BG`!T-Vi z;vz60k^`AU?@+)M{Tz8&sBN>v$EoAL>t+wadcNwc4PF9}v77{2^^oK8G^9fPOkD(j z@wa-pG%sJhx&c&7Ah`qj%$ErXAa=>8UjmFPVp^T#O1q5?hGRJIiI13E(aFT;` zxT~s*;ljD5(LX=8*Z!5;tesKFCyoZWDx~`2(ohh*XaZ)nH?!>za#-})W|g%679+1- z4)SPyw9V~)&&#o+#LkWJrJ_&#>Ssj&@c>nsux*QmiV6|1mPcj8o$Hd>(DZa<4I1rr znS$aWGvMofJsQlB4z0EiP!gK8L(fISzRxQ^-MhyeUsza(ri+>Rh-f`<=|wmhDd9u| zc7&z*`7bxmeO}eMO4{vLO_!G1JpC26W8Hn+oc=wmd2are9_|&GhOE!pPKuG?8&!36 zaQ5{8fb({u)&B>P0~Qo) ziA|I7N7I`i?51VPKDh3;F?QRHEs=1j!dBiEB!5NV5CC)sd>Zhtgdh!gbQ;#V9YCc3 zQi^z%5{+q2S}n^1ML7rZ?;)sX5@^5mk>|_H4hsPvzq1nj+Zo5C71D1cpNWwt8yAsa zw$bOq^hkMG*?W*RY&i0E25}?v!Y>6-SbM;Ek8ol4*C*?g=zuYN|DT&g_r2Z0zF!<* zQyE2f@h?Z4qm0XM9&i;E6>V(Nf-3}}KWJ{_D7}b9J?3qhxZ8gpPzLN#r9*dfY9x;+ z+k(&OE_z)-T@MXD`U?_`6(AcmubikRgL&XuLv}LU#J^l@Biou9u`Jr(7#3R!5w`h6 z;Bfrd9oQ*2Ju)${i$p?At2EO=0vjWIj9}XvvqHIwF!u8C*T0>AJpCp!^u6pv8vWn{V(ngJEM?fkHq1dk zP&BtY)s!W6C$KG*SFw-zxi#fw{K0R%9hWc^#)Fh3kyrrmH0-l1}C=toKoYD%sIS)0r*((De08r^4+3Ww1*C0#9oKar{B)T*O@iL^AjO$XB*1v z;IKp9>fAcs2O@2!zrze_0%AY@%2V1X?;gd?;}Tw$q(yhWyvFqwP}f)D|08iNyv3aH z9vw#v*B!JZvV{teESfmeqKJRp0de@nJvMMN6tF5%!AGS#>X789dFdz0-OGIfRc_u< z$r%@5dvI3RV^&IyAD}7ll7coeoX(C4f5NSFD~38GN3h}Xgv>HWYNudQtKh!ab^1Zt z4#i)A%w(VU4*J)X@$zZcb*$4qhQHd(spv<;S~1D(7l>@Zu^q>oqLx@L!lE2^o@>*3-G^zAwFK_hTBQ5vLPUg_#6Lmr@>fp`F`mrEDwP{tALAY zYAUW5p$%WyB?tYrQXeTmiuSV1DvLeI^fEl_5zWV*J4>xZCeZ!eSAbgy#1=c z6f(`im~Y!i6WswRpzrjg0~L;Nc?_X)2$wUs8M8MB0OEyQW6Vh33x(~IUuNJ@y|1GA{s-933hQrwX1tZU- zf%m8)mbQ*L$iibi0?z?1q8UH%CjQ{lYXkO9lKCW8!9*T_n-;cJ=ZGC zpoi}{3-)6>|L{>|gCp?C$ITwu-#1XMVX+gmhVYW(n9<#Bn5&BBrGVodUHDtZ%*niP zE=Os7v>!3Da<3J4wwWVst(nL!4-7XpShi+H;@Ocp7g)Dj7#6u-vOW!8rzYn!C`uHM zf4r(b-IN`=T#lGy(E6|E_4>KdPFIiq#?cKf2&yvxkc5xxXM(`mH#{!ZnNke)UP(72 z9QIjy;Qfbh=%$EsrQ!ku&hvctK(uPDKo$96@?YP0V|e(ZLv^!CkAp0Ov$?SMMx==wX+IeXSUI2jj6o(&rCRC_9$SbSOpFO=h*4vUAQJG&~%GZ$sZ+YFUbBs(G{gB zHFY=w^PUn1F0DkbC&tB5^gU^R2zd@H;vJ&ovXT{gbtr!ba9+Ov6bkzLJ{Dqq85;F| zpIPA23nX#m$tp)Gw0(_<_WKT%`d(t;E*|*lNVhr)Qbn04(22^n2jGl^LgyJ}{oPVK ztL(~OUHxm&(t5hf&xhQOJ->67$cvVdf!=GvDv`YkVp_0|OgdGG@X-0U?I@ywo5oj13GdM?_Q}vI^xk{_#1PZ(F4o5+lfVKUKWXiNF$su{$J!rZ72>$iNW+!GVN}6lv?i zVmGgV0Oy@Mbn>@eu>P5P5SknFVUu#S%s1}KC*2dUOF?>t%^YsOeC&&jtx9$qXk1&w zPn=UFZ-2sA_}0`+%syL4^Joc=Rc6r|EL<*GP^_ zPwy2Sl<7#~)dPHV0~0eLCYf*a_%|CbgvI_ahnH|AgCd?{vh8IQ16ZtawrNFrv+;vZ zKJ4>aRDa#ps=Kh>BlSB!{@liGiqRp!s$ww3#l>n`TCO53jg5^z6c`v8H$CcUN|U=kF>}d5T%8p@}ZjVgRy_l35FVc-AYk9yn%0%_X)xH)j1FP2u*zQ z$TWc4e`gYGL3;w_@Yl-~{W7As-08JIT)Y#@54bX zlk)s8YH+lolS0z!9Qb^7T=e-f z2(o{!wsWH~r(yR4X0R5gChaEd2l^)pAz&DlT{z*8wEQ1%tpcGlEcR;dxp`Jx-Kb{?NX zeI~e+I`qTK{MI&+#<}W!etuDwYgbp-pQ-Y&d<{asTShhMQwDT$^OT=ks=cZ%+)8E{ z&4W+#&l;;yI_J-~{4W>$1oI}^&i`!4-ktYB6y1Wo*al5t2gJYZTVAxm^OL`}i4)f! z{wsW4yrK%61OQmL;Xvj>VQ?4EkR(U<=J3)gfsVZ-{Thn2()OJCJD~So{ zocYPoZQ^_?f>1cPR}`EnxaY#kUA_5mF&0iRH(kGMc`Fcn*8dDYRP~+Or3M-=^jm9b z01gl%hvZyv{P$-4&ny2*o9{(hgLc}xyzoz-W<-#C47|bSyQc*^Kw34#qT|Z(C9s`@ zBw>$NXfQsORmgUwf3M8+oq&#smDZSv*R_%F0>RKJWD-huWU9R+wL_KgV*!pE3@%{!; zDdLExReyC~-{|~3-08|?*)C@$kG%Q+3&s~8M>)&}+wTloi9L=cD3DsMzW&c8{k)^T zlLe&A*8{twuXVH^OWZDRYem9vp_8LuZohI6M+$7_qKazk@BL18*bYTw=1PUrO_4vE zvPvlfjB5H%KWqto19XGSpMQrpdkL{$rljIuUo);!2bMM+83W%H1&}ce?eF-Xn!5f1gkPxw@C|G2`FQBaooNxb%U~kCEGH+P}wZ{|3 zNg$g`auH{|d)K;sfmQa*`z{c41O2GW$2(U9dk4~3y7jqD_S*M?crfm##_vj8v?bjs zn^}WT*dc7dU%b+pJBAn2d&_+=1r~J2mhTqck)#ysS(j@kX|}M)+E?Xy^SmcNw|uxBq$@qKr6Z(Z zngg)7fO&J~<*KA7G&_}xrkId>$&uYMJ3B|YRfXfg&jXXcOLEt1jS6UbSSl1!FNM8v zaXDvfBK#rQoc3il=uocMTxCWJL_#KP&4iezrO9Vj+W+PpOJJ?buLuAVOqjUc+P{sCM`1ZYdfM6XNNUg1;&dt`iTIZGhZu$?)s&(e)f7{ z_OC7!Cxkj0##FLDxolCGR{?all+04^3mTHtE!IE3vG|^%7<5wlK8qG(_LrefnAcA1 z?TT-eS9rkAWC81?O1I+z``5vN^TV&*#3i!B1|bQ1f zZZqArzP95;mP%)b5FQb7m5#1x&_&!tbiW&~#&)0#=ux{9pPUND_ViPv>1p^Jt?nt> zR63heAcO{2xxYU#B(dfhc?baf2WK)#+m^ch4$83FP-bmReK%qZ?` zFvnwJSj%{gQPv%SFc`(74Edab_Ud8k?L`j< z9|FM3B`@2iC!q`vA&VXmJ!k1&{3&tqM6p2zXULjXr~a;<*%zmL4OAZ9Z?)So^L6tK z$wjp8$DyUple2yMiX&I1l4GC)PB@~*rt*gj0m2rm=)svoj#2;4YVo6)X=HS?{D(7p zvEP9bV<07~oTgUHqJsu;^X6pf>bLTJ=80JxiM!k_Pg8;*|GneAz~s3Pb5$t0%&fOP z$uhhFORJZ&SN4cFJhWzvaPBv8ae=J>yCLqSV$Jg!ZSFb^46czF_8I4e@St>#WgNY^vzxg)GGqKfN|1iYJWG0nmJTr zKtVimZ_hJ^NqUeqJ0SW|u|a&63)zOMK-0ziyC-i6FDDkp?CtE*?J)=3;*p;d`_88M zbCFUfq%wKvBXwbl!=2Uk_U8#B$5a~_0$-MZKesnFH^=iZpzFb309k+=(6i+Su<)ZP z>w6x2^+*4Jzvlk~{w^NJ%0&%3ECDx+d+;lIZY`9V-de$C?^df1l zw3~;`jR%Vhz%PovcnhuX3~Fk(QT!*M%=R{L#G|5Uq>Yh=CeHu@`qs`)F)o@*Aoh<> zKH`$3@BRrB!?A1&0j-(MMszP6}(YY;$rfbI6G%6D)^7knEpuv%DqQ~Dd@J|tL* z&k5kHZs79+9CxIRtNVdD!37Jf3ZVbMzh(sMwvArQ`1lu#{qi6&V@do0kBbY5%RMTR zsfC}9TVM97oUElhy$GC|l0QDJn!}?*XmV?x-qUB{Qf}Yr`W(Y>*{{@K+}Wt_b$P|lQLHqhr3-8GWMlbxt?b|`@K5-Z0Of7 zQfO%N(81YR34}3RTA44tepUWt`utIQzk%aLuHHTq!n9WAC+%7=L`z~TZx-Nk{n_M` z7d(wuUY~AHJya08P98pWUhp8pea3q-x3G|~(k{y`S>UArWyb?^5(j+wTpfa&X1)gz z*4;7GA|4A$P~e}Su zlgixynpY)n@9L9juw;X^&>h%Cg$q@)RR?>Gog`bB(H}DBh~X)Li?qKuV@w0>v`b-v zG&h!gyux1{oRqnHai4q(ro)qzbniv2(39TMDru*Q_4nzeV`uRX_k%EXe=i*La_AtG zLN1wxBPJ34`P`|Bcj##jEeT3Q=I(VToGL=l1UzbrMjxMiv^Bvwd|A5Q6MX)hg~6esMVy^q`2 z0;;F!f!!U!g9A9iv-TJne%PnZV2BYq*&g5tkE~)JVd-X_n31(8;-T$DhKpe7&HP}s zS*{@qJ=|r__wA}`YpsXh-3K#Eb2*ku)7c!&PaH@>>YdtI5e% zck6T4DEl7Ei`sv_0sc>LzKT1pT@XwTb0lJ~zK1ZrtG z@RFhCZR_@fa!)8syDFFgJ?Vm2r_E^dZpC+NJN*j7R8w*WTVoKJ(t zxHZ#nL0*C~0;uJk?faD$uXXxP3*puUs7`=f^7-6mvYDut6!WEyBXz*eLF~FI;^OcG z@bqBv=vnL?OL^lWeJd~u9b8@iYPdmJIzYBux6!SDz^#!y&FR%4mt^^gLZKie;EU|8 zxl1Z-y?x6vH6N;6O4_SP<^(GVAo;+%b`BR`F|EDv0aYEesu;b4UYuR?6!`uYeVQ=cEUMlBfS73Q&o!#a;|>n*!q$&`uW%SdiAX$7=i0s9LL zx6&dEhxHgS02d_RDH*GFDkT+ecb9^n{~*R;Yi(s@+yY$@XnL5J+X7Sk9FjlTZ)iud z9Y-c<_A~SpmukR#s;!@be(Z-M=6!Rh}c2>~Vavi787{fDG7iO-;x;<-W^M{my0Z)dy3eQG1C^gCF zO=csJy;ODqYg9;eb2qV(s>rZlwu=F5jPzd!8b&|JURkW@6U2psU*yNd{eaHwYe|L21ajS4pO0h!G z%8SUeVX9swK%2Q*(Jf~i{NI-D8nNc@3Ypfu zmTVM2W|plI-I@s@@{Q@3r#k+fb=;A~`A}+pXEK(c4T--$sK0ya+wdeT9RV)V^v66Nvg+bU;-}sxv?_(9tOF4crbPQ;4nLZ3Jg^4$ImexEjCXe;5le`mC#`RA zYlk8}3Qg;9ylHOjGQhN{1=rntbZ}AVf0f>i4FXO)cp!s{ zRC_;gU~|LO;$yJ{b<84Ei<^mqY~Y^zw(Jfyg1I~=NrA+5mu|I#K80#W_RU+Ar?z=8 zX>#cym8}=^$ROuH2`?VyA$qSfqOo!#fp5oIi|%-_H%L!O3t4$D$R+jOa2%FnioC4)()mZYe)}_}U}=qi^9EJQc$`z6*p|!TW8)$4O67Iu zEqnfW+cdmsf;oJPvwq%_rG4wLf{YY?vd)t)`)`_Cg6Ch{J6tumv58V^ZMk5CEY6m% z^^CWC>tjv#CNr3z64)heBf8~*?bhH667^nSj)*sg523d~ZNCv1AJqXmPdVVeLqx)e z>JgMZR*uie`x1#!3#W=54!Spq+&%Ap#~CUMfQQ5e=rkl5P;kudYf=@VUEG zR$PxwT+azismUx>dV5;M3=t&7QS~Xn-(TVSPFD`)&LVAL`W2g2SBcrPmk9IPh-P$y>4PS3C%M zkFqFH{Y%x8pV{H)c}kDt8OMUciev{0oXC?~(huvYPv+5B`4}x&;b_#uln=u*i=FxR zAFpkAEJR(PONi!23eHA0DYagNOzD*Dgp+?&FT{>!PtdfX%@G&ge`Z@)ohCkAF*gU1 zfZTMAp%|7`E`VTL&J=Gu#G~xzGJ}LTJy#;JNiBwLL5BF2du%r@c%T$u83QY%rw45n z0-*eT;4k~fr{N?pc9dG=No?24-2U)*WAnK)M)8C)Ycj#+5Dv1=3ITotJc>wb9b6VZ zZJAy2hkS1&JsYpdo0lrq{hG9z@4LQEmX|~XBe$WLG;4?e`wHkJNDB&D;TReZCVA4_ z{4H%1U7l;XQx%!lyfV~fh{;VfYeM$+ru0ORqftSh^6>#tiryqA>gp{V@>3e z*(^uAK2GSV2-)RjR~wUqg!Mz)*u-B>^?Yhz{uc>$o#!z>7Brs+!4UiO1s`yNa_L>n z*fqImzmdyg>T-|JNikaojtOJ_}0c<}<> z!7kW47lF~UlD4+Cd_Ok3qy)BtSWk_&G6qFnc|${be}DfWOD{_vYn)J+be7hKaYsoe z3dt-*r@NO6V5X~V*tEu;Lbk;rS$a&;S^JX)Ftv!6(xFBAf}e{Q+OG=XL6gP$sY!V_M4YZS}*q&r(Wg=B_$~t6J5i`rNHf6w_0|245!0eyURg2RN>;jG)jc}{RF+w*n&~3!xEeju}=ti0-s1$D1B!EaQxLi4{PZ#dj~l z`YIM?`pcKtCs>eQk5h!-i_MOWA6F}(>JP3A7O~2m;V!Zw;A6)|!i(XhgEa7<+;O2) zEGXi~Oi!DddXGPHc=}vj(>mws&iAZpK(j`*Ss={@g(fuz;Qrys^}pfj6FoWZFBx97JJ42erOH&v_dY_AzZhd+>+q1A78=F z)=PC4&*G_w$!t-MP`DL(hcyWw`R0vk=4rPfT>qO2u)@IsPE|@sx&7?h))A6-%HWtc z&>ig5<*)oW`Rh%5#{ya3e3tUWCrz>xP74x?&QN^T_`^*%o9m2>)U(qQy zQi-7qp6!~^?cjaaU5a_?Am#2oYv>_T(F0qUvm~`qyUw++tu^R$(uKxTs1X9(tG@jn)^?5au873`&e|%J~9PsouUe`+`gB@XEb>-TY25 zo!ISIg?K7;r2jq61(szv{k)ayj>QxD*Le7(<{Ui4W5yrC!(4?wBB{QQcKf9$J? zTmMEUmj3g+S^_`x8-2mbtw9grxfm1c@X)GL^CQPfb}b~Q>a*`X=5DP-ySUh zKXkyQ2EM3#${FZ@aN=b42_1WyaS7dlf-!24Q#(T;S4TI4Qy&Vl%myCmNWG#sfqlZ0 zWNZj7q0Xa6_Xo1U8_=p#F&33}CG65Zfh;?wA|@Dli>b(#hJxt?>Lc9Ee*R6Bu`_o}a;Y8uuAJTG+yp^F&`ioSd;a z>7p7mLj0 zURK&0>zMi66=arRL7bb|JbjS5BX-&)6igY}0b&AzD7RH+$nQL>cDG-2wFmgn0|5_@ z9QMz)W~z*>$k@hQlja-sn-z7=(fvKJ!eRM*-Ffh>cWp|tv5j#sr2X5w+R$7_NxaiQ zRv$u~1cd`0U`B|fkrf*Zke%WKrGwr#*7mQj#}`g(r}rky;K?C1CDsfC!Cleno4{;u zFemUlo91QkM_?>RlGuY+V!-Gw#-Na)5A4&vzm<&|&Qr;&uYWuZXMl{2k^H@VSDfA3 z3a+|6L1w?M-EIvD-e#K8p^1;pWkdZvSTChXww-sEv?w>y0biHVK)=80#%}*T^U9$0 zV*@lCR0N=*i3u*bW3VR>G!}r!W#vVi1rI%6NL?(<%R6mni~sb&?TM0eR;aa2h;qT< zLXp_X<x$}>vcjY*(Gkt%*?hj&FCi|Va8+>MO=U_5_I1xk6*!RgE^`^jM zTLMsDpjOA~HmhjtTgh(P0dsU9nW`(AVP|ym+;Wl zx4&>AEZI`}F5MCVDN#jJaZ2=2uFeaSsVfTLX&5Au=B#rI5k4S+SJKVGPkMG6)B(&n zCbaJWtU>!5U?HP`f19Fkcw?gssPlx`KK9UKz%IXFrXVcPObZ2#Zw(+4Pzbvko2L@{ z6-7!f?DNNH3G9{&lZtqdrLxxzZy4E!tWSFgV4Ip?dK}_)-cca{+yQ_7{27;>9a~c) zK74@RLBAsr3Q9MKzw+Aj+X^-QARm|eOufvC2AR_IfcK{PYs+DgBfhSnX}=41GA@neZ3IzGgTEkNM@S)T@n^HjNrBFD^&d*P3B90~Bxquc*@_Two)Hna6C9@lX zrJK;Ff!sXEo7z7p*H4V$J7H=i*rare!Y4QH8ycp35L&t~n9{NC6>9rfGD{1r7`x9w zxbwJj;!3SF{8KXgqFUh*_3#>~A}8uv=G6X9AAsEAKYteFd86*-gediC44DLh*jG3oEEu}(l_r}Z&BVz zeI(7D+BobG4)ANg609{WW>H69U(DhZ4?QUTTqMRCVht2dkU4LdZMPADLA`}qU8sp? z(20S!snQvHDz(Qx!%bEfeOKk63=|ym&18cLqqO2cy6^h zKTbwXZeB(K?09KuX_r*sho+{{4pl#Y{R*v;k`62Fvp6#kt{1T7L;k3oy@8L9?+1v1 zR$BaHf{zT7QaJP(xQ4&rK0Sx4E6e>knhcZMwprtQqh7u{JaZA5BSXZ_HeVZ;m?)YP zGweV+=yBjgL~$e+lE{tt-kFc%w@6NSI-0@X6`iD=^(uLE01|#b;VVY8QYyrRAJz2= zw^_*W(W5sXT>fl)Ew@%=L<0nNe11vTT^4G1E_BKCL! z2Bi9Ya$fKDf~KUhu0l%B2%*Rh{K8R`Srk4+B(8bTVbs0-c#`K35=9Eka5XXJm4l8`;z{AuP>Y9{{5Sho(JFJ z_%rms<3bL+_&Jfpblbp;fc-Cw`thncKs^Vda0YZ%I9oHpmU2&eMy5*1b*q@oQ@pbA{|}b zP#`?Gz&AtL!UGh|RF$Cr+^+0s)2R`KbsQFEK!4*tP#!hTgKxjYf zoXIQ(H)eMw&Hj5LW$let^zrsA>13BhtBRLLZ%<)**fv}m+k{m!gYGzP=Xir)y{A4t@E{(}T~Uv~+&0X@iT zP(xvOt^DU_5MhUQm+3vUx0vaUSHFWAN(KtT{mA!*nglA8FTHGLx2J;eZw|3t%U#5v3Q@v3~ zRodHI0A>2ZsZyMd{cr%+J01Ai#H zAv9Xhqz*AB3n3T+j{dZRUWP%nzrRp*R*1=~6JhYNP(gD^Ww#1%5cG?-_wn?KOy=5v{-HafW!rb8=dur|M+YX}AQZren zAraLQp*sqjdZ}gsdrN9$u57y|j;IZdJoAUU)VJSm1_-1gYP(P?rQ0;4v6Ia0il3pQ z?Uszwxv+Sf?cXy~70Zf{yg@PnYtX@M|NbVP>$0z6wJZ5g+UB2@CTwMQ+8Ln9&6pjW z2pzEvSFuwKDrDz2y>vXhyf6qDK3%u}{Bh(L+URn#+I(cpFsJ)GPow zgw>{WyhKI5F$;uI=4%TN2nYZiGV)|wAftZ0RNF%SHUxKPB|Sc#y{1u?g)&J!f7?#z z?RatI)qoUZb18*dxy0Hy_VE<;YzZt4l`$5Sh~}%q*Hmb6zHB!KbYWGZzg<~PN=Z(B z2L?AmhZ_S@0&8UQar7fbH9g~WJ-~O?yH@fyw9^z5Mo5VZ0bwjkVm6Qll=jTC&aQuN z!QT34P%*T3HF|R19WUH0;U3=-3^FKfj+h_Nzm@K;txX9^UHW|ENG^c&y?jg6rtz{(S!kr4&luRCl+{wX#g zk~%xkFi4ZYREs+qjusUQ9%oC(hEd8PWwBEza8gKKULG!p^9djizT|Po*Xo~h%ZY(K z>}!Wc@r(y#O@W)Q`m6=NyZ3~(Zj4U~i)YY*r50o@AnOIU6HW!{s46T^$zBu*nKky& z*Q^dmxSuWWjHXZ*j`9kUwe@nBT~t5EB_1>`rs z>o<4kzc_N1Y;4XK-qm81OsDu(A0BjoPd#%+7-0mvOae~79~i!z>7rDB>*)CPCh+M4 z;?PAU+#2H&hi#%3&3l|+eXs;W_~h5D_&vdt#ibq~L93usG7>E;X~KnsfjHgEYe(YN z)9Rle4#8#w4(WRN{ks-0CwQDNq`|k83lAlBs+OuV6|}Ln#b4^#@_D(xiR${fsf9CT0hCHnG`kCOIAI-2XRl6=e2$pB&k-xUu0DZ#)BhwWM6l8817s&3qOwtuF$yC~-~+}_&YU0iNe*4=Vy;Hy8ll^a=zq;>u#Z1HkhI;*dz z#1GnGX68@$`AQQdqZ7(2gp~!B0MUMV&Y7MWCP3u*-cpYDLM%8$jvuDp558Ur&5u;dfKx?|%j464MM$Sezj;E! z{0isK@KrEU(wkkc1h9j^1F*$io2W?g;TQZN09zzDKc2ncVxLsUc7T^)iII;Ez!^+y zN{()*0=T{ue|t1j6J|L4>qz^d@FxTQDr1)$`Mghihw~^!x?@=jSG3iL&{@qrw-Ibw zvJhk?VCE2FQZj+OpGb`wA{|=yy40j!!sq4m3ITv}f}(z#>JQ`@2M`ooay9o*sOz8z za7`H@X51W58Of!3hR+sm8J;HJ;~GSI2245t<_h!W)C1|pO_|$~NW6nH6*VA41HRXs zFJYU9vDA*}OTLBIf&rjv07{GBm1jgRK!Jp(gU0ys8TE7peh9Rkn%+O;6`rRgpq!MH zbThtKH$uaNWI%s;p#@WglcS@X9yJ@Tn-O(>HVP;l>LlgfPMGHUXRBJIhu6D3Kx0A> zh&CaZv?0*P$b(GCMr6Jk9O3ltUD>Zk4x`sJ_53~;7i*Z(`K_fFsWg^iX|&PQAa(tT zJ97QD6&^GW_ZjQIW$24v%353mfEaHvRZ= z2QdpAS8AwRs}`(+U%n~QJ1y-22P+PZFNcK9CK6K+VjnfF7u>Y~IE;H2ogoB)oZ<3R z1REPX-<|!vy&Qc$U?VjA`*%!4MDt|C$D(mQk0W5G?sYeYF<}MR(Z&J46tbGv@66$0rQ8MlMcevtgLXQIdkr3>(S+d&sg>;F<+_}DMt z5hVs$S;E-<@6rNVzO>0_0EFv0pC>nC&oV5m4se~u*B?EaTK#2GN7;PmMztKOT~7m; zi~~A(d}1Ol((MJ)T~9m+#HcsYi$J6fGCqJyLV^1O5>|XErk-l821V@w=-FRWQ!k#a zzO_pzdcM#}3<_2@c6K);BqVrAm6eqPOHs;s_W;)$NDaYS1xD7+AOb^ksg!1jXgfQU z;5s<#Ti$~mhSh}IJidB03Ll)3_ib=c#l$4T!9R4K_=GXL!|=hO+x_Ei3*obvh&`Rs zZau`TT+XLYnlkq4kFN=co5){3JS@s*RlW7HDU^yYH@AQTWyiO~ey2AG^vDYnv+J*w zHM6AXRAQL!0dWFSPH&*UACFy03tbXA*brkbhv+hY@kvi(L;p$|J9Z-|F@Nyh4&^ z4{>+l+ezQys{&Vh*{ za_T-I6x9_9&Ta&CQN^hXttonG>hMSY_+X-6o}>slr6Degg=T?$KlL4a85T+z7H#CN zQYeTu4}p-0)Iy@%xa31|vEs)=h~sMd2_Phk@srQ2?H7si^>q#C&Wz{?4kJ` z+zrA<5P5S>&JZ0j=v0u8N;1JL6WV@HcKe2zX;)z^R7(c+G{Eo!HBJ<8AFu|B)_W=; zkBV^yRsb`cGHn4nF&Rk&S1U%smfCd#zisBPMdU@wY9V2!I zt3-zHpoG(%T}hingVdfrii7?Aob zWEY-YCSG&%>Y%iDU0Bf$gTBT2R@839q-BsuvF)?~MV#s8!YtMWXh^e&Fhgi}Vo6f# zk9gm*XH_jcK=P zA)F_kIf*kccYH61@H`Atke?SenOUo;gVx+_ZP#^XuS$$OL9mgKk`TzMILt@b-x^&t zX;c0K_ZukER~$Kj+wZWbE-4xOm7577gyvj#Gi{OrWvm)3X}lPU76PNfGxu(OMIGo zVzvD2&&w!~zfo&3m1ZPZG#Ccg~ednug9#egSS=t~xg!uT(ZhUHUxqIwCof^9-j8T^dy>L2Akg-pYNEsz6<@s6ZU%Ab z^`gFPfeR!FQlbUK%Pp`KUl1=N%GN(`Yhw)@D&p1QPx`iE-Su+8(m1+~2Z7M%P@3OE z8DvS9*I=^|MXGWj0f!a!OUxWx>`JhQ93A=09*pJwt`b8Zj8;$Q#`P@^If%iYH6}h^ zO#1JJ$tK22&qfZNJs?>B45tby8Ct@gfNLD|oJ;`F7xxlcHMxOertMo=evo z$=*IA8?d`p=v04U`B>ay!@R;|PIpt|_1Lm@O)wY4Bp1l42hyL@wYeae`O&LaDXROZ z@Qn`hmI2aeMhOaNXbf*@4QaEX@d$%aZE}63f3|Myia--WFwQ3Y|8$4VX50xm1Ex||#cV3eS~Hq{&?O)Y(u{h!7RetN*s zOd}b;6M>~(KZnbz`Ao4tx@-D8TdmAzJmb zc5R_$#2P>6hZpZBD8FkU&RoA~WZHdsg7{BZA~GkY1LBfg)5akZBnVhWX#ev} zM^}g6n*gj?N<%D{1k?AtmmvyIk{HV1GKfkj_SoX13tbJWJX!98AiC;xw=e<`4q*LOf`a+Hm(-b9~C7}Og0(&V@9CirRfMuw{<3P2nf1t0)W2n9hK zIF~0Fx10ifR7*o6MWf<)(W(2N<{*nAf#x0<~@HUy~V_5cjwe+t$6f zasvP7hX9^``Ae1cgyB^GW+iO^N#F8O%-6k{&mBh=1TLWV*Xw@^JfOChY)fM%2Rc)Z ztl{#erffDMz#(>^dnv z9*A}T8@R*FeB(AH3CeR<>Bt7^*u%T d|82bPA%xTRrr+Y-xq!fbYWKC2J}X#+{ujR(NQ3|Y diff --git a/sound/weapons/raygun.ogg b/sound/weapons/raygun.ogg new file mode 100644 index 0000000000000000000000000000000000000000..17d2f367a5e7cb53ad8dac1aa858295881de1b87 GIT binary patch literal 24147 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

?r1hV&8C&8TFESRV5 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 Z1%PF1BtNgbkHM-u`*|PJ|8D{SP5_Oj9;N^Q literal 0 HcmV?d00001 From 848968834abc17093a6a0abfb377285e6889394b Mon Sep 17 00:00:00 2001 From: AnturK Date: Fri, 6 Oct 2017 14:10:08 +0200 Subject: [PATCH 128/144] Fixes outdated away code. --- .../awaymissions/mission_code/stationCollision.dm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index e3af2a99d7..4e95a3f030 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -136,20 +136,20 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") /* * Modified Nar-Sie */ -/obj/singularity/narsie/sc_Narsie +/obj/singularity/narsie/mini desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - var/uneatable = list(/turf/open/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment -/obj/singularity/narsie/sc_Narsie/admin_investigate_setup() +/obj/singularity/narsie/mini/admin_investigate_setup() return -/obj/singularity/narsie/sc_Narsie/process() +/obj/singularity/narsie/mini/process() eat() if(prob(25)) mezzer() +<<<<<<< HEAD /obj/singularity/narsie/sc_Narsie/consume(atom/A) if(is_type_in_list(A, uneatable)) return 0 @@ -172,4 +172,7 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") return /obj/singularity/narsie/sc_Narsie/ex_act() +======= +/obj/singularity/narsie/mini/ex_act() +>>>>>>> ae7720b... Fixes outdated away code. (#31314) return \ No newline at end of file From 32fa3cf86bd00569d40ee042d740f7d8736188e9 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 6 Oct 2017 09:10:45 -0300 Subject: [PATCH 129/144] Merge pull request #31336 from AnturK/Fixes-lighting-on-away-missions Fixes lighting object initialization on new zlevels. --- code/controllers/subsystem/lighting.dm | 8 ++++++++ code/modules/mapping/map_template.dm | 1 + 2 files changed, 9 insertions(+) diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 989c5b43c4..8e19b265cf 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -88,3 +88,11 @@ SUBSYSTEM_DEF(lighting) /datum/controller/subsystem/lighting/Recover() initialized = SSlighting.initialized ..() + + +/datum/controller/subsystem/lighting/proc/initialize_lighting_objects(list/turfs) + for(var/turf/T in turfs) + if(!IS_DYNAMIC_LIGHTING(T)) + continue + new/atom/movable/lighting_object(T) + CHECK_TICK \ No newline at end of file diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index c8ef0ebe2a..9ee242eaba 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -53,6 +53,7 @@ smooth_zlevel(world.maxz) repopulate_sorted_areas() + SSlighting.initialize_lighting_objects(block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]),locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) //initialize things that are normally initialized after map load initTemplateBounds(bounds) log_game("Z-level [name] loaded at at [x],[y],[world.maxz]") From 7ca2bd48a564cd892e2cc5b20a0fa4e862a57571 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 6 Oct 2017 09:56:42 -0400 Subject: [PATCH 131/144] Crew objectives no longer count towards antags greentexting --- code/game/gamemodes/changeling/changeling.dm | 21 +++++++++++++------- code/game/gamemodes/traitor/traitor.dm | 20 +++++++++++++------ code/game/gamemodes/wizard/wizard.dm | 20 +++++++++++++------ 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index ae09e8ee12..eafc5cd717 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -245,13 +245,21 @@ GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "w if(changeling.objectives.len) var/count = 1 for(var/datum/objective/objective in changeling.objectives) - if(objective.check_completion()) - text += "
Objective #[count]: [objective.explanation_text] Success!" - SSblackbox.add_details("changeling_objective","[objective.type]|SUCCESS") + if(istype(objective, /datum/objective/crew)) + if(objective.check_completion()) + text += "
Objective #[count]: [objective.explanation_text] Success! (Optional)" + SSblackbox.add_details("changeling_objective","[objective.type]|SUCCESS") + else + text += "
Objective #[count]: [objective.explanation_text] Fail. (Optional)" + SSblackbox.add_details("changeling_objective","[objective.type]|FAIL") else - text += "
Objective #[count]: [objective.explanation_text] Fail." - SSblackbox.add_details("changeling_objective","[objective.type]|FAIL") - changelingwin = 0 + if(objective.check_completion()) + text += "
Objective #[count]: [objective.explanation_text] Success!" + SSblackbox.add_details("changeling_objective","[objective.type]|SUCCESS") + else + text += "
Objective #[count]: [objective.explanation_text] Fail." + SSblackbox.add_details("changeling_objective","[objective.type]|FAIL") + changelingwin = 0 count++ if(changelingwin) @@ -520,4 +528,3 @@ GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "w var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] hud.leave_hud(changling_mind.current) set_antag_hud(changling_mind.current, null) - diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 64d4f84eec..9881c49b68 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -111,13 +111,21 @@ if(traitor.objectives.len)//If the traitor had no objectives, don't need to process this. var/count = 1 for(var/datum/objective/objective in traitor.objectives) - if(objective.check_completion()) - objectives += "
Objective #[count]: [objective.explanation_text] Success!" - SSblackbox.add_details("traitor_objective","[objective.type]|SUCCESS") + if(istype(objective, /datum/objective/crew)) + if(objective.check_completion()) + objectives += "
Objective #[count]: [objective.explanation_text] Success! (Optional)" + SSblackbox.add_details("traitor_objective","[objective.type]|SUCCESS") + else + objectives += "
Objective #[count]: [objective.explanation_text] Fail. (Optional)" + SSblackbox.add_details("traitor_objective","[objective.type]|FAIL") else - objectives += "
Objective #[count]: [objective.explanation_text] Fail." - SSblackbox.add_details("traitor_objective","[objective.type]|FAIL") - traitorwin = 0 + if(objective.check_completion()) + objectives += "
Objective #[count]: [objective.explanation_text] Success!" + SSblackbox.add_details("traitor_objective","[objective.type]|SUCCESS") + else + objectives += "
Objective #[count]: [objective.explanation_text] Fail." + SSblackbox.add_details("traitor_objective","[objective.type]|FAIL") + traitorwin = 0 count++ if(uplink_true) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index d25c7613bc..dee9ab4a3d 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -212,13 +212,21 @@ var/count = 1 var/wizardwin = 1 for(var/datum/objective/objective in wizard.objectives) - if(objective.check_completion()) - text += "
Objective #[count]: [objective.explanation_text] Success!" - SSblackbox.add_details("wizard_objective","[objective.type]|SUCCESS") + if(istype(objective, /datum/objective/crew)) + if(objective.check_completion()) + text += "
Objective #[count]: [objective.explanation_text] Success! (Optional)" + SSblackbox.add_details("wizard_objective","[objective.type]|SUCCESS") + else + text += "
Objective #[count]: [objective.explanation_text] Fail. (Optional)" + SSblackbox.add_details("wizard_objective","[objective.type]|FAIL") else - text += "
Objective #[count]: [objective.explanation_text] Fail." - SSblackbox.add_details("wizard_objective","[objective.type]|FAIL") - wizardwin = 0 + if(objective.check_completion()) + text += "
Objective #[count]: [objective.explanation_text] Success!" + SSblackbox.add_details("wizard_objective","[objective.type]|SUCCESS") + else + text += "
Objective #[count]: [objective.explanation_text] Fail." + SSblackbox.add_details("wizard_objective","[objective.type]|FAIL") + wizardwin = 0 count++ if(wizard.current && wizard.current.stat!=2 && wizardwin) From 16e7cdea6cdce88263d7bbdcfe8eeafed3777468 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 6 Oct 2017 10:10:02 -0400 Subject: [PATCH 132/144] makes chemist druglord objective harder to cheese --- .../citadel/crew_objectives/cit_crewobjectives_medical.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm index 9a9010930d..43d470f2f3 100644 --- a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm +++ b/code/citadel/crew_objectives/cit_crewobjectives_medical.dm @@ -42,12 +42,14 @@ /datum/objective/crew/druglordchem //ported from old Hippie with adjustments var/targetchem = "none" var/datum/reagent/chempath - explanation_text = "Have at least (somethin broke here) pills containing (report this on the development discussion channel of citadel's discord) when the shift ends." + var/chemamount = 0 + explanation_text = "Have at least (somethin broke here) pills containing at least (like really broke) units of(report this on the development discussion channel of citadel's discord) when the shift ends." jobs = "chemist" /datum/objective/crew/druglordchem/New() . = ..() target_amount = rand(5,50) + chemamount = rand(1,20) var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol) var/drugs = typesof(/datum/reagent/drug) - blacklist var/chemlist = drugs @@ -57,14 +59,14 @@ /datum/objective/crew/druglordchem/update_explanation_text() . = ..() - explanation_text = "Have at least [target_amount] pills containing [initial(chempath.name)] when the shift ends." + explanation_text = "Have at least [target_amount] pills containing at least [chemamount] units of [initial(chempath.name)] when the shift ends." /datum/objective/crew/druglordchem/check_completion() var/pillcount = target_amount if(owner.current) if(owner.current.contents) for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents()) - if(P.reagents.has_reagent(targetchem)) + if(P.reagents.has_reagent(targetchem, chemamount)) pillcount-- if(pillcount <= 0) return TRUE From 8cf57b91b14ff233fb897d11bb4ef229b00ace46 Mon Sep 17 00:00:00 2001 From: nicbn Date: Fri, 6 Oct 2017 18:55:41 -0300 Subject: [PATCH 133/144] Changes lower action icons to be text based (#31322) * wee * screen clock update * resist and stop pulling * Whoop, Joan messed up on the selection border so here's some fixed icons for that --- icons/mob/screen_clockwork.dmi | Bin 16417 -> 15806 bytes icons/mob/screen_midnight.dmi | Bin 27492 -> 25545 bytes icons/mob/screen_operative.dmi | Bin 29952 -> 27974 bytes icons/mob/screen_plasmafire.dmi | Bin 29182 -> 27220 bytes icons/mob/screen_slimecore.dmi | Bin 28030 -> 25969 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/screen_clockwork.dmi b/icons/mob/screen_clockwork.dmi index 8605aa170a97cd3e34b881889d3df89f0fcd858a..ad314fa3b1e1a611585f567c48879cf4655c8e6e 100644 GIT binary patch literal 15806 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 VqIan-f%mdOvXV*?6=Ft#{}00yAw2*9 literal 16417 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 F{(pbT3Euz! delta 27325 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 diff --git a/icons/mob/screen_operative.dmi b/icons/mob/screen_operative.dmi index 65259c8f58a0e84ed05ca4de56915ca9bd39589d..eea5c662e0a8fd7c7e71e99ac56c7ad1ade2f857 100644 GIT binary patch delta 27821 zcmZs?RZt#X7d41OaCdiicZU!xxVyVckOl$-hv4q+1P$))?ykX|2OZw8{+X$onv1^c z+GnrbXZz}af8c|w;I+QsfOjI*lKv6sFHdr_`QccV99Fp$eG;}U-8bnbvk^$RD{^bC zvrq{i_5 zzZ@UUUwTKEX8N!J9{T@xZfghHg&Rnq@m&|!3GoC69y(D)Q?fQOo~^J8M&GA(^M(r! z4VVu&cDWxsvZEB~N%|M=bKl-}gCxE2j;=Rx(@bk5oYQ3zqC{HMZ>WFrtg8uvK!vZ= z$|Fb82_nA91mBmq%x-zt%O6v~IMygiQCSpu{O9d?0PwK>dw_*Z1Z1_p{7CAO0QxTgyOy=l?^t#tMS49-n4Lu14Llc{1JA(6Cm=i8SRVzV%NXW@8puvVG z{Nio72Z0R%mv{n}ZiYO2`w2#9EeBO0VygsFR$54>zaUr9uKb+^<84%g7c%0B6mq`jUu){;wu5t&*@W%b8Y#MoWZcgr)xz5kP;WIR0Q2kC*9EH=CzGc{|e~)TfWQ{ z|6?SzPg4|yZ{=YHmm@f+kwm2`asP93HRTKfj;TCZVK7(QgQK8hp!0%k%-&bgRgysj zw6wpRciJ@PyAf$QTb%APPdD~gwZz$|7oDYI)b%A{^SpOdNL9G2QTGq%lW|Q|_`@8l zeTGVGg&P+w@d{xpMSdad6A=redDUw`YpRKH7N<{4I}fSO(QUemd*z6rf+}H^3G^-i z#gr{Rh}mtpVF5umxgSAd{9ru=u!&PTV1X9`jGI?{l}yULvJXjZY>@EXv#d$GSu9xX zLK;a$v;%dXXV(Sgy>eeKye(ET>gdO1=(0QgRxSU+|Hl1+yhv_nH4Il-#GX5?15O4p zAXGxcGOh8(Z)uSGMfBITw-MQ}l9ISK;7PkJDwGRHcI31b9-%oOVGAX>3PE)LceWQ@ zdH!mfZ|G$-de5CYt`|Qh&?EPC@fnAdBGt`%i9yP7ksf6oT+o+!&kwZtB_|1=w!)m3 zU-m8b5|1aUEvZy8!&npv9k<#0sVJg(h@L|Etdacvm*q7kM7YH$J$Slb^6q;IQ22Pf z*=@-L1-%gp)-l}^fF-7&%L}KHAJjnQ8HUfY1XUe(kH#vwo?TAH^p%@Yb-~(3M^%ei zv{4nDM?6nibOoLf76BGvWQDX(tS#7-;Z|`qj}(z<5(6i(Pwben+GQ!>P1o z*Sd{t@d#+3)M0plswg%_h<1~QT%zy&9&sY!6LvUi@ia34$G%KBt;IF9b?{u~Sn1_i z1SMN*-d)8nX=DsT2%!*sP8kGMGr#?+uj=n#21BRd8i^MHK8Gx>HUjq*Q1~_}WqMW+ zbS!?3-!niPjT#??3Wo`TRMo?VJZA+l-LnL;A=sAvIYA~B5rTHW#1Qjc1ONBoqqu!u z_e}Tf^puT}{CGFPM{+3Oe>xR_KCCTxXE(5BTSI1M=QQKgo?gN8A&?ahLRvPha=EPU z^>O3Aqiez@4s8gML;9@`bcLWwf7#%y63XjVHulXIS4}k>ti7T>0%L=e)r*i*osD3# zc4ix$or4Q7(w8y|p`^)E*8X`9hKD>UETHXQ@NNp3>4rw$c!Hd(tP>($HGs-9E(=C# zi}Q=W3$KV(^FvQ<<8m$syePE&XJak0RWClTbs%a`b8#eLO_Vbypf3rhTAB-^Vm0?N zE+0hXrXFC78}}8~J8zn|Y>iN_3BcO7yfK2dP;iokA(7iY;L|16I>ITc&=m}3%j>>(8 z)~EHe-lI+`JXC!UI6QS_AEL%p{@FCM98j3cK3@9AnA|wExbrTb6FSR00v(^WvaEN2Vc0%-zpW)Yv^~LaPT}Bjoa3;}}|;JQ%Gsa8B&c7-_FFmNsd0!f(cJc6vz;Vhl6nRMEUQB`$U&g$96N_VO`lau2`iu?eQ_r>Z3u2Ucw3%+&kv$+wR|v863nCGwkd23z2eHz?AO~GoyD9{% zsPw>lxv`hov>~7eoDf-)n5MPFaU-__mdkDsLa5YquDZugn9jjAA6!O!T#9#9BjS2D zx9Rw2grT5QV;LW`zP~vNtfsjpAj%37H>2H}8=x@8+kj6nUGUc|4$5MZigVbfWh2g5 zgNN+kO?Rq=TJ+Uh>qD(@aU5ShJik8-MUL zY76yd#S@fbIfhLBkA>iqpl!=q4~Rtlf1vAym|gK1(T)FZjMV>?x3p3P_~_>tA>dB$ zNS8!KrF0bqC=0Cbrw`V!>2e&ANA}*pSL!oE+LV4lEoZJal ziJD>`Ph9to%4t%JOUr(xWk~&lnRGbgc!?&xw56Y?6~mckreG&}rUnY>g{Q}a%i6p_ z&aG{Qw>55;6ya^H+p=)NLxeM<`lo^y(w)rJ5YH&JCrhR*$3daFXa1#ri&}&moZQYh z`}sVyE~pr)$M=gSTm(O$P_5CcFjE?3K?`RSl&`o0uaJucx)yBd(-lj2wk3I3#Pa`n ziXQfiKjDPfpn7n0>#e33mtN!G4I4LgB!&;YUizNX$#>Ls+qj!-FXi)mn3+@IwxwPF zSuYqN5pP^Rp=2rfXe5GzI8sjnxB`!Y%sZdOZ=Vg zVqP+Ok@=J4<>r}*4t^{6HtMwh7}2n4Y$NuT=yN~^)fch^WDw$2VR6oAl*SXi9z2`b znDgU=lC~U_D2?R!F33%)2RQH*rC`(6Mz#V0y`%7z70*!Rm#&$*+b4br{?3)HJAZ$Y z`kJ1wx07|({tg979BO?tpQL}2uOPiKF$iPR-Xy^dvfsJN;4f1cfT=h?a}OOIa9xJk z)>U&vsWaem$p0ZCjNn(*?3`@V!X0&$1-rJc`B>U1swdKk3*3X~ zzITtL?}FY&kJiOC9iO82mvT(~qGeEcg;USfnx^&Os+OA;N$5A>P;Gh)&uh}IAYBLY zJoC>aK|n|^e>v(^>d`X_sEp|pjQGA>*!A?@JS;k=uc2?^Ed3sl1_ zG~NuU|JUGPOl-;ZobwuLU94cl=m7pfVtbYbbf0GV1d;UyDr+jJBhOzA_1lO;gf@@d zR?(@i45xZMGWYKo7tdcpLkSZ6n&!5n0)pQfI|9YXhZq z38!0|$SCY`Ae2`YfG2)b>1zMuA&bHhNQC*0t#VZcxCb5 z7`9RE{hk8MgFqhfuS+R7?WZLcepb4$cK)dhWWH@jB^3;YtwQ|+*m?0>?C-lvFWF71 zx3?X9`=?$)>?<+SbKF3~#SGr+0Z#hcv^Iw7ucEk)%vhyCebx6IsC0Rb3Hyjrb&e=l_|N;Puu z`&nv6Fscx0NWV$Ec!reArrXU;9NKY$TboTiaX`dU_2VJPB39j&zGz#BhKQyAFm0{G z55BRwYz7@fz`ngO9@|885R0$*^Gj%Q24YtsjOOegHvUa01qH5n7YA~Q^CmMnpF5yeeQufEOJf#|ADt`fS8Kd1yx98 zGQPt!#o~h<9fyLi0OfmIO=nmGYk|8sMD{$<7l2ayid7borOZ-STvWx6LO`Oonp zI3bR_+rhk^!Gup6tH0`OsUgxrEyFXU48~}qaFQWIAFxtI_Z57XoQSGKC9j*QRHf9Z z5nUb)f@J$YW`Nw5cigy0HL@;+e!obIX!AB{F6gp+nEsR_3!T8++@W>l;JO5$iGTK_ z5v^ZCQTHYLnJ(~k5P~?gFZ+q=sR=v&*#$V_!(hU@a9{Fj-;8Ind>w|xV5f|bAXL-_ zAN%dBg`Eo8@ywFMeT3m*k5vcW`W`4QAEHa6Wb7#X9+=y zuUau)$feX7#&6cGOqW!`#Eh-t<8Yrir5~n+=NSG1wg<_`LX%M_S9;`QEL0T>+=93c zQjf$qm?4YJqNS27q?2c48KFXUZDfL<0&!V;7KUS+vJN2Ey^M~({o@6k9WZdd3@gPH z{5uP(>yGAY-#c)hlI%N~M8^*oza6(X6+Q*0=F%+?o5cEMEQ*1c;!I#U!%D($@-JWl zQ(4Yc4sw|>3jvLmkZgELaVER`^W&ngroPT$^Iq$*pJ>I?sk>ULU3w+5!Q7vC zg_?+#8Lx+a%d+hQkHY{gWLt~vs51~l!~YzX@Kf}oOawTY-xkwRV`F?q zH(`JTPnIs6h2!MPvUnDixNflV3*CRZ1OHXz$_+7LQx#@V(J&4`^O%tmvA8LFkew3y%fg z(||}vo02#!KZ-y0yRU&UKYsX3)VPd8{8bq-bzAOG#)o5AguOx+^E(bDdCfHRE&G}X zPYwqr)bM9enEVDzVcko>K_ySig4@as?%1@^I!JwmNTb zb~U|bBkMZrD7ix@`5&ur`16OGAU7Kq#*C2oYw`qmGrh>FM+!<6BODTytwybfIe`wS zTdmO6b=Y8tnoayGy_vSAqCVcER)tm7KV3AmT#AYI(V39D@v>+e=RJ>*JlqabAK9D+!WY*f;vKhtS@_F45y7G1jzWtU!lk}2m^h~ zlBp=7cB=;VX1~qg7O!dQ?Iq(!&2#=p6cw{fi*co4*5H7vuvpH8{SSsIww_J}PpA7q zzHRvI*U8{wke=l)wcWjeC%gpPn}h@-876pMI7s>qMQ^%pm+`Cbwqm(hEE^(wTMzR= zng#%TUHtDnn5qfZyNpK#(ANEU#A83vUMI5*DqZI}S9`)ziJy32p{IX$_Datnkx>LvVdYD+$jjMX?tvpK^Z>?yfM^$0s~h6qvMFW9kLQ4Xeo&8 zeTUyyQE&I#(n_bl>3Ca+JBQk0Q2h+A65*gG%@L?x`}L8;@K!jb<{2uYMqy{`o*&q} z-NQ1B*t}NoVb48S+_E)+#u8PxwJ@Wz5RUHMH95ZN7dv-#cD@xbM%Rn}OqJUHLDiv& zx1=#}cV88nsUjz|m7w{fXipf$rtM;QJe218Yz_;YIp&V1AD4{+>%x-NnnJGKwDSJ) zILMq5DhCvKpE1P%FOd}nA%uAPCV*VEGx@MS&f zBTUmu$#Zk|)$M3V;!4*K{*u>rMT(Gq7PqbAOtc=T2$?8yV{dSn>xp6PkmUukP_q;|NF{22lx6yDQKo#>85uxt}HHl1+7H& z^n}0xO=O!Kj$70};qKjl*SYK0+xZ6b^^(n&d95|f?mvfRcwh z<4$6uo4SN;I%2Nem;TlNCUh2_6;sO>$wo(M{Kk`$Ror zZ@IIWt%oYEUp)OAP}gHS+}O8KT(EO+j+}Q(R}GwSSM0B7WP?DeSx2i^XP%ou{Z%i{ z&Gff$m78Q9XAenr&jb0f)%e)Gn~mVFR%OlkSMg#qOkmFaK)_=t*tk<3f40ipA*HL1 zr(gYll@bOc5wQ0P*OWi-aN0XiG$`(S^OMTUWbmeL07k%=vz;G@!BCf?^rg&QW~w6< zLTkp?uO>L^Jd$I!9?Chw$q72M^lNsfA}Fy>qshi6lxN96xgNRH$x7Lg9gQ_LQpI;? zdvJW|o4+RX|7x8AU!&u<3|$x`PmamA5J~Rm>^@|7p84d`b(mv$M{cNo&fksuOYiSKORGu6_0TxIn1(|9xVKzmB+DdM zHv2MbF*h>N_6JBa5DFV)IP#G8&fP@gWS+M-EF^s|kTzO4zSp^@T`zir-z?(LaBYtQ zK6L}$uZXX8GfC_PMoGAuQbe{FcNGQ#MEx4_pr+PICosWC=l207qO+;j01o^-E zRB=LS$ndo_e2p(4UoSZdiM96?@D<<}*J8r%c~{wgE|In-+KY;h&uf6C&?FJFbFckw277Y|{GgL;^Q>d9NF1vfUoTDxCCs z3Ww*^1kyRg_K7#17;X-bQLV29iCf9}tw(=1(3kE60D*$P?fR-}2xL(}f+-5;$L6VP zmo55PaVfE1gaz*T3rW%I_r38^lT*|?n**6P2b;yq;?jail;(^aN6q(zWJAsFiZqh* z=z|dZ6cPs>kuC1uB76rKekIrbDpfBIq+2c^UG4V=7q{PAy#Z@HA{oV8!e-6xnbA{t zoZn`fMyHktNmOmQ>tD!$o~EfOnnFX`>O4YY@tt4zHqK3C?jRj6^)bhwCFMs=HGDe$ zgJ#<8ru9e~RtK_)zsqjAn}K4Jc%s5l+#<#@dWvEc!WJsOlS&<*E5x#`*DeM!GbM{C zKlaD93sJ3*0RJb{M96}uj59Bol~FwD6*ekQc?6G#=m4*7)UQ~ zrs;O5vaMo??WUK@N54YABE-f+O}4#fn=HBkU*aTJBkz#dPB-MLohb(a z@lNGxj$y3N=^6Ynd9uccl2V}VPf~U^>(I|3DJ>*m9;jZdFQTLij8LlGZ{ z?eL9PIvCnbwA9pk*GS%K5?vwXv~46WR|#5KZ10~rrkTt z!p@Mf=j!H9x)!&;26~B9slQq2iW1}I!=mG}L)exf(l%%Wj0iYQSq~w&QMANxuuMbc z_B{#KqVAW_F2R!bNB}a8LW2lG@O0!@- zakyIL`%|G`!Uw@Rh_jz{eT_Z1pbG(q3S4i&!Gs)Lr^28LtN+dHw4X0ea zU+5gvFA52%v$(MuNh!}!^C-xv#Wn3Cf8RSu@5cJ`oAy`OnkrWz)kvs$IlqE}E&LdC zsR#YG^l^4k2~b9O@2%-#h(S}hNwFX_K!80Kcz_PhjZP3KKCA`Gbx8c3EGpL{+^C32 zdjW`f#}YO9s+WsS8-8i#f~>C0o%ZF=fY=I-dv)VRiex|?P>pHbJqZmQO-5pHF5N}L z)g?%v{{8h8(cQe{MNkjyG+s#|hQPd1sES1kF6Cl~HDjCgY;^bJOFAtf<>_oXeuQyyQj>3Zzi6lrj*3b7HA7X*?QZ7-A z8$TGs5;*(Pn1(SlnE#2oCm6|WycmVFm`g?-fJf^4 z4VR?Hn+sVKdaHG*E#NA)hk=#e`|6U3Z+k^tyT=zC)G#2DmD92$?wYSb29Yg*N<9#W}P&m zweU>H7qPulkFl9@Is6hbm%^W~>PSyLo{b5HlFbeRC{!Fjr&4vhbYTB?2jj zgu!j%K=cc~F+Jq8ABjcV3Ne~YQU<;X$i>zwl!OknJv7p=^lzvZinAJv#33=A6*Hg( zbNa*CLkha4Bm7&&3 zhA*P`B^T2JaUe7Xo*JvL(D>odeUTR(UxgDpGhqt?T77}-4Od54SvELRjPPht!UcdtbvAAvU0T(2TjS+I~6^)I3FRL`ApBnOK0i<+FHC zPC2wGys$x+B^HGS>NU587CIG~#m8as?6!Otq=8Dzrvj80^Mh zJ~uk@>AQuZ@suSQRu6J9KF#9Fk}C~&56ztcpS#FO8Dt-GR%L&|aEXJEpvO_NSM0-S zQb?Go1e~FeU_yv!%c_hach~8ebGirZuhSF-Od$tY@t6aBY&D_r`v^d@+3PO@bpz>z zI5>LsucKV!IUW?)6?kw^a~|PEPEnbdyyC7Ot_%jHAtzZ&woKpKU~+z%^5<3#cp5qh z>QauR?akVF-ISh-I0@Q~&RK>A<}JQXWOtX$XO=A)@xsjRmlSu;gq3kVcGa3Cc870S zrhG3;41%xzs;H_LvQP{B1cOOt39Q`D!>QO5w#6Dl8>Xa92+iDJ4eL1NI|$K9ch_k? zDehz2hLT%q9N_H!0(&@GSxWe#Dpj60;hRVv!MUUbPMR8vNI)o`gqmzrXW|00Pjf5U zu7^6*nAqEEsBe8Ag*tz`yJD3t0Ru;)4UNYvvUwjf;of=UHs=V)F^EF}{8rh5;LGVl zm!pI}PXzxq-xhyFl6&-y%T38x6L&HAFaqEE+1Pp59ux8HaG1tl=DN$}@)+WswJA)O zQk};bH8}QBqejBq?GsYC)C7^eo+{^3aRw!3qwz>>#=Tv*9~!>d7^ih;U}eyUgXhbK zK6VDDG)u52o(=(!dWQv=95N5+%nS0c^ZmVjY;ncgsZW9^UCIv++7-*yc3krISHfsn z@VshfXJ0Vz1V}?DeoD86e>4&F6AKIMd`2j1LzW?!I^Xoe!Np(TTp^9>9I$Bpaui}~ zjMCgMjFIC8ICZ#A0qi=q9FGY>kPfIE>7+t?xszY9DWm{n`^HX4Fd3J}_)|Z>{KL8I z0tMx%NXwaQDCg6gJ!>d5moP!^YYQ-a@e@o^TI-UM3mZ}j@x)Ln04>?}J{n9y*RTj? zC$~|OVS06+1~?R)BFD*1Ix{Z|nf}KEj#JC(g0JZex?kIN$%fiE zgg7*C;)(@$GuXUW>A9`sf|!+T40F?I#3j#Q5M>}zl7b2u7=)wjv2f{kJZ|2!KyCYg zHs1UTIj;GlvqRvC9pvkuNidl#^rhWHby3FJ31BKTB!`;JbmjF5XzA%&L7-lk>v@az z-LahfD=EvE_xBQUbBssf#cCqDCaE1`spPGFbhieRe^W0WM@dc#*>$|%^rLD#md89r zS&o9ywnfm}I-FXPVmOT6fjUhoO*LNC);v0mKCWDL*uEIi4|K59 zcyq9mGJJC<(3CRQQb)#c4#GwIfaMn^W;IVbMMk7bI_Nkeyj-@g7amhLoyLGXJi@Se z^4a?KpMPZqU`m;@C6s?JTejj%lV58Bq@ats&FNgc?s9K#XHx5Qn(&NaERE`sRK63h zl0ICmIA4x6ANl3mM3R;AK-wte)egEQ{8k#>&7v9IoLdTg7oxGhBte$!Osepz_W*9-geda|>v<>rjlJNRn( zbT0$V6&b)8`5S>(&>z6N|GS1S4sHBVUJDp|YiHK-&Ctop-p+b%*!T+iD zx-%LDo+>$V#Tca&;UBb5*B|4rh%;i2dKKteGiL6%p+MnZIiTF3kKr$Q0Y~o|;*lp% zdQkcHm<(eMuPZ|!xh5yd%K?SM+;v!;927f}%IzwdZv%CWp6r+xQDFzH&Hg}rqd4bO zUo*Q1F)I0takziPvb$3GUcTGM>ko_UFQ$sfgPF;Gr4k%Q@_R$b2qbImYtD4F7KEFi zv-svAgMmK^-*CQ0UKZ?)0KT#&_m%-sqKp~Fs@nTH9ywuJZ9|2JA?1g;6ubr@0xJB( zPv7Lq`LZ&>?6ufM%suMw%(owI*3yTNHC`_Tj=WU=NGlX+YtBZ+U?xhWa2=2<7pjen zCxw{J7)D+4xUXnv)qiNaoMlG=ADTz7tYKK%h(jZT5y?|ZslG(5fRBJxV^DQvKSEwa z$t`Yk+FvPPY$i7u45jpI^P?e1ai-}7t50V` zhoej<#E;bZD@||9#jlCf=n@>WbOE1|d}8sw38&v777tX5D*hFGs{AjSLh*-C*>oh; z4EdIdKvv~1V%7j^oOITBrp_49HbjFIeqzD9ArenZehgRH%-`bg>lSY(I39x0gP>k816YTDHTn(S0tW#zm?# z+>OZp__tH0#T~3r2_)F5C6bfIOko?RUR}0+D?hq-Q(^$Ie+y58{#nd4!p?Hu>}scS zQ5EH(J0Gi!w5>GO!u`cuL5wG1aqO|>8b~AfBYe`*Tf}-niguik5;~SZ1GOA6bSY2b zb4)PP0ee>3i3vY)TE|Ob;q^K>UiX@bYjZK9>Tu&y7!bAHIcM&e)2Jw$p8rQywLm3l z@M+Fc_--B`+WRD>!8e_Wz-9~=Ojjz<0u$k$z6}&7dK43qU}L{HqUFDC{E)U^guay< ze0L&Xb<%}ZE3Ljg7JL0Q$^Tin)1%MJX285-j~(4fK`?!%|B6pfS6LG{7v{DRrEm@f z&neGm)v;)T`ZC%k^s!09{NuBBRX1Lxt3#EKOF{$klJ`~daK{?bl3>kXCZFi6(%SfkYrb50UYndzaglSVM!op)WH)ABi}pOG`fqPhfDM`y zc5PWwM#4E>TSu?S$v8P?L2}Aw{rcxl(V-@9(Og(<%}e+$MAuG4uo(=CD*(#{;4%n3 z?pR#CQ&z}<<>lEd=DJf%9r;qbT}EKPH7cv~qpPoh!EHxiY%2Co}}db+~h3Mh21Ub`D9V!H_r&yu&7E)858;lz5^ zIOl(O7R~nt(+)RW79&ASBS`6y6SbYVUGYjZ*VHjBWh@(dV z;iC}G{zmON(*_+QN_bvvRlzPpP^RwjKcp?jE|O>VnTW&K+eNmsrYh~cpd|#PU;9;w z8LUoKvZWh?zQf$Nc`m6YfK-Y1>p9*>p5-^D+q~Wz_DaqsNC#WTu+AIzIaVHKJ@mjl zKK(}S(WS^l9x6jH+pCb1Wm0TwueW&XAPC}|lVqLA?PDIjA z1G~Q-Cvi=ou^RyF(^e2wysoD$Iff`k?Eti1vWOASW8n{r)v+-^Y1xq3$U3`q;{FoQ z&H%-stGT6P9o*cl(Y)1(VjRnj`O=DT!_eD(@8-dRbie^Y{F7tmj2fYqFcq{*AvefB z?pSZMKMa86FoFQDq>Y)9<$$ujki{&1R~g75s>w>%vPcst-BFifwB zMJY}fb|me>kxt8T%6()Zb=G(vHQxD2Y8XwL#U?^Opy^Qi?>5hOfXjRBe(+$64g_jS zc*Uj|R~(sYLc_5Cc=c_aP+8$5ya=OMdy_nL*9u@*8c{1)vvz~ zVKILeJ8eR>QaPP)!~TzSKx2dF4)Q!O^aHh>j5L9NjvTY-f%(!S*!2Ns4>tTWi{a?& z6p>d7-R2#4u-ERK_nATe?*ecl&+m_h3y&X$B9DKQA4STa9gVxgVTrx=Y~T$2ZbnX5 zWBq`qf~}9}3bHml5~0Q)OOQ&!WeF)Cddz<6`jWky6+n$T+m9)Z+QbZT7nw`N4KnuZ%H_Exs@l1@R-NJ!ty z`Li^JH^e6M^OyCMBL@(PW2#pk=xNtick;ReuZ4Q;N!YSi*GZx2*7fF5<*&2;O$QRj z$$WD15eWkJqdVX7t3%$sA5YHQ>t=%K#1YS%a9xw%zGDU7_Diuv+C(%-W_Bj<`cGq{ zUfIF@>xkt|W~*1;T7`v$(i|%7DJf0;>zQqI=WYT|#`}q-p-;h{>y4(l-2G|%WulI^ zkk%=dy1nHd1`WSwDQB0imEYFH5og!qzSb>hqU%E^)} z_>p)A?$mgXq0Urq6OsF4<*yDf*84AKd|4QW;3j>hH^7I3)p+vxDLMhncejz}U(S)b zL|wwvZ8_M1%3JI6BS-^#-MssvwCf0i;eLvM$esToy6OZIC1=blM+sUO4n9QvhG+b9 zM%npD11tFP^T;}&B?TdgnucJX6ctN zEOR;}7u~h?^}R`@8wOIbCpDx|tw-F2d)R53d1txY=U52Z*vgrD*l6H4%k7-1uhT{T ze~3i9sQ?J!k{=94EHITED@E*y9QW744G;cILMAVdE`8*!V*wj8v4KBgc++Ft=f`*y zudfR@03z3ha7Xt`u+I;tOK0>GJVmS(?l(CFB^MJPPIO(Y+)|j;|IJHh?Xf~AQh%px z9(t zcO>BWj(k5wG{lTax~9S6W1&;6^#1S%fQS{%m4{iM)16vsQh#q(9>rMn*= z1#w+fn6;Au2V9?o>Kpl9gut(Al-lZIgjnr)!PIv_7UKN0L}Z2GTd&IQ<37MY{I3swxT5p-CN|=126?i4Rg7hHT4^0KRG7L+Wb_Kbw`M#H3#=9X?uRTB;#&~vn z*Xs_+jHW7^$73M()n`=Xy9Np_fv$^UTul{=8}G#XPt{qCyBm#&5MckmwCsLRnT;75 zoP!%x4Q%aFL<=tdfIiAnxE$B;%AHClR2w{-PJ<7Pp8cn~u(GaR_qmDWc1FW5&(72~I(8 zlWBKz_FRmmOeJmjw8iO)u}og0$v9mglyUeEjoeJ#Lu7)*pN!(N-DcBObXR9#%^i9- z+3nm{MeCbTJT|~5QEjViSp&XQEqIz=@c{!?Q0jO6QuJ=)5F{3<9XR}8p>{o8sA&N3 z6^ibYa2!X|*KR=kH4UbR_I1bq?(K3Z96d_sU2(8UMU;+-kxm;vtGM5!HRQh45Es_R zW^Czy%wW}AL1od+?ZsQ?4p%s2l($cs}be?VFyBrOlO>9uXhtKI({T=exX z*!}vR`yF!g)>Frq`*pPEiJky3AHkZE591osjn{?r*yg>@n=j*j@2d$KQ6xP%5O~{Q z#(erq9UGvu=}RPsqceH_`Ja}Lv5%=PU9L)mtaYM>@K@-8AbB}e;~ZPjz}an0>Sv=oH!DZwr7a>#chWPvPOpiL4T(slK$hr%5;>Y+}%^H zGanzRCO;MU-5j1i?E@2_Vxp($+w|CqC`kKF0{YD@-07^qn5eegjZR{)457s{oWElM zNOla+YI1DY<_5ktEMb1gpQOTWhK^cas2@ynJz&lb!C6aD^v1k9w*YpO&x``o6b%7yd>C*# za4$fP)gk-!_PFvOGIQXkBX9Of{G#rcMsASH$FuVGsR>lcBAHDlOVPsZ>UogZ>$uur zxHi%%UP%UzKhNc>0U{?HB=SE<&BwfUT(FhoQm{6}E-~Q(d=2e2{2zfIa)FF3yt8Rj}4NH8` zoPL+?1{*0ztHR7F?~0o@mDcL>mqEO{Et$qDrkO?K>*z>=m+bo& z;oQsJ(08Yf3$9X>b(re~PrTZ|RtRcv*BWWBXAi26agx_&0g>04%a6gngsMQ7I``9E zeITbaSU>hxKG(tt4}`z3^L@60;0@ML>D!Jp6HsEpBQVR|Q_3R|`{|1V)esjZI28R& z?7e3uoKLHeC}t5(vJxp11-dBUMTD8!A)_OYCYEw$A=Cr|gH9_x{u2S1Y3!^4sKmc6$X=S!M^vVB`d-!%mCWU|#Op2Z z2ZXjDIFgoh?mNNz{c~V8K7FYTHTs+o!*hHqk&f-sB1~g!T_oZLI1hyFY^VqjAgplO zKzEVXY$#)4kr#QiTI-knff!(>Eod8k}(-g?gd`w6vmXv zg_EsRFf%%nxK|m#873+6IVDFk6Z9@+k#h{p{?h`#&CegevjA|3r@%fA4Y#7o1FCzU zwOzk@up~04O_{<@Y~9x%68^RkO3tKE$$AVMH8KYS?|S}dAN*7YKyJRE-$wowjEH;C zHdKnUKdq!0Tnp-TM2_29bof6^mJ|iG|zL2++UHs?;TBTTe0h; zT2Fs!Y_?JP^=mF0d}0$C9RU$Oc0IdCrDPLGD1sDDOhOGY`p;kNMM-!&gx;`HWv*;o z>IULv>=Kl|`x2ZPh_#vGSCO}bUr%ozclcmf+lIg~Z8^lpdn^!p%OT>1nHH+#`^?+l zm82-XXe(4qe>I{+G6ZeYEfQPvvLF+4`;A0kwB~)$+5eqF2Bb;C+YdaQ;Zd4-U^(GH ziJGG=vfw{|)2{&)usr+j{}Oty5xECVLlUzib-id>cuvF$9_P_topjyQu_8Ul5Z}oc ztfS=o7(b#BIRmcOa;`zcKZ%Ppt-klNEm4EHopBU{Lk#rJW*Uo<^`M1~Abz~tb+eGL z#`J!iGE}_o>J~rsf2-3?3^MHWk2e%j-%hd6Q)BB+cLFuKVg*x8|2|A9o|QzPDjfh% zC;I9ksF`DC69@-}1uOZo{Yy{{>HX^Wp6|W{v9%FXM>k+e{CT{RH`MKwKrG=A4bZ*! zNOBE29+IET5qYZG^L>&aX1>}{`kbf?`N6vcium>)(fE(x!b;T$8?^brl;pH8pRrF$c-!caHUXu0=Fq&vT^}h1#Qx~B0)-*N##3=IUCzD2; zVUGB;w{-*heDETtngf*l){jg-FM-?Sy5(pZRoF*sfZgh^+OdGPQd47N@PNChLFo6f zDPkG$NLz#`@DEVRxYJlftadl>yt0=VhypBAv^NAGjAwDKy&o#3Uw*!&hMkUk1t>pS zG}qP|h5i;7UmcWNKuz90>UyR(>Wyc_OhFaDLI6J4`KMoBClW}F>RN)BHBe{Igx*3} zIs+m&BU28;4!@yF2Ecra&pNh0liw7(J&L5kdD=$t3d4Neyd*iIK>6`0JB{Qu&bV8| zyWi5-I1v9TFV_3@!VwP!`pQrn*#7Bw>tv{Hh12|r#VR+g$fmpNb^p7~^)>z#i~k|* z$F3!R?Av&k;An~PUj1d5aa4QufnmoHt+&vc^VVlBqXIl^Les*n-3md`J`OuP7ae#+ z))uaFR#l+;%a-V^mP-o@8cQ^B)`N3%j}Lzf%ZFTviJC3K_d`QwGf&%)9YbYRG72Tc54;Wv%Z96wsozU47)4HhdIvP?sKWEI+^ z^GN~s{4O)QS2D;cwY^>k9nrmh67uYsd&&l_*IFwIohr~Mdhagw?}q|(sz{fpJ1$JW z7K2nvC^9sIB})L9{v5!V-4;+z=YJ87Bi6%0oGr;PF(q`%pRANgL9doe znELBmyzGOKs5+O#^v9kEam|$V!fmnO`xwG&|4(Az&Tt%V`_r+NSy<-BU@V9QJ%8k# zZWX?kvE2%*HIjLH(u^YyZHZiUuXW;dKFmE5lj}!h`DZYuO#;EBT9BUTHV6R_mM}r; z8?`R2aY7JD2u6IUj9=iQq~_CtjL@uX+>*}VKS0ZP@AQ3sN0*1bJ0WQtmdNr13|9F8 z$pMu=xqgdl#rNwK*tB*M=0S$UV9qv`9VqX86v86@ zHL!A|?AXS~xf)#KGRHQ!9C5}yfw;e5?vus8H_@?a}ki z(^jNE2oGUaeD{gZd)LfCm6Zka>~`J1_0bWRT<=eX6&iG;wI%4)n1mmfs=e1Ty>w`( zc{6s#T?#>+B<{w_HFJ6=@FUx+njMByZykEUY}E0saLb>>PYZ>Yw$)`%Lf@=3V<^Z~4WM?E<4>sXhr8<(kf?jCEG=v+wPX z#HWvC^=4E$ItG&ETEq(ccn|twNKCJVnI6G~w|PXE2w6VYQf<$yyiQ-%si`*|PxnzM zd~QD?=iIll3w3J)w|Nsb)6rJT79EDJQt#nD|AJR1TKdi`cb2 zLHhEqL`NKIc0S24c5&J6f!Ti1E;6*cRDYID2LkzS_q`kRRu-u>(auTiM z%uG?pq&iXt(o+ZI5ENE+a;E}1`9m|(b%U>I5-ez(E>3Yp2#m&>p zu7bt4S^92=D-WZMZtb3@{HyM5vz;*XBn}D?N@Cx&_*p-t5rnOc`+p^OdRd}LNOl4pvEc6*Ze#vCrZ_# zWH1d9I_`(0V~_>FwAGzx9kF`xX*T*P+AlBnXdh?=_+>bp{$fDMGH#BPnf3?{5ZmcJlYmEzdKENcZ{iKd{3)*q7~I+9W!?rds%ITpyoabTn;) z7coQ+-zkK25}xQ4BuVhY$CUoreoVWqs_!DBK*jKZW#lsf$-)PAZVhL-ctTJy(sy#2 z5|Gs^%npr~a29e280_^!52B!$bMXK%tW`&Mz%s?ExI*u-J4-(kJb8B~ zI$?98>#^-#6h!oEQG6=;#Is zYI;~~;YF66{g7r@Hh&1(e6s)+eGdo|Dn&!@w)({k#K&i*{f|OJW+z#YoV4p0yGb|MX@0G_E-UdfW!#&+Te{iNYh6IL>9{T0i7t0VDPrE z!7(9cIt&xCE>D4J)s>_mp%xo__u9cnhHqQZY4`PZNVU`n0U$aicOaGW`qx2`AOV-% z5R&(SLGq6B2>s6AwgX-rq8`fmUQ%dN4jn9Z;_NFI~N#jm~{9R~hw1IwlKn4`ga z`&@IrIPHp|QF&b5q}`uK2Oc$B6W6IbEw*V5D&o?a4i!jT^+RinKId(xIulUX&`hmJ zXES?6ZL8QIPdZm4`~Up8DBK)RrjIcmXv90^S^2JcEcY5XP}{0|7IN+%dGa1IMT2W= zux~V4#H+sVEb#oQe48VHRK11_=1_iR#g};Jaa7HF?kHk})vR=FO^U>-jKO))LS z>R0sF-D5Z){qYKxTI~W;@W#b?T0CHTyL4f;EATLpdYs5KY62NM|2HGkcB&Z_9#-k! zdg9!Gi=WQWI(YdiyCL6rKlak*cUhAIHM$?*hlbvPrP50?`eWQlxBLZ@F7j)KunJ5z z>)?<>!e&iXs!ezjxC(L8wWK(7AXU@g?kf@M&F59%TWsIqu9~WvbOod6_rf6OtSpnp zvJ&Ra6vvSXMpf%w!>Dx_kE6E7+vuH;hlvsqeMstNKglng!z9ZludylUJGx;|s{Xn17bEJ0N zk;SPd2zu-@ZaH38f#)&=Y6FTa9hDYRZ-y%&G(&z~k1=|sNYo0X3ztAfo}aYdm* zMt62L4s5if4r-5+Kahn{nQaO-OPQfB{_5V}mj6)Vx6gUT`YuvK^$m(Ml%=dB%ehr( z)oTfSJ^ai6=#M7WV@_bl_1NlH!>DK(AWDicEf6N+)Zk;Mm=V;pkfQmYdG1v&HkvQK zz5k_a$-0x>5*z#VH;+(Rf3mrSUi||O5(y>r(L%OPzRQ3m8iV3012$swmI8`8Qe^4}zSlIu2;#!&4=-k6|EHrxdAu$W$qjwF=&)<@y2oA(2Co+moh zunm@;zP} z+7mCCb9L97(ExHAOx8V-;NE}mN>qz~giU{Rg;e{xkji=w??wkCq@oR^p`xf9iGTQv zkRM*f8T5y*k@;`Cyi-Z=?l1UsC)U)-uw}`2|Su>N?M#< z3h3v)KRQ=>upQXPcc~Ph`TbkbSXujDfjF zptYt5Lv9~tY@`tg>OmY*RW9Nu}AkZf9GVVC!x3PiP)*OGl z-@cqFN?`QK*P~Hn$*W&@Y`E(8pZF5dYd(CSv6Dqdc^9OoU;As3328VDH9WwVkW2NA zKI)#e_P0e%vM}&lospl-`vE~NpT94R8=G9i*a7S-z8?qGTzl|(fr9A8Wv^YeSR9M@ zFV>4Ng`EFg_a36yW%S9d61UOEy@2e~s`&`H|nrv^5oxhsv&b53?k{ zJhYGu)I zP!`wJ&AvN0emmLTJZoqw|6-W($D-CPeyMuMLUuszu%?E!-^#a7{lf^!?lMNKqxHBV z#a_G0B{pbBsw_AZ2>#Ua+|M@Q)*X0k|MRfe>3m zqXFYojJ89d7TNeS5_{=s7}rMcxCPf*!+#4g2_Ttx*hRB4Z=Tkl$}mgKpKN+-oFL>Q zk1(3b2JRe(-zvMb45y_(>w7!<33qQ%)SYae8HmiJAf^_33yd@18+@4=O+6C{q2?P3 z!^L90heuWlRB132Ss@Bgaf7^lBr;jop){-?=zyk`Lb{wBA}EhxC8JV#n&IR}0c%0- zj?pie!QGO`V#9Us;t3{deMBHk);5^yU-{xP8Swe0EUrW*=gA8AN!DsoL&o?m=sr$Kv3-@K(gm%wm zb^!Jyrc6uX*?$2_4WG1+19hpRIcFr}T!KX^189Q3e% zR}f12Jwg;zlamx4!_<|ZMI`z?M17%2Nx&z@%2Y%T1;;>4hZcj6dwQJbGTrbFVEWv# zoxLtfIp!rb$f*Y^j=zcy%7gUsYjPAB{(x^PTinh)D5zUhwwFa7Dnptlhq&j6$hc%t z^di4EHsm(|3@{A_Bz5~8da0RZJIWN2-(F*__7Ro+;`$(c^do5Vw3{r$jQBOm1^}cZ zNS|-J8?z*qlT0p++dadR|K>=h+lVl=|IJrPj}Fp1AIljHv3~Rrd(i> zhuSGo)lDCaMWIYzhr>FW3*XAN*R=FfXq#6zaEP_KbJ$KXYQbmXqD+ViSM6b~^@V_Y z++y;x!desrk^9!Q(y^~pHRDn(1yC5ZN6Z5SZ{_PM!G5gVBCtOD#}Wr~rbbjW29s`< zhVap8Uwm|oJ|46QUV62Cbv zZR80(9u!`)!gR&csyQyyE!aCt!i6Z<}jzjQ@ts9;aqhZpWFe(W#XIbJ8K?->4m5g`j3fSDW* z^pWbT@x(cQ5<9vpHO7!3vla1gkWk=r=3in+2;)k?5uhiDHh6G+cg!oQje_AX_(|(y z1NMF&U2FknQU&_Mjyr)35i=S{3D*E4L(EimSuF+^4X)cRz|_wIpz?CfqzcY)!P}Jb zIqPZEVg`rqHz>BqU5MA<=FxP&n1Eqhlp=9rMm=M3h$_{T2wu%N(me?juBB>6f;_e; z&8va7>L{G{EF%9Zs(yKXS2d`VeDT!P3iEC37&^@(-?dsp;AMuLL^?;NZcn7>e2_qY zzN5^w#!zvp0-p&GE1WLBu3uWah7%J3*KxX{KZ0pIR))k|YHxty)6n@zE8jU4>+DRS zq}P2g^8##(d%9;VM1UU&$RnVEmMGK zXA#8UN-sAr*0DL@3E?~xFX*&}3U~{-RpGCXt1lhyB6t7~k_@YjP4Vpl(*yN{i5FKz zO0g9=P4Lb2gb%s8DV#~qP_(Xfj@OY;x?^u%fvFz{)Z{16OKwGEBrz59A33%fUQa6S z*%MRNBYVO8Tu$K-;_h`vtq=-KaIhFe+Kl%}Yv)V}p3_n+u#@tn1n>1S3iGbIKM5vv z;K=^>9uhzp^)!GgU(vjV1e}8o+uMRpeO}=*z2zt#*-3=glqrk@Yzl>yq_5guUB_^! zt<*7+c?mh#Xl&slvJYVss;zRNJYCzOu9;I0j)cwMJeRM9?q^JyiwkLN5m*atFFo6L?1%A zOb4yBXhuV>A6-l{pRb^qo{x-U#vgH~e^jMJ8{EM8!>Gwg)&%YvS_qlC;hb5HMwWdJ zGZ&!PyCsQ1GZn`^rc}ur<3)pGq6;=1pG$atU^t3FD#KJqJ@fT@xO%=nG7kIe*rCE0 zKLrHaSR6lIXi;o$L0C<9>v6|uf5nUAa$7#|J=WRE*(W15V( zx^hE~EXKHmf*AC$cwMJ2qDFsH?_O_K58R4sV0=Rxu@LDLmagoK3la;BoHG%)e7+l@ z5%Ruu8?ftoH<>cd$n$fzP|$=elJM~lwTk`@x60toL&fi9DZc%n|Fi)Q`q70mMrlmL z>%Mwm&9WRTBya^tT5qMru!~8rBfUPtWqNqaI#YbMX87|X5!zwJ>n$oJ8~e!-2tq^F zOD*m}8u5W2DiL+XD*Y`^c1pR&B%}97sQE!JbLpH)^Cg=+BI7i#)RI^_>rb2+Nt4Id zX=vs=krj;B~Ny zwBTE}8MIhzV%xB@m9pifiZ674Jgh((eWj1XtbIoowtV~q2JAUxJDG@sJW|Qh-8>RN zIzEMu*|UOS&&Np9)XL`R3_?I0?!iLLlRrN*oPL@#2K;bGOx}ufbXrVCMZmKA${&{c zY?pm`Si!W223=Zq|FYuuO1Dim>Uo`W3wXo#wu_7@th#MQ(i?+FV{3q{w$Mm9@g(9a z+AvxP8l^tk<6RP0NJe5JBpQT{HXjkr_+nd`Raj49+C6Q-D1W|nL&I2v{DC_g8h#U@ z$f!TQFc)+H4rMsDgz_P31aFMdJ$?VY*u2BIhuU@SkaUf$Dpmcs!}>?kk4%YOd6gYJkF zm-P5xw>9#7lJ(kYdp-LuhsOKY_w0k;SeCV`4x+-&4ga?nW|3_IA(4Iw-6j9b_TuD= zfR?jRdkM&e%oKzk!l2_c1R^D`!3c8=3!r(O;iwCB;n+v15ClTm<1hP`VQa+AEEJqyZ7?w zNL3oh_?TOqqPYJ>53t}0v%p~>i3PLftSw!9TbL15ponGAx0piX>+x-ACufLuj%lNp z>s=fVA+B&1FcyBi2Y)_0+I<;mmu)jLx=oq#*R_b=!*T4kZem4(BAx5UvgT{(QfhQY^_xodte39bjZ{LiUWh-igN_4>sKSykqbsL zqnF91!&M6WCr|q(zY?!=&sF(QAgW-O!Yf;5yg(q?SZjF6+eYa*m$s{Jp|$QT-5~gq zVilV4Xc9t1QVA02ZomEEdf?K*S-|LFw{atY1A^w^le~~phTJ+BD04LlcDa0W#V{a1 z>*}{&j421D-3>v+gC90yBxsUD2o9x2DU~6(-xWtSfOo|gGl^qA^oANeEnmisHOAc` z!@u8@8ZFQW{*>(xy(bl35}p#IYn#g?{ad&}L%3}V2GX;fi2VYJI4f%w3|w?8`Y$t4 zpQA&P7!`|$pQfRm9&g@;#k-~L{L??cwE7QwIv5engh}=Xm=dx}f)P^0^;`=B_s_C= zSyQ=z162V0RvXk(MD@U8{l}#q!$|%tN?YANOg%6aChqilI#u_zr5w+QohM zFIDehWudz=ZO7#M11Idiq_@J7ltLKkli@lQuXva%ZtuYXS+)!P^O~s0Jgzwa>02$^ zV5kBbABG*6>CHUZu{Uih4X3WI(M`L0JSuu;a4AlY7e-pM^ivWL`r|;j^K6qDo|?Ml z7vtFKvNwzJ%&7FDrUcw17aZBdd2yDMr1b4eo_=HHhJCFzN%Rg?$BUTMiiF0+`o#_^ z64?r8V2m#}85=6!Nj%kgw=Dp!YzazOBdrdiRrcfkQiuxJW5k7}+%T{yM_gH?yWs76z)~hMest}XteC-lsb3P+@3i}7g zNhFWUvZE|y#FnM&$jw^3FDy4MTx*mWHRV&w;T&i!gF8|67&vhN501YCvO@RTi5qXg zzlG0IO1%fudOcV*0%$AoaM6qy$vSHB-Fd@}AIp&^ zIT;c6b@>Gnu`izk)OVb7?1X)3pnkRa=l|hvS`4Hm&r4{@QVi&La_`dr6@0WjAGIo| zv~&=>UHwMWKIe)YPfO`)C>h`N^Xw&nv$T&OG>=>?WCY=Z+e^L?)clZ67FIGWB*9D1 zW6%A|{dTm^QmZBZC$Vln6+ zqrq#$*|+f?CaYY3Ff9$^a$)q=5hZYNfAT6X#?)`D7uPD)V_n@Pb{TtbI*z9D08iQ!_aqd#&zY-z5Fpy^g!+ub}>N8A>#Nww?9IL_AGh ze!a1|j&(u%9ej}Yd_eiNU21rS8NzBsl1y*+V!9~2V$6w7tcNY0SF>J6O8rGX6(C9F zs+pj~gsThb*zI9qUN72IEHzg1pI=7O68UP3#^5tx9$)WH+7Y-lqIl|j+eD&Tw}C`* zJ25j6Oj^Mak)GZ1*1eBQW~?%&FJ^fW-3J0YdgOm#aFg)C?}!{mA1deYlxptK9ka4f zm|z0RG5A%L6$Qe@Wh-|O;@r9eY^!t7zgqY4o0)cK!hf-9qL%G{&-?3q7S38}j|B3F zZUvNnDz)^o zyNt8e-XGdq_TO}WLQtGwgpJfPoiVnIxJa#|JFt10A;I^675!t8Vp!D6AD=b9g*3fmfd2Xz<-~-?;AB4-;xDvAAQ0!_CB|c&@#5+?J-@o}l^m z+tJ5&Zb9!7S?Qkhn?bwFqU{ zp2QQef<(_Tv0<|-tV!{s8dfcxs`X?U-s$MMnei7`syn4d)b(3vQnHXsO%yuU^PHmM zJrM_9z+29PB?53)63muq@Mdt4cOc8GUene?3OlW@Fl} z`pgVcue8x)ci;Ly@R_aqm#_hJ>ku?v43c+nJ7(>!Gl3f34taO9;4@9w>vD3wULU)W zT9|Szg%V|NVW*qxgYWQgFOU!EHlKH{M?_%%dH_PLx1$M9i~8-bRS*-Q(F8+=KOp&q zhX!9%nw^~m?*+#{PIi3nCqXWpCN?&GEL)!Spk20u;$mOS_sZO7+itati#vt-m{?)5 zxoS`<>o$&0%_Deg9J;4G>zgh#SqN^(LB~?yCdn`QGRV!X6f7jFN0!@yiua4-xD)cR zEx>4lbL&N_wq^;wb`&Rc~up{Fm9VsSWbL6OJ6T-m4ku}|% z>OJndh&5tMzCE4DlJDoPe<81a!s8(J%tDojo_Ov59sgVZ>23! z($iQ#4idKS=u$l(ujL_)q{jHXH$Bs}4Rk>MfRzu4;KL~#R>lU#i~`A`AeY+xD&a>9 zcKiA0J~W|lT8N#yU8OAR`V^Tv^NR%PD`XPz)W1W?UmNw6w;cj`iz(J4J|ee=?3OuQ zTscIachz22_$-eT(#^Qtqk)g*eaIOvCE_p|X>VeX;ONPjmVw#?W9`Hw`V5Th+SWJ+AxBJ@a);GkIN)M6jC?-TJ42KnuCA8)iTukLx7Dny zgem3T-hRhP)OtJ{PV@&gJ3g=?edJg1^;;FMCZ_p<)`-DS(vPUYGxoT#`pvAU&YUJ* z$hPcb+;x;fh{`AY!Bu#J0k1;UK&bvoV~523!uX{BG8sbBz+@CpSI!k}r21LmX%^I{ z61VFao-}F9Z~qXco6L|_XJVTx+v^E@2Axubu4R_)b7G(%#6b`h+Uaqv0pvyg9g7q9 z;mwt%en-|O0k=;N=ba{4svFXEMuUIi=+~Om$+(xRVAj8yWC?y`ew#F4!S-7$k>|cr z&NWI!{<{;(55s0wq_^3A!}3-#O4sko^7TmF)ne;9s?8P=$NH|3alhzT94F5^j8NoJ zx!})u0VNdlfZjrk3^-#a`5JR0u?W*~1#?g+?JA4yJkb0Py-`&|C1(Os< zR48Z8Zb}H=g3tEutA~-}w@o{3H(Mv7KqSrGVCu)L$%#v=5|Oa3md2wP{J_Q6@FDHj z!NfpZ`}Q}E(!nc1RUbL1uH_<_4g|J*xUaEvYb52|cZbG`X@cJ2)JIXjP3Q?yM~r2Mg9Ns^vbbl7R~ z9#)m)k9g`MHD;MyhN&@f=)1kDZ-b|u6qTJbPP7vx(sRLg3buHe7ha4fRoCtU%WEpS z$75`N*4`q0qrk3AhNi^Lhg(;Fu1U}#HMvn(?bcB<6(BkD@9HfsN<8LXr^)-(O=%B0 z-|+0@e(|FY$UVAkf7bIU)2QL6OF89Io8Y`!_x&bZ6qBfq$#&cpt(?$<`B(5hp~u9B zdt96jbJ-VQ+1TNv`L{qS9+?1v2b_TL-Dh`v!3b&goaaR&Hs7j6fd3{Wj$!DmQtWXO z0y{gzcVD$V@U_f{RqJ$#zsIQT8Q1^ZzT5G_e0~mdEkQ?qWh}V6o$y=L>dy8j=V;-nQyn zx*HyC=jOwVdI$y{s1oxU&MWrAkHCYXV@5fP+Xq!PtS%e{;aRvR9Z_*y|P4c-f4kP2F zlA!_<5-G1wlaOldI=G_H8Ok2kJ}q(t!9Ax{`Q6X|0g_MpM*Skjbs|H-FDj%jh=)`9 z4q1!0>bPP6$?o9#4QIUSnRFC|F>M2Hq?0K|jay!On&yJ2En|&GQf6 zAts~Y#2I#mR92Vi;9`VD2|}dPmlO_adDBMo}s$2NypLu6p|%@vlJ|RTZV7t zfmoC{y?RJRxZ91c2#D#a{|%f>X1>(b1T^DJnj`HV_}@^y=>KFUb08}4Ew0(Mxkx{a zWf^!2wmrDEI1S^s;nu$h*sW7E}`d`y#pWpRq#^9W`rY6@`!xfm)+)5PO4!m@Nqk(r%T+b}qL+68^ zH)GbBb31#A@D$^jRX}Fl4O}K&=T*HA!DfR4GlgC@BV%L0Lx_#ls)y4^(A-IGguAc% z;r)8@?=?nkjJ~%seKc?K_61c2h(SM#%@kww>kqGNZh zdc9{@^zDR{2}RC>X!i1(h`_VBRiSDJ97=ag%`m1EY$3 A%>V!Z delta 29814 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 diff --git a/icons/mob/screen_plasmafire.dmi b/icons/mob/screen_plasmafire.dmi index c76ff741e94df7faca96eb2404d56b75266be81c..81fae8e0d09f0ac4aad6b609be5b28c2bebba0ce 100644 GIT binary patch delta 27061 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

pDcJP*&Aq=s-t3DhJvf<03w|7r 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 YXhQ0jJbq?$00+C|WmKdqB*B6I57*Ob%m4rY diff --git a/icons/mob/screen_slimecore.dmi b/icons/mob/screen_slimecore.dmi index 63d67e6fbac8156d15f9ce1e1b0c58cc9b668314..f28d73a28541b6edb090d0e02e078571df5e854b 100644 GIT binary patch delta 25804 zcmZ5{Ra9NkvL&tucMBHW-Q7J9LXhC@1cJ*(4iMa(g9Zy8+#Q0uI|O%kXzqQl`=h_t zsIg0S)v7gX*6R}V#SnCr2Q=UvYxdQ5??GTs^m12->1bB}(4p=FAtfBbh!REbXY6`$ zc^G2M5wGs(8)dsl)A=K(1-nRh)1K%~Fx?2hFuH~5JnVu|5c5ncTs(X{CN{Q(T@a19 zB(}{>OX;6KjO%=7+nF!h78W}#e}0qei2Qbxmf30ZbbLJ(xqBVE%UlNp_U`a7M6NMI zMcw3*7&gYn-|SIRn_u*m38wvCr)$~pZ&|+V-La_jh%ybR!LX}5wW#vzlRhqxu^rxx zA1`lyL+ZJDN?ySt;QsPN@SB!&=bFv!=|7@X>)$(*w&@_sv^^_Z-4hW)U+FV-+_a*z ze>|cZFWs`4src-hx&xX|hTQ}$FVvmjOUJk)owkNFL>GpUMx_S}nxNYe5mvkUqJA>-EjcN8*u%)0>N#_jqJm8?KZWL!u z$+04L|1&bZ# zPF)~feEIjPb|fb;>P>s9?wRw4z}Cn2sP!~;)}FwY;c1OW=^Imk_ZJK5K3D~SdinP8tUNznNjc!!LYUEEDFqh3%WMvv=Th%~H;tGOlRREvXY*UEB! z5iY;@M*xY?!R*LEaA^%Ks=}xaIz}t*!AD92N&;ZMa-r(XZhf3$#JlDY9l4|OyDqO| zR9GS##y@cWT2#MpY9*deD)OJ9$|)HX<%hxSzwzp@{bdyu1e0WmOgf?IOvM8n&E?yx zw>**rFMLSJ?yW=~g(>sIDm5&3=TdQm+dF!|8o+)S5q-+oWMW!aGz6F9OS=crCqj7! ztN^O>&)k6d;-DhNk0Wz@lmcdxx7v+#tx{C>yi%u0j+|K9EO{=#Wm;h*9f?wY#HKYP zTF9alIW={Z3asF)`WcX$)@hP!s;@vR53BF?4?);r0NWe&CmQk@EY80lerMIln;ocbYBh8g3WY=Ku~3T1$G5JzgO)9C!xwW^ zCR}Yttsh0BvBK-$AW+Wn}4yuBkq*0c&%UOqG`VCPfS_MY%LTiHZI3wnSPm~ zhgkqx?*JBIoNjgYp2+e7PXQCgdLY$T;R7h@6ATLvc=DB3E8A5;6zJr!L|_Ui=gdj| zGLjm0iMNyBij5i-w>O(Y?Zs_Mt80Vpg1CqdYk^@+7e}<7vWAVGrh0ERqz?cVe|iQu z)ZZf3W4`-VpRm9CHCJ)7BX8qhWx9l7LXOTr>5O-D%{1~Q+hD$CXL!Tmf*M;>^2*ZH z`gaihuQ1DkG{Ai}jBU)F6wT;iaA$0<@9U{G8Qb^UkFa<~$G>u?%ffvCn)-=-1g9_R1vB0s`F+y?<J4T(K2Y@`koWuk!BN8n^IaA;K!k9g5J<*O6aEVg9a<{)Ep_$9Wez1)M zqY9TYWo4-#GAy_%B-1*lE|5LK>*G#;qzx|aLHFa~W9$_#`|*P}RTM9Zymg+8yw^IF zHNJJ3rq>w6dl3&xGdf#B5vPZp-SW=#Xid>0@2+z8I7xAu8_+;vsCtQ_P!q!Zr*mL+ ztmA+3b)qnGjC}j2o`pDhUu$@J#;Y!}sbBk5+i8TnM*(*AA`v)Hqa?6zj?hXQH!-D> zKTOkYJ103IH~`W3dhur;Zzkr?f~^^J((m_SZRPYktkDF$>pr0 z@L_U!G>}l_j)2CbC=QFtLlXgxl`Zx3lfp}0tZ^DI(&}o1v&H$hrl-^~5tUAV4eMW1 zn)8a>KaN%~BMVh_gTBzkA?ulQw5Ao-$-+i8XhCK>_*U3=Z{VB@wB&i3NfFk>jPuf= zOTH=uT0ll#3!n#V^V`JQ9OEvl6XcaNMA~Gj=avaF{{b%vAu^b~gRRRyKunDD6u5~U z_|3T`96mwUEZuPy<(~zfpc79oz6}?ae)=Ke)7bpYSU~LeQrGZ zWjTQ}2L)$=?<1s7cc2PW5=*nKdM|^4q^Cahp~|hc-kb5@@GXVZ+u`ks4|itm zoBN-X@hv>PV}|Q}t=I`}6!Snu$nlOqpnI9%AOMVBb4&60zSVYq+R%^Sa&f|EQ0cCU z)_^`-{UTR_$w29TAh{<5RRGgiuz9{A$|o<`suRZeQR)^HWoJq{L2++0q@Qk|Q!#Ks z{N>mqoJ%cJg1#$_ZmjA)T&C5A2qx;rX;Gxf#+Xe!`2{o#WxNy@M+$oqIKp3)$ie zw#``9vts|fC{SiCSkd&J5-61NA4UG8^u}q;%uWb?Ec zHRICHp@nEZ_V|)4Q)~rCJItb|hXzYN^8#SSBWpm_r0+8Yw_kpPaJdI}!?L5M(0~$y zzzL&?MBM;%|KhwnOqxkQXWW#uH320JHjXl~VnCwEI<&kpsOQ(i5}q7`%okg5cp>I* za{8|d0a{&i`8g+Ujc>^zrW(QQkACkJq-`K=683sM-I;SeqNSc!4qZxl$Uh{IvjB*L zuYWe9Y);m~v|2brbLkvSrFY49p7NB)r&X8Ct)*%ZL-&WIEm}d>+N^5R4m{5iSCXo% zYv@vgr60n7d}ve`cr?6g!R?oJs{d&mEl?4|j|GbY+k*>H1mzfL_b4t-z;%2;WQz7~ z#v8>Ayw7@=8$gpw@I!_~PHO8@F9L^uX0)`}l{ws4?eDG#rh2)itn~MN$hBIiCn#sP zCtXxdxCGG`T_ThJaS9wy5DtpN-Y$donS44TxtS-33t(!=3EVyeoT2$4;b_LbJ ziW^y8>4WJ6OSh?^f9Xwjjm)ff{AD3l6@uA7@V zM2PwmVCsxyE`M@Rg$qDB5Ggt#Cd8iT?9y*o((<|jDQqfFRFr0uX|DHr>GQ6#42 z64cNj%v7BcaG2st6hy`yl7P>=vAQi1s&soI%_rKa_!7tk@$BQR%)D1B8`!Ts=#C>s ztjXLAy05d+!id;?xOe8(eNGGWf@2C-7Te6{vX`H=d+e~^t)Gd!_>rCJ!iDfQ(P2M^WqY;kGJ$k0l}a9x6a1Zr>J%kwtx?*_t>izx}w@=D-D3_x_Vlr8la+Mp3MxO1>){3^DT>-g6p;6dt7+RWcO3KqDaF*(cZx%|bPMqyDTu0gMv#HqjJ1FN!} zp>{I=mQ5YP;Hhnz7V>dc^)+22p0HS2SNFBu1yfmO((EKo=_Bh6sp!pDsLTO6U_zqu zi&sW=`7LnqQ|U^Mh);8Xuz}Q^OH+xawTFR#0?-@j@*i?`aT+^dha={~3Bn9_e_-{u z|IoAAt(>aL?SRTe-)~&nQJ1eJ1qx!%(LEiJJOByXnX>NIA7{gl*~mOMHT$2;io?A9 z^>hD1_C0S$l!Q{TfU3|r`UCLe^8sg78*x?Ch%!O}ywy2*1nFcmuZ=@Yh6b&st?m?c z+{?3__ZOeTl?wUw{_yj+T&>=0cvc$(;jaYjC>dN%L^|BxxHWM|F7Bk;z?cYVo|%t2 z>`o-(FV94l4&S??wEE-_Ri`?O`&F5v>O{WoOtzyxJF)^y4`@|Y_9Fj!^@#U zi2}&$D+J>S7KF4s+*yaWy={}Da?*eRc&|{-9pb7I!h9Hj`w!IeA5f)>VE5Rf8i|rt z5tV=Gb@3ffS?&-yeTvw65gNGlCO!9=@p*ZNTR!OEs4e@EBem_Dc+y1+CrO=3ak?-3ydbje^D_|ITTa<^<=yMFNsd|eqIjDgM zc-jo?_taIFjyJd*qfY8Jt=FaR_$;osi*7V#hEY$bA26Jd`qo3tI->K zO~&0P_>OKk!l&pCz3L9hvq_^Bi+N=8{4$Mub$o7z|#(6NFaP%XNN6W2hj%U(4WUeSIIFI zmmkYV&}e9Wso*1<=vq)_T22u%qnMH45XNR)TZQ=yf>xfpVW%5WRfew!Q^#rRc112g=$HO*O%{dYb^uzh3Toru6bJHzvemY5k@R( z0PS+K@i|0G_M|*dOL^85YH`QX?!}Q;Y0yG4-SB(!j*Z$}hdaJckIP_)GcFgc-BEFh zdx|Wpm}p;$U^n=gXB1aU1_!X*Kq{J1nE3_$)%Ngi>(N?*xj04{%a7v#Crin$uL6^H zNR8da`=5^+aYG`kzYyo^IL{_x@+i) zW3SG`w}VVUBR<+;RGR`0gU@c*sFOX`LRk%@EVI=Ff69L;$7&;OSWF|od1l)_^?aUo z41?B-#yrFwvkgZt>^jD~l8;+xe1uB0@mK$W1k;Og*PJZyT+rxoja=00U*4L!3Ft+A z*h>iDPAriWit7(Anoy*~DCbxFrGCfORHzRr)@e>4Voy+|s*^^9c4H1Bi#UYX@d`~r zx6I})FDRngU6omNOE-nDkc{A8Sxb)7d~-AzlMXX#Aya>#V4){xnsj1>Wp11${v?lM zNHf@OI;wD1=XB|LP)a|<*Uh_DcYP*1^$>hC6e{6>E z&CpPennQFsY45rN0%?2Q7@Z@mO3Ik-Kpsd#-d9bu{%0~d%mTNo9B5Py0oY`=N5E!l zbfia5X}Oo5aJYq z(&w6QXo#F6xqZQyrk$$Yphsy17W-nE4&|sYp{Eowi^6y9?^T0Rysf9e0dI{}I zc1wii?!_O(N<+|yKx!iNvQCpR8dvg1yJo_Z5KkcyqikNIg&)FyH@Lo}t%<9r;aq)a1*NzpTYsz_1;Yka8i_pDU(+dAuHtdt z3fu{_brdC8Fy3zDC0g*cc)NJr(jps;Yc0Zv`QfXIZbMTUWe3 zP;$PuYd2h?Zl8$uLmiW#mp!fZxq__BC8k59Nzy%PB&m~S!FhW^boBX=lX#u=gpGI+ zNRhY}eg1mCqi67rl|fusp>s$vMC`YT$*6&4g*x6?UWn=AwSE8a( zN+8x-v+>$_KzLHjHo;Nvt~0n@E~9X+G>GU=!;rWrv`gClZY$U1-Pl^%U#vKh=z0E{ z=o!rQ4sqtq?-u3KfLN7%hh9;I9D&+LuYYG{w$bk}Q1T^FO7Do-qX!|;?;Gmqw|~lK zISt^(3bl%adB(S2HUe`#n$sB)ffI)+Umfp{_^<3~feHEo>k88RHJd<3h^Nv|p}mz6 zM4Mwyf6R>2)o>^W5H{zv>^KGc3ZN zmxE1Hch!mt?!S`D3V9%kU| z&TK#umc72P95GT2lexdP9dg}ImV<3`w)LQPWk6^(@;7XhhQf^DyO-#|3RkK%yM9J2 z2gk$IUZk8OzD!ssde=%d^?esfMS9mB5U~0gHPfBFs>87w-jLPhk zi(_m|b%C*_s|I%pV&XMAxTcoFl3axs07>FZGHoA=@s(1wSf;q4{*nC3e^qFd1Zh#d zyDU=vsXWT1B&J9cD%Zq5LeNu!5R;F(|BCoax8%(86_X#5Q2`5VXKIA0z;_s~VcnXa zi+xafQSJ37tRW-`ESiKSe(O#ze6yrT)!U2FI72=yhIU4D8Z1RD)2&^uT4(6r0Bf1; z?hMXYe24=1V#aXvpCiI%#VT4P7K}8zK~p7IsjuRKaHH~flCwUwmFyG6?x+LjFyVJ_ zA~;g@y`9~5aS9<1dRmzaG*|NZH^O|=$k2*W1f4wnviWqMgiQ?=Ok;2UuiIVwxvopxJt$;WN-1;HshTp~kg795A489ZZ6v z-}x-$0_Xp4s%z|QCZ-b4@b?N+Y9K2y4l%muAI!%LvH{y-hw9vt&R0ewCYId7+8tCYp%aUIX;Fj-k-L zQ(!IF4y~@A1IRMzIq~MFa^~(YU(Dr@aE8MczTsv3^~s}748xoxq%wDI=p)^3DI`%u zm$jjDUAl64~=C?%5%+@(M_j!5V?RD_sFU_iu?}(fVeJec+9` zIt~8Tr?T02&85&3c>Bz=$9!JzRwgWWHG3nkTdv*uW#B%g(03>e@XC^^@-r8|i8@4$V}VZ^=Q(cT^e`jY^RnsN#VnJs`e--lqRv^u4cI zZJHX$;I0+XWO{ikuy`v}6nqM?rK-Pc8i-(iODY?b_B64-&UMp!Q6n;&#KY0QrC&X1 z3Ha8pYl|69DqAg^AjnA`h3KAHsl>%$qb{FZ3XPBVcyr-(oKpHzJnsHW=DqUIBt?u` z+{m&hLzgOSw8W%75J2Lgg2>dOUVq|ptcfBK-0%9O=&@X*2qyLUmC`lh?Y<0O@uS!dl?>L~Vu_O;yYhb5P65!M6OkkX$D9*xyqmSF??}3}iX_hir}gD*?`; zMSu{U-?#+^X@vPeCTfuYeq{_qN~!YiuJ$NBE{KKzS8Eh}q$X4%@*ONc!Gy)$tdl%y zQLWp9uuWKOTm)d{MScp;(LM0Q58T&T(2CljD>b{-V}8pU=~lv{!nB%X+IxriYxA1t z)?k0FOu>PKwI#q&2+gDd*=KW~`UI<$c)1ytyBNxOx^&UDUtt}b)kufQnPcpwB`7aS zm%?_qPXg}iuk2T>0j9wALXrvR|rcW7bt)5s&F#V5&z8Y9$2 zCezggGe*n_9Pq(hUxLOhoUy-4VGIGhapb$vb+abhHprjA2C!Voho*-d&QMSkPzur# znh!6hyO#MsoGCyZs{+OLBC)ssj?*xDNxl6-a&*>>gcoWBcJX7>GyDT;b&DQrBe<>M z+r6?s13zli6MSx1$7jE`j12;}R&tVv(HK08P)Ewh1R?^k^{4t|bEhMS+p2c5j{NIW z!d7HA14?LM%+v_gU+OTpzl(CbD*Bzv*Gb~o4d_bl$(()1VhLqi;S zGVfc%E=4q}(NliW+C(29+BNv9m_8Y$;Sz@#j5cZ<np zf`K`8R*E>1X&7Rcw|1T&^xr?l^BGz8sN=2g=D+Rw#k+qsG&q)SF{hW`b4is&EB^z_ zThD`@y1yS#7f-H$T98+0`5xBC@b|DTY40Aj`>UtUeG{jFr%X3#`l%5-_Ue@_YD|SD z%iB~UYJ9O*!0Ow*CgJ{7QL>*7LR_M02QZk(hVX|^luF3aG7HY}ah4royFD;lZd~WD zl2ffOliF(X*++jl8){w>==;d!jDTx1kozRE++D2)yeaPY5Pe-a<>wVO-pBEBedbAd zTpw>#V~R<$oubFXv<%DkfZ}|VtQAXTwUp!7JUEYxXDtsr=KDSw5m^dN`a>}Qp&e^vY z{VCW@<+3%_PLMHm|99mWqu?jD`P&)$;WQlE^swfT+w(TYg7}$Hnm=D74{*E} z=R3#Z8?{mAK&u@Ydy=85jHQBAGW8L7Sv42tDf7yW6cX)qzLgCXV>K7MHVp@!0bcT$ z%v+nE7q|JH8Nhh|F)fp@WG!4Sl3|hU-1L4)$g%+zTY%ggzekuSFrSbsCI9t0u%eK3w+exNw2Ph$5-5#LVBj6+@4EnPPGKOq2C{?Fjvi^f;~)hLwYaJuS=)V2@~2pfXjr$aE?Kz?^}AxJ+NXDpgSL51-X274}U4yhmAJvL^TFT zVI6D$n@6x^sKPZg9ScB7!iR(z4G$TX@^_<@u7Xh0bCGe!w*TH|qB;_w$Hs)F55BIWv3CBX za=Xy;4YMF3+rsA2di^b8_BDDEF;Ov_@2LmwTgVM`QMnqQeQxr9jwW9#L^sf@#O&WO z9K*8P0QtN}Ns^N}(`5#>O;$G!wAASt+2uZj*WsAgjg_HuyTG^e-(rhCG6xYzp`y=| zsJgH2eix`P;y~+jROJc#2DkKK3(@&FaF1x2?d1XUTv_>)5CGD6XC)25`$9pv`@K5C z+wre|HWX}lhaon9W5`Sn>(fO}xU~llvx10N#K@6@)*kxUeqL2zEM%L0PgGP}eh3j5 zXzI;=JI4qVd)p+3TXjSCJw}HNntAj&jztRHWNw9Z0J_@~1E&-AbUuell+ifL$F(kj zMeQ@k{F|&)%-`yNbPWNUe+r^;91O{wV5Aky@p5A!1r*!wbM1z!I(v}mQvH?4V+q07 z9Szj^?s`+AoY<_8Ui&9{5Gh~wQmS^FM!D8VI24U60u-jJ2Ygb{^I{0}cPsI|J#B2RR>R9wB4 zKi;#U9Urmk?X#Snnl4$LIi|c!ogI_kzcvAC!pn-{Q;(lnipMF&o5dw$-wR;2QP7E9 zxWqGS{Fc>$TFPF2L!H(AuMTcRPW+FYh*4kEFgYojfC$YK^&To&w8g5ie=0-*v@C+7?mD?lI3=2eT>`D`5 z)N7jWq$YL~sc^7FGRBKo!+8O4$K&wa#-|}5qT6VS3tOMTbF$=`0zHm_65K7mh-MpH zJM7IgUeIzg6?HY_pZv3S&H`Y9HBR5%M9>Y7@P~$f=Vd(fqZkyZ3X=nJh@z&K^fJzP zFs+J^G(A(em@~wUCE!Y<{Q>Zexz3{h%f$e@t4zW~CbQEzE=y#5Em!@6C8Kz-}-xcR|$$IOH9Vbe7*-=9qARB8f7fZ47r zr`L)0hZ5ms`==^if(tO5c}e^&tHnzG{xZ?M(5Wx0V)kq^TAn9pOrI(~Wie z)-wDsR&*+*7w?&T)5sHs&zM&O zM__lM6V;eNNj6v;oxaF4dP8+l9lC0EU9QS@(#d=xu1SrAR3Z6?h@*FAN`R)v`{>>) zTc3P?xbCh;_ARe%b#1<5)%TSZ7JXo4Wko#A-4PZt-g8?gCZ)NXKW44TM3#ZG1D^Eb zu8(UeKh-t{G!sI!h|8(rGr#lEjI4dE7ZO2P>hbTUwR-g6A)tfgi29ImK*2=mm6+0z zjr@|@xhAgHiGs7Gl?KSGpq#w^e($+;tX~b*M<9)s%w_*n4{Pq*eD>BjPCa(O`ZmaE z`h;9|gsN)C5tT@S>>1<*SzPv!3*%nNa1Q$MlSu0c;NJA278im*Pya7nC&_KMy8c$O zW{EVtRKr$<8Ski=9hvg)y2YkgJ^3&jbxYuW)<2sucE38sM7EC@^Ut0v%YcPzMVVC1ZWvB`i%44vb01my7G5=YOk{&<6 zuWqu*uwjb|Y~%)z7VzjIf#>8Y=}F7CwRjztOPjS-K@A>>7E1li`Uka;vq`nKi8Rzl za)TSXt&Zn?jO*YZk*l6LB#l=QhVK;8XZ6(+LV|8uKMR zt@v%^-O{UuTa5q2}$>=6TZt>Nsjd}vhMNoG$ESSIUogcYld*r}xZ19&1 zx+dvzHFkrk7BeV%UN!|i3oDn!b$*=$KWM9Df*s;h+_h{2C{KeWhFO6OBFH}(~{L)o*;0^yS_FtB;o0YvziR+S8%+rlgDy_%cok$0k8z*#R##>W@(@s`F z+!2P{2}!*{g*PAu`~kj)OzU$=G*4!|^Zv-p?%Gf5Vlv3)qafTkR;ZxHX!C*#Tf9h* z%ul~O9~ENm)ht(f5$8#vdQ>rUK7Gl!>8U`KIV4!*&(Zju?_63J{jUU;ZwihyzXBzv zl~&TWHhLx>iHc@EA{bh(+~sI(zO5tbmFR84q*E;sAvzljKo67$9UD5PJm0^DMe8l* zx){@Cq1w=&!;uAca*!kXQNVp1Q*T@s@6b%HD$Q0*@*~z|A@7%8fV2zACb+wy#+CE*mV_2 zYm1uofMtiUrF9OtJD=!P0}=NexjSJva+Qc5s)-1-FBBpQv35_`kSVkMf& zik=K!pL|lzf9nVGnNwmh3!n!A6*KcaDcZonM5TpEAoaCS!5c3NhqMGgRb~lx_~3miVkv*3l1X^7X4;umgZ;!vify{|Vv z7U!CKzk?Rq&@b)gHaxTS2P(NIRWqB~%b*BoV6&Kxe<1jr?v1lIG*0N^k*)2=NA~* znytu+YPA^4wUyL2tK;9)C#1^WoY%D{YN(&%=xj~r-^-gxsKSn^Pr;O`-!842VjtiO zJa#X*I()8D*3>-?)v|@5&l7~Ud%K-2v3;r2r0yAY=aF-8B~igzwbRQsQhC9$dhyb2 z($vW^2*jE{vN++RNzf9ID6NQz4E*SI#k^ao53-P{-oZM*q%K(;! zf8ga3h?68okv1*O>b}s&f(BoyiX$D|qd}kLdUhWijk_KL|C- zbO;Xs&4H2x@bkYhem1cgajbNa&3o(p{1X!b#) zwOQIq9a(s66u&lbaySuwc(6GUYw8%;@@gj(< z(BeozeFZddw2w;W&mqId&%zW<*Hdsw?6Py{nBC%jO(9-DJS<{@W(G$sI&vJLc)5%` zg2o;H2KV)(TXh8Q5|?pnH>i+i^DB^^s_X1!ALTm+daRr5)>V=pD=Uw~<=X$sH=!~* zG(Xgc7gJXEw>rN_=W&ObE;`HN?dVbyl{IU2wV~DQ*9$sqNV?q;EemVc=F7DBsm8Fjq)Al@ zVX+NeF@xUv2Wi#ZEDdn=)27EQi~}X6rN>t;!q20{>(>>w zFI~R#h|Jl##@Q*`p)vh~$G#!tqRlDpZOc0zn@DLa@63G|sUUQXZ$Tyxz1CpN<5{Ay zOyNNTjq_Z%!szdh3FCj{_Nx4-BV?4)6!$z{2YC*^2k(3V^5jeAGPwR6IeuBi;4)$*oeiMhR5VJU;A znyxEG3}SIs3GQu+nhno*-_d|6;cibdzEQIoG2?ts{pTI)Uwmp83ARWq)?3tOS+i=% zK&<4(0p_u%s_$=Uhe=wcpYd0a_4P#PqTHDJ2>sg0QuHt41k}|erg$(+$V^6$Jd)65 za%|U%(2TZ}!0j{JeX1q3ii%|O%x_{1CT-)iUF2dLGPLhd3G5Wapf(ibprK(ZJ`R9X z!%C|v&?}Km-T`E4TUT9PCyP9ZXS&J{STO&;@Eek=|Hcdmz_KWAJtnl0*ed!OSodLv z#D=nsujg&e2Mx8;@WTrh8*qxt_qP0XvMl&lRy)XEa{^3H6eZ%=?~jQ_0G35LyZpRz zebhh=-e@29OMBSc<>YUzm+ z4^@b{pQEtLIJk`={5NCmh82ul8cfB>?8v@@&z}50<<nZfPPd{3EE! z6%GBR^o=g~W6B@;UPf@mfIG%|Pr!|DX8IR-^Xw#8boPx3(N$JA7_UcvVr94{O`_rN zNc!1wXDtLw4mHk;#JaW)K5r*b^mykI<<%>e4=29!z?SGO%P*D--|YKod`p|7R0D>g ze~5Pd{)L!UkYAojyZusUa)|1!FNtFR+Nh=XdTaPZlR7k5vA;9%T4HY|QoX8s-+V7GbRv-BH_#*07GyDYbqt z81;1qSiIV9`xzNUn;xY>9=GM{=O;R3XIZqEp;^{nD$jyNm2T$M6Y97l>dH4yI_kUx z>AB3)4iT4@pvt3&lf^LqtMcUEve3u<-aZSmS^tA`Wgd_`q_=rJ_g$y3LLe(bO{cuY zA;!^;s>E!a+6ci|nTtnG`S!MUcMfU6`0RTCU>(Nv#r_H5rC}Gok;(l8g%-`r{}N5i z=X>r3j(y(n#@L=4YTfBK+zE+U>whuik9-)XELtVZg)5>`_y(YW3oqOFbJgEBuKeNo zq5@A%2&Q{iR=&|)9_+(2R{8{FpsxmE#t(e(#Khuq`dWG{!mH*v+noYURXDiEJ&ZU9 zG;UHi1O|qlJ<+OC^;Nd+2!eV#!xc;_%Mm2}+l^S!E(i`$O+J`OLuW12V&C*;2u%scgu zwQ*74e@)Q~soc7DYMcte+FRi`CRk9 zZeF>Yz8wipMW&a;`0gze)|;LDW9%-&1`#o>{8x{WT}x`6es&e3%4`0BIe;?C1Pw>x zig;8>ZBJZr?D)=eo~+?=BBdiB9tGM1EyhDMY%aZu=+D`RL6(YG%tgAZ2GiFm4~JUc z6HDZO*0pob+te61`?QQ8^{7~pfjxHRgr^RtRQJ{IOco<%;{h^};r})(0aQwEi;=CA z3gsGusQlVPl;>m44OTaP6d)L;5EIkO3=IL&8MAQQZwRoxoj>%*+dK8hIcy67cX(TB zI!3A7mFP~pq?-FzFNkM7?jow${1TFBnud8gEVu!}ARz;x?x*M;%3%K#o9XU=N{_yXpd~ z8wh{za%6P0I(2;-xwZARxgp0@-nU71AO2W?W4uAsg&-v}bpS*7^kqc5vcl(6U>+t(yuaaHrK zmFsJBH8tV+J6gP;Vbg0}#IF`4{G8QJ?=$0Na-K}iOGvcN;3Tj zEpcy~&o}GUGj1aC>T^w?aB`=eqSmg~r^>k2tBG>q+f_#ZHvTbRGV7)qcA{7ow_oz}t-cySwLjHWZqJGci+#Mi#@i3pu>4Sr2~&X0T`Ah5 zLf#&A20Zz#)Csne^AI6ZHl)f75lf<6JCky-6@MV9@Z}T|B6%sy?zPXP;MdvubMqp6 z-dA~ki?NCgZxGlrDBOfNj!?>AJrkXmNR_0TuNx2eNFq5r|FvH^0@Ch3BXUU79L98y zox)a-iV1MCyjK0Vo$hZuS{)?(l04m*{eq~c5bG1cH7xVTvBY^>&QUJcb0Z?O+K=`E z-D_Xm#p~r`$fWonJ^QplO^SCx0A{>JUBCl4$8TbQ{UdSTWBXNzT3>17MYQq-P2$p_{0K4Z7Bx)hph|w z2VR{QVgPerL`FT-yJ>fEO-a4M!e%e;?E_d_MF~clI`8%#khX4JUg@^?oQiGm%S$LP zv|eA5ma6vRuRpX@{@J@{4%n$a{VFJ+2g;uuti*=5n}Va##V_(zVU45lW*ofe!>bJp zZW0dpc?T!eKMD_zQ1^d$lVv>?sJacenKvrJg<&|&V07h3*f z2t^cp%6iH-C9LP^D~7+OT{z>xO)}n=Gk8$9=U9L%n(XvgWNicrpEAsBVSYJ{JlV%a%8jk`vNSz z@^2U1Yo?Dy;Z7@l4q>P>{M23X+w4k&}8(~s>vnOVVP$u zUeJUVT^vIoq>sRvqdZ7xuxq^|@$;LC@q)s;YqH(yS%4=E%lskdnHM`ey(ZwE2r5^D zusq-@=OE!z3VY3f97PEb+yTWT*G??NO4?T#4NgGV6{bKEhK)j`CUmPnEL8kG zS33A(PQH5gZ#NTFL0Aotx>i<5b!~;2WLP{tfDvfe4ckIoFHsn0^L>t7fEXLbDO5Jf zlu8W;I5;uwZP9kp9TZ>AobM_@PaWsx?7XzL9oy6m-_I;hO~!!{;l7;7>b88+W-=++ z|4SyQ(quH=XLRCudi71;d)+SrZ*`j;t)a_u_RAw^(_OQguXm_55N^P4*rYQJAiR>? z&I;ejiS2}owWfP*B5&Zmhg?bEa*$vw9J;|(Os^0BR7{kBCd>L{cqqGQi_mo+J1_oqY9I98It`WC;==xVt+E65N6Z5AF_2a0?Ct!GbIr z+#zTnI0U!g4#C~s7iZbad(U_Ofp325GjqD8ySlojy6Tz7SOWI5e$g=4Wt7{xXWJmB z3GeKYC31`eI?jzs-(ZqQYyABI;DApnSZJAq^8V`VD_bp!&(r;lcgvcqb20uiPK=s& z2tSisn=61=iusexw|;c$+|Q-ovKVgyWo;m@j<1D+%%~yojy4{MYk|TeuUcnAkxcZeX5;8~i#h5Q)%pdgPoQ>Ida9yj>XEMbdh zkUra!nh}q>tIsr=3%h|I4Y7ay^_EAax?;s?vc5XUEliEI{%7((+uL0dD4e#mOmkdg zSOeZX-gbK*{AFHxQGbEw8U)x+GZHGUW9Ec9NTd!2j^QQ1KVt~AP9qoTJ}y<eUIdZ-TLo8Q|ONJt`63gn2{i+C){(=uE(m$791ztQpsk9NBAXQDq z>CWTx$vhw>dWZU<;lDAFsJ@=735D70>JbDcVW2ucDTWVb7P5OWV*J^-+QVOxXqrc0 z>X3|ISXM<~6K`QBA_F>ygmcoY%sZOtmE?H%Ry_d? zWkR-vr-K_(Pl%QN-}?;Oc0_*w}%_Lkbok4}v|+awCd z%Mj`=k>h{MS3?l6ZPDYub5xr4r_qv7fqRM|=nvy}jq2MU$biZZG9?@#aX#@23M7tR z#gIxnqXi+8xn>#gM^#Gk&u%N~T&AL$lyHAf_|`}cum_04X3;My7%nYCiADr<_b5tOa)l+3h#F!liqt!EZE$dNW8|2ATNLoFuL)!^D&e+dK=eHx!PkT%4ZUl{2E2K3UO8-3PV&3?N&HZHVjY?4~>PHtPdO$eqOsUE;Eu{e%kha?I{F_)Fqq0kKd`QU&nL6Z15! zJ!>y2x!stB{$sH~KybA$3=_|4I4s6~hXR1TlEhhmuhwz z)5e}jb6^zwvOb@WTyrv<&87pj}i{sa88ZMKDEM(xtQdF->p}{?a?GD zup3INE>%|D&%2Ns@^n4zejGeq*{phWljSfyZFp=xGNyeZfu4NFUiHsB4{!M-a$xv< zKinW~Ogwf%DAkWsaeYNh@+d%IyANQ#=r2CFi|e~<=gnG@D$fYOS<0lqF)qRaOM(Aw z8Ugln=#oU*tDDiq`e|?lk0A0hSJOBWp@gXTy`>-Hfqu3sb~``PQI9gMUTN zMkQ6j-uM_wK2lO|XG++B5|SYNsIBz@j22CJKBC)tWe1CXUUBg`6-+T%1%$)?)u_mT zsV7K(`*01hNsUWtP(!pi?;c1)oc~IMwciN&-`acF`#IwEn25{XioOlbeio;T-V?F8 zzkF*$RDbOIB$hBpZvfxT>P_44c<6q&Yroeay;ro>T6^~xpVczZF2c`MccPf$e24xH zM2*f`OWA?N_$yuR_OYf^6L_=qTTIud`XxvE=pXxDe1Z1u4)a1igzt=%_fYI^Cl zfLjUgO3{{-SrJw3{SN=5;H}^J9fJ|S5RnGzM^z^xN#<`U4+G*AIA0v3eCR8J_^L4V zK@Re$qWdRru=p^dM@ihz}#J@9l*$q3J@ED|#; z^#5XjnzvDJfH;_ZMVIQ0zEYfW&@+g_RPBg1F})PEQi?FR_?yzY6&WWs2%FUC=mFuA zCz#(R%^bnn^*;TEZKJAMW#G)keeanK^5FINLdwSd=Ii(a18=#JMmg*k`newin!e(s zHH+;+tTgR>gOPPHH^7s=l*x%M7MKxmr9x>&)Nb*S_47Tz!mwpg-F%bsYIcSjHCNOs zMJq5~J)y)5`0&1%EFa239?PIB71EX1^Su$NS*PIE!XZQsP!aiU!{bBZ_a0FK&T;bB zg2e}d8qr^D)4?czoQLmF$K&kxouBG#bJ;Ci;OuZUeeCa+3vhYCJVi%Qm|?JpO^I0< z7_`E&D6>Z{`lqC$vdA%$ncd*KSSI!>vqkA|pYmH1Ern#pbL=glR4NmSL=l?b9P{TJ zLvSRx5B`-L7Y0XvkiV=e&c&Gv_W-le0l*L45$Sy%@Cy|W>d(UWOZuqQgkm_atrF$w z_w$opL=ibe1FF%}%D=8y^asHxp9+d+)OUR?_c)o(-{hR$ zsxuyg9oO=QL#~hC5$46p1XsY!$}hOMbsmGKu^6I0>W)9#=CUI=ygq};zgbe74^!qP zeQp2n;Co@{XezSz@!8M<#w5&@GZQaKK;o7qpa9kp2Gn&!{xcRWOErrpki7_;`F;Zn zLC#KSdSPMk=SDxDee+}UfH+D}3DxQcDOD#OEm48#s=fU_7AvVB#8Gs&5FuEIFquX_ z;+tv1Or7nUo3|ko`}_OSEKv;-#Gz>Lv>;XFH+usgb)4Q!z91I_?B?)Aff}6l1Vdb8 z&D31LeZ=S!ZRq9m2?Yg$d!1m;q$yG%yFQHU99ctaDd>vJG%X7kc{qMIiQjlT|BBNJ zmSlhsnN!(%VeUee^vEupO<*d4{=Sw48sqqC%i_G+X2PnwHW`tlNA}GgqsNkplw5=B z&W?-m;@n_*5S@MVFj`6CT9ok7??^YH0Ng;J!h3kqez7y&DW~l72J?$r;;Spk3v^^APMvYJEP8sNWe67=Ts~+nLVS@E#lPCWjr9lm53w$O z@~{56^=u`eb&25rVjZ(4O`$rgUhx{?F$w+)^uz31*QMnCw*ozfF@6_Xd&`_Wpyp$+ zwMH+srE|@|UoaUcGD^JuzQ%2BgO+K>!z;u284VSMxE1x05 zoSTG!T$!*j(Seb5BYc)bb1~SSr<#!$OvZ1K7R}A|R_Ez}x!5?SgUl4hkOe{TLU7n^jk4w38*Voh1++BO@dXjE?s)hQ~;O5ox7Hf z=cTphh5tU-thKq+@sj3*xP=NVA_5US8gOC)*{f;Iyf-sBW+IgQf(FlU|l#-MaAkoGytHKUNZ{_Fuy+5M{g)aX*T-1f2Z5U7?Pj40@Lc4&qLZUy%|yEWR6aq=Nl{IaU57gq{!#~^WW z1@UZsQ%Cl@+UEk~0F#^YeH8Y9EAW7C%w~J$U%c0&JUIO#MlbPEjKG7vOk2Icfgf9V z4v_6|=1X;d!2)g}nW*5^?rw6~ikRwmCV#pnK}Aq)-H)mvpxr0|lC3R5an}hRJ^g3; zx}ampXpOrzJzah;7WKGnnM4YA%rR6!r%?|5+jqI|b(!e)b*s##m*WRw7DbR|Svi37 zde#d)y|myjZ&82Wuu}EY$NKhepPM}kYBvDyIO==gTK)wvw>r~B?%%1dISoc{YezE>`YNceFC}ulPbqdc85@_SK)2YE zCI%pc28r=Zf%GVpf7}9@hoY&ijT(V(KnVp33G!Y8vXkRemr$l zANNLkjsH#*&Q8>R+lG-T5WylT&6%^^x5oTq|G9BRseQdvKfeVB+4djSsK*ciDovFo zTl_F`(*<#x@P<9q9@cMe;t@HiYxjf&mV|u=v4>zHZ{|JlqS}kDhfDG=5jM{T#1BoPFV;?@d{*nn)(}o#*C`hz#E%yD#}WZdx%O z$@v09Dsr?qb#`ta0h83@bLQCq6CvD)%q%^%RMi}g@jNQ=$lV#P+TuTlm$%&QU&4;W z>Vrk$4P%5#(cls`zVyd?WAG+84#1A`QvCj3|Psix?vw~4tO652W? zKgsM?Xp0!X>n2Q{_Wsu2hSA$USw4hA1MUL?Ij>SzQALByL;~Jv&$7?Lh!q)=vk+6d zUq+qV;T$DW<3_Zq%~blC1J%TPOGY-pCGy435rP^PpSpK!Kw;k#s3>}trj6|3h3YJe z;v033H9ZCN0jbJTH|4|Mw5>XQ9_$;cywpXa^Vl2KeArMZ{X(WuRNZFaKH^esJ%HC& zDjfjI_(SuUhtjg=-NS&QNe}5tA@hS-W1O#CG}+mm^kgh3RwU$WX{hv8Pvi1mo=3`_ z{kkTPeq~geKfAjb^Zd0L&pFqo3gW1~T`y5k%pi2ZNXZCFxa0&AKzQ_ofBzu0GGL6U zy2|f_z!~=6)MQB}ti&5*--#yy7TZL{#P_`{4Ql~*E-n3(^G1ePD(`2_yZVT$st^26 zZHRJ=2UNfsz0qKL+^$7ct_@rkOX=~&0Ev>yamJAK^;Nkh^T+VJ^$KA%1(*GP-}{#q zwj?%P#2nuCVQc^r%ZDE|P0wSowfr3!5jnO5?7ZTj(Tjp!vj(ZyvmM|P%V-?M@qzhN z#%H4wF+|=ip z*wR6(ZS>X$zhem}^{4znT zV=8ucLDB2~vOjFc>Fz)@t8Oz%y$#gq9W)R}qND)(j_WP?(!Bb8^2IB>^43uGHwW?Z zEKQevv8HAhBiW)d4g!UO{MKMOBI9WjKZFtR+9-GP!ps!A9Z)x;C?WvCR^gfl-<)>g z-EettU>q4Abx--d_Sf7!E~uk&rnxcdSaF+5#o`R+bp+mm#&A*NMSoO_eUuI=DWjMG@9>Bo2Yta_&nkut%nWd7KbHNqXgxj zXcSk89TVGSs>>r9SfbJDZ%hmnCmXUF&pTK@6|R*N!|C-pwmeq*;%=k^pg}zYc zQSoETU~CKlXk29{m4xU=%zb(2jy;G^U$3=}*;Nl=tav<`B&V-|qo^?znr+LJbTjp! zz~&3Mic9z)9re$hYtLc(3Ws=@g)S%aJNS?tS}fr!-JetrvxJz4yeo5DMho>2F~bj;gZ<(q<&TTDS| zD=-xFl*ndU@(vgKy;E6uLUtfC*LlLrkR2zv;U%cQ*kTpT=YRE*DWpjm5-VEOQqHmO z=sD?~GD}V-1dvsUAgo|83HbZzhbP*&;Bh))bFbNV$X5{jEVbKCqWV#T@;fphFi}Fn%-A z)h6TL@EmVU3A=HWEau04tNP7Zc4JSJX7QRt_R}jBt<4c#QXZ$N)unL9VlqciGtAKK zX}%*Rt(wV#e&hJ^AOXn!FY7&f;t8i_9!s=_Kn(xAg5P7|4YuJ?)_OizkuJ6Yl$ zNcYW0b@zeW@F?g(&3K?YUs@%>$i=TZ3w4ZpUwoXoC1&T6m)cz? zIsu9S(pOm@02eVo(TKV>C9=Nm6S&2j(Sh7@R7ScF{_ougVMa#4T|j@@LOb@O+rvhT zU~r`>g;3;~Zrt+j{h7;Jwdn%jM^J4Xi&!wptbnHW>dID__#7PM%yq619G6>}dJPq2 zm}<8{38kIeQR7R-rp|2qvorFodGDPn>3GpstE1>GP+ddAnBemQf?=Ro#sOB`a2CSH z&#r^#+k?g;GIlxuQXxK1HO7$U9oErb*TG2Y5{-ce1DTNJYBlS= zC#)e-b%Qa9f1U^nhVJuful7BCAxm84&muv@j0xcq@xHqxhH-+dlo-uP1y>kNz0pb+ zK9k4_g(ua%S58cm4od?EZ$lHe+h`JQ>A#%S#33@pg|!1uLIqdcrsTsJp^xTJc<<|I z*cDoN-A7u+&*>W85kwMEIPckXbhT)MJrpiEif`WllLF%P1$IrUYhQSkj5T0;w;QiGa9Q#F(Wa7G` zP*#O8NdXwGHW4X6p95bJxcQTs;!)Fa2aYPSM{yG*TUprGABfJz{PUOj3{irR7C91X zziBI@>Qka*-`{tTV-;_p?3?HQ`!%PzzM0R^iCFnc6V>gXMdytq8T$~FKWzWL$Bp>W zHetdiOPgL4F*x;fSyN$QJ`7@|r|X?K+e3zWT?D8JI3dv*+JK(T$fnnbCF|U4`!YV3 z-lRLcpA#z!eQMlvhdm4agnQ##WKmUa&=sQ`VCw$89y}C#vIS*dGp;`IhE*nMr!m|; zif(rh$W03$Kwb!X8#nk&85EX61}zxaUA6AT4)fvzB#vzL5@8CD52V#PqtC89)Kc-h zQUJ2{+IJo{;1B;vA(4~i>4h*Nb1%t3ZI`|8XjKgoKT$FXWBXj|&v7?dN+n01sO2aQ z`S_0qxFyfuoolNc#dQj)cAFTJt+)tP*J&U%u5}K-3NTaT*KrO65p|;w`*8;)3At4y zgYH9Fpsmw4-HyEvxr3OEE0G-b*~>8OCcuzzsj3>%v?sgxhJ}I7M4mS@G@5}abBkXp zH#eMl&@wY*!|kc6rsUo))fHDZj4Aef4EtxeH0?)wjF3}kZ$n5~@#9_==I756T_UH>NTL%iyUFcP^Pc`V83Z@y9YkT{+nzXsQ&R@*`Zv(n~?mLHVWm2+-THf=S3-q zZBLiv10v#+Jk1w$Z{pi#F<4xCmkLIYX|CJPyR{)VItS09upHTkjplp@`8>S04>tEJ zjw5F(6ZO`ZT_LiBQ8(XZx`p-TPyiP0v7=H7>c!Qt>oW~#z_SSL8o34c%D0LU8Lstz z14xUshjL>TZZ!GkhW@JMUX!~>aKB8mN7y-8o7qco><&M5AWQQv8N zUF*P3YbFq@eb@ONYJ<+ir6I~;4H9)0`>(VjMi7MQGxxxVw?;iIE+HcR6L1*-QXLZk zISAM;R+2|-j&R{KlhD`pvOoNUjqKL{CDwgq(xOpYJKIzmwg?ME`|)N9=Bcv51mkhA z8R|yC2sn68=TEwH_NTB23y&^w`x~GB>}GzY;Oo3)`e?YPkibJz0cyOlE?E^)0JJ9N zPSdu*Xy4=SI|7gjrcfO!f7t2`6c9C-&@QkL$#Kg!L z`3Pb0CJu#^qQpru0mD@V#f%2$s-Ddc_AwUCojfa_?4JmJl7ZJ+K$SGFJkQ1Atut>3E z&RGjzZBz?q5LAtu|1&Dw(U2C@5fFM2-Or-&xfs*y2~zMC9k}vgtAS`}XlSL(Ncp*! z4=szKFs%w4nnZNB*1xPv|C+$zyQA+pZwM*rYxn4l%}jI@tW3=w>;+v@yV>9B&n3m| zy%rbCvoJS{5>fE%vpqyrGd0b#4+UJcb1(}d4e#1JgnEa8M@Q>dT)e}$E z`IV->7Hj^i`&jKOi)1!C1)6HUyQ{<&n@q*RkwM6naXoBDv=@~SC|6?*;jq+tbc7`9 zAOG`|8qc)avfz4PHaYcAvGh8#8MPpi)Z|b$DVf}S$-nj{f2}FUHrG>__N*{Ugk(`( z#*S|R8+YLF{7=f60v7&!MCcP=*k=AKfHijBw{O&(wxvAXa}}FkOG4L4s{~(QAyjuk ze|Bz`H0#M~@$=8?JiqCWwzN_zd?hJc)G_xck^(i9aaLBxDm-%9VzSPznGuAij;^eF zXSD(Qt%}28xoMR%oP(dy!HP|HJThNQKSb(ZT7t`ZW+$Y7zaB`OxhlX%S0~hu7Fl?< zW8AJsS={AKu;nm$d)#3yY3Q5lFvc~fFGjVS$n>i(0HMcM?&x<07F=U{kdTMs6S;u1 zDU08o6NE=JD5@8>wnQLAc3jE$yJ>b(DXEzkAnyKqp{CMYq)mf{M z?^8dy@AtbmU)#W}{-hEguhL^8N7)A16cIAE_pJ$LiGHwLk%^`K1-^J@Tz`Jt`>G1g zgHmC8qjRae9@BD~>4=;cY>klIS^Mh2J?W}T;UfE;Nx5=%_IB!GE&C0B6q)yU%DY+M z2L9aD9Qq|CDq@^o@lKp#6oI`<{cw6lvaLF9qu%VThv@aA;*KDSe1Fam%oZB?Cp~r>3+H0==I5)Z5P9!vYRI z)U!WZ(}$VpWpl1y{stVJ{lE8{eX6`k+b`fCHBNd-N^8y75JvvrlfhS2z|z+)lgE)z ztvONH)H^n!*C<%x)t0^5Y)9VNB8CP^u00KU7X$9L`SwPMh!nge&O24~IxYY8T6=_! zF8i$j1ie=8T3vtM!Sb*8$L_~F{Blf>p&jppP(x|H6<&)J_a{U{FlUzATYNF|PHkqs zDkHm3Sav4$B#1gXwV(2B4&rA`qJL)sWWc=L=#}JV0?F&UWT(jMa=slsqx{RGG2;QQ zr6YtN*gDPHeY#NI^YKZ0-jed!FHKo?lG<qGx32W8cbCiW!6DE62s`-z~1asf*X zqn#oLMvnzNiVwFt!IfYUc@Rm|&-MA&ekC_K|EB^ps>Zihe=zRC%Qq_WJ_pp@3L{um z7W12UzP=TI_?Mu|Vbyt1ZRz6ed7DnVloZgse|&7uZHoE7im=pqT*3mLLdI90aS((G zZ~~xzYyaZn_0Ekeu=9hOyR`2Q@&^O!C;xZ0uT6D)4Y>9Z%p=gmd|L_}9}AeWcW=ZW z$Sx~S*#b;h|6t6^KVmUAz;n}HSA^bcCJ;v6YsRmR=}!F;4L^ZGc80GZ%YHp8UX70W z+!^R!K+P}dxFvoPV4{mWDF^qTu=sUMg*rhA8j2!rplSzHky8kuTYHWLSUHbuowi1& z>8zIgPk+G`o@e}@R@zK9m{dhO@Qb1_yf$a%hLSx!$0@Qj7Ew@VNU)Pn2TdaGQ>k0| zMp~K*)JPl-xJ+btZ47t7c_o^!ZM(Y?kk;2Xn5N*D{Exeu?Foo0oxf)1_^C9q4-z|Y!9z&mt@ma}%|MfW%N_I@^QDxg_Q}$C*NiWiG*nQ+KXA11Gqmk_& zyK={+?i8Qo`k{y*1+qKInbHH2QTa_GP=CS?ve>DnKa_`a6w|rf3UI;JOCm9v#-;$=^{s;3s)3^Wt delta 27881 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 Date: Sat, 7 Oct 2017 09:03:14 +0800 Subject: [PATCH 135/144] Boolean memes No more zeroes or ones, only TRUE and FALSE. Well, for the toy stuff anyways. The rest of the guns will have a boolean fixing thing later. --- code/citadel/cit_guns.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index 3dea7ce6e0..7127371830 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -618,11 +618,11 @@ ammo_type = list(/obj/item/ammo_casing/energy/laser/magtag) icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "toyburst" - clumsy_check = 0 - needs_permit = 0 + clumsy_check = FALSE + needs_permit = FALSE fire_delay = 40 weapon_weight = WEAPON_HEAVY - selfcharge = 1 + selfcharge = TRUE charge_delay = 2 recoil = 2 cell_type = /obj/item/stock_parts/cell/toymagburst @@ -675,9 +675,9 @@ icon_state = "foamsp" w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/toy/pistol - can_suppress = 0 + can_suppress = FALSE fire_sound = 'sound/weapons/gunshot_silenced.ogg' - suppressed = 1 + suppressed = TRUE burst_size = 1 fire_delay = 0 actions_types = list() @@ -906,7 +906,7 @@ obj/item/projectile/bullet/c10mm/soporific icon_state = "raygun" desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems." ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag) - selfcharge = 1 + selfcharge = TRUE /datum/design/toyray name = "RayTag Gun" From 005cc54bfa83056120a09b9240a1a65847fa9492 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Thu, 5 Oct 2017 18:13:36 -0700 Subject: [PATCH 136/144] Update rdconsole.dm --- code/modules/research/rdconsole.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index ee2cba39fd..f7ed4eb75f 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -324,7 +324,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any. for(var/material in linked_destroy.loaded_item.materials) - linked_materials.insert_amount(min((linked_materials.max_amount - linked_materials.total_amount), (linked_destroy.loaded_item.materials[material]*(linked_destroy.decon_mod/10))), material) + linked_materials.insert_amount(min((linked_materials.max_amount - linked_materials.total_amount), (max(linked_destroy.loaded_item.materials[material]*(linked_destroy.decon_mod/10), linked_destroy.loaded_item.materials[material]))), material) SSblackbox.add_details("item_deconstructed","[linked_destroy.loaded_item.type]") linked_destroy.loaded_item = null for(var/obj/I in linked_destroy.contents) From da2ee4b4b1993fd80dc78a368ec439a8139a4912 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 6 Oct 2017 22:20:27 -0500 Subject: [PATCH 138/144] Update _defines.dm --- code/_onclick/hud/_defines.dm | 165 ---------------------------------- 1 file changed, 165 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 15eed9169d..28c7183d4a 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -1,167 +1,3 @@ -<<<<<<< HEAD -/* - These defines specificy screen locations. For more information, see the byond documentation on the screen_loc var. - - The short version: - - Everything is encoded as strings because apparently that's how Byond rolls. - - "1,1" is the bottom left square of the user's screen. This aligns perfectly with the turf grid. - "1:2,3:4" is the square (1,3) with pixel offsets (+2, +4); slightly right and slightly above the turf grid. - Pixel offsets are used so you don't perfectly hide the turf under them, that would be crappy. - - In addition, the keywords NORTH, SOUTH, EAST, WEST and CENTER can be used to represent their respective - screen borders. NORTH-1, for example, is the row just below the upper edge. Useful if you want your - UI to scale with screen size. - - The size of the user's screen is defined by client.view (indirectly by world.view), in our case "15x15". - Therefore, the top right corner (except during admin shenanigans) is at "15,15" -*/ - -//Lower left, persistent menu -#define ui_inventory "WEST:6,SOUTH:5" - -//Middle left indicators -#define ui_lingchemdisplay "WEST,CENTER-1:15" -#define ui_lingstingdisplay "WEST:6,CENTER-3:11" -#define ui_crafting "12:-10,1:5" -#define ui_building "12:-10,1:21" -#define ui_language_menu "11:6,2:-11" - -#define ui_devilsouldisplay "WEST:6,CENTER-1:15" - -//Lower center, persistent menu -#define ui_sstore1 "CENTER-5:10,SOUTH:5" -#define ui_id "CENTER-4:12,SOUTH:5" -#define ui_belt "CENTER-3:14,SOUTH:5" -#define ui_back "CENTER-2:14,SOUTH:5" - -/proc/ui_hand_position(i) //values based on old hand ui positions (CENTER:-/+16,SOUTH:5) - var/x_off = -(!(i % 2)) - var/y_off = round((i-1) / 2) - return"CENTER+[x_off]:16,SOUTH+[y_off]:5" - -/proc/ui_equip_position(mob/M) - var/y_off = round((M.held_items.len-1) / 2) //values based on old equip ui position (CENTER: +/-16,SOUTH+1:5) - return "CENTER:-16,SOUTH+[y_off+1]:5" - -/proc/ui_swaphand_position(mob/M, which = 1) //values based on old swaphand ui positions (CENTER: +/-16,SOUTH+1:5) - var/x_off = which == 1 ? -1 : 0 - var/y_off = round((M.held_items.len-1) / 2) - return "CENTER+[x_off]:16,SOUTH+[y_off+1]:5" - -#define ui_storage1 "CENTER+1:18,SOUTH:5" -#define ui_storage2 "CENTER+2:20,SOUTH:5" - -#define ui_borg_sensor "CENTER-3:16, SOUTH:5" //borgs -#define ui_borg_lamp "CENTER-4:16, SOUTH:5" //borgs -#define ui_borg_thrusters "CENTER-5:16, SOUTH:5" //borgs -#define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs -#define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs -#define ui_inv3 "CENTER :16,SOUTH:5" //borgs -#define ui_borg_module "CENTER+1:16,SOUTH:5" //borgs -#define ui_borg_store "CENTER+2:16,SOUTH:5" //borgs -#define ui_borg_camera "CENTER+3:21,SOUTH:5" //borgs -#define ui_borg_album "CENTER+4:21,SOUTH:5" //borgs -#define ui_borg_language_menu "CENTER+4:21,SOUTH+1:5" //borgs - -#define ui_monkey_head "CENTER-5:13,SOUTH:5" //monkey -#define ui_monkey_mask "CENTER-4:14,SOUTH:5" //monkey -#define ui_monkey_neck "CENTER-3:15,SOUTH:5" //monkey -#define ui_monkey_back "CENTER-2:16,SOUTH:5" //monkey - -#define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien -#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien -#define ui_alien_language_menu "EAST-3:26,SOUTH:5" //alien - -#define ui_drone_drop "CENTER+1:18,SOUTH:5" //maintenance drones -#define ui_drone_pull "CENTER+2:2,SOUTH:5" //maintenance drones -#define ui_drone_storage "CENTER-2:14,SOUTH:5" //maintenance drones -#define ui_drone_head "CENTER-3:14,SOUTH:5" //maintenance drones - -//Lower right, persistent menu -#define ui_drop_throw "EAST-1:28,SOUTH+1:7" -#define ui_pull_resist "EAST-2:26,SOUTH+1:7" -#define ui_movi "EAST-2:26,SOUTH:5" -#define ui_acti "EAST-3:24,SOUTH:5" -#define ui_zonesel "EAST-1:28,SOUTH:5" -#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12) - -#define ui_borg_pull "EAST-2:26,SOUTH+1:7" -#define ui_borg_radio "EAST-1:28,SOUTH+1:7" -#define ui_borg_intents "EAST-2:26,SOUTH:5" - - -//Upper-middle right (alerts) -#define ui_alert1 "EAST-1:28,CENTER+5:27" -#define ui_alert2 "EAST-1:28,CENTER+4:25" -#define ui_alert3 "EAST-1:28,CENTER+3:23" -#define ui_alert4 "EAST-1:28,CENTER+2:21" -#define ui_alert5 "EAST-1:28,CENTER+1:19" - - -//Middle right (status indicators) -#define ui_healthdoll "EAST-1:28,CENTER-2:13" -#define ui_health "EAST-1:28,CENTER-1:15" -#define ui_internal "EAST-1:28,CENTER:17" - -//borgs -#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. - -//aliens -#define ui_alien_health "EAST,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. -#define ui_alienplasmadisplay "EAST,CENTER-2:15" -#define ui_alien_queen_finder "EAST,CENTER-3:15" - -//constructs -#define ui_construct_pull "EAST,CENTER-2:15" -#define ui_construct_health "EAST,CENTER:15" //same as borgs and humans - -// AI - -#define ui_ai_core "SOUTH:6,WEST" -#define ui_ai_camera_list "SOUTH:6,WEST+1" -#define ui_ai_track_with_camera "SOUTH:6,WEST+2" -#define ui_ai_camera_light "SOUTH:6,WEST+3" -#define ui_ai_crew_monitor "SOUTH:6,WEST+4" -#define ui_ai_crew_manifest "SOUTH:6,WEST+5" -#define ui_ai_alerts "SOUTH:6,WEST+6" -#define ui_ai_announcement "SOUTH:6,WEST+7" -#define ui_ai_shuttle "SOUTH:6,WEST+8" -#define ui_ai_state_laws "SOUTH:6,WEST+9" -#define ui_ai_pda_send "SOUTH:6,WEST+10" -#define ui_ai_pda_log "SOUTH:6,WEST+11" -#define ui_ai_take_picture "SOUTH:6,WEST+12" -#define ui_ai_view_images "SOUTH:6,WEST+13" -#define ui_ai_sensor "SOUTH:6,WEST+14" - -//Pop-up inventory -#define ui_shoes "WEST+1:8,SOUTH:5" - -#define ui_iclothing "WEST:6,SOUTH+1:7" -#define ui_oclothing "WEST+1:8,SOUTH+1:7" -#define ui_gloves "WEST+2:10,SOUTH+1:7" - -#define ui_glasses "WEST:6,SOUTH+3:11" -#define ui_mask "WEST+1:8,SOUTH+2:9" -#define ui_ears "WEST+2:10,SOUTH+2:9" -#define ui_neck "WEST:6,SOUTH+2:9" -#define ui_head "WEST+1:8,SOUTH+3:11" - -//Ghosts - -#define ui_ghost_jumptomob "SOUTH:6,CENTER-2:24" -#define ui_ghost_orbit "SOUTH:6,CENTER-1:24" -#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24" -#define ui_ghost_teleport "SOUTH:6,CENTER+1:24" -#define ui_ghost_pai "SOUTH: 6, CENTER+2:24" - -//Hand of God, god - -#define ui_deityhealth "EAST-1:28,CENTER-2:13" -#define ui_deitypower "EAST-1:28,CENTER-1:15" -#define ui_deityfollowers "EAST-1:28,CENTER:17" -======= /* These defines specificy screen locations. For more information, see the byond documentation on the screen_loc var. @@ -318,4 +154,3 @@ #define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24" #define ui_ghost_teleport "SOUTH:6,CENTER+1:24" #define ui_ghost_pai "SOUTH: 6, CENTER+2:24" ->>>>>>> 7d98788... Cleans up leftover Hand of God gamemode references (#31326) From 2b42ad52009c766508d32c7a596e2d8b1b4d4479 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 6 Oct 2017 22:22:35 -0500 Subject: [PATCH 139/144] Update decal.dm --- code/game/objects/effects/decals/decal.dm | 121 +++++++++------------- 1 file changed, 50 insertions(+), 71 deletions(-) diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index d9b217b91b..06333277cd 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -1,26 +1,6 @@ -/obj/effect/decal - name = "decal" +/obj/effect/decal + name = "decal" anchored = TRUE -<<<<<<< HEAD - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/effect/decal/ex_act(severity, target) - qdel(src) - -/obj/effect/decal/fire_act(exposed_temperature, exposed_volume) - if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava - qdel(src) - -/obj/effect/decal/HandleTurfChange(turf/T) - ..() - if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || istype(T, /turf/open/chasm))) - qdel(src) - -/obj/effect/turf_decal - var/group = TURF_DECAL_PAINT - icon = 'icons/turf/decals.dmi' - icon_state = "warningline" -======= resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/effect/decal/ex_act(severity, target) @@ -40,65 +20,64 @@ icon = 'icons/turf/decals.dmi' icon_state = "warningline" layer = TURF_DECAL_LAYER ->>>>>>> 41430d7... Sets decal layer anchored = TRUE - -//in case we need some special decals -/obj/effect/turf_decal/proc/get_decal() - return image(icon='icons/turf/decals.dmi',icon_state=icon_state,dir=dir,layer=TURF_LAYER) - -/obj/effect/turf_decal/Initialize() - ..() - var/turf/T = loc - if(!istype(T)) //you know this will happen somehow - CRASH("Turf decal initialized in an object/nullspace") - T.add_decal(get_decal(),group) - return INITIALIZE_HINT_QDEL - -/obj/effect/turf_decal/stripes/line - icon_state = "warningline" - -/obj/effect/turf_decal/stripes/end - icon_state = "warn_end" - -/obj/effect/turf_decal/stripes/corner - icon_state = "warninglinecorner" - -/obj/effect/turf_decal/stripes/asteroid/line - icon_state = "ast_warn" - -/obj/effect/turf_decal/stripes/asteroid/end - icon_state = "ast_warn_end" - -/obj/effect/turf_decal/stripes/asteroid/corner - icon_state = "ast_warn_corner" - -/obj/effect/turf_decal/delivery - icon_state = "delivery" - -/obj/effect/turf_decal/bot - icon_state = "bot" - -/obj/effect/turf_decal/loading_area - icon_state = "loading_area" - -/obj/effect/turf_decal/sand - icon_state = "sandyfloor" - + +//in case we need some special decals +/obj/effect/turf_decal/proc/get_decal() + return image(icon='icons/turf/decals.dmi',icon_state=icon_state,dir=dir,layer=TURF_LAYER) + +/obj/effect/turf_decal/Initialize() + ..() + var/turf/T = loc + if(!istype(T)) //you know this will happen somehow + CRASH("Turf decal initialized in an object/nullspace") + T.add_decal(get_decal(),group) + return INITIALIZE_HINT_QDEL + +/obj/effect/turf_decal/stripes/line + icon_state = "warningline" + +/obj/effect/turf_decal/stripes/end + icon_state = "warn_end" + +/obj/effect/turf_decal/stripes/corner + icon_state = "warninglinecorner" + +/obj/effect/turf_decal/stripes/asteroid/line + icon_state = "ast_warn" + +/obj/effect/turf_decal/stripes/asteroid/end + icon_state = "ast_warn_end" + +/obj/effect/turf_decal/stripes/asteroid/corner + icon_state = "ast_warn_corner" + +/obj/effect/turf_decal/delivery + icon_state = "delivery" + +/obj/effect/turf_decal/bot + icon_state = "bot" + +/obj/effect/turf_decal/loading_area + icon_state = "loading_area" + +/obj/effect/turf_decal/sand + icon_state = "sandyfloor" + /obj/effect/turf_decal/sand/warning icon_state = "sandy_warn" /obj/effect/turf_decal/sand/warning/corner icon_state = "sandy_warn_corner" -/obj/effect/turf_decal/sand/plating - icon_state = "sandyplating" - +/obj/effect/turf_decal/sand/plating + icon_state = "sandyplating" + /obj/effect/turf_decal/sand/plating/warning icon_state = "sandy_plating_warn" /obj/effect/turf_decal/sand/plating/warning/corner icon_state = "sandy_plating_warn_corner" -/obj/effect/turf_decal/plaque - icon_state = "plaque" +/obj/effect/turf_decal/plaque + icon_state = "plaque" From 493352f680e14483263fdb5984dd9b8f4f70f690 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 6 Oct 2017 22:23:31 -0500 Subject: [PATCH 140/144] Update stationCollision.dm --- .../mission_code/stationCollision.dm | 27 +------------------ 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 4e95a3f030..6e6ee2dc4a 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -149,30 +149,5 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") if(prob(25)) mezzer() -<<<<<<< HEAD -/obj/singularity/narsie/sc_Narsie/consume(atom/A) - if(is_type_in_list(A, uneatable)) - return 0 - if(isliving(A)) - var/mob/living/L = A - L.gib() - else if(istype(A, /obj/)) - var/obj/O = A - O.ex_act(EXPLODE_DEVASTATE) - if(O) qdel(O) - else if(isturf(A)) - var/turf/T = A - if(T.intact) - for(var/obj/O in T.contents) - if(O.level != 1) - continue - if(O.invisibility == INVISIBILITY_MAXIMUM) - src.consume(O) - T.ChangeTurf(/turf/open/space) - return - -/obj/singularity/narsie/sc_Narsie/ex_act() -======= /obj/singularity/narsie/mini/ex_act() ->>>>>>> ae7720b... Fixes outdated away code. (#31314) - return \ No newline at end of file + return From 3d0a51e9bbc0dcec784861ddeea5aad024ee982e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 7 Oct 2017 00:02:39 -0500 Subject: [PATCH 141/144] Automatic changelog generation for PR #2603 [ci skip] --- html/changelogs/AutoChangeLog-pr-2603.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2603.yml diff --git a/html/changelogs/AutoChangeLog-pr-2603.yml b/html/changelogs/AutoChangeLog-pr-2603.yml new file mode 100644 index 0000000000..447c9cd78a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2603.yml @@ -0,0 +1,5 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Ported Crew Objectives from Goon, featuring objectives from both Goon and old Hippie." + - rscadd: "Ported Miscreants from Goon. They will appear based on the server's configuration." From 343b480c5309391cb66227ccc8a72c7ba802b7a5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 7 Oct 2017 00:03:37 -0500 Subject: [PATCH 142/144] Automatic changelog generation for PR #3178 [ci skip] --- html/changelogs/AutoChangeLog-pr-3178.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3178.yml diff --git a/html/changelogs/AutoChangeLog-pr-3178.yml b/html/changelogs/AutoChangeLog-pr-3178.yml new file mode 100644 index 0000000000..7642360f68 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3178.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Runed metal and brass are no longer invisible." From 2aaabda3a67b9f81cf86ace561a43ed78a6cfe0e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 7 Oct 2017 00:04:05 -0500 Subject: [PATCH 143/144] Automatic changelog generation for PR #3179 [ci skip] --- html/changelogs/AutoChangeLog-pr-3179.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3179.yml diff --git a/html/changelogs/AutoChangeLog-pr-3179.yml b/html/changelogs/AutoChangeLog-pr-3179.yml new file mode 100644 index 0000000000..6c9321c4a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3179.yml @@ -0,0 +1,10 @@ +author: "Toriate" +delete-after: True +changes: + - rscadd: "Added foam Magrifles" + - rscadd: "Added foam Stealth Pistols" + - rscadd: "Added toy Hyper Burst Rifles" + - rscadd: "Added toy ray gun" + - tweak: "foam X9s now available in autolathe" + - soundadd: "added raygun noises" + - imageadd: "added all the sprites for all those toys" From acd39506521d6346b7cec239d87d6157e3cd5316 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 7 Oct 2017 00:05:04 -0500 Subject: [PATCH 144/144] Automatic changelog generation for PR #3185 [ci skip] --- html/changelogs/AutoChangeLog-pr-3185.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-3185.yml diff --git a/html/changelogs/AutoChangeLog-pr-3185.yml b/html/changelogs/AutoChangeLog-pr-3185.yml new file mode 100644 index 0000000000..fa69ba3fe3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3185.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - imageadd: "Changed the drop, throw, pull and resist icons."