diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index 6e227b211a5..a5991c9bcb9 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -60,7 +60,7 @@ CREATE TABLE `characters` (
`eyes_blue` smallint(4) NOT NULL,
`underwear` mediumtext NOT NULL,
`undershirt` mediumtext NOT NULL,
- `backbag` smallint(4) NOT NULL,
+ `backbag` mediumtext NOT NULL,
`b_type` varchar(45) NOT NULL,
`alternate_option` smallint(4) NOT NULL,
`job_support_high` mediumint(8) NOT NULL,
diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql
index a7ad598a143..845b8702fcd 100644
--- a/SQL/paradise_schema_prefixed.sql
+++ b/SQL/paradise_schema_prefixed.sql
@@ -60,7 +60,7 @@ CREATE TABLE `SS13_characters` (
`eyes_blue` smallint(4) NOT NULL,
`underwear` mediumtext NOT NULL,
`undershirt` mediumtext NOT NULL,
- `backbag` smallint(4) NOT NULL,
+ `backbag` mediumtext NOT NULL,
`b_type` varchar(45) NOT NULL,
`alternate_option` smallint(4) NOT NULL,
`job_support_high` mediumint(8) NOT NULL,
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 930e8244eb6..eb2305cfdb2 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -550,17 +550,17 @@ proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,fl
var/turf/current = get_turf(source)
var/turf/target_turf = get_turf(target)
var/steps = 1
-
+
if(current != target_turf)
- current = get_step_towards(current, target_turf)
+ current = get_step_towards(current, target_turf)
while(current != target_turf)
- if(steps > length)
+ if(steps > length)
return 0
- if(current.opacity)
+ if(current.opacity)
return 0
for(var/thing in current)
var/atom/A = thing
- if(A.opacity)
+ if(A.opacity)
return 0
current = get_step_towards(current, target_turf)
steps++
@@ -1863,7 +1863,7 @@ var/global/list/g_fancy_list_of_types = null
pois[name] = A
return pois
-
+
/proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20)
var/client/C
if(istype(mob_or_client, /mob))
@@ -1881,7 +1881,7 @@ var/global/list/g_fancy_list_of_types = null
C.color = flash_color
spawn(0)
animate(C, color = initial(C.color), time = flash_time)
-
+
#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
/proc/make_bit_triplet()
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index c139b969df1..4d9a578b19a 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -25,8 +25,6 @@ var/global/list/socks_m = list() //stores only socks name
var/global/list/socks_f = list() //stores only socks name
//Alt Heads
var/global/list/alt_heads_list = list() //stores /datum/sprite_accessory/alt_heads indexed by name
- //Backpacks
-var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt")
var/static/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.ogg','sound/weapons/armbomb.ogg','sound/voice/hiss1.ogg','sound/voice/hiss2.ogg', \
'sound/voice/hiss3.ogg','sound/voice/hiss4.ogg','sound/voice/hiss5.ogg','sound/voice/hiss6.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg', \
@@ -62,4 +60,14 @@ var/global/list/phonetic_alphabet = list("Alpha", "Bravo", "Charlie",
var/global/list/numbers_as_words = list("One", "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve",
"Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen",
- "Eighteen", "Nineteen")
\ No newline at end of file
+ "Eighteen", "Nineteen")
+
+ //Backpacks
+#define GBACKPACK "Grey Backpack"
+#define GSATCHEL "Grey Satchel"
+#define GDUFFLEBAG "Grey Dufflebag"
+#define LSATCHEL "Leather Satchel"
+#define DBACKPACK "Department Backpack"
+#define DSATCHEL "Department Satchel"
+#define DDUFFLEBAG "Department Dufflebag"
+var/global/list/backbaglist = list(DBACKPACK, DSATCHEL, DDUFFLEBAG, GBACKPACK, GSATCHEL, GDUFFLEBAG, LSATCHEL)
\ No newline at end of file
diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm
new file mode 100644
index 00000000000..9517ee09ef8
--- /dev/null
+++ b/code/datums/outfits/outfit.dm
@@ -0,0 +1,143 @@
+/datum/outfit
+ var/name = "Naked"
+ var/collect_not_del = FALSE
+
+ var/uniform = null
+ var/suit = null
+ var/back = null
+ var/belt = null
+ var/gloves = null
+ var/shoes = null
+ var/head = null
+ var/mask = null
+ var/l_ear = null
+ var/r_ear = null
+ var/glasses = null
+ var/id = null
+ var/l_pocket = null
+ var/r_pocket = null
+ var/suit_store = null
+ var/l_hand = null
+ var/r_hand = null
+ var/pda = 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)
+ //to be overriden for customization depending on client prefs,species etc
+ return
+
+// Used to equip an item to the mob. Mainly to prevent copypasta for collect_not_del.
+/datum/outfit/proc/equip_item(mob/living/carbon/human/H, path, slot)
+ var/obj/item/I = new path(H)
+ if(collect_not_del)
+ H.equip_or_collect(I, slot)
+ else
+ H.equip_to_slot_or_del(I, slot)
+
+/datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ //to be overriden for toggling internals, id binding, access etc
+ return
+
+/datum/outfit/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ pre_equip(H, visualsOnly)
+
+ //Start with uniform,suit,backpack for additional slots
+ if(uniform)
+ equip_item(H, uniform, slot_w_uniform)
+ if(suit)
+ equip_item(H, suit, slot_wear_suit)
+ if(back)
+ equip_item(H, back, slot_back)
+ if(belt)
+ equip_item(H, belt, slot_belt)
+ if(gloves)
+ equip_item(H, gloves, slot_gloves)
+ if(shoes)
+ equip_item(H, shoes, slot_shoes)
+ if(head)
+ equip_item(H, head, slot_head)
+ if(mask)
+ equip_item(H, mask, slot_wear_mask)
+ if(l_ear)
+ equip_item(H, l_ear, slot_l_ear)
+ if(r_ear)
+ equip_item(H, r_ear, slot_r_ear)
+ if(glasses)
+ equip_item(H, glasses, slot_glasses)
+ if(id)
+ equip_item(H, id, slot_wear_id)
+ if(suit_store)
+ equip_item(H, suit_store, slot_s_store)
+
+ if(l_hand)
+ H.put_in_l_hand(new l_hand(H))
+ if(r_hand)
+ H.put_in_r_hand(new r_hand(H))
+
+ if(pda)
+ equip_item(H, pda, slot_wear_pda)
+
+ if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon.
+ if(l_pocket)
+ equip_item(H, l_pocket, slot_l_store)
+ if(r_pocket)
+ equip_item(H, r_pocket, slot_r_store)
+
+ for(var/path in backpack_contents)
+ var/number = backpack_contents[path]
+ for(var/i = 0, i < number, i++)
+ equip_item(H, path, slot_in_backpack)
+
+ post_equip(H, visualsOnly)
+
+ if(!visualsOnly)
+ apply_fingerprints(H)
+ if(internals_slot)
+ H.internal = H.get_item_by_slot(internals_slot)
+ H.update_action_buttons_icon()
+
+ H.update_body()
+ return 1
+
+/datum/outfit/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.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.l_ear)
+ H.l_ear.add_fingerprint(H, 1)
+ if(H.r_ear)
+ H.r_ear.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)
+ if(H.wear_pda)
+ H.wear_pda.add_fingerprint(H, 1)
+ return 1
\ No newline at end of file
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
new file mode 100644
index 00000000000..e0027a71302
--- /dev/null
+++ b/code/datums/outfits/outfit_admin.dm
@@ -0,0 +1,1066 @@
+// Used for 'select equipment'
+// code/modules/admin/verbs/debug.dm 566
+
+/proc/apply_to_card(obj/item/weapon/card/id/I, mob/living/carbon/human/H, list/access = list(), rank, special_icon)
+ if(!istype(I) || !istype(H))
+ return 0
+
+ I.access = access
+ I.registered_name = H.real_name
+ I.rank = rank
+ I.assignment = rank
+ I.sex = capitalize(H.gender)
+ I.age = H.age
+ I.name = "[I.registered_name]'s ID Card ([I.assignment])"
+ I.photo = get_id_photo(H)
+
+ if(special_icon)
+ I.icon_state = special_icon
+
+/datum/outfit/admin
+/datum/outfit/admin/spacegear
+ name = "Standard Space Gear"
+
+ uniform = /obj/item/clothing/under/color/grey
+ suit = /obj/item/clothing/suit/space
+ back = /obj/item/weapon/tank/jetpack/oxygen
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/helmet/space
+ mask = /obj/item/clothing/mask/breath
+ l_ear = /obj/item/device/radio/headset
+ id = /obj/item/weapon/card/id
+
+/datum/outfit/admin/spacegear/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ if(istype(H.back, /obj/item/weapon/tank/jetpack))
+ var/obj/item/weapon/tank/jetpack/J = H.back
+ J.turn_on()
+ J.toggle_internals(H)
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "Space Explorer")
+
+
+
+/datum/outfit/admin/rig
+ back = /obj/item/weapon/tank/jetpack/oxygen
+ mask = /obj/item/clothing/mask/breath
+ id = /obj/item/weapon/card/id
+
+/datum/outfit/admin/rig/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ if(istype(H.back, /obj/item/weapon/tank/jetpack))
+ var/obj/item/weapon/tank/jetpack/J = H.back
+ J.turn_on()
+ J.toggle_internals(H)
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "RIG Tester")
+
+/datum/outfit/admin/rig/engineer
+ name = "Engineer RIG"
+ suit = /obj/item/clothing/suit/space/rig
+ head = /obj/item/clothing/head/helmet/space/rig
+
+/datum/outfit/admin/rig/ce
+ name = "CE RIG"
+ suit = /obj/item/clothing/suit/space/rig/elite
+ head = /obj/item/clothing/head/helmet/space/rig/elite
+
+/datum/outfit/admin/rig/mining
+ name = "Mining RIG"
+ suit = /obj/item/clothing/suit/space/rig/mining
+ head = /obj/item/clothing/head/helmet/space/rig/mining
+
+/datum/outfit/admin/rig/syndi
+ name = "Syndi RIG"
+ suit = /obj/item/clothing/suit/space/rig/syndi
+ head = /obj/item/clothing/head/helmet/space/rig/syndi
+
+/datum/outfit/admin/rig/wizard
+ name = "Wizard RIG"
+ suit = /obj/item/clothing/suit/space/rig/wizard
+ head = /obj/item/clothing/head/helmet/space/rig/wizard
+
+/datum/outfit/admin/rig/medical
+ name = "Medical RIG"
+ suit = /obj/item/clothing/suit/space/rig/medical
+ head = /obj/item/clothing/head/helmet/space/rig/medical
+
+/datum/outfit/admin/rig/atmos
+ name = "Atmos RIG"
+ suit = /obj/item/clothing/suit/space/rig/atmos
+ head = /obj/item/clothing/head/helmet/space/rig/atmos
+
+
+/datum/outfit/admin/tournament
+ suit = /obj/item/clothing/suit/armor/vest
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/helmet/thunderdome
+ r_pocket = /obj/item/weapon/grenade/smokebomb
+ l_hand = /obj/item/weapon/kitchen/knife
+ r_hand = /obj/item/weapon/gun/energy/pulse/destroyer
+
+/datum/outfit/admin/tournament/red
+ name = "Tournament Standard Red"
+ uniform = /obj/item/clothing/under/color/red
+
+/datum/outfit/admin/tournament/green
+ name = "Tournament Standard Green"
+ uniform = /obj/item/clothing/under/color/green
+
+/datum/outfit/admin/tournament_gangster //gangster are supposed to fight each other. --rastaf0
+ name = "Tournament Gangster"
+
+ uniform = /obj/item/clothing/under/det
+ suit = /obj/item/clothing/suit/storage/det_suit
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/det_hat
+ glasses = /obj/item/clothing/glasses/thermal/monocle
+ l_pocket = /obj/item/ammo_box/a357
+ r_hand = /obj/item/weapon/gun/projectile/automatic/proto
+
+/datum/outfit/admin/tournament_chef //Steven Seagal FTW
+ name = "Tournament Chef"
+
+ uniform = /obj/item/clothing/under/rank/chef
+ suit = /obj/item/clothing/suit/chef
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/chefhat
+ l_pocket = /obj/item/weapon/kitchen/knife
+ r_pocket = /obj/item/weapon/kitchen/knife
+ l_hand = /obj/item/weapon/kitchen/knife
+ r_hand = /obj/item/weapon/kitchen/rollingpin
+
+/datum/outfit/admin/tournament_janitor
+ name = "Tournament Janitor"
+
+ uniform = /obj/item/clothing/under/rank/janitor
+ back = /obj/item/weapon/storage/backpack
+ shoes = /obj/item/clothing/shoes/black
+ l_hand = /obj/item/weapon/reagent_containers/glass/bucket
+ backpack_contents = list(
+ /obj/item/weapon/grenade/chem_grenade/cleaner = 2,
+ /obj/item/stack/tile/plasteel = 7
+ )
+
+/datum/outfit/admin/tournament_janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/reagent_containers/R = H.l_hand
+ if(istype(R))
+ R.reagents.add_reagent("water", 70)
+
+
+
+/datum/outfit/admin/pirate
+ name = "Pirate"
+
+ uniform = /obj/item/clothing/under/pirate
+ back = /obj/item/weapon/storage/backpack/satchel
+ shoes = /obj/item/clothing/shoes/brown
+ head = /obj/item/clothing/head/bandana
+ glasses = /obj/item/clothing/glasses/eyepatch
+ id = /obj/item/weapon/card/id
+ r_hand = /obj/item/weapon/melee/energy/sword/pirate
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1
+ )
+
+/datum/outfit/admin/pirate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Pirate")
+
+/datum/outfit/admin/pirate/space
+ name = "Space Pirate"
+
+ suit = /obj/item/clothing/suit/space/pirate
+ head = /obj/item/clothing/head/helmet/space/pirate
+
+/datum/outfit/admin/pirate/space/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..(H, TRUE)
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Space Pirate")
+
+
+
+/datum/outfit/admin/tunnel_clown
+ name = "Tunnel Clown"
+
+ uniform = /obj/item/clothing/under/rank/clown
+ suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
+ back = /obj/item/weapon/storage/backpack
+ belt = /obj/item/weapon/storage/belt/utility/full/multitool
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/clown_shoes
+ mask = /obj/item/clothing/mask/gas/clown_hat
+ l_ear = /obj/item/device/radio/headset
+ glasses = /obj/item/clothing/glasses/thermal/monocle
+ id = /obj/item/weapon/card/id
+ l_pocket = /obj/item/weapon/reagent_containers/food/snacks/grown/banana
+ r_pocket = /obj/item/weapon/bikehorn
+ r_hand = /obj/item/weapon/twohanded/fireaxe
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+/datum/outfit/admin/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_clown, access_theatre, access_maint_tunnels), "Tunnel Clown")
+
+
+
+/datum/outfit/admin/mime_assassin
+ name = "Mime Assassin"
+
+ uniform = /obj/item/clothing/under/mime
+ suit = /obj/item/clothing/suit/suspenders
+ back = /obj/item/weapon/storage/backpack/mime
+ belt = /obj/item/weapon/storage/belt/utility/full/multitool
+ gloves = /obj/item/clothing/gloves/color/white
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/beret
+ mask = /obj/item/clothing/mask/gas/mime
+ l_ear = /obj/item/device/radio/headset
+ glasses = /obj/item/clothing/glasses/thermal/monocle
+ id = /obj/item/weapon/card/id/syndicate
+ pda = /obj/item/device/pda/mime
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing = 1,
+ /obj/item/weapon/storage/box/syndie_kit/caneshotgun = 1,
+ /obj/item/toy/crayon/mime = 1,
+ /obj/item/weapon/gun/projectile/automatic/pistol = 1,
+ /obj/item/weapon/suppressor = 1,
+ /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath = 2,
+ /obj/item/weapon/pen/sleepy = 1,
+ /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+/datum/outfit/admin/mime_assassin/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(H.gender == FEMALE)
+ uniform = /obj/item/clothing/under/sexymime
+ suit = /obj/item/clothing/mask/gas/sexymime
+
+/datum/outfit/admin/mime_assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/device/pda/PDA = H.wear_pda
+ if(istype(PDA))
+ PDA.owner = H.real_name
+ PDA.ownjob = "Mime"
+ PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_mime, access_theatre, access_maint_tunnels), "Mime")
+
+
+
+/datum/outfit/admin/survivor
+ name = "Survivor"
+
+ uniform = /obj/item/clothing/under/overalls
+ back = /obj/item/weapon/storage/backpack
+ gloves = /obj/item/clothing/gloves/color/latex
+ shoes = /obj/item/clothing/shoes/white
+ l_ear = /obj/item/device/radio/headset
+ id = /obj/item/weapon/card/id
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1
+ )
+
+/datum/outfit/admin/survivor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+
+ for(var/obj/item/I in H.contents)
+ if(!istype(I, /obj/item/weapon/implant))
+ I.add_blood(H)
+
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Survivor")
+
+
+
+/datum/outfit/admin/greytide
+ name = "Greytide"
+
+ uniform = /obj/item/clothing/under/color/grey
+ back = /obj/item/weapon/storage/backpack
+ shoes = /obj/item/clothing/shoes/brown
+ mask = /obj/item/clothing/mask/gas
+ l_ear = /obj/item/device/radio/headset
+ id = /obj/item/weapon/card/id
+ l_hand = /obj/item/weapon/storage/toolbox/mechanical
+ r_hand = /obj/item/flag/grey
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+/datum/outfit/admin/greytide/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Greytide")
+
+/datum/outfit/admin/greytide/leader
+ name = "Greytide Leader"
+
+ belt = /obj/item/weapon/storage/belt/utility/full/multitool
+ gloves = /obj/item/clothing/gloves/color/yellow
+
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/clothing/head/welding = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+/datum/outfit/admin/greytide/leader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..(H, TRUE)
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Greytide Leader")
+
+/datum/outfit/admin/greytide/xeno
+ name = "Greytide Xeno"
+
+ uniform = /obj/item/clothing/under/color/black
+ suit = /obj/item/clothing/suit/xenos
+ back = /obj/item/weapon/storage/backpack/satchel
+ belt = /obj/item/weapon/storage/belt/utility/full/multitool
+ gloves = /obj/item/clothing/gloves/color/yellow
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/xenos
+ glasses = /obj/item/clothing/glasses/thermal
+ l_pocket = /obj/item/weapon/tank/emergency_oxygen/double/full
+ r_pocket = /obj/item/toy/toy_xeno
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/clothing/head/welding = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+/datum/outfit/admin/greytide/xeno/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..(H, TRUE)
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Legit Xenomorph")
+
+
+
+/datum/outfit/admin/masked_killer
+ name = "Masked Killer"
+
+ uniform = /obj/item/clothing/under/overalls
+ suit = /obj/item/clothing/suit/apron
+ back = /obj/item/weapon/storage/backpack
+ gloves = /obj/item/clothing/gloves/color/latex
+ shoes = /obj/item/clothing/shoes/white
+ head = /obj/item/clothing/head/welding
+ mask = /obj/item/clothing/mask/surgical
+ l_ear = /obj/item/device/radio/headset
+ glasses = /obj/item/clothing/glasses/thermal/monocle
+ id = /obj/item/weapon/card/id/syndicate
+ l_pocket = /obj/item/weapon/kitchen/knife
+ r_pocket = /obj/item/weapon/scalpel
+ r_hand = /obj/item/weapon/twohanded/fireaxe
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+/datum/outfit/admin/masked_killer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+
+ for(var/obj/item/I in H.contents)
+ if(!istype(I, /obj/item/weapon/implant))
+ I.add_blood(H)
+
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Masked Killer", "syndie")
+
+
+
+/datum/outfit/admin/dark_lord
+ name = "Dark Lord"
+
+ uniform = /obj/item/clothing/under/color/black
+ suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
+ back = /obj/item/weapon/storage/backpack
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/syndicate
+ id = /obj/item/weapon/card/id/syndicate
+ l_hand = /obj/item/weapon/twohanded/dualsaber/red
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/device/flashlight = 1,
+ )
+
+/datum/outfit/admin/dark_lord/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/clothing/suit/hooded/chaplain_hoodie/C = H.wear_suit
+ if(istype(C))
+ C.name = "dark lord robes"
+ C.hood.name = "dark lord hood"
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "Dark Lord", "syndie")
+
+
+
+/datum/outfit/admin/assassin
+ name = "Assassin"
+
+ uniform = /obj/item/clothing/under/suit_jacket
+ suit = /obj/item/clothing/suit/wcoat
+ back = /obj/item/weapon/storage/backpack
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/syndicate
+ glasses = /obj/item/clothing/glasses/sunglasses
+ id = /obj/item/weapon/card/id/syndicate
+ l_pocket = /obj/item/weapon/melee/energy/sword/saber
+ l_hand = /obj/item/weapon/storage/secure/briefcase
+ pda = /obj/item/device/pda/heads
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/device/flashlight = 1
+ )
+
+ var/briefcase_contents = list(
+ /obj/item/weapon/spacecash/c1000 = 3,
+ /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow = 1,
+ /obj/item/weapon/gun/projectile/revolver/mateba = 1,
+ /obj/item/ammo_box/a357 = 1,
+ /obj/item/weapon/grenade/plastic/c4 = 1
+ )
+
+/datum/outfit/admin/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/storage/secure/briefcase/B = H.l_hand
+ if(istype(B))
+ for(var/obj/item/I in B)
+ qdel(I)
+ for(var/path in briefcase_contents)
+ var/number = backpack_contents[path]
+ for(var/i = 0, i < number, i++)
+ B.handle_item_insertion(new path(B), 1)
+
+ var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H)
+ D.implant(H)
+
+ var/obj/item/device/pda/PDA = H.wear_pda
+ if(istype(PDA))
+ PDA.owner = H.real_name
+ PDA.ownjob = "Reaper"
+ PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "Reaper", "syndie")
+
+
+
+/datum/outfit/admin/spy
+ name = "Spy"
+
+ uniform = /obj/item/clothing/under/suit_jacket/really_black
+ back = /obj/item/weapon/storage/backpack
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/syndicate
+ glasses = /obj/item/clothing/glasses/hud/security/chameleon
+ id = /obj/item/weapon/card/id/syndicate
+ l_pocket = /obj/item/weapon/melee/energy/sword/saber
+ r_pocket = /obj/item/weapon/pen/sleepy
+ pda = /obj/item/device/pda/heads
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1,
+ /obj/item/weapon/gun/projectile/automatic/pistol = 1,
+ /obj/item/weapon/suppressor = 1,
+ /obj/item/weapon/card/emag = 1,
+ /obj/item/device/flashlight = 1,
+ /obj/item/weapon/implanter/storage = 1
+ )
+
+/datum/outfit/admin/spy/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/clothing/gloves/combat/G = H.gloves
+ if(istype(G))
+ G.name = "black gloves"
+
+ var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H)
+ D.implant(H)
+
+ var/obj/item/device/pda/PDA = H.wear_pda
+ if(istype(PDA))
+ PDA.owner = H.real_name
+ PDA.ownjob = "Spy"
+ PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, list(access_maint_tunnels), "Spy", "syndie")
+
+
+
+/datum/outfit/admin/vox
+ name = "Vox"
+ uniform = /obj/item/clothing/under/vox/vox_robes
+ suit = /obj/item/clothing/suit/space/vox/carapace
+ back = /obj/item/weapon/storage/backpack
+ gloves = /obj/item/clothing/gloves/color/yellow/vox
+ shoes = /obj/item/clothing/shoes/magboots/vox
+ head = /obj/item/clothing/head/helmet/space/vox/carapace
+ mask = /obj/item/clothing/mask/gas/syndicate
+ l_ear = /obj/item/device/radio/headset/syndicate
+ glasses = /obj/item/clothing/glasses/thermal/monocle
+ id = /obj/item/weapon/card/id/syndicate/vox
+ l_pocket = /obj/item/weapon/melee/classic_baton/telescopic
+ r_pocket = /obj/item/weapon/tank/emergency_oxygen/vox
+ backpack_contents = list(
+ /obj/item/device/flashlight = 1,
+ /obj/item/weapon/restraints/handcuffs/cable/zipties = 1,
+ /obj/item/device/flash = 1,
+ /obj/item/weapon/gun/energy/noisecannon = 1
+ )
+
+/datum/outfit/admin/vox/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(H.get_species() == "Vox Armalis")
+ . = ..()
+ else
+ H.equip_vox_raider()
+ H.regenerate_icons()
+
+/datum/outfit/admin/vox/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "Vox Armalis", "syndie")
+
+
+
+/datum/outfit/admin/death_commando
+ name = "Death Commando"
+
+/datum/outfit/admin/death_commando/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ return H.equip_death_commando()
+
+
+
+/datum/outfit/admin/syndicate
+ name = "Syndicate Agent"
+
+ uniform = /obj/item/clothing/under/syndicate
+ back = /obj/item/weapon/storage/backpack
+ belt = /obj/item/weapon/storage/belt/utility/full/multitool
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ l_ear = /obj/item/device/radio/headset/syndicate
+ id = /obj/item/weapon/card/id/syndicate
+ r_pocket = /obj/item/device/radio/uplink
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/device/flashlight = 1,
+ /obj/item/weapon/card/emag = 1,
+ /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1
+ )
+
+ var/id_icon = "syndie"
+ var/uplink_uses = 20
+
+/datum/outfit/admin/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_syndicate_access("Syndicate Operative"), name, id_icon)
+
+ var/obj/item/device/radio/uplink/U = H.r_store
+ if(istype(U))
+ U.hidden_uplink.uplink_owner = "[H.key]"
+ U.hidden_uplink.uses = uplink_uses
+
+ var/obj/item/device/radio/R = H.l_ear
+ if(istype(R))
+ R.set_frequency(SYND_FREQ)
+
+/datum/outfit/admin/syndicate/bomber
+ name = "Syndicate Bomber"
+
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/device/flashlight = 1,
+ /obj/item/weapon/card/emag = 1,
+ /obj/item/device/radio/beacon/syndicate/bomb = 2,
+ /obj/item/device/syndicatedetonator = 1,
+ /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1
+ )
+
+/datum/outfit/admin/syndicate/operative
+ name = "Syndicate Operative"
+
+ suit = /obj/item/clothing/suit/space/rig/syndi
+ belt = /obj/item/weapon/storage/belt/military
+ head = /obj/item/clothing/head/helmet/space/rig/syndi
+ mask = /obj/item/clothing/mask/gas/syndicate
+ l_ear = /obj/item/device/radio/headset/syndicate/alt
+ glasses = /obj/item/clothing/glasses/night
+ l_pocket = /obj/item/weapon/pinpointer/advpinpointer
+
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/reagent_containers/food/pill/initropidril = 1,
+ /obj/item/weapon/gun/projectile/automatic/pistol = 1,
+ /obj/item/ammo_box/magazine/m10mm = 1,
+ /obj/item/weapon/crowbar/red = 1,
+ /obj/item/weapon/grenade/plastic/c4 = 1,
+ /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1,
+ /obj/item/device/flashlight = 1,
+ /obj/item/weapon/tank/jetpack/oxygen/harness = 1,
+ )
+
+/datum/outfit/admin/syndicate/operative/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/implant/explosive/E = new(H)
+ E.implant(H)
+
+/datum/outfit/admin/syndicate_strike_team
+ name = "Syndicate Strike Team"
+
+/datum/outfit/admin/syndicate_strike_team/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ return H.equip_syndicate_commando()
+
+/datum/outfit/admin/syndicate/officer
+ name = "Syndicate Officer"
+
+ suit = /obj/item/clothing/suit/space/syndicate/black/red/strike
+ belt = /obj/item/weapon/storage/belt/military
+ head = /obj/item/clothing/head/helmet/space/syndicate/black/red/strike
+ mask = /obj/item/clothing/mask/gas/syndicate
+ l_ear = /obj/item/device/radio/headset/syndicate/alt
+ glasses = /obj/item/clothing/glasses/thermal
+ l_pocket = /obj/item/weapon/pinpointer/advpinpointer
+
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/reagent_containers/food/pill/initropidril = 1,
+ /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket = 1,
+ /obj/item/weapon/tank/jetpack/oxygen/harness = 1
+ )
+
+ id_icon = "commander"
+ uplink_uses = 50
+
+/datum/outfit/admin/syndicate/officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/implant/dust/D = new(H)
+ D.implant(H)
+
+
+
+/datum/outfit/admin/nt_vip
+ name = "NT VIP Guest"
+
+ uniform = /obj/item/clothing/under/suit_jacket/really_black
+ back = /obj/item/weapon/storage/backpack/satchel
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/that
+ l_ear = /obj/item/device/radio/headset/ert
+ id = /obj/item/weapon/card/id/centcom
+ pda = /obj/item/device/pda
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1
+ )
+
+/datum/outfit/admin/nt_vip/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_centcom_access("VIP Guest"), "VIP Guest")
+
+/datum/outfit/admin/nt_navy_officer
+ name = "NT Navy Officer"
+
+ uniform = /obj/item/clothing/under/rank/centcom/officer
+ back = /obj/item/weapon/storage/backpack/satchel
+ belt = /obj/item/weapon/gun/energy/pulse/pistol
+ gloves = /obj/item/clothing/gloves/color/white
+ shoes = /obj/item/clothing/shoes/centcom
+ head = /obj/item/clothing/head/beret/centcom/officer
+ l_ear = /obj/item/device/radio/headset/centcom
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/centcom
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/implanter/dust = 1,
+ /obj/item/weapon/implanter/death_alarm = 1
+ )
+
+/datum/outfit/admin/nt_navy_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer")
+
+ var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H)
+ L.imp_in = H
+ L.implanted = 1
+ H.sec_hud_set_implants()
+
+/datum/outfit/admin/nt_navy_captain
+ name = "NT Navy Captain"
+
+ uniform = /obj/item/clothing/under/rank/centcom/captain
+ back = /obj/item/weapon/storage/backpack/satchel
+ belt = /obj/item/weapon/gun/energy/pulse/pistol
+ gloves = /obj/item/clothing/gloves/color/white
+ shoes = /obj/item/clothing/shoes/centcom
+ head = /obj/item/clothing/head/beret/centcom/captain
+ l_ear = /obj/item/device/radio/headset/centcom
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/centcom
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/implanter/dust = 1,
+ /obj/item/weapon/implanter/death_alarm = 1
+ )
+
+/datum/outfit/admin/nt_navy_captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain")
+
+ var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H)
+ L.imp_in = H
+ L.implanted = 1
+ H.sec_hud_set_implants()
+
+/datum/outfit/admin/nt_special_ops_officer
+ name = "NT Special Ops Officer"
+
+ uniform = /obj/item/clothing/under/syndicate/combat
+ suit = /obj/item/clothing/suit/space/deathsquad/officer
+ back = /obj/item/weapon/storage/backpack/security
+ belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ head = /obj/item/clothing/head/helmet/space/deathsquad/beret
+ mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ l_ear = /obj/item/device/radio/headset/centcom
+ glasses = /obj/item/clothing/glasses/thermal/cyber
+ id = /obj/item/weapon/card/id/centcom
+ r_pocket = /obj/item/weapon/storage/box/matches
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/tank/emergency_oxygen/double/full = 1,
+ /obj/item/weapon/implanter/dust = 1,
+ /obj/item/weapon/implanter/death_alarm = 1,
+ /obj/item/clothing/mask/gas/sechailer/swat = 1,
+ /obj/item/weapon/twohanded/dualsaber/red = 1,
+ /obj/item/weapon/pinpointer/advpinpointer = 1,
+ /obj/item/weapon/reagent_containers/hypospray/combat/nanites = 1,
+ /obj/item/weapon/storage/box/flashbangs = 1,
+ /obj/item/weapon/storage/box/zipties = 1,
+ /obj/item/clothing/shoes/magboots/advance = 1,
+ /obj/item/weapon/implanter/loyalty = 1,
+ )
+
+/datum/outfit/admin/nt_special_ops_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_centcom_access("Special Operations Officer"), "Special Operations Officer")
+
+
+
+/datum/outfit/admin/nt_special_ops_formal
+ name = "NT Special Ops Formal"
+
+ uniform = /obj/item/clothing/under/rank/centcom/captain
+ back = /obj/item/weapon/storage/backpack/satchel
+ belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ head = /obj/item/clothing/head/helmet/space/deathsquad/beret
+ mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ l_ear = /obj/item/device/radio/headset/centcom
+ glasses = /obj/item/clothing/glasses/thermal/cyber
+ id = /obj/item/weapon/card/id/centcom
+ r_pocket = /obj/item/weapon/storage/box/matches
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/melee/classic_baton/telescopic = 1,
+ /obj/item/weapon/implanter/dust = 1,
+ /obj/item/weapon/implanter/death_alarm = 1
+ )
+
+/datum/outfit/admin/nt_special_ops_formal/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/device/pda/PDA = H.wear_pda
+ if(istype(PDA))
+ PDA.owner = H.real_name
+ PDA.ownjob = "Special Operations Officer"
+ PDA.icon_state = "pda-syndi"
+ PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
+ PDA.desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition designed for military field work."
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_centcom_access("Special Operations Officer"), "Special Operations Officer")
+
+
+
+/datum/outfit/admin/singuloth_knight
+ name = "Singuloth Knight"
+
+ uniform = /obj/item/clothing/under/syndicate/combat
+ suit = /obj/item/clothing/suit/space/rig/singuloth
+ back = /obj/item/weapon/twohanded/knighthammer
+ belt = /obj/item/weapon/claymore/ceremonial
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/magboots
+ head = /obj/item/clothing/head/helmet/space/rig/singuloth
+ mask = /obj/item/clothing/mask/breath
+ l_ear = /obj/item/device/radio/headset/ert
+ glasses = /obj/item/clothing/glasses/meson/cyber
+ id = /obj/item/weapon/card/id
+ suit_store = /obj/item/weapon/tank/oxygen
+
+/datum/outfit/admin/singuloth_knight/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "Singuloth Knight")
+
+
+
+/datum/outfit/admin/wizard
+ uniform = /obj/item/clothing/under/color/lightpurple
+ suit = /obj/item/clothing/suit/wizrobe
+ back = /obj/item/weapon/storage/backpack
+ shoes = /obj/item/clothing/shoes/sandal
+ head = /obj/item/clothing/head/wizard
+ l_ear = /obj/item/device/radio/headset
+ id = /obj/item/weapon/card/id
+ r_pocket = /obj/item/weapon/teleportation_scroll
+ l_hand = /obj/item/weapon/twohanded/staff
+ r_hand = /obj/item/weapon/spellbook
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1
+ )
+
+/datum/outfit/admin/wizard/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), "Wizard")
+
+/datum/outfit/admin/wizard/blue
+ name = "Blue Wizard"
+ // the default wizard clothes are blue
+
+/datum/outfit/admin/wizard/red
+ name = "Red Wizard"
+
+ suit = /obj/item/clothing/suit/wizrobe/red
+ head = /obj/item/clothing/head/wizard/red
+
+/datum/outfit/admin/wizard/marisa
+ name = "Marisa Wizard"
+
+ suit = /obj/item/clothing/suit/wizrobe/marisa
+ shoes = /obj/item/clothing/shoes/sandal/marisa
+ head = /obj/item/clothing/head/wizard/marisa
+
+
+
+/datum/outfit/admin/soviet
+ uniform = /obj/item/clothing/under/soviet
+ back = /obj/item/weapon/storage/backpack/satchel
+ head = /obj/item/clothing/head/ushanka
+ id = /obj/item/weapon/card/id
+
+
+/datum/outfit/admin/soviet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses(), name)
+
+/datum/outfit/admin/soviet/tourist
+ name = "Soviet Tourist"
+
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/survival = 1
+ )
+
+/datum/outfit/admin/soviet/soldier
+ name = "Soviet Soldier"
+
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ l_ear = /obj/item/device/radio/headset/syndicate
+ glasses = /obj/item/clothing/glasses/sunglasses
+
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/card/emag = 1,
+ /obj/item/device/flashlight = 1,
+ /obj/item/weapon/grenade/plastic/c4 = 2,
+ /obj/item/weapon/gun/projectile/revolver/mateba = 1,
+ /obj/item/ammo_box/a357 = 3
+ )
+
+/datum/outfit/admin/soviet/admiral
+ name = "Soviet Admiral"
+
+ suit = /obj/item/clothing/suit/hgpirate
+ belt = null
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ head = /obj/item/clothing/head/hgpiratecap
+ mask = null
+ l_ear = /obj/item/device/radio/headset/syndicate
+ r_ear = null
+ glasses = /obj/item/clothing/glasses/thermal/eyepatch
+ id = null
+ l_pocket = null
+ r_pocket = null
+ suit_store = null
+ l_hand = null
+ r_hand = null
+ pda = null
+
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/engineer = 1,
+ /obj/item/weapon/gun/projectile/revolver/mateba = 1,
+ /obj/item/ammo_box/a357 = 3
+ )
+
+
+
+/datum/outfit/admin/chrono
+ name = "Chrono Legionnaire"
+
+ uniform = /obj/item/clothing/under/syndicate
+ suit = /obj/item/clothing/suit/space/chronos
+ back = /obj/item/weapon/chrono_eraser
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ head = /obj/item/clothing/head/helmet/space/chronos
+ mask = /obj/item/clothing/mask/gas/syndicate
+ glasses = /obj/item/clothing/glasses/night
+ id = /obj/item/weapon/card/id/syndicate
+ suit_store = /obj/item/weapon/tank/emergency_oxygen/double/full
+
+/datum/outfit/admin/chrono/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ var/obj/item/weapon/card/id/I = H.wear_id
+ if(istype(I))
+ apply_to_card(I, H, get_all_accesses() + get_all_centcom_access(), name, "syndie")
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index c00e0436473..99a400acfe6 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -157,7 +157,7 @@
wizard_mob.faction = list("wizard")
- wizard_mob.species.equip(wizard_mob)
+ wizard_mob.species.after_equip_job(null, wizard_mob)
to_chat(wizard_mob, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.")
to_chat(wizard_mob, "The spellbook is bound to you, and others cannot use it.")
diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm
index d5cba5be3d0..9d3d5a7ab7a 100644
--- a/code/game/jobs/job/central.dm
+++ b/code/game/jobs/job/central.dm
@@ -8,36 +8,37 @@
spawn_positions = 5
supervisors = "the admins"
selection_color = "#ffdddd"
- idtype = /obj/item/weapon/card/id/centcom
access = list()
minimal_access = list()
admin_only = 1
-
-/datum/job/ntnavyofficer/equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/clothing/under/rank/centcom/officer(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/white(H), slot_gloves)
- H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head)
- H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(H), slot_in_backpack)
-
- H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack)
-
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/ntnavyofficer
/datum/job/ntnavyofficer/get_access()
return get_centcom_access(title)
+/datum/outfit/job/ntnavyofficer
+ name = "Nanotrasen Navy Officer"
+ jobtype = /datum/job/ntnavyofficer
+
+ uniform = /obj/item/clothing/under/rank/centcom/officer
+ gloves = /obj/item/clothing/gloves/color/white
+ shoes = /obj/item/clothing/shoes/centcom
+ head = /obj/item/clothing/head/beret/centcom/officer
+ l_ear = /obj/item/device/radio/headset/centcom
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/centcom
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/gun/energy/pulse/pistol = 1,
+ /obj/item/weapon/implanter/dust = 1,
+ /obj/item/weapon/implanter/death_alarm = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/satchel
+
+
// CC Officials who lead ERTs, Death Squads, etc.
/datum/job/ntspecops
@@ -48,33 +49,34 @@
spawn_positions = 5
supervisors = "the admins"
selection_color = "#ffdddd"
- idtype = /obj/item/weapon/card/id/centcom
access = list()
minimal_access = list()
admin_only = 1
spawn_ert = 1
-
-/datum/job/ntspecops/equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/clothing/under/syndicate/combat(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/combat(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/gloves/combat(H), slot_gloves)
- H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer/navy(H), slot_head)
- H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/suit/space/deathsquad/officer(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(H), slot_belt)
- H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack)
-
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/ntspecops
/datum/job/ntspecops/get_access()
return get_centcom_access(title)
+
+/datum/outfit/job/ntspecops
+ name = "Special Operations Officer"
+ jobtype = /datum/job/ntspecops
+
+ uniform = /obj/item/clothing/under/syndicate/combat
+ suit = /obj/item/clothing/suit/space/deathsquad/officer
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/combat
+ head = /obj/item/clothing/head/beret/centcom/officer/navy
+ l_ear = /obj/item/device/radio/headset/centcom
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/centcom
+ pda = /obj/item/device/pda/centcom
+ backpack_contents = list(
+ /obj/item/weapon/implanter/dust = 1,
+ /obj/item/weapon/gun/energy/pulse/pistol/m1911 = 1,
+ /obj/item/weapon/implanter/death_alarm = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/satchel
\ No newline at end of file
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index a6f1ef11749..40b1dfd8bd1 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -9,20 +9,19 @@
access = list() //See /datum/job/assistant/get_access()
minimal_access = list() //See /datum/job/assistant/get_access()
alt_titles = list("Tourist","Businessman","Trader","Assistant")
-
-/datum/job/civilian/equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/color/random(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ outfit = /datum/outfit/job/assistant
/datum/job/civilian/get_access()
if(config.assistant_maint)
return list(access_maint_tunnels)
else
return list()
+
+/datum/outfit/job/assistant
+ name = "Civilian"
+ jobtype = /datum/job/civilian
+
+ uniform = /obj/item/clothing/under/color/random
+ shoes = /obj/item/clothing/shoes/black
+
+
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index 7e6f664252f..1cdff2ec775 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -7,7 +7,6 @@
is_engineering = 1
supervisors = "the captain"
selection_color = "#ffeeaa"
- idtype = /obj/item/weapon/card/id/ce
req_admin_notify = 1
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
@@ -20,24 +19,28 @@
minimal_player_age = 21
exp_requirements = 600
exp_type = EXP_TYPE_CREW
+ outfit = /datum/outfit/job/chief_engineer
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/ce(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/device/pda/heads/ce(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/head/hardhat/white(H), slot_head)
- H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves)
- H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- return 1
+/datum/outfit/job/chief_engineer
+ name = "Chief Engineer"
+ jobtype = /datum/job/chief_engineer
+ uniform = /obj/item/clothing/under/rank/chief_engineer
+ belt = /obj/item/weapon/storage/belt/utility/full
+ gloves = /obj/item/clothing/gloves/color/black/ce
+ shoes = /obj/item/clothing/shoes/brown
+ head = /obj/item/clothing/head/hardhat/white
+ l_ear = /obj/item/device/radio/headset/heads/ce
+ id = /obj/item/weapon/card/id/ce
+ pda = /obj/item/device/pda/heads/ce
+ backpack_contents = list(
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+
+ backpack = /obj/item/weapon/storage/backpack/industrial
+ satchel = /obj/item/weapon/storage/backpack/satchel_eng
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/engineering
+ box = /obj/item/weapon/storage/box/engineer
/datum/job/engineer
@@ -49,26 +52,29 @@
is_engineering = 1
supervisors = "the chief engineer"
selection_color = "#fff5cc"
- idtype = /obj/item/weapon/card/id/engineering
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_mineral_storeroom)
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_mineral_storeroom)
alt_titles = list("Maintenance Technician","Engine Technician","Electrician")
minimal_player_age = 7
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_or_collect(new /obj/item/clothing/head/hardhat(H), slot_head)
- H.equip_or_collect(new /obj/item/device/t_scanner(H), slot_r_store)
- H.equip_or_collect(new /obj/item/device/pda/engineering(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_in_backpack)
- return 1
+ outfit = /datum/outfit/job/engineer
+
+/datum/outfit/job/engineer
+ name = "Station Engineer"
+ jobtype = /datum/job/engineer
+
+ uniform = /obj/item/clothing/under/rank/engineer
+ belt = /obj/item/weapon/storage/belt/utility/full
+ shoes = /obj/item/clothing/shoes/workboots
+ head = /obj/item/clothing/head/hardhat
+ l_ear = /obj/item/device/radio/headset/headset_eng
+ id = /obj/item/weapon/card/id/engineering
+ l_pocket = /obj/item/device/t_scanner
+ pda = /obj/item/device/pda/engineering
+
+ backpack = /obj/item/weapon/storage/backpack/industrial
+ satchel = /obj/item/weapon/storage/backpack/satchel_eng
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/engineering
+ box = /obj/item/weapon/storage/box/engineer
@@ -81,24 +87,24 @@
is_engineering = 1
supervisors = "the chief engineer"
selection_color = "#fff5cc"
- idtype = /obj/item/weapon/card/id/engineering
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_mineral_storeroom)
minimal_access = list(access_eva, access_atmospherics, access_maint_tunnels, access_external_airlocks, access_emergency_storage, access_construction, access_mineral_storeroom)
alt_titles = list("Atmospheric Technician")
minimal_player_age = 7
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt)
- H.equip_or_collect(new /obj/item/device/pda/atmos(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_in_backpack)
- return 1
+ outfit = /datum/outfit/job/atmos
+
+/datum/outfit/job/atmos
+ name = "Life Support Specialist"
+ jobtype = /datum/job/atmos
+
+ uniform = /obj/item/clothing/under/rank/atmospheric_technician
+ belt = /obj/item/weapon/storage/belt/utility/atmostech
+ shoes = /obj/item/clothing/shoes/workboots
+ l_ear = /obj/item/device/radio/headset/headset_eng
+ id = /obj/item/weapon/card/id/engineering
+ pda = /obj/item/device/pda/atmos
+
+ box = /obj/item/weapon/storage/box/engineer
/datum/job/mechanic
title = "Mechanic"
@@ -109,24 +115,27 @@
is_engineering = 1
supervisors = "the chief engineer"
selection_color = "#fff5cc"
- idtype = /obj/item/weapon/card/id/engineering
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_mechanic, access_external_airlocks, access_mineral_storeroom)
minimal_access = list(access_maint_tunnels, access_emergency_storage, access_mechanic, access_external_airlocks, access_mineral_storeroom)
+ outfit = /datum/outfit/job/mechanic
+/datum/outfit/job/mechanic
+ name = "Mechanic"
+ jobtype = /datum/job/mechanic
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/mechanic(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_or_collect(new /obj/item/clothing/head/hardhat(H), slot_head)
- H.equip_or_collect(new /obj/item/device/t_scanner(H), slot_r_store)
- H.equip_or_collect(new /obj/item/device/pda/engineering(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/pod_paint_bucket(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/rank/mechanic
+ belt = /obj/item/weapon/storage/belt/utility/full
+ shoes = /obj/item/clothing/shoes/workboots
+ head = /obj/item/clothing/head/hardhat
+ l_ear = /obj/item/device/radio/headset/headset_eng
+ id = /obj/item/weapon/card/id/engineering
+ r_pocket = /obj/item/device/t_scanner
+ pda = /obj/item/device/pda/engineering
+ backpack_contents = list(
+ /obj/item/weapon/pod_paint_bucket = 1
+ )
+
+ backpack = /obj/item/weapon/storage/backpack/industrial
+ satchel = /obj/item/weapon/storage/backpack/satchel_eng
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/engineering
+ box = /obj/item/weapon/storage/box/engineer
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index b4dc5610ce6..56e41ad2d82 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -29,9 +29,6 @@
//Sellection screen color
var/selection_color = "#ffffff"
- //the type of the ID the player will have
- var/idtype = /obj/item/weapon/card/id
-
//List of alternate titles, if any
var/list/alt_titles
@@ -57,14 +54,32 @@
var/admin_only = 0
var/spawn_ert = 0
+ var/outfit = null
+
/////////////////////////////////
// /vg/ feature: Job Objectives!
/////////////////////////////////
var/required_objectives=list() // Objectives that are ALWAYS added.
var/optional_objectives=list() // Objectives that are SOMETIMES added.
-/datum/job/proc/equip(var/mob/living/carbon/human/H)
- return 1
+//Only override this proc
+/datum/job/proc/after_spawn(mob/living/carbon/human/H)
+
+/datum/job/proc/announce(mob/living/carbon/human/H)
+
+/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE)
+ if(!H)
+ return 0
+
+ H.species.before_equip_job(src, H, visualsOnly)
+
+ if(outfit)
+ H.equipOutfit(outfit, visualsOnly)
+
+ H.species.after_equip_job(src, H, visualsOnly)
+
+ if(!visualsOnly && announce)
+ announce(H)
/datum/job/proc/get_access()
if(!config) //Needed for robots.
@@ -94,44 +109,138 @@
return max(0, minimal_player_age - C.player_age)
-/datum/job/proc/apply_fingerprints(var/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.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.l_ear)
- H.l_ear.add_fingerprint(H,1)
- if(H.r_ear)
- H.r_ear.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
-
/datum/job/proc/is_position_available()
return (current_positions < total_positions) || (total_positions == -1)
+
+/datum/outfit/job
+ name = "Standard Gear"
+ collect_not_del = TRUE // we don't want anyone to lose their job shit
+
+ var/jobtype = null
+
+ uniform = /obj/item/clothing/under/color/grey
+ id = /obj/item/weapon/card/id
+ l_ear = /obj/item/device/radio/headset
+ back = /obj/item/weapon/storage/backpack
+ shoes = /obj/item/clothing/shoes/black
+ pda = /obj/item/device/pda
+
+ var/list/implants = null
+
+ var/backpack = /obj/item/weapon/storage/backpack
+ var/satchel = /obj/item/weapon/storage/backpack/satchel_norm
+ var/dufflebag = /obj/item/weapon/storage/backpack/duffel
+ var/box = /obj/item/weapon/storage/box/survival
+
+ var/tmp/list/gear_leftovers = list()
+
+/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ switch(H.backbag)
+ if(GBACKPACK)
+ back = /obj/item/weapon/storage/backpack //Grey backpack
+ if(GSATCHEL)
+ back = /obj/item/weapon/storage/backpack/satchel_norm //Grey satchel
+ if(GDUFFLEBAG)
+ back = /obj/item/weapon/storage/backpack/duffel //Grey Dufflebag
+ if(LSATCHEL)
+ back = /obj/item/weapon/storage/backpack/satchel //Leather Satchel
+ if(DSATCHEL)
+ back = satchel //Department satchel
+ if(DDUFFLEBAG)
+ back = dufflebag //Department dufflebag
+ else
+ back = backpack //Department backpack
+
+ var/datum/job/J = job_master.GetJobType(jobtype)
+ if(!J)
+ J = job_master.GetJob(H.job)
+
+ if(box)
+ backpack_contents.Insert(1, box) // Box always takes a first slot in backpack
+ backpack_contents[box] = 1
+
+ if(H.client.prefs.gear && H.client.prefs.gear.len)
+ for(var/gear in H.client.prefs.gear)
+ var/datum/gear/G = gear_datums[gear]
+ if(G)
+ var/permitted = FALSE
+
+ if(G.allowed_roles)
+ if(name in G.allowed_roles)
+ permitted = TRUE
+ else
+ permitted = TRUE
+
+ if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted)))
+ permitted = FALSE
+
+ if(!permitted)
+ to_chat(H, "Your current job or whitelist status does not permit you to spawn with [gear]!")
+
+ if(G.slot)
+ if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot))
+ to_chat(H, "Equipping you with [gear]!")
+ else
+ gear_leftovers += G
+ else
+ gear_leftovers += G
+
+/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(visualsOnly)
+ return
+
+ var/datum/job/J = job_master.GetJobType(jobtype)
+ if(!J)
+ J = job_master.GetJob(H.job)
+
+ var/obj/item/weapon/card/id/C = H.wear_id
+ if(istype(C))
+ C.access = J.get_access()
+ C.registered_name = H.real_name
+ C.rank = J.title
+ C.assignment = J.title
+ C.sex = capitalize(H.gender)
+ C.age = H.age
+ C.name = "[C.registered_name]'s ID Card ([C.assignment])"
+ C.photo = get_id_photo(H)
+
+ if(H.mind && H.mind.initial_account)
+ C.associated_account_number = H.mind.initial_account.account_number
+
+ H.sec_hud_set_ID()
+
+ var/obj/item/device/pda/PDA = H.wear_pda
+ if(istype(PDA))
+ PDA.owner = H.real_name
+ PDA.ownjob = C.assignment
+ PDA.ownrank = C.rank
+ PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
+
+ if(implants)
+ for(var/implant_type in implants)
+ var/obj/item/weapon/implant/I = new implant_type(H)
+ I.imp_in = H
+ I.implanted = 1
+ H.sec_hud_set_implants()
+
+ if(gear_leftovers.len)
+ for(var/datum/gear/G in gear_leftovers)
+ var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.gear[G.display_name]))
+ if(istype(placed_in))
+ if(isturf(placed_in))
+ to_chat(H, "Placing \the [G] on [placed_in]!")
+ else
+ to_chat(H, "Placing \the [G] in [placed_in.name]]")
+ continue
+ if(H.equip_to_appropriate_slot(G))
+ to_chat(H, "Placing \the [G] in your inventory!")
+ continue
+ if(H.put_in_hands(G))
+ to_chat(H, "Placing \the [G] in your hands!")
+ continue
+ to_chat(H, "Failed to locate a storage object on your mob, either you spawned with no hands free and no backpack or this is a bug.")
+ qdel(G)
+
+ qdel(gear_leftovers)
+
+ return 1
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 9e4e5f5acee..3c6d6f7fe01 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -7,7 +7,6 @@
is_medical = 1
supervisors = "the captain"
selection_color = "#ffddf0"
- idtype = /obj/item/weapon/card/id/cmo
req_admin_notify = 1
access = list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
@@ -18,25 +17,27 @@
minimal_player_age = 21
exp_requirements = 600
exp_type = EXP_TYPE_CREW
+ outfit = /datum/outfit/job/cmo
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/cmo(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/heads/cmo(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/cmo(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- return 1
+/datum/outfit/job/cmo
+ name = "Chief Medical Officer"
+ jobtype = /datum/job/cmo
+ uniform = /obj/item/clothing/under/rank/chief_medical_officer
+ suit = /obj/item/clothing/suit/storage/labcoat/cmo
+ shoes = /obj/item/clothing/shoes/brown
+ l_ear = /obj/item/device/radio/headset/heads/cmo
+ id = /obj/item/weapon/card/id/cmo
+ suit_store = /obj/item/device/flashlight/pen
+ l_hand = /obj/item/weapon/storage/firstaid/adv
+ pda = /obj/item/device/pda/heads/cmo
+ backpack_contents = list(
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+ backpack = /obj/item/weapon/storage/backpack/medic
+ satchel = /obj/item/weapon/storage/backpack/satchel_med
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/medical
/datum/job/doctor
title = "Medical Doctor"
@@ -47,54 +48,56 @@
is_medical = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- idtype = /obj/item/weapon/card/id/medical
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom)
minimal_access = list(access_medical, access_morgue, access_surgery, access_maint_tunnels)
alt_titles = list("Surgeon","Nurse","Coroner")
minimal_player_age = 3
+ outfit = /datum/outfit/job/doctor
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(H.mind.role_alt_title)
- switch(H.mind.role_alt_title)
- if("Coroner")
- H.equip_or_collect(new /obj/item/clothing/under/rank/medical/mortician(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/mortician(H), slot_wear_suit)
- if(H.backbag != 1)
- H.equip_or_collect(new /obj/item/clothing/head/surgery/black(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/autopsy_scanner(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/device/mass_spectrometer(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/bodybags(H), slot_in_backpack)
- if("Surgeon")
- H.equip_or_collect(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/head/surgery/blue(H), slot_head)
- if("Medical Doctor")
- H.equip_or_collect(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
- if("Nurse")
- if(H.gender == FEMALE)
- if(prob(50))
- H.equip_or_collect(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform)
- else
- H.equip_or_collect(new /obj/item/clothing/under/rank/nurse(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/head/nursehat(H), slot_head)
+/datum/outfit/job/doctor
+ name = "Medical Doctor"
+ jobtype = /datum/job/doctor
+
+ uniform = /obj/item/clothing/under/rank/medical
+ suit = /obj/item/clothing/suit/storage/labcoat
+ shoes = /obj/item/clothing/shoes/white
+ l_ear = /obj/item/device/radio/headset/headset_med
+ id = /obj/item/weapon/card/id/medical
+ suit_store = /obj/item/device/flashlight/pen
+ l_hand = /obj/item/weapon/storage/firstaid/adv
+ pda = /obj/item/device/pda/medical
+
+ backpack = /obj/item/weapon/storage/backpack/medic
+ satchel = /obj/item/weapon/storage/backpack/satchel_med
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/medical
+
+/datum/outfit/job/doctor/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(H.mind.role_alt_title)
+ switch(H.mind.role_alt_title)
+ if("Coroner")
+ uniform = /obj/item/clothing/under/rank/medical/mortician
+ suit = /obj/item/clothing/suit/storage/labcoat/mortician
+ backpack_contents = list(
+ /obj/item/clothing/head/surgery/black = 1,
+ /obj/item/weapon/autopsy_scanner = 1,
+ /obj/item/device/mass_spectrometer = 1,
+ /obj/item/weapon/storage/box/bodybags = 1
+ )
+ if("Surgeon")
+ uniform = /obj/item/clothing/under/rank/medical/blue
+ head = /obj/item/clothing/head/surgery/blue
+ if("Medical Doctor")
+ uniform = /obj/item/clothing/under/rank/medical
+ if("Nurse")
+ if(H.gender == FEMALE)
+ if(prob(50))
+ uniform = /obj/item/clothing/under/rank/nursesuit
else
- H.equip_or_collect(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)
- else
- H.equip_or_collect(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/rank/nurse
+ head = /obj/item/clothing/head/nursehat
+ else
+ uniform = /obj/item/clothing/under/rank/medical/purple
@@ -108,28 +111,27 @@
is_medical = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- idtype = /obj/item/weapon/card/id/medical
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom)
minimal_access = list(access_medical, access_chemistry, access_maint_tunnels, access_mineral_storeroom)
alt_titles = list("Pharmacist","Pharmacologist")
minimal_player_age = 7
+ outfit = /datum/outfit/job/chemist
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/glasses/science(H), slot_glasses)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_wear_pda)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/chemist(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+/datum/outfit/job/chemist
+ name = "Chemist"
+ jobtype = /datum/job/chemist
+ uniform = /obj/item/clothing/under/rank/chemist
+ suit = /obj/item/clothing/suit/storage/labcoat/chemist
+ shoes = /obj/item/clothing/shoes/white
+ l_ear = /obj/item/device/radio/headset/headset_med
+ glasses = /obj/item/clothing/glasses/science
+ id = /obj/item/weapon/card/id/medical
+ pda = /obj/item/device/pda/chemist
+ backpack = /obj/item/weapon/storage/backpack/chemistry
+ satchel = /obj/item/weapon/storage/backpack/satchel_chem
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/chemistry
/datum/job/geneticist
title = "Geneticist"
@@ -140,25 +142,27 @@
is_medical = 1
supervisors = "the chief medical officer and the research director"
selection_color = "#ffeef0"
- idtype = /obj/item/weapon/card/id/medical
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research, access_mineral_storeroom)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research, access_maint_tunnels)
minimal_player_age = 3
+ outfit = /datum/outfit/job/geneticist
+
+/datum/outfit/job/geneticist
+ name = "Geneticist"
+ jobtype = /datum/job/geneticist
+
+ uniform = /obj/item/clothing/under/rank/geneticist
+ suit = /obj/item/clothing/suit/storage/labcoat/genetics
+ shoes = /obj/item/clothing/shoes/white
+ l_ear = /obj/item/device/radio/headset/headset_medsci
+ id = /obj/item/weapon/card/id/medical
+ suit_store = /obj/item/device/flashlight/pen
+ pda = /obj/item/device/pda/geneticist
+
+ backpack = /obj/item/weapon/storage/backpack/genetics
+ satchel = /obj/item/weapon/storage/backpack/satchel_gen
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/genetics
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_medsci(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_wear_pda)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/genetics(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
/datum/job/virologist
title = "Virologist"
@@ -169,27 +173,28 @@
is_medical = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- idtype = /obj/item/weapon/card/id/medical
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_virology, access_maint_tunnels, access_mineral_storeroom)
alt_titles = list("Pathologist","Microbiologist")
minimal_player_age = 7
+ outfit = /datum/outfit/job/virologist
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_vir(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/device/pda/viro(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
- H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/virologist(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+/datum/outfit/job/virologist
+ name = "Virologist"
+ jobtype = /datum/job/virologist
+
+ uniform = /obj/item/clothing/under/rank/virologist
+ suit = /obj/item/clothing/suit/storage/labcoat/virologist
+ shoes = /obj/item/clothing/shoes/white
+ mask = /obj/item/clothing/mask/surgical
+ l_ear = /obj/item/device/radio/headset/headset_med
+ id = /obj/item/weapon/card/id/medical
+ suit_store = /obj/item/device/flashlight/pen
+ pda = /obj/item/device/pda/viro
+
+ backpack = /obj/item/weapon/storage/backpack/virology
+ satchel = /obj/item/weapon/storage/backpack/satchel_vir
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/virology
/datum/job/psychiatrist
title = "Psychiatrist"
@@ -200,34 +205,33 @@
is_medical = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- idtype = /obj/item/weapon/card/id/medical
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_psychiatrist)
minimal_access = list(access_medical, access_psychiatrist, access_maint_tunnels)
alt_titles = list("Psychologist","Therapist")
+ outfit = /datum/outfit/job/psychiatrist
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(H.mind.role_alt_title)
- switch(H.mind.role_alt_title)
- if("Psychiatrist")
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform)
- if("Psychologist")
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform)
- if("Therapist")
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- else
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+/datum/outfit/job/psychiatrist
+ name = "Psychiatrist"
+ jobtype = /datum/job/psychiatrist
+
+ uniform = /obj/item/clothing/under/rank/medical
+ suit = /obj/item/clothing/suit/storage/labcoat
+ shoes = /obj/item/clothing/shoes/laceup
+ l_ear = /obj/item/device/radio/headset/headset_med
+ id = /obj/item/weapon/card/id/medical
+ suit_store = /obj/item/device/flashlight/pen
+ pda = /obj/item/device/pda/medical
+
+/datum/outfit/job/psychiatrist/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(H.mind.role_alt_title)
+ switch(H.mind.role_alt_title)
+ if("Psychiatrist")
+ uniform = /obj/item/clothing/under/rank/psych
+ if("Psychologist")
+ uniform = /obj/item/clothing/under/rank/psych/turtleneck
+ if("Therapist")
+ uniform = /obj/item/clothing/under/rank/medical
/datum/job/paramedic
title = "Paramedic"
@@ -238,23 +242,29 @@
is_medical = 1
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
- idtype = /obj/item/weapon/card/id/medical
access = list(access_paramedic, access_medical, access_sec_doors, access_maint_tunnels, access_external_airlocks, access_morgue)
minimal_access=list(access_paramedic, access_medical, access_sec_doors, access_maint_tunnels, access_external_airlocks, access_morgue)
minimal_player_age = 3
+ outfit = /datum/outfit/job/paramedic
+/datum/outfit/job/paramedic
+ name = "Paramedic"
+ jobtype = /datum/job/paramedic
+
+ uniform = /obj/item/clothing/under/rank/medical/paramedic
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/soft/blue
+ mask = /obj/item/clothing/mask/cigarette
+ l_ear = /obj/item/device/radio/headset/headset_med
+ id = /obj/item/weapon/card/id/medical
+ l_pocket = /obj/item/device/flashlight/pen
+ pda = /obj/item/device/pda/medical
+ backpack_contents = list(
+ /obj/item/device/healthanalyzer = 1
+ )
+
+ backpack = /obj/item/weapon/storage/backpack/medic
+ satchel = /obj/item/weapon/storage/backpack/satchel_med
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/medical
+ box = /obj/item/weapon/storage/box/engineer
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- if(H.backbag == 2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/medic (H), slot_back)
- if(H.backbag == 3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/mask/cigarette(H), slot_wear_mask)
- H.equip_or_collect(new /obj/item/clothing/head/soft/blue(H), slot_head)
- H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/device/healthanalyzer(H), slot_in_backpack)
- return 1
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 2e07a08b2bc..2701589b2db 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -1,4 +1,4 @@
-/datum/job/rd
+/datum/job/rd
title = "Research Director"
flag = RD
department_flag = MEDSCI
@@ -7,42 +7,45 @@
is_science = 1
supervisors = "the captain"
selection_color = "#ffddff"
- req_admin_notify = 1
- idtype = /obj/item/weapon/card/id/rd
+ req_admin_notify = 1
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
- access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
- access_research, access_robotics, access_xenobiology, access_ai_upload,
- access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_mineral_storeroom)
+ access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
+ access_research, access_robotics, access_xenobiology, access_ai_upload,
+ access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_mineral_storeroom)
minimal_access = list(access_eva, access_rd, access_heads, access_tox, access_genetics, access_morgue,
- access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
- access_research, access_robotics, access_xenobiology, access_ai_upload,
- access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_maint_tunnels, access_mineral_storeroom)
+ access_tox_storage, access_tech_storage, access_teleporter, access_sec_doors,
+ access_research, access_robotics, access_xenobiology, access_ai_upload,
+ access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_minisat, access_maint_tunnels, access_mineral_storeroom)
minimal_player_age = 21
exp_requirements = 600
exp_type = EXP_TYPE_CREW
// All science-y guys get bonuses for maxing out their tech.
- required_objectives=list(
+ required_objectives = list(
/datum/job_objective/further_research
- )
-
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/science(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/rd(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_wear_pda)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- return 1
-
-
+ )
+
+ outfit = /datum/outfit/job/rd
+
+/datum/outfit/job/rd
+ name = "Research Director"
+ jobtype = /datum/job/rd
+
+ uniform = /obj/item/clothing/under/rank/research_director
+ suit = /obj/item/clothing/suit/storage/labcoat
+ shoes = /obj/item/clothing/shoes/brown
+ l_ear = /obj/item/device/radio/headset/heads/rd
+ id = /obj/item/weapon/card/id/rd
+ l_hand = /obj/item/weapon/clipboard
+ pda = /obj/item/device/pda/heads/rd
+ backpack_contents = list(
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+
+ backpack = /obj/item/weapon/storage/backpack/science
+ satchel = /obj/item/weapon/storage/backpack/satchel_tox
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/science
+
/datum/job/scientist
title = "Scientist"
@@ -53,33 +56,34 @@
is_science = 1
supervisors = "the research director"
selection_color = "#ffeeff"
- idtype = /obj/item/weapon/card/id/research
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch, access_mineral_storeroom)
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch, access_maint_tunnels, access_mineral_storeroom)
alt_titles = list("Xenoarcheologist", "Anomalist", "Plasma Researcher", "Xenobiologist", "Chemical Researcher")
minimal_player_age = 3
// All science-y guys get bonuses for maxing out their tech.
- required_objectives=list(
+ required_objectives = list(
/datum/job_objective/further_research
- )
-
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/science(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/toxins(H), slot_wear_pda)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
-
-
-
+ )
+
+ outfit = /datum/outfit/job/scientist
+
+/datum/outfit/job/scientist
+ name = "Scientist"
+ jobtype = /datum/job/scientist
+
+ uniform = /obj/item/clothing/under/rank/scientist
+ suit = /obj/item/clothing/suit/storage/labcoat/science
+ shoes = /obj/item/clothing/shoes/white
+ l_ear = /obj/item/device/radio/headset/headset_sci
+ id = /obj/item/weapon/card/id/research
+ pda = /obj/item/device/pda/toxins
+
+ backpack = /obj/item/weapon/storage/backpack/science
+ satchel = /obj/item/weapon/storage/backpack/satchel_tox
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/science
+
+
/datum/job/roboticist
title = "Roboticist"
flag = ROBOTICIST
@@ -89,28 +93,26 @@
is_science = 1
supervisors = "the research director"
selection_color = "#ffeeff"
- idtype = /obj/item/weapon/card/id/research
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom) //As a job that handles so many corpses, it makes sense for them to have morgue access.
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_maint_tunnels, access_mineral_storeroom) //As a job that handles so many corpses, it makes sense for them to have morgue access.
alt_titles = list("Biomechanical Engineer","Mechatronic Engineer")
minimal_player_age = 3
- required_objectives=list(
+ required_objectives = list(
/datum/job_objective/make_cyborg,
/datum/job_objective/make_ripley
- )
-
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/roboticist(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ )
+
+ outfit = /datum/outfit/job/roboticist
+
+/datum/outfit/job/roboticist
+ name = "Roboticist"
+ jobtype = /datum/job/roboticist
+
+ uniform = /obj/item/clothing/under/rank/roboticist
+ suit = /obj/item/clothing/suit/storage/labcoat
+ belt = /obj/item/weapon/storage/belt/utility/full
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_sci
+ id = /obj/item/weapon/card/id/research
+ pda = /obj/item/device/pda/roboticist
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index cd1e3fb370d..62b248c4875 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -7,7 +7,6 @@
is_security = 1
supervisors = "the captain"
selection_color = "#ffdddd"
- idtype = /obj/item/weapon/card/id/hos
req_admin_notify = 1
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court,
access_forensics_lockers, access_pilot, access_morgue, access_maint_tunnels, access_all_personal_lockers,
@@ -20,30 +19,32 @@
minimal_player_age = 21
exp_requirements = 600
exp_type = EXP_TYPE_CREW
+ outfit = /datum/outfit/job/hos
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/hos/alt(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/suit/armor/hos(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves)
- H.equip_or_collect(new /obj/item/clothing/head/HoS(H), slot_head)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/gun(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+/datum/outfit/job/hos
+ name = "Head of Security"
+ jobtype = /datum/job/hos
+
+ uniform = /obj/item/clothing/under/rank/head_of_security
+ suit = /obj/item/clothing/suit/armor/hos
+ gloves = /obj/item/clothing/gloves/color/black/hos
+ shoes = /obj/item/clothing/shoes/jackboots
+ head = /obj/item/clothing/head/HoS
+ l_ear = /obj/item/device/radio/headset/heads/hos/alt
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/hos
+ suit_store = /obj/item/weapon/gun/energy/gun
+ pda = /obj/item/device/pda/heads/hos
+ backpack_contents = list(
+ /obj/item/weapon/restraints/handcuffs = 1,
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/security
+ satchel = /obj/item/weapon/storage/backpack/satchel_sec
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/security
@@ -56,37 +57,37 @@
is_security = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- idtype = /obj/item/weapon/card/id/security
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons)
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_weapons)
minimal_player_age = 21
exp_requirements = 300
exp_type = EXP_TYPE_CREW
+ outfit = /datum/outfit/job/warden
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sec/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/warden(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head)
- H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
-// H.equip_or_collect(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
- H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+/datum/outfit/job/warden
+ name = "Warden"
+ jobtype = /datum/job/warden
+
+ uniform = /obj/item/clothing/under/rank/warden
+ suit = /obj/item/clothing/suit/armor/vest/warden
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/jackboots
+ head = /obj/item/clothing/head/warden
+ l_ear = /obj/item/device/radio/headset/headset_sec/alt
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/security
+ l_pocket = /obj/item/device/flash
+ suit_store = /obj/item/weapon/gun/energy/gun/advtaser
+ pda = /obj/item/device/pda/warden
+ backpack_contents = list(
+ /obj/item/weapon/restraints/handcuffs = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/security
+ satchel = /obj/item/weapon/storage/backpack/satchel_sec
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/security
@@ -100,50 +101,53 @@
supervisors = "the head of security"
selection_color = "#ffeeee"
alt_titles = list("Forensic Technician")
- idtype = /obj/item/weapon/card/id/security
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons)
minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons)
alt_titles = list("Forensic Technician")
minimal_player_age = 14
exp_requirements = 300
exp_type = EXP_TYPE_CREW
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sec/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/det(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/detective(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/toy/crayon/white(H), slot_l_store)
-/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
- CIG.light("")
- H.equip_or_collect(CIG, slot_wear_mask) */
- H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/noir(H),slot_glasses)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
- if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician")
- H.equip_or_collect(new /obj/item/clothing/suit/storage/det_suit/forensics/blue(H), slot_wear_suit)
- else
- H.equip_or_collect(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/head/det_hat(H), slot_head)
- H.equip_or_collect(new /obj/item/weapon/lighter/zippo(H), slot_l_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/device/detective_scanner(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
+ outfit = /datum/outfit/job/detective
- H.dna.SetSEState(SOBERBLOCK,1)
- H.mutations += SOBER
- H.check_mutations = 1
- return 1
+/datum/outfit/job/detective
+ name = "Detective"
+ jobtype = /datum/job/detective
+ uniform = /obj/item/clothing/under/det
+ suit = /obj/item/clothing/suit/storage/det_suit
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/brown
+ head = /obj/item/clothing/head/det_hat
+ l_ear = /obj/item/device/radio/headset/headset_sec/alt
+ glasses = /obj/item/clothing/glasses/sunglasses/noir
+ id = /obj/item/weapon/card/id/security
+ l_pocket = /obj/item/toy/crayon/white
+ r_pocket = /obj/item/weapon/lighter/zippo
+ pda = /obj/item/device/pda/detective
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/evidence = 1,
+ /obj/item/device/detective_scanner = 1,
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+/datum/outfit/job/detective/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(H.mind.role_alt_title)
+ switch(H.mind.role_alt_title)
+ if("Forensic Technician")
+ suit = /obj/item/clothing/suit/storage/det_suit/forensics/blue
+ head = null
+
+/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ H.dna.SetSEState(SOBERBLOCK,1)
+ H.mutations += SOBER
+ H.check_mutations = 1
/datum/job/officer
title = "Security Officer"
@@ -154,34 +158,38 @@
is_security = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- idtype = /obj/item/weapon/card/id/security
access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_weapons)
minimal_player_age = 14
exp_requirements = 300
exp_type = EXP_TYPE_CREW
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sec/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/security(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(H), slot_head)
- H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store)
- H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/officer
+
+/datum/outfit/job/officer
+ name = "Security Officer"
+ jobtype = /datum/job/officer
+
+ uniform = /obj/item/clothing/under/rank/security
+ suit = /obj/item/clothing/suit/armor/vest/security
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/jackboots
+ head = /obj/item/clothing/head/helmet
+ l_ear = /obj/item/device/radio/headset/headset_sec/alt
+ id = /obj/item/weapon/card/id/security
+ l_pocket = /obj/item/device/flash
+ suit_store = /obj/item/weapon/gun/energy/gun/advtaser
+ pda = /obj/item/device/pda/security
+ backpack_contents = list(
+ /obj/item/weapon/restraints/handcuffs = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/security
+ satchel = /obj/item/weapon/storage/backpack/satchel_sec
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/security
+
+
/datum/job/brigdoc
title = "Brig Physician"
@@ -192,30 +200,31 @@
is_security = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- idtype = /obj/item/weapon/card/id/security
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
minimal_access = list(access_medical, access_morgue, access_surgery, access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels)
+ outfit = /datum/outfit/job/brigdoc
+
+/datum/outfit/job/brigdoc
+ name = "Brig Physician"
+ jobtype = /datum/job/brigdoc
+
+ uniform = /obj/item/clothing/under/rank/security/brigphys
+ suit = /obj/item/clothing/suit/storage/fr_jacket
+ shoes = /obj/item/clothing/shoes/white
+ l_ear = /obj/item/device/radio/headset/headset_sec/alt
+ glasses = /obj/item/clothing/glasses/hud/health/health_advanced
+ id = /obj/item/weapon/card/id/security
+ suit_store = /obj/item/device/flashlight/pen
+ l_hand = /obj/item/weapon/storage/firstaid/adv
+ pda = /obj/item/device/pda/medical
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/medic
+ satchel = /obj/item/weapon/storage/backpack/satchel_med
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/medical
+
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sec/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/security/brigphys(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/fr_jacket(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/health/health_advanced, slot_glasses)
- H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
/datum/job/pilot
title = "Security Pod Pilot"
@@ -226,28 +235,31 @@
is_security = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- idtype = /obj/item/weapon/card/id/security
access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons, access_pilot, access_external_airlocks)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_weapons, access_pilot, access_external_airlocks)
minimal_player_age = 7
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sec/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/security/pod_pilot(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/jacket/pilot(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store)
- H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/pilot
+
+/datum/outfit/job/pilot
+ name = "Security Pod Pilot"
+ jobtype = /datum/job/pilot
+
+ uniform = /obj/item/clothing/under/rank/security/pod_pilot
+ suit = /obj/item/clothing/suit/jacket/pilot
+ gloves = /obj/item/clothing/gloves/color/black
+ shoes = /obj/item/clothing/shoes/jackboots
+ l_ear = /obj/item/device/radio/headset/headset_sec/alt
+ id = /obj/item/weapon/card/id/security
+ l_pocket = /obj/item/device/flash
+ suit_store = /obj/item/weapon/gun/energy/gun/advtaser
+ pda = /obj/item/device/pda/security
+ backpack_contents = list(
+ /obj/item/weapon/restraints/handcuffs = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/security
+ satchel = /obj/item/weapon/storage/backpack/satchel_sec
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/security
+ box = /obj/item/weapon/storage/box/engineer
\ No newline at end of file
diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm
index 1331db02791..1b092087997 100644
--- a/code/game/jobs/job/silicon.dm
+++ b/code/game/jobs/job/silicon.dm
@@ -11,9 +11,9 @@
exp_requirements = 1200
exp_type = EXP_TYPE_CREW
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- return 1
+/datum/job/ai/equip(mob/living/carbon/human/H)
+ if(!H)
+ return 0
/datum/job/ai/is_position_available()
return (empty_playable_ai_cores.len != 0)
@@ -32,6 +32,7 @@
exp_type = EXP_TYPE_CREW
alt_titles = list("Android", "Robot")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- return 1
\ No newline at end of file
+/datum/job/cyborg/equip(mob/living/carbon/human/H)
+ if(!H)
+ return 0
+ return H.Robotize()
\ No newline at end of file
diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm
index 981753c5aee..15b98df30ad 100644
--- a/code/game/jobs/job/supervisor.dm
+++ b/code/game/jobs/job/supervisor.dm
@@ -7,7 +7,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
spawn_positions = 1
supervisors = "Nanotrasen officials"
selection_color = "#ccccff"
- idtype = /obj/item/weapon/card/id/gold
req_admin_notify = 1
is_command = 1
access = list() //See get_access()
@@ -15,36 +14,45 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
minimal_player_age = 30
exp_requirements = 1200
exp_type = EXP_TYPE_CREW
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/captain/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_cap(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/captain(H)
+ outfit = /datum/outfit/job/captain
+
+/datum/job/captain/get_access()
+ return get_all_accesses()
+
+/datum/job/captain/announce(mob/living/carbon/human/H)
+ . = ..()
+ captain_announcement.Announce("All hands, Captain [H.real_name] on deck!")
+ callHook("captain_spawned", list("captain" = H))
+
+/datum/outfit/job/captain
+ name = "Captain"
+ jobtype = /datum/job/captain
+
+ uniform = /obj/item/clothing/under/rank/captain
+ suit = /obj/item/clothing/suit/armor/vest/capcarapace
+ shoes = /obj/item/clothing/shoes/brown
+ head = /obj/item/clothing/head/caphat
+ l_ear = /obj/item/device/radio/headset/heads/captain/alt
+ glasses = /obj/item/clothing/glasses/sunglasses
+ id = /obj/item/weapon/card/id/gold
+ pda = /obj/item/device/pda/captain
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/ids = 1,
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/captain
+ satchel = /obj/item/weapon/storage/backpack/satchel_cap
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/captain
+
+/datum/outfit/job/captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(H && H.w_uniform)
+ var/obj/item/clothing/under/U = H.w_uniform
var/obj/item/clothing/accessory/medal/gold/captain/M = new /obj/item/clothing/accessory/medal/gold/captain(U)
U.accessories += M
M.on_attached(U)
- H.equip_or_collect(U, slot_w_uniform)
- H.equip_or_collect(new /obj/item/device/pda/captain(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/capcarapace(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/head/caphat(H), slot_head)
- H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- captain_announcement.Announce("All hands, Captain [H.real_name] on deck!")
- callHook("captain_spawned", list("captain" = H))
- return 1
-
- get_access()
- return get_all_accesses()
@@ -56,7 +64,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ddddff"
- idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
is_command = 1
minimal_player_age = 21
@@ -75,22 +82,25 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_weapons, access_mineral_storeroom)
+ outfit = /datum/outfit/job/hop
+
+/datum/outfit/job/hop
+ name = "Head of Personnel"
+ jobtype = /datum/job/hop
+
+ uniform = /obj/item/clothing/under/rank/head_of_personnel
+ shoes = /obj/item/clothing/shoes/brown
+ head = /obj/item/clothing/head/hopcap
+ l_ear = /obj/item/device/radio/headset/heads/hop
+ id = /obj/item/weapon/card/id/silver
+ pda = /obj/item/device/pda/heads/hop
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/ids = 1,
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+
+ implants = list()
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/hop(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/head/hopcap(H), slot_head)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/heads/hop(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
/datum/job/nanotrasenrep
@@ -101,7 +111,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
spawn_positions = 1
supervisors = "the command staff"
selection_color = "#ddddff"
- idtype = /obj/item/weapon/card/id/nanotrasen
req_admin_notify = 1
is_command = 1
minimal_player_age = 21
@@ -118,25 +127,26 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_weapons, access_ntrep)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/ntrep(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/ntcane(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/lighter/zippo/nt_rep(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/clothing/under/rank/ntrep(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/ntrep(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/heads/ntrep(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/nanotrasenrep
+
+/datum/outfit/job/nanotrasenrep
+ name = "Nanotrasen Representative"
+ jobtype = /datum/job/nanotrasenrep
+
+ uniform = /obj/item/clothing/under/rank/ntrep
+ suit = /obj/item/clothing/suit/storage/ntrep
+ shoes = /obj/item/clothing/shoes/centcom
+ l_ear = /obj/item/device/radio/headset/heads/ntrep
+ id = /obj/item/weapon/card/id/nanotrasen
+ l_pocket = /obj/item/weapon/lighter/zippo/nt_rep
+ pda = /obj/item/device/pda/heads/ntrep
+ backpack_contents = list(
+ /obj/item/weapon/melee/classic_baton/ntcane = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+
/datum/job/blueshield
title = "Blueshield"
@@ -146,7 +156,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
spawn_positions = 1
supervisors = "the Nanotrasen representative"
selection_color = "#ddddff"
- idtype = /obj/item/weapon/card/id/nanotrasen
req_admin_notify = 1
is_command = 1
minimal_player_age = 21
@@ -159,27 +168,29 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
minimal_access = list(access_forensics_lockers, access_sec_doors, access_medical, access_construction, access_engine, access_maint_tunnels, access_research,
access_RC_announce, access_keycard_auth, access_heads, access_blueshield, access_weapons)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/blueshield/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/gloves/combat(H), slot_gloves)
- H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/health/health_advanced, slot_glasses)
- H.equip_or_collect(new /obj/item/clothing/under/rank/blueshield(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/blueshield(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/device/pda/heads/blueshield(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/deathimp(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/gun/blueshield(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/blueshield
+
+/datum/outfit/job/blueshield
+ name = "Blueshield"
+ jobtype = /datum/job/blueshield
+
+ uniform = /obj/item/clothing/under/rank/blueshield
+ suit = /obj/item/clothing/suit/armor/vest/blueshield
+ gloves = /obj/item/clothing/gloves/combat
+ shoes = /obj/item/clothing/shoes/jackboots
+ l_ear = /obj/item/device/radio/headset/heads/blueshield/alt
+ glasses = /obj/item/clothing/glasses/hud/health/health_advanced
+ id = /obj/item/weapon/card/id/nanotrasen
+ pda = /obj/item/device/pda/heads/blueshield
+ backpack_contents = list(
+ /obj/item/weapon/storage/box/deathimp = 1,
+ /obj/item/weapon/gun/energy/gun/blueshield = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+ backpack = /obj/item/weapon/storage/backpack/security
+
/datum/job/judge
title = "Magistrate"
@@ -189,7 +200,6 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
spawn_positions = 1
supervisors = "the Nanotrasen Supreme Court"
selection_color = "#ddddff"
- idtype = /obj/item/weapon/card/id/nanotrasen
req_admin_notify = 1
is_legal = 1
minimal_player_age = 30
@@ -201,27 +211,28 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_magistrate)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_lawyer, access_magistrate)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/heads/magistrate/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/suit_jacket/really_black(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/judgerobe(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/head/powdered_wig(H), slot_head)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/device/pda/heads/magistrate(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/device/flash(H), slot_r_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+ outfit = /datum/outfit/job/judge
+
+/datum/outfit/job/judge
+ name = "Magistrate"
+ jobtype = /datum/job/judge
+
+ uniform = /obj/item/clothing/under/suit_jacket/really_black
+ suit = /obj/item/clothing/suit/judgerobe
+ shoes = /obj/item/clothing/shoes/centcom
+ head = /obj/item/clothing/head/powdered_wig
+ l_ear = /obj/item/device/radio/headset/heads/magistrate/alt
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/nanotrasen
+ l_pocket = /obj/item/device/flash
+ pda = /obj/item/device/pda/heads/magistrate
+ backpack_contents = list(
+ /obj/item/weapon/melee/classic_baton/telescopic = 1
+ )
+
+ implants = list(/obj/item/weapon/implant/loyalty)
+
+
//var/global/lawyer = 0//Checks for another lawyer //This changed clothes on 2nd lawyer, both IA get the same dreds.
/datum/job/lawyer
@@ -239,26 +250,21 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
minimal_player_age = 30
exp_requirements = 300
exp_type = EXP_TYPE_CREW
- idtype = /obj/item/weapon/card/id/security
+ outfit = /datum/outfit/job/lawyer
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_sec/alt(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/device/pda/lawyer(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store)
- H.equip_or_collect(new /obj/item/device/flash(H), slot_r_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
- L.imp_in = H
- L.implanted = 1
- H.sec_hud_set_implants()
- return 1
+/datum/outfit/job/lawyer
+ name = "Internal Affairs Agent"
+ jobtype = /datum/job/lawyer
+
+ uniform = /obj/item/clothing/under/rank/internalaffairs
+ suit = /obj/item/clothing/suit/storage/internalaffairs
+ shoes = /obj/item/clothing/shoes/brown
+ l_ear = /obj/item/device/radio/headset/headset_sec/alt
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
+ id = /obj/item/weapon/card/id/security
+ l_pocket = /obj/item/device/laser_pointer
+ r_pocket = /obj/item/device/flash
+ l_hand = /obj/item/weapon/storage/briefcase
+ pda = /obj/item/device/pda/lawyer
+
+ implants = list(/obj/item/weapon/implant/loyalty)
\ No newline at end of file
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index 2148c339000..b7487476e1e 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -10,29 +10,31 @@
selection_color = "#dddddd"
access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons, access_mineral_storeroom)
minimal_access = list(access_bar, access_maint_tunnels, access_weapons, access_mineral_storeroom)
+ outfit = /datum/outfit/job/bartender
+/datum/outfit/job/bartender
+ name = "Bartender"
+ jobtype = /datum/job/bartender
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/reagent(H), slot_glasses)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/device/pda/bar(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/belt/bandolier/full(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/toy/russian_revolver(H), slot_in_backpack)
+ uniform = /obj/item/clothing/under/rank/bartender
+ suit = /obj/item/clothing/suit/armor/vest
+ belt = /obj/item/weapon/storage/belt/bandolier/full
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_service
+ glasses = /obj/item/clothing/glasses/sunglasses/reagent
+ pda = /obj/item/device/pda/bar
+ backpack_contents = list(
+ /obj/item/toy/russian_revolver = 1
+ )
- H.dna.SetSEState(SOBERBLOCK,1)
- H.mutations += SOBER
- H.check_mutations = 1
+/datum/outfit/job/bartender/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
- return 1
+ H.dna.SetSEState(SOBERBLOCK,1)
+ H.mutations += SOBER
+ H.check_mutations = 1
@@ -48,22 +50,18 @@
access = list(access_hydroponics, access_bar, access_kitchen, access_morgue)
minimal_access = list(access_kitchen, access_maint_tunnels)
alt_titles = list("Cook","Culinary Artist","Butcher")
+ outfit = /datum/outfit/job/chef
+/datum/outfit/job/chef
+ name = "Chef"
+ jobtype = /datum/job/chef
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/suit/chef(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/head/chefhat(H), slot_head)
- H.equip_or_collect(new /obj/item/device/pda/chef(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/rank/chef
+ suit = /obj/item/clothing/suit/chef
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/chefhat
+ l_ear = /obj/item/device/radio/headset/headset_service
+ pda = /obj/item/device/pda/chef
@@ -79,23 +77,23 @@
access = list(access_hydroponics, access_bar, access_kitchen, access_morgue)
minimal_access = list(access_hydroponics, access_morgue, access_maint_tunnels)
alt_titles = list("Hydroponicist", "Botanical Researcher")
+ outfit = /datum/outfit/job/hydro
+/datum/outfit/job/hydro
+ name = "Botanist"
+ jobtype = /datum/job/hydro
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack/botany(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_hyd(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves)
- H.equip_or_collect(new /obj/item/clothing/suit/apron(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/device/plant_analyzer(H), slot_s_store)
- H.equip_or_collect(new /obj/item/device/pda/botanist(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/rank/hydroponics
+ suit = /obj/item/clothing/suit/apron
+ gloves = /obj/item/clothing/gloves/botanic_leather
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_service
+ suit_store = /obj/item/device/plant_analyzer
+ pda = /obj/item/device/pda/botanist
+
+ backpack = /obj/item/weapon/storage/backpack/botany
+ satchel = /obj/item/weapon/storage/backpack/satchel_hyd
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/hydro
@@ -109,25 +107,21 @@
is_supply = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
- idtype = /obj/item/weapon/card/id/supply
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom)
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom)
+ outfit = /datum/outfit/job/qm
+/datum/outfit/job/qm
+ name = "Quartermaster"
+ jobtype = /datum/job/qm
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/quartermaster(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
- H.equip_or_collect(new /obj/item/weapon/clipboard(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/rank/cargo
+ shoes = /obj/item/clothing/shoes/brown
+ l_ear = /obj/item/device/radio/headset/headset_cargo
+ glasses = /obj/item/clothing/glasses/sunglasses
+ id = /obj/item/weapon/card/id/supply
+ l_hand = /obj/item/weapon/clipboard
+ pda = /obj/item/device/pda/quartermaster
@@ -140,23 +134,19 @@
is_supply = 1
supervisors = "the quartermaster"
selection_color = "#dddddd"
- idtype = /obj/item/weapon/card/id/supply
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting, access_mineral_storeroom)
+ outfit = /datum/outfit/job/cargo_tech
+/datum/outfit/job/cargo_tech
+ name = "Cargo Technician"
+ jobtype = /datum/job/cargo_tech
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/cargo(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/rank/cargotech
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_cargo
+ id = /obj/item/weapon/card/id/supply
+ pda = /obj/item/device/pda/cargo
@@ -169,32 +159,30 @@
is_supply = 1
supervisors = "the quartermaster"
selection_color = "#dddddd"
- idtype = /obj/item/weapon/card/id/supply
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom)
minimal_access = list(access_mining, access_mint, access_mining_station, access_mailsorting, access_maint_tunnels, access_mineral_storeroom)
alt_titles = list("Spelunker")
+ outfit = /datum/outfit/job/mining
- equip(var/mob/living/carbon/human/H)
- if(!H)
- return 0
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_cargo/mining(H), slot_l_ear)
- switch(H.backbag)
- if(2)
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3)
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
- if(4)
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/gloves/fingerless(H), slot_gloves)
- H.equip_or_collect(new /obj/item/device/pda/shaftminer(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/patch/styptic(H), slot_l_store)
- H.equip_or_collect(new /obj/item/device/flashlight/seclite(H), slot_r_store)
- H.equip_or_collect(new /obj/item/weapon/mining_voucher(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+/datum/outfit/job/mining
+ name = "Shaft Miner"
+ jobtype = /datum/job/mining
+
+ uniform = /obj/item/clothing/under/rank/miner
+ gloves = /obj/item/clothing/gloves/fingerless
+ shoes = /obj/item/clothing/shoes/workboots
+ l_ear = /obj/item/device/radio/headset/headset_cargo/mining
+ id = /obj/item/weapon/card/id/supply
+ l_pocket = /obj/item/weapon/reagent_containers/food/pill/patch/styptic
+ r_pocket = /obj/item/device/flashlight/seclite
+ pda = /obj/item/device/pda/shaftminer
+ backpack_contents = list(
+ /obj/item/weapon/mining_voucher = 1,
+ /obj/item/weapon/storage/bag/ore = 1
+ )
+
+ backpack = /obj/item/weapon/storage/backpack/industrial
+ satchel = /obj/item/weapon/storage/backpack/satchel_eng
@@ -209,40 +197,51 @@
is_service = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
- idtype = /obj/item/weapon/card/id/clown
access = list(access_clown, access_theatre, access_maint_tunnels)
minimal_access = list(access_clown, access_theatre, access_maint_tunnels)
+ outfit = /datum/outfit/job/clown
+/datum/outfit/job/clown
+ name = "Clown"
+ jobtype = /datum/job/clown
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/clown(H), slot_back)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- if(H.gender == FEMALE)
- H.equip_or_collect(new /obj/item/clothing/mask/gas/sexyclown(H), slot_wear_mask)
- H.equip_or_collect(new /obj/item/clothing/under/sexyclown(H), slot_w_uniform)
- else
- H.equip_or_collect(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/clown(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
- H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/bikehorn(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/stamp/clown(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/toy/crayon/rainbow(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/fancy/crayons(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/reagent_containers/spray/waterflower(H), slot_in_backpack)
- if(H.get_species() == "Machine")
- var/obj/item/organ/internal/cyberimp/brain/clown_voice/implant
- implant = new
- implant.insert(H)
- H.mutations.Add(CLUMSY)
- H.dna.SetSEState(COMICBLOCK,1,1)
- genemutcheck(H,COMICBLOCK,null,MUTCHK_FORCED)
- return 1
+ uniform = /obj/item/clothing/under/rank/clown
+ shoes = /obj/item/clothing/shoes/clown_shoes
+ mask = /obj/item/clothing/mask/gas/clown_hat
+ l_ear = /obj/item/device/radio/headset/headset_service
+ id = /obj/item/weapon/card/id/clown
+ pda = /obj/item/device/pda/clown
+ backpack_contents = list(
+ /obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1,
+ /obj/item/weapon/bikehorn = 1,
+ /obj/item/weapon/stamp/clown = 1,
+ /obj/item/toy/crayon/rainbow = 1,
+ /obj/item/weapon/storage/fancy/crayons = 1,
+ /obj/item/weapon/reagent_containers/spray/waterflower = 1
+ )
+ backpack = /obj/item/weapon/storage/backpack/clown
+ satchel = /obj/item/weapon/storage/backpack/clown
+ dufflebag = /obj/item/weapon/storage/backpack/duffel/clown
+
+/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(H.gender == FEMALE)
+ mask = /obj/item/clothing/mask/gas/sexyclown
+ uniform = /obj/item/clothing/under/sexyclown
+
+/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ if(H.get_species() == "Machine")
+ var/obj/item/organ/internal/cyberimp/brain/clown_voice/implant = new
+ implant.insert(H)
+
+ H.mutations.Add(CLUMSY)
+ H.dna.SetSEState(COMICBLOCK, 1, 1)
+ genemutcheck(H, COMICBLOCK, null, MUTCHK_FORCED)
/datum/job/mime
@@ -254,35 +253,45 @@
is_service = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
- idtype = /obj/item/weapon/card/id/mime
access = list(access_mime, access_theatre, access_maint_tunnels)
minimal_access = list(access_mime, access_theatre, access_maint_tunnels)
+ outfit = /datum/outfit/job/mime
+/datum/outfit/job/mime
+ name = "Mime"
+ jobtype = /datum/job/mime
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_or_collect(new /obj/item/weapon/storage/backpack/mime(H), slot_back)
- if(H.gender == FEMALE)
- H.equip_or_collect(new /obj/item/clothing/under/sexymime(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/mask/gas/sexymime(H), slot_wear_mask)
- else
- H.equip_or_collect(new /obj/item/clothing/under/mime(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/mime(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/gloves/color/white(H), slot_gloves)
- H.equip_or_collect(new /obj/item/clothing/head/beret(H), slot_head)
- H.equip_or_collect(new /obj/item/clothing/suit/suspenders(H), slot_wear_suit)
- H.equip_or_collect(new /obj/item/toy/crayon/mime(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/cane(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- if(H.mind)
- H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
- H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
- H.mind.miming = 1
- return 1
+ uniform = /obj/item/clothing/under/mime
+ suit = /obj/item/clothing/suit/suspenders
+ back = /obj/item/weapon/storage/backpack/mime
+ gloves = /obj/item/clothing/gloves/color/white
+ shoes = /obj/item/clothing/shoes/black
+ head = /obj/item/clothing/head/beret
+ mask = /obj/item/clothing/mask/gas/mime
+ l_ear = /obj/item/device/radio/headset/headset_service
+ id = /obj/item/weapon/card/id/mime
+ pda = /obj/item/device/pda/mime
+ backpack_contents = list(
+ /obj/item/toy/crayon/mime = 1,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing = 1,
+ /obj/item/weapon/cane = 1
+ )
+
+/datum/outfit/job/mime/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(H.gender == FEMALE)
+ uniform = /obj/item/clothing/under/sexymime
+ suit = /obj/item/clothing/mask/gas/sexymime
+
+/datum/outfit/job/mime/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
+ if(visualsOnly)
+ return
+
+ if(H.mind)
+ H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
+ H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
+ H.mind.miming = 1
@@ -298,21 +307,16 @@
access = list(access_janitor, access_maint_tunnels)
minimal_access = list(access_janitor, access_maint_tunnels)
alt_titles = list("Custodial Technician")
+ outfit = /datum/outfit/job/janitor
+/datum/outfit/job/janitor
+ name = "Janitor"
+ jobtype = /datum/job/janitor
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/device/pda/janitor(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
-
+ uniform = /obj/item/clothing/under/rank/janitor
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_service
+ pda = /obj/item/device/pda/janitor
//More or less assistants
@@ -328,24 +332,19 @@
access = list(access_library, access_maint_tunnels)
minimal_access = list(access_library, access_maint_tunnels)
alt_titles = list("Journalist")
+ outfit = /datum/outfit/job/librarian
+/datum/outfit/job/librarian
+ name = "Librarian"
+ jobtype = /datum/job/librarian
- equip(var/mob/living/carbon/human/H)
- if(!H)
- return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/suit_jacket/red(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/device/pda/librarian(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/bag/books(H), slot_l_hand)
- H.equip_or_collect(new /obj/item/weapon/barcodescanner(H), slot_r_store)
- H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/suit_jacket/red
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_service
+ l_pocket = /obj/item/device/laser_pointer
+ r_pocket = /obj/item/weapon/barcodescanner
+ l_hand = /obj/item/weapon/storage/bag/books
+ pda = /obj/item/device/pda/librarian
/datum/job/barber
title = "Barber"
@@ -359,18 +358,16 @@
alt_titles = list("Hair Stylist","Beautician")
access = list(access_maint_tunnels)
minimal_access = list(access_maint_tunnels)
+ outfit = /datum/outfit/job/barber
+/datum/outfit/job/barber
+ name = "Barber"
+ jobtype = /datum/job/barber
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/barber(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/barber(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/weapon/storage/box/lip_stick(H), slot_in_backpack)
- return 1
+ uniform = /obj/item/clothing/under/barber
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_service
+ backpack_contents = list(
+ /obj/item/clothing/shoes/black = 1,
+ /obj/item/weapon/storage/box/lip_stick = 1
+ )
\ No newline at end of file
diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm
index da9bd5c8ec1..8928d9c5b6a 100644
--- a/code/game/jobs/job/support_chaplain.dm
+++ b/code/game/jobs/job/support_chaplain.dm
@@ -11,149 +11,153 @@
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
minimal_access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
+ outfit = /datum/outfit/job/chaplain
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(H) //BS12 EDIT
- H.equip_or_collect(B, slot_l_hand)
- switch(H.backbag)
- if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
- if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_or_collect(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
- H.equip_or_collect(new /obj/item/device/pda/chaplain(H), slot_wear_pda)
- H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
- H.equip_or_collect(new /obj/item/device/camera/spooky(H), slot_in_backpack)
- spawn(0)
- var/religion_name = "Christianity"
- var/new_religion = sanitize(copytext(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name),1,MAX_NAME_LEN))
+/datum/outfit/job/chaplain
+ name = "Chaplain"
+ jobtype = /datum/job/chaplain
- if(!new_religion)
- new_religion = religion_name
+ uniform = /obj/item/clothing/under/rank/chaplain
+ shoes = /obj/item/clothing/shoes/black
+ l_ear = /obj/item/device/radio/headset/headset_service
+ pda = /obj/item/device/pda/chaplain
+ backpack_contents = list(
+ /obj/item/device/camera/spooky = 1
+ )
- switch(lowertext(new_religion))
- if("christianity")
- B.name = pick("The Holy Bible")
- if("satanism")
- B.name = "The Unholy Bible"
- if("cthulu")
- B.name = "The Necronomicon"
- if("islam")
- B.name = "Quran"
- if("scientology")
- B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
- if("chaos")
- B.name = "The Book of Lorgar"
- if("imperium")
- B.name = "Uplifting Primer"
- if("toolboxia")
- B.name = "Toolbox Manifesto Robusto"
- if("homosexuality")
- B.name = "Guys Gone Wild"
- if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
- B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
- H.setBrainLoss(99) // starts off retarded as fuck
- if("science")
- B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
- else
- B.name = "The Holy Book of [new_religion]"
- feedback_set_details("religion_name","[new_religion]")
+/datum/outfit/job/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ . = ..()
- spawn(1)
- var/deity_name = "Space Jesus"
- var/new_deity = sanitize(copytext(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name),1,MAX_NAME_LEN))
+ if(visualsOnly)
+ return
- if((length(new_deity) == 0) || (new_deity == "Space Jesus") )
- new_deity = deity_name
- B.deity_name = new_deity
+ var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(H)
- var/accepted = 0
- var/outoftime = 0
- spawn(200) // 20 seconds to choose
- outoftime = 1
- var/new_book_style = "Bible"
+ var/religion_name = "Christianity"
+ var/new_religion = sanitize(copytext(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name),1,MAX_NAME_LEN))
- while(!accepted)
- if(!B) break // prevents possible runtime errors
- new_book_style = input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon", "Greentext")
- switch(new_book_style)
- if("Koran")
- B.icon_state = "koran"
- B.item_state = "koran"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 4
- if("Scrapbook")
- B.icon_state = "scrapbook"
- B.item_state = "scrapbook"
- if("Creeper")
- B.icon_state = "creeper"
- B.item_state = "syringe_kit"
- if("White Bible")
- B.icon_state = "white"
- B.item_state = "syringe_kit"
- if("Holy Light")
- B.icon_state = "holylight"
- B.item_state = "syringe_kit"
- if("Athiest")
- B.icon_state = "athiest"
- B.item_state = "syringe_kit"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 10
- if("Tome")
- B.icon_state = "tome"
- B.item_state = "syringe_kit"
- if("The King in Yellow")
- B.icon_state = "kingyellow"
- B.item_state = "kingyellow"
- if("Ithaqua")
- B.icon_state = "ithaqua"
- B.item_state = "ithaqua"
- if("Scientology")
- B.icon_state = "scientology"
- B.item_state = "scientology"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 8
- if("the bible melts")
- B.icon_state = "melted"
- B.item_state = "melted"
- if("Necronomicon")
- B.icon_state = "necronomicon"
- B.item_state = "necronomicon"
- if("Greentext")
- B.icon_state = "greentext"
- B.item_state = "greentext"
- else
- // if christian bible, revert to default
- B.icon_state = "bible"
- B.item_state = "bible"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.dir = 2
+ if(!new_religion)
+ new_religion = religion_name
- H.update_inv_l_hand() // so that it updates the bible's item_state in his hand
+ switch(lowertext(new_religion))
+ if("christianity")
+ B.name = pick("The Holy Bible")
+ if("satanism")
+ B.name = "The Unholy Bible"
+ if("cthulu")
+ B.name = "The Necronomicon"
+ if("islam")
+ B.name = "Quran"
+ if("scientology")
+ B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
+ if("chaos")
+ B.name = "The Book of Lorgar"
+ if("imperium")
+ B.name = "Uplifting Primer"
+ if("toolboxia")
+ B.name = "Toolbox Manifesto Robusto"
+ if("homosexuality")
+ B.name = "Guys Gone Wild"
+ if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
+ B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
+ H.setBrainLoss(99) // starts off retarded as fuck
+ if("science")
+ B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
+ else
+ B.name = "The Holy Book of [new_religion]"
+ feedback_set_details("religion_name","[new_religion]")
- switch(input(H,"Look at your bible - is this what you want?") in list("Yes","No"))
- if("Yes")
- accepted = 1
- if("No")
- if(outoftime)
- to_chat(H, "Welp, out of time, buddy. You're stuck. Next time choose faster.")
- accepted = 1
+ var/deity_name = "Space Jesus"
+ var/new_deity = sanitize(copytext(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name),1,MAX_NAME_LEN))
- if(ticker)
- ticker.Bible_icon_state = B.icon_state
- ticker.Bible_item_state = B.item_state
- ticker.Bible_name = B.name
- ticker.Bible_deity_name = B.deity_name
- feedback_set_details("religion_deity","[new_deity]")
- feedback_set_details("religion_book","[new_book_style]")
- return 1
+ if((length(new_deity) == 0) || (new_deity == "Space Jesus") )
+ new_deity = deity_name
+ B.deity_name = new_deity
+
+ var/accepted = 0
+ var/outoftime = 0
+ spawn(200) // 20 seconds to choose
+ outoftime = 1
+ var/new_book_style = "Bible"
+
+ while(!accepted)
+ if(!B) break // prevents possible runtime errors
+ new_book_style = input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon", "Greentext")
+ switch(new_book_style)
+ if("Koran")
+ B.icon_state = "koran"
+ B.item_state = "koran"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.dir = 4
+ if("Scrapbook")
+ B.icon_state = "scrapbook"
+ B.item_state = "scrapbook"
+ if("Creeper")
+ B.icon_state = "creeper"
+ B.item_state = "syringe_kit"
+ if("White Bible")
+ B.icon_state = "white"
+ B.item_state = "syringe_kit"
+ if("Holy Light")
+ B.icon_state = "holylight"
+ B.item_state = "syringe_kit"
+ if("Athiest")
+ B.icon_state = "athiest"
+ B.item_state = "syringe_kit"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.dir = 10
+ if("Tome")
+ B.icon_state = "tome"
+ B.item_state = "syringe_kit"
+ if("The King in Yellow")
+ B.icon_state = "kingyellow"
+ B.item_state = "kingyellow"
+ if("Ithaqua")
+ B.icon_state = "ithaqua"
+ B.item_state = "ithaqua"
+ if("Scientology")
+ B.icon_state = "scientology"
+ B.item_state = "scientology"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.dir = 8
+ if("the bible melts")
+ B.icon_state = "melted"
+ B.item_state = "melted"
+ if("Necronomicon")
+ B.icon_state = "necronomicon"
+ B.item_state = "necronomicon"
+ if("Greentext")
+ B.icon_state = "greentext"
+ B.item_state = "greentext"
+ else
+ // if christian bible, revert to default
+ B.icon_state = "bible"
+ B.item_state = "bible"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.dir = 2
+
+ H.update_inv_l_hand() // so that it updates the bible's item_state in his hand
+
+ switch(input(H,"Look at your bible - is this what you want?") in list("Yes","No"))
+ if("Yes")
+ accepted = 1
+ if("No")
+ if(outoftime)
+ to_chat(H, "Welp, out of time, buddy. You're stuck. Next time choose faster.")
+ accepted = 1
+
+ if(ticker)
+ ticker.Bible_icon_state = B.icon_state
+ ticker.Bible_item_state = B.item_state
+ ticker.Bible_name = B.name
+ ticker.Bible_deity_name = B.deity_name
+ feedback_set_details("religion_deity","[new_deity]")
+ feedback_set_details("religion_book","[new_book_style]")
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index a770084dbbc..b0891498c98 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -1,3 +1,4 @@
+
var/global/datum/controller/occupations/job_master
#define GET_RANDOM_JOB 0
@@ -5,571 +6,483 @@ var/global/datum/controller/occupations/job_master
#define RETURN_TO_LOBBY 2
/datum/controller/occupations
- //List of all jobs
+ //List of all jobs
var/list/occupations = list()
- //Players who need 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
+ //Players who need jobs
var/list/unassigned = list()
- //Debug info
+ //Debug info
var/list/job_debug = list()
- proc/SetupOccupations(var/list/faction = list("Station"))
- occupations = list()
- var/list/all_jobs = subtypesof(/datum/job)
- if(!all_jobs.len)
- to_chat(world, "\red \b Error setting up jobs, no job datums found")
- return 0
- for(var/J in all_jobs)
- var/datum/job/job = new J()
- if(!job) continue
- if(!job.faction in faction) continue
- occupations += job
+/datum/controller/occupations/proc/SetupOccupations(var/list/faction = list("Station"))
+ occupations = list()
- return 1
-
-
- proc/Debug(var/text)
- if(!Debug2) return 0
- job_debug.Add(text)
- return 1
-
-
- proc/GetJob(var/rank)
- if(!rank) return null
- for(var/datum/job/J in occupations)
- if(!J) continue
- if(J.title == rank) return J
- return null
-
- proc/GetPlayerAltTitle(mob/new_player/player, rank)
- return player.client.prefs.GetPlayerAltTitle(GetJob(rank))
-
- proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
- Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
- if(player && player.mind && rank)
- var/datum/job/job = GetJob(rank)
- if(!job) return 0
- if(jobban_isbanned(player, rank)) return 0
- if(!job.player_old_enough(player.client)) return 0
- if(job.available_in_playtime(player.client))
- return 0
- if(!is_job_whitelisted(player, rank)) return 0
- var/position_limit = job.total_positions
- if(!latejoin)
- position_limit = job.spawn_positions
- if((job.current_positions < position_limit) || position_limit == -1)
- Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]")
- player.mind.assigned_role = rank
- player.mind.role_alt_title = GetPlayerAltTitle(player, rank)
-
- // JOB OBJECTIVES OH SHIT
- player.mind.job_objectives.Cut()
- for(var/objectiveType in job.required_objectives)
- new objectiveType(player.mind)
-
- // 50/50 chance of getting optional objectives.
- for(var/objectiveType in job.optional_objectives)
- if(prob(50))
- new objectiveType(player.mind)
-
- unassigned -= player
- job.current_positions++
- return 1
- Debug("AR has failed, Player: [player], Rank: [rank]")
+ var/list/all_jobs = subtypesof(/datum/job)
+ if(!all_jobs.len)
+ to_chat(world, "Error setting up jobs, no job datums found")
return 0
- proc/FreeRole(var/rank) //making additional slot on the fly
- var/datum/job/job = GetJob(rank)
- if(job && job.current_positions >= job.total_positions && job.total_positions != -1)
- job.total_positions++
- return 1
+ for(var/J in all_jobs)
+ var/datum/job/job = new J()
+ if(!job)
+ continue
+ if(!job.faction in faction)
+ continue
+ occupations += job
+ name_occupations[job.title] = job
+ type_occupations[J] = job
+
+ return 1
+
+
+/datum/controller/occupations/proc/Debug(var/text)
+ if(!Debug2)
return 0
+ job_debug.Add(text)
+ return 1
- proc/FindOccupationCandidates(datum/job/job, level, flag)
- Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]")
- var/list/candidates = list()
- for(var/mob/new_player/player in unassigned)
- Debug(" - Player: [player] Banned: [jobban_isbanned(player, job.title)] Old Enough: [!job.player_old_enough(player.client)] AvInPlaytime: [job.available_in_playtime(player.client)] Flag && Be Special: [flag] && [player.client.prefs.be_special] Job Department: [player.client.prefs.GetJobDepartment(job, level)] Job Flag: [job.flag] Job Department Flag = [job.department_flag]")
- if(jobban_isbanned(player, job.title))
- Debug("FOC isbanned failed, Player: [player]")
- continue
- if(!job.player_old_enough(player.client))
- Debug("FOC player not old enough, Player: [player]")
- continue
- if(job.available_in_playtime(player.client))
- Debug("FOC player not enough playtime, Player: [player]")
- continue
- if(flag && !(flag in player.client.prefs.be_special))
- Debug("FOC flag failed, Player: [player], Flag: [flag], ")
- continue
- if(player.mind && job.title in player.mind.restricted_roles)
- Debug("FOC incompatbile with antagonist role, Player: [player]")
- continue
- if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
- Debug("FOC pass, Player: [player], Level:[level]")
- candidates += player
- return candidates
- proc/GiveRandomJob(var/mob/new_player/player)
- Debug("GRJ Giving random job, Player: [player]")
- for(var/datum/job/job in shuffle(occupations))
- if(!job)
- continue
-
- if(istype(job, GetJob("Civilian"))) // We don't want to give him assistant, that's boring!
- continue
-
- if(job.title in command_positions) //If you want a command position, select it!
- continue
-
- if(job.title in whitelisted_positions) // No random whitelisted job, sorry!
- continue
-
- if(job.admin_only) // No admin positions either.
- continue
-
- if(jobban_isbanned(player, job.title))
- Debug("GRJ isbanned failed, Player: [player], Job: [job.title]")
- continue
-
- if(!job.player_old_enough(player.client))
- Debug("GRJ player not old enough, Player: [player]")
- continue
-
- if(job.available_in_playtime(player.client))
- Debug("GRJ player not enough playtime, Player: [player]")
- continue
-
- if(player.mind && job.title in player.mind.restricted_roles)
- Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
- continue
-
- if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
- Debug("GRJ Random job given, Player: [player], Job: [job]")
- AssignRole(player, job.title)
- unassigned -= player
- break
-
- proc/ResetOccupations()
- for(var/mob/new_player/player in player_list)
- if((player) && (player.mind))
- player.mind.assigned_role = null
- player.mind.special_role = null
+/datum/controller/occupations/proc/GetJob(rank)
+ if(!occupations.len)
SetupOccupations()
- unassigned = list()
- return
+ return name_occupations[rank]
+/datum/controller/occupations/proc/GetJobType(jobtype)
+ if(!occupations.len)
+ SetupOccupations()
+ return type_occupations[jobtype]
- ///This proc is called before the level loop of DivideOccupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check
- proc/FillHeadPosition()
- for(var/level = 1 to 3)
- for(var/command_position in command_positions)
- var/datum/job/job = GetJob(command_position)
- if(!job) continue
- var/list/candidates = FindOccupationCandidates(job, level)
- if(!candidates.len) continue
+/datum/controller/occupations/proc/GetPlayerAltTitle(mob/new_player/player, rank)
+ return player.client.prefs.GetPlayerAltTitle(GetJob(rank))
- // Build a weighted list, weight by age.
- var/list/weightedCandidates = list()
-
- // Different head positions have different good ages.
- var/good_age_minimal = 25
- var/good_age_maximal = 60
- if(command_position == "Captain")
- good_age_minimal = 30
- good_age_maximal = 70 // Old geezer captains ftw
-
- for(var/mob/V in candidates)
- // Log-out during round-start? What a bad boy, no head position for you!
- if(!V.client) continue
- var/age = V.client.prefs.age
- switch(age)
- if(good_age_minimal - 10 to good_age_minimal)
- weightedCandidates[V] = 3 // Still a bit young.
- if(good_age_minimal to good_age_minimal + 10)
- weightedCandidates[V] = 6 // Better.
- if(good_age_minimal + 10 to good_age_maximal - 10)
- weightedCandidates[V] = 10 // Great.
- if(good_age_maximal - 10 to good_age_maximal)
- weightedCandidates[V] = 6 // Still good.
- if(good_age_maximal to good_age_maximal + 10)
- weightedCandidates[V] = 6 // Bit old, don't you think?
- if(good_age_maximal to good_age_maximal + 50)
- weightedCandidates[V] = 3 // Geezer.
- else
- // If there's ABSOLUTELY NOBODY ELSE
- if(candidates.len == 1) weightedCandidates[V] = 1
-
-
- var/mob/new_player/candidate = pickweight(weightedCandidates)
- if(AssignRole(candidate, command_position))
- return 1
- return 0
-
-
- ///This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
- proc/CheckHeadPositions(var/level)
- for(var/command_position in command_positions)
- var/datum/job/job = GetJob(command_position)
- if(!job) continue
- var/list/candidates = FindOccupationCandidates(job, level)
- if(!candidates.len) continue
- var/mob/new_player/candidate = pick(candidates)
- AssignRole(candidate, command_position)
- return
-
-
- proc/FillAIPosition()
- var/ai_selected = 0
- var/datum/job/job = GetJob("AI")
+/datum/controller/occupations/proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
+ Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
+ if(player && player.mind && rank)
+ var/datum/job/job = GetJob(rank)
if(!job)
return 0
- if((job.title == "AI") && (config) && (!config.allow_ai))
+ if(jobban_isbanned(player, rank))
return 0
- for(var/i = job.total_positions, i > 0, i--)
- for(var/level = 1 to 3)
- var/list/candidates = list()
- candidates = FindOccupationCandidates(job, level)
- if(candidates.len)
- var/mob/new_player/candidate = pick(candidates)
- if(AssignRole(candidate, "AI"))
- ai_selected++
- break
- if(ai_selected) return 1
+ if(!job.player_old_enough(player.client))
return 0
+ if(job.available_in_playtime(player.client))
+ return 0
+ if(!is_job_whitelisted(player, rank))
+ return 0
+
+ var/position_limit = job.total_positions
+ if(!latejoin)
+ position_limit = job.spawn_positions
+
+ if((job.current_positions < position_limit) || position_limit == -1)
+ Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]")
+ player.mind.assigned_role = rank
+ player.mind.role_alt_title = GetPlayerAltTitle(player, rank)
+
+ // JOB OBJECTIVES OH SHIT
+ player.mind.job_objectives.Cut()
+ for(var/objectiveType in job.required_objectives)
+ new objectiveType(player.mind)
+
+ // 50/50 chance of getting optional objectives.
+ for(var/objectiveType in job.optional_objectives)
+ if(prob(50))
+ new objectiveType(player.mind)
+
+ unassigned -= player
+ job.current_positions++
+ return 1
+
+ Debug("AR has failed, Player: [player], Rank: [rank]")
+ return 0
+
+/datum/controller/occupations/proc/FreeRole(var/rank) //making additional slot on the fly
+ var/datum/job/job = GetJob(rank)
+ if(job && job.current_positions >= job.total_positions && job.total_positions != -1)
+ job.total_positions++
+ return 1
+ return 0
+
+/datum/controller/occupations/proc/FindOccupationCandidates(datum/job/job, level, flag)
+ Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]")
+ var/list/candidates = list()
+ for(var/mob/new_player/player in unassigned)
+ Debug(" - Player: [player] Banned: [jobban_isbanned(player, job.title)] Old Enough: [!job.player_old_enough(player.client)] AvInPlaytime: [job.available_in_playtime(player.client)] Flag && Be Special: [flag] && [player.client.prefs.be_special] Job Department: [player.client.prefs.GetJobDepartment(job, level)] Job Flag: [job.flag] Job Department Flag = [job.department_flag]")
+ if(jobban_isbanned(player, job.title))
+ Debug("FOC isbanned failed, Player: [player]")
+ continue
+ if(!job.player_old_enough(player.client))
+ Debug("FOC player not old enough, Player: [player]")
+ continue
+ if(job.available_in_playtime(player.client))
+ Debug("FOC player not enough playtime, Player: [player]")
+ continue
+ if(flag && !(flag in player.client.prefs.be_special))
+ Debug("FOC flag failed, Player: [player], Flag: [flag], ")
+ continue
+ if(player.mind && job.title in player.mind.restricted_roles)
+ Debug("FOC incompatbile with antagonist role, Player: [player]")
+ continue
+ if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
+ Debug("FOC pass, Player: [player], Level:[level]")
+ candidates += player
+ return candidates
+
+/datum/controller/occupations/proc/GiveRandomJob(var/mob/new_player/player)
+ Debug("GRJ Giving random job, Player: [player]")
+ for(var/datum/job/job in shuffle(occupations))
+ if(!job)
+ continue
+
+ if(istype(job, GetJob("Civilian"))) // We don't want to give him assistant, that's boring!
+ continue
+
+ if(job.title in command_positions) //If you want a command position, select it!
+ continue
+
+ if(job.title in whitelisted_positions) // No random whitelisted job, sorry!
+ continue
+
+ if(job.admin_only) // No admin positions either.
+ continue
+
+ if(jobban_isbanned(player, job.title))
+ Debug("GRJ isbanned failed, Player: [player], Job: [job.title]")
+ continue
+
+ if(!job.player_old_enough(player.client))
+ Debug("GRJ player not old enough, Player: [player]")
+ continue
+
+ if(job.available_in_playtime(player.client))
+ Debug("GRJ player not enough playtime, Player: [player]")
+ continue
+
+ if(player.mind && job.title in player.mind.restricted_roles)
+ Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]")
+ continue
+
+ if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
+ Debug("GRJ Random job given, Player: [player], Job: [job]")
+ AssignRole(player, job.title)
+ unassigned -= player
+ break
+
+/datum/controller/occupations/proc/ResetOccupations()
+ for(var/mob/new_player/player in player_list)
+ if((player) && (player.mind))
+ player.mind.assigned_role = null
+ player.mind.special_role = null
+ SetupOccupations()
+ unassigned = list()
+ return
+
+
+///This proc is called before the level loop of DivideOccupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check
+/datum/controller/occupations/proc/FillHeadPosition()
+ for(var/level = 1 to 3)
+ for(var/command_position in command_positions)
+ var/datum/job/job = GetJob(command_position)
+ if(!job)
+ continue
+ var/list/candidates = FindOccupationCandidates(job, level)
+ if(!candidates.len)
+ continue
+
+ // Build a weighted list, weight by age.
+ var/list/weightedCandidates = list()
+
+ // Different head positions have different good ages.
+ var/good_age_minimal = 25
+ var/good_age_maximal = 60
+ if(command_position == "Captain")
+ good_age_minimal = 30
+ good_age_maximal = 70 // Old geezer captains ftw
+
+ for(var/mob/V in candidates)
+ // Log-out during round-start? What a bad boy, no head position for you!
+ if(!V.client)
+ continue
+ var/age = V.client.prefs.age
+ switch(age)
+ if(good_age_minimal - 10 to good_age_minimal)
+ weightedCandidates[V] = 3 // Still a bit young.
+ if(good_age_minimal to good_age_minimal + 10)
+ weightedCandidates[V] = 6 // Better.
+ if(good_age_minimal + 10 to good_age_maximal - 10)
+ weightedCandidates[V] = 10 // Great.
+ if(good_age_maximal - 10 to good_age_maximal)
+ weightedCandidates[V] = 6 // Still good.
+ if(good_age_maximal to good_age_maximal + 10)
+ weightedCandidates[V] = 6 // Bit old, don't you think?
+ if(good_age_maximal to good_age_maximal + 50)
+ weightedCandidates[V] = 3 // Geezer.
+ else
+ // If there's ABSOLUTELY NOBODY ELSE
+ if(candidates.len == 1)
+ weightedCandidates[V] = 1
+
+ var/mob/new_player/candidate = pickweight(weightedCandidates)
+ if(AssignRole(candidate, command_position))
+ return 1
+
+ return 0
+
+
+///This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
+/datum/controller/occupations/proc/CheckHeadPositions(var/level)
+ for(var/command_position in command_positions)
+ var/datum/job/job = GetJob(command_position)
+ if(!job)
+ continue
+ var/list/candidates = FindOccupationCandidates(job, level)
+ if(!candidates.len)
+ continue
+ var/mob/new_player/candidate = pick(candidates)
+ AssignRole(candidate, command_position)
+
+
+/datum/controller/occupations/proc/FillAIPosition()
+ if(config && !config.allow_ai)
+ return 0
+
+ var/ai_selected = 0
+ var/datum/job/job = GetJob("AI")
+ if(!job)
+ return 0
+
+ for(var/i = job.total_positions, i > 0, i--)
+ for(var/level = 1 to 3)
+ var/list/candidates = list()
+ candidates = FindOccupationCandidates(job, level)
+ if(candidates.len)
+ var/mob/new_player/candidate = pick(candidates)
+ if(AssignRole(candidate, "AI"))
+ ai_selected++
+ break
+
+ if(ai_selected)
+ return 1
+
+ return 0
/** Proc DivideOccupations
- * fills var "assigned_role" for all ready players.
- * This proc must not have any side effect besides of modifying "assigned_role".
- **/
- proc/DivideOccupations()
- //Setup new player list and get the jobs list
- Debug("Running DO")
- SetupOccupations()
+* fills var "assigned_role" for all ready players.
+* This proc must not have any side effect besides of modifying "assigned_role".
+**/
+/datum/controller/occupations/proc/DivideOccupations()
+ //Setup new player list and get the jobs list
+ Debug("Running DO")
+ SetupOccupations()
- //Holder for Triumvirate is stored in the ticker, this just processes it
- if(ticker)
- for(var/datum/job/ai/A in occupations)
- if(ticker.triai)
- A.spawn_positions = 3
+ //Holder for Triumvirate is stored in the ticker, this just processes it
+ if(ticker)
+ for(var/datum/job/ai/A in occupations)
+ if(ticker.triai)
+ A.spawn_positions = 3
- //Get the players who are ready
- for(var/mob/new_player/player in player_list)
- if(player.ready && player.mind && !player.mind.assigned_role)
- unassigned += player
- if(player.client.prefs.randomslot)
- player.client.prefs.load_random_character_slot(player.client)
- Debug("DO, Len: [unassigned.len]")
- if(unassigned.len == 0) return 0
+ //Get the players who are ready
+ for(var/mob/new_player/player in player_list)
+ if(player.ready && player.mind && !player.mind.assigned_role)
+ unassigned += player
+ if(player.client.prefs.randomslot)
+ player.client.prefs.load_random_character_slot(player.client)
- //Shuffle players and jobs
- unassigned = shuffle(unassigned)
+ Debug("DO, Len: [unassigned.len]")
+ if(unassigned.len == 0)
+ return 0
- HandleFeedbackGathering()
+ //Shuffle players and jobs
+ unassigned = shuffle(unassigned)
- //People who wants to be assistants, sure, go on.
- Debug("DO, Running Civilian Check 1")
- var/datum/job/civ = new /datum/job/civilian()
- var/list/civilian_candidates = FindOccupationCandidates(civ, 3)
- Debug("AC1, Candidates: [civilian_candidates.len]")
- for(var/mob/new_player/player in civilian_candidates)
- Debug("AC1 pass, Player: [player]")
- AssignRole(player, "Civilian")
- civilian_candidates -= player
- Debug("DO, AC1 end")
+ HandleFeedbackGathering()
- //Select one head
- Debug("DO, Running Head Check")
- FillHeadPosition()
- Debug("DO, Head Check end")
+ //People who wants to be assistants, sure, go on.
+ Debug("DO, Running Civilian Check 1")
+ var/datum/job/civ = new /datum/job/civilian()
+ var/list/civilian_candidates = FindOccupationCandidates(civ, 3)
+ Debug("AC1, Candidates: [civilian_candidates.len]")
+ for(var/mob/new_player/player in civilian_candidates)
+ Debug("AC1 pass, Player: [player]")
+ AssignRole(player, "Civilian")
+ civilian_candidates -= player
+ Debug("DO, AC1 end")
- //Check for an AI
- Debug("DO, Running AI Check")
- FillAIPosition()
- Debug("DO, AI Check end")
+ //Select one head
+ Debug("DO, Running Head Check")
+ FillHeadPosition()
+ Debug("DO, Head Check end")
- //Other jobs are now checked
- Debug("DO, Running Standard Check")
+ //Check for an AI
+ Debug("DO, Running AI Check")
+ FillAIPosition()
+ Debug("DO, AI Check end")
+
+ //Other jobs are now checked
+ Debug("DO, Running Standard Check")
- // New job giving system by Donkie
- // This will cause lots of more loops, but since it's only done once it shouldn't really matter much at all.
- // Hopefully this will add more randomness and fairness to job giving.
+ // New job giving system by Donkie
+ // This will cause lots of more loops, but since it's only done once it shouldn't really matter much at all.
+ // Hopefully this will add more randomness and fairness to job giving.
- // Loop through all levels from high to low
- var/list/shuffledoccupations = shuffle(occupations)
- for(var/level = 1 to 3)
- //Check the head jobs first each level
- CheckHeadPositions(level)
+ // Loop through all levels from high to low
+ var/list/shuffledoccupations = shuffle(occupations)
+ for(var/level = 1 to 3)
+ //Check the head jobs first each level
+ CheckHeadPositions(level)
- // Loop through all unassigned players
- for(var/mob/new_player/player in unassigned)
-
- // Loop through all jobs
- for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY
- if(!job)
- continue
-
- if(jobban_isbanned(player, job.title))
- Debug("DO isbanned failed, Player: [player], Job:[job.title]")
- continue
-
- if(!job.player_old_enough(player.client))
- Debug("DO player not old enough, Player: [player], Job:[job.title]")
- continue
-
- if(job.available_in_playtime(player.client))
- Debug("DO player not enough playtime, Player: [player], Job:[job.title]")
- continue
-
- if(player.mind && job.title in player.mind.restricted_roles)
- Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
- continue
-
- if(!is_job_whitelisted(player, job.title))
- Debug("DO player not whitelisted, Player: [player], Job:[job.title]")
- continue
-
- // If the player wants that job on this level, then try give it to him.
- if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
-
- // If the job isn't filled
- if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
- Debug("DO pass, Player: [player], Level:[level], Job:[job.title]")
- Debug(" - Job Flag: [job.flag] Job Department: [player.client.prefs.GetJobDepartment(job, level)] Job Current Pos: [job.current_positions] Job Spawn Positions = [job.spawn_positions]")
- AssignRole(player, job.title)
- unassigned -= player
- break
-
- // Hand out random jobs to the people who didn't get any in the last check
- // Also makes sure that they got their preference correct
+ // Loop through all unassigned players
for(var/mob/new_player/player in unassigned)
- if(player.client.prefs.alternate_option == GET_RANDOM_JOB)
- GiveRandomJob(player)
- /*
- Old job system
- for(var/level = 1 to 3)
- for(var/datum/job/job in occupations)
- Debug("Checking job: [job]")
+
+ // Loop through all jobs
+ for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY
if(!job)
continue
- if(!unassigned.len)
- break
- if((job.current_positions >= job.spawn_positions) && job.spawn_positions != -1)
+
+ if(jobban_isbanned(player, job.title))
+ Debug("DO isbanned failed, Player: [player], Job:[job.title]")
continue
- var/list/candidates = FindOccupationCandidates(job, level)
- while(candidates.len && ((job.current_positions < job.spawn_positions) || job.spawn_positions == -1))
- var/mob/new_player/candidate = pick(candidates)
- Debug("Selcted: [candidate], for: [job.title]")
- AssignRole(candidate, job.title)
- candidates -= candidate*/
- Debug("DO, Standard Check end")
+ if(!job.player_old_enough(player.client))
+ Debug("DO player not old enough, Player: [player], Job:[job.title]")
+ continue
- Debug("DO, Running AC2")
+ if(job.available_in_playtime(player.client))
+ Debug("DO player not enough playtime, Player: [player], Job:[job.title]")
+ continue
- // Antags, who have to get in, come first
- for(var/mob/new_player/player in unassigned)
- if(player.mind.special_role)
- GiveRandomJob(player)
- if(player in unassigned)
- AssignRole(player, "Civilian")
+ if(player.mind && job.title in player.mind.restricted_roles)
+ Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]")
+ continue
- // Then we assign what we can to everyone else.
- for(var/mob/new_player/player in unassigned)
- if(player.client.prefs.alternate_option == BE_ASSISTANT)
- Debug("AC2 Assistant located, Player: [player]")
+ if(!is_job_whitelisted(player, job.title))
+ Debug("DO player not whitelisted, Player: [player], Job:[job.title]")
+ continue
+
+ // If the player wants that job on this level, then try give it to him.
+ if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
+
+ // If the job isn't filled
+ if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1)
+ Debug("DO pass, Player: [player], Level:[level], Job:[job.title]")
+ Debug(" - Job Flag: [job.flag] Job Department: [player.client.prefs.GetJobDepartment(job, level)] Job Current Pos: [job.current_positions] Job Spawn Positions = [job.spawn_positions]")
+ AssignRole(player, job.title)
+ unassigned -= player
+ break
+
+ // Hand out random jobs to the people who didn't get any in the last check
+ // Also makes sure that they got their preference correct
+ for(var/mob/new_player/player in unassigned)
+ if(player.client.prefs.alternate_option == GET_RANDOM_JOB)
+ GiveRandomJob(player)
+
+ Debug("DO, Standard Check end")
+
+ Debug("DO, Running AC2")
+
+ // Antags, who have to get in, come first
+ for(var/mob/new_player/player in unassigned)
+ if(player.mind.special_role)
+ GiveRandomJob(player)
+ if(player in unassigned)
AssignRole(player, "Civilian")
- else if(player.client.prefs.alternate_option == RETURN_TO_LOBBY)
- player.ready = 0
- unassigned -= player
- return 1
+
+ // Then we assign what we can to everyone else.
+ for(var/mob/new_player/player in unassigned)
+ if(player.client.prefs.alternate_option == BE_ASSISTANT)
+ Debug("AC2 Assistant located, Player: [player]")
+ AssignRole(player, "Civilian")
+ else if(player.client.prefs.alternate_option == RETURN_TO_LOBBY)
+ player.ready = 0
+ unassigned -= player
+
+ return 1
- proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
- if(!H) return null
- var/datum/job/job = GetJob(rank)
- var/list/spawn_in_storage = list()
+/datum/controller/occupations/proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
+ if(!H)
+ return null
- if(job)
+ var/datum/job/job = GetJob(rank)
- //Equip custom gear loadout.
- var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage.
- var/list/custom_equip_leftovers = list()
- if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI")
- for(var/thing in H.client.prefs.gear)
- var/datum/gear/G = gear_datums[thing]
- if(G)
- var/permitted
- if(G.allowed_roles)
- for(var/job_name in G.allowed_roles)
- if(job.title == job_name)
- permitted = 1
- else
- permitted = 1
+ H.job = rank
- if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted)))
- permitted = 0
+ if(!joined_late)
+ var/turf/T = null
+ var/obj/S = null
+ for(var/obj/effect/landmark/start/sloc in landmarks_list)
+ if(sloc.name != rank)
+ continue
+ if(locate(/mob/living) in sloc.loc)
+ continue
+ S = sloc
+ break
+ if(!S)
+ S = locate("start*[rank]") // use old stype
+ if(!S) // still no spawn, fall back to the arrivals shuttle
+ for(var/turf/TS in get_area_turfs(/area/shuttle/arrival))
+ if(!TS.density)
+ var/clear = 1
+ for(var/obj/O in TS)
+ if(O.density)
+ clear = 0
+ break
+ if(clear)
+ T = TS
+ continue
- if(!permitted)
- to_chat(H, "Your current job or whitelist status does not permit you to spawn with [thing]!")
- continue
+ if(isturf(S))
+ T = S
+ else if(istype(S, /obj/effect/landmark/start) && isturf(S.loc))
+ T = S.loc
- if(G.slot && !(G.slot in custom_equip_slots))
- // This is a miserable way to fix the loadout overwrite bug, but the alternative requires
- // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z
- if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
- custom_equip_leftovers += thing
- else if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot))
- to_chat(H, "Equipping you with \the [thing]!")
- custom_equip_slots.Add(G.slot)
- else
- custom_equip_leftovers.Add(thing)
- else
- spawn_in_storage += thing
-
- job.equip(H)
- job.apply_fingerprints(H)
-
- //If some custom items could not be equipped before, try again now.
- for(var/thing in custom_equip_leftovers)
- var/datum/gear/G = gear_datums[thing]
- if(G.slot in custom_equip_slots)
- spawn_in_storage += thing
- else
- var/metadata = H.client.prefs.gear[G.display_name]
- if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
- to_chat(H, "Equipping you with \the [thing]!")
- custom_equip_slots.Add(G.slot)
- else
- spawn_in_storage += thing
- else
- to_chat(H, "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator.")
-
- H.job = rank
-
- if(!joined_late)
- var/obj/S = null
- for(var/obj/effect/landmark/start/sloc in landmarks_list)
- if(sloc.name != rank) continue
- if(locate(/mob/living) in sloc.loc) continue
- S = sloc
- break
- if(!S)
- S = locate("start*[rank]") // use old stype
- if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf))
- H.loc = S.loc
+ if(T)
+ H.loc = T
// Moving wheelchair if they have one
if(H.buckled && istype(H.buckled, /obj/structure/stool/bed/chair/wheelchair))
H.buckled.loc = H.loc
H.buckled.dir = H.dir
- var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null)
- if(H.mind)
- var/remembered_info = ""
+ var/alt_title = null
+ if(H.mind)
+ H.mind.assigned_role = rank
+ alt_title = H.mind.role_alt_title
- remembered_info += "Your account number is: #[M.account_number]
"
- remembered_info += "Your account pin is: [M.remote_access_pin]
"
- remembered_info += "Your account funds are: $[M.money]
"
+ CreateMoneyAccount(H, rank, job)
- if(M.transaction_log.len)
- var/datum/transaction/T = M.transaction_log[1]
- remembered_info += "Your account was created: [T.time], [T.date] at [T.source_terminal]
"
- H.mind.store_memory(remembered_info)
+ if(job)
+ var/new_mob = job.equip(H)
+ if(ismob(new_mob))
+ H = new_mob
- H.mind.initial_account = M
+ to_chat(H, "You are the [alt_title ? alt_title : rank].")
+ to_chat(H, "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.")
+ to_chat(H, "For more information on how the station works, see Standard Operating Procedure (SOP)")
+ if(job.is_service)
+ to_chat(H, "As a member of Service, make sure to read up on your Department SOP")
+ if(job.is_supply)
+ to_chat(H, "As a member of Supply, make sure to read up on your Department SOP")
+ if(job.is_command)
+ to_chat(H, "As an important member of Command, read up on your Department SOP")
+ if(job.is_legal)
+ to_chat(H, "Your job requires complete knowledge of Space Law and Legal Standard Operating Procedure")
+ if(job.is_engineering)
+ to_chat(H, "As a member of Engineering, make sure to read up on your Department SOP")
+ if(job.is_medical)
+ to_chat(H, "As a member of Medbay, make sure to read up on your Department SOP")
+ if(job.is_science)
+ to_chat(H, "As a member of Science, make sure to read up on your Department SOP")
+ if(job.is_security)
+ to_chat(H, "As a member of Security, you are to know Space Law, Legal Standard Operating Procedure, as well as your Department SOP")
+ if(job.req_admin_notify)
+ to_chat(H, "You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.")
- // If they're head, give them the account info for their department
- if(H.mind && job.head_position)
- var/remembered_info = ""
- var/datum/money_account/department_account = department_accounts[job.department]
-
- if(department_account)
- remembered_info += "Your department's account number is: #[department_account.account_number]
"
- remembered_info += "Your department's account pin is: [department_account.remote_access_pin]
"
- remembered_info += "Your department's account funds are: $[department_account.money]
"
-
- H.mind.store_memory(remembered_info)
-
- spawn(0)
- to_chat(H, "Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]")
-
- var/alt_title = null
- if(H.mind)
- H.mind.assigned_role = rank
- alt_title = H.mind.role_alt_title
-
- switch(rank)
- if("Cyborg")
- return H.Robotize()
- if("AI")
- return H
- if("Clown") //don't need bag preference stuff!
- if(rank=="Clown") // Clowns DO need to breathe, though - N3X
- H.species.equip(H)
- else
- switch(H.backbag) //BS12 EDIT
- if(1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
- if(2)
- var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack(H)
- new /obj/item/weapon/storage/box/survival(BPK)
- H.equip_to_slot_or_del(BPK, slot_back,1)
- if(3)
- var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack/satchel_norm(H)
- new /obj/item/weapon/storage/box/survival(BPK)
- H.equip_to_slot_or_del(BPK, slot_back,1)
- if(4)
- var/obj/item/weapon/storage/backpack/BPK = new/obj/item/weapon/storage/backpack/satchel(H)
- new /obj/item/weapon/storage/box/survival(BPK)
- H.equip_to_slot_or_del(BPK, slot_back,1)
- H.species.equip(H)
-
- //Deferred item spawning.
- for(var/thing in spawn_in_storage)
- var/datum/gear/G = gear_datums[thing]
- var/metadata = H.client.prefs.gear[G.display_name]
- var/item = G.spawn_item(null, metadata)
-
- var/atom/placed_in = H.equip_or_collect(item)
- if(placed_in)
- to_chat(H, "Placing \the [item] in your [placed_in.name]!")
- continue
- if(H.equip_to_appropriate_slot(item))
- to_chat(H, "Placing \the [item] in your inventory!")
- continue
- if(H.put_in_hands(item))
- to_chat(H, "Placing \the [item] in your hands!")
- continue
- to_chat(H, "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug.")
- qdel(item)
-
-
- to_chat(H, "You are the [alt_title ? alt_title : rank].")
- to_chat(H, "As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.")
- to_chat(H, "For more information on how the station works, see Standard Operating Procedure (SOP)")
- if(job.is_service)
- to_chat(H, "As a member of Service, make sure to read up on your Department SOP")
- if(job.is_supply)
- to_chat(H, "As a member of Supply, make sure to read up on your Department SOP")
- if(job.is_command)
- to_chat(H, "As an important member of Command, read up on your Department SOP")
- if(job.is_legal)
- to_chat(H, "Your job requires complete knowledge of Space Law and Legal Standard Operating Procedure")
- if(job.is_engineering)
- to_chat(H, "As a member of Engineering, make sure to read up on your Department SOP")
- if(job.is_medical)
- to_chat(H, "As a member of Medbay, make sure to read up on your Department SOP")
- if(job.is_science)
- to_chat(H, "As a member of Science, make sure to read up on your Department SOP")
- if(job.is_security)
- to_chat(H, "As a member of Security, you are to know Space Law, Legal Standard Operating Procedure, as well as your Department SOP")
- if(job.req_admin_notify)
- to_chat(H, "You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.")
-
- spawnId(H, rank, alt_title)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
+ if(job && H)
+ job.after_spawn(H)
//Gives glasses to the vision impaired
if(H.disabilities & DISABILITY_FLAG_NEARSIGHTED)
@@ -579,121 +492,107 @@ var/global/datum/controller/occupations/job_master
if(istype(G) && !G.prescription)
G.prescription = 1
G.name = "prescription [G.name]"
- H.regenerate_icons()
-
- H.sec_hud_set_ID()
- H.sec_hud_set_implants()
- return H
+ return H
- proc/spawnId(var/mob/living/carbon/human/H, rank, title)
- if(!H) return 0
- var/obj/item/weapon/card/id/C = null
- var/datum/job/job = null
- for(var/datum/job/J in occupations)
- if(J.title == rank)
- job = J
- break
- if(job)
- if(job.title == "Cyborg")
- return
- else
- C = new job.idtype(H)
- C.access = job.get_access()
+
+/datum/controller/occupations/proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
+ if(!config.load_jobs_from_txt)
+ return 0
+
+ var/list/jobEntries = file2list(jobsfile)
+
+ for(var/job in jobEntries)
+ if(!job)
+ continue
+
+ job = trim(job)
+ if(!length(job))
+ continue
+
+ var/pos = findtext(job, "=")
+ var/name = null
+ var/value = null
+
+ if(pos)
+ name = copytext(job, 1, pos)
+ value = copytext(job, pos + 1)
else
- C = new /obj/item/weapon/card/id(H)
- if(C)
- C.registered_name = H.real_name
- C.rank = rank
- C.assignment = title ? title : rank
- C.sex = capitalize(H.gender)
- C.age = H.age
- C.name = "[C.registered_name]'s ID Card ([C.assignment])"
- C.photo = get_id_photo(H)
+ continue
- //put the player's account number onto the ID
- if(H.mind && H.mind.initial_account)
- C.associated_account_number = H.mind.initial_account.account_number
+ if(name && value)
+ var/datum/job/J = GetJob(name)
+ if(!J) continue
+ J.total_positions = text2num(value)
+ J.spawn_positions = text2num(value)
+ if(name == "AI" || name == "Cyborg")//I dont like this here but it will do for now
+ J.total_positions = 0
- H.equip_to_slot_or_del(C, slot_wear_id)
-
- H.equip_to_slot_or_del(new /obj/item/device/pda(H), slot_wear_pda)
- if(locate(/obj/item/device/pda,H))
- var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H)
- pda.owner = H.real_name
- pda.ownjob = C.assignment
- pda.ownrank = C.rank
- pda.name = "PDA-[H.real_name] ([pda.ownjob])"
-
- return 1
+ return 1
- proc/LoadJobs(jobsfile) //ran during round setup, reads info from jobs.txt -- Urist
- if(!config.load_jobs_from_txt)
- return 0
+/datum/controller/occupations/proc/HandleFeedbackGathering()
+ for(var/datum/job/job in occupations)
+ var/tmp_str = "|[job.title]|"
- var/list/jobEntries = file2list(jobsfile)
-
- for(var/job in jobEntries)
- if(!job)
+ var/level1 = 0 //high
+ var/level2 = 0 //medium
+ var/level3 = 0 //low
+ var/level4 = 0 //never
+ var/level5 = 0 //banned
+ var/level6 = 0 //account too young
+ for(var/mob/new_player/player in player_list)
+ if(!(player.ready && player.mind && !player.mind.assigned_role))
+ continue //This player is not ready
+ if(jobban_isbanned(player, job.title))
+ level5++
continue
-
- job = trim(job)
- if(!length(job))
+ if(!job.player_old_enough(player.client))
+ level6++
continue
-
- var/pos = findtext(job, "=")
- var/name = null
- var/value = null
-
- if(pos)
- name = copytext(job, 1, pos)
- value = copytext(job, pos + 1)
- else
+ if(job.available_in_playtime(player.client))
+ level6++
continue
+ if(player.client.prefs.GetJobDepartment(job, 1) & job.flag)
+ level1++
+ else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag)
+ level2++
+ else if(player.client.prefs.GetJobDepartment(job, 3) & job.flag)
+ level3++
+ else level4++ //not selected
- if(name && value)
- var/datum/job/J = GetJob(name)
- if(!J) continue
- J.total_positions = text2num(value)
- J.spawn_positions = text2num(value)
- if(name == "AI" || name == "Cyborg")//I dont like this here but it will do for now
- J.total_positions = 0
-
- return 1
+ tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|YOUNG=[level6]|-"
+ feedback_add_details("job_preferences",tmp_str)
- proc/HandleFeedbackGathering()
- for(var/datum/job/job in occupations)
- var/tmp_str = "|[job.title]|"
+/datum/controller/occupations/proc/CreateMoneyAccount(mob/living/H, rank, datum/job/job)
+ var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null)
+ var/remembered_info = ""
- var/level1 = 0 //high
- var/level2 = 0 //medium
- var/level3 = 0 //low
- var/level4 = 0 //never
- var/level5 = 0 //banned
- var/level6 = 0 //account too young
- for(var/mob/new_player/player in player_list)
- if(!(player.ready && player.mind && !player.mind.assigned_role))
- continue //This player is not ready
- if(jobban_isbanned(player, job.title))
- level5++
- continue
- if(!job.player_old_enough(player.client))
- level6++
- continue
- if(job.available_in_playtime(player.client))
- level6++
- continue
- if(player.client.prefs.GetJobDepartment(job, 1) & job.flag)
- level1++
- else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag)
- level2++
- else if(player.client.prefs.GetJobDepartment(job, 3) & job.flag)
- level3++
- else level4++ //not selected
+ remembered_info += "Your account number is: #[M.account_number]
"
+ remembered_info += "Your account pin is: [M.remote_access_pin]
"
+ remembered_info += "Your account funds are: $[M.money]
"
- tmp_str += "HIGH=[level1]|MEDIUM=[level2]|LOW=[level3]|NEVER=[level4]|BANNED=[level5]|YOUNG=[level6]|-"
- feedback_add_details("job_preferences",tmp_str)
+ if(M.transaction_log.len)
+ var/datum/transaction/T = M.transaction_log[1]
+ remembered_info += "Your account was created: [T.time], [T.date] at [T.source_terminal]
"
+ H.mind.store_memory(remembered_info)
+
+ // If they're head, give them the account info for their department
+ if(job.head_position)
+ remembered_info = ""
+ var/datum/money_account/department_account = department_accounts[job.department]
+
+ if(department_account)
+ remembered_info += "Your department's account number is: #[department_account.account_number]
"
+ remembered_info += "Your department's account pin is: [department_account.remote_access_pin]
"
+ remembered_info += "Your department's account funds are: $[department_account.money]
"
+
+ H.mind.store_memory(remembered_info)
+
+ H.mind.initial_account = M
+
+ spawn(0)
+ to_chat(H, "Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]")
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index a61a3cea5ce..39481c4f6ab 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -45,7 +45,7 @@
/obj/item/weapon/tank/ui_action_click(mob/user)
toggle_internals(user)
-/obj/item/weapon/tank/proc/toggle_internals(mob/user)
+/obj/item/weapon/tank/proc/toggle_internals(mob/user, silent = FALSE)
var/mob/living/carbon/C = user
if(!istype(C))
return 0
@@ -65,13 +65,16 @@
if(can_open_valve)
if(C.internal)
- to_chat(C, "You switch your internals to [src].")
+ if(!silent)
+ to_chat(C, "You switch your internals to [src].")
else
- to_chat(C, "You open \the [src] valve.")
+ if(!silent)
+ to_chat(C, "You open \the [src] valve.")
C.internal = src
C.update_internals_hud_icon(1)
else
- to_chat(C, "You are not wearing a suitable mask or helmet.")
+ if(!silent)
+ to_chat(C, "You are not wearing a suitable mask or helmet.")
return 0
C.update_action_buttons_icon()
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 46fd640b9fc..035139b81fc 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -574,67 +574,35 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
alert("Invalid mob")
return
- //log_admin("[key_name(src)] has alienized [M.key].")
- var/list/dresspacks = list(
+ var/list/choices = list(
"strip",
"as job...",
- "Engineer RIG",
- "CE RIG",
- "Mining RIG",
- "Syndi RIG",
- "Wizard RIG",
- "Medical RIG",
- "Atmos RIG",
- "standard space gear",
- "tournament standard red",
- "tournament standard green",
- "tournament gangster",
- "tournament chef",
- "tournament janitor",
- "pirate",
- "space pirate",
- "soviet tourist",
- "soviet soldier",
- "soviet admiral",
- "tunnel clown",
- "mime assassin",
- "survivor",
- "greytide",
- "greytide leader",
- "greytide xeno",
- "masked killer",
- "singuloth knight",
- "dark lord",
- "assassin",
- "spy",
- "vox",
- "death commando",
- "syndicate agent",
- "syndicate operative",
- "syndicate bomber",
- "syndicate strike team",
- "syndicate officer",
- "chrono legionnaire",
- "blue wizard",
- "red wizard",
- "marisa wizard",
- "emergency response team member",
- "emergency response team leader",
- "nt vip guest",
- "nt navy officer", // now in jobs list
- "nt navy captain",
- "nt special ops officer", // now in jobs list
- "nt special ops formal",
- )
+ "emergency response team member",
+ "emergency response team leader"
+ )
+
+ var/admin_outfits = subtypesof(/datum/outfit/admin)
+ for(var/type in admin_outfits)
+ var/datum/outfit/O = type
+ var/name = initial(O.name)
+ if(name != "Naked")
+ choices[initial(O.name)] = type
+
var/dostrip = 0
switch(alert("Strip [M] before dressing?", "Strip?", "Yes", "No", "Cancel"))
if("Yes")
dostrip = 1
if("Cancel")
return
- var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
+
+ var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in choices
if(isnull(dresscode))
return
+
+ var/datum/outfit/O
+ if(!(dresscode in list("strip", "as job...", "emergency response team member", "emergency response team leader")))
+ O = choices[dresscode]
+
var/datum/job/jobdatum
if(dresscode == "as job...")
var/jobname = input("Select job", "Robust quick dress shop") as null|anything in get_all_jobs()
@@ -648,6 +616,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(istype(I, /obj/item/organ))
continue
qdel(I)
+
+
switch(dresscode)
if("strip")
//do nothing
@@ -657,493 +627,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(jobdatum)
dresscode = "[jobdatum.title]"
jobdatum.equip(M)
- equip_special_id(M,jobdatum.get_access(),jobdatum.title, jobdatum.idtype)
-
- if("standard space gear")
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M)
- M.equip_to_slot_or_del(J, slot_back)
- J.turn_on()
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
- J.Topic(null, list("stat" = 1))
- equip_special_id(M,get_all_accesses(), "Space Explorer", /obj/item/weapon/card/id)
-
- if("Engineer RIG", "CE RIG", "Mining RIG", "Syndi RIG", "Wizard RIG", "Medical RIG", "Atmos RIG")
- if(dresscode=="Engineer RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig(M), slot_head)
- else if(dresscode=="CE RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/elite(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/elite(M), slot_head)
- else if(dresscode=="Mining RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/mining(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/mining(M), slot_head)
- else if(dresscode=="Syndi RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/syndi(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/syndi(M), slot_head)
- else if(dresscode=="Wizard RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/wizard(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/wizard(M), slot_head)
- else if(dresscode=="Medical RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/medical(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/medical(M), slot_head)
- else if(dresscode=="Atmos RIG")
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/atmos(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/atmos(M), slot_head)
- var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M)
- M.equip_to_slot_or_del(J, slot_back)
- J.turn_on()
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
- equip_special_id(M,get_all_accesses(), "RIG Tester", /obj/item/weapon/card/id)
- J.Topic(null, list("stat" = 1))
-
- if("tournament standard red", "tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
- if(dresscode=="tournament standard red")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
- else
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
-
- if("tournament gangster") //gangster are supposed to fight each other. --rastaf0
- M.equip_to_slot_or_del(new /obj/item/clothing/under/det(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/proto(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store)
-
- if("tournament chef") //Steven Seagal FTW
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store)
-
- if("tournament janitor")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- var/obj/item/weapon/storage/backpack/backpack = new(M)
- for(var/obj/item/I in backpack)
- qdel(I)
- M.equip_to_slot_or_del(backpack, slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand)
- var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M)
- bucket.reagents.add_reagent("water", 70)
- M.equip_to_slot_or_del(bucket, slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
-
- if("pirate")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
- equip_special_id(M,list(access_maint_tunnels), "Pirate", /obj/item/weapon/card/id)
-
- if("space pirate") // not spaceworthy, just has fancier coat.
- M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
- equip_special_id(M,list(access_maint_tunnels), "Space Pirate", /obj/item/weapon/card/id)
-
- if("tunnel clown")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/chaplain_hoodie(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store)
- equip_special_id(M,list(access_clown, access_theatre, access_maint_tunnels), "Tunnel Clown", /obj/item/weapon/card/id)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
- M.equip_to_slot_or_del(fire_axe, slot_r_hand)
-
-
- if("mime assassin")
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/mime(M), slot_back)
- if(M.gender == FEMALE)
- M.equip_or_collect(new /obj/item/clothing/under/sexymime(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/mask/gas/sexymime(M), slot_wear_mask)
- else
- M.equip_or_collect(new /obj/item/clothing/under/mime(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/mask/gas/mime(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/syndie_kit/caneshotgun, slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/toy/crayon/mime, slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/suppressor(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
- var/obj/item/device/pda/mime/pda = new(M)
- pda.owner = M.real_name
- pda.ownjob = "Mime"
- pda.name = "PDA-[M.real_name] ([pda.ownjob])"
- M.equip_to_slot_or_del(pda, slot_wear_pda)
- equip_special_id(M,list(access_mime, access_theatre, access_maint_tunnels), "Mime", /obj/item/weapon/card/id/syndicate)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
-
- if("survivor")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- equip_special_id(M,list(access_maint_tunnels), "Survivor", /obj/item/weapon/card/id)
- for(var/obj/item/carried_item in M.contents)
- if(!istype(carried_item, /obj/item/weapon/implant))
- carried_item.add_blood(M)
-
- if("greytide")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/flag/grey(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- equip_special_id(M,list(access_maint_tunnels), "Greytide", /obj/item/weapon/card/id)
-
- if("greytide leader")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/flag/grey(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- equip_special_id(M,list(access_maint_tunnels), "Greytide Leader", /obj/item/weapon/card/id)
-
- if("greytide xeno")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/xenos(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/xenos(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/toy/toy_xeno(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- equip_special_id(M,list(access_maint_tunnels), "Legit Xenomorph", /obj/item/weapon/card/id)
-
- if("masked killer")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- equip_special_id(M,list(access_maint_tunnels), "Masked Killer", /obj/item/weapon/card/id/syndicate, "syndie")
- var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
- M.equip_to_slot_or_del(fire_axe, slot_r_hand)
- for(var/obj/item/carried_item in M.contents)
- if(!istype(carried_item, /obj/item/weapon/implant))
- carried_item.add_blood(M)//Oh yes, there will be blood...
-
- if("dark lord")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_hand)
- var/obj/item/clothing/suit/hooded/chaplain_hoodie/robe = new /obj/item/clothing/suit/hooded/chaplain_hoodie(M)
- robe.name = "dark lord robes"
- robe.hood.name = "dark lord hood"
- M.equip_to_slot_or_del(robe, slot_wear_suit)
- equip_special_id(M,get_all_accesses(), "Dark Lord", /obj/item/weapon/card/id/syndicate, "syndie")
-
- if("assassin")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
- for(var/obj/item/briefcase_item in sec_briefcase)
- qdel(briefcase_item)
- for(var/i=3, i>0, i--)
- sec_briefcase.handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1)
- sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, 1)
- sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/projectile/revolver/mateba, 1)
- sec_briefcase.handle_item_insertion(new /obj/item/ammo_box/a357, 1)
- sec_briefcase.handle_item_insertion(new /obj/item/weapon/grenade/plastic/c4, 1)
- // briefcase must be unlocked by setting the code.
- M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
- var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M)
- DUST.implant(M)
- var/obj/item/device/pda/heads/pda = new(M)
- pda.owner = M.real_name
- pda.ownjob = "Reaper"
- pda.name = "PDA-[M.real_name] ([pda.ownjob])"
- M.equip_to_slot_or_del(pda, slot_wear_pda)
- equip_special_id(M,get_all_accesses(), "Reaper", /obj/item/weapon/card/id/syndicate, "syndie")
-
- if("spy")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/suppressor(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/chameleon(M), slot_glasses)
- var/obj/item/clothing/gloves/combat/G = new /obj/item/clothing/gloves/combat(src)
- G.name = "black gloves"
- M.equip_to_slot_or_del(G, slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_r_store)
- var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M)
- DUST.implant(M)
- M.equip_to_slot_or_del(new /obj/item/weapon/implanter/storage(M), slot_in_backpack)
- var/obj/item/device/pda/heads/pda = new(M)
- pda.owner = M.real_name
- pda.ownjob = "Spy"
- pda.name = "PDA-[M.real_name] ([pda.ownjob])"
- M.equip_to_slot_or_del(pda, slot_belt)
- equip_special_id(M,list(access_maint_tunnels), "Spy", /obj/item/weapon/card/id/syndicate, "syndie")
-
- if("vox")
- if(M.species.name == "Vox Armalis") // have to do this, they cannot wear normal vox gear!
- M.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate/vox(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate, slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow/vox, slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic, slot_l_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/vox, slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle, slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight, slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs/cable/zipties, slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flash, slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/noisecannon, slot_in_backpack)
- equip_special_id(M,get_all_accesses(), "Vox Armalis", /obj/item/weapon/card/id/syndicate/vox, "syndie")
- else
- M.equip_vox_raider()
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_l_hand)
- M.regenerate_icons()
-
- if("death commando")
- M.equip_death_commando()
-
- if("syndicate agent")
- M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Agent", /obj/item/weapon/card/id/syndicate, "syndie")
- var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(M)
- U.hidden_uplink.uplink_owner="[M.key]"
- U.hidden_uplink.uses = 20
- M.equip_to_slot_or_del(U, slot_r_store)
-
- if("syndicate bomber")
- M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/radio/beacon/syndicate/bomb(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/radio/beacon/syndicate/bomb(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/syndicatedetonator(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Bomber", /obj/item/weapon/card/id/syndicate, "syndie")
-
- if("syndicate operative")
- M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/ammo_box/magazine/m10mm(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/crowbar/red(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/clothing/glasses/night(M), slot_glasses)
- M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt)
- M.equip_or_collect(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_l_store)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/syndi(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/syndi(M), slot_head)
- var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(M)
- R.set_frequency(SYND_FREQ)
- M.equip_to_slot_or_del(R, slot_l_ear)
- var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(M)
- U.hidden_uplink.uplink_owner="[M.key]"
- U.hidden_uplink.uses = 20
- M.equip_to_slot_or_del(U, slot_r_store)
- M.equip_or_collect(new /obj/item/weapon/tank/jetpack/oxygen/harness(M), slot_in_backpack)
- equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Operative", /obj/item/weapon/card/id/syndicate, "syndie")
- var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(M)
- E.implant(M)
-
- if("syndicate strike team")
- M.equip_syndicate_commando()
-
- if("syndicate officer")
- M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/clothing/glasses/thermal(M), slot_glasses)
- M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt)
- M.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_l_store)
- M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/syndicate/black/red/strike(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/syndicate/black/red/strike(M), slot_head)
- var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate/alt(M)
- R.set_frequency(SYND_FREQ)
- M.equip_to_slot_or_del(R, slot_l_ear)
- var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(M)
- U.hidden_uplink.uplink_owner="[M.key]"
- U.hidden_uplink.uses = 50
- M.equip_to_slot_or_del(U, slot_r_store)
- M.equip_or_collect(new /obj/item/weapon/tank/jetpack/oxygen/harness(M), slot_in_backpack)
- equip_special_id(M,get_all_accesses() + get_syndicate_access("Syndicate Commando"), "Syndicate Officer", /obj/item/weapon/card/id/syndicate, "commander")
- var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M)
- DUST.implant(M)
-
- if("nt vip guest")
- M.equip_or_collect(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/clothing/head/that(M), slot_head)
- M.equip_or_collect(new /obj/item/device/radio/headset/ert(M), slot_l_ear)
- M.equip_or_collect(new /obj/item/device/pda/(M), slot_wear_pda)
- equip_special_id(M,get_centcom_access("VIP Guest"), "VIP Guest", /obj/item/weapon/card/id/centcom)
-
- if("nt navy officer")
- M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/officer(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves)
- M.equip_or_collect(new /obj/item/device/radio/headset/centcom(M), slot_l_ear)
- M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head)
- M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_wear_pda)
- M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
- M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
- L.imp_in = M
- L.implanted = 1
- M.sec_hud_set_implants()
- equip_special_id(M,get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer", /obj/item/weapon/card/id/centcom)
-
- if("nt navy captain")
- M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform)
- M.equip_or_collect(new /obj/item/clothing/shoes/centcom(M), slot_shoes)
- M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves)
- M.equip_or_collect(new /obj/item/device/radio/headset/centcom(M), slot_l_ear)
- M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head)
- M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_wear_pda)
- M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
- M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt)
- M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
- var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
- L.imp_in = M
- L.implanted = 1
- M.sec_hud_set_implants()
- equip_special_id(M,get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain", /obj/item/weapon/card/id/centcom)
if("emergency response team member", "emergency response team leader")
var/datum/response_team/equip_team = null
@@ -1171,170 +654,10 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
else
to_chat(src, "Invalid ERT Loadout selected")
- if("nt special ops officer")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(src), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) // job has /obj/item/clothing/head/beret/centcom/officer/navy
- M.equip_to_slot_or_del(new /obj/item/device/pda/centcom(M), slot_wear_pda)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // job has /obj/item/clothing/glasses/hud/security/sunglasses
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/deathsquad/officer(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
- equip_special_id(M,get_centcom_access("Special Operations Officer"), "Special Operations Officer", /obj/item/weapon/card/id/centcom)
- // The following items are unique to this outfit - the special ops officer job does not spawn with them.
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/zipties(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/implanter/loyalty(M), slot_in_backpack)
- if("nt special ops formal")
- M.equip_or_collect(new /obj/item/clothing/under/rank/centcom/captain(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(src), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // special
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store)
- M.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_in_backpack)
-
- var/obj/item/device/pda/centcom/pda = new(M)
- pda.owner = M.real_name
- pda.ownjob = "Special Operations Officer"
- pda.icon_state = "pda-syndi"
- pda.name = "PDA-[M.real_name] ([pda.ownjob])"
- pda.desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition designed for military field work."
-
- M.equip_or_collect(pda, slot_wear_pda)
- M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
- M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
- equip_special_id(M,get_centcom_access("Special Operations Officer"), "Special Operations Officer", /obj/item/weapon/card/id/centcom)
-
- if("singuloth knight")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/singuloth(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/ert(src), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/cyber(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/singuloth(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/claymore/ceremonial(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(M), slot_s_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/knighthammer(M), slot_back)
- equip_special_id(M,get_all_accesses(), "Singuloth Knight", /obj/item/weapon/card/id)
-
- if("blue wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id)
-
- if("red wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id)
-
- if("marisa wizard")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/marisa(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id)
-
- if("soviet tourist")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
- equip_special_id(M,list(access_maint_tunnels), "Soviet Tourist", /obj/item/weapon/card/id)
-
- if("soviet soldier")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
- equip_special_id(M,list(access_maint_tunnels), "Soviet Soldier", /obj/item/weapon/card/id)
-
- if("soviet admiral")
- M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
- M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
- equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Soviet Admiral", /obj/item/weapon/card/id, "commander")
- //W.icon_state = "commander"
-
- if("chrono legionnaire")
- M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/chronos(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(src), slot_wear_mask)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
- M.equip_to_slot_or_del(new /obj/item/clothing/glasses/night(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/chronos(M), slot_wear_suit)
- M.equip_to_slot_or_del(new /obj/item/weapon/chrono_eraser(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(src), slot_s_store)
- equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Chrono Legionnaire", /obj/item/weapon/card/id/syndicate, "syndie")
+ else // outfit datum
+ if(O)
+ M.equipOutfit(O, FALSE)
M.regenerate_icons()
@@ -1342,18 +665,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
message_admins("\blue [key_name_admin(usr)] changed the equipment of [key_name_admin(M)] to [dresscode].", 1)
return
-/client/proc/equip_special_id(var/mob/living/carbon/human/H, var/list/theaccess = null, var/jobtext, var/obj/item/weapon/card/id/id_type = /obj/item/weapon/card/id, var/special_icon = null)
- if(!check_rights(R_EVENT))
- return
-
- var/obj/item/weapon/card/id/W = new id_type(H)
- if(special_icon)
- W.icon_state = special_icon
- W.name = "[H.real_name]'s ID Card ([jobtext])"
- W.access = theaccess
- W.assignment = "[jobtext]"
- W.registered_name = H.real_name
- H.equip_to_slot_or_del(W, slot_wear_id)
/client/proc/startSinglo()
set category = "Debug"
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index 907fcb92913..9bfe544cef5 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -49,7 +49,7 @@
W.assignment = "Highlander"
W.registered_name = H.real_name
H.equip_to_slot_or_del(W, slot_wear_id)
- H.species.equip(H)
+ H.species.after_equip_job(null, H)
H.regenerate_icons()
message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm
index a88270077d6..750d0d89b93 100644
--- a/code/modules/admin/verbs/onlyoneteam.dm
+++ b/code/modules/admin/verbs/onlyoneteam.dm
@@ -55,7 +55,7 @@
H.equip_to_slot_or_del(W, slot_wear_id)
team_toggle = !team_toggle
- H.species.equip(H)
+ H.species.after_equip_job(null, H)
H.regenerate_icons()
message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1)
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 15af19c19e4..04d1f470327 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -108,7 +108,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/underwear = "Nude" //underwear type
var/undershirt = "Nude" //undershirt type
var/socks = "Nude" //socks type
- var/backbag = 2 //backpack type
+ var/backbag = GBACKPACK //backpack type
var/ha_style = "None" //Head accessory style
var/r_headacc = 0 //Head accessory colour
var/g_headacc = 0 //Head accessory colour
@@ -414,7 +414,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "Underwear: [underwear]
"
dat += "Undershirt: [undershirt]
"
dat += "Socks: [socks]
"
- dat += "Backpack Type: [backbaglist[backbag]]
"
+ dat += "Backpack Type: [backbag]
"
dat += ""
@@ -1240,7 +1240,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
g_skin = rand(0,255)
b_skin = rand(0,255)
if("bag")
- backbag = rand(1,4)
+ backbag = pick(backbaglist)
/*if("skin_style")
h_style = random_skin_style(gender)*/
if("all")
@@ -1718,9 +1718,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
ooccolor = new_ooccolor
if("bag")
- var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist
+ var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in backbaglist
if(new_backbag)
- backbag = backbaglist.Find(new_backbag)
+ backbag = new_backbag
if("nt_relation")
var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed")
@@ -2150,8 +2150,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(body_accessory)
character.body_accessory = body_accessory_by_name["[body_accessory]"]
- if(backbag > 4 || backbag < 1)
- backbag = 1 //Same as above
character.backbag = backbag
//Debugging report to track down a bug, which randomly assigned the plural gender to people.
diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm
index a945af5ba2f..b4a589f35a5 100644
--- a/code/modules/client/preference/preferences_mysql.dm
+++ b/code/modules/client/preference/preferences_mysql.dm
@@ -224,7 +224,7 @@
b_eyes = text2num(query.item[35])
underwear = query.item[36]
undershirt = query.item[37]
- backbag = text2num(query.item[38])
+ backbag = query.item[38]
b_type = query.item[39]
@@ -312,7 +312,7 @@
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
underwear = sanitize_text(underwear, initial(underwear))
undershirt = sanitize_text(undershirt, initial(undershirt))
- backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
+ backbag = sanitize_text(backbag, initial(backbag))
b_type = sanitize_text(b_type, initial(b_type))
alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option))
diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm
index fa8de8e2b87..f05a6abcd2b 100644
--- a/code/modules/mob/living/carbon/human/interactive/interactive.dm
+++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm
@@ -132,7 +132,6 @@
job = myjob.title
mind.assigned_role = job
myjob.equip(src)
- myjob.apply_fingerprints(T)
/mob/living/carbon/human/interactive/proc/reset()
walk(src, 0)
@@ -193,7 +192,6 @@
for(var/obj/item/W in T)
qdel(W)
T.myjob.equip(T)
- T.myjob.apply_fingerprints(T)
T.doSetup(alt_title)
var/shouldDoppel = input("Do you want the SNPC to disguise themself as a crewmember?") as anything in list("Yes", "No")
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index c375d718e3d..93887e8542f 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -615,3 +615,17 @@
return 1
return 0 //Unsupported slot
+
+/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
+ var/datum/outfit/O = null
+
+ if(ispath(outfit))
+ O = new outfit
+ else
+ O = outfit
+ if(!istype(O))
+ return 0
+ if(!O)
+ return 0
+
+ return O.equip(src, visualsOnly)
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index 42b64cccd01..095ea5ab6ca 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -34,7 +34,7 @@
message = replacetext(message, "s", stutter("ss"))
return message
-/datum/species/plasmaman/equip(var/mob/living/carbon/human/H)
+/datum/species/plasmaman/after_equip_job(datum/job/J, mob/living/carbon/human/H)
// Unequip existing suits and hats.
H.unEquip(H.wear_suit)
H.unEquip(H.head)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 54f68f2b101..fec4da6fae4 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -439,7 +439,10 @@
/datum/species/proc/say_filter(mob/M, message, datum/language/speaking)
return message
-/datum/species/proc/equip(var/mob/living/carbon/human/H)
+/datum/species/proc/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
+ return
+
+/datum/species/proc/after_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE)
return
/datum/species/proc/can_understand(var/mob/other)
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 99d5689ae56..d88eb8caa65 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -343,7 +343,7 @@
newname += pick(vox_name_syllables)
return capitalize(newname)
-/datum/species/vox/equip(var/mob/living/carbon/human/H)
+/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H)
if(H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime")
H.unEquip(H.wear_mask)
H.unEquip(H.l_hand)
@@ -740,7 +740,7 @@
genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
..()
-/datum/species/grey/equip(var/mob/living/carbon/human/H)
+/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
var/speech_pref = H.client.prefs.speciesprefs
if(speech_pref)
H.mind.speech_span = "wingdings"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 3f3792fd1b7..4da4a47945b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -231,22 +231,18 @@
//Mob can equip. Equip it.
equip_to_slot_or_del(W, slot)
else
- //Mob can't equip it. Put it in a bag B.
- // Do I have a backpack?
- var/obj/item/weapon/storage/B
- if(istype(back,/obj/item/weapon/storage))
- //Mob is wearing backpack
- B = back
- else
- //not wearing backpack. Check if player holding plastic bag
- B=is_in_hands(/obj/item/weapon/storage/bag/plasticbag)
- if(!B) //If not holding plastic bag, give plastic bag
- B=new /obj/item/weapon/storage/bag/plasticbag(null) // Null in case of failed equip.
- if(!put_in_hands(B))
- return // Bag could not be placed in players hands. I don't know what to do here...
- //Now, B represents a container we can insert W into.
- B.handle_item_insertion(W,1)
- return B
+ //Mob can't equip it. Put it their backpack or toss it on the floor
+ if(istype(back, /obj/item/weapon/storage))
+ var/obj/item/weapon/storage/S = back
+ //Now, B represents a container we can insert W into.
+ S.handle_item_insertion(W,1)
+ return S
+
+ var/turf/T = get_turf(src)
+ if(istype(T))
+ W.forceMove(T)
+ return T
+
//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
var/list/slot_equipment_priority = list( \
diff --git a/paradise.dme b/paradise.dme
index a066e640690..841dd078c1b 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -282,6 +282,8 @@
#include "code\datums\helper_datums\map_template.dm"
#include "code\datums\helper_datums\teleport.dm"
#include "code\datums\helper_datums\topic_input.dm"
+#include "code\datums\outfits\outfit.dm"
+#include "code\datums\outfits\outfit_admin.dm"
#include "code\datums\ruins\space.dm"
#include "code\datums\spells\area_teleport.dm"
#include "code\datums\spells\bloodcrawl.dm"