From 0aa11e69fedbd3a575055f931b15df2c1eb04d42 Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Wed, 12 Jan 2011 06:56:00 +0000 Subject: [PATCH] Pipes bugfix: - trowing pipes correctly rotates them; - meters unwrenching; - pipe dispenser can be unwrenched and pulled, wrench back to use; - unused pipes can be returned to dispenser; - Probably fixed bug with non-working connectors; Windows now are always shown above grilles. Pipes now are always shown above lattice. Some other things. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@830 316c924e-a436-60f5-8080-3fe189b3f50e --- .../components/binary_devices/pump.dm | 2 +- .../components/portables_connector.dm | 4 +- .../components/unary/vent_pump.dm | 2 +- .../components/unary/vent_scrubber.dm | 2 +- code/ATMOSPHERICS/components/valve.dm | 15 ++- code/ATMOSPHERICS/pipes.dm | 106 +++++++++--------- code/defines/obj.dm | 3 +- code/game/machinery/atmoalter/meter.dm | 13 +++ .../atmoalter/portable_atmospherics.dm | 1 + code/game/machinery/pipe/construction.dm | 96 ++++++++-------- code/game/machinery/pipe/pipe_dispenser.dm | 50 +++++++-- code/game/machinery/singularity.dm | 3 + code/game/objects/items/blueprints.dm | 9 +- icons/obj/pipes.dmi | Bin 80851 -> 80811 bytes icons/obj/pipes/heat.dmi | Bin 1568 -> 4949 bytes icons/obj/pipes/junction.dmi | Bin 833 -> 2847 bytes 16 files changed, 190 insertions(+), 116 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 96e0e970364..00fcc471504 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -196,5 +196,5 @@ obj/machinery/atmospherics/binary/pump "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 7065b256053..cda8f1e6be6 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -134,6 +134,8 @@ if (connected_device) user << "\red You cannot unwrench this [src], dettach [connected_device] first." return 1 + if (locate(/obj/machinery/portable_atmospherics, src.loc)) + return 1 var/turf/T = src.loc if (level==1 && isturf(T) && T.intact) user << "\red You must remove the plating first." @@ -151,5 +153,5 @@ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index b7501df5efc..a486657a21a 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -274,5 +274,5 @@ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index cc35c9ded67..bbe7de4fe7d 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -213,5 +213,5 @@ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 2769ef46791..b43bb59c0d2 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -131,7 +131,7 @@ obj/machinery/atmospherics/valve initialize() if(node1 && node2) return - var/connect_directions +/* var/connect_directions switch(dir) if(NORTH) @@ -162,7 +162,16 @@ obj/machinery/atmospherics/valve node2 = target break if(node1) - break + break*/ + for(var/obj/machinery/atmospherics/target in get_step(src,dir)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,turn(dir,180))) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break build_network() if(!network_node1 && node1) @@ -283,5 +292,5 @@ obj/machinery/atmospherics/valve "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 5c0d3e6dcc0..c1f2a56ea12 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -155,6 +155,9 @@ obj/machinery/atmospherics/pipe proc/burst() src.visible_message("\red \bold [src] bursts!"); playsound(src.loc, 'bang.ogg', 25, 1) + var/datum/effects/system/harmless_smoke_spread/smoke = new + smoke.set_up(1,0, src.loc, 0) + smoke.start() del(src) Del() @@ -187,36 +190,34 @@ obj/machinery/atmospherics/pipe //dir = node1_direction|node2_direction else + if(!node1&&!node2) + del(src) //TODO: silent deleting looks weird var/have_node1 = node1?1:0 var/have_node2 = node2?1:0 icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" - if(!node1&&!node2) - del(src) initialize() - var/connect_directions = initialize_directions + var/node1_dir + var/node2_dir + for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break + if(direction&initialize_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - connect_directions &= ~direction - break - if(node2) - break - var/turf/T = src.loc // hide if turf is not intact hide(T.intact) update_icon() @@ -268,16 +269,14 @@ obj/machinery/atmospherics/pipe del(src) initialize() - if(!node1) - for(var/obj/machinery/atmospherics/pipe/simple/target in get_step(src,initialize_directions)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - if(!node2) - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break + for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) + if(target.initialize_directions_he & get_dir(target,src)) + node2 = target + break update_icon() @@ -291,26 +290,25 @@ obj/machinery/atmospherics/pipe thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT initialize() - var/connect_directions = initialize_directions_he + var/node1_dir + var/node2_dir + for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,direction)) - if(target.initialize_directions_he & get_dir(target,src)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break + if(direction&initialize_directions_he) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) + if(target.initialize_directions_he & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) + if(target.initialize_directions_he & get_dir(target,src)) + node2 = target + break - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,direction)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - connect_directions &= ~direction - break - if (node2) - break update_icon() @@ -711,9 +709,9 @@ obj/machinery/atmospherics/pipe update_icon() obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (istype(W, /obj/machinery/atmospherics/pipe/tank)) + if (istype(src, /obj/machinery/atmospherics/pipe/tank)) return ..() - if (istype(W, /obj/machinery/atmospherics/pipe/vent)) + if (istype(src, /obj/machinery/atmospherics/pipe/vent)) return ..() if (!istype(W, /obj/item/weapon/wrench)) return ..() @@ -734,5 +732,9 @@ obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/u "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) + for (var/obj/machinery/meter/meter in T) + if (meter.target == src) + new /obj/item/pipe_meter(T) + del(meter) del(src) \ No newline at end of file diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 8292d17bab8..16b641b3ab3 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -172,6 +172,7 @@ anchored = 1.0 flags = FPRINT | CONDUCT pressure_resistance = 5*ONE_ATMOSPHERE + layer = 2.9 /obj/securearea desc = "A warning sign which reads 'SECURE AREA'" @@ -467,7 +468,7 @@ icon_state = "lattice" density = 0 anchored = 1.0 - layer = 2.5 + layer = 2.3 //under pipes // flags = 64.0 /obj/list_container diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index ec3a0cffa4e..bea2bcf9ee2 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -88,3 +88,16 @@ usr << t return + +/obj/machinery/meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + if (!istype(W, /obj/item/weapon/wrench)) + return ..() + playsound(src.loc, 'Ratchet.ogg', 50, 1) + user << "\blue You begin to unfasten \the [src]..." + if (do_after(user, 40)) + user.visible_message( \ + "[user] unfastens \the [src].", \ + "\blue You have unfastened \the [src].", \ + "You hear ratchet.") + new /obj/item/pipe_meter(src.loc) + del(src) \ No newline at end of file diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 9a1cdaa2dcb..a6c5fa95beb 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -54,6 +54,7 @@ var/datum/pipe_network/network = connected_port.return_network(src) if(network && !network.gases.Find(air_contents)) network.gases += air_contents + network.update = 1 return 1 diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 2cbfd8cefa9..71e63f933ba 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -16,7 +16,7 @@ Buildable meters #define PIPE_INSULATED_STRAIGHT 11 #define PIPE_INSULATED_BENT 12 -/obj/item/weapon/pipe +/obj/item/pipe name = "pipe" desc = "A pipe" var/pipe_type = 0 @@ -28,8 +28,8 @@ Buildable meters flags = TABLEPASS|FPRINT w_class = 4 level = 2 - //TODO: список номер_типа -> тип -/obj/item/weapon/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) + +/obj/item/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) ..() if (make_from) src.dir = make_from.dir @@ -43,6 +43,8 @@ Buildable meters src.pipe_type = PIPE_JUNCTION else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging)) src.pipe_type = PIPE_HE_STRAIGHT + is_bent + else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/insulated)) + src.pipe_type = PIPE_INSULATED_STRAIGHT + is_bent else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple)) src.pipe_type = PIPE_SIMPLE_STRAIGHT + is_bent else if(istype(make_from, /obj/machinery/atmospherics/portables_connector)) @@ -57,19 +59,17 @@ Buildable meters src.pipe_type = PIPE_PUMP else if(istype(make_from, /obj/machinery/atmospherics/unary/vent_scrubber)) src.pipe_type = PIPE_SCRUBBER - else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/insulated)) - src.pipe_type = PIPE_INSULATED_STRAIGHT + is_bent - if (is_bent) - src.dir = make_from.initialize_directions //workaround. Bent pipes with one node==null have cardinal direction. - rastaf0 else src.pipe_type = pipe_type src.dir = dir //src.pipe_dir = get_pipe_dir() update() + src.pixel_x = rand(-5, 5) + src.pixel_y = rand(-5, 5) //update the name and icon of the pipe item depending on the type -/obj/item/weapon/pipe/proc/update() +/obj/item/pipe/proc/update() var/list/nlist = list( \ "pipe", \ "bent pipe", \ @@ -102,31 +102,13 @@ Buildable meters "insulated", \ ) icon_state = islist[pipe_type + 1] - updateicon() - -//update the icon of the item - -/obj/item/weapon/pipe/proc/updateicon() - if(invisibility) // true if placed under floor - icon -= rgb(0,0,0,128) // fade the icon - else - icon = initial(icon) // otherwise reset to inital icon - -// called to hide or unhide a pipe -// i=true if hiding - -/obj/item/weapon/pipe/hide(var/i) - - invisibility = i ? 101 : 0 // make hidden pipe items invisible - updateicon() - //called when a turf is attacked with a pipe item // place the pipe on the turf, setting pipe level to 1 (underfloor) if the turf is not intact // rotate the pipe item clockwise -/obj/item/weapon/pipe/verb/rotate() +/obj/item/pipe/verb/rotate() set name = "Rotate Pipe" set src in view(1) @@ -134,18 +116,30 @@ Buildable meters return src.dir = turn(src.dir, -90) + + if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) + if(dir==2) + dir = 1 + else if(dir==8) + dir = 4 //src.pipe_dir = get_pipe_dir() return -/obj/item/weapon/pipe/Move() - var/dir = src.dir +/obj/item/pipe/Move() ..() - src.dir = dir + if ((pipe_type in list (PIPE_SIMPLE_BENT, PIPE_HE_BENT, PIPE_INSULATED_BENT)) \ + && (src.dir in cardinal)) + src.dir = src.dir|turn(src.dir, 90) + else if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) + if(dir==2) + dir = 1 + else if(dir==8) + dir = 4 return // returns all pipe's endpoints -/obj/item/weapon/pipe/proc/get_pipe_dir() +/obj/item/pipe/proc/get_pipe_dir() if (!dir) return 0 var/flip = turn(dir, 180) @@ -169,7 +163,7 @@ Buildable meters return flip|cw|acw return 0 -/obj/item/weapon/pipe/proc/get_pdir() //endpoints for regular pipes +/obj/item/pipe/proc/get_pdir() //endpoints for regular pipes var/flip = turn(dir, 180) // var/cw = turn(dir, -90) @@ -186,7 +180,7 @@ Buildable meters // return the h_dir (heat-exchange pipes) from the type and the dir -/obj/item/weapon/pipe/proc/get_hdir() //endpoints for h/e pipes +/obj/item/pipe/proc/get_hdir() //endpoints for h/e pipes // var/flip = turn(dir, 180) // var/cw = turn(dir, -90) @@ -201,15 +195,20 @@ Buildable meters else return 0 -/obj/item/weapon/pipe/attack_self(mob/user as mob) +/obj/item/pipe/attack_self(mob/user as mob) return rotate() -/obj/item/weapon/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/item/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) //* if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!isturf(src.loc)) return 1 + if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) + if(dir==2) + dir = 1 + else if(dir==8) + dir = 4 var/pipe_dir = get_pipe_dir() for(var/obj/machinery/atmospherics/M in src.loc) @@ -264,6 +263,8 @@ Buildable meters C.initialize_directions = pipe_dir if (pipename) C.name = pipename + var/turf/T = C.loc + C.level = T.intact ? 2 : 1 C.initialize() C.build_network() if (C.node) @@ -311,20 +312,15 @@ Buildable meters if (P.node2) P.node2.initialize() P.node2.build_network() -/* - if(6) //junctions - var/obj/machinery/junction/J = new( src.loc ) - J.dir = dir - J.p_dir = src.get_pdir() - J.h_dir = src.get_hdir() - J.level = 2 -*/ + if(PIPE_UVENT) //unary vent var/obj/machinery/atmospherics/unary/vent_pump/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.node) @@ -338,6 +334,8 @@ Buildable meters 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) @@ -355,6 +353,8 @@ Buildable meters P.initialize_directions = pipe_dir if (pipename) P.name = pipename + var/turf/T = P.loc + P.level = T.intact ? 2 : 1 P.initialize() P.build_network() if (P.node1) @@ -371,6 +371,8 @@ Buildable meters S.initialize_directions = pipe_dir if (pipename) S.name = pipename + var/turf/T = S.loc + S.level = T.intact ? 2 : 1 S.initialize() S.build_network() if (S.node) @@ -397,8 +399,8 @@ Buildable meters playsound(src.loc, 'Ratchet.ogg', 50, 1) user.visible_message( \ - "[user] fastens the pipe.", \ - "\blue You have fastened the pipe.", \ + "[user] fastens the [src].", \ + "\blue You have fastened the [src].", \ "You hear ratchet.") del(src) // remove the pipe item @@ -409,7 +411,7 @@ Buildable meters -/obj/item/weapon/pipe_meter +/obj/item/pipe_meter name = "meter" desc = "A meter that can be laid on pipes" icon = 'pipe-item.dmi' @@ -418,7 +420,7 @@ Buildable meters flags = TABLEPASS|FPRINT w_class = 4 -/obj/item/weapon/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (!istype(W, /obj/item/weapon/wrench)) return ..() diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 4ce7cb87d68..62fa78afcae 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -3,7 +3,8 @@ icon = 'stationobjs.dmi' icon_state = "autolathe" density = 1 - anchored = 1.0 + anchored = 1 + var/unwrenched = 0 /obj/machinery/pipedispenser/attack_paw(user as mob) return src.attack_hand(user) @@ -15,10 +16,11 @@ Regular pipes:
Pipe
Bent Pipe
-Connector
Manifold
-Unary Vent
Manual Valve
+Devices:
+Connector
+Unary Vent
Gas Pump
Scrubber
Meter
@@ -39,23 +41,57 @@ /obj/machinery/pipedispenser/Topic(href, href_list) if(..()) return + if(unwrenched) + usr << browse(null, "window=pipedispenser") + return usr.machine = src src.add_fingerprint(usr) if(href_list["make"]) var/p_type = text2num(href_list["make"]) var/p_dir = text2num(href_list["dir"]) - var/obj/item/weapon/pipe/P = new (usr.loc, pipe_type=p_type, dir=p_dir) + var/obj/item/pipe/P = new (/*usr.loc*/ src.loc, pipe_type=p_type, dir=p_dir) P.update() if(href_list["makemeter"]) - new /obj/item/weapon/pipe_meter(usr.loc) + new /obj/item/pipe_meter(/*usr.loc*/ src.loc) /* for(var/mob/M in viewers(1, src)) if ((M.client && M.machine == src)) src.attack_hand(M)*/ return -/obj/machinery/pipedispenser/New() - ..() +/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob) + if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) + usr << "\blue You put [W] back to [src]." + del(W) + return + else if (istype(W, /obj/item/weapon/wrench)) + if (unwrenched==0) + playsound(src.loc, 'Ratchet.ogg', 50, 1) + user << "\blue You begin to unfasten \the [src] from the floor..." + if (do_after(user, 40)) + user.visible_message( \ + "[user] unfastens \the [src].", \ + "\blue You have unfastened \the [src]. Now it can be pulled somewhere else.", \ + "You hear ratchet.") + src.anchored = 0 + src.stat |= MAINT + src.unwrenched = 1 + if (usr.machine==src) + usr << browse(null, "window=pipedispenser") + else /*if (unwrenched==1)*/ + playsound(src.loc, 'Ratchet.ogg', 50, 1) + user << "\blue You begin to fasten \the [src] to the floor..." + if (do_after(user, 20)) + user.visible_message( \ + "[user] fastens \the [src].", \ + "\blue You have fastened \the [src]. Now it can dispense pipes.", \ + "You hear ratchet.") + src.anchored = 1 + src.stat &= ~MAINT + src.unwrenched = 0 + power_change() + else + return ..() /obj/machinery/pipedispenser/disposal diff --git a/code/game/machinery/singularity.dm b/code/game/machinery/singularity.dm index 7d68e9cf9d2..cdce2af6846 100644 --- a/code/game/machinery/singularity.dm +++ b/code/game/machinery/singularity.dm @@ -57,6 +57,7 @@ However people seem to like it for some reason. icon_state = "Singularity" anchored = 1 density = 1 + layer = 6 unacidable = 1 //Don't comment this out. var/active = 0 var/energy = 10 @@ -770,6 +771,8 @@ However people seem to like it for some reason. /obj/machinery/power/collector_array/proc/eject() var/obj/item/weapon/tank/plasma/Z = src.P + if (!Z) + return Z.loc = get_turf(src) Z.layer = initial(Z.layer) src.P = null diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index b308d2dc04b..a0fa4fad11a 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -43,7 +43,7 @@ var/area/A = get_area() var/text = {"[src]

