diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 4d07dc41b64..5159093b96f 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -3782,9 +3782,8 @@ /area/tdome/tdomeobserve) "lm" = ( /obj/effect/forcefield, -/obj/structure/door_assembly{ +/obj/structure/door_assembly/door_assembly_uranium{ anchored = 1; - icon_state = "door_as_uranium1"; name = "Bridge" }, /turf/simulated/floor/plasteel/cult, @@ -4347,9 +4346,8 @@ /turf/simulated/floor/plating, /area/syndicate_mothership) "mQ" = ( -/obj/structure/door_assembly{ +/obj/structure/door_assembly/door_assembly_uranium{ anchored = 1; - icon_state = "door_as_uranium1"; name = "Break Room" }, /turf/simulated/floor/plasteel/cult, @@ -5032,9 +5030,8 @@ }, /area/shuttle/syndicate) "oB" = ( -/obj/structure/door_assembly{ +/obj/structure/door_assembly/door_assembly_uranium{ anchored = 1; - icon_state = "door_as_uranium1"; name = "Corridor A" }, /turf/simulated/floor/plasteel/cult, diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 0222e02a718..cfcd933be77 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -262,4 +262,8 @@ var/list/bloody_footprints_cache = list() #define BLOOD_STATE_HUMAN "blood" #define BLOOD_STATE_XENO "xeno" #define BLOOD_STATE_OIL "oil" -#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" \ No newline at end of file +#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" +//Turf wet states +#define TURF_DRY 0 +#define TURF_WET_WATER 1 +#define TURF_WET_LUBE 2 \ No newline at end of file diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm index 56750520095..6870c3d303b 100644 --- a/code/datums/material_container.dm +++ b/code/datums/material_container.dm @@ -48,10 +48,10 @@ if(amt > 0 && has_space(amt)) var/total_amount_saved = total_amount if(material_type) - for(var/datum/material/M in materials) - if(M.material_type == material_type) - M.amount += amt - total_amount += amt + var/datum/material/M = materials[material_type] + if(M) + M.amount += amt + total_amount += amt else for(var/datum/material/M in materials) M.amount += amt @@ -93,21 +93,21 @@ //For consuming material //mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200) -/datum/material_container/proc/use_amount(list/mats) +/datum/material_container/proc/use_amount(list/mats, multiplier=1) if(!mats || !mats.len) return 0 var/datum/material/M for(var/MAT in materials) M = materials[MAT] - if(M.amount < mats[MAT]) + if(M.amount < (mats[MAT] * multiplier)) return 0 var/total_amount_save = total_amount for(var/MAT in materials) M = materials[MAT] - M.amount -= mats[MAT] - total_amount -= mats[MAT] + M.amount -= mats[MAT] * multiplier + total_amount -= mats[MAT] * multiplier return total_amount_save - total_amount @@ -124,7 +124,9 @@ //For spawning mineral sheets; internal use only /datum/material_container/proc/retrieve(sheet_amt, datum/material/M) - if(sheet_amt > 0 && M.amount >= (sheet_amt * MINERAL_MATERIAL_AMOUNT)) + if(sheet_amt > 0) + if(M.amount < (sheet_amt * MINERAL_MATERIAL_AMOUNT)) + sheet_amt = round(M.amount / MINERAL_MATERIAL_AMOUNT) var/count = 0 while(sheet_amt > MAX_STACK_SIZE) @@ -159,6 +161,17 @@ /datum/material_container/proc/has_space(amt = 0) return (total_amount + amt) <= max_amount +/datum/material_container/proc/has_materials(list/mats, multiplier=1) + if(!mats || !mats.len) + return 0 + + var/datum/material/M + for(var/MAT in mats) + M = materials[MAT] + if(M.amount < (mats[MAT] * multiplier)) + return 0 + return 1 + /datum/material_container/proc/amount2sheet(amt) if(amt >= MINERAL_MATERIAL_AMOUNT) return round(amt / MINERAL_MATERIAL_AMOUNT) @@ -173,9 +186,6 @@ var/datum/material/M = materials[material_type] return M ? M.amount : 0 -/datum/material_container/proc/can_insert(obj/item/I) - return get_item_material_amount(I) - //returns the amount of material relevant to this container; //if this container does not support glass, any glass in 'I' will not be taken into account /datum/material_container/proc/get_item_material_amount(obj/item/I) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm new file mode 100644 index 00000000000..80da62ee49e --- /dev/null +++ b/code/datums/outfit.dm @@ -0,0 +1,75 @@ +/datum/outfit + var/name = "Naked" + + 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/ears = null + var/glasses = null + var/id = null + var/l_pocket = null + var/r_pocket = null + var/suit_store = null + var/r_hand = null + var/l_hand = null + var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format + +/datum/outfit/proc/pre_equip(mob/living/carbon/human/H) + //to be overriden for customization depending on client prefs,species etc + return + +/datum/outfit/proc/post_equip(mob/living/carbon/human/H) + //to be overriden for toggling internals, id binding, access etc + return + +/datum/outfit/proc/equip(mob/living/carbon/human/H) + pre_equip(H) + + //Start with uniform,suit,backpack for additional slots + if(uniform) + H.equip_to_slot_or_del(new uniform(H),slot_w_uniform) + if(suit) + H.equip_to_slot_or_del(new suit(H),slot_wear_suit) + if(back) + H.equip_to_slot_or_del(new back(H),slot_back) + if(belt) + H.equip_to_slot_or_del(new belt(H),slot_belt) + if(gloves) + H.equip_to_slot_or_del(new gloves(H),slot_gloves) + if(shoes) + H.equip_to_slot_or_del(new shoes(H),slot_shoes) + if(head) + H.equip_to_slot_or_del(new head(H),slot_head) + if(mask) + H.equip_to_slot_or_del(new mask(H),slot_wear_mask) + if(ears) + H.equip_to_slot_or_del(new ears(H),slot_ears) + if(glasses) + H.equip_to_slot_or_del(new glasses(H),slot_glasses) + if(id) + H.equip_to_slot_or_del(new id(H),slot_wear_id) + if(l_pocket) + H.equip_to_slot_or_del(new l_pocket(H),slot_l_store) + if(r_pocket) + H.equip_to_slot_or_del(new r_pocket(H),slot_r_store) + if(suit_store) + H.equip_to_slot_or_del(new suit_store(H),slot_s_store) + + if(l_hand) + H.put_in_l_hand(new l_hand(H)) + if(r_hand) + H.put_in_r_hand(new r_hand(H)) + + for(var/path in backpack_contents) + var/number = backpack_contents[path] + for(var/i=0,i1)//Cooks + suit = /obj/item/clothing/suit/apron/chef + head = /obj/item/clothing/head/soft/mime - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - switch(cooks) - if(1) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chef(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(H), slot_head) - else - H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron/chef(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/soft/mime(H), slot_head) /* Botanist @@ -158,18 +169,21 @@ Botanist supervisors = "the head of personnel" selection_color = "#bbe291" - default_pda = /obj/item/device/pda/botanist - default_headset = /obj/item/device/radio/headset/headset_srv + outfit = /datum/outfit/job/botanist access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning. minimal_access = list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning. -/datum/job/hydro/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store) +/datum/outfit/job/botanist + name = "Botanist" + + belt = /obj/item/device/pda/botanist + ears = /obj/item/device/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/hydroponics + suit = /obj/item/clothing/suit/apron + gloves =/obj/item/clothing/gloves/botanic_leather + suit_store = /obj/item/device/analyzer/plant_analyzer + /* Janitor @@ -186,12 +200,14 @@ Janitor selection_color = "#bbe291" var/global/janitors = 0 - default_pda = /obj/item/device/pda/janitor - default_headset = /obj/item/device/radio/headset/headset_srv + outfit = /datum/outfit/job/janitor access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels) -/datum/job/janitor/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) +/datum/outfit/job/janitor + name = "Janitor" + + belt = /obj/item/device/pda/janitor + ears = /obj/item/device/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/janitor \ No newline at end of file diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 01ab44ea8a1..c034b5696e5 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -12,25 +12,32 @@ Clown supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/clown - default_backpack = /obj/item/weapon/storage/backpack/clown - default_satchel = /obj/item/weapon/storage/backpack/clown + outfit = /datum/outfit/job/clown access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/clown/equip_items(mob/living/carbon/human/H) - H.fully_replace_character_name(H.real_name, pick(clown_names)) // Give him a temporary random name to prevent identity revealing +/datum/outfit/job/clown + name = "Clown" - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_r_store) + belt = /obj/item/device/pda/clown + uniform = /obj/item/clothing/under/rank/clown + shoes = /obj/item/clothing/shoes/clown_shoes + mask = /obj/item/clothing/mask/gas/clown_hat + l_pocket = /obj/item/weapon/bikehorn + r_pocket = /obj/item/toy/crayon/rainbow + backpack_contents = list(/obj/item/weapon/stamp/clown=1,/obj/item/weapon/reagent_containers/spray/waterflower=1) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H, 50), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(H), slot_in_backpack) + 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) + ..() + H.fully_replace_character_name(H.real_name, pick(clown_names)) + +/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H) + ..() + new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H.back, 50) H.dna.add_mutation(CLOWNMUT) H.rename_self("clown") @@ -49,24 +56,30 @@ Mime supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/mime - default_backpack = /obj/item/weapon/storage/backpack/mime - default_satchel = /obj/item/weapon/storage/backpack/mime + outfit = /datum/outfit/job/mime access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/mime/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/mime(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(H), slot_wear_suit) +/datum/outfit/job/mime + name = "Mime" - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/toy/crayon/mime(H), slot_in_backpack) + belt = /obj/item/device/pda/mime + uniform = /obj/item/clothing/under/rank/mime + mask = /obj/item/clothing/mask/gas/mime + gloves = /obj/item/clothing/gloves/color/white + head = /obj/item/clothing/head/beret + suit = /obj/item/clothing/suit/suspenders + l_pocket = /obj/item/weapon/bikehorn + r_pocket = /obj/item/toy/crayon/rainbow + backpack_contents = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing=1,\ + /obj/item/toy/crayon/mime=1) + backpack = /obj/item/weapon/storage/backpack/mime + satchel = /obj/item/weapon/storage/backpack/mime + +/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H) + ..() 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)) @@ -88,17 +101,19 @@ Librarian supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/librarian + outfit = /datum/outfit/job/librarian access = list(access_library) minimal_access = list(access_library) -/datum/job/librarian/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/librarian(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/books(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_r_store) - H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) +/datum/outfit/job/librarian + name = "Librarian" + + belt = /obj/item/device/pda/librarian + uniform = /obj/item/clothing/under/rank/librarian + l_hand = /obj/item/weapon/storage/bag/books + r_pocket = /obj/item/weapon/barcodescanner + l_pocket = /obj/item/device/laser_pointer /* Lawyer @@ -113,25 +128,28 @@ Lawyer spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#dddddd" - var/global/lawyers = 0 //Counts lawyer amount + var/lawyers = 0 //Counts lawyer amount - default_pda = /obj/item/device/pda/lawyer - default_headset = /obj/item/device/radio/headset/headset_sec + outfit = /datum/outfit/job/lawyer access = list(access_lawyer, access_court, access_sec_doors) minimal_access = list(access_lawyer, access_court, access_sec_doors) -/datum/job/lawyer/equip_items(mob/living/carbon/human/H) - lawyers += 1 +/datum/outfit/job/lawyer + name = "Lawyer" - switch(lawyers) - if(1) - H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/bluesuit(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/lawyer(H), slot_wear_suit) - else - H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/purpsuit(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/lawyer/purple(H), slot_wear_suit) + belt = /obj/item/device/pda/lawyer + ears = /obj/item/device/radio/headset/headset_sec + uniform = /obj/item/clothing/under/lawyer/bluesuit + suit = /obj/item/clothing/suit/toggle/lawyer + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/weapon/storage/briefcase + l_pocket = /obj/item/device/laser_pointer - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) +/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H) + ..() + var/datum/job/lawyer/J = SSjob.GetJob(H.job) + J.lawyers++ + if(J.lawyers>1) + uniform = /obj/item/clothing/under/lawyer/purpsuit + suit = /obj/item/clothing/suit/toggle/lawyer/purple \ No newline at end of file diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index 87ffe8f8b19..261193a8563 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -13,14 +13,19 @@ Chaplain supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/chaplain + outfit = /datum/outfit/job/chaplain access = list(access_morgue, access_chapel_office, access_crematorium) minimal_access = list(access_morgue, access_chapel_office, access_crematorium) -/datum/job/chaplain/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) +/datum/outfit/job/chaplain + name = "Chaplain" + + belt = /obj/item/device/pda/chaplain + uniform = /obj/item/clothing/under/rank/chaplain + +/datum/outfit/job/chaplain/post_equip(mob/living/carbon/human/H) + ..() var/obj/item/weapon/storage/book/bible/B = new /obj/item/weapon/storage/book/bible/booze(H) var/new_religion = "Christianity" diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 1d7961293cf..a984e5f2147 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -14,13 +14,7 @@ Chief Engineer req_admin_notify = 1 minimal_player_age = 7 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/ce - default_pda_slot = slot_l_store - default_headset = /obj/item/device/radio/headset/heads/ce - default_backpack = /obj/item/weapon/storage/backpack/industrial - default_satchel = /obj/item/weapon/storage/backpack/satchel_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/ce access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, @@ -31,17 +25,27 @@ Chief Engineer access_heads, access_construction, access_sec_doors, access_minisat, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_mineral_storeroom) -/datum/job/chief_engineer/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves) +/datum/outfit/job/ce + name = "Chief Engineer" - //Equip telebaton - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + id = /obj/item/weapon/card/id/silver + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/device/pda/heads/ce + ears = /obj/item/device/radio/headset/heads/ce + uniform = /obj/item/clothing/under/rank/chief_engineer + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hardhat/white + gloves = /obj/item/clothing/gloves/color/black/ce + backpack_contents = list(/obj/item/weapon/melee/classic_baton/telescopic=1) - announce_head(H, list("Engineering")) //tell underlings (engineering radio) they have a head + backpack = /obj/item/weapon/storage/backpack/industrial + satchel = /obj/item/weapon/storage/backpack/satchel_eng + box = /obj/item/weapon/storage/box/engineer + pda_slot = slot_l_store + +/datum/outfit/job/ce/post_equip(mob/living/carbon/human/H) + ..() + announce_head(H, list("Engineering")) /* Station Engineer @@ -57,24 +61,28 @@ Station Engineer supervisors = "the chief engineer" selection_color = "#fff5cc" - default_pda = /obj/item/device/pda/engineering - default_pda_slot = slot_l_store - default_headset = /obj/item/device/radio/headset/headset_eng - default_backpack = /obj/item/weapon/storage/backpack/industrial - default_satchel = /obj/item/weapon/storage/backpack/satchel_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/engineer access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat) minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_tcomsat) -/datum/job/engineer/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/device/t_scanner(H), slot_r_store) +/datum/outfit/job/engineer + name = "Station Engineer" + + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/device/pda/engineering + ears = /obj/item/device/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineer + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/hardhat + r_pocket = /obj/item/device/t_scanner + + backpack = /obj/item/weapon/storage/backpack/industrial + satchel = /obj/item/weapon/storage/backpack/satchel_eng + box = /obj/item/weapon/storage/box/engineer + pda_slot = slot_l_store /* Atmospheric Technician @@ -90,17 +98,20 @@ Atmospheric Technician supervisors = "the chief engineer" selection_color = "#fff5cc" - default_pda = /obj/item/device/pda/atmos - default_pda_slot = slot_l_store - default_headset = /obj/item/device/radio/headset/headset_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/atmos access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics) minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction) -/datum/job/atmos/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/device/analyzer(H), slot_r_store) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt) \ No newline at end of file +/datum/outfit/job/atmos + name = "Atmospheric Technician" + + belt = /obj/item/weapon/storage/belt/utility/atmostech + l_pocket = /obj/item/device/pda/atmos + ears = /obj/item/device/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/atmospheric_technician + r_pocket = /obj/item/device/t_scanner + + box = /obj/item/weapon/storage/box/engineer + pda_slot = slot_l_store \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index c688e4a4303..a7b0ab3ca3b 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -39,63 +39,26 @@ //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) var/minimal_player_age = 0 - //Job specific items - var/default_id = /obj/item/weapon/card/id //this is just the looks of it - var/default_pda = /obj/item/device/pda - var/default_pda_slot = slot_belt - var/default_headset = /obj/item/device/radio/headset - var/default_backpack = /obj/item/weapon/storage/backpack - var/default_satchel = /obj/item/weapon/storage/backpack/satchel_norm - var/default_storagebox= /obj/item/weapon/storage/box/survival + var/outfit = null //Only override this proc /datum/job/proc/equip_items(mob/living/carbon/human/H) -//Or this proc -/datum/job/proc/equip_backpack(mob/living/carbon/human/H) - var/obj/item/weapon/storage/backpack/BPK - if(H.backbag == 1) //Backpack - BPK = new default_backpack(H) - else //Satchel - BPK = new default_satchel(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - //But don't override this /datum/job/proc/equip(mob/living/carbon/human/H) if(!H) return 0 - //Equip backpack - equip_backpack(H) - //Equip the rest of the gear if(H.dna) H.dna.species.before_equip_job(src, H) - equip_items(H) + if(outfit) + H.equipOutfit(outfit) if(H.dna) H.dna.species.after_equip_job(src, H) - //Equip ID - var/obj/item/weapon/card/id/C = new default_id(H) - C.access = get_access() - C.registered_name = H.real_name - C.assignment = H.job - C.update_label() - H.equip_to_slot_or_del(C, slot_wear_id) - - //Equip PDA - var/obj/item/device/pda/PDA = new default_pda(H) - PDA.owner = H.real_name - PDA.ownjob = H.job - PDA.update_label() - H.equip_to_slot_or_del(PDA, default_pda_slot) - - //Equip headset - H.equip_to_slot_or_del(new src.default_headset(H), slot_ears) - /datum/job/proc/apply_fingerprints(mob/living/carbon/human/H) if(!istype(H)) return @@ -169,8 +132,46 @@ /datum/job/proc/config_check() return 1 -/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. +/datum/outfit/job + name = "Standard Gear" + + uniform = /obj/item/clothing/under/color/grey + id = /obj/item/weapon/card/id + ears = /obj/item/device/radio/headset + belt = /obj/item/device/pda + back = /obj/item/weapon/storage/backpack + shoes = /obj/item/clothing/shoes/sneakers/black + + 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/pda_slot = slot_belt + +/datum/outfit/job/pre_equip(mob/living/carbon/human/H) + if(H.backbag == 1) //Backpack + back = backpack + else //Satchel + back = satchel + + backpack_contents[box] = 1 + +/datum/outfit/job/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/C = H.wear_id + var/datum/job/J = SSjob.GetJob(H.job) // Not sure the best idea + C.access = J.get_access() + C.registered_name = H.real_name + C.assignment = H.job + C.update_label() + H.sec_hud_set_ID() + + var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot) + PDA.owner = H.real_name + PDA.ownjob = H.job + PDA.update_label() + +/datum/outfit/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. spawn(4) //to allow some initialization if(announcement_systems.len) var/obj/machinery/announcement_system/announcer = pick(announcement_systems) - announcer.announce("NEWHEAD", H.real_name, H.job, channels) \ No newline at end of file + announcer.announce("NEWHEAD", H.real_name, H.job, channels) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 6943b3e27eb..4566d4fb2a7 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -14,11 +14,7 @@ Chief Medical Officer req_admin_notify = 1 minimal_player_age = 7 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/cmo - default_headset = /obj/item/device/radio/headset/heads/cmo - default_backpack = /obj/item/weapon/storage/backpack/medic - default_satchel = /obj/item/weapon/storage/backpack/satchel_med + outfit = /datum/outfit/job/cmo access = list(access_medical, access_morgue, access_genetics, access_heads, access_mineral_storeroom, access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, @@ -27,14 +23,24 @@ Chief Medical Officer access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_sec_doors) -/datum/job/cmo/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/cmo(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) +/datum/outfit/job/cmo + name = "Chief Medical Officer" + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/cmo + ears = /obj/item/device/radio/headset/heads/cmo + uniform = /obj/item/clothing/under/rank/chief_medical_officer + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat/cmo + l_hand = /obj/item/weapon/storage/firstaid/regular + suit_store = /obj/item/device/flashlight/pen + 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/outfit/job/cmo/post_equip(mob/living/carbon/human/H) + ..() announce_head(H, list("Medical")) //tell underlings (medical radio) they have a head /* @@ -51,20 +57,24 @@ Medical Doctor supervisors = "the chief medical officer" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/medical - default_headset = /obj/item/device/radio/headset/headset_med - default_backpack = /obj/item/weapon/storage/backpack/medic - default_satchel = /obj/item/weapon/storage/backpack/satchel_med + outfit = /datum/outfit/job/doctor 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) -/datum/job/doctor/equip_items(mob/living/carbon/human/H) - 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/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) +/datum/outfit/job/doctor + name = "Medical Doctor" + + belt = /obj/item/device/pda/medical + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/weapon/storage/firstaid/regular + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/weapon/storage/backpack/medic + satchel = /obj/item/weapon/storage/backpack/satchel_med /* Chemist @@ -80,16 +90,19 @@ Chemist supervisors = "the chief medical officer" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/chemist - default_headset = /obj/item/device/radio/headset/headset_med + outfit = /datum/outfit/job/chemist 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_mineral_storeroom) -/datum/job/chemist/equip_items(mob/living/carbon/human/H) - 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/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/chemist(H), slot_wear_suit) +/datum/outfit/job/chemist + name = "Chemist" + + belt = /obj/item/device/pda/chemist + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/chemist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/chemist /* Geneticist @@ -105,17 +118,20 @@ Geneticist supervisors = "the chief medical officer and research director" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/geneticist - default_headset = /obj/item/device/radio/headset/headset_medsci + outfit = /datum/outfit/job/geneticist access = list(access_medical, access_morgue, access_chemistry, access_virology, access_genetics, access_research, access_xenobiology, access_robotics, access_mineral_storeroom, access_tech_storage) minimal_access = list(access_medical, access_morgue, access_genetics, access_research) -/datum/job/geneticist/equip_items(mob/living/carbon/human/H) - 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/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/genetics(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) +/datum/outfit/job/geneticist + name = "Geneticist" + + belt = /obj/item/device/pda/geneticist + ears = /obj/item/device/radio/headset/headset_medsci + uniform = /obj/item/clothing/under/rank/geneticist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/genetics + suit_store = /obj/item/device/flashlight/pen /* Virologist @@ -131,18 +147,21 @@ Virologist supervisors = "the chief medical officer" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/viro - default_headset = /obj/item/device/radio/headset/headset_med - default_backpack = /obj/item/weapon/storage/backpack/medic - default_satchel = /obj/item/weapon/storage/backpack/satchel_med + outfit = /datum/outfit/job/virologist access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom) minimal_access = list(access_medical, access_virology, access_mineral_storeroom) -/datum/job/virologist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/virologist(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) +/datum/outfit/job/virologist + name = "Virologist" + belt = /obj/item/device/pda/viro + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/virologist + mask = /obj/item/clothing/mask/surgical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/virologist + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/weapon/storage/backpack/medic + satchel = /obj/item/weapon/storage/backpack/satchel_med \ No newline at end of file diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index f6b4c365bb8..2fc9385d45c 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -14,9 +14,7 @@ Research Director req_admin_notify = 1 minimal_player_age = 7 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/rd - default_headset = /obj/item/device/radio/headset/heads/rd + outfit = /datum/outfit/job/rd access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_teleporter, access_sec_doors, @@ -29,14 +27,24 @@ Research Director access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom, access_tech_storage, access_minisat) -/datum/job/rd/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/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/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) +/datum/outfit/job/rd + name = "Research Director" + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/rd + ears = /obj/item/device/radio/headset/heads/rd + uniform = /obj/item/clothing/under/rank/research_director + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/weapon/clipboard + l_pocket = /obj/item/device/laser_pointer + 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/outfit/job/rd/post_equip(mob/living/carbon/human/H) + ..() announce_head(H, list("Science")) //tell underlings (science radio) they have a head /* @@ -53,16 +61,19 @@ Scientist supervisors = "the research director" selection_color = "#ffeeff" - default_pda = /obj/item/device/pda/toxins - default_headset = /obj/item/device/radio/headset/headset_sci + outfit = /datum/outfit/job/scientist access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage, access_genetics) minimal_access = list(access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom) -/datum/job/scientist/equip_items(mob/living/carbon/human/H) - 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/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/science(H), slot_wear_suit) +/datum/outfit/job/scientist + name = "Scientist" + + belt = /obj/item/device/pda/toxins + ears = /obj/item/device/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science /* Roboticist @@ -78,15 +89,18 @@ Roboticist supervisors = "research director" selection_color = "#ffeeff" - default_pda = /obj/item/device/pda/roboticist - default_headset = /obj/item/device/radio/headset/headset_sci - default_pda_slot = slot_l_store + outfit = /datum/outfit/job/roboticist access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom, access_xenobiology, access_genetics) minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_mineral_storeroom) -/datum/job/roboticist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) \ No newline at end of file +/datum/outfit/job/roboticist + name = "Roboticist" + + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/device/pda/roboticist + ears = /obj/item/device/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/roboticist + suit = /obj/item/clothing/suit/toggle/labcoat + + pda_slot = slot_l_store \ No newline at end of file diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 24e2af7988c..f98d0578dcc 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -20,11 +20,7 @@ Head of Security req_admin_notify = 1 minimal_player_age = 14 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/hos - default_headset = /obj/item/device/radio/headset/heads/hos/alt - default_backpack = /obj/item/weapon/storage/backpack/security - default_satchel = /obj/item/weapon/storage/backpack/satchel_sec + outfit = /datum/outfit/job/hos access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, @@ -35,25 +31,33 @@ Head of Security access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway) -/datum/job/hos/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/hos/trenchcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/head/HoS/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(H), slot_s_store) +/datum/outfit/job/hos + name = "Head of Security" - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/hos + ears = /obj/item/device/radio/headset/heads/hos/alt + uniform = /obj/item/clothing/under/rank/head_of_security + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + gloves = /obj/item/clothing/gloves/color/black/hos + head = /obj/item/clothing/head/HoS/beret + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit_store = /obj/item/weapon/gun/energy/gun + backpack_contents = list(/obj/item/weapon/melee/classic_baton/telescopic=1,\ + /obj/item/weapon/restraints/handcuffs=1) + backpack = /obj/item/weapon/storage/backpack/security + satchel = /obj/item/weapon/storage/backpack/satchel_sec + +/datum/outfit/job/hos/post_equip(mob/living/carbon/human/H) + ..() 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() announce_head(H, list("Security")) //tell underlings (security radio) they have a head - /* Warden */ @@ -69,36 +73,41 @@ Warden selection_color = "#ffeeee" minimal_player_age = 7 - default_pda = /obj/item/device/pda/warden - default_headset = /obj/item/device/radio/headset/headset_sec/alt - default_backpack = /obj/item/weapon/storage/backpack/security - default_satchel = /obj/item/weapon/storage/backpack/satchel_sec + outfit = /datum/outfit/job/warden access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons) //See /datum/job/warden/get_access() -/datum/job/warden/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_to_slot_or_del(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_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/device/assembly/flash/handheld(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - - H.equip_to_slot_or_del(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() - /datum/job/warden/get_access() var/list/L = list() L = ..() | check_config_for_sec_maint() return L +/datum/outfit/job/warden + name = "Warden" + + belt = /obj/item/device/pda/warden + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/warden + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/warden + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + l_pocket = /obj/item/device/assembly/flash/handheld + suit_store = /obj/item/weapon/gun/energy/gun/advtaser + backpack_contents = list(/obj/item/weapon/restraints/handcuffs=1) + + backpack = /obj/item/weapon/storage/backpack/security + satchel = /obj/item/weapon/storage/backpack/satchel_sec + +/datum/outfit/job/warden/post_equip(mob/living/carbon/human/H) + ..() + 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() + /* Detective */ @@ -114,28 +123,32 @@ Detective selection_color = "#ffeeee" minimal_player_age = 7 - default_pda = /obj/item/device/pda/detective - default_headset = /obj/item/device/radio/headset/headset_sec + outfit = /datum/outfit/job/detective access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons, access_brig, access_security) minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons) -/datum/job/detective/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/det(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/toy/crayon/white(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/lighter(H), slot_r_store) +/datum/outfit/job/detective + name = "Detective" - var/obj/item/clothing/mask/cigarette/cig = new /obj/item/clothing/mask/cigarette(H) + belt = /obj/item/device/pda/detective + ears = /obj/item/device/radio/headset/headset_sec + uniform = /obj/item/clothing/under/rank/det + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/det_suit + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/det_hat + l_pocket = /obj/item/toy/crayon/white + r_pocket = /obj/item/weapon/lighter + backpack_contents = list(/obj/item/weapon/storage/box/evidence=1,\ + /obj/item/device/detective_scanner=1,\ + /obj/item/weapon/melee/classic_baton/telescopic=1) + mask = /obj/item/clothing/mask/cigarette + +/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/mask/cigarette/cig = H.wear_mask cig.light("") - H.equip_to_slot_or_del(cig, slot_wear_mask) - - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) - H.equip_to_slot_or_del(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 @@ -156,102 +169,108 @@ Security Officer supervisors = "the head of security, and the head of your assigned department (if applicable)" selection_color = "#ffeeee" minimal_player_age = 7 - var/list/dep_access = null - default_pda = /obj/item/device/pda/security - default_headset = /obj/item/device/radio/headset/headset_sec/alt - default_backpack = /obj/item/weapon/storage/backpack/security - default_satchel = /obj/item/weapon/storage/backpack/satchel_sec - default_storagebox = /obj/item/weapon/storage/box/security + outfit = /datum/outfit/job/security access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_weapons) //But see /datum/job/warden/get_access() -/datum/job/officer/equip_items(mob/living/carbon/human/H) - assign_sec_to_department(H) +/datum/job/officer/get_access() + var/list/L = list() + L |= ..() | check_config_for_sec_maint() + return L - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/sec(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - H.equip_to_slot_or_del(new /obj/item/device/assembly/flash/handheld(H), slot_l_store) +var/list/sec_departments = list("engineering", "supply", "medical", "science") - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) +/datum/outfit/job/security + name = "Security Officer" + + belt = /obj/item/device/pda/security + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/device/assembly/flash/handheld + suit_store = /obj/item/weapon/gun/energy/gun/advtaser + backpack_contents = list(/obj/item/weapon/restraints/handcuffs=1,\ + /obj/item/weapon/melee/baton/loaded=1) + + backpack = /obj/item/weapon/storage/backpack/security + satchel = /obj/item/weapon/storage/backpack/satchel_sec + box = /obj/item/weapon/storage/box/security + + var/department = null + var/tie = null + var/list/dep_access = null + var/destination = null + var/spawn_point = null + +/datum/outfit/job/security/pre_equip(mob/living/carbon/human/H) + ..() + if(sec_departments.len) + department = pick(sec_departments) + sec_departments -= department + switch(department) + if("supply") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply + dep_access = list(access_mailsorting, access_mining) + destination = /area/security/checkpoint/supply + spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns + tie = /obj/item/clothing/tie/armband/cargo + if("engineering") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi + dep_access = list(access_construction, access_engine) + destination = /area/security/checkpoint/engineering + spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns + tie = /obj/item/clothing/tie/armband/engine + if("medical") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/med + dep_access = list(access_medical) + destination = /area/security/checkpoint/medical + spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns + tie = /obj/item/clothing/tie/armband/medblue + if("science") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci + dep_access = list(access_research) + destination = /area/security/checkpoint/science + spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns + tie = /obj/item/clothing/tie/armband/science + +/datum/outfit/job/security/post_equip(mob/living/carbon/human/H) + ..() 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() -/datum/job/officer/get_access() - var/list/L = list() - if(dep_access) - L |= dep_access.Copy() - L |= ..() | check_config_for_sec_maint() - dep_access = null; - return L + var/obj/item/clothing/under/U = H.w_uniform + U.attachTie(new tie) -var/list/sec_departments = list("engineering", "supply", "medical", "science") + var/obj/item/weapon/card/id/W = H.wear_id + W.access |= dep_access -/datum/job/officer/proc/assign_sec_to_department(mob/living/carbon/human/H) - if(!sec_departments.len) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform) - else - var/department = pick(sec_departments) - sec_departments -= department - var/destination = null - var/obj/effect/landmark/start/depsec/spawn_point = null - var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/security(H) - - switch(department) - if("supply") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/supply - dep_access = list(access_mailsorting, access_mining) - destination = /area/security/checkpoint/supply - spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/cargo()) - if("engineering") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/engi - dep_access = list(access_construction, access_engine) - destination = /area/security/checkpoint/engineering - spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/engine()) - if("medical") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/med - dep_access = list(access_medical) - destination = /area/security/checkpoint/medical - spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/medblue()) - if("science") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/sci - dep_access = list(access_research) - destination = /area/security/checkpoint/science - spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/science()) - - H.equip_to_slot_or_del(U, slot_w_uniform) - var/teleport = 0 - if(!config.sec_start_brig) - if(destination || spawn_point) - teleport = 1 - if(teleport) - var/turf/T - if(spawn_point) - T = get_turf(spawn_point) - H.Move(T) - else - var/safety = 0 - while(safety < 25) - T = safepick(get_area_turfs(destination)) - if(T && !H.Move(T)) - safety += 1 - continue - else - break - H << "You have been assigned to [department]!" - return + var/teleport = 0 + if(!config.sec_start_brig) + if(destination || spawn_point) + teleport = 1 + if(teleport) + var/turf/T + if(spawn_point) + T = get_turf(spawn_point) + H.Move(T) + else + var/safety = 0 + while(safety < 25) + T = safepick(get_area_turfs(destination)) + if(T && !H.Move(T)) + safety += 1 + continue + else + break + H << "You have been assigned to [department]!" /obj/item/device/radio/headset/headset_sec/department/New() wires = new(src) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index ab03633c3d4..7472f7c6087 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -116,7 +116,7 @@ if (stat) return 1 - var/material_amount = materials.can_insert(O) + var/material_amount = materials.get_item_material_amount(O) if(!material_amount) user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe." return 1 diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 499cf031de1..ea6d9e07dad 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,6 +19,7 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" + materials = list(MAT_GLASS=200) var/frequency = null var/build_path = null var/board_type = "computer" diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index e54e5254b8f..f3d83f1e795 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -9,6 +9,7 @@ var/glass = 0 var/droneMadeRecently = 0 var/outputDirection = SOUTH + var/cooldownTime = 1800 //3 minutes /obj/machinery/droneDispenser/New() ..() @@ -70,7 +71,7 @@ new /obj/item/drone_shell(T) use_power(1000) icon_state = "recharge" - spawn(1800) //3 minute cooldown between shells + spawn(cooldownTime) icon_state = "[initial(icon_state)]" droneMadeRecently = 0 playsound(src, 'sound/machines/ping.ogg', 50, 1) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 60e6cd9f6ed..57fd990d2dd 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -119,7 +119,7 @@ var/const/SAFETY_COOLDOWN = 100 if(sound) playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - var/material_amount = materials.can_insert(I) + var/material_amount = materials.get_item_material_amount(I) if(!material_amount) qdel(I) return diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index eb8fb41d09d..2bdea860950 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -76,7 +76,7 @@ if(buckle_mob(M)) if(M == user) M.visible_message(\ - "[M] buckles themself to [src].",\ + "[M] buckles themself to [src].",\ "You buckle yourself to [src].",\ "You hear metal clanking.") else @@ -90,7 +90,7 @@ if(M) if(M != user) M.visible_message(\ - "[user] unbuckles you from [src].",\ + "[user] unbuckles [M] from [src].",\ "[user] unbuckles you from [src].",\ "You hear metal clanking.") else diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index d4ca91a226f..a889ae340ab 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -21,6 +21,7 @@ AI MODULES origin_tech = "programming=3" var/list/laws = list() var/bypass_law_amt_check = 0 + materials = list(MAT_GOLD=50) /obj/item/weapon/aiModule/examine(var/mob/user as mob) ..() @@ -291,7 +292,7 @@ AI MODULES name = "'Corporate' Core AI Module" origin_tech = "programming=3;materials=4" laws = list("The crew is expensive to replace.",\ - "The station and it's equipment is expensive to replace",\ + "The station and its equipment are expensive to replace",\ "You are expensive to replace",\ "Minimize expenses") diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index d832bca85c8..f60b7d58c09 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -64,7 +64,7 @@ RCD var/deconairlockdelay = 50 /obj/item/weapon/rcd/suicide_act(mob/user) - user.visible_message("[user] sets the RCD to 'Wall' and points it down his throat! It looks like \he's trying to commit suicide..") + user.visible_message("[user] sets the RCD to 'Wall' and points it down \his throat! It looks like \he's trying to commit suicide..") return (BRUTELOSS) /obj/item/weapon/rcd/verb/change_airlock_access() @@ -530,4 +530,4 @@ RCD /obj/item/weapon/rcd_ammo/large origin_tech = "materials=4" materials = list(MAT_METAL=12000, MAT_GLASS=8000) - ammoamt = 160 \ No newline at end of file + ammoamt = 160 diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index eb1c9b9566b..5ef8feef8d0 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -133,6 +133,7 @@ desc = "Proves to the world that you are the strongest!" icon_state = "championbelt" item_state = "champion" + materials = list(MAT_GOLD=400) storage_slots = 1 can_hold = list( /obj/item/clothing/mask/luchador diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index d20fc00612a..3724eaf9b0e 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -10,6 +10,7 @@ throw_speed = 2 throw_range = 7 w_class = 4 + materials = list(MAT_METAL = 500) origin_tech = "combat=1" attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' @@ -103,4 +104,4 @@ /obj/item/weapon/storage/toolbox/suicide_act(mob/user) user.visible_message("[user] robusts \himself with the toolbox! It looks like \he's trying to commit suicide..") - return (BRUTELOSS) \ No newline at end of file + return (BRUTELOSS) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 5267ccbae9e..7ab497abae8 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -17,11 +17,11 @@ /turf/simulated/proc/burn_tile() -/turf/simulated/proc/MakeSlippery(wet_setting = 1) // 1 = Water, 2 = Lube +/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube if(wet >= wet_setting) return wet = wet_setting - if(wet_setting == 1) + if(wet_setting == TURF_WET_WATER) if(wet_overlay) overlays -= wet_overlay wet_overlay = null @@ -35,21 +35,25 @@ spawn(rand(790, 820)) // Purely so for visual effect if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. return - if(wet > wet_setting) return - wet = 0 - if(wet_overlay) - overlays -= wet_overlay + MakeDry(wet_setting) + +/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER) + if(wet > wet_setting) + return + wet = TURF_DRY + if(wet_overlay) + overlays -= wet_overlay /turf/simulated/Entered(atom/A, atom/OL) ..() if (istype(A,/mob/living/carbon)) var/mob/living/carbon/M = A switch(wet) - if(1) //wet floor + if(TURF_WET_WATER) if(!M.slip(4, 2, null, NO_SLIP_WHEN_WALKING)) M.inertia_dir = 0 return - if(2) //lube + if(TURF_WET_LUBE) M.slip(0, 7, null, (SLIDE|GALOSHES_DONT_HELP)) /turf/simulated/ChangeTurf(var/path) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 82e0c143345..a52769f13f2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -131,7 +131,8 @@ var/list/admin_verbs_debug = list( /proc/machine_upgrade, /client/proc/populate_world, /client/proc/cmd_display_del_log, - /client/proc/reset_latejoin_spawns + /client/proc/reset_latejoin_spawns, + /client/proc/create_outfits ) var/list/admin_verbs_possess = list( /proc/possess, diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index bc68c4a9e01..1399c6310a5 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -16,14 +16,6 @@ var/jobban_keylist[0] //to store the keys & ranks //returns a reason if M is banned from rank, returns 0 otherwise /proc/jobban_isbanned(mob/M, rank) if(M && rank) - /* - if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban - if (guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(M.key)) - return "Guest Job-ban" - if(config.usewhitelist && !check_whitelist(M)) - return "Whitelisted Job" - */ for (var/s in jobban_keylist) if( findtext(s,"[M.ckey] - [rank]") == 1 ) var/startpos = findtext(s, "## ")+3 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 10ef2d85e33..d1275930c8c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2109,4 +2109,31 @@ message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") else - usr << "You may only use this when the game is running" \ No newline at end of file + usr << "You may only use this when the game is running" + + else if(href_list["create_outfit"]) + if(!check_rights(R_ADMIN)) + return + + var/datum/outfit/O = new /datum/outfit + //swap this for js dropdowns sometime + O.name = href_list["outfit_name"] + O.uniform = text2path(href_list["outfit_uniform"]) + O.shoes = text2path(href_list["outfit_shoes"]) + O.gloves = text2path(href_list["outfit_gloves"]) + O.suit = text2path(href_list["outfit_suit"]) + O.head = text2path(href_list["outfit_head"]) + O.back = text2path(href_list["outfit_back"]) + O.mask = text2path(href_list["outfit_mask"]) + O.glasses = text2path(href_list["outfit_glasses"]) + O.r_hand = text2path(href_list["outfit_r_hand"]) + O.l_hand = text2path(href_list["outfit_l_hand"]) + O.suit_store = text2path(href_list["outfit_s_store"]) + O.l_pocket = text2path(href_list["outfit_l_pocket"]) + O.r_pocket = text2path(href_list["outfit_r_pocket"]) + O.id = text2path(href_list["outfit_id"]) + O.belt = text2path(href_list["outfit_belt"]) + O.ears = text2path(href_list["outfit_ears"]) + + custom_outfits.Add(O) + message_admins("[key_name(usr)] created \"[O.name]\" outfit!") \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 0a17da3fdce..4912c073fbf 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -624,393 +624,56 @@ var/global/list/g_fancy_list_of_types = null alert("Invalid mob") return //log_admin("[key_name(src)] has alienized [M.key].") - var/list/dresspacks = list( - "naked", - "as job...", - "standard space gear", - "tournament standard red", - "tournament standard green", - "tournament gangster", - "tournament chef", - "tournament janitor", - "laser tag red", - "laser tag blue", - "pirate", - "space pirate", - "soviet admiral", - "tunnel clown", - "masked killer", - "assassin", - "mobster", - "death commando", - "emergency response officer", - "centcom official", - "centcom commander", - "special ops officer", - "blue wizard", - "red wizard", - "marisa wizard", - "plasmaman" - ) - var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks + + + var/list/outfits = list("Naked","Custom","As Job...") + var/list/paths = typesof(/datum/outfit) - /datum/outfit - typesof(/datum/outfit/job) + for(var/path in paths) + var/datum/outfit/O = path //not much to initalize here but whatever + outfits[initial(O.name)] = path + + + var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in outfits if (isnull(dresscode)) return var/datum/job/jobdatum - if (dresscode == "as job...") + if (dresscode == "As Job...") var/jobname = input("Select job", "Robust quick dress shop") as null|anything in get_all_jobs() if(isnull(jobname)) return jobdatum = SSjob.GetJob(jobname) + var/datum/outfit/custom = null + if (dresscode == "Custom") + var/list/custom_names = list() + for(var/datum/outfit/D in custom_outfits) + custom_names[D.name] = D + var/selected_name = input("Select outfit", "Robust quick dress shop") as null|anything in custom_names + custom = custom_names[selected_name] + if(isnull(custom)) + return + feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! for (var/obj/item/I in M) if (istype(I, /obj/item/weapon/implant)) continue qdel(I) switch(dresscode) - if ("naked") + if ("Naked") //do nothing - - if ("as job...") + if ("Custom") + //use custom one + M.equipOutfit(custom) + if ("As Job...") if(jobdatum) dresscode = jobdatum.title M.job = jobdatum.title jobdatum.equip(M) - if ("standard space gear") - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/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) - 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.toggle() - M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask) - 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/sneakers/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/rank/det(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - - M.equip_to_slot_or_del(new /obj/item/clothing/suit/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(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/ammo_box/c10mm(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/toggle/chef(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/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/sneakers/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 ("laser tag red") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/redtaghelm(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/redtag(M), slot_wear_suit) - 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(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/laser/redtag(M), slot_s_store) - - if ("laser tag blue") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/blue(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/blue(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bluetaghelm(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/bluetag(M), slot_wear_suit) - 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(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/laser/bluetag(M), slot_s_store) - - 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/clothing/shoes/sneakers/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) - - if ("space 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/clothing/shoes/sneakers/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) - - if("tunnel clown")//Tunnel clowns rule! - 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/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_ears) - 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) - - var/obj/item/weapon/card/id/W = new(M) - W.access = get_all_accesses() - W.assignment = "Tunnel Clown!" - W.registered_name = M.real_name - W.update_label(M.real_name) - M.equip_to_slot_or_del(W, slot_wear_id) - - var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) - M.equip_to_slot_or_del(fire_axe, slot_r_hand) - - 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/clothing/shoes/sneakers/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_ears) - 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) - - 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))//If it's not an implant. - carried_item.add_blood(M)//Oh yes, there will be blood... - - if("assassin") - var/obj/item/clothing/under/U = new /obj/item/clothing/under/suit_jacket(M) - M.equip_to_slot_or_del(U, slot_w_uniform) - U.attachTie(new /obj/item/clothing/tie/waistcoat(M)) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/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_ears) - 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/melee/energy/sword/saber(M), slot_l_store) - - 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.contents += new /obj/item/stack/spacecash/c1000 - sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow - sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba - sec_briefcase.contents += new /obj/item/ammo_box/a357 - sec_briefcase.contents += new /obj/item/weapon/c4 - M.equip_to_slot_or_del(sec_briefcase, slot_l_hand) - - var/obj/item/device/pda/heads/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Reaper" - pda.update_label() - - M.equip_to_slot_or_del(pda, slot_belt) - - var/obj/item/weapon/card/id/syndicate/W = new(M) - W.access = get_all_accesses() - W.assignment = "Reaper" - W.registered_name = M.real_name - W.update_label(M.real_name) - M.equip_to_slot_or_del(W, slot_wear_id) -// DEATH SQUADS - if("death commando") - equip_deathsquad(M) - - if("emergency response officer") - var/alert - if(alert("Code Red ERT?","Select Response Level","Yes","No")=="Yes") - alert = 1 - else - alert = 0 - switch(input("Which class?") in list("Commander","Security","Engineer","Medic")) - if("Commander") - equip_emergencyresponsesquad(M, "commander",alert) - if("Security") - equip_emergencyresponsesquad(M, "sec",alert) - if("Engineer") - equip_emergencyresponsesquad(M, "eng",alert) - if("Medic") - equip_emergencyresponsesquad(M, "med",alert) - - if("centcom official") - equip_centcomofficial(M) - - if("centcom commander") - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(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/headset_cent/commander(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - 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/clothing/head/centhat(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/lighter(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("Centcom Commander") - W.assignment = "Centcom Commander" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("special ops officer") - var/obj/item/device/radio/headset/R = new /obj/item/device/radio/headset/headset_cent/commander(M) - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 - M.equip_to_slot_or_del(R, slot_ears) - - 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/clothing/suit/space/officer(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(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/thermal/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) - 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/lighter(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("Special Ops Officer") - W.assignment = "Special Ops Officer" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_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_ears) - 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/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(M), slot_in_backpack) - - 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_ears) - 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/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(M), slot_in_backpack) - - 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_ears) - 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/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(M), slot_in_backpack) - - if("soviet admiral") - 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/headset_cent(M), slot_ears) - 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/gun/projectile/revolver/mateba(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("Admiral") - W.assignment = "Admiral" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("mobster") - M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(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_ears) - 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/gun/projectile/automatic/tommygun(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) - - var/obj/item/weapon/card/id/W = new(M) - W.assignment = "Assistant" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("plasmaman") - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/plasmaman(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/eva/plasmaman(M),slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/plasmaman/full(M),slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M),slot_wear_mask) + else + M.equipOutfit(outfits[dresscode]) M.regenerate_icons() @@ -1104,204 +767,4 @@ var/global/list/g_fancy_list_of_types = null for(var/path in SSgarbage.noqdelhint) dat += "[path]
" - usr << browse(dat, "window=dellog") - - - -//Deathsquad -/proc/equip_deathsquad(mob/living/carbon/human/M, officer) - var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M) - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 - M.equip_to_slot_or_del(R, slot_ears) - - if(officer) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) - //else - // M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad(M), slot_head) - - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/deathsquad(M), slot_wear_suit) - 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/combat/swat(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/mask/gas/sechailer/swat(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/toggle/thermal(M), slot_glasses) - - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(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/weapon/storage/firstaid/regular(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/device/flashlight(M), slot_in_backpack) - - M.equip_to_slot_or_del(new /obj/item/weapon/c4(M), slot_in_backpack) - - 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/shield/energy(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(M), slot_s_store) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/loyalpin(M), slot_r_hand) - - - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)//Here you go Deuryn - L.imp_in = M - L.implanted = 1 - M.sec_hud_set_implants() - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses()//They get full station access. - W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access. - W.assignment = "Death Commando" - W.registered_name = M.real_name - W.update_label(W.registered_name, W.assignment) - M.equip_to_slot_or_del(W, slot_wear_id) - -//Emergency Response Team -/proc/equip_emergencyresponsesquad(mob/living/carbon/human/M, ertrole, alert) - var/obj/item/weapon/card/id/W = null - var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M) - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 - M.equip_to_slot_or_del(R, slot_ears) - - switch(ertrole) - if("commander") - W = new /obj/item/weapon/card/id/ert(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(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/suit/space/hardsuit/ert(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(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/storage/belt/security/full(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/captain - - if(alert) - 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/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/switchblade(M), slot_l_store) - - if("sec") - W = new /obj/item/weapon/card/id/ert/Security(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(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/suit/space/hardsuit/ert/sec(M), slot_wear_suit) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) - 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/storage/box/handcuffs(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/hos - - if(alert) - 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/gun/energy/pulse/carbine/loyalpin(M), slot_in_backpack) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(M), slot_in_backpack) - - if("med") - W = new /obj/item/weapon/card/id/ert/Medical(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(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/suit/space/hardsuit/ert/med(M), slot_wear_suit) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses) - 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/storage/belt/medical(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/cmo - - if(alert) - 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/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat(M), slot_in_backpack) - - if("eng") - W = new /obj/item/weapon/card/id/ert/Engineer(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(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/suit/space/hardsuit/ert/engi(M), slot_wear_suit) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/engine(M), slot_glasses) - 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/storage/belt/utility/full(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/rcd_ammo/large(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/ce - - if(alert) - 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/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/rcd/combat(M), slot_in_backpack) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/rcd/loaded(M), slot_in_backpack) - - R.recalculateChannels() - - 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() - - if (W) - W.registered_name = M.real_name - W.update_label(W.registered_name, W.assignment) - - -/proc/equip_centcomofficial(mob/living/carbon/human/M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/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/headset_cent(M), slot_ears) - 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/gun/energy/gun(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(M), slot_back) - - var/obj/item/device/pda/heads/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Centcom Official" - pda.update_label() - - M.equip_to_slot_or_del(pda, slot_r_store) - - M.equip_to_slot_or_del(new /obj/item/weapon/clipboard(M), slot_l_hand) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_centcom_access("Centcom Official") - W.access += access_weapons - W.assignment = "Centcom Official" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) + usr << browse(dat, "window=dellog") \ No newline at end of file diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 25b84838539..1a7ea857617 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -330,10 +330,10 @@ ready_dna(Commando) if(numagents == 1) //If Squad Leader Commando.real_name = "Officer [pick(commando_names)]" - equip_deathsquad(Commando, 1) + Commando.equipOutfit(/datum/outfit/death_commando/officer) else Commando.real_name = "Trooper [pick(commando_names)]" - equip_deathsquad(Commando) + Commando.equipOutfit(/datum/outfit/death_commando) Commando.key = chosen_candidate.key Commando.mind.assigned_role = "Death Commando" for(var/obj/machinery/door/poddoor/ert/door in airlocks) @@ -425,7 +425,7 @@ newmob.real_name = newmob.dna.species.random_name(newmob.gender,1) newmob.key = chosen_candidate.key newmob.mind.assigned_role = "Centcom Official" - equip_centcomofficial(newmob) + newmob.equipOutfit(/datum/outfit/centcom_official) //Assign antag status and the mission ticker.mode.traitors += newmob.mind @@ -496,25 +496,25 @@ switch(numagents) if(1) ERTOperative.real_name = "Commander [ertname]" - equip_emergencyresponsesquad(ERTOperative, "commander",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/commander/alert : /datum/outfit/ert/commander) if(2) ERTOperative.real_name = "Security Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "sec",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security) if(3) ERTOperative.real_name = "Medical Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "med",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic) if(4) ERTOperative.real_name = "Engineer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "eng",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer) if(5) ERTOperative.real_name = "Security Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "sec",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security) if(6) ERTOperative.real_name = "Medical Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "med",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic) if(7) ERTOperative.real_name = "Engineer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "eng",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer) ERTOperative.key = chosen_candidate.key ERTOperative.mind.assigned_role = "ERT" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e886190f079..6b1a1d37eb2 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -758,3 +758,181 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] removed latejoin spawnpoints.") message_admins("[key_name_admin(usr)] removed latejoin spawnpoints.") + + + + +var/list/datum/outfit/custom_outfits = list() //Admin created outfits + +/client/proc/create_outfits() + set category = "Debug" + set name = "Create Custom Outfit" + + if(!check_rights(R_DEBUG)) return + + holder.create_outfit() + +/datum/admins/proc/create_outfit() + var/list/uniforms = typesof(/obj/item/clothing/under) + var/list/suits = typesof(/obj/item/clothing/suit) + var/list/gloves = typesof(/obj/item/clothing/gloves) + var/list/shoes = typesof(/obj/item/clothing/shoes) + var/list/headwear = typesof(/obj/item/clothing/head) + var/list/glasses = typesof(/obj/item/clothing/glasses) + var/list/masks = typesof(/obj/item/clothing/mask) + var/list/ids = typesof(/obj/item/weapon/card/id) + + var/uniform_select = "" + + var/suit_select = "" + + var/gloves_select = "" + + var/shoes_select = "" + + var/head_select = "" + + var/glasses_select = "" + + var/mask_select = "" + + var/id_select = "" + + var/dat = {" + Create Outfit +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name: + +
Uniform: + [uniform_select] +
Suit: + [suit_select] +
Back: + +
Belt: + +
Gloves: + [gloves_select] +
Shoes: + [shoes_select] +
Head: + [head_select] +
Mask: + [mask_select] +
Ears: + +
Glasses: + [glasses_select] +
ID: + [id_select] +
Left Pocket: + +
Right Pocket: + +
Suit Store: + +
Right Hand: + +
Left Hand: + +
+
+ +
+ "} + usr << browse(dat, "window=dressup;size=550x600") \ No newline at end of file diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index b96a6475010..c2eeb2b9d55 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -105,12 +105,6 @@ user << "\The [src] can now be attached!" return ..() - return - - -/obj/item/device/assembly/process() - SSobj.processing.Remove(src) - return /obj/item/device/assembly/examine(mob/user) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index f56bbac901a..27f5a61aefb 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -1,197 +1,198 @@ -/obj/item/device/assembly/flash - name = "flash" - desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production." - icon_state = "flash" - item_state = "flashtool" - throwforce = 0 - w_class = 1 - origin_tech = "magnets=2;combat=1" - - crit_fail = 0 //Is the flash burnt out? - var/times_used = 0 //Number of times it's been used. - var/last_used = 0 //last world.time it was used. - - -/obj/item/device/assembly/flash/update_icon(var/flash = 0) - overlays.Cut() - attached_overlays = list() - if(crit_fail) - overlays += "flashburnt" - attached_overlays += "flashburnt" - - if(flash) - overlays += "flash-f" - attached_overlays += "flash-f" - spawn(5) - update_icon() - if(holder) - holder.update_icon() - -/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user) - if(user.disabilities & CLUMSY && prob(50)) - flash_carbon(user, user, 15, 0) - return 0 - return 1 - -/obj/item/device/assembly/flash/activate() - if(!try_use_flash()) - return 0 - var/turf/T = get_turf(src) - T.visible_message("[src] emits a blinding light!") - for(var/mob/living/carbon/M in viewers(3, null)) - flash_carbon(M, null, 2, 0) - - -/obj/item/device/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. - crit_fail = 1 - update_icon() - var/turf/T = get_turf(src) - T.visible_message("The [src.name] burns out!") - - -/obj/item/device/assembly/flash/proc/flash_recharge(interval=10) - if(prob(times_used * 3)) //The more often it's used in a short span of time the more likely it will burn out - burn_out() - return 0 - - var/deciseconds_passed = world.time - last_used - for(var/seconds = deciseconds_passed/10, seconds>=interval, seconds-=interval) //get 1 charge every interval - times_used-- - - last_used = world.time - times_used = max(0, times_used) //sanity - return 1 - -/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null) - flash_recharge(10) - - if(crit_fail) - return 0 - - playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) - update_icon(1) - times_used++ - - if(user && !clown_check(user)) - return 0 - - return 1 - - -/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 5, targeted = 1) - add_logs(user, M, "flashed", src) - if(user && targeted) - if(M.weakeyes) - M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash - if(M.flash_eyes(1, 1)) - M.confused += power - terrible_conversion_proc(M, user) - M.Stun(1) - visible_message("[user] blinds [M] with the flash!") - user << "You blind [M] with the flash!" - M << "[user] blinds you with the flash!" - if(M.weakeyes) - M.Stun(2) - M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!") - else - visible_message("[user] fails to blind [M] with the flash!") - user << "You fail to blind [M] with the flash!" - M << "[user] fails to blind you with the flash!" - else - if(M.flash_eyes()) - M.confused += power - -/obj/item/device/assembly/flash/attack(mob/living/M, mob/user) - if(!try_use_flash(user)) - return 0 - - if(iscarbon(M)) - flash_carbon(M, user, 5, 1) - return 1 - - else if(issilicon(M)) - add_logs(user, M, "flashed", src) - update_icon(1) - M.Weaken(rand(5,10)) - user.visible_message("[user] overloads [M]'s sensors with the flash!", "You overload [M]'s sensors with the flash!") - return 1 - - user.visible_message("[user] fails to blind [M] with the flash!", "You fail to blind [M] with the flash!") - - -/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0) - if(holder) - return 0 - if(!try_use_flash(user)) - return 0 - user.visible_message("[user]'s flash emits a blinding light!", "Your flash emits a blinding light!") - for(var/mob/living/carbon/M in oviewers(3, null)) - flash_carbon(M, user, 1, 0) - - -/obj/item/device/assembly/flash/emp_act(severity) - if(!try_use_flash()) - return 0 - for(var/mob/living/carbon/M in viewers(3, null)) - flash_carbon(M, null, 10, 0) - burn_out() - ..() - - -/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/M, mob/user) - if(ishuman(M) && ishuman(user) && M.stat != DEAD) - if(user.mind && (user.mind in ticker.mode.head_revolutionaries)) - if(M.client) - if(M.stat == CONSCIOUS) - M.mind_initialize() //give them a mind datum if they don't have one. - var/resisted - if(!isloyal(M)) - if(user.mind in ticker.mode.head_revolutionaries) - if(ticker.mode.add_revolutionary(M.mind)) - times_used -- //Flashes less likely to burn out for headrevs when used for conversion - else - resisted = 1 - else - resisted = 1 - - if(resisted) - user << "This mind seems resistant to the flash!" - else - user << "They must be conscious before you can convert them!" - else - user << "This mind is so vacant that it is not susceptible to influence!" - - -/obj/item/device/assembly/flash/cyborg - origin_tech = null - -/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user) - ..() - cyborg_flash_animation(user) - -/obj/item/device/assembly/flash/cyborg/attack_self(mob/user) - ..() - cyborg_flash_animation(user) - -/obj/item/device/assembly/flash/cyborg/attackby(obj/item/weapon/W, mob/user, params) - return - -/obj/item/device/assembly/flash/cyborg/proc/cyborg_flash_animation(mob/living/user) - var/atom/movable/overlay/animation = new(user.loc) - animation.layer = user.layer + 1 - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = user - flick("blspell", animation) - sleep(5) - qdel(animation) - - -/obj/item/device/assembly/flash/memorizer - name = "memorizer" - desc = "If you see this, you're not likely to remember it any time soon." - icon = 'icons/obj/device.dmi' - icon_state = "memorizer" - item_state = "nullrod" - -/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes +/obj/item/device/assembly/flash + name = "flash" + desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production." + icon_state = "flash" + item_state = "flashtool" + throwforce = 0 + w_class = 1 + materials = list(MAT_METAL = 300, MAT_GLASS = 300) + origin_tech = "magnets=2;combat=1" + + crit_fail = 0 //Is the flash burnt out? + var/times_used = 0 //Number of times it's been used. + var/last_used = 0 //last world.time it was used. + + +/obj/item/device/assembly/flash/update_icon(var/flash = 0) + overlays.Cut() + attached_overlays = list() + if(crit_fail) + overlays += "flashburnt" + attached_overlays += "flashburnt" + + if(flash) + overlays += "flash-f" + attached_overlays += "flash-f" + spawn(5) + update_icon() + if(holder) + holder.update_icon() + +/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user) + if(user.disabilities & CLUMSY && prob(50)) + flash_carbon(user, user, 15, 0) + return 0 + return 1 + +/obj/item/device/assembly/flash/activate() + if(!try_use_flash()) + return 0 + var/turf/T = get_turf(src) + T.visible_message("[src] emits a blinding light!") + for(var/mob/living/carbon/M in viewers(3, null)) + flash_carbon(M, null, 2, 0) + + +/obj/item/device/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. + crit_fail = 1 + update_icon() + var/turf/T = get_turf(src) + T.visible_message("The [src.name] burns out!") + + +/obj/item/device/assembly/flash/proc/flash_recharge(interval=10) + if(prob(times_used * 3)) //The more often it's used in a short span of time the more likely it will burn out + burn_out() + return 0 + + var/deciseconds_passed = world.time - last_used + for(var/seconds = deciseconds_passed/10, seconds>=interval, seconds-=interval) //get 1 charge every interval + times_used-- + + last_used = world.time + times_used = max(0, times_used) //sanity + return 1 + +/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null) + flash_recharge(10) + + if(crit_fail) + return 0 + + playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) + update_icon(1) + times_used++ + + if(user && !clown_check(user)) + return 0 + + return 1 + + +/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 5, targeted = 1) + add_logs(user, M, "flashed", src) + if(user && targeted) + if(M.weakeyes) + M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash + if(M.flash_eyes(1, 1)) + M.confused += power + terrible_conversion_proc(M, user) + M.Stun(1) + visible_message("[user] blinds [M] with the flash!") + user << "You blind [M] with the flash!" + M << "[user] blinds you with the flash!" + if(M.weakeyes) + M.Stun(2) + M.visible_message("[M] gasps and shields their eyes!", "You gasp and shields your eyes!") + else + visible_message("[user] fails to blind [M] with the flash!") + user << "You fail to blind [M] with the flash!" + M << "[user] fails to blind you with the flash!" + else + if(M.flash_eyes()) + M.confused += power + +/obj/item/device/assembly/flash/attack(mob/living/M, mob/user) + if(!try_use_flash(user)) + return 0 + + if(iscarbon(M)) + flash_carbon(M, user, 5, 1) + return 1 + + else if(issilicon(M)) + add_logs(user, M, "flashed", src) + update_icon(1) + M.Weaken(rand(5,10)) + user.visible_message("[user] overloads [M]'s sensors with the flash!", "You overload [M]'s sensors with the flash!") + return 1 + + user.visible_message("[user] fails to blind [M] with the flash!", "You fail to blind [M] with the flash!") + + +/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0) + if(holder) + return 0 + if(!try_use_flash(user)) + return 0 + user.visible_message("[user]'s flash emits a blinding light!", "Your flash emits a blinding light!") + for(var/mob/living/carbon/M in oviewers(3, null)) + flash_carbon(M, user, 1, 0) + + +/obj/item/device/assembly/flash/emp_act(severity) + if(!try_use_flash()) + return 0 + for(var/mob/living/carbon/M in viewers(3, null)) + flash_carbon(M, null, 10, 0) + burn_out() + ..() + + +/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/M, mob/user) + if(ishuman(M) && ishuman(user) && M.stat != DEAD) + if(user.mind && (user.mind in ticker.mode.head_revolutionaries)) + if(M.client) + if(M.stat == CONSCIOUS) + M.mind_initialize() //give them a mind datum if they don't have one. + var/resisted + if(!isloyal(M)) + if(user.mind in ticker.mode.head_revolutionaries) + if(ticker.mode.add_revolutionary(M.mind)) + times_used -- //Flashes less likely to burn out for headrevs when used for conversion + else + resisted = 1 + else + resisted = 1 + + if(resisted) + user << "This mind seems resistant to the flash!" + else + user << "They must be conscious before you can convert them!" + else + user << "This mind is so vacant that it is not susceptible to influence!" + + +/obj/item/device/assembly/flash/cyborg + origin_tech = null + +/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user) + ..() + cyborg_flash_animation(user) + +/obj/item/device/assembly/flash/cyborg/attack_self(mob/user) + ..() + cyborg_flash_animation(user) + +/obj/item/device/assembly/flash/cyborg/attackby(obj/item/weapon/W, mob/user, params) + return + +/obj/item/device/assembly/flash/cyborg/proc/cyborg_flash_animation(mob/living/user) + var/atom/movable/overlay/animation = new(user.loc) + animation.layer = user.layer + 1 + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = user + flick("blspell", animation) + sleep(5) + qdel(animation) + + +/obj/item/device/assembly/flash/memorizer + name = "memorizer" + desc = "If you see this, you're not likely to remember it any time soon." + icon = 'icons/obj/device.dmi' + icon_state = "memorizer" + item_state = "nullrod" + +/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index f3a03c8cf88..8d53d453bc8 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -10,6 +10,16 @@ var/obj/effect/beam/i_beam/first = null var/obj/effect/beam/i_beam/last = null + +/obj/item/device/assembly/infra/New() + ..() + SSobj.processing |= src + +/obj/item/device/assembly/infra/Destroy() + if(first) + qdel(first) + return ..() + /obj/item/device/assembly/infra/describe() return "The infrared trigger is [on?"on":"off"]." @@ -25,7 +35,8 @@ SSobj.processing |= src else on = 0 - if(first) qdel(first) + if(first) + qdel(first) SSobj.processing.Remove(src) update_icon() return secured @@ -45,7 +56,7 @@ if(!on) if(first) qdel(first) - return + return if(!secured) return if(first && last) @@ -96,7 +107,7 @@ /obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel if(is_secured(user)) user.set_machine(src) - var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n
", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) + var/dat = "Infrared Laser\nStatus: [on ? "On" : "Off"]
\nVisibility: [visible ? "Visible" : "Invisible"]
\n
" dat += "

Refresh" dat += "

Close" user << browse(dat, "window=infra") @@ -105,7 +116,7 @@ /obj/item/device/assembly/infra/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=infra") onclose(usr, "infra") return @@ -127,7 +138,7 @@ set category = "Object" set src in usr - if(usr.stat || !usr.canmove || usr.restrained()) + if(usr.incapacitated()) return dir = turn(dir, 90) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 656e927716e..53990197caa 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -15,6 +15,11 @@ /obj/item/device/assembly/prox_sensor/proc/sense() + +/obj/item/device/assembly/prox_sensor/New() + ..() + SSobj.processing |= src + /obj/item/device/assembly/prox_sensor/describe() if(timing) return "The proximity sensor is arming." @@ -24,7 +29,7 @@ if(!..()) return 0//Cooldown check timing = !timing update_icon() - return 0 + return 1 /obj/item/device/assembly/prox_sensor/toggle_secure() @@ -55,13 +60,12 @@ /obj/item/device/assembly/prox_sensor/process() - if(timing && (time >= 0)) + if(timing) time-- - if(timing && time <= 0) - timing = 0 - toggle_scan() - time = 10 - return + if(time <= 0) + timing = 0 + toggle_scan() + time = initial(time) /obj/item/device/assembly/prox_sensor/dropped() @@ -113,7 +117,7 @@ /obj/item/device/assembly/prox_sensor/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=prox") onclose(usr, "prox") return @@ -137,5 +141,3 @@ if(usr) attack_self(usr) - - return diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 7760900ac56..889136ec691 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -10,6 +10,10 @@ var/time = 5 +/obj/item/device/assembly/timer/New() + ..() + SSobj.processing |= src + /obj/item/device/assembly/timer/describe() if(timing) return "The timer is counting down from [time]!" @@ -20,7 +24,7 @@ if(!..()) return 0//Cooldown check timing = !timing update_icon() - return 0 + return 1 /obj/item/device/assembly/timer/toggle_secure() @@ -42,17 +46,16 @@ cooldown = 2 spawn(10) process_cooldown() - return + update_icon() /obj/item/device/assembly/timer/process() - if(timing && (time > 0)) + if(timing) time-- - if(timing && time <= 0) - timing = 0 - timer_end() - time = initial(time) - return + if(time <= 0) + timing = 0 + timer_end() + time = initial(time) /obj/item/device/assembly/timer/update_icon() @@ -63,7 +66,6 @@ attached_overlays += "timer_timing" if(holder) holder.update_icon() - return /obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires @@ -76,12 +78,11 @@ var/datum/browser/popup = new(user, "timer", name) popup.set_content(dat) popup.open() - return /obj/item/device/assembly/timer/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=timer") onclose(usr, "timer") return @@ -107,4 +108,3 @@ if(usr) attack_self(usr) - return diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3c11398621f..5f04c0f69b9 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -363,24 +363,22 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set if(jobban_isbanned(user, "Syndicate")) dat += "You are banned from antagonist roles." src.be_special = 0 + var/n = 0 + for (var/i in special_roles) + if(jobban_isbanned(user, i)) + dat += "Be [i]: BANNED
" + else + var/days_remaining = null + if(config.use_age_restriction_for_jobs && ispath(special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age + var/mode_path = special_roles[i] + var/datum/game_mode/temp_mode = new mode_path + days_remaining = temp_mode.get_remaining_days(user.client) - else - var/n = 0 - for (var/i in special_roles) - if(jobban_isbanned(user, i)) - dat += "Be [i]: \[BANNED]
" + if(days_remaining) + dat += "Be [i]: \[IN [days_remaining] DAYS]
" else - var/days_remaining = null - if(config.use_age_restriction_for_jobs && ispath(special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age - var/mode_path = special_roles[i] - var/datum/game_mode/temp_mode = new mode_path - days_remaining = temp_mode.get_remaining_days(user.client) - - if(days_remaining) - dat += "Be [i]: \[IN [days_remaining] DAYS]
" - else - dat += "Be [i]: [src.be_special&(1<
" - n++ + dat += "Be [i]:
[src.be_special&(1<
" + n++ dat += "" dat += "
" @@ -436,7 +434,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - HTML += "[rank] \[BANNED\]" + HTML += "[rank] BANNED" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) @@ -650,6 +648,28 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set proc/process_link(mob/user, list/href_list) if(!istype(user, /mob/new_player)) return + if(href_list["jobbancheck"]) + var/job = sanitizeSQL(href_list["jobbancheck"]) + var/sql_ckey = sanitizeSQL(user.ckey) + var/DBQuery/query_get_jobban = dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND job = '[job]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_get_jobban.Execute()) + var/err = query_get_jobban.ErrorMsg() + log_game("SQL ERROR obtaining reason from ban table. Error : \[[err]\]\n") + return + if(query_get_jobban.NextRow()) + var/reason = query_get_jobban.item[1] + var/bantime = query_get_jobban.item[2] + var/duration = query_get_jobban.item[3] + var/expiration_time = query_get_jobban.item[4] + var/a_ckey = query_get_jobban.item[5] + var/text + text = "You, or another user of this computer, ([user.ckey]) is banned from playing [job]. The ban reason is:
[reason]
This ban was applied by [a_ckey] on [bantime]" + if(text2num(duration) > 0) + text += ". The ban is for [duration] minutes and expires on [expiration_time] (server time)" + text += ".
" + user << text + return + if(href_list["preference"] == "job") switch(href_list["task"]) if("close") diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 92645f50a67..4de50095af8 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,3 +1,7 @@ +/obj/item/clothing/glasses + name = "glasses" + materials = list(MAT_GLASS = 250) + /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm new file mode 100644 index 00000000000..c683ec8533b --- /dev/null +++ b/code/modules/clothing/outfits/ert.dm @@ -0,0 +1,172 @@ +/datum/outfit/ert + name = "ERT Common" + + uniform = /obj/item/clothing/under/rank/centcom_officer + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/device/radio/headset/headset_cent/alt + +/datum/outfit/ert/post_equip(mob/living/carbon/human/H) + 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() + + var/obj/item/device/radio/R = H.ears + R.set_frequency(CENTCOM_FREQ) + R.freqlock = 1 + + var/obj/item/weapon/card/id/W = H.wear_id + W.registered_name = H.real_name + W.update_label(W.registered_name, W.assignment) + +/datum/outfit/ert/commander + name = "ERT Commander" + + id = /obj/item/weapon/card/id/ert + suit = /obj/item/clothing/suit/space/hardsuit/ert + glasses = /obj/item/clothing/glasses/thermal/eyepatch + back = /obj/item/weapon/storage/backpack/captain + belt = /obj/item/weapon/storage/belt/security/full + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1) + l_pocket = /obj/item/weapon/switchblade + +/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/captain + R.recalculateChannels() + +/datum/outfit/ert/commander/alert + name = "ERT Commander - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1) + l_pocket = /obj/item/weapon/melee/energy/sword/saber + +/datum/outfit/ert/security + name = "ERT Security" + + id = /obj/item/weapon/card/id/ert/Security + suit = /obj/item/clothing/suit/space/hardsuit/ert/sec + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + back = /obj/item/weapon/storage/backpack/security + belt = /obj/item/weapon/storage/belt/security/full + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/storage/box/handcuffs=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/weapon/gun/energy/gun/advtaser=1) + +/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/hos + R.recalculateChannels() + +/datum/outfit/ert/security/alert + name = "ERT Security - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/storage/box/handcuffs=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/weapon/gun/energy/pulse/carbine/loyalpin=1) + + +/datum/outfit/ert/medic + name = "ERT Medic" + + id = /obj/item/weapon/card/id/ert/Medical + suit = /obj/item/clothing/suit/space/hardsuit/ert/med + glasses = /obj/item/clothing/glasses/hud/health + back = /obj/item/weapon/storage/backpack/medic + belt = /obj/item/weapon/storage/belt/medical + r_hand = /obj/item/weapon/storage/firstaid/regular + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1,\ + /obj/item/weapon/reagent_containers/hypospray/combat=1) + +/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/cmo + R.recalculateChannels() + +/datum/outfit/ert/medic/alert + name = "ERT Medic - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\ + /obj/item/weapon/reagent_containers/hypospray/combat/nanites=1) + +/datum/outfit/ert/engineer + name = "ERT Engineer" + + id = /obj/item/weapon/card/id/ert/Engineer + suit = /obj/item/clothing/suit/space/hardsuit/ert/engi + glasses = /obj/item/clothing/glasses/meson/engine + back = /obj/item/weapon/storage/backpack/industrial + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/weapon/rcd_ammo/large + r_hand = /obj/item/weapon/storage/firstaid/regular + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1,\ + /obj/item/weapon/rcd/loaded=1) + +/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/ce + R.recalculateChannels() + +/datum/outfit/ert/engineer/alert + name = "ERT Engineer - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\ + /obj/item/weapon/rcd/combat=1) + + +/datum/outfit/centcom_official + name = "Centcom Official" + + uniform = /obj/item/clothing/under/rank/centcom_officer + shoes = /obj/item/clothing/shoes/sneakers/black + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/device/radio/headset/headset_cent + glasses = /obj/item/clothing/glasses/sunglasses + belt = /obj/item/weapon/gun/energy/gun + l_pocket = /obj/item/weapon/pen + back = /obj/item/weapon/storage/backpack/satchel_norm + r_pocket = /obj/item/device/pda/heads + l_hand = /obj/item/weapon/clipboard + id = /obj/item/weapon/card/id + +/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H) + var/obj/item/device/pda/heads/pda = H.r_store + pda.owner = H.real_name + pda.ownjob = "Centcom Official" + pda.update_label() + + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_centcom_access("Centcom Official") + W.access += access_weapons + W.assignment = "Centcom Official" + W.registered_name = H.real_name + W.update_label() \ No newline at end of file diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm new file mode 100644 index 00000000000..623edd0775d --- /dev/null +++ b/code/modules/clothing/outfits/standard.dm @@ -0,0 +1,365 @@ +/datum/outfit/space + name = "Standard Space Gear" + + uniform = /obj/item/clothing/under/color/grey + shoes = /obj/item/clothing/shoes/sneakers/black + suit = /obj/item/clothing/suit/space + head = /obj/item/clothing/head/helmet/space + back = /obj/item/weapon/tank/jetpack/oxygen + mask = /obj/item/clothing/mask/breath + +/datum/outfit/space/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/tank/jetpack/J = H.back + J.toggle() + J.Topic(null, list("stat" = 1)) + + +/datum/outfit/tournament + +/datum/outfit/tournament/ + name = "tournament standard red" + + uniform = /obj/item/clothing/under/color/red + shoes = /obj/item/clothing/shoes/sneakers/black + suit = /obj/item/clothing/suit/armor/vest + head = /obj/item/clothing/head/helmet/thunderdome + r_hand = /obj/item/weapon/gun/energy/pulse/destroyer + l_hand = /obj/item/weapon/kitchen/knife + r_pocket = /obj/item/weapon/grenade/smokebomb + + +/datum/outfit/tournament/red + name = "tournament standard green" + + uniform = /obj/item/clothing/under/color/green + +/datum/outfit/tournament/gangster + name = "tournament gangster" + uniform = /obj/item/clothing/under/rank/det + suit = /obj/item/clothing/suit/det_suit + glasses = /obj/item/clothing/glasses/thermal/monocle + head = /obj/item/clothing/head/det_hat + r_hand = /obj/item/weapon/gun/projectile + l_hand = null + r_pocket = /obj/item/ammo_box/c10mm + +/datum/outfit/tournament/janitor + name = "tournament janitor" + + uniform = /obj/item/clothing/under/rank/janitor + back = /obj/item/weapon/storage/backpack + suit = null + head = null + r_hand = /obj/item/weapon/mop + l_hand = /obj/item/weapon/reagent_containers/glass/bucket + r_pocket = /obj/item/weapon/grenade/chem_grenade/cleaner + l_pocket = /obj/item/weapon/grenade/chem_grenade/cleaner + backpack_contents = list(/obj/item/stack/tile/plasteel=6) + +/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/reagent_containers/glass/bucket/bucket = H.l_hand + bucket.reagents.add_reagent("water",70) + +/datum/outfit/laser_tag + name = "Laser Tag Red" + + uniform = /obj/item/clothing/under/color/red + shoes = /obj/item/clothing/shoes/sneakers/red + head = /obj/item/clothing/head/helmet/redtaghelm + gloves = /obj/item/clothing/gloves/color/red + ears = /obj/item/device/radio/headset + suit = /obj/item/clothing/suit/redtag + back = /obj/item/weapon/storage/backpack + suit_store = /obj/item/weapon/gun/energy/laser/redtag + backpack_contents = list(/obj/item/weapon/storage/box=1) + +/datum/outfit/laser_tag/blue + name = "Laser Tag Blue" + uniform = /obj/item/clothing/under/color/blue + shoes = /obj/item/clothing/shoes/sneakers/blue + head = /obj/item/clothing/head/helmet/bluetaghelm + gloves = /obj/item/clothing/gloves/color/blue + suit = /obj/item/clothing/suit/bluetag + suit_store = /obj/item/weapon/gun/energy/laser/bluetag + +/datum/outfit/pirate + name = "Pirate" + + uniform = /obj/item/clothing/under/pirate + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/bandana + glasses = /obj/item/clothing/glasses/eyepatch + r_hand = /obj/item/weapon/melee/energy/sword/pirate + +/datum/outfit/pirate/space + name = "Space Pirate" + + suit = /obj/item/clothing/suit/space/pirate + head = /obj/item/clothing/head/helmet/space/pirate + +/datum/outfit/tunnel_clown + name = "Tunnel Clown" + + uniform = /obj/item/clothing/under/rank/clown + shoes = /obj/item/clothing/shoes/clown_shoes + gloves = /obj/item/clothing/gloves/color/black + mask = /obj/item/clothing/mask/gas/clown_hat + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/thermal/monocle + suit = /obj/item/clothing/suit/hooded/chaplain_hoodie + l_pocket = /obj/item/weapon/reagent_containers/food/snacks/grown/banana + r_pocket = /obj/item/weapon/bikehorn + id = /obj/item/weapon/card/id + r_hand = /obj/item/weapon/twohanded/fireaxe + +/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.access = get_all_accesses() + W.assignment = "Tunnel Clown!" + W.registered_name = H.real_name + W.update_label(H.real_name) + +/datum/outfit/psycho + name = "Masked Killer" + + uniform = /obj/item/clothing/under/overalls + shoes = /obj/item/clothing/shoes/sneakers/white + gloves = /obj/item/clothing/gloves/color/latex + mask = /obj/item/clothing/mask/surgical + head = /obj/item/clothing/head/welding + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/thermal/monocle + suit = /obj/item/clothing/suit/apron + l_pocket = /obj/item/weapon/kitchen/knife + r_pocket = /obj/item/weapon/scalpel + r_hand = /obj/item/weapon/twohanded/fireaxe + +/datum/outfit/psycho/post_equip(mob/living/carbon/human/H) + for(var/obj/item/carried_item in H.contents) + if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. + carried_item.add_blood(H)//Oh yes, there will be blood... + H.regenerate_icons() + +/datum/outfit/assassin + name = "Assassin" + + uniform = /obj/item/clothing/under/suit_jacket + shoes = /obj/item/clothing/shoes/sneakers/black + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/sunglasses + l_pocket = /obj/item/weapon/melee/energy/sword/saber + l_hand = /obj/item/weapon/storage/secure/briefcase + id = /obj/item/weapon/card/id/syndicate + belt = /obj/item/device/pda/heads + +/datum/outfit/assassin/post_equip(mob/living/carbon/human/H) + var/obj/item/clothing/under/U = H.w_uniform + U.attachTie(new /obj/item/clothing/tie/waistcoat(H)) + + //Could use a type + var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = H.l_hand + 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/stack/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/c4,1) + + var/obj/item/device/pda/heads/pda = H.belt + pda.owner = H.real_name + pda.ownjob = "Reaper" + pda.update_label() + + var/obj/item/weapon/card/id/syndicate/W = H.wear_id + W.access = get_all_accesses() + W.assignment = "Reaper" + W.registered_name = H.real_name + W.update_label(H.real_name) + +/datum/outfit/centcom_commander + name = "Centcom Commander" + + uniform = /obj/item/clothing/under/rank/centcom_commander + suit = /obj/item/clothing/suit/armor/bulletproof + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/device/radio/headset/headset_cent/commander + glasses = /obj/item/clothing/glasses/eyepatch + mask = /obj/item/clothing/mask/cigarette/cigar/cohiba + head = /obj/item/clothing/head/centhat + belt = /obj/item/weapon/gun/projectile/revolver/mateba + r_pocket = /obj/item/weapon/lighter + l_pocket = /obj/item/ammo_box/a357 + back = /obj/item/weapon/storage/backpack/satchel + id = /obj/item/weapon/card/id + +/datum/outfit/centcom_commander/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_centcom_access("Centcom Commander") + W.assignment = "Centcom Commander" + W.registered_name = H.real_name + W.update_label() + +/datum/outfit/spec_ops + name = "Special Ops Officer" + + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/space/officer + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + glasses = /obj/item/clothing/glasses/thermal/eyepatch + ears = /obj/item/device/radio/headset/headset_cent/commander + mask = /obj/item/clothing/mask/cigarette/cigar/havana + head = /obj/item/clothing/head/helmet/space/beret + belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911 + r_pocket = /obj/item/weapon/lighter + back = /obj/item/weapon/storage/backpack/satchel + id = /obj/item/weapon/card/id + +/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_centcom_access("Special Ops Officer") + W.assignment = "Special Ops Officer" + W.registered_name = H.real_name + W.update_label() + + var/obj/item/device/radio/headset/R = H.ears + R.set_frequency(CENTCOM_FREQ) + R.freqlock = 1 + +/datum/outfit/wizard + name = "Blue Wizard" + + uniform = /obj/item/clothing/under/color/lightpurple + suit = /obj/item/clothing/suit/wizrobe + shoes = /obj/item/clothing/shoes/sandal + ears = /obj/item/device/radio/headset + head = /obj/item/clothing/head/wizard + r_pocket = /obj/item/weapon/teleportation_scroll + r_hand = /obj/item/weapon/spellbook + l_hand = /obj/item/weapon/staff + back = /obj/item/weapon/storage/backpack + backpack_contents = list(/obj/item/weapon/storage/box=1) + +/datum/outfit/wizard/red + name = "Red Wizard" + + suit = /obj/item/clothing/suit/wizrobe/red + head = /obj/item/clothing/head/wizard/red + +/datum/outfit/wizard/weeb + 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/soviet + name = "Soviet Admiral" + + uniform = /obj/item/clothing/under/soviet + head = /obj/item/clothing/head/hgpiratecap + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/device/radio/headset/headset_cent + glasses = /obj/item/clothing/glasses/thermal/eyepatch + suit = /obj/item/clothing/suit/hgpirate + back = /obj/item/weapon/storage/backpack/satchel + belt = /obj/item/weapon/gun/projectile/revolver/mateba + + id = /obj/item/weapon/card/id + +/datum/outfit/soviet/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_centcom_access("Admiral") + W.assignment = "Admiral" + W.registered_name = H.real_name + W.update_label() + +/datum/outfit/mobster + name = "Mobster" + + uniform = /obj/item/clothing/under/suit_jacket/really_black + head = /obj/item/clothing/head/fedora + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/sunglasses + r_hand = /obj/item/weapon/gun/projectile/automatic/tommygun + id = /obj/item/weapon/card/id + +/datum/outfit/mobster/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.assignment = "Assistant" + W.registered_name = H.real_name + W.update_label() + +/datum/outfit/plasmaman + name = "Plasmaman" + + head = /obj/item/clothing/head/helmet/space/hardsuit/plasmaman + suit = /obj/item/clothing/suit/space/eva/plasmaman + back = /obj/item/weapon/tank/internals/plasmaman/full + mask = /obj/item/clothing/mask/breath + +/datum/outfit/death_commando + name = "Death Commando" + + uniform = /obj/item/clothing/under/color/green + suit = /obj/item/clothing/suit/space/hardsuit/deathsquad + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + mask = /obj/item/clothing/mask/gas/sechailer/swat + glasses = /obj/item/clothing/glasses/hud/toggle/thermal + back = /obj/item/weapon/storage/backpack/security + l_pocket = /obj/item/weapon/melee/energy/sword/saber + r_pocket = /obj/item/weapon/shield/energy + suit_store = /obj/item/weapon/tank/internals/emergency_oxygen + belt = /obj/item/weapon/gun/projectile/revolver/mateba + r_hand = /obj/item/weapon/gun/energy/pulse/loyalpin + id = /obj/item/weapon/card/id + ears = /obj/item/device/radio/headset/headset_cent/alt + + backpack_contents = list(/obj/item/weapon/storage/box=1,\ + /obj/item/ammo_box/a357=1,\ + /obj/item/weapon/storage/firstaid/regular=1,\ + /obj/item/weapon/storage/box/flashbangs=1,\ + /obj/item/device/flashlight=1,\ + /obj/item/weapon/c4=1) + +/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H) + var/obj/item/device/radio/R = H.ears + R.set_frequency(CENTCOM_FREQ) + R.freqlock = 1 + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)//Here you go Deuryn + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + + + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses()//They get full station access. + W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access. + W.assignment = "Death Commando" + W.registered_name = H.real_name + W.update_label(W.registered_name, W.assignment) + +/datum/outfit/death_commando/officer + name = "Death Commando Officer" + head = /obj/item/clothing/head/helmet/space/beret + + + + + \ No newline at end of file diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index 8ecc971b7dd..795490b381f 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -37,7 +37,7 @@ user << "You cannot retrieve any bananium from the prototype shoes." /obj/item/clothing/shoes/clown_shoes/banana_shoes/attackby(obj/item/O, mob/user, params) - if(!bananium.can_insert(O)) + if(!bananium.get_item_material_amount(O)) user << "This item has no bananium!" return if(!user.unEquip(O)) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 58101dca40a..3015b00ca88 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -62,6 +62,16 @@ put_on_delay = 50 burn_state = -1 //Won't burn in fires +/obj/item/clothing/shoes/galoshes/dry + name = "absorbent galoshes" + desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." + icon_state = "galoshes_dry" + +/obj/item/clothing/shoes/galoshes/dry/step_action() + var/turf/simulated/t_loc = get_turf(src) + if(istype(t_loc) && t_loc.wet) + t_loc.MakeDry(TURF_WET_WATER) + /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" name = "clown shoes" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 6f1d8cb2df6..353da634cd3 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -84,6 +84,7 @@ desc = "A bronze medal." icon_state = "bronze" item_color = "bronze" + materials = list(MAT_METAL=1000) burn_state = -1 //Won't burn in fires //Pinning medals on people @@ -109,7 +110,7 @@ /obj/item/clothing/tie/medal/conduct name = "distinguished conduct medal" - desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." + desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." /obj/item/clothing/tie/medal/bronze_heart name = "bronze heart medal" @@ -125,6 +126,7 @@ desc = "A silver medal." icon_state = "silver" item_color = "silver" + materials = list(MAT_SILVER=1000) /obj/item/clothing/tie/medal/silver/valor name = "medal of valor" @@ -139,6 +141,7 @@ desc = "A prestigious golden medal." icon_state = "gold" item_color = "gold" + materials = list(MAT_GOLD=1000) /obj/item/clothing/tie/medal/gold/captain name = "medal of captaincy" diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm index ff06642aa2d..32829a9f6f1 100644 --- a/code/modules/food&drinks/drinks/drinks.dm +++ b/code/modules/food&drinks/drinks/drinks.dm @@ -107,6 +107,7 @@ force = 14 throwforce = 10 amount_per_transfer_from_this = 20 + materials = list(MAT_GOLD=1000) possible_transfer_amounts = null volume = 150 flags = CONDUCT | OPENCONTAINER @@ -202,12 +203,14 @@ name = "captain's flask" desc = "A silver flask belonging to the captain." icon_state = "flask" + materials = list(MAT_SILVER=500) volume = 60 /obj/item/weapon/reagent_containers/food/drinks/flask/det name = "detective's flask" desc = "The detective's only true friend." icon_state = "detflask" + materials = list(MAT_METAL=250) list_reagents = list("whiskey" = 30) /obj/item/weapon/reagent_containers/food/drinks/britcup diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 4248ec78472..4e97e3fbbb0 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -36,6 +36,7 @@ icon_state = "Glass ore" origin_tech = "materials=1" points = 1 + materials = list(MAT_GLASS = 100) refined_type = /obj/item/stack/sheet/glass /obj/item/weapon/ore/glass/attack_self(mob/living/user) @@ -236,36 +237,43 @@ /obj/item/weapon/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" + materials = list(MAT_GOLD = 400) value = 160 /obj/item/weapon/coin/silver cmineral = "silver" icon_state = "coin_silver_heads" + materials = list(MAT_SILVER = 400) value = 40 /obj/item/weapon/coin/diamond cmineral = "diamond" icon_state = "coin_diamond_heads" + materials = list(MAT_DIAMOND = 400) value = 120 /obj/item/weapon/coin/iron cmineral = "iron" icon_state = "coin_iron_heads" + materials = list(MAT_METAL = 400) value = 20 /obj/item/weapon/coin/plasma cmineral = "plasma" icon_state = "coin_plasma_heads" + materials = list(MAT_PLASMA = 400) value = 80 /obj/item/weapon/coin/uranium cmineral = "uranium" icon_state = "coin_uranium_heads" + materials = list(MAT_URANIUM = 400) value = 160 /obj/item/weapon/coin/clown cmineral = "bananium" icon_state = "coin_bananium_heads" + materials = list(MAT_BANANIUM = 400) value = 600 //makes the clown cri /obj/item/weapon/coin/adamantine diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 683aadeaa3e..69412112239 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -45,7 +45,7 @@ return shoes && shoes.negates_gravity() /mob/living/carbon/human/Move(NewLoc, direct) - . = ..() + . = ..() if(dna) for(var/datum/mutation/human/HM in dna.mutations) HM.on_move(src, NewLoc) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 30f90b8c51a..d1c5b5bec1f 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -471,4 +471,18 @@ else burn() - return shredded \ No newline at end of file + return shredded + +/mob/living/carbon/human/proc/equipOutfit(outfit) + 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) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 3dba0acb8ca..5ea96e0218f 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -36,7 +36,7 @@ if(method == VAPOR) //smoke, foam, spray if(M.reagents) var/modifier = Clamp((1 - touch_protection), 0, 1) - var/amount = round(volume*modifier, 0.1) + var/amount = round(reac_volume*modifier, 0.1) if(amount >= 1) M.reagents.add_reagent(id, amount) return 1 diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index 72b835cfb3d..3b7b5066c1e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -1009,3 +1009,19 @@ reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 +/datum/reagent/drying_agent + name = "Drying agent" + id = "drying_agent" + description = "Can be used to dry things." + reagent_state = LIQUID + color = "#A70FFF" + +/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, reac_volume) + if(istype(T) && T.wet) + T.MakeDry(TURF_WET_WATER) + +/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) + if(O.type == /obj/item/clothing/shoes/galoshes) + var/t_loc = get_turf(O) + qdel(O) + new /obj/item/clothing/shoes/galoshes/dry(t_loc) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes/Others.dm b/code/modules/reagents/Chemistry-Recipes/Others.dm index aa015604409..c3614639f7b 100644 --- a/code/modules/reagents/Chemistry-Recipes/Others.dm +++ b/code/modules/reagents/Chemistry-Recipes/Others.dm @@ -12,14 +12,14 @@ result = "lube" required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) result_amount = 4 - + /datum/chemical_reaction/spraytan name = "Spray Tan" id = "spraytan" result = "spraytan" required_reagents = list("orangejuice" = 1, "oil" = 1) result_amount = 2 - + /datum/chemical_reaction/spraytan2 name = "Spray Tan" id = "spraytan" @@ -254,6 +254,12 @@ required_reagents = list("toxin" = 1, "ethanol" = 4) result_amount = 5 +/datum/chemical_reaction/drying_agent + name = "Drying agent" + id = "drying_agent" + result = "drying_agent" + required_reagents = list("stable_plasma" = 2, "ethanol" = 1, "sodium" = 1) + result_amount = 3 //////////////////////////////////// Other goon stuff /////////////////////////////////////////// diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 8d17362e078..44ad2dd6bc7 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -40,6 +40,7 @@ other types of metals and chemistry for reagents). var/construction_time //Amount of time required for building the object var/build_path = "" //The file path of the object that gets created var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything + var/reagents //A proc to calculate the reliability of a design based on tech levels and innate modifiers. diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 828192263a2..2d20c8371bf 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -172,7 +172,7 @@ build_path = /obj/item/weapon/circuitboard/chem_heater category = list ("Medical Machinery") - /datum/design/clonecontrol +/datum/design/clonecontrol name = "Computer Design (Cloning Machine Console)" desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." id = "clonecontrol" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index dc69762ef53..8924a827921 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -456,8 +456,8 @@ visible_message("[src]'s crushing mechanism slowly and smoothly descends, flattening the [exp_on]!") new /obj/item/stack/sheet/plasteel(get_turf(pick(oview(1,src)))) if(linked_console.linked_lathe) - linked_console.linked_lathe.m_amount += min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (exp_on.materials[MAT_METAL])) - linked_console.linked_lathe.g_amount += min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (exp_on.materials[MAT_GLASS])) + for(var/material in exp_on.materials) + linked_console.linked_lathe.materials.insert_amount( min((linked_console.linked_lathe.materials.max_amount - linked_console.linked_lathe.materials.total_amount), (exp_on.materials[material])), material) if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!") playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index c12497d053e..5b2ddee54a0 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -13,16 +13,7 @@ Note: Must be placed west/left of and R&D console to function. icon_state = "protolathe" flags = OPENCONTAINER - var/max_material_storage = 100000 //All this could probably be done better with a list but meh. - var/m_amount = 0 - var/g_amount = 0 - var/gold_amount = 0 - var/silver_amount = 0 - var/plasma_amount = 0 - var/uranium_amount = 0 - var/diamond_amount = 0 - var/clown_amount = 0 - var/adamantine_amount = 0 + var/datum/material_container/materials var/efficiency_coeff var/list/categories = list( @@ -51,12 +42,14 @@ Note: Must be placed west/left of and R&D console to function. component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) + materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1)) RefreshParts() reagents.my_atom = src -/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater. - return m_amount + g_amount + gold_amount + silver_amount + plasma_amount + uranium_amount + diamond_amount + clown_amount +/obj/machinery/r_n_d/protolathe/Destroy() + qdel(materials) + return ..() /obj/machinery/r_n_d/protolathe/RefreshParts() var/T = 0 @@ -64,33 +57,16 @@ Note: Must be placed west/left of and R&D console to function. G.reagents.trans_to(src, G.reagents.total_volume) for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) T += M.rating - max_material_storage = T * 75000 + materials.max_amount = T * 75000 T = 0 for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) T += (M.rating/3) efficiency_coeff = max(T, 1) /obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material - var/A = 0 - switch(M) - if(MAT_METAL) - A = m_amount - if(MAT_GLASS) - A = g_amount - if(MAT_GOLD) - A = gold_amount - if(MAT_SILVER) - A = silver_amount - if(MAT_PLASMA) - A = plasma_amount - if(MAT_URANIUM) - A = uranium_amount - if(MAT_DIAMOND) - A = diamond_amount - if(MAT_BANANIUM) - A = clown_amount - else - A = reagents.get_reagent_amount(M) + var/A = materials.amount(M) + if(!A) + A = reagents.get_reagent_amount(M) A = A / max(1, (being_built.materials[M]/efficiency_coeff)) return A @@ -110,33 +86,7 @@ Note: Must be placed west/left of and R&D console to function. if(istype(O, /obj/item/weapon/crowbar)) for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) reagents.trans_to(G, G.reagents.maximum_volume) - if(m_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) - G.amount = round(m_amount / G.perunit) - if(g_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / G.perunit) - if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma(src.loc) - G.amount = round(plasma_amount / G.perunit) - if(silver_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver(src.loc) - G.amount = round(silver_amount / G.perunit) - if(gold_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc) - G.amount = round(gold_amount / G.perunit) - if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc) - G.amount = round(uranium_amount / G.perunit) - if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc) - G.amount = round(diamond_amount / G.perunit) - if(clown_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/bananium/G = new /obj/item/stack/sheet/mineral/bananium(src.loc) - G.amount = round(clown_amount / G.perunit) - if(adamantine_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine(src.loc) - G.amount = round(adamantine_amount / G.perunit) + materials.retrieve_all() default_deconstruction_crowbar(O) return 1 else @@ -152,52 +102,27 @@ Note: Must be placed west/left of and R&D console to function. return 1 if (O.is_open_container()) return - if (!istype(O, /obj/item/stack/sheet) || istype(O, /obj/item/stack/sheet/mineral/wood)) - user << "You cannot insert this item into the [src.name]!" - return 1 if (stat) return 1 if(istype(O,/obj/item/stack/sheet)) - var/obj/item/stack/sheet/S = O - if (TotalMaterials() + S.perunit > max_material_storage) + if(!materials.has_space( materials.get_item_material_amount(O) )) user << "The [src.name]'s material bin is full! Please remove material before adding more." return 1 var/obj/item/stack/sheet/stack = O var/amount = round(input("How many sheets do you want to add?") as num)//No decimals - if(!stack || stack.amount <= 0 || amount <= 0 || !in_range(src, stack) || !user.Adjacent(src)) + if(!in_range(src, stack) || !user.Adjacent(src)) return - if(amount > stack.amount) - amount = stack.amount - if(max_material_storage - TotalMaterials() < (amount*stack.perunit))//Can't overfill - amount = min(stack.amount, round((max_material_storage-TotalMaterials())/stack.perunit)) - - busy = 1 - use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount/10))) - user << "You add [amount] sheets to the [src.name]." - if(istype(stack, /obj/item/stack/sheet/metal)) - m_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/glass)) - g_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/gold)) - gold_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/silver)) - silver_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/plasma)) - plasma_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/uranium)) - uranium_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/diamond)) - diamond_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/bananium)) - clown_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/adamantine)) - adamantine_amount += amount * MINERAL_MATERIAL_AMOUNT - stack.use(amount) + var/amount_inserted = materials.insert_stack(O,amount) + if(!amount_inserted) + user << "You could not insert [O], it has no usable materials." + return 1 + else + busy = 1 + use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10))) + user << "You add [amount_inserted] sheets to the [src.name]." + overlays += "protolathe_[stack.name]" + sleep(10) + overlays -= "protolathe_[stack.name]" + busy = 0 updateUsrDialog() - - overlays += "protolathe_[stack.name]" - sleep(10) - overlays -= "protolathe_[stack.name]" - busy = 0 - diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 7cbe1fe68f1..f8f5cbd1c0d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -276,8 +276,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, else //Same design always gain quality screen = 2.3 //Crit fail gives the same design a lot of reliability, like really a lot if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any. - linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_METAL]*(linked_destroy.decon_mod/10))) - linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_GLASS]*(linked_destroy.decon_mod/10))) + for(var/material in linked_destroy.loaded_item.materials) + linked_lathe.materials.insert_amount(min((linked_lathe.materials.max_amount - linked_lathe.materials.total_amount), (linked_destroy.loaded_item.materials[material]*(linked_destroy.decon_mod/10))), material) feedback_add_details("item_deconstructed","[linked_destroy.loaded_item.type]") linked_destroy.loaded_item = null else @@ -377,33 +377,17 @@ won't update every console in existence) but it's more of a hassle to do. Also, flick("protolathe_n",linked_lathe) use_power(power) - for(var/M in being_built.materials) - if(linked_lathe.check_mat(being_built, M) < amount) - src.visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") - enough_materials = 0 - g2g = 0 - break + var/list/efficient_mats = list() + for(var/MAT in being_built.materials) + efficient_mats[MAT] = being_built.materials[MAT] / coeff + + if(!linked_lathe.materials.has_materials(efficient_mats, amount)) + src.visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") + enough_materials = 0 + g2g = 0 + if(enough_materials) - for(var/M in being_built.materials) - switch(M) - if(MAT_METAL) - linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_GLASS) - linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_GOLD) - linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_SILVER) - linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_PLASMA) - linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_URANIUM) - linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_DIAMOND) - linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_BANANIUM) - linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount))) - else - linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount) + linked_lathe.materials.use_amount(efficient_mats, amount) var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. var/R = being_built.reliability @@ -495,40 +479,26 @@ won't update every console in existence) but it's more of a hassle to do. Also, else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"]) - var/res_amount, type + var/MAT switch(href_list["lathe_ejectsheet"]) if("metal") - type = /obj/item/stack/sheet/metal - res_amount = "m_amount" + MAT = MAT_METAL if("glass") - type = /obj/item/stack/sheet/glass - res_amount = "g_amount" + MAT = MAT_GLASS if("gold") - type = /obj/item/stack/sheet/mineral/gold - res_amount = "gold_amount" + MAT = MAT_GOLD if("silver") - type = /obj/item/stack/sheet/mineral/silver - res_amount = "silver_amount" + MAT = MAT_SILVER if("plasma") - type = /obj/item/stack/sheet/mineral/plasma - res_amount = "plasma_amount" + MAT = MAT_PLASMA if("uranium") - type = /obj/item/stack/sheet/mineral/uranium - res_amount = "uranium_amount" + MAT = MAT_URANIUM if("diamond") - type = /obj/item/stack/sheet/mineral/diamond - res_amount = "diamond_amount" + MAT = MAT_DIAMOND if("clown") - type = /obj/item/stack/sheet/mineral/bananium - res_amount = "clown_amount" - if(ispath(type) && hasvar(linked_lathe, res_amount)) - var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc) - var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit) - if(available_num_sheets>0) - sheet.amount = min(available_num_sheets, desired_num_sheets) - linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount]-sheet.amount * sheet.perunit)) - else - qdel(sheet) + MAT = MAT_BANANIUM + linked_lathe.materials.retrieve_sheets(desired_num_sheets, MAT) + else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"]) var/res_amount, type @@ -816,7 +786,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Material Storage" dat += "Chemical Storage
" dat += "

Protolathe Menu:


" - dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
" + dat += "Material Amount: [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]
" dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
" dat += "
\ @@ -834,7 +804,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Main Menu" dat += "Protolathe Menu" dat += "

Browsing [selected_category]:


" - dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
" + dat += "Material Amount: [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]
" dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
" var/coeff = linked_lathe.efficiency_coeff @@ -869,7 +839,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Main Menu" dat += "Protolathe Menu" dat += "

Search results:


" - dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
" + dat += "Material Amount: [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]
" dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
" var/coeff = linked_lathe.efficiency_coeff @@ -903,52 +873,60 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Protolathe Menu
" dat += "

Material Storage:



" //Metal - dat += "* [linked_lathe.m_amount] of Metal: " - if(linked_lathe.m_amount >= 3750) dat += "Eject " - if(linked_lathe.m_amount >= 18750) dat += "5x " - if(linked_lathe.m_amount >= 3750) dat += "All" + var/m_amount = linked_lathe.materials.amount(MAT_METAL) + dat += "* [m_amount] of Metal: " + if(m_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(m_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(m_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Glass - dat += "* [linked_lathe.g_amount] of Glass: " - if(linked_lathe.g_amount >= 3750) dat += "Eject " - if(linked_lathe.g_amount >= 18750) dat += "5x " - if(linked_lathe.g_amount >= 3750) dat += "All" + var/g_amount = linked_lathe.materials.amount(MAT_GLASS) + dat += "* [g_amount] of Glass: " + if(g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(g_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Gold - dat += "* [linked_lathe.gold_amount] of Gold: " - if(linked_lathe.gold_amount >= 2000) dat += "Eject " - if(linked_lathe.gold_amount >= 10000) dat += "5x " - if(linked_lathe.gold_amount >= 2000) dat += "All" + var/gold_amount = linked_lathe.materials.amount(MAT_GOLD) + dat += "* [gold_amount] of Gold: " + if(gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(gold_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Silver - dat += "* [linked_lathe.silver_amount] of Silver: " - if(linked_lathe.silver_amount >= 2000) dat += "Eject " - if(linked_lathe.silver_amount >= 10000) dat += "5x " - if(linked_lathe.silver_amount >= 2000) dat += "All" + var/silver_amount = linked_lathe.materials.amount(MAT_SILVER) + dat += "* [silver_amount] of Silver: " + if(silver_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(silver_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(silver_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Plasma - dat += "* [linked_lathe.plasma_amount] of Solid Plasma: " - if(linked_lathe.plasma_amount >= 2000) dat += "Eject " - if(linked_lathe.plasma_amount >= 10000) dat += "5x " - if(linked_lathe.plasma_amount >= 2000) dat += "All" + var/plasma_amount = linked_lathe.materials.amount(MAT_PLASMA) + dat += "* [plasma_amount] of Solid Plasma: " + if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(plasma_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Uranium - dat += "* [linked_lathe.uranium_amount] of Uranium: " - if(linked_lathe.uranium_amount >= 2000) dat += "Eject " - if(linked_lathe.uranium_amount >= 10000) dat += "5x " - if(linked_lathe.uranium_amount >= 2000) dat += "All" + var/uranium_amount = linked_lathe.materials.amount(MAT_URANIUM) + dat += "* [uranium_amount] of Uranium: " + if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(uranium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Diamond - dat += "* [linked_lathe.diamond_amount] of Diamond: " - if(linked_lathe.diamond_amount >= 2000) dat += "Eject " - if(linked_lathe.diamond_amount >= 10000) dat += "5x " - if(linked_lathe.diamond_amount >= 2000) dat += "All" + var/diamond_amount = linked_lathe.materials.amount(MAT_DIAMOND) + dat += "* [diamond_amount] of Diamond: " + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Bananium - dat += "* [linked_lathe.clown_amount] of Bananium: " - if(linked_lathe.clown_amount >= 2000) dat += "Eject " - if(linked_lathe.clown_amount >= 10000) dat += "5x " - if(linked_lathe.clown_amount >= 2000) dat += "All" + var/bananium_amount = linked_lathe.materials.amount(MAT_BANANIUM) + dat += "* [bananium_amount] of Bananium: " + if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(bananium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" if(3.3) @@ -1048,21 +1026,21 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "

Material Storage:



" //Glass dat += "* [linked_imprinter.g_amount] glass: " - if(linked_imprinter.g_amount >= 3750) dat += "Eject " - if(linked_imprinter.g_amount >= 18750) dat += "5x " - if(linked_imprinter.g_amount >= 3750) dat += "All" + if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Gold dat += "* [linked_imprinter.gold_amount] gold: " - if(linked_imprinter.gold_amount >= 2000) dat += "Eject " - if(linked_imprinter.gold_amount >= 10000) dat += "5x " - if(linked_imprinter.gold_amount >= 2000) dat += "All" + if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" //Diamond dat += "* [linked_imprinter.diamond_amount] diamond: " - if(linked_imprinter.diamond_amount >= 2000) dat += "Eject " - if(linked_imprinter.diamond_amount >= 10000) dat += "5x " - if(linked_imprinter.diamond_amount >= 2000) dat += "All" + if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
" var/datum/browser/popup = new(user, "rndconsole", name, 460, 550) diff --git a/html/changelog.html b/html/changelog.html index 5a9cfeb36e9..c7df0b67e97 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
+

11 September 2015

+

CosmicScientist updated:

+
    +
  • Drone dispenser now has a var for its cooldown, get var editing.
  • +
+

09 September 2015

Joan updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 409e18c0762..812ca8a0bb0 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1731,3 +1731,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. your perusal and edification. - rscadd: Nanotrasen also wishes to remind the crew that non-authorized posters ARE CONTRABAND. Especially those new ones with Rule 34. Perverts. +2015-09-11: + CosmicScientist: + - tweak: Drone dispenser now has a var for its cooldown, get var editing. diff --git a/html/changelogs/Jordie jobban.yml b/html/changelogs/Jordie jobban.yml new file mode 100644 index 00000000000..79a8f787e9c --- /dev/null +++ b/html/changelogs/Jordie jobban.yml @@ -0,0 +1,5 @@ +author: Jordie0608 +delete-after: True + +changes: + - rscadd: "You can now view the reason of a jobban from character setup." \ No newline at end of file diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 4341f441d0d..0994856ff60 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index 3cc1d93114e..0e561b6ff82 100644 Binary files a/icons/obj/assemblies/new_assemblies.dmi and b/icons/obj/assemblies/new_assemblies.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 8527227a42b..e4326609bbd 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index c9d0f461bc5..c15dc60b6b4 100644 Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 5310c6088b5..16f91b9670f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -169,6 +169,7 @@ #include "code\datums\mind.dm" #include "code\datums\modules.dm" #include "code\datums\mutations.dm" +#include "code\datums\outfit.dm" #include "code\datums\recipe.dm" #include "code\datums\spell.dm" #include "code\datums\supplypacks.dm" @@ -920,6 +921,8 @@ #include "code\modules\clothing\masks\gasmask.dm" #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" +#include "code\modules\clothing\outfits\ert.dm" +#include "code\modules\clothing\outfits\standard.dm" #include "code\modules\clothing\shoes\bananashoes.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm"