diff --git a/baystation12.dme b/baystation12.dme index 9de1e153ca6..3945fe4883c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -6,12 +6,232 @@ // BEGIN_FILE_DIR #define FILE_DIR . #define FILE_DIR "code" +#define FILE_DIR "code/__HELPERS" +#define FILE_DIR "code/ATMOSPHERICS" +#define FILE_DIR "code/ATMOSPHERICS/components" +#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices" +#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices" +#define FILE_DIR "code/ATMOSPHERICS/components/unary" +#define FILE_DIR "code/controllers" +#define FILE_DIR "code/datums" +#define FILE_DIR "code/datums/diseases" +#define FILE_DIR "code/datums/diseases/advance" +#define FILE_DIR "code/datums/diseases/advance/symptoms" +#define FILE_DIR "code/datums/helper_datums" +#define FILE_DIR "code/datums/organs" +#define FILE_DIR "code/datums/spells" +#define FILE_DIR "code/defines" +#define FILE_DIR "code/defines/obj" +#define FILE_DIR "code/defines/obj/clothing" +#define FILE_DIR "code/defines/procs" +#define FILE_DIR "code/defines/sd_procs" +#define FILE_DIR "code/FEA" +#define FILE_DIR "code/game" +#define FILE_DIR "code/game/area" +#define FILE_DIR "code/game/events" +#define FILE_DIR "code/game/events/EventProcs" +#define FILE_DIR "code/game/events/Events" +#define FILE_DIR "code/game/gamemodes" +#define FILE_DIR "code/game/gamemodes/autotraitor" +#define FILE_DIR "code/game/gamemodes/blob" +#define FILE_DIR "code/game/gamemodes/blob/blobs" +#define FILE_DIR "code/game/gamemodes/changeling" +#define FILE_DIR "code/game/gamemodes/cult" +#define FILE_DIR "code/game/gamemodes/epidemic" +#define FILE_DIR "code/game/gamemodes/events" +#define FILE_DIR "code/game/gamemodes/events/holidays" +#define FILE_DIR "code/game/gamemodes/extended" +#define FILE_DIR "code/game/gamemodes/malfunction" +#define FILE_DIR "code/game/gamemodes/meme" +#define FILE_DIR "code/game/gamemodes/meteor" +#define FILE_DIR "code/game/gamemodes/nuclear" +#define FILE_DIR "code/game/gamemodes/revolution" +#define FILE_DIR "code/game/gamemodes/sandbox" +#define FILE_DIR "code/game/gamemodes/traitor" +#define FILE_DIR "code/game/gamemodes/wizard" +#define FILE_DIR "code/game/jobs" +#define FILE_DIR "code/game/jobs/job" +#define FILE_DIR "code/game/machinery" +#define FILE_DIR "code/game/machinery/atmoalter" +#define FILE_DIR "code/game/machinery/bots" +#define FILE_DIR "code/game/machinery/camera" +#define FILE_DIR "code/game/machinery/computer" +#define FILE_DIR "code/game/machinery/doors" +#define FILE_DIR "code/game/machinery/embedded_controller" +#define FILE_DIR "code/game/machinery/kitchen" +#define FILE_DIR "code/game/machinery/pipe" +#define FILE_DIR "code/game/machinery/telecomms" +#define FILE_DIR "code/game/magic" +#define FILE_DIR "code/game/mecha" +#define FILE_DIR "code/game/mecha/combat" +#define FILE_DIR "code/game/mecha/equipment" +#define FILE_DIR "code/game/mecha/equipment/tools" +#define FILE_DIR "code/game/mecha/equipment/weapons" +#define FILE_DIR "code/game/mecha/medical" +#define FILE_DIR "code/game/mecha/working" +#define FILE_DIR "code/game/objects" +#define FILE_DIR "code/game/objects/closets" +#define FILE_DIR "code/game/objects/closets/secure" +#define FILE_DIR "code/game/objects/effects" +#define FILE_DIR "code/game/objects/effects/decals" +#define FILE_DIR "code/game/objects/effects/decals/Cleanable" +#define FILE_DIR "code/game/objects/effects/spawners" +#define FILE_DIR "code/game/objects/items" +#define FILE_DIR "code/game/objects/items/devices" +#define FILE_DIR "code/game/objects/items/devices/PDA" +#define FILE_DIR "code/game/objects/items/devices/radio" +#define FILE_DIR "code/game/objects/items/robot" +#define FILE_DIR "code/game/objects/items/stacks" +#define FILE_DIR "code/game/objects/items/stacks/sheets" +#define FILE_DIR "code/game/objects/items/stacks/tiles" +#define FILE_DIR "code/game/objects/items/weapons" +#define FILE_DIR "code/game/objects/items/weapons/grenades" +#define FILE_DIR "code/game/objects/items/weapons/implants" +#define FILE_DIR "code/game/objects/items/weapons/secstorage" +#define FILE_DIR "code/game/objects/items/weapons/storage" +#define FILE_DIR "code/game/objects/items/weapons/tanks" +#define FILE_DIR "code/game/objects/storage" +#define FILE_DIR "code/game/objects/structures" +#define FILE_DIR "code/game/objects/structures/crates_lockers" +#define FILE_DIR "code/game/objects/structures/crates_lockers/closets" +#define FILE_DIR "code/game/objects/structures/crates_lockers/closets/secure" +#define FILE_DIR "code/game/objects/structures/stool_bed_chair_nest" +#define FILE_DIR "code/game/structure" +#define FILE_DIR "code/game/turfs" +#define FILE_DIR "code/game/turfs/simulated" +#define FILE_DIR "code/game/turfs/space" +#define FILE_DIR "code/game/turfs/unsimulated" +#define FILE_DIR "code/game/vehicles" +#define FILE_DIR "code/game/vehicles/airtight" +#define FILE_DIR "code/game/verbs" +#define FILE_DIR "code/js" +#define FILE_DIR "code/modules" +#define FILE_DIR "code/modules/admin" +#define FILE_DIR "code/modules/admin/DB ban" +#define FILE_DIR "code/modules/admin/permissionverbs" +#define FILE_DIR "code/modules/admin/verbs" +#define FILE_DIR "code/modules/assembly" +#define FILE_DIR "code/modules/awaymissions" +#define FILE_DIR "code/modules/awaymissions/maploader" +#define FILE_DIR "code/modules/chemical" +#define FILE_DIR "code/modules/client" +#define FILE_DIR "code/modules/clothing" +#define FILE_DIR "code/modules/clothing/glasses" +#define FILE_DIR "code/modules/clothing/gloves" +#define FILE_DIR "code/modules/clothing/head" +#define FILE_DIR "code/modules/clothing/masks" +#define FILE_DIR "code/modules/clothing/shoes" +#define FILE_DIR "code/modules/clothing/spacesuits" +#define FILE_DIR "code/modules/clothing/suits" +#define FILE_DIR "code/modules/clothing/under" +#define FILE_DIR "code/modules/clothing/under/jobs" +#define FILE_DIR "code/modules/clothing/uniforms" +#define FILE_DIR "code/modules/critters" +#define FILE_DIR "code/modules/critters/hivebots" +#define FILE_DIR "code/modules/customitems" +#define FILE_DIR "code/modules/DetectiveWork" +#define FILE_DIR "code/modules/flufftext" +#define FILE_DIR "code/modules/food" +#define FILE_DIR "code/modules/genetics" +#define FILE_DIR "code/modules/icon generation" +#define FILE_DIR "code/modules/library" +#define FILE_DIR "code/modules/liquid" +#define FILE_DIR "code/modules/maps" +#define FILE_DIR "code/modules/mining" +#define FILE_DIR "code/modules/mob" +#define FILE_DIR "code/modules/mob/dead" +#define FILE_DIR "code/modules/mob/dead/observer" +#define FILE_DIR "code/modules/mob/living" +#define FILE_DIR "code/modules/mob/living/blob" +#define FILE_DIR "code/modules/mob/living/carbon" +#define FILE_DIR "code/modules/mob/living/carbon/alien" +#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid" +#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste" +#define FILE_DIR "code/modules/mob/living/carbon/alien/larva" +#define FILE_DIR "code/modules/mob/living/carbon/alien/special" +#define FILE_DIR "code/modules/mob/living/carbon/amorph" +#define FILE_DIR "code/modules/mob/living/carbon/brain" +#define FILE_DIR "code/modules/mob/living/carbon/human" +#define FILE_DIR "code/modules/mob/living/carbon/metroid" +#define FILE_DIR "code/modules/mob/living/carbon/monkey" +#define FILE_DIR "code/modules/mob/living/parasite" +#define FILE_DIR "code/modules/mob/living/silicon" +#define FILE_DIR "code/modules/mob/living/silicon/ai" +#define FILE_DIR "code/modules/mob/living/silicon/ai/freelook" +#define FILE_DIR "code/modules/mob/living/silicon/decoy" +#define FILE_DIR "code/modules/mob/living/silicon/pai" +#define FILE_DIR "code/modules/mob/living/silicon/robot" +#define FILE_DIR "code/modules/mob/living/simple_animal" +#define FILE_DIR "code/modules/mob/living/simple_animal/friendly" +#define FILE_DIR "code/modules/mob/living/simple_animal/hostile" +#define FILE_DIR "code/modules/mob/new_player" +#define FILE_DIR "code/modules/mob/simple_animal" +#define FILE_DIR "code/modules/paperwork" +#define FILE_DIR "code/modules/power" +#define FILE_DIR "code/modules/power/antimatter" +#define FILE_DIR "code/modules/power/singularity" +#define FILE_DIR "code/modules/power/singularity/particle_accelerator" +#define FILE_DIR "code/modules/projectiles" +#define FILE_DIR "code/modules/projectiles/ammunition" +#define FILE_DIR "code/modules/projectiles/guns" +#define FILE_DIR "code/modules/projectiles/guns/energy" +#define FILE_DIR "code/modules/projectiles/guns/projectile" +#define FILE_DIR "code/modules/projectiles/projectile" +#define FILE_DIR "code/modules/reagents" +#define FILE_DIR "code/modules/reagents/reagent_containers" +#define FILE_DIR "code/modules/reagents/reagent_containers/food" +#define FILE_DIR "code/modules/reagents/reagent_containers/food/drinks" +#define FILE_DIR "code/modules/reagents/reagent_containers/food/drinks/bottle" +#define FILE_DIR "code/modules/reagents/reagent_containers/food/snacks" +#define FILE_DIR "code/modules/reagents/reagent_containers/glass" +#define FILE_DIR "code/modules/reagents/reagent_containers/glass/bottle" +#define FILE_DIR "code/modules/recycling" +#define FILE_DIR "code/modules/research" +#define FILE_DIR "code/modules/research/xenoarchaeology" +#define FILE_DIR "code/modules/scripting" +#define FILE_DIR "code/modules/scripting/AST" +#define FILE_DIR "code/modules/scripting/AST/Operators" +#define FILE_DIR "code/modules/scripting/Implementations" +#define FILE_DIR "code/modules/scripting/Interpreter" +#define FILE_DIR "code/modules/scripting/Parser" +#define FILE_DIR "code/modules/scripting/Scanner" +#define FILE_DIR "code/modules/security levels" #define FILE_DIR "code/TriDimension" +#define FILE_DIR "code/unused" +#define FILE_DIR "code/unused/beast" +#define FILE_DIR "code/unused/computer2" +#define FILE_DIR "code/unused/disease2" +#define FILE_DIR "code/unused/gamemodes" +#define FILE_DIR "code/unused/hivebot" +#define FILE_DIR "code/unused/mining" +#define FILE_DIR "code/unused/optics" +#define FILE_DIR "code/unused/pda2" +#define FILE_DIR "code/unused/powerarmor" +#define FILE_DIR "code/unused/spacecraft" #define FILE_DIR "code/WorkInProgress" +#define FILE_DIR "code/WorkInProgress/AI_Visibility" +#define FILE_DIR "code/WorkInProgress/animusstation" +#define FILE_DIR "code/WorkInProgress/Apples" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" +#define FILE_DIR "code/WorkInProgress/carn" +#define FILE_DIR "code/WorkInProgress/Chinsky" +#define FILE_DIR "code/WorkInProgress/mapload" +#define FILE_DIR "code/WorkInProgress/Mini" +#define FILE_DIR "code/WorkInProgress/Mloc" +#define FILE_DIR "code/WorkInProgress/organs" +#define FILE_DIR "code/WorkInProgress/Ported" +#define FILE_DIR "code/WorkInProgress/Ported/Abi79" +#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy" +#define FILE_DIR "code/WorkInProgress/Ported/Spawners" +#define FILE_DIR "code/WorkInProgress/SkyMarshal" #define FILE_DIR "code/WorkInProgress/Susan" +#define FILE_DIR "code/WorkInProgress/Tastyfish" +#define FILE_DIR "code/WorkInProgress/virus2" +#define FILE_DIR "code/WorkInProgress/virus2/Disease2" +#define FILE_DIR "code/WorkInProgress/Wrongnumber" +#define FILE_DIR "code/ZAS" #define FILE_DIR "html" #define FILE_DIR "icons" #define FILE_DIR "icons/48x48" @@ -33,7 +253,9 @@ #define FILE_DIR "icons/turf" #define FILE_DIR "icons/vehicles" #define FILE_DIR "icons/vending_icons" +#define FILE_DIR "interface" #define FILE_DIR "maps" +#define FILE_DIR "maps/RandomZLevels" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" #define FILE_DIR "sound/ambience" @@ -49,6 +271,8 @@ #define FILE_DIR "sound/violin" #define FILE_DIR "sound/voice" #define FILE_DIR "sound/weapons" +#define FILE_DIR "tools" +#define FILE_DIR "tools/Redirector" // END_FILE_DIR // BEGIN_PREFERENCES @@ -864,6 +1088,7 @@ #include "code\modules\mob\living\carbon\brain\hud.dm" #include "code\modules\mob\living\carbon\brain\life.dm" #include "code\modules\mob\living\carbon\brain\MMI.dm" +#include "code\modules\mob\living\carbon\brain\posibrain.dm" #include "code\modules\mob\living\carbon\brain\say.dm" #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\emote.dm" diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index 61cd0f6c6e7..5683df4bf71 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -395,7 +395,7 @@ obj/machinery/atmospherics/tvalve/mirrored return ..() - //Radio remote control + //Radio remote control -eh? proc set_frequency(new_frequency) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index cbff1f1b643..e13a58f6018 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -721,7 +721,7 @@ obj/machinery/atmospherics/pipe icon_state = "manifold_[connected]_[unconnected]" - if(!connected) + if(!connected) del(src) return @@ -832,7 +832,7 @@ obj/machinery/atmospherics/pipe icon_state = "manifold-y-f" manifold4w - icon = 'pipe_manifold.dmi' + icon = 'icons/obj/atmospherics/pipe_manifold.dmi' icon_state = "manifold4w-f" name = "4-way pipe manifold" @@ -841,7 +841,7 @@ obj/machinery/atmospherics/pipe volume = 140 dir = SOUTH - initialize_directions = EAST|NORTH|WEST|SOUTH + initialize_directions = NORTH|SOUTH|EAST|WEST var/obj/machinery/atmospherics/node1 var/obj/machinery/atmospherics/node2 @@ -849,6 +849,7 @@ obj/machinery/atmospherics/pipe var/obj/machinery/atmospherics/node4 level = 1 + layer = 2.4 //under wires with their 2.44 hide(var/i) if(level == 1 && istype(loc, /turf/simulated)) @@ -862,7 +863,7 @@ obj/machinery/atmospherics/pipe if(!parent) ..() else - machines.Remove(src) + . = PROCESS_KILL /* if(!node1) parent.mingle_with_turf(loc, 70) @@ -913,14 +914,13 @@ obj/machinery/atmospherics/pipe if(reference == node4) if(istype(node4, /obj/machinery/atmospherics/pipe)) del(parent) - node3 = null + node4 = null update_icon() ..() update_icon() - overlays = new() if(node1&&node2&&node3&&node4) var/C = "" switch(color) @@ -934,7 +934,7 @@ obj/machinery/atmospherics/pipe else icon_state = "manifold4w_ex" - var/icon/con = new/icon('pipe_manifold.dmi',"manifold4w_con") + var/icon/con = new/icon('pipe_manifold.dmi',"manifold4w_con") //Since 4-ways are supposed to be directionless, they need an overlay instead it seems. if(node1) overlays += new/image(con,dir=1) @@ -950,23 +950,24 @@ obj/machinery/atmospherics/pipe return initialize() + for(var/obj/machinery/atmospherics/target in get_step(src,1)) - if(target.initialize_directions & get_dir(target,src)) + if(target.initialize_directions & 2) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,2)) - if(target.initialize_directions & get_dir(target,src)) + if(target.initialize_directions & 1) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,4)) - if(target.initialize_directions & get_dir(target,src)) + if(target.initialize_directions & 8) node3 = target break for(var/obj/machinery/atmospherics/target in get_step(src,8)) - if(target.initialize_directions & get_dir(target,src)) + if(target.initialize_directions & 4) node4 = target break @@ -1026,6 +1027,88 @@ obj/machinery/atmospherics/pipe manifold4w/general/hidden level = 1 icon_state = "manifold4w-f" + + cap + name = "pipe endcap" + desc = "An endcap for pipes" + icon = 'pipes.dmi' + icon_state = "cap" + level = 2 + layer = 2.4 //under wires with their 2.44 + + volume = 35 + + dir = SOUTH + initialize_directions = NORTH + + var/obj/machinery/atmospherics/node + + New() + ..() + switch(dir) + if(SOUTH) + initialize_directions = NORTH + if(NORTH) + initialize_directions = SOUTH + if(WEST) + initialize_directions = EAST + if(EAST) + initialize_directions = WEST + + hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + + pipeline_expansion() + return list(node) + + process() + if(!parent) + ..() + else + . = PROCESS_KILL + Del() + if(node) + node.disconnect(src) + + ..() + + disconnect(obj/machinery/atmospherics/reference) + if(reference == node) + if(istype(node, /obj/machinery/atmospherics/pipe)) + del(parent) + node = null + + update_icon() + + ..() + + update_icon() + overlays = new() + + icon_state = "cap[invisibility ? "-f" : ""]" + return + + initialize() + for(var/obj/machinery/atmospherics/target in get_step(src, dir)) + if(target.initialize_directions & get_dir(target,src)) + node = target + break + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + //update_icon() + update_icon() + + visible + level = 2 + icon_state = "cap" + + hidden + level = 1 + icon_state = "cap-f" + obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(src, /obj/machinery/atmospherics/pipe/tank)) diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm index 404afdbb859..f07cf4b1f05 100644 --- a/code/WorkInProgress/surgery.dm +++ b/code/WorkInProgress/surgery.dm @@ -39,6 +39,16 @@ // evil infection stuff that will make everyone hate me var/can_infect = 0 + proc/isright(obj/item/tool) //is it is a required surgical tool for this step + return (istype(tool,required_tool)) + + proc/isacceptable(obj/item/tool) //is it is an accepted replacement tool for this step + if (allowed_tools) + for (var/T in allowed_tools) + if (istype(tool,T)) + return 1 + return 0 + // Build this list by iterating over all typesof(/datum/surgery_step) and sorting the results by priority @@ -1226,3 +1236,68 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user) user:bloody_hands(target, 0) user:bloody_body(target) +////////////////////////////////////////////////////////////////// +// IMPLANT REMOVAL SURGERY // +////////////////////////////////////////////////////////////////// + +/datum/surgery_step/implant_removal + required_tool = /obj/item/weapon/hemostat + allowed_tools = list(/obj/item/weapon/wirecutters, /obj/item/weapon/kitchen/utensil/fork) + + min_duration = 80 + max_duration = 100 + + can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + return affected.open == 2 && !(affected.status & ORGAN_BLEEDING) + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts poking around inside the incision on [target]'s [affected.display_name] with \the [tool].", \ + "You start poking around inside the incision on [target]'s [affected.display_name] with \the [tool]" ) + target.custom_pain("The pain in your chest is living hell!",1) + + end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/chest/affected = target.get_organ("chest") + + var/find_prob = 0 + if (affected.implants.len) + var/obj/item/weapon/implant/imp = affected.implants[1] + if (imp.islegal()) + find_prob +=60 + else + find_prob +=40 + if (isright(tool)) + find_prob +=20 + + if (prob(find_prob)) + user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \ + "\blue You take something out of incision on [target]'s [affected.display_name]s with \the [tool]." ) + var/obj/item/weapon/implant/imp = affected.implants[1] + affected.implants -= imp + imp.loc = get_turf(target) + imp.imp_in = null + imp.implanted = 0 + else + user.visible_message("\blue [user] could not find anything inside [target]'s [affected.display_name], and pulls \the [tool] out.", \ + "\blue You could not find anything inside [target]'s [affected.display_name]." ) + if (ishuman(user) && prob(80)) user:bloody_hands(target, 0) + + fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/chest/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, scraping tissue inside [target]'s [affected.display_name] with \the [tool]!", \ + "\red Your hand slips, scraping tissue inside [target]'s [affected.display_name] with \the [tool]!") + affected.createwound(CUT, 20) + if (affected.implants.len) + var/fail_prob = 10 + if (!isright(tool)) + fail_prob += 30 + if (prob(fail_prob)) + var/obj/item/weapon/implant/imp = affected.implants[1] + user.visible_message("\red Something beeps inside [target]'s [affected.display_name]!") + playsound(imp.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + spawn(15) + imp.activate() + if (ishuman(user)) + user:bloody_hands(target, 0) + user:bloody_body(target) \ No newline at end of file diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm index 06f46ed1927..167cbe6f0b1 100644 --- a/code/datums/organs/organ_external.dm +++ b/code/datums/organs/organ_external.dm @@ -34,6 +34,7 @@ var/open = 0 var/stage = 0 + var/list/implants = list() // INTERNAL germs inside the organ, this is BAD if it's greater 0 var/germ_level = 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 74113ce65c8..638cecdb566 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -62,6 +62,8 @@ Devices and Tools; Whitespace:Seperator; Implants; /obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant; +/obj/item/weapon/implant/explosive:6:Explosive Implant (DANGER!); +/obj/item/weapon/implant/compressed:4:Compressed Matter Implant; /obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); Whitespace:Seperator; (Pointless) Badassery; @@ -419,4 +421,4 @@ proc/display_roundstart_logout_report() for(var/mob/M in mob_list) if(M.client && M.client.holder) - M << msg + M << msg diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 3bb0f83bad9..ef556cbc701 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -296,7 +296,7 @@ AN = "[e.broken_description]:" if(e.open) open = "Open:" - if(e.implant) + if(e.implants.len) imp = "Implanted:" if(!AN && !open && !infected & !imp) AN = "None:" diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index a8488e8c2d5..1babba054e6 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -20,6 +20,9 @@ Buildable meters #define PIPE_PASSIVE_GATE 15 #define PIPE_VOLUME_PUMP 16 #define PIPE_HEAT_EXCHANGE 17 +#define PIPE_MTVALVE 18 +#define PIPE_MANIFOLD4W 19 +#define PIPE_CAP 20 /obj/item/pipe name = "pipe" @@ -75,6 +78,12 @@ Buildable meters src.pipe_type = PIPE_VOLUME_PUMP else if(istype(make_from, /obj/machinery/atmospherics/unary/heat_exchanger)) src.pipe_type = PIPE_HEAT_EXCHANGE + else if(istype(make_from, /obj/machinery/atmospherics/tvalve)) + src.pipe_type = PIPE_MTVALVE + else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w)) + src.pipe_type = PIPE_MANIFOLD4W + else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap)) + src.pipe_type = PIPE_CAP else src.pipe_type = pipe_type src.dir = dir @@ -105,6 +114,9 @@ Buildable meters "passive gate", \ "volume pump", \ "heat exchanger", \ + "t-valve", \ + "4-way manifold", \ + "pipe cap", \ ) name = nlist[pipe_type+1] + " fitting" var/list/islist = list( \ @@ -126,6 +138,9 @@ Buildable meters "passivegate", \ "volumepump", \ "heunary", \ + "mtvalve", \ + "manifold4w", \ + "cap", \ ) icon_state = islist[pipe_type + 1] @@ -149,6 +164,8 @@ Buildable meters dir = 1 else if(dir==8) dir = 4 + else if (pipe_type == PIPE_MANIFOLD4W) + dir = 2 //src.pipe_dir = get_pipe_dir() return @@ -188,10 +205,14 @@ Buildable meters return dir //dir|acw if(PIPE_CONNECTOR,PIPE_UVENT,PIPE_SCRUBBER,PIPE_HEAT_EXCHANGE) return dir + if(PIPE_MANIFOLD4W) + return dir|flip|cw|acw if(PIPE_MANIFOLD) return flip|cw|acw - if(PIPE_GAS_FILTER, PIPE_GAS_MIXER) + if(PIPE_GAS_FILTER, PIPE_GAS_MIXER,PIPE_MTVALVE) return dir|flip|cw + if(PIPE_CAP) + return flip return 0 /obj/item/pipe/proc/get_pdir() //endpoints for regular pipes @@ -241,6 +262,8 @@ Buildable meters dir = 1 else if(dir==8) dir = 4 + else if (pipe_type == PIPE_MANIFOLD4W) + dir = 2 var/pipe_dir = get_pipe_dir() for(var/obj/machinery/atmospherics/M in src.loc) @@ -325,6 +348,31 @@ Buildable meters if (M.node3) M.node3.initialize() M.node3.build_network() + + if(PIPE_MANIFOLD4W) //4-way manifold + var/obj/machinery/atmospherics/pipe/manifold4w/M = new( src.loc ) + M.dir = dir + M.initialize_directions = pipe_dir + //M.New() + var/turf/T = M.loc + M.level = T.intact ? 2 : 1 + M.initialize() + if (!M) + usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" + return 1 + M.build_network() + if (M.node1) + M.node1.initialize() + M.node1.build_network() + if (M.node2) + M.node2.initialize() + M.node2.build_network() + if (M.node3) + M.node3.initialize() + M.node3.build_network() + if (M.node4) + M.node4.initialize() + M.node4.build_network() if(PIPE_JUNCTION) var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/P = new ( src.loc ) @@ -467,6 +515,36 @@ Buildable meters if (P.node2) P.node2.initialize() P.node2.build_network() + + if(PIPE_MTVALVE) //manual t-valve + var/obj/machinery/atmospherics/tvalve/V = new(src.loc) + V.dir = dir + V.initialize_directions = pipe_dir + if (pipename) + V.name = pipename + var/turf/T = V.loc + V.level = T.intact ? 2 : 1 + V.initialize() + V.build_network() + if (V.node1) + V.node1.initialize() + V.node1.build_network() + if (V.node2) + V.node2.initialize() + V.node2.build_network() + if (V.node3) + V.node3.initialize() + V.node3.build_network() + + if(PIPE_CAP) + var/obj/machinery/atmospherics/pipe/cap/C = new(src.loc) + C.dir = dir + C.initialize_directions = pipe_dir + C.initialize() + C.build_network() + if(C.node) + C.node.initialize() + C.node.build_network() if(PIPE_PASSIVE_GATE) //passive gate var/obj/machinery/atmospherics/binary/passive_gate/P = new(src.loc) @@ -551,7 +629,7 @@ Buildable meters playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user << "\blue You have fastened the meter to the pipe" del(src) - +//not sure why these are necessary #undef PIPE_SIMPLE_STRAIGHT #undef PIPE_SIMPLE_BENT #undef PIPE_HE_STRAIGHT @@ -569,4 +647,6 @@ Buildable meters #undef PIPE_GAS_MIXER #undef PIPE_PASSIVE_GATE #undef PIPE_VOLUME_PUMP -#undef PIPE_OUTLET_INJECT \ No newline at end of file +#undef PIPE_OUTLET_INJECT +#undef PIPE_MTVALVE +//#undef PIPE_MANIFOLD4W \ No newline at end of file diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index d5da74c5696..87001bcf473 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -19,6 +19,9 @@ Bent Pipe
Manifold
Manual Valve
+Pipe Cap
+4-Way Manifold
+Manual T-Valve
Devices:
Connector
Unary Vent
@@ -37,8 +40,9 @@ Insulated pipes:
Pipe
Bent Pipe
-"} +"} +//What number the make points to is in the define # at the top of construction.dm in same folder user << browse("[src][dat]", "window=pipedispenser") onclose(user, "pipedispenser") diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f3e14d0b291..acf60d5dd3c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1153,7 +1153,7 @@ src.occupant.client.perspective = MOB_PERSPECTIVE */ src.occupant << browse(null, "window=exosuit") - if(istype(mob_container, /obj/item/device/mmi)) + if(istype(mob_container, /obj/item/device/mmi) || istype(mob_container, /obj/item/device/posibrain)) var/obj/item/device/mmi/mmi = mob_container if(mmi.brainmob) occupant.loc = mmi diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b6c7cf8da8f..b2c9caaa15c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -186,26 +186,21 @@ if (!istype(M)) // not sure if this is the right thing... return + if (can_operate(M)) //Checks if mob is lying down on table for surgery if(istype(M,/mob/living/carbon)) - if (user.a_intent != "harm") + if (user.a_intent != "harm") //check for Hippocratic Oath if(surgery_steps.len == 0) build_surgery_steps_list() for(var/datum/surgery_step/S in surgery_steps) - //check if tool is right or close enough - var/right = istype(src, S.required_tool) - if (!right && S.allowed_tools) - for (var/T in S.allowed_tools) - if (istype(src, T)) - right = 1 - if(right && S.can_use(user, M, user.zone_sel.selecting, src)) //is this step possible? - S.begin_step(user, M, user.zone_sel.selecting, src) - if(do_mob(user, M, rand(S.min_duration, S.max_duration))) - S.end_step(user, M, user.zone_sel.selecting, src) - else - S.fail_step(user, M, user.zone_sel.selecting, src) - return //don't want to do weapony things after surgery - if (is_surgery_tool(src)) - return + if( S.isright(src) || S.isacceptable(src) ) //check if tool is right or close enough + if(S.can_use(user, M, user.zone_sel.selecting, src)) //and if this step is possible + S.begin_step(user, M, user.zone_sel.selecting, src) //start on it + if(do_mob(user, M, rand(S.min_duration, S.max_duration))) //if user did nto move or changed hands + S.end_step(user, M, user.zone_sel.selecting, src) //finish successfully + else //or + S.fail_step(user, M, user.zone_sel.selecting, src) //malpractice~ + return //don't want to do weapony things after surgery + var/messagesource = M diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 189aad862a7..b9dc3170434 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -198,6 +198,7 @@ user.drop_item() + O.mmi = W O.invisibility = 0 O.custom_name = created_name O.updatename("Default") @@ -212,7 +213,6 @@ O.cell = chest.cell O.cell.loc = O W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame. - O.mmi = W feedback_inc("cyborg_birth",1) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 0ef3fa6bf1d..9f31412710b 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -1,7 +1,10 @@ /obj/item/weapon/implant name = "implant" + icon = 'device.dmi' + icon_state = "implant" var/implanted = null var/mob/imp_in = null + var/datum/organ/external/part = null color = "b" var/allow_reagents = 0 @@ -23,8 +26,8 @@ proc/hear(message, source as mob) return - - + proc/islegal() + return 0 /obj/item/weapon/implant/tracking name = "tracking" @@ -82,6 +85,8 @@ Implant Specifics:
"} if(src.imp_in) src.imp_in.gib() + islegal() + return 0 //BS12 Explosive /obj/item/weapon/implant/explosive name = "explosive implant" @@ -110,15 +115,18 @@ Implant Specifics:
"} var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") msg = sanitize_simple(msg, replacechars) if(findtext(msg,phrase)) - if(istype(imp_in, /mob/)) - var/mob/T = imp_in - T.gib() - explosion(get_turf(imp_in), 1, 3, 4, 6, 3) - var/turf/t = get_turf(imp_in) - if(t) - t.hotspot_expose(3500,125) + activate() del(src) + activate() + if(istype(imp_in, /mob/)) + var/mob/T = imp_in + T.gib() + explosion(get_turf(imp_in), 1, 3, 4, 6, 3) + var/turf/t = get_turf(imp_in) + if(t) + t.hotspot_expose(3500,125) + implanted(mob/source as mob) phrase = input("Choose activation phrase:") as text var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "") @@ -127,6 +135,8 @@ Implant Specifics:
"} usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate." return 1 + islegal() + return 0 /obj/item/weapon/implant/chem name = "chem" @@ -266,14 +276,16 @@ the implant may become unstable and either pre-maturely inject the subject or si process() if (!implanted) return var/mob/M = imp_in - var/area/t = get_area(M) if(isnull(M)) // If the mob got gibbed - var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) - a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") - del(a) - processing_objects.Remove(src) + activate() else if(M.stat == 2) + activate("death") + + activate(var/cause) + var/mob/M = imp_in + var/area/t = get_area(M) + if(cause == "death") var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) //give the syndies a bit of stealth @@ -282,7 +294,11 @@ the implant may become unstable and either pre-maturely inject the subject or si a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm") del(a) processing_objects.Remove(src) - + else + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null) + a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm") + del(a) + processing_objects.Remove(src) implanted(mob/source as mob) mobname = source.real_name @@ -314,13 +330,20 @@ the implant may become unstable and either pre-maturely inject the subject or si if (emote == src.activation_emote) source << "The air glows as \the [src.scanned.name] uncompresses." - var/turf/t = get_turf(source) - src.scanned.loc = t - del src + activate() + + activate() + var/turf/t = get_turf(src) + src.scanned.loc = t + if (part) part.implants -= src + del src implanted(mob/source as mob) src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + if (source.mind) + source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." return 1 + islegal() + return 0 diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 9cf12fe2478..ae21beff2d4 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -40,6 +40,11 @@ src.imp.loc = M src.imp.imp_in = M src.imp.implanted = 1 + if (ishuman(M)) + var/mob/living/carbon/human/H = M + var/datum/organ/external/affected = H.get_organ(user.zone_sel.selecting) + affected.implants += src.imp + imp.part = affected src.imp = null update() @@ -107,6 +112,10 @@ /obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob) if(istype(A,/obj/item) && imp) + var/obj/item/weapon/implant/compressed/c = imp + if (c.scanned) + user << "\red Something is already scanned inside the implant!" + return imp:scanned = A A.loc.contents.Remove(A) update() diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index f574f65ffe1..a3b9673c2b6 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -53,7 +53,7 @@ if(holder.rights & R_ADMIN) C << "OOC: [key][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]" //todo: other adminranks OOC - if(holder.rights & R_MOD) + else if(holder.rights & R_MOD) C << "OOC: [key][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]" else diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index bff5a6e192f..edd6a239333 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -57,14 +57,19 @@ src.brainmob.real_name = "PBU-[rand(100, 999)]" src.brainmob.loc = src src.brainmob.container = src + src.brainmob.robot_talk_understand = 1 src.brainmob.stat = 0 src.brainmob.silent = 0 src.brainmob.brain_op_stage = 4.0 src.brainmob.key = candidate.key - dead_mob_list -= src.brainmob living_mob_list += src.brainmob + src.brainmob << "You are a positronic brain, brought into existence on [station_name()]." + src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." + src.brainmob << "Use say :b to speak to other artificial intelligences on the station." + src.brainmob.mind.assigned_role = "Positronic Brain" + var/turf/T = get_turf_or_move(src.loc) for (var/mob/M in viewers(T)) M.show_message("\blue The positronic brain chimes quietly.") @@ -99,7 +104,6 @@ if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk if(UNCONSCIOUS) msg += "It doesn't seem to be responsive.\n" if(DEAD) msg += "It appears to be completely inactive.\n" - else msg += "*---------*" usr << msg return diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index c4d9a865da2..de169087b44 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -5,6 +5,11 @@ if(!(container && (istype(container, /obj/item/device/mmi) || istype(container, /obj/item/device/posibrain)))) return //No MMI, can't speak, bucko./N else + if ((copytext(message, 1, 3) == ":b") || (copytext(message, 1, 3) == ":B") && (container && istype(container, /obj/item/device/posibrain))) + message = copytext(message, 3) + message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) + robot_talk(message) + return if(prob(emp_damage*4)) if(prob(10))//10% chane to drop the message entirely return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 07660d1b1cb..0a7aa0874cb 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -53,7 +53,7 @@ var/lockcharge //Used when locking down a borg to preserve cell charge var/speed = 0 //Cause sec borgs gotta go fast //No they dont! var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. - + var/braintype = "Cyborg" /mob/living/silicon/robot/New(loc,var/syndie = 0) spark_system = new /datum/effect/effect/system/spark_spread() @@ -195,11 +195,16 @@ /mob/living/silicon/robot/proc/updatename(var/prefix as text) + if(istype(mmi, /obj/item/device/posibrain)) + braintype = "Android" + else + braintype = "Cyborg" + var/changed_name = "" if(custom_name) changed_name = custom_name else - changed_name = "[(prefix ? "[prefix] " : "")]Cyborg-[num2text(ident)]" + changed_name = "[(prefix ? "[prefix] " : "")][braintype]-[num2text(ident)]" real_name = changed_name name = real_name diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 8cd28f8c536..69aebdda8d3 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -587,6 +587,16 @@ datum/design/paicard materials = list("$glass" = 500, "$metal" = 500) build_path = "/obj/item/device/paicard" +datum/design/paicard + name = "Positronic Brain" + desc = "Allows for the construction of a positronic brain" + id = "posibrain" + req_tech = list("engineering" = 4, "materials" = 4, "bluespace" = 2, "programming" = 6) + + build_type = PROTOLATHE + materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$plasma" = 500, "$diamond" = 100) + build_path = "/obj/item/device/posibrain" + /////////////////////////////////// //////////Mecha Module Disks/////// /////////////////////////////////// diff --git a/html/changelog.html b/html/changelog.html index dd89066edf0..f66ed3084bd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -58,7 +58,24 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> - +
+