[station_name()] blueprints

-Property of Nanotrasen. For heads of stuff only. Store in high-secure storage.
+Property of Nanotrasen. For heads of staff only. Store in high-secure storage.
"} switch (get_area_type()) if (AREA_SPACE) @@ -193,8 +193,13 @@ move an amendment to the drawing.

for(var/obj/machinery/door/window/D in T2) if(turn(dir,180) == D.dir) return BORDER_BETWEEN - for (var/obj/machinery/door/M in T2) + if (locate(/obj/machinery/door) in T2) return BORDER_2NDTILE + if (locate(/obj/falsewall) in T2) + return BORDER_2NDTILE + if (locate(/obj/falserwall) in T2) + return BORDER_2NDTILE + return BORDER_NONE /obj/item/blueprints/proc/detect_room(var/turf/first) diff --git a/icons/obj/pipes.dmi b/icons/obj/pipes.dmi index 6a955df8ae6dfcb2f1a117cff56a31b731e26c81..d2cbeb8efbfa6853726ce3c3a96a9f03c8c8fc75 100644 GIT binary patch delta 14092 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 Dwf0RV delta 14118 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 diff --git a/icons/obj/pipes/heat.dmi b/icons/obj/pipes/heat.dmi index 2de846ce67c16d1798c38b3343321aeb4107a8c0..6d1ed47e7ef869a5947c3f9a26f0d36a4ca1615f 100644 GIT binary patch literal 4949 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 delta 1515 zcmV@^Lf(000tDOjJd{z`y_i08~^|S6E{I05ibAz-`kt zivR!s0d!JMQvg8b*k%9#0ELkyGk*YbjE%TBGg33tGfE(w;*!LYR3KAHiHkEOv#1!z zH00t;D@x2wg|OiYGV@9jlS>fFEbuAQO(Li;wW1)uI5ox4fLN6VhPYHJE4cc(fPD=B z=?zBa%=O~F000FmNkl*IbsqK#uBy&{mHe5?FOg=Job;swZ{Rz-$j=Om@8)Y!R=;%tz!20sC_hpd0TD! z^ZEI_!LmvY%wI*uMM~sjG+2b>Fk20X08I>p z;;{Ow3ft&7P<^=);SWpO0Sq3?$_fmIHBcXZ-o0q=EjgI0D6|?tiv|5}fIfi1yeQ~@ zQ5PKv(9(h0CZE9#5Cc@k!EpU>0T+E0fC)sw#=X0VNXoWHJAe&rE`P$AP`U~XU}EaN zk+lQZ$n0XYJxPeLfUIDr$2Es`1_D$#I-ijU008DS^5-?Lta%*ZJjo$$p27k$Gs90N zo9zssy39$iKmeaxn$0RnB}`YUii`4vmG!4=891~2I#?g4`Q zKCvBN^FbTdYEA=mhJUa^Nivi@r@%$N4TlwX8XzCT8Y`_)Z5(JByawnhfmLGaDr0Ei z!8XWIy$1L?59-{+IGNBmm}=tyk5pKxXGVH;BE;<{4YBhjiz#E_raDQ~Y5CMF@i+&Y=4Lmc9 zK&&C6J%mX_dAWXw@_B6>#pEXj*!OyQD?>{wVoaLAHPh58}N=k4)}xhc2%TH*5b!yM)F`u}2fy&{f@`XSbU zF{r^*st@>+g@60LSX4hmSCOS)0ZJ7PLj>e@R6j)H;OYK1eTp@jK80YEwK zguCm9hBNqO8qBh5p24@JkjfQv2#fU@ctx9vVIT*Jf)9#79d zh!_AB2DojHZ<=ZBuLk~Jqkb3WAG$SgcT2UsF#nJk2MtC}%x-`>z}L?o zRP*^!0IHoX^6(kWVh&t}+rt2d`}ll-dp_XW0Dq~7R02Q&PT;oP$3?(YOf3PR5G`=q z9^b|AR8}y~0IWY4et)P|Kcq6VVFqyhK`OT#)?fka4^r9jD1%`ALGJybtmxGGAz7ge zG6>cmq-(4(4TALtnJRINL9qUy_WU2Wsr5sqQXggD*B|7cHH>JWJ{)R5e1E9Uz^^|@ z*?(v}sP?}B>HtTsKWI6FU+1D~vOEg#|LySl0Nd#R-d7SiPqcW$rb_^#^1I)b$5sJ19M|x&i6{N9R2ez}XBAPj3IE{RLw7IJejh R<1_#O002ovPDHLkV1l~C$fW=P diff --git a/icons/obj/pipes/junction.dmi b/icons/obj/pipes/junction.dmi index 51aad58569c5e1c16abfc35e1a672b46252fc70c..70286bde155d30de04911477296cdde32faa7b1d 100644 GIT binary patch literal 2847 zcmV+)3*hvLP)V=-0C=2*%&`i>Fce1NIrk}k+FcUunnhAdhV~tTxta{Nl3cWp-$9{^;&|ZW zv^e*JpWsGMPcAhtGc3A;CiTiu5-d(fQi<~|$vdh9VOTVImT-}VRLrHqq9b)J;m#En zW@kGv-vO_WrE)a-@9HD9`6XNQlY<*QZDDacBOk!KhX4QyQAtEWRCt{2olR&Q$rZ={ zBab7jgE129!FUg05FvZ=BnW)*Y7oQ;_%hD)TrBJbBl1BeFv9qfU>~fo7au% zw4j9-l^Xx*>oqTGq!PBCbSsrg#TU9N5tPRLUI4KdD8?u#GVs4*fta zX#0QseKpc;2dxkC0K`^OgayF%#dLpU;sgv8t~$sy>mH4$3N(cT5Eh7;EP|xR8`UML zVk|}hVZ)ugcmi2Ox+E2O0M)~8E&=eSILYv*s3M?;f2v~uvR~CXmskO?DNZ`r3HnS| z%5vPHC#34i1L#O_ad!c9zecN(O@Y$uiw4~t=-R*PeR2zcxE|u_;+BhwX#+=tUEy@y(NPU7{uLpp`18lf%i8LsW2k|mw3y5mqG#lU6Cm208+4=-RF#vGV6EqzM!{HGBp^WA2mk;E#J^^+rfh5sXl>l3;-PWSwVXi$rB{O z)+acLOnm~W7=Ug3=7-3b!~(iSVCxf{Bx!vDq51%9F?)m^h zzkD#C=@NmhPY{i4eFCl+Agu9&>I3|&TJ>`RszhMx6YwEgpMX0Cpc}sgph{ivp!xth zL_qH!u=NSTkf~3=9Rrjw>T06u1JK=pDr|iMK197Z^ZoUvkn8#Yq(QTIf4wQ>x;{W$zoGNZl``1+0HenyTOR-ri~$HL-(PQnC(&6S zfFOGrFyOeE>qzYniA%0PTL#et*4b zsICt{==FM1)k2cg2LL2v0AfhxE7Ez%TYUiFqo`!Br%ZhSf>0iSkku$4kM#ivvd68Y zK7dFbV4ND?)(22jAAlzY(DnX$9&CMpXk_aH0D>_pPte+U@pVMn# z|NdF-n_O}BgKUM_=CR-J_ebKIPN#!7`yym6fNxg6^ymw~UZ{G#E+mTH^vRU=^}{Q8 z^zHXp{Nng;v*{?ktI1`5Z5N9-XYgok7ft8KTJ8UwS^ty6D|o#29j@Q}B_6MR2ghmp z_A?hi6#X~J z3|v@P2yKLgg@uu6YOk=JXf*K2^k;a5?Z|0mA|4>B@jIQ4zYYCA%l7tm=sq0B@#k;Q z=g+%u`m@YE!1D64mu56fBikMD+Gn{whW3Nr0U3&pd`o$;nBaI&})~-@iwxbbKfi6BF3q-^bL{6poIL005rn`P;pD^9HKyr+NNm zk>>%5HqVY`e}CU^n8n4#u?q;vvE8_F0|0+8%;f>-S;49&hKh=c&5RWdHZhho7#)cL z;+_rE@mv7ipsJ&B8Q5cp3+Qy(PUHN`>@3o_=K^#-fWZ@ur|khYHa0@nRjbvJnaDw- z5fOsUKQ1*M)CPR1@m(x_F@uuhI8qlh>9c|4z~^hXy)<*<|HkMAc=YWqnoTq8^QOjU zW@d2d(k0B!&SGwEE;1P8jsXC*PY08e-Q3*t0Qd*Gv$KQe&!1y=cNYMJB4UzG7P$a~ zAp5e>xJmZQwBpjN50J%^#c9Ac8gDdy_wHS|u3Nf%`7&D>}=wRDslFO^8l({;!kHUk1Q`OEn#bG3#+TE9(@7MpFcnK^5x5Y-u*Tj4R2*- z#lHYcb4%Fz%NFoy^!LK-)7#W1uN`6i8a@{|&v8X451^wy02u}nRQ&>2bWIe=+J3j& zO%z0Dem5}b3A9=*rMYnywsE3@W>V?Pq=_nJ9gQl&g$oz_|8+;>?8(arf)yOIPC6P7 zf+saD@&gJw|I8!ZZnyn_s@-m%Xq>3Jx@0}w$n1>S z`T6-+`(abogM{($;X|Q&17S0G!~R!&{^b9$@Blp9>3E1!ggE=G2M}ol74}(p&p&ek x#0_I~MZ>)0-G1f*I6ORz^#Hn}VP5iV{|7!#Q&+9fXKDZd002ovPDHLkV1kn)VW|KB delta 822 zcmV-61IhfK7QqIP7=Hu<0000n5PbLm000$GOjJd{z`y_i05LH!R8&+~SYrPG0KmY& zD&V(p00001bW%=J06^y0W&i*HgL+h0bVOxyV{&P5bZKvH004NLQ&wGC)ttc@!6~s0~C_^YP#I7Kto8xQjXy;q2OR z0^$2;XBg9Z1)b5ZJwxDsU;AwB7`)jrXuTfLV@g0%5P#frNHo%9_o2k_3p2sA+B^Z>FDUc^cA}{!xJCGiegP)ad#C#anMp)uU<0}FCcz8%gDL`v z)&uDEgz3=+>H+k6f>i+P0rYx8rXIlX2NJCZ(0}U*?pBh$aNZw?I5*B?fb7O|{y-+X zd4bmh^8Vnufo;Pv01EQ{K%No>=ol3I0X_!E5L4?3XdJNo0TzjzdIGu@IQ0Z{HFD|+ zpqWlkz%vls-5($iQP$3TQ99qTqYh|=l7r0q0-gfoeE|db`vR^4@V