diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index 8b0968bec10..11b1c680c49 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -6,6 +6,8 @@ var/datum/subsystem/job/SSjob
flags = SS_NO_FIRE
var/list/occupations = list() //List of all jobs
+ var/list/name_occupations = list() //Dict of all jobs, keys are titles
+ var/list/type_occupations = list() //Dict of all jobs, keys are types
var/list/unassigned = list() //Players who need jobs
var/list/job_debug = list() //Debug info
var/initial_players_to_assign = 0 //used for checking against population caps
@@ -15,7 +17,8 @@ var/datum/subsystem/job/SSjob
/datum/subsystem/job/Initialize(timeofday)
- SetupOccupations()
+ if(!occupations.len)
+ SetupOccupations()
if(config.load_jobs_from_txt)
LoadJobs()
..()
@@ -37,6 +40,8 @@ var/datum/subsystem/job/SSjob
if(!job.config_check())
continue
occupations += job
+ name_occupations[job.title] = job
+ type_occupations[J] = job
return 1
@@ -49,14 +54,15 @@ var/datum/subsystem/job/SSjob
/datum/subsystem/job/proc/GetJob(rank)
- if(!rank)
- return null
- for(var/datum/job/J in occupations)
- if(!J)
- continue
- if(J.title == rank)
- return J
- return null
+ if(!occupations.len)
+ SetupOccupations()
+ return name_occupations[rank]
+
+/datum/subsystem/job/proc/GetJobType(jobtype)
+ if(!occupations.len)
+ SetupOccupations()
+ return type_occupations[jobtype]
+
/datum/subsystem/job/proc/AssignRole(mob/new_player/player, rank, latejoin=0)
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
@@ -392,7 +398,6 @@ var/datum/subsystem/job/SSjob
var/new_mob = job.equip(H)
if(ismob(new_mob))
H = new_mob
- job.apply_fingerprints(H)
H << "You are the [rank]."
H << "As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this."
@@ -401,6 +406,10 @@ var/datum/subsystem/job/SSjob
H << "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp."
if(config.minimal_access_threshold)
H << "As this station was initially staffed with a [config.jobs_have_minimal_access ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card."
+
+ if(job && H)
+ job.after_spawn(H)
+
return H
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index 1bac2aff65f..b839ac2571d 100644
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -18,6 +18,7 @@
var/suit_store = null
var/r_hand = null
var/l_hand = null
+ var/internals_slot = null //ID of slot containing a gas tank
var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -56,10 +57,6 @@
H.equip_to_slot_or_del(new glasses(H),slot_glasses)
if(id)
H.equip_to_slot_or_del(new id(H),slot_wear_id)
- if(l_pocket)
- H.equip_to_slot_or_del(new l_pocket(H),slot_l_store)
- if(r_pocket)
- H.equip_to_slot_or_del(new r_pocket(H),slot_r_store)
if(suit_store)
H.equip_to_slot_or_del(new suit_store(H),slot_s_store)
@@ -68,12 +65,67 @@
if(r_hand)
H.put_in_r_hand(new r_hand(H))
- for(var/path in backpack_contents)
- var/number = backpack_contents[path]
- for(var/i=0,i[key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode]..")
+ message_admins("[key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].")
/client/proc/startSinglo()
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index e962aea51e9..24e9d0b1a6a 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -47,8 +47,12 @@
/obj/effect/mob_spawn/New()
..()
if(roundstart)
- //Add to the atom spawners register for roundstart atom spawning
- SSobj.atom_spawners += src
+ if(ticker && ticker.current_state > GAME_STATE_SETTING_UP)
+ // The game has already initialised, just spawn it.
+ create()
+ else
+ //Add to the atom spawners register for roundstart atom spawning
+ SSobj.atom_spawners += src
if(instant)
create()
@@ -99,8 +103,9 @@
/obj/effect/mob_spawn/human
mob_type = /mob/living/carbon/human
//Human specific stuff.
- var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
- var/uniform = null //Set this to an object path to have the slot filled with said object on the corpse.
+ var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
+ var/outfit_type = null //Will start with this if exists then apply specific slots. Job outfits are generated with IDs and disabled PDAs.
+ var/uniform = null //Set this to an object path to have the slot filled with said object on the corpse.
var/r_hand = null
var/l_hand = null
var/suit = null
@@ -115,13 +120,12 @@
var/pocket1 = null
var/pocket2 = null
var/back = null
- var/has_id = 0 //Just set to 1 if you want them to have an ID
- var/id_job = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
- var/id_access = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
- var/id_access_list = null //Allows you to manually add access to an ID card.
- var/id_icon = null //For setting it to be a gold, silver, centcom etc ID
+ var/has_id = FALSE //Set to TRUE if you want them to have an ID
+ var/id_job = null //Such as "Clown" or "Chef." This just determines what the ID reads as, not their access
+ var/id_access = null //This is for access. See access.dm for which jobs give what access. Use "Captain" if you want it to be all access.
+ var/id_access_list = null //Allows you to manually add access to an ID card.
+ var/id_icon = null //For setting it to be a gold, silver, centcom etc ID
var/husk = null
- var/outfit_type = null // Will start with this if exists then apply specific slots
var/list/implants = list()
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
@@ -129,8 +133,15 @@
H.set_species(mob_species)
if(husk)
H.Drain()
+
if(outfit_type)
H.equipOutfit(outfit_type)
+
+ // We don't want corpse PDAs to show up in the messenger list.
+ var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H
+ if(PDA)
+ PDA.toff = TRUE
+
if(uniform)
H.equip_to_slot_or_del(new uniform(H), slot_w_uniform)
if(suit)
@@ -190,6 +201,10 @@
var/obj/item/weapon/implant/X = new I
X.implant(H)
+ if(!H.head && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
+ var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
+ HS.ToggleHelmet()
+
//Instant version - use when spawning corpses during runtime
/obj/effect/mob_spawn/human/corpse
roundstart = FALSE
@@ -274,7 +289,6 @@
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
- helmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
back = /obj/item/weapon/tank/jetpack/oxygen
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
has_id = 1
@@ -285,28 +299,13 @@
/obj/effect/mob_spawn/human/cook
name = "Cook"
- uniform = /obj/item/clothing/under/rank/chef
- suit = /obj/item/clothing/suit/apron/chef
- shoes = /obj/item/clothing/shoes/sneakers/black
- helmet = /obj/item/clothing/head/chefhat
- back = /obj/item/weapon/storage/backpack
- radio = /obj/item/device/radio/headset
- has_id = 1
- id_job = "Cook"
- id_access = "Cook"
+ outfit_type = /datum/outfit/job/cook
/obj/effect/mob_spawn/human/doctor
name = "Doctor"
- radio = /obj/item/device/radio/headset/headset_med
- uniform = /obj/item/clothing/under/rank/medical
- suit = /obj/item/clothing/suit/toggle/labcoat
- back = /obj/item/weapon/storage/backpack/medic
- pocket1 = /obj/item/device/flashlight/pen
- shoes = /obj/item/clothing/shoes/sneakers/black
- has_id = 1
- id_job = "Medical Doctor"
- id_access = "Medical Doctor"
+ outfit_type = /datum/outfit/job/doctor
+
/obj/effect/mob_spawn/human/doctor/alive
death = FALSE
@@ -319,68 +318,40 @@
icon_state = "sleeper"
flavour_text = "You are a space doctor!"
+/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
+ ..()
+ // Remove radio and PDA so they wouldn't annoy station crew.
+ var/list/del_types = list(/obj/item/device/pda, /obj/item/device/radio/headset)
+ for(var/del_type in del_types)
+ var/obj/item/I = locate(del_type) in H
+ qdel(I)
/obj/effect/mob_spawn/human/engineer
name = "Engineer"
- radio = /obj/item/device/radio/headset/headset_eng
- uniform = /obj/item/clothing/under/rank/engineer
- back = /obj/item/weapon/storage/backpack/industrial
- shoes = /obj/item/clothing/shoes/sneakers/orange
- belt = /obj/item/weapon/storage/belt/utility/full
+ outfit_type = /datum/outfit/job/engineer
gloves = /obj/item/clothing/gloves/color/yellow
- helmet = /obj/item/clothing/head/hardhat
- has_id = 1
- id_job = "Station Engineer"
- id_access = "Station Engineer"
/obj/effect/mob_spawn/human/engineer/rig
- suit = /obj/item/clothing/suit/space/hardsuit/engine
- mask = /obj/item/clothing/mask/breath
+ outfit_type = /datum/outfit/job/engineer/rig
/obj/effect/mob_spawn/human/clown
name = "Clown"
- uniform = /obj/item/clothing/under/rank/clown
- shoes = /obj/item/clothing/shoes/clown_shoes
- radio = /obj/item/device/radio/headset
- mask = /obj/item/clothing/mask/gas/clown_hat
- pocket1 = /obj/item/weapon/bikehorn
- back = /obj/item/weapon/storage/backpack/clown
- has_id = 1
- id_job = "Clown"
- id_access = "Clown"
+ outfit_type = /datum/outfit/job/clown
/obj/effect/mob_spawn/human/scientist
name = "Scientist"
- radio = /obj/item/device/radio/headset/headset_sci
- uniform = /obj/item/clothing/under/rank/scientist
- suit = /obj/item/clothing/suit/toggle/labcoat/science
- back = /obj/item/weapon/storage/backpack
- shoes = /obj/item/clothing/shoes/sneakers/white
- has_id = 1
- id_job = "Scientist"
- id_access = "Scientist"
+ outfit_type = /datum/outfit/job/scientist
/obj/effect/mob_spawn/human/miner
- radio = /obj/item/device/radio/headset/headset_cargo/mining
- uniform = /obj/item/clothing/under/rank/miner
- gloves = /obj/item/clothing/gloves/color/black
- back = /obj/item/weapon/storage/backpack/industrial
- shoes = /obj/item/clothing/shoes/sneakers/black
- has_id = 1
- id_job = "Shaft Miner"
- id_access = "Shaft Miner"
+ name = "Shaft Miner"
+ outfit_type = /datum/outfit/job/miner/asteroid
/obj/effect/mob_spawn/human/miner/rig
- suit = /obj/item/clothing/suit/space/hardsuit/mining
- mask = /obj/item/clothing/mask/breath
+ outfit_type = /datum/outfit/job/miner/equipped/asteroid
/obj/effect/mob_spawn/human/miner/explorer
- uniform = /obj/item/clothing/under/rank/miner/lavaland
- back = /obj/item/weapon/storage/backpack/explorer
- shoes = /obj/item/clothing/shoes/workboots/mining
- suit = /obj/item/clothing/suit/hooded/explorer
- mask = /obj/item/clothing/mask/gas/explorer
- belt = /obj/item/weapon/gun/energy/kinetic_accelerator
+ outfit_type = /datum/outfit/job/miner/equipped
+
/obj/effect/mob_spawn/human/plasmaman
mob_species = /datum/species/plasmaman
diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm
index 8930c93bf5f..416bc4451b7 100644
--- a/code/modules/events/holiday/halloween.dm
+++ b/code/modules/events/holiday/halloween.dm
@@ -91,7 +91,7 @@
else if (prob(5))
var/turf/T = get_turf(H)
if(T)
- spawn_atom_to_turf(/obj/effect/mob_spawn/human/corpse/clown, H, 1)
+ spawn_atom_to_turf(/obj/effect/mob_spawn/human/clown/corpse, H, 1)
else if (prob(1))
spawn_atom_to_turf(/mob/living/simple_animal/hostile/retaliate/clown, H, 1)
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index 4ef3a5dc086..2e120b58bc9 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -32,6 +32,7 @@ Assistant
/datum/outfit/job/assistant
name = "Assistant"
+ jobtype = /datum/job/assistant
/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/H)
..()
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index d8a276d67db..a40b9d42fa1 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -22,9 +22,13 @@ Captain
/datum/job/captain/get_access()
return get_all_accesses()
+/datum/job/captain/announce(mob/living/carbon/human/H)
+ ..()
+ minor_announce("Captain [H.real_name] on deck!")
/datum/outfit/job/captain
name = "Captain"
+ jobtype = /datum/job/captain
id = /obj/item/weapon/card/id/gold
belt = /obj/item/device/pda/captain
@@ -41,19 +45,8 @@ Captain
satchel = /obj/item/weapon/storage/backpack/satchel/cap
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/captain
-/datum/outfit/job/captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
+ implants = list(/obj/item/weapon/implant/mindshield)
- var/obj/item/clothing/under/U = H.w_uniform
- U.attachTie(new /obj/item/clothing/tie/medal/gold/captain())
-
- if(visualsOnly)
- return
-
- var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
- L.implant(H, null, 1)
-
- minor_announce("Captain [H.real_name] on deck!")
/*
Head of Personnel
@@ -63,6 +56,7 @@ Head of Personnel
flag = HOP
department_head = list("Captain")
department_flag = CIVILIAN
+ head_announce = list("Supply", "Service")
faction = "Station"
total_positions = 1
spawn_positions = 1
@@ -89,6 +83,7 @@ Head of Personnel
/datum/outfit/job/hop
name = "Head of Personnel"
+ jobtype = /datum/job/hop
id = /obj/item/weapon/card/id/silver
belt = /obj/item/device/pda/heads/hop
@@ -98,11 +93,3 @@ Head of Personnel
head = /obj/item/clothing/head/hopcap
backpack_contents = list(/obj/item/weapon/storage/box/ids=1,\
/obj/item/weapon/melee/classic_baton/telescopic=1, /obj/item/device/modular_computer/tablet/preset/advanced = 1)
-
-/datum/outfit/job/hop/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-
- if(visualsOnly)
- return
-
- announce_head(H, list("Supply", "Service"))
diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm
index a5590867607..7129e39b12f 100644
--- a/code/modules/jobs/job_types/cargo_service.dm
+++ b/code/modules/jobs/job_types/cargo_service.dm
@@ -19,6 +19,7 @@ Quartermaster
/datum/outfit/job/quartermaster
name = "Quartermaster"
+ jobtype = /datum/job/qm
belt = /obj/item/device/pda/quartermaster
ears = /obj/item/device/radio/headset/headset_cargo
@@ -48,6 +49,7 @@ Cargo Technician
/datum/outfit/job/cargo_tech
name = "Cargo Technician"
+ jobtype = /datum/job/cargo_tech
belt = /obj/item/device/pda/cargo
ears = /obj/item/device/radio/headset/headset_cargo
@@ -74,7 +76,8 @@ Shaft Miner
minimal_access = list(access_mining, access_mining_station, access_mailsorting, access_mineral_storeroom)
/datum/outfit/job/miner
- name = "Shaft Miner"
+ name = "Shaft Miner (Lavaland)"
+ jobtype = /datum/job/mining
belt = /obj/item/device/pda/shaftminer
ears = /obj/item/device/radio/headset/headset_cargo/mining
@@ -93,6 +96,42 @@ Shaft Miner
dufflebag = /obj/item/weapon/storage/backpack/dufflebag
box = /obj/item/weapon/storage/box/survival_mining
+/datum/outfit/job/miner/asteroid
+ name = "Shaft Miner (Asteroid)"
+ uniform = /obj/item/clothing/under/rank/miner
+ shoes = /obj/item/clothing/shoes/workboots
+
+/datum/outfit/job/miner/equipped
+ name = "Shaft Miner (Lavaland + Equipment)"
+ suit = /obj/item/clothing/suit/hooded/explorer
+ mask = /obj/item/clothing/mask/gas/explorer
+ glasses = /obj/item/clothing/glasses/meson
+ suit_store = /obj/item/weapon/tank/internals/oxygen
+ internals_slot = slot_s_store
+ backpack_contents = list(
+ /obj/item/weapon/storage/bag/ore=1,
+ /obj/item/weapon/kitchen/knife/combat/survival=1,
+ /obj/item/weapon/mining_voucher=1,
+ /obj/item/device/t_scanner/adv_mining_scanner/lesser=1,
+ /obj/item/weapon/gun/energy/kinetic_accelerator=1)
+
+/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(visualsOnly)
+ return
+ if(istype(H.wear_suit, /obj/item/clothing/suit/hooded))
+ var/obj/item/clothing/suit/hooded/S = H.wear_suit
+ S.ToggleHood()
+
+/datum/outfit/job/miner/equipped/asteroid
+ name = "Shaft Miner (Asteroid + Equipment)"
+ uniform = /obj/item/clothing/under/rank/miner
+ shoes = /obj/item/clothing/shoes/workboots
+ suit = /obj/item/clothing/suit/space/hardsuit/mining
+ mask = /obj/item/clothing/mask/breath
+
+
+
/*
Bartender
*/
@@ -115,6 +154,7 @@ Bartender
/datum/outfit/job/bartender
name = "Bartender"
+ jobtype = /datum/job/bartender
glasses = /obj/item/clothing/glasses/sunglasses/reagent
belt = /obj/item/device/pda/bar
@@ -146,6 +186,7 @@ Cook
/datum/outfit/job/cook
name = "Cook"
+ jobtype = /datum/job/cook
belt = /obj/item/device/pda/cook
ears = /obj/item/device/radio/headset/headset_srv
@@ -154,14 +195,15 @@ Cook
head = /obj/item/clothing/head/chefhat
backpack_contents = list(/obj/item/weapon/sharpener = 1)
-/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H)
+/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
- var/datum/job/cook/J = SSjob.GetJob(H.job)
+ var/datum/job/cook/J = SSjob.GetJobType(jobtype)
if(J) // Fix for runtime caused by invalid job being passed
- J.cooks++
- if(J.cooks>1)//Cooks
+ if(J.cooks>0)//Cooks
suit = /obj/item/clothing/suit/apron/chef
head = /obj/item/clothing/head/soft/mime
+ if(!visualsOnly)
+ J.cooks++
/datum/outfit/job/cook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
@@ -186,11 +228,16 @@ Botanist
outfit = /datum/outfit/job/botanist
- access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
- minimal_access = list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning.
+ access = list(access_hydroponics, access_bar, access_kitchen, access_morgue)
+ minimal_access = list(access_hydroponics, access_morgue)
+ // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS
+ // Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT
+ // Given Morgue access because they have a viable means of cloning.
+
/datum/outfit/job/botanist
name = "Botanist"
+ jobtype = /datum/job/hydro
belt = /obj/item/device/pda/botanist
ears = /obj/item/device/radio/headset/headset_srv
@@ -225,6 +272,7 @@ Janitor
/datum/outfit/job/janitor
name = "Janitor"
+ jobtype = /datum/job/janitor
belt = /obj/item/device/pda/janitor
ears = /obj/item/device/radio/headset/headset_srv
diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm
index 1605f57c4dc..94c93c7c904 100644
--- a/code/modules/jobs/job_types/civilian.dm
+++ b/code/modules/jobs/job_types/civilian.dm
@@ -19,6 +19,7 @@ Clown
/datum/outfit/job/clown
name = "Clown"
+ jobtype = /datum/job/clown
belt = /obj/item/device/pda/clown
uniform = /obj/item/clothing/under/rank/clown
@@ -38,9 +39,10 @@ Clown
satchel = /obj/item/weapon/storage/backpack/clown
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/clown //strangely has a duffle
+ implants = list(/obj/item/weapon/implant/sad_trombone)
+
/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
-
if(visualsOnly)
return
@@ -48,13 +50,9 @@ Clown
/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
-
if(visualsOnly)
return
- var/obj/item/weapon/implant/sad_trombone/S = new/obj/item/weapon/implant/sad_trombone(H)
- S.implant(H, null, 1)
-
H.dna.add_mutation(CLOWNMUT)
H.rename_self("clown")
@@ -79,6 +77,7 @@ Mime
/datum/outfit/job/mime
name = "Mime"
+ jobtype = /datum/job/mime
belt = /obj/item/device/pda/mime
uniform = /obj/item/clothing/under/rank/mime
@@ -127,6 +126,7 @@ Librarian
/datum/outfit/job/librarian
name = "Librarian"
+ jobtype = /datum/job/librarian
belt = /obj/item/device/pda/librarian
uniform = /obj/item/clothing/under/rank/librarian
@@ -156,6 +156,7 @@ Lawyer
/datum/outfit/job/lawyer
name = "Lawyer"
+ jobtype = /datum/job/lawyer
belt = /obj/item/device/pda/lawyer
ears = /obj/item/device/radio/headset/headset_sec
@@ -169,11 +170,10 @@ Lawyer
/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
-
if(visualsOnly)
return
- var/datum/job/lawyer/J = SSjob.GetJob(H.job)
+ var/datum/job/lawyer/J = SSjob.GetJobType(jobtype)
J.lawyers++
if(J.lawyers>1)
uniform = /obj/item/clothing/under/lawyer/purpsuit
diff --git a/code/modules/jobs/job_types/civilian_chaplain.dm b/code/modules/jobs/job_types/civilian_chaplain.dm
index 5a2dd022a7f..e5865383819 100644
--- a/code/modules/jobs/job_types/civilian_chaplain.dm
+++ b/code/modules/jobs/job_types/civilian_chaplain.dm
@@ -20,6 +20,7 @@ Chaplain
/datum/outfit/job/chaplain
name = "Chaplain"
+ jobtype = /datum/job/chaplain
belt = /obj/item/device/pda/chaplain
uniform = /obj/item/clothing/under/rank/chaplain
@@ -33,8 +34,9 @@ Chaplain
if(visualsOnly)
return
-
- H.mind.isholy = TRUE
+
+ if(H.mind)
+ H.mind.isholy = TRUE
var/obj/item/weapon/storage/book/bible/B = new /obj/item/weapon/storage/book/bible/booze(H)
diff --git a/code/modules/jobs/job_types/engineering.dm b/code/modules/jobs/job_types/engineering.dm
index 58eb0891ee2..fc2410b2284 100644
--- a/code/modules/jobs/job_types/engineering.dm
+++ b/code/modules/jobs/job_types/engineering.dm
@@ -6,6 +6,7 @@ Chief Engineer
flag = CHIEF
department_head = list("Captain")
department_flag = ENGSEC
+ head_announce = list("Engineering")
faction = "Station"
total_positions = 1
spawn_positions = 1
@@ -27,6 +28,7 @@ Chief Engineer
/datum/outfit/job/ce
name = "Chief Engineer"
+ jobtype = /datum/job/chief_engineer
id = /obj/item/weapon/card/id/silver
belt = /obj/item/weapon/storage/belt/utility/chief/full
@@ -44,13 +46,17 @@ Chief Engineer
box = /obj/item/weapon/storage/box/engineer
pda_slot = slot_l_store
-/datum/outfit/job/ce/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
+/datum/outfit/job/ce/rig
+ name = "Chief Engineer (Hardsuit)"
- if(visualsOnly)
- return
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/engine/elite
+ shoes = /obj/item/clothing/shoes/magboots/advance
+ suit_store = /obj/item/weapon/tank/internals/oxygen
+ gloves = /obj/item/clothing/gloves/color/yellow
+ head = null
+ internals_slot = slot_s_store
- announce_head(H, list("Engineering"))
/*
Station Engineer
@@ -75,6 +81,7 @@ Station Engineer
/datum/outfit/job/engineer
name = "Station Engineer"
+ jobtype = /datum/job/engineer
belt = /obj/item/weapon/storage/belt/utility/full
l_pocket = /obj/item/device/pda/engineering
@@ -91,6 +98,17 @@ Station Engineer
pda_slot = slot_l_store
backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1)
+/datum/outfit/job/engineer/rig
+ name = "Station Engineer (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/engine
+ suit_store = /obj/item/weapon/tank/internals/oxygen
+ gloves = /obj/item/clothing/gloves/color/yellow
+ head = null
+ internals_slot = slot_s_store
+
+
/*
Atmospheric Technician
*/
@@ -113,6 +131,7 @@ Atmospheric Technician
/datum/outfit/job/atmos
name = "Atmospheric Technician"
+ jobtype = /datum/job/atmos
belt = /obj/item/weapon/storage/belt/utility/atmostech
l_pocket = /obj/item/device/pda/atmos
@@ -126,3 +145,11 @@ Atmospheric Technician
box = /obj/item/weapon/storage/box/engineer
pda_slot = slot_l_store
backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1)
+
+/datum/outfit/job/atmos/rig
+ name = "Atmospheric Technician (Hardsuit)"
+
+ mask = /obj/item/clothing/mask/gas
+ suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos
+ suit_store = /obj/item/weapon/tank/internals/oxygen
+ internals_slot = slot_s_store
diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm
index 07f21b08fa6..e83c93e82ee 100644
--- a/code/modules/jobs/job_types/job.dm
+++ b/code/modules/jobs/job_types/job.dm
@@ -1,5 +1,4 @@
/datum/job
-
//The name of the job
var/title = "NOPE"
@@ -10,6 +9,9 @@
//Determines who can demote this position
var/department_head = list()
+ //Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
+ var/list/head_announce = null
+
//Bitflags for the job
var/flag = 0
var/department_flag = 0
@@ -42,10 +44,16 @@
var/outfit = null
//Only override this proc
-/datum/job/proc/equip_items(mob/living/carbon/human/H)
+/datum/job/proc/after_spawn(mob/living/carbon/human/H)
+
+
+/datum/job/proc/announce(mob/living/carbon/human/H)
+ if(head_announce)
+ announce_head(H, head_announce)
+
//But don't override this
-/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE)
if(!H)
return 0
@@ -57,44 +65,8 @@
H.dna.species.after_equip_job(src, H, visualsOnly)
-/datum/job/proc/apply_fingerprints(mob/living/carbon/human/H)
- if(!istype(H))
- return
- if(H.back)
- H.back.add_fingerprint(H,1) //The 1 sets a flag to ignore gloves
- for(var/obj/item/I in H.back.contents)
- I.add_fingerprint(H,1)
- if(H.wear_id)
- H.wear_id.add_fingerprint(H,1)
- if(H.w_uniform)
- H.w_uniform.add_fingerprint(H,1)
- if(H.wear_suit)
- H.wear_suit.add_fingerprint(H,1)
- if(H.wear_mask)
- H.wear_mask.add_fingerprint(H,1)
- if(H.wear_neck)
- H.wear_neck.add_fingerprint(H,1)
- if(H.head)
- H.head.add_fingerprint(H,1)
- if(H.shoes)
- H.shoes.add_fingerprint(H,1)
- if(H.gloves)
- H.gloves.add_fingerprint(H,1)
- if(H.ears)
- H.ears.add_fingerprint(H,1)
- if(H.glasses)
- H.glasses.add_fingerprint(H,1)
- if(H.belt)
- H.belt.add_fingerprint(H,1)
- for(var/obj/item/I in H.belt.contents)
- I.add_fingerprint(H,1)
- if(H.s_store)
- H.s_store.add_fingerprint(H,1)
- if(H.l_store)
- H.l_store.add_fingerprint(H,1)
- if(H.r_store)
- H.r_store.add_fingerprint(H,1)
- return 1
+ if(!visualsOnly && announce)
+ announce(H)
/datum/job/proc/get_access()
if(!config) //Needed for robots.
@@ -110,6 +82,12 @@
if(config.jobs_have_maint_access & EVERYONE_HAS_MAINT_ACCESS) //Config has global maint access set
. |= list(access_maint_tunnels)
+/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
+ spawn(4) //to allow some initialization
+ if(H && announcement_systems.len)
+ var/obj/machinery/announcement_system/announcer = pick(announcement_systems)
+ announcer.announce("NEWHEAD", H.real_name, H.job, channels)
+
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
/datum/job/proc/player_old_enough(client/C)
if(available_in_days(C) == 0)
@@ -132,9 +110,13 @@
/datum/job/proc/config_check()
return 1
+
+
/datum/outfit/job
name = "Standard Gear"
+ var/jobtype = null
+
uniform = /obj/item/clothing/under/color/grey
id = /obj/item/weapon/card/id
ears = /obj/item/device/radio/headset
@@ -142,6 +124,8 @@
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
+ var/list/implants = null
+
var/backpack = /obj/item/weapon/storage/backpack
var/satchel = /obj/item/weapon/storage/backpack/satchel
var/dufflebag = /obj/item/weapon/storage/backpack/dufflebag
@@ -174,23 +158,25 @@
if(visualsOnly)
return
+ var/datum/job/J = SSjob.GetJobType(jobtype)
+ if(!J)
+ J = SSjob.GetJob(H.job)
+
var/obj/item/weapon/card/id/C = H.wear_id
if(istype(C))
- var/datum/job/J = SSjob.GetJob(H.job) // Not sure the best idea
C.access = J.get_access()
C.registered_name = H.real_name
- C.assignment = H.job
+ C.assignment = J.title
C.update_label()
H.sec_hud_set_ID()
var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot)
if(istype(PDA))
PDA.owner = H.real_name
- PDA.ownjob = H.job
+ PDA.ownjob = J.title
PDA.update_label()
-/datum/outfit/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
- spawn(4) //to allow some initialization
- if(H && announcement_systems.len)
- var/obj/machinery/announcement_system/announcer = pick(announcement_systems)
- announcer.announce("NEWHEAD", H.real_name, H.job, channels)
+ if(implants)
+ for(var/implant_type in implants)
+ var/obj/item/weapon/implant/I = new implant_type(H)
+ I.implant(H, null, silent=TRUE)
diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm
index 3444fe97b2c..1ecbaea9b1c 100644
--- a/code/modules/jobs/job_types/medical.dm
+++ b/code/modules/jobs/job_types/medical.dm
@@ -6,6 +6,7 @@ Chief Medical Officer
flag = CMO
department_head = list("Captain")
department_flag = MEDSCI
+ head_announce = list("Medical")
faction = "Station"
total_positions = 1
spawn_positions = 1
@@ -25,6 +26,7 @@ Chief Medical Officer
/datum/outfit/job/cmo
name = "Chief Medical Officer"
+ jobtype = /datum/job/cmo
id = /obj/item/weapon/card/id/silver
belt = /obj/item/device/pda/heads/cmo
@@ -40,14 +42,6 @@ Chief Medical Officer
satchel = /obj/item/weapon/storage/backpack/satchel/med
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/med
-/datum/outfit/job/cmo/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-
- if(visualsOnly)
- return
-
- announce_head(H, list("Medical")) //tell underlings (medical radio) they have a head
-
/*
Medical Doctor
*/
@@ -69,6 +63,7 @@ Medical Doctor
/datum/outfit/job/doctor
name = "Medical Doctor"
+ jobtype = /datum/job/doctor
belt = /obj/item/device/pda/medical
ears = /obj/item/device/radio/headset/headset_med
@@ -103,6 +98,7 @@ Chemist
/datum/outfit/job/chemist
name = "Chemist"
+ jobtype = /datum/job/chemist
glasses = /obj/item/clothing/glasses/science
belt = /obj/item/device/pda/chemist
@@ -136,6 +132,7 @@ Geneticist
/datum/outfit/job/geneticist
name = "Geneticist"
+ jobtype = /datum/job/geneticist
belt = /obj/item/device/pda/geneticist
ears = /obj/item/device/radio/headset/headset_medsci
@@ -169,6 +166,7 @@ Virologist
/datum/outfit/job/virologist
name = "Virologist"
+ jobtype = /datum/job/virologist
belt = /obj/item/device/pda/viro
ears = /obj/item/device/radio/headset/headset_med
diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm
index f0ad16f3053..743730bb7b3 100644
--- a/code/modules/jobs/job_types/science.dm
+++ b/code/modules/jobs/job_types/science.dm
@@ -6,6 +6,7 @@ Research Director
flag = RD
department_head = list("Captain")
department_flag = MEDSCI
+ head_announce = list("Science")
faction = "Station"
total_positions = 1
spawn_positions = 1
@@ -29,6 +30,7 @@ Research Director
/datum/outfit/job/rd
name = "Research Director"
+ jobtype = /datum/job/rd
id = /obj/item/weapon/card/id/silver
belt = /obj/item/device/pda/heads/rd
@@ -43,13 +45,14 @@ Research Director
backpack = /obj/item/weapon/storage/backpack/science
satchel = /obj/item/weapon/storage/backpack/satchel/tox
-/datum/outfit/job/rd/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
+/datum/outfit/job/rd/rig
+ name = "Research Director (Hardsuit)"
- if(visualsOnly)
- return
-
- announce_head(H, list("Science")) //tell underlings (science radio) they have a head
+ l_hand = null
+ mask = /obj/item/clothing/mask/breath
+ suit = /obj/item/clothing/suit/space/hardsuit/rd
+ suit_store = /obj/item/weapon/tank/internals/oxygen
+ internals_slot = slot_s_store
/*
Scientist
@@ -72,6 +75,7 @@ Scientist
/datum/outfit/job/scientist
name = "Scientist"
+ jobtype = /datum/job/scientist
belt = /obj/item/device/pda/toxins
ears = /obj/item/device/radio/headset/headset_sci
@@ -103,6 +107,7 @@ Roboticist
/datum/outfit/job/roboticist
name = "Roboticist"
+ jobtype = /datum/job/roboticist
belt = /obj/item/weapon/storage/belt/utility/full
l_pocket = /obj/item/device/pda/roboticist
diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm
index 628a5dd3af2..e1a02020d08 100644
--- a/code/modules/jobs/job_types/security.dm
+++ b/code/modules/jobs/job_types/security.dm
@@ -12,6 +12,7 @@ Head of Security
flag = HOS
department_head = list("Captain")
department_flag = ENGSEC
+ head_announce = list("Security")
faction = "Station"
total_positions = 1
spawn_positions = 1
@@ -33,6 +34,7 @@ Head of Security
/datum/outfit/job/hos
name = "Head of Security"
+ jobtype = /datum/job/hos
id = /obj/item/weapon/card/id/silver
belt = /obj/item/device/pda/heads/hos
@@ -53,16 +55,8 @@ Head of Security
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/sec
box = /obj/item/weapon/storage/box/security
-/datum/outfit/job/hos/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
+ implants = list(/obj/item/weapon/implant/mindshield)
- if(visualsOnly)
- return
-
- var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
- L.implant(H, null, 1)
-
- announce_head(H, list("Security")) //tell underlings (security radio) they have a head
/*
Warden
*/
@@ -90,6 +84,7 @@ Warden
/datum/outfit/job/warden
name = "Warden"
+ jobtype = /datum/job/warden
belt = /obj/item/device/pda/warden
ears = /obj/item/device/radio/headset/headset_sec/alt
@@ -109,15 +104,8 @@ Warden
dufflebag = /obj/item/weapon/storage/backpack/dufflebag/sec
box = /obj/item/weapon/storage/box/security
+ implants = list(/obj/item/weapon/implant/mindshield)
-/datum/outfit/job/warden/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-
- if(visualsOnly)
- return
-
- var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
- L.implant(H, null, 1)
/*
Detective
@@ -141,6 +129,7 @@ Detective
/datum/outfit/job/detective
name = "Detective"
+ jobtype = /datum/job/detective
belt = /obj/item/device/pda/detective
ears = /obj/item/device/radio/headset/headset_sec/alt
@@ -156,6 +145,8 @@ Detective
/obj/item/weapon/melee/classic_baton=1)
mask = /obj/item/clothing/mask/cigarette
+ implants = list(/obj/item/weapon/implant/mindshield)
+
/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
var/obj/item/clothing/mask/cigarette/cig = H.wear_mask
@@ -164,9 +155,6 @@ Detective
if(visualsOnly)
return
- var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
- L.implant(H, null, 1)
-
/*
Security Officer
*/
@@ -187,6 +175,7 @@ Security Officer
access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_weapons) //But see /datum/job/warden/get_access()
+
/datum/job/officer/get_access()
var/list/L = list()
L |= ..() | check_config_for_sec_maint()
@@ -194,77 +183,51 @@ Security Officer
var/list/sec_departments = list("engineering", "supply", "medical", "science")
-/datum/outfit/job/security
- name = "Security Officer"
-
- belt = /obj/item/device/pda/security
- ears = /obj/item/device/radio/headset/headset_sec/alt
- uniform = /obj/item/clothing/under/rank/security
- gloves = /obj/item/clothing/gloves/color/black
- head = /obj/item/clothing/head/helmet/sec
- suit = /obj/item/clothing/suit/armor/vest/alt
- shoes = /obj/item/clothing/shoes/jackboots
- l_pocket = /obj/item/weapon/restraints/handcuffs
- r_pocket = /obj/item/device/assembly/flash/handheld
- suit_store = /obj/item/weapon/gun/energy/e_gun/advtaser
- backpack_contents = list(/obj/item/weapon/melee/baton/loaded=1)
-
- backpack = /obj/item/weapon/storage/backpack/security
- satchel = /obj/item/weapon/storage/backpack/satchel/sec
- dufflebag = /obj/item/weapon/storage/backpack/dufflebag/sec
- box = /obj/item/weapon/storage/box/security
-
- var/department = null
+/datum/job/officer/after_spawn(mob/living/carbon/human/H)
+ // Assign departament security
+ if(!sec_departments.len)
+ return
+ var/department = pick(sec_departments)
+ sec_departments -= department
+ var/ears = null
var/tie = null
var/list/dep_access = null
var/destination = null
var/spawn_point = null
-/datum/outfit/job/security/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
+ switch(department)
+ if("supply")
+ ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply
+ dep_access = list(access_mailsorting, access_mining, access_mining_station)
+ destination = /area/security/checkpoint/supply
+ spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns
+ tie = /obj/item/clothing/tie/armband/cargo
+ if("engineering")
+ ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi
+ dep_access = list(access_construction, access_engine)
+ destination = /area/security/checkpoint/engineering
+ spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns
+ tie = /obj/item/clothing/tie/armband/engine
+ if("medical")
+ ears = /obj/item/device/radio/headset/headset_sec/alt/department/med
+ dep_access = list(access_medical)
+ destination = /area/security/checkpoint/medical
+ spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns
+ tie = /obj/item/clothing/tie/armband/medblue
+ if("science")
+ ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci
+ dep_access = list(access_research)
+ destination = /area/security/checkpoint/science
+ spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns
+ tie = /obj/item/clothing/tie/armband/science
- if(sec_departments.len)
- department = pick(sec_departments)
- if(!visualsOnly)
- sec_departments -= department
- switch(department)
- if("supply")
- ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply
- dep_access = list(access_mailsorting, access_mining, access_mining_station)
- destination = /area/security/checkpoint/supply
- spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns
- tie = /obj/item/clothing/tie/armband/cargo
- if("engineering")
- ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi
- dep_access = list(access_construction, access_engine)
- destination = /area/security/checkpoint/engineering
- spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns
- tie = /obj/item/clothing/tie/armband/engine
- if("medical")
- ears = /obj/item/device/radio/headset/headset_sec/alt/department/med
- dep_access = list(access_medical)
- destination = /area/security/checkpoint/medical
- spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns
- tie = /obj/item/clothing/tie/armband/medblue
- if("science")
- ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci
- dep_access = list(access_research)
- destination = /area/security/checkpoint/science
- spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns
- tie = /obj/item/clothing/tie/armband/science
-
-/datum/outfit/job/security/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-
- var/obj/item/clothing/under/U = H.w_uniform
if(tie)
+ var/obj/item/clothing/under/U = H.w_uniform
U.attachTie(new tie)
-
- if(visualsOnly)
- return
-
- var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H)
- L.implant(H, null, 1)
+ if(ears)
+ if(H.ears)
+ qdel(H.ears)
+ H.equip_to_slot_or_del(new ears(H),slot_ears)
var/obj/item/weapon/card/id/W = H.wear_id
W.access |= dep_access
@@ -292,6 +255,32 @@ var/list/sec_departments = list("engineering", "supply", "medical", "science")
else
H << "You have not been assigned to any department. Patrol the halls and help where needed."
+
+
+/datum/outfit/job/security
+ name = "Security Officer"
+ jobtype = /datum/job/officer
+
+ belt = /obj/item/device/pda/security
+ ears = /obj/item/device/radio/headset/headset_sec/alt
+ uniform = /obj/item/clothing/under/rank/security
+ gloves = /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/helmet/sec
+ suit = /obj/item/clothing/suit/armor/vest/alt
+ shoes = /obj/item/clothing/shoes/jackboots
+ l_pocket = /obj/item/weapon/restraints/handcuffs
+ r_pocket = /obj/item/device/assembly/flash/handheld
+ suit_store = /obj/item/weapon/gun/energy/e_gun/advtaser
+ backpack_contents = list(/obj/item/weapon/melee/baton/loaded=1)
+
+ backpack = /obj/item/weapon/storage/backpack/security
+ satchel = /obj/item/weapon/storage/backpack/satchel/sec
+ dufflebag = /obj/item/weapon/storage/backpack/dufflebag/sec
+ box = /obj/item/weapon/storage/box/security
+
+ implants = list(/obj/item/weapon/implant/mindshield)
+
+
/obj/item/device/radio/headset/headset_sec/department/New()
wires = new(src)
secure_radio_connections = new
diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/interactive.dm
index aeee75e5d47..2d96883a554 100644
--- a/code/modules/mob/interactive.dm
+++ b/code/modules/mob/interactive.dm
@@ -132,7 +132,6 @@
myjob = new/datum/job/assistant()
job = myjob.title
myjob.equip(src)
- myjob.apply_fingerprints(src)
/mob/living/carbon/human/interactive/attacked_by(obj/item/I, mob/living/user, def_zone)
. = ..()
@@ -206,7 +205,6 @@
for(var/obj/item/W in T)
qdel(W)
T.myjob.equip(T)
- T.myjob.apply_fingerprints(T)
T.doSetup()
break
if(choice == "Random")
@@ -215,7 +213,6 @@
for(var/obj/item/W in T)
qdel(W)
T.myjob.equip(T)
- T.myjob.apply_fingerprints(T)
T.doSetup()
if(prob(25))
var/list/validchoices = list()
@@ -239,7 +236,6 @@
for(var/obj/item/W in T)
qdel(W)
T.myjob.equip(T)
- T.myjob.apply_fingerprints(T)
T.doSetup()
var/shouldDoppel = input("Do you want the SNPC to disguise themself as a crewmember?") as null|anything in list("Yes","No")
if(shouldDoppel)
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index 45db920d116..95d4e176195 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -30,7 +30,6 @@
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
- helmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
back = /obj/item/weapon/tank/jetpack/oxygen
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
has_id = 1
@@ -45,7 +44,6 @@
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
- helmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite
back = /obj/item/weapon/tank/jetpack/oxygen/harness
has_id = 1
id_job = "Operative"
@@ -53,18 +51,9 @@
-/obj/effect/mob_spawn/human/corpse/clown
- name = "Clown"
- uniform = /obj/item/clothing/under/rank/clown
- shoes = /obj/item/clothing/shoes/clown_shoes
- radio = /obj/item/device/radio/headset
- mask = /obj/item/clothing/mask/gas/clown_hat
- pocket1 = /obj/item/weapon/bikehorn
- back = /obj/item/weapon/storage/backpack/clown
- has_id = 1
- id_job = "Clown"
- id_access = "Clown"
-
+/obj/effect/mob_spawn/human/clown/corpse
+ roundstart = FALSE
+ instant = TRUE
/obj/effect/mob_spawn/human/corpse/pirate
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index 46b72b5db85..31b0bde251c 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -24,7 +24,7 @@
obj_damage = 0
environment_smash = 0
del_on_death = 1
- loot = list(/obj/effect/mob_spawn/human/corpse/clown)
+ loot = list(/obj/effect/mob_spawn/human/clown/corpse)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 270