7/01/2013

+

Chinsky updated:

+ +

December 28nd

Cael_Aislinn updated:

diff --git a/icons/obj/atmospherics/pipe_manifold.dmi b/icons/obj/atmospherics/pipe_manifold.dmi index f98f5869a44..0687e9e8bc4 100644 Binary files a/icons/obj/atmospherics/pipe_manifold.dmi and b/icons/obj/atmospherics/pipe_manifold.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index e57a75e0525..4831ad2ebf7 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi index 00c5760e016..7aad691051a 100644 Binary files a/icons/obj/pipe-item.dmi and b/icons/obj/pipe-item.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 2f0f7659d3a..63a6279649e 100755 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/maps/RandomZLevels/stationCollision.dmm b/maps/RandomZLevels/stationCollision.dmm index f75de10066b..965111792a9 100644 --- a/maps/RandomZLevels/stationCollision.dmm +++ b/maps/RandomZLevels/stationCollision.dmm @@ -133,7 +133,7 @@ "cC" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "cD" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "cE" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) -"cF" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/suit/labcoat,/obj/item/weapon/clipboard{pixel_x = -7; pixel_y = -4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) +"cF" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/suit/storage/labcoat,/obj/item/weapon/clipboard{pixel_x = -7; pixel_y = -4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "cG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "cH" = (/obj/effect/rune,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "cI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) @@ -168,7 +168,7 @@ "dl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/research) "dm" = (/obj/machinery/door/window/westright{name = "Windoor"},/obj/machinery/door/window/eastright{name = "Windoor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "dn" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) -"do" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) +"do" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/storage/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "dp" = (/obj/machinery/door/airlock/hatch{name = "High-Security Airlock"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "dq" = (/obj/machinery/singularity/narsie/sc_Narsie{pixel_x = -48; pixel_y = -51},/turf/space,/area/awaymission/research) "dr" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/northblock) @@ -179,10 +179,10 @@ "dw" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_y = -10; tag = "icon-shower (EAST)"},/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor,/area/awaymission/research) "dx" = (/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/research) "dy" = (/obj/structure/window/reinforced,/obj/structure/cable,/obj/machinery/power/apc{cell_type = 7500; dir = 8; name = "Research APC"; pixel_x = -28},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) -"dz" = (/obj/machinery/door/window/southright{name = "Windoor"},/obj/effect/decal/remains/human,/obj/item/clothing/suit/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) +"dz" = (/obj/machinery/door/window/southright{name = "Windoor"},/obj/effect/decal/remains/human,/obj/item/clothing/suit/storage/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "dA" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "dB" = (/obj/machinery/door/window/southright{name = "Windoor"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) -"dC" = (/obj/structure/window/reinforced,/obj/effect/decal/remains/human,/obj/item/clothing/suit/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) +"dC" = (/obj/structure/window/reinforced,/obj/effect/decal/remains/human,/obj/item/clothing/suit/storage/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "dD" = (/obj/machinery/light{dir = 4},/obj/structure/window/reinforced,/obj/effect/sign/securearea{pixel_x = 32},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/swat,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser/practice/sc_laser,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "dE" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) "dF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research) @@ -246,7 +246,7 @@ "eL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "eM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "eN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/book/manual/research_and_development,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) -"eO" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/remains/human,/obj/item/clothing/suit/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) +"eO" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/remains/human,/obj/item/clothing/suit/storage/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "eP" = (/obj/machinery/door/window/eastleft{name = "Windoor"},/obj/machinery/door/window/westleft{name = "Windoor"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "eQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) "eR" = (/obj/machinery/r_n_d/server{stat = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research) @@ -613,7 +613,7 @@ "lO" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor,/area/awaymission/arrivalblock) "lP" = (/obj/structure/table,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor,/area/awaymission/arrivalblock) "lQ" = (/obj/machinery/light,/turf/simulated/floor,/area/awaymission/arrivalblock) -"lR" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/surgical,/obj/item/clothing/suit/labcoat,/obj/item/clothing/gloves/latex,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock) +"lR" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/surgical,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/gloves/latex,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock) "lS" = (/obj/machinery/door/window/westright{name = "Windoor"},/turf/simulated/floor,/area/awaymission/southblock) "lT" = (/obj/machinery/vending/wallmed1{pixel_x = 31},/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/southblock) "lU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/awaymission/southblock) diff --git a/maps/RandomZLevels/zresearchlabs.dmm b/maps/RandomZLevels/zresearchlabs.dmm index 19f2de1a07a..a4310ae7bf0 100644 --- a/maps/RandomZLevels/zresearchlabs.dmm +++ b/maps/RandomZLevels/zresearchlabs.dmm @@ -907,7 +907,7 @@ "rw" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian) "rx" = (/obj/effect/decal/cleanable/blood,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian) "ry" = (/obj/structure/table,/obj/structure/bedsheetbin{pixel_x = -2; pixel_y = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian) -"rz" = (/obj/structure/table,/obj/item/clothing/suit/labcoat{pixel_y = 3},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian) +"rz" = (/obj/structure/table,/obj/item/clothing/suit/storage/labcoat{pixel_y = 3},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian) "rA" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/labs/civilian) "rB" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/labs/civilian) "rC" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/labs/civilian)