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"