diff --git a/baystation12.dme b/baystation12.dme
index 6250be3b5cf..87e6e465583 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -205,7 +205,6 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
-#define FILE_DIR "maps/backup"
#define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 53365eea928..8ccc0b363e1 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -119,8 +119,11 @@
Junction
Y-Junction
Trunk
-Sort Junction 1
-Sort Junction 2
+Bin
+Outlet
+Chute
+Sort Junction 1
+Sort Junction 2
"}
user << browse("
[src][dat]", "window=pipedispenser")
@@ -154,8 +157,17 @@
C.ptype = 5
if(5)
C.ptype = 6
+ C.density = 1
if(6)
C.ptype = 7
+ C.density = 1
+ if(7)
+ C.ptype = 8
+ C.density = 1
+ if(8)
+ C.ptype = 8
+ if(9)
+ C.ptype = 9
C.update()
wait = 1
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index 44c42ab7ccd..f041e96828b 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -1,4 +1,5 @@
// Disposal pipe construction
+// This is the pipe that you drag around, not the attached ones.
/obj/structure/disposalconstruct
@@ -12,7 +13,7 @@
m_amt = 1850
level = 2
var/ptype = 0
- // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=junction-j1s, 7=junction-j2s
+ // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet, 9=junction-j1s, 10=junction-j2s
var/dpdir = 0 // directions as disposalpipe
var/base_state = "pipe-s"
@@ -42,15 +43,32 @@
if(5)
base_state = "pipe-t"
dpdir = dir
+ // disposal bin has only one dir, thus we don't need to care about setting it
if(6)
+ if(anchored)
+ base_state = "disposal"
+ else
+ base_state = "condisposal"
+
+ if(7)
+ base_state = "outlet"
+ dpdir = dir
+
+ if(8)
+ base_state = "intake"
+ dpdir = dir
+ if(9)
base_state = "pipe-j1s"
dpdir = dir | right | flip
- if(7)
+ if(10)
base_state = "pipe-j2s"
dpdir = dir | left | flip
- icon_state = "con[base_state]"
+ if(ptype<6 && ptype != 9 && ptype != 10)
+ icon_state = "con[base_state]"
+ else
+ icon_state = base_state
if(invisibility) // if invisible, fade icon
icon -= rgb(0,0,0,128)
@@ -99,7 +117,13 @@
return /obj/structure/disposalpipe/junction
if(5)
return /obj/structure/disposalpipe/trunk
- if(6,7)
+ if(6)
+ return /obj/machinery/disposal
+ if(7)
+ return /obj/structure/disposaloutlet
+ if(8)
+ return /obj/machinery/disposal/deliveryChute
+ if(9,10)
return /obj/structure/disposalpipe/sortjunction
return
@@ -110,57 +134,98 @@
// weldingtool: convert to real pipe
attackby(var/obj/item/I, var/mob/user)
+ var/nicetype = "pipe"
+ var/ispipe = 0 // Indicates if we should change the level of this pipe
+ switch(ptype)
+ if(6)
+ nicetype = "disposal bin"
+ if(7)
+ nicetype = "disposal outlet"
+ if(8)
+ nicetype = "delivery chute"
+ else
+ nicetype = "pipe"
+ ispipe = 1
+
var/turf/T = src.loc
if(T.intact)
- user << "You can only attach the pipe if the floor plating is removed."
+ user << "You can only attach the [nicetype] if the floor plating is removed."
return
var/obj/structure/disposalpipe/CP = locate() in T
- if(CP)
- update()
- var/pdir = CP.dpdir
- if(istype(CP, /obj/structure/disposalpipe/broken))
- pdir = CP.dir
- if(pdir & dpdir)
- user << "There is already a pipe at that location."
+ if(ptype>=6 && ptype != 9 && ptype != 10) // Disposal or outlet
+ if(CP) // There's something there
+ if(!istype(CP,/obj/structure/disposalpipe/trunk))
+ user << "The [nicetype] requires a trunk underneath it in order to work."
+ return
+ else // Nothing under, fuck.
+ user << "The [nicetype] requires a trunk underneath it in order to work."
return
+ else
+ if(CP)
+ update()
+ var/pdir = CP.dpdir
+ if(istype(CP, /obj/structure/disposalpipe/broken))
+ pdir = CP.dir
+ if(pdir & dpdir)
+ user << "There is already a [nicetype] at that location."
+ return
+
+ var/obj/structure/disposalpipe/trunk/Trunk = CP
if(istype(I, /obj/item/weapon/wrench))
if(anchored)
anchored = 0
- level = 2
- density = 1
- user << "You detach the pipe from the underfloor."
+ if(ispipe)
+ level = 2
+ density = 0
+ else
+ density = 1
+ user << "You detach the [nicetype] from the underfloor."
else
anchored = 1
- level = 1
- density = 0
- user << "You attach the pipe to the underfloor."
+ if(ispipe)
+ level = 1 // We don't want disposal bins to disappear under the floors
+ density = 0
+ else
+ density = 1 // We don't want disposal bins or outlets to go density 0
+ user << "You attach the [nicetype] to the underfloor."
playsound(src.loc, 'Ratchet.ogg', 100, 1)
+ update()
else if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = I
if(W.remove_fuel(0,user))
playsound(src.loc, 'Welder2.ogg', 100, 1)
- user << "Welding the pipe in place."
+ user << "Welding the [nicetype] in place."
W:welding = 2
if(do_after(user, 20))
- update()
- var/pipetype = dpipetype()
- var/obj/structure/disposalpipe/P = new pipetype(src.loc)
- P.base_icon_state = base_state
- P.dir = dir
- if(ptype >= 6)
- var/obj/structure/disposalpipe/sortjunction/V = P
- V.posdir = dir
- if(ptype == 6)
- V.sortdir = turn(dir, -90)
- V.negdir = turn(dir, 180)
- else
- V.sortdir = turn(dir, 90)
- V.negdir = turn(dir, 180)
- P.dpdir = dpdir
- P.updateicon()
+ user << "The [nicetype] has been welded in place!"
+ update() // TODO: Make this neat
+ if(ispipe) // Pipe
+
+ var/pipetype = dpipetype()
+ var/obj/structure/disposalpipe/P = new pipetype(src.loc)
+ P.base_icon_state = base_state
+ P.dir = dir
+ P.dpdir = dpdir
+ P.updateicon()
+
+ else if(ptype==6) // Disposal bin
+ var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc)
+ P.mode = 0 // start with pump off
+
+ else if(ptype==7) // Disposal outlet
+
+ var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc)
+ P.dir = dir
+ Trunk.linked = P
+
+ else if(ptype==8) // Disposal outlet
+
+ var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc)
+ P.dir = dir
+
del(src)
return
W:welding = 1
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 63ef5f4abbf..c23d590860f 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
// Disposal bin
// Holds items for disposal into pipe system
// Draws air from turf, gradually charges internal reservoir
@@ -49,6 +47,37 @@
if(isrobot(user) && !istype(I, /obj/item/weapon/trashbag))
return
+ if(mode<=0) // It's off
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(mode==0) // It's off but still not unscrewed
+ mode=-1 // Set it to doubleoff l0l
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ user << "You remove the screws around the power connection."
+ return
+ else if(mode==-1)
+ mode=0
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ user << "You attach the screws around the power connection."
+ return
+ else if(istype(I,/obj/item/weapon/weldingtool) && mode==-1)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'Welder2.ogg', 100, 1)
+ user << "You start slicing the floorweld off the disposal unit."
+ W:welding = 2
+ if(do_after(user,20))
+ user << "You sliced the floorweld off the disposal unit."
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ C.ptype = 6 // 6 = disposal unit
+ C.anchored = 1
+ C.density = 1
+ C.update()
+ del(src)
+ W:welding = 1
+ return
+ else
+ user << "You need more welding fuel to complete this task."
+ return
if(istype(I, /obj/item/weapon/melee/energy/blade))
user << "You can't place that item inside the disposal unit."
@@ -72,26 +101,6 @@
update()
return
- if(istype(I, /obj/item/weapon/weldingtool) && I:welding)
- var/obj/item/weapon/weldingtool/W = I
- playsound(src.loc, 'Welder.ogg', 100, 1)
- var/turf/T = get_turf(user)
- user.visible_message("[user] welds apart the disposal.", "You start to weld apart the disposal.")
- sleep(40)
- if(get_turf(user) == T && W.remove_fuel(2,user))
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/O in component_parts)
- if(O.reliability != 100 && crit_fail)
- O.crit_fail = 1
- O.loc = src.loc
- // the stuff still in the disposal
- for(var/obj/O in src)
- O.loc = src.loc
- del(src)
- return
-
var/obj/item/weapon/grab/G = I
if(istype(G)) // handle grabbed mob
if(ismob(G.affecting))
@@ -104,13 +113,11 @@
GM.client.eye = src
GM.loc = src
for (var/mob/C in viewers(src))
-
- log_attack("[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
- log_admin("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
- // message_admins("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
-
C.show_message("\red [GM.name] has been placed in the [src] by [user].", 3)
del(G)
+ log_attack("[usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
+ log_admin("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
+ message_admins("ATTACK: [usr] ([usr.ckey]) placed [GM] ([GM.ckey]) in a disposals unit.")
else
if(!I || isnull(I))
//CRASH("disposal/attackby() was called, but I was nulled before calling user.drop_item()")
@@ -258,6 +265,11 @@
if(user && user.loc == src)
usr << "\red You cannot reach the controls from inside."
return
+ /*
+ if(mode==-1)
+ usr << "\red The disposal units power is disabled."
+ return
+ */
interact(user, 0)
// user interaction
@@ -278,7 +290,7 @@
dat += "
Eject contents
"
- if(mode == 0)
+ if(mode <= 0)
dat += "Pump: Off On
"
else if(mode == 1)
dat += "Pump: Off On (pressurizing)
"
@@ -300,6 +312,10 @@
if(usr.loc == src)
usr << "\red You cannot reach the controls from inside."
return
+
+ if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1
+ usr << "\red The disposal units power is disabled."
+ return
..()
src.add_fingerprint(usr)
if(stat & BROKEN)
@@ -356,7 +372,7 @@
overlays += image('disposal.dmi', "dispover-handle")
// only handle is shown if no power
- if(stat & NOPOWER)
+ if(stat & NOPOWER || mode == -1)
return
// check for items in disposal - occupied light
@@ -375,6 +391,10 @@
if(stat & BROKEN) // nothing can happen if broken
return
+ if(!air_contents) // Potentially causes a runtime otherwise (if this is really shitty, blame pete //Donkie)
+ return
+
+
if(length(src.contents) > 0)
if(timeleft == 0)
flush = 1
@@ -913,6 +933,8 @@
C.ptype = 5
C.dir = dir
+ C.density = 0
+ C.anchored = 1
C.update()
del(src)
@@ -1245,6 +1267,37 @@
update()
return
+ // Override attackby so we disallow trunkremoval when somethings ontop
+ attackby(var/obj/item/I, var/mob/user)
+
+ if(linked != null)
+ return
+
+ var/turf/T = src.loc
+ if(T.intact)
+ return // prevent interaction with T-scanner revealed pipes
+
+ if(istype(I, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/W = I
+
+ if(W.welding)
+ if(W.remove_fuel(0,user))
+ W:welding = 2
+ playsound(src.loc, 'Welder2.ogg', 100, 1)
+ // check if anything changed over 2 seconds
+ var/turf/uloc = user.loc
+ var/atom/wloc = W.loc
+ user << "Slicing the disposal pipe."
+ sleep(30)
+ if(user.loc == uloc && wloc == W.loc)
+ welded()
+ else
+ user << "You must stay still while welding the pipe."
+ W:welding = 1
+ else
+ user << "You need more welding fuel to cut the pipe."
+ return
+
// would transfer to next pipe segment, but we are in a trunk
// if not entering from disposal bin,
// transfer to linked object (outlet or bin)
@@ -1306,6 +1359,7 @@
anchored = 1
var/active = 0
var/turf/target // this will be where the output objects are 'thrown' to.
+ var/mode = 0
var/playing_sound = 0
var/playing_buzzer = 0
@@ -1338,13 +1392,47 @@
for(var/atom/movable/AM in H)
AM.loc = src.loc
AM.pipe_eject(dir)
- spawn(1)
+ spawn(5)
AM.throw_at(target, 3, 1)
H.vent_gas(src.loc)
del(H)
return
+ attackby(var/obj/item/I, var/mob/user)
+ if(!I || !user)
+ return
+
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(mode==0)
+ mode=1
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ user << "You remove the screws around the power connection."
+ return
+ else if(mode==1)
+ mode=0
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ user << "You attach the screws around the power connection."
+ return
+ else if(istype(I,/obj/item/weapon/weldingtool) && mode==1)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'Welder2.ogg', 100, 1)
+ user << "You start slicing the floorweld off the disposal outlet."
+ W:welding = 2
+ if(do_after(user,20))
+ user << "You sliced the floorweld off the disposal outlet."
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ C.ptype = 7 // 7 = outlet
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ del(src)
+ W:welding = 1
+ return
+ else
+ user << "You need more welding fuel to complete this task."
+ return
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 54f5b202676..b315578d2d0 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -361,9 +361,13 @@
var/currentlyFlushing = 0
var/defaultDestination = "Disposals"
+ var/c_mode = 0
interact()
return
+ update()
+ return
+
HasEntered(AM as mob|obj) //Go straight into the chute
if (istype(AM, /obj))
var/obj/O = AM
@@ -414,6 +418,41 @@
update()
return
+ attackby(var/obj/item/I, var/mob/user)
+ if(!I || !user)
+ return
+
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(c_mode==0)
+ c_mode=1
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ user << "You remove the screws around the power connection."
+ return
+ else if(c_mode==1)
+ c_mode=0
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ user << "You attach the screws around the power connection."
+ return
+ else if(istype(I,/obj/item/weapon/weldingtool) && c_mode==1)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'Welder2.ogg', 100, 1)
+ user << "You start slicing the floorweld off the delivery chute."
+ W:welding = 2
+ if(do_after(user,20))
+ user << "You sliced the floorweld off the delivery chute."
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ C.ptype = 8 // 8 = Delivery chute
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ del(src)
+ W:welding = 1
+ return
+ else
+ user << "You need more welding fuel to complete this task."
+ return
+
CanPass(atom/A, turf/T)
if(istype(A, /mob/living)) // You Shall Get Sucked In And Killed!
var/mob/living/M = A
diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/pipes/disposal.dmi
index 3005ebf7ef0..63d1fab198e 100644
Binary files a/icons/obj/pipes/disposal.dmi and b/icons/obj/pipes/disposal.dmi differ