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