diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 7089d277a49..1506cd26129 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -57,6 +57,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/Destroy() QDEL_NULL(stored) SSair.atmos_machinery -= src + SSair.deferred_pipenet_rebuilds -= src for(var/mob/living/L in src) //ventcrawling is serious business L.remove_ventcrawl() L.forceMove(get_turf(src)) @@ -143,12 +144,13 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/replacePipenet() return -/obj/machinery/atmospherics/proc/build_network() +/obj/machinery/atmospherics/proc/build_network(remove_deferral = FALSE) // Called to build a network from this node - return + if(remove_deferral) + SSair.deferred_pipenet_rebuilds -= src /obj/machinery/atmospherics/proc/defer_build_network() - deferred_pipenet_rebuilds += src + SSair.deferred_pipenet_rebuilds += src /obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference) return diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index d19c95d6a66..276ce5e7b6e 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -67,7 +67,7 @@ update_icon() update_underlays() -/obj/machinery/atmospherics/binary/build_network() +/obj/machinery/atmospherics/binary/build_network(remove_deferral = FALSE) if(!parent1) parent1 = new /datum/pipeline() parent1.build_pipeline(src) @@ -75,6 +75,7 @@ if(!parent2) parent2 = new /datum/pipeline() parent2.build_pipeline(src) + ..() /obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index aa5d8925a0d..086d2ff799f 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -237,11 +237,12 @@ return // Pipenet procs -/obj/machinery/atmospherics/omni/build_network() +/obj/machinery/atmospherics/omni/build_network(remove_deferral = FALSE) for(var/datum/omni_port/P in ports) if(!P.parent) P.parent = new /datum/pipeline() P.parent.build_pipeline(src) + ..() /obj/machinery/atmospherics/omni/disconnect(obj/machinery/atmospherics/reference) for(var/datum/omni_port/P in ports) diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index 6dc5e5cc303..187b308fa3c 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -104,7 +104,7 @@ update_icon() update_underlays() -/obj/machinery/atmospherics/trinary/build_network() +/obj/machinery/atmospherics/trinary/build_network(remove_deferral = FALSE) if(!parent1) parent1 = new /datum/pipeline() parent1.build_pipeline(src) @@ -116,6 +116,7 @@ if(!parent3) parent3 = new /datum/pipeline() parent3.build_pipeline(src) + ..() /obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) diff --git a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm index 0af62e5d134..51b12d39481 100644 --- a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary_devices/unary_base.dm @@ -50,10 +50,11 @@ build_network() . = 1 -/obj/machinery/atmospherics/unary/build_network() +/obj/machinery/atmospherics/unary/build_network(remove_deferral = FALSE) if(!parent) parent = new /datum/pipeline() parent.build_pipeline(src) + ..() /obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference) if(reference == node) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index cd3cdfffb53..0692bf44efd 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -1,5 +1,3 @@ -var/global/list/deferred_pipenet_rebuilds = list() - /datum/pipeline var/datum/gas_mixture/air var/list/datum/gas_mixture/other_airs = list() diff --git a/code/ATMOSPHERICS/pipes/pipe.dm b/code/ATMOSPHERICS/pipes/pipe.dm index ce0b3aaef93..add81627ff8 100644 --- a/code/ATMOSPHERICS/pipes/pipe.dm +++ b/code/ATMOSPHERICS/pipes/pipe.dm @@ -66,10 +66,11 @@ return 0 return parent.air -/obj/machinery/atmospherics/pipe/build_network() +/obj/machinery/atmospherics/pipe/build_network(remove_deferral = FALSE) if(!parent) parent = new /datum/pipeline() parent.build_pipeline(src) + ..() /obj/machinery/atmospherics/pipe/setPipenet(datum/pipeline/P) parent = P diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 4434053e4ec..bf791e61519 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -27,6 +27,7 @@ SUBSYSTEM_DEF(air) var/list/excited_groups = list() var/list/active_turfs = list() var/list/hotspots = list() + var/list/deferred_pipenet_rebuilds = list() var/list/networks = list() var/list/atmos_machinery = list() var/list/pipe_init_dirs_cache = list() @@ -39,7 +40,7 @@ SUBSYSTEM_DEF(air) var/list/currentrun = list() - var/currentpart = SSAIR_PIPENETS + var/currentpart = SSAIR_DEFERREDPIPENETS /datum/controller/subsystem/air/stat_entry(msg) msg += "C:{" @@ -141,7 +142,7 @@ SUBSYSTEM_DEF(air) if(state != SS_RUNNING) return resumed = 0 - currentpart = SSAIR_PIPENETS + currentpart = SSAIR_DEFERREDPIPENETS /datum/controller/subsystem/air/proc/process_deferred_pipenets(resumed = 0) if(!resumed) @@ -152,7 +153,7 @@ SUBSYSTEM_DEF(air) var/obj/machinery/atmospherics/A = currentrun[currentrun.len] currentrun.len-- if(A) - A.build_network() + A.build_network(remove_deferral = TRUE) else deferred_pipenet_rebuilds.Remove(A) if(MC_TICK_CHECK) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 558f6407528..96c663fb703 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -468,137 +468,142 @@ var/record_id_num = 1001 var/icon/clothes_s = null - switch(H.mind.assigned_role) - if("Head of Personnel") - clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if("Nanotrasen Representative") - clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) - if("Blueshield") - clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "blueshield"), ICON_OVERLAY) - if("Magistrate") - clothes_s = new /icon('icons/mob/uniform.dmi', "really_black_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_OVERLAY) - if("Bartender") - clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Botanist") - clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Chef") - clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Janitor") - clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Librarian") - clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Quartermaster") - clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if("Cargo Technician") - clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Shaft Miner") - clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Lawyer") - clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if("Chaplain") - clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Research Director") - clothes_s = new /icon('icons/mob/uniform.dmi', "director_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if("Scientist") - clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) - if("Chemist") - clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) - if("Chief Medical Officer") - clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) - if("Medical Doctor") - clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if("Geneticist") - clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) - if("Virologist") - clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) - if("Psychiatrist") - clothes_s = new /icon('icons/mob/uniform.dmi', "psych_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_UNDERLAY) - if("Paramedic") - clothes_s = new /icon('icons/mob/uniform.dmi', "paramedic_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if("Captain") - clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if("Head of Security") - clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - if("Warden") - clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - if("Detective") - clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) - if("Security Pod Pilot") - clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY) - if("Brig Physician") - clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY) - if("Security Officer") - clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - if("Chief Engineer") - clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if("Station Engineer") - clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if("Life Support Specialist") - clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if("Mechanic") - clothes_s = new /icon('icons/mob/uniform.dmi', "mechanic_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if("Roboticist") - clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - else if(H.mind.assigned_role in get_all_centcom_jobs()) - clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) - else - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(H.mind) + switch(H.mind.assigned_role) + if("Head of Personnel") + clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if("Nanotrasen Representative") + clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) + if("Blueshield") + clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "blueshield"), ICON_OVERLAY) + if("Magistrate") + clothes_s = new /icon('icons/mob/uniform.dmi', "really_black_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_OVERLAY) + if("Bartender") + clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Botanist") + clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Chef") + clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Janitor") + clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Librarian") + clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Quartermaster") + clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if("Cargo Technician") + clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Shaft Miner") + clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Lawyer") + clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if("Chaplain") + clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Research Director") + clothes_s = new /icon('icons/mob/uniform.dmi', "director_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if("Scientist") + clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) + if("Chemist") + clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) + if("Chief Medical Officer") + clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) + if("Medical Doctor") + clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if("Geneticist") + clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) + if("Virologist") + clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) + if("Psychiatrist") + clothes_s = new /icon('icons/mob/uniform.dmi', "psych_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_UNDERLAY) + if("Paramedic") + clothes_s = new /icon('icons/mob/uniform.dmi', "paramedic_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if("Captain") + clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if("Head of Security") + clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + if("Warden") + clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + if("Detective") + clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) + if("Security Pod Pilot") + clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY) + if("Brig Physician") + clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY) + if("Security Officer") + clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + if("Chief Engineer") + clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + if("Station Engineer") + clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + if("Life Support Specialist") + clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + if("Mechanic") + clothes_s = new /icon('icons/mob/uniform.dmi', "mechanic_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + if("Roboticist") + clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + else if(H.mind.assigned_role in get_all_centcom_jobs()) + clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) + else + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + else + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + preview_icon.Blend(face_s, ICON_OVERLAY) // Why do we do this twice if(clothes_s) diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 9517ee09ef8..a4f6c44ce52 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -22,6 +22,8 @@ var/pda = null var/internals_slot = null //ID of slot containing a gas tank var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format + var/list/implants = null + var/list/cybernetic_implants = null /datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -89,6 +91,13 @@ var/number = backpack_contents[path] for(var/i = 0, i < number, i++) equip_item(H, path, slot_in_backpack) + if(implants) + for(var/path in implants) + var/obj/item/implant/I = new path(H) + I.implant(H) + for(var/path in cybernetic_implants) + var/obj/item/organ/internal/O = new path(H) + O.insert(H) post_equip(H, visualsOnly) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 586eef87dce..b2f993497d0 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1,6 +1,13 @@ // Used for 'select equipment' // code/modules/admin/verbs/debug.dm 566 +/datum/outfit/admin/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(!visualsOnly) + H.mind.assigned_role = name + H.job = name + + /proc/apply_to_card(obj/item/card/id/I, mob/living/carbon/human/H, list/access = list(), rank, special_icon) if(!istype(I) || !istype(H)) return 0 @@ -95,6 +102,7 @@ mask = /obj/item/clothing/mask/gas/syndicate l_ear = /obj/item/device/radio/headset/syndicate/alt glasses = /obj/item/clothing/glasses/night + shoes = /obj/item/clothing/shoes/magboots/syndie l_pocket = /obj/item/pinpointer/advpinpointer l_hand = /obj/item/tank/jetpack/oxygen/harness @@ -107,6 +115,7 @@ /obj/item/grenade/plastic/c4 = 1, /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, /obj/item/device/flashlight = 1, + /obj/item/clothing/shoes/combat = 1 ) /datum/outfit/admin/syndicate/operative/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -131,15 +140,21 @@ /datum/outfit/admin/syndicate/officer name = "Syndicate Officer" + head = /obj/item/clothing/head/beret + mask = /obj/item/clothing/mask/cigarette/cigar/havana belt = /obj/item/gun/projectile/automatic/pistol/deagle/camo l_ear = /obj/item/device/radio/headset/syndicate/alt l_pocket = /obj/item/pinpointer/advpinpointer backpack_contents = list( /obj/item/storage/box/engineer = 1, + /obj/item/device/flashlight = 1, /obj/item/reagent_containers/food/pill/initropidril = 1, /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, - /obj/item/ammo_box/magazine/m50 = 2) + /obj/item/ammo_box/magazine/m50 = 2, + /obj/item/clothing/shoes/magboots/syndie/advance = 1, + /obj/item/lighter/zippo/gonzofist = 1 + ) id_icon = "commander" id_access = "Syndicate Operative Leader" @@ -152,22 +167,11 @@ var/obj/item/implant/uplink/U = new /obj/item/implant/uplink(H) U.implant(H) - U.hidden_uplink.uses = 500//a measly 1000 TC along with the uplink in the pocket + U.hidden_uplink.uses = 500 var/obj/item/implant/dust/D = new(H) D.implant(H) -/datum/outfit/admin/syndicate/bomber - name = "Syndicate Bomber" - - backpack_contents = list( - /obj/item/storage/box/engineer = 1, - /obj/item/device/flashlight = 1, - /obj/item/card/emag = 1, - /obj/item/device/radio/beacon/syndicate/bomb = 2, - /obj/item/device/syndicatedetonator = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1 - ) /datum/outfit/admin/nt_vip name = "VIP Guest" @@ -193,114 +197,6 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("VIP Guest"), "VIP Guest") -/datum/outfit/admin/nt_navy_officer - name = "NT Navy Officer" - - uniform = /obj/item/clothing/under/rank/centcom/officer - back = /obj/item/storage/backpack/satchel - belt = /obj/item/gun/energy/pulse/pistol - gloves = /obj/item/clothing/gloves/color/white - shoes = /obj/item/clothing/shoes/centcom - head = /obj/item/clothing/head/beret/centcom/officer - l_ear = /obj/item/device/radio/headset/centcom - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - id = /obj/item/card/id/centcom - pda = /obj/item/device/pda/centcom - backpack_contents = list( - /obj/item/storage/box/engineer = 1, - /obj/item/implanter/dust = 1, - /obj/item/implanter/death_alarm = 1 - ) - -/datum/outfit/admin/nt_navy_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - if(visualsOnly) - return - - var/obj/item/card/id/I = H.wear_id - if(istype(I)) - apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer") - - var/obj/item/implant/L = new /obj/item/implant/mindshield(H) - L.implant(H) - - -/datum/outfit/admin/nt_special_ops_officer - name = "NT Special Ops Officer" - - uniform = /obj/item/clothing/under/syndicate/combat - suit = /obj/item/clothing/suit/space/deathsquad/officer - back = /obj/item/storage/backpack/security - belt = /obj/item/gun/energy/pulse/pistol/m1911 - gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/helmet/space/deathsquad/beret - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba - l_ear = /obj/item/device/radio/headset/centcom - glasses = /obj/item/clothing/glasses/thermal/cyber - id = /obj/item/card/id/centcom - r_pocket = /obj/item/storage/box/matches - pda = /obj/item/device/pda/centcom - backpack_contents = list( - /obj/item/storage/box/engineer = 1, - /obj/item/tank/emergency_oxygen/double/full = 1, - /obj/item/implanter/dust = 1, - /obj/item/implanter/death_alarm = 1, - /obj/item/twohanded/dualsaber/red = 1, - /obj/item/pinpointer/advpinpointer = 1, - /obj/item/reagent_containers/hypospray/combat/nanites = 1, - /obj/item/storage/box/zipties = 1, - /obj/item/clothing/shoes/magboots/advance = 1, - /obj/item/implanter/mindshield = 1, - ) - -/datum/outfit/admin/nt_special_ops_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - if(visualsOnly) - return - - var/obj/item/card/id/I = H.wear_id - if(istype(I)) - apply_to_card(I, H, get_centcom_access("Special Operations Officer"), "Special Operations Officer") - -/datum/outfit/admin/nt_special_ops_formal - name = "NT Special Ops Formal" - - uniform = /obj/item/clothing/under/rank/centcom/captain - back = /obj/item/storage/backpack/satchel - belt = /obj/item/gun/energy/pulse/pistol/m1911 - gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/helmet/space/deathsquad/beret - mask = /obj/item/clothing/mask/cigarette/cigar/cohiba - l_ear = /obj/item/device/radio/headset/centcom - glasses = /obj/item/clothing/glasses/thermal/cyber - id = /obj/item/card/id/centcom - r_pocket = /obj/item/storage/box/matches - pda = /obj/item/device/pda/centcom - backpack_contents = list( - /obj/item/storage/box/engineer = 1, - /obj/item/melee/classic_baton/telescopic = 1, - /obj/item/implanter/dust = 1, - /obj/item/implanter/death_alarm = 1 - ) - -/datum/outfit/admin/nt_special_ops_formal/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - if(visualsOnly) - return - - var/obj/item/device/pda/PDA = H.wear_pda - if(istype(PDA)) - PDA.owner = H.real_name - PDA.ownjob = "Special Operations Officer" - PDA.icon_state = "pda-syndi" - PDA.name = "PDA-[H.real_name] ([PDA.ownjob])" - PDA.desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition designed for military field work." - - var/obj/item/card/id/I = H.wear_id - if(istype(I)) - apply_to_card(I, H, get_centcom_access("Special Operations Officer"), "Special Operations Officer") /datum/outfit/admin/nt_navy_captain name = "NT Navy Captain" @@ -316,10 +212,13 @@ id = /obj/item/card/id/centcom pda = /obj/item/device/pda/centcom backpack_contents = list( - /obj/item/storage/box/engineer = 1, - /obj/item/implanter/dust = 1, + /obj/item/storage/box/centcomofficer = 1, /obj/item/implanter/death_alarm = 1 ) + implants = list( + /obj/item/implant/mindshield, + /obj/item/implant/dust + ) /datum/outfit/admin/nt_navy_captain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() @@ -330,9 +229,6 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain") - var/obj/item/implant/L = new /obj/item/implant/mindshield(H) - L.implant(H) - /datum/outfit/admin/nt_diplomat name = "NT Diplomat" @@ -347,9 +243,12 @@ pda = /obj/item/device/pda/centcom backpack_contents = list( /obj/item/storage/box/survival = 1, - /obj/item/implanter/dust = 1, /obj/item/implanter/death_alarm = 1, ) + implants = list( + /obj/item/implant/mindshield, + /obj/item/implant/dust + ) /datum/outfit/admin/nt_diplomat/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() @@ -360,6 +259,57 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Representative"), "Nanotrasen Diplomat") + +/datum/outfit/admin/nt_undercover + name = "NT Undercover Operative" + // Disguised NT special forces, sent to quietly eliminate mutinous people in high positions (e.g: captain) + + uniform = /obj/item/clothing/under/chameleon + back = /obj/item/storage/backpack + belt = /obj/item/storage/belt/utility/full/multitool + gloves = /obj/item/clothing/gloves/combat + shoes = /obj/item/clothing/shoes/syndigaloshes + l_ear = /obj/item/device/radio/headset/heads/captain + id = /obj/item/card/id/syndicate + pda = /obj/item/device/pda + backpack_contents = list( + /obj/item/storage/box/engineer = 1, + /obj/item/device/flashlight = 1, + /obj/item/gun/projectile/automatic/proto = 1, // NT saber SMG + /obj/item/suppressor = 1, // silencer for SMG + /obj/item/ammo_box/magazine/smgm9mm = 3, // SMG ammo + /obj/item/door_remote/omni = 1, + /obj/item/implanter/mindshield = 1, // not implanted by default, as that would make them suspicious + /obj/item/implanter/storage = 1 // do not auto-implant this, that causes a bug + ) + implants = list( + /obj/item/implant/dust + ) + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/hud/security, + /obj/item/organ/internal/cyberimp/eyes/xray, + /obj/item/organ/internal/cyberimp/brain/anti_drop, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/chest/nutriment/plus + ) + +/datum/outfit/admin/nt_undercover/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + + var/obj/item/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Civilian") + I.icon_state = "deathsquad" + + + var/obj/item/device/radio/R = H.l_ear + if(istype(R)) + R.name = "radio headset" + R.icon_state = "headset" + + /datum/outfit/admin/death_commando name = "NT Death Commando" @@ -485,12 +435,10 @@ backpack_contents = list( /obj/item/storage/box/survival = 1, /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing = 1, - /obj/item/storage/box/syndie_kit/caneshotgun = 1, /obj/item/toy/crayon/mime = 1, - /obj/item/gun/projectile/automatic/pistol = 1, - /obj/item/suppressor = 1, + /obj/item/storage/box/syndie_kit/caneshotgun = 1, /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath = 2, - /obj/item/pen/sleepy = 1, + /obj/item/device/radio/uplink = 1, /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, /obj/item/device/flashlight = 1 ) @@ -701,7 +649,9 @@ backpack_contents = list( /obj/item/storage/box/survival = 1, /obj/item/kitchen/knife/combat = 1, - /obj/item/ammo_box/magazine/m556 = 3) + /obj/item/ammo_box/magazine/m556 = 3, + /obj/item/clothing/shoes/magboots = 1 + ) /datum/outfit/admin/solgov/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -725,7 +675,9 @@ /obj/item/storage/box/survival = 1, /obj/item/kitchen/knife/combat = 1, /obj/item/melee/classic_baton/telescopic = 1, - /obj/item/ammo_box/magazine/m50 = 2) + /obj/item/ammo_box/magazine/m50 = 2, + /obj/item/clothing/shoes/magboots/advance = 1 + ) /datum/outfit/admin/chrono name = "Chrono Legionnaire" @@ -734,7 +686,7 @@ suit = /obj/item/clothing/suit/space/chronos back = /obj/item/chrono_eraser gloves = /obj/item/clothing/gloves/combat - shoes = /obj/item/clothing/shoes/combat + shoes = /obj/item/clothing/shoes/magboots/advance head = /obj/item/clothing/head/helmet/space/chronos mask = /obj/item/clothing/mask/gas/syndicate glasses = /obj/item/clothing/glasses/night @@ -756,7 +708,7 @@ uniform = /obj/item/clothing/under/color/grey suit = /obj/item/clothing/suit/space back = /obj/item/tank/jetpack/oxygen - shoes = /obj/item/clothing/shoes/black + shoes = /obj/item/clothing/shoes/magboots head = /obj/item/clothing/head/helmet/space mask = /obj/item/clothing/mask/breath l_ear = /obj/item/device/radio/headset @@ -779,6 +731,7 @@ /datum/outfit/admin/hardsuit back = /obj/item/tank/jetpack/oxygen mask = /obj/item/clothing/mask/breath + shoes = /obj/item/clothing/shoes/magboots id = /obj/item/card/id /datum/outfit/admin/hardsuit/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -804,6 +757,7 @@ name = "CE Hardsuit" suit = /obj/item/clothing/suit/space/hardsuit/elite head = /obj/item/clothing/head/helmet/space/hardsuit/elite + shoes = /obj/item/clothing/shoes/magboots/advance /datum/outfit/admin/hardsuit/mining name = "Mining Hardsuit" @@ -814,11 +768,13 @@ name = "Syndi Hardsuit" suit = /obj/item/clothing/suit/space/hardsuit/syndi head = /obj/item/clothing/head/helmet/space/hardsuit/syndi + shoes = /obj/item/clothing/shoes/magboots/syndie /datum/outfit/admin/hardsuit/wizard name = "Wizard Hardsuit" suit = /obj/item/clothing/suit/space/hardsuit/wizard head = /obj/item/clothing/head/helmet/space/hardsuit/wizard + shoes = /obj/item/clothing/shoes/magboots /datum/outfit/admin/hardsuit/medical name = "Medical Hardsuit" @@ -996,15 +952,15 @@ /obj/item/storage/box/survival = 1, /obj/item/device/flashlight = 1 ) + implants = list( + /obj/item/implant/dust + ) /datum/outfit/admin/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() if(visualsOnly) return - var/obj/item/implant/dust/D = new /obj/item/implant/dust(H) - D.implant(H) - var/obj/item/device/pda/PDA = H.wear_pda if(istype(PDA)) PDA.owner = H.real_name @@ -1034,7 +990,10 @@ /obj/item/suppressor = 1, /obj/item/card/emag = 1, /obj/item/device/flashlight = 1, - /obj/item/implanter/storage = 1 + /obj/item/implanter/storage = 1 // do not auto-implant this, that causes a bug + ) + implants = list( + /obj/item/implant/dust ) /datum/outfit/admin/spy/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -1046,9 +1005,6 @@ if(istype(G)) G.name = "black gloves" - var/obj/item/implant/dust/D = new /obj/item/implant/dust(H) - D.implant(H) - var/obj/item/device/pda/PDA = H.wear_pda if(istype(PDA)) PDA.owner = H.real_name @@ -1089,6 +1045,7 @@ if(istype(I)) apply_to_card(I, H, get_all_accesses(), "Dark Lord", "syndie") + /datum/outfit/admin/wizard uniform = /obj/item/clothing/under/color/lightpurple suit = /obj/item/clothing/suit/wizrobe @@ -1130,6 +1087,36 @@ shoes = /obj/item/clothing/shoes/sandal/marisa head = /obj/item/clothing/head/wizard/marisa +/datum/outfit/admin/wizard/arch + name = "Arch Wizard" + + suit = /obj/item/clothing/suit/wizrobe/magusred + head = /obj/item/clothing/head/wizard/magus + belt = /obj/item/storage/belt/wands/full + l_hand = null + backpack_contents = list( + /obj/item/storage/box/engineer = 1, + /obj/item/clothing/suit/space/hardsuit/wizard = 1, + /obj/item/clothing/head/helmet/space/hardsuit/wizard = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/kitchen/knife/ritual = 1, + /obj/item/clothing/suit/wizrobe/red = 1, + /obj/item/clothing/head/wizard/red = 1 + ) + +/datum/outfit/admin/wizard/arch/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + var/obj/item/spellbook/B = H.r_hand + if(istype(B)) + B.owner = H // force-bind it so it can never be stolen, no matter what. + B.name = "Archwizard Spellbook" + B.uses = 50 + var/obj/item/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Arch Wizard") + /datum/outfit/admin/dark_priest name = "Dark Priest" @@ -1147,6 +1134,9 @@ /obj/item/storage/box/survival = 1, /obj/item/device/flashlight = 1, ) + implants = list( + /obj/item/implant/dust + ) /datum/outfit/admin/dark_priest/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() @@ -1163,5 +1153,3 @@ var/obj/item/device/radio/headset/R = H.l_ear if(istype(R)) R.flags |= NODROP - var/obj/item/implant/dust/D = new /obj/item/implant/dust(H) - D.implant(H) \ No newline at end of file diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index de9896f9571..8d0aa8de772 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -349,6 +349,7 @@ to_chat(user, "You have successfully Enthralled [H]. If they refuse to do as you say just adminhelp.") add_logs(user, H, "vampire-thralled") + /obj/effect/proc_holder/spell/vampire/self/cloak name = "Cloak of Darkness" desc = "Toggles whether you are currently cloaking yourself in darkness." diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index a8f57d3f04c..acac13fe53c 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -28,16 +28,13 @@ glasses = /obj/item/clothing/glasses/hud/security/sunglasses id = /obj/item/card/id/centcom pda = /obj/item/device/pda/centcom - backpack_contents = list( - /obj/item/gun/energy/pulse/pistol = 1, - /obj/item/implanter/dust = 1, - /obj/item/implanter/death_alarm = 1 + belt = /obj/item/gun/energy/pulse/pistol + implants = list( + /obj/item/implant/mindshield, + /obj/item/implant/dust ) - - implants = list(/obj/item/implant/mindshield) - backpack = /obj/item/storage/backpack/satchel - + box = /obj/item/storage/box/centcomofficer // CC Officials who lead ERTs, Death Squads, etc. @@ -61,22 +58,33 @@ /datum/outfit/job/ntspecops name = "Special Operations Officer" jobtype = /datum/job/ntspecops - - uniform = /obj/item/clothing/under/syndicate/combat + uniform = /obj/item/clothing/under/rank/centcom_commander suit = /obj/item/clothing/suit/space/deathsquad/officer + back = /obj/item/storage/backpack/security + belt = /obj/item/gun/energy/pulse/pistol/m1911 gloves = /obj/item/clothing/gloves/combat shoes = /obj/item/clothing/shoes/combat - head = /obj/item/clothing/head/beret/centcom/officer/navy + mask = /obj/item/clothing/mask/cigarette/cigar/cohiba + head = /obj/item/clothing/head/helmet/space/deathsquad/beret l_ear = /obj/item/device/radio/headset/centcom glasses = /obj/item/clothing/glasses/hud/security/sunglasses id = /obj/item/card/id/centcom pda = /obj/item/device/pda/centcom + r_pocket = /obj/item/storage/box/matches + box = /obj/item/storage/box/centcomofficer + backpack = /obj/item/storage/backpack/satchel backpack_contents = list( - /obj/item/implanter/dust = 1, - /obj/item/gun/energy/pulse/pistol/m1911 = 1, - /obj/item/implanter/death_alarm = 1 + /obj/item/clothing/shoes/magboots/advance = 1, + /obj/item/twohanded/dualsaber/red = 1, + /obj/item/storage/box/zipties = 1 ) - - implants = list(/obj/item/implant/mindshield) - - backpack = /obj/item/storage/backpack/satchel \ No newline at end of file + implants = list( + /obj/item/implant/mindshield, + /obj/item/implant/dust + ) + cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/xray, + /obj/item/organ/internal/cyberimp/brain/anti_drop, + /obj/item/organ/internal/cyberimp/brain/anti_stun, + /obj/item/organ/internal/cyberimp/chest/nutriment/plus + ) \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index e7ba9a94d91..fbe9e0db2a6 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -142,8 +142,6 @@ shoes = /obj/item/clothing/shoes/black pda = /obj/item/device/pda - var/list/implants = null - var/backpack = /obj/item/storage/backpack var/satchel = /obj/item/storage/backpack/satchel_norm var/dufflebag = /obj/item/storage/backpack/duffel @@ -210,11 +208,6 @@ imprint_pda(H) - if(implants) - for(var/implant_type in implants) - var/obj/item/implant/I = new implant_type(H) - I.implant(H) - if(gear_leftovers.len) for(var/datum/gear/G in gear_leftovers) var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.gear[G.display_name])) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index bf547881869..1b9deed332b 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -429,7 +429,7 @@ if(!use_cable(1)) return reset() var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") + NC.cable_color("red") NC.d1 = 0 NC.d2 = fdirn NC.updateicon() diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index ebbc3263b1b..c3c8c1f3407 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -9,6 +9,7 @@ name = "control wand" desc = "Remotely controls airlocks." w_class = WEIGHT_CLASS_TINY + flags = NOBLUDGEON var/mode = WAND_OPEN var/region_access = 1 //See access.dm var/obj/item/card/id/ID diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7109e018704..4dd6ca365bf 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -13,6 +13,7 @@ var/list/recipes = list() // /datum/stack_recipe var/singular_name var/amount = 1 + var/to_transfer = 0 var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount var/merge_type = null // This path and its children should merge with this stack, defaults to src.type @@ -231,6 +232,9 @@ /obj/item/stack/proc/get_max_amount() return max_amount +/obj/item/stack/proc/get_amount_transferred() + return to_transfer + /obj/item/stack/proc/split(mob/user, amt) var/obj/item/stack/F = new type(loc, amt) F.copy_evidences(src) @@ -257,7 +261,6 @@ if(S.amount >= max_amount) return 1 - var/to_transfer if(user.is_in_inactive_hand(src)) var/desired = input("How much would you like to transfer from this stack?", "How much?", 1) as null|num if(!desired) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 28d656860fe..5a099274915 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -108,6 +108,18 @@ color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) ..() +/obj/item/restraints/handcuffs/cable/proc/cable_color(var/colorC) + if(colorC) + if(colorC == "rainbow") + colorC = color_rainbow() + color = colorC + else + color = COLOR_RED + +/obj/item/restraints/handcuffs/cable/proc/color_rainbow() + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + return color + /obj/item/restraints/handcuffs/alien icon_state = "handcuffAlien" @@ -143,6 +155,9 @@ if(!remove_item_from_storage(user)) user.unEquip(src) qdel(src) + else if(istype(I, /obj/item/toy/crayon)) + var/obj/item/toy/crayon/C = I + cable_color(C.colourName) /obj/item/restraints/handcuffs/cable/zipties name = "zipties" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b7571e325f8..fe41ecadd4e 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -829,6 +829,26 @@ return return ..() + +/obj/item/storage/box/centcomofficer + name = "officer kit" + +/obj/item/storage/box/centcomofficer/New() + ..() + contents = list() + new /obj/item/clothing/mask/breath(src) + new /obj/item/tank/emergency_oxygen/double/full(src) + new /obj/item/device/flashlight/seclite(src) + new /obj/item/kitchen/knife/combat(src) + + new /obj/item/device/radio/centcom(src) + new /obj/item/door_remote/omni(src) + new /obj/item/implanter/death_alarm(src) + + new /obj/item/reagent_containers/hypospray/combat/nanites(src) + new /obj/item/pinpointer/advpinpointer(src) + + #undef NODESIGN #undef NANOTRASEN #undef SYNDI diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index e062c88482d..83f1126f78f 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -32,6 +32,7 @@ ********************/ /obj/machinery/kitchen_machine/New() + ..() create_reagents(100) reagents.set_reacting(FALSE) if(!available_recipes) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index d8f5b8486df..b2ab8b898c5 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -184,6 +184,10 @@ By design, d1 is the smallest direction and d2 is the highest shock(user, 5, 0.2) + else if(istype(W, /obj/item/toy/crayon)) + var/obj/item/toy/crayon/C = W + cable_color(C.colourName) + else if(W.flags & CONDUCT) shock(user, 50, 0.7) @@ -218,11 +222,18 @@ By design, d1 is the smallest direction and d2 is the highest qdel(src) // qdel return -obj/structure/cable/proc/cableColor(var/colorC) - var/color_n = "#DD0000" +obj/structure/cable/proc/cable_color(var/colorC) if(colorC) - color_n = colorC - color = color_n + if(colorC == "rainbow") + color = color_rainbow() + else + color = colorC + else + color = "#DD0000" + +/obj/structure/cable/proc/color_rainbow() + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + return color ///////////////////////////////////////////////// // Cable laying helpers @@ -588,30 +599,20 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( ..() if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W + // Cable merging is handled by parent proc if(C.amount >= MAXCOIL) - to_chat(user, "The coil is too long, you cannot add any more cable to it.") + to_chat(user, "The coil is as long as it will get.") return - if( (C.amount + src.amount <= MAXCOIL) ) to_chat(user, "You join the cable coils together.") - C.give(src.amount) // give it cable - src.use(src.amount) // make sure this one cleans up right return - else - var/amt = MAXCOIL - C.amount - to_chat(user, "You transfer [amt] length\s of cable from one coil to the other.") - C.give(amt) - src.use(amt) + to_chat(user, "You transfer [get_amount_transferred()] length\s of cable from one coil to the other.") return -//add cables to the stack -/obj/item/stack/cable_coil/proc/give(var/extra) - if(amount + extra > MAXCOIL) - amount = MAXCOIL - else - amount += extra - update_icon() + if(istype(W, /obj/item/toy/crayon)) + var/obj/item/toy/crayon/C = W + cable_color(C.colourName) /////////////////////////////////////////////// // Cable laying procedures @@ -619,7 +620,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( /obj/item/stack/cable_coil/proc/get_new_cable(location) var/obj/structure/cable/C = new(location) - C.cableColor(color) + C.cable_color(color) return C @@ -736,7 +737,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( return - C.cableColor(color) + C.cable_color(color) C.d1 = nd1 C.d2 = nd2 @@ -806,6 +807,18 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) ..() +/obj/item/stack/cable_coil/proc/cable_color(var/colorC) + if(colorC) + if(colorC == "rainbow") + colorC = color_rainbow() + color = colorC + else + color = COLOR_RED + +/obj/item/stack/cable_coil/proc/color_rainbow() + color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) + return color + /obj/item/stack/cable_coil/cyborg name = "cyborg cable coil" diff --git a/code/modules/power/cable_heavyduty.dm b/code/modules/power/cable_heavyduty.dm index d2a34400407..03b6aafed28 100644 --- a/code/modules/power/cable_heavyduty.dm +++ b/code/modules/power/cable_heavyduty.dm @@ -24,5 +24,5 @@ else ..() -/obj/structure/cable/heavyduty/cableColor(var/colorC) +/obj/structure/cable/heavyduty/cable_color(var/colorC) return \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 22d4e228e23..5340d13c3b2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,21 @@ -->
+

17 April 2018

+

Citinited updated:

+ +

MINIMAN10000 updated:

+ +

14 April 2018

Anticept updated: