From 14ba6fded66ed571284f9a44e1288e7d15f1e749 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 17 Feb 2017 11:35:45 -0800 Subject: [PATCH 1/3] Ported /tg/'s outfit datums, refactored job controller to support them Players: - The only thing that you should notice is that your backpack options have changed. Instead of being "None", "Backpack", "Satchel", and "Satchel Alt", there are 6 options: - "Grey Backpack": Ensures you always recieve a plain grey backpack. - "Grey Satchel": Same as the above, grey, plain, satchel. - "Grey Dufflebag": So you don't have to rush the locker room, I guess. Just kinda ransacked it from /tg/. Happy to revert it, please do not post a five paragraph text wall calling me a shitlord powergaming hitler-loving furry. - "Leather Satchel": It's a leather satchel. What the hell did you think it was? - "Department Backpack": Gives you the department's default backpack. Grey for most jobs. - "Department Satchel": It gives you the department's default satchel; A grey satchel if the department doesn't have one. Coders: - The above means this needs a minor SQL change: ``` SQL goes here I'll write a query later Can't be bothered now Kill me please ``` - This is a cleaner method of handling job equipment than "M.equip_or_collect" x 1000. Jobs specify a '/datum/outfit' datum, which defines all of the things to equip to the user. - Minor note: equip_or_collect will no longer ever generate a plastic bag. It will instead just drop stuff on the floor if it can't stuff it into a mob. If this is even slightly a point of contention, more than happy to revert it; It was just requested by Fox. - Addendum: This also has the effect of making it so that labcoats are just thrown onto the floor if you have a loadout suit. It's not really avoidable. Uniforms and suits are equipped before the backpack. - Changes from /tg/: - Changed all of the "H.equip_to_slot_or_del" calls into invoking a new "equip_item" proc; This is used to support a new variable called "collect_not_del". Job outfits use this, it makes it so that the system calls equip_or_collect instead of equip_to_slot_or_del. The idea being that job items should never be lost to the void, especially because they can conflict with loadout items. TODO: - Retrofit "Equip Mob" verb to use this for all of the non-job options - Fully implement head announcements(?) - May be best for a second PR that addresses all of the real issues with our current job system ( Now go reread that SQL code block :) ) --- SQL/paradise_schema.sql | 2 +- SQL/paradise_schema_prefixed.sql | 2 +- code/_globalvars/lists/flavor_misc.dm | 14 +- code/datums/outfit.dm | 143 +++ code/game/gamemodes/wizard/wizard.dm | 2 +- code/game/jobs/job/central.dm | 94 +- code/game/jobs/job/civilian.dm | 21 +- code/game/jobs/job/engineering.dm | 132 +- code/game/jobs/job/job.dm | 194 ++- code/game/jobs/job/medical.dm | 291 ++--- code/game/jobs/job/science.dm | 134 +- code/game/jobs/job/security.dm | 307 ++--- code/game/jobs/job/silicon.dm | 13 +- code/game/jobs/job/supervisor.dm | 265 ++-- code/game/jobs/job/support.dm | 383 +++--- code/game/jobs/job/support_chaplain.dm | 276 ++-- code/game/jobs/job_controller.dm | 1111 ++++++++--------- code/modules/admin/verbs/debug.dm | 17 +- code/modules/admin/verbs/onlyone.dm | 2 +- code/modules/admin/verbs/onlyoneteam.dm | 2 +- code/modules/client/preference/preferences.dm | 6 +- .../client/preference/preferences_mysql.dm | 4 +- .../carbon/human/interactive/interactive.dm | 2 - .../mob/living/carbon/human/inventory.dm | 14 + .../living/carbon/human/species/plasmaman.dm | 2 +- .../living/carbon/human/species/species.dm | 5 +- .../living/carbon/human/species/station.dm | 4 +- code/modules/mob/mob.dm | 28 +- paradise.dme | 1 + 29 files changed, 1828 insertions(+), 1643 deletions(-) create mode 100644 code/datums/outfit.dm 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/_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/outfit.dm b/code/datums/outfit.dm new file mode 100644 index 00000000000..9517ee09ef8 --- /dev/null +++ b/code/datums/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/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..f53a0936c00 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,27 @@ 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 + box = /obj/item/weapon/storage/box/engineer /datum/job/engineer @@ -49,26 +51,27 @@ 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 + box = /obj/item/weapon/storage/box/engineer @@ -81,24 +84,23 @@ 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 +111,26 @@ 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 + 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..b0c75cb1c99 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,135 @@ 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/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 + 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..060455b4ead 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,26 @@ 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 /datum/job/doctor title = "Medical Doctor" @@ -47,54 +47,55 @@ 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 + +/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 +109,26 @@ 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 /datum/job/geneticist title = "Geneticist" @@ -140,25 +139,26 @@ 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 - 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 +169,26 @@ 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 /datum/job/psychiatrist title = "Psychiatrist" @@ -200,34 +199,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 +236,28 @@ 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 + 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..4e7e5e39683 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,44 @@ 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 + /datum/job/scientist title = "Scientist" @@ -53,33 +55,33 @@ 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 + + /datum/job/roboticist title = "Roboticist" flag = ROBOTICIST @@ -89,28 +91,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..431e67eede8 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,31 @@ 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 @@ -56,37 +56,36 @@ 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 @@ -100,50 +99,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 +156,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_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 + + /datum/job/brigdoc title = "Brig Physician" @@ -192,30 +197,30 @@ 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 + - 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 +231,30 @@ 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 + 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..a3e281095a1 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,44 @@ 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 + +/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 +63,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 +81,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 +110,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 +126,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 +155,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 +167,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 +199,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 +210,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 +249,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..bf4227adc6d 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,22 @@ 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 @@ -109,25 +106,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 +133,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 +158,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 +196,50 @@ 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 + +/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 +251,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 +305,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 +330,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 +356,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/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 59ea8992889..04c10b8dbac 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -657,7 +657,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) @@ -1474,15 +1473,15 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return error_cache.showTo(usr) - + /client/proc/jump_to_ruin() set category = "Debug" set name = "Jump to Ruin" set desc = "Displays a list of all placed ruins to teleport to." - + if(!check_rights(R_DEBUG)) return - + var/list/names = list() for(var/i in ruin_landmarks) var/obj/effect/landmark/ruin/ruin_landmark = i @@ -1505,21 +1504,21 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(istype(landmark)) var/datum/map_template/ruin/template = landmark.ruin_template admin_forcemove(usr, get_turf(landmark)) - + to_chat(usr, "[template.name]") to_chat(usr, "[template.description]") - + log_admin("[key_name(usr)] jumped to ruin [ruinname]") if(!isobserver(usr)) message_admins("[key_name_admin(usr)] jumped to ruin [ruinname]", 1) - + feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - + /client/proc/toggle_medal_disable() set category = "Debug" set name = "Toggle Medal Disable" set desc = "Toggles the safety lock on trying to contact the medal hub." - + if(!check_rights(R_DEBUG)) return 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..7ce5da23965 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 @@ -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") @@ -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 05f24facc65..3618aa51eb0 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -33,7 +33,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 de7747e4855..16d905fefd8 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -339,7 +339,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) @@ -724,7 +724,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 566614547bc..9fe2e3b3b2a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -207,6 +207,7 @@ #include "code\datums\mind.dm" #include "code\datums\mixed.dm" #include "code\datums\modules.dm" +#include "code\datums\outfit.dm" #include "code\datums\periodic_news.dm" #include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" From d1ae0749ccbbc0e2770a4459fe9cc7567fd2d845 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 17 Feb 2017 11:45:39 -0800 Subject: [PATCH 2/3] Who even knew department duffelbags were a thing? --- code/game/jobs/job/engineering.dm | 5 +++++ code/game/jobs/job/job.dm | 3 +++ code/game/jobs/job/medical.dm | 7 +++++++ code/game/jobs/job/science.dm | 2 ++ code/game/jobs/job/security.dm | 5 +++++ code/game/jobs/job/supervisor.dm | 1 + code/game/jobs/job/support.dm | 2 ++ 7 files changed, 25 insertions(+) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index f53a0936c00..1cdff2ec775 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -39,6 +39,7 @@ 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 @@ -69,8 +70,10 @@ 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 @@ -100,6 +103,7 @@ 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 @@ -133,4 +137,5 @@ 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 b0c75cb1c99..56e41ad2d82 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -129,6 +129,7 @@ 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() @@ -145,6 +146,8 @@ 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 diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 060455b4ead..3c6d6f7fe01 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -37,6 +37,7 @@ 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" @@ -68,6 +69,7 @@ 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) . = ..() @@ -129,6 +131,7 @@ 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" @@ -158,6 +161,7 @@ backpack = /obj/item/weapon/storage/backpack/genetics satchel = /obj/item/weapon/storage/backpack/satchel_gen + dufflebag = /obj/item/weapon/storage/backpack/duffel/genetics /datum/job/virologist @@ -187,8 +191,10 @@ 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" @@ -259,5 +265,6 @@ 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 diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 4e7e5e39683..2701589b2db 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -44,6 +44,7 @@ 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 @@ -80,6 +81,7 @@ 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 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 431e67eede8..62b248c4875 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -44,6 +44,7 @@ backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec + dufflebag = /obj/item/weapon/storage/backpack/duffel/security @@ -86,6 +87,7 @@ backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec + dufflebag = /obj/item/weapon/storage/backpack/duffel/security @@ -185,6 +187,7 @@ backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec + dufflebag = /obj/item/weapon/storage/backpack/duffel/security @@ -219,6 +222,7 @@ backpack = /obj/item/weapon/storage/backpack/medic satchel = /obj/item/weapon/storage/backpack/satchel_med + dufflebag = /obj/item/weapon/storage/backpack/duffel/medical @@ -257,4 +261,5 @@ 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/supervisor.dm b/code/game/jobs/job/supervisor.dm index a3e281095a1..15b98df30ad 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -45,6 +45,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) 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) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index bf4227adc6d..b7487476e1e 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -93,6 +93,7 @@ backpack = /obj/item/weapon/storage/backpack/botany satchel = /obj/item/weapon/storage/backpack/satchel_hyd + dufflebag = /obj/item/weapon/storage/backpack/duffel/hydro @@ -221,6 +222,7 @@ 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) . = ..() From e7023fd0324da41ce2d2d453c79ee24ae4fe5a6d Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Fri, 17 Feb 2017 16:17:59 -0800 Subject: [PATCH 3/3] Refactored 'select equipment' to use outfit datums Also moved outfit datum files to code/datum/outfits/, because I had nowhere better to put all of the admin equipment- job stuff is still with jobs --- code/__HELPERS/unsorted.dm | 14 +- code/datums/{ => outfits}/outfit.dm | 0 code/datums/outfits/outfit_admin.dm | 1066 +++++++++++++++++ .../game/objects/items/weapons/tanks/tanks.dm | 11 +- code/modules/admin/verbs/debug.dm | 738 +----------- code/modules/client/preference/preferences.dm | 6 +- paradise.dme | 3 +- 7 files changed, 1109 insertions(+), 729 deletions(-) rename code/datums/{ => outfits}/outfit.dm (100%) create mode 100644 code/datums/outfits/outfit_admin.dm 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/datums/outfit.dm b/code/datums/outfits/outfit.dm similarity index 100% rename from code/datums/outfit.dm rename to code/datums/outfits/outfit.dm 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/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 04c10b8dbac..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 @@ -658,494 +628,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that dresscode = "[jobdatum.title]" jobdatum.equip(M) - 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(istype(M, /mob/living/carbon/human/voxarmalis)) // have to do this, they cannot wear normal vox gear! - M.equip_to_slot_or_del(new /obj/item/clothing/under/vox_grey(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/clothing/under/vox/vox_robes (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/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 switch(alert("Level", "Emergency Response Team", "Amber", "Red", "Gamma")) @@ -1172,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() @@ -1343,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/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 7ce5da23965..04d1f470327 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -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 += "" @@ -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") diff --git a/paradise.dme b/paradise.dme index 9fe2e3b3b2a..593bfd764cb 100644 --- a/paradise.dme +++ b/paradise.dme @@ -207,7 +207,6 @@ #include "code\datums\mind.dm" #include "code\datums\mixed.dm" #include "code\datums\modules.dm" -#include "code\datums\outfit.dm" #include "code\datums\periodic_news.dm" #include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" @@ -283,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"