Merge branch 'master' into master

This commit is contained in:
Hawk-v3
2020-01-13 20:31:39 +00:00
committed by GitHub
14 changed files with 1053 additions and 625 deletions

View File

@@ -55,7 +55,29 @@
#define PIPING_ONE_PER_TURF 2 //can only be built if nothing else with this flag is on the tile already. #define PIPING_ONE_PER_TURF 2 //can only be built if nothing else with this flag is on the tile already.
#define PIPING_DEFAULT_LAYER_ONLY 4 //can only exist at PIPING_LAYER_DEFAULT #define PIPING_DEFAULT_LAYER_ONLY 4 //can only exist at PIPING_LAYER_DEFAULT
#define PIPING_CARDINAL_AUTONORMALIZE 8 //north/south east/west doesn't matter, auto normalize on build. #define PIPING_CARDINAL_AUTONORMALIZE 8 //north/south east/west doesn't matter, auto normalize on build.
//YW Additions
// Disposals Construction
//
#define DISPOSAL_PIPE_STRAIGHT 0
#define DISPOSAL_PIPE_CORNER 1
#define DISPOSAL_PIPE_JUNCTION 2
#define DISPOSAL_PIPE_JUNCTION_FLIPPED 3
#define DISPOSAL_PIPE_JUNCTION_Y 4
#define DISPOSAL_PIPE_TRUNK 5
#define DISPOSAL_PIPE_BIN 6
#define DISPOSAL_PIPE_OUTLET 7
#define DISPOSAL_PIPE_CHUTE 8
#define DISPOSAL_PIPE_SORTER 9
#define DISPOSAL_PIPE_SORTER_FLIPPED 10
#define DISPOSAL_PIPE_UPWARD 11
#define DISPOSAL_PIPE_DOWNWARD 12
#define DISPOSAL_PIPE_TAGGER 13
#define DISPOSAL_PIPE_TAGGER_PARTIAL 14
#define DISPOSAL_SORT_NORMAL 0
#define DISPOSAL_SORT_WILDCARD 1
#define DISPOSAL_SORT_UNTAGGED 2
//YW Additions end
// Macro for easy use of boilerplate code for searching for a valid node connection. // Macro for easy use of boilerplate code for searching for a valid node connection.
#define STANDARD_ATMOS_CHOOSE_NODE(node_num, direction) \ #define STANDARD_ATMOS_CHOOSE_NODE(node_num, direction) \
for(var/obj/machinery/atmospherics/target in get_step(src, direction)) { \ for(var/obj/machinery/atmospherics/target in get_step(src, direction)) { \

View File

@@ -102,3 +102,10 @@
/datum/category_item/autolathe/engineering/camera_assembly /datum/category_item/autolathe/engineering/camera_assembly
name = "camera assembly" name = "camera assembly"
path =/obj/item/weapon/camera_assembly path =/obj/item/weapon/camera_assembly
//YW Addition Start
/datum/category_item/autolathe/engineering/rpd
name = "rapid piping device"
path =/obj/item/weapon/pipe_dispenser
//YW Addtion End

View File

@@ -132,87 +132,32 @@ Nah
qdel(pipe) qdel(pipe)
/obj/machinery/pipedispenser/disposal/attack_hand(user as mob) /obj/machinery/pipedispenser/disposal/interact(mob/user)
if(..()) user.set_machine(src)
return
///// Z-Level stuff var/list/lines = list()
var/dat = {"<b>Disposal Pipes</b><br><br> for(var/category in disposal_pipe_recipes)
<A href='?src=\ref[src];dmake=0'>Pipe</A><BR> lines += "<b>[category]:</b><BR>"
<A href='?src=\ref[src];dmake=1'>Bent Pipe</A><BR> for(var/datum/pipe_recipe/PI in disposal_pipe_recipes[category])
<A href='?src=\ref[src];dmake=2'>Junction</A><BR> lines += PI.Render(src)
<A href='?src=\ref[src];dmake=3'>Y-Junction</A><BR> var/dat = lines.Join()
<A href='?src=\ref[src];dmake=4'>Trunk</A><BR> var/datum/browser/popup = new(user, "pipedispenser", name, 300, 500, src)
<A href='?src=\ref[src];dmake=5'>Bin</A><BR> popup.set_content("<TT>[dat]</TT>")
<A href='?src=\ref[src];dmake=6'>Outlet</A><BR> popup.open()
<A href='?src=\ref[src];dmake=7'>Chute</A><BR>
<A href='?src=\ref[src];dmake=21'>Upwards</A><BR>
<A href='?src=\ref[src];dmake=22'>Downwards</A><BR>
<A href='?src=\ref[src];dmake=8'>Sorting</A><BR>
<A href='?src=\ref[src];dmake=9'>Sorting (Wildcard)</A><BR>
<A href='?src=\ref[src];dmake=10'>Sorting (Untagged)</A><BR>
<A href='?src=\ref[src];dmake=11'>Tagger</A><BR>
<A href='?src=\ref[src];dmake=12'>Tagger (Partial)</A><BR>
"}
///// Z-Level stuff
user << browse("<HEAD><TITLE>[src]</TITLE></HEAD><TT>[dat]</TT>", "window=pipedispenser")
return return
// 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk
/obj/machinery/pipedispenser/disposal/Topic(href, href_list) /obj/machinery/pipedispenser/disposal/Topic(href, href_list)
if(href_list["makepipe"] || href_list["setlayer"] || href_list["makemeter"]) // Asking the disposal machine to do atmos stuff?
return // That's a no no.
if(..()) if(..())
return return
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["dmake"]) if(href_list["dmake"])
if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=pipedispenser")
return
if(!wait) if(!wait)
var/p_type = text2num(href_list["dmake"]) var/ptype = text2num(href_list["dmake"])
var/obj/structure/disposalconstruct/C = new (src.loc) var/pdir = (href_list["dir"] ? text2num(href_list["dir"]) : NORTH)
switch(p_type) var/psub = (href_list["sort"] ? text2num(href_list["sort"]) : 0)
if(0) var/obj/structure/disposalconstruct/C = new (src.loc, ptype, pdir, 0, psub)
C.ptype = 0
if(1)
C.ptype = 1
if(2)
C.ptype = 2
if(3)
C.ptype = 4
if(4)
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 = 9
C.subtype = 0
if(9)
C.ptype = 9
C.subtype = 1
if(10)
C.ptype = 9
C.subtype = 2
if(11)
C.ptype = 13
if(12)
C.ptype = 14
///// Z-Level stuff
if(21)
C.ptype = 11
if(22)
C.ptype = 12
///// Z-Level stuff
C.add_fingerprint(usr) C.add_fingerprint(usr)
C.update() C.update()
wait = 1 wait = 1

View File

@@ -1,103 +1,164 @@
// //
// Recipies for Pipe Dispenser and (someday) the RPD // Recipies for Pipe Dispenser and (someday) the RPD
// //
var/global/list/atmos_pipe_recipes = null var/global/list/atmos_pipe_recipes = null
var/global/list/disposal_pipe_recipes = null
/hook/startup/proc/init_pipe_recipes() var/global/list/all_pipe_recipes = null
global.atmos_pipe_recipes = list(
"Pipes" = list( /hook/startup/proc/init_pipe_recipes()
new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple), global.atmos_pipe_recipes = list(
new /datum/pipe_recipe/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold), "Pipes" = list(
new /datum/pipe_recipe/pipe("Manual Valve", /obj/machinery/atmospherics/valve), new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple, TRUE),
new /datum/pipe_recipe/pipe("Digital Valve", /obj/machinery/atmospherics/valve/digital), new /datum/pipe_recipe/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold, TRUE),
new /datum/pipe_recipe/pipe("Pipe cap", /obj/machinery/atmospherics/pipe/cap), new /datum/pipe_recipe/pipe("Manual Valve", /obj/machinery/atmospherics/valve),
new /datum/pipe_recipe/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w), new /datum/pipe_recipe/pipe("Digital Valve", /obj/machinery/atmospherics/valve/digital),
new /datum/pipe_recipe/pipe("Manual T-Valve", /obj/machinery/atmospherics/tvalve), new /datum/pipe_recipe/pipe("Pipe cap", /obj/machinery/atmospherics/pipe/cap, TRUE),
new /datum/pipe_recipe/pipe("Digital T-Valve", /obj/machinery/atmospherics/tvalve/digital), new /datum/pipe_recipe/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w, TRUE),
new /datum/pipe_recipe/pipe("Upward Pipe", /obj/machinery/atmospherics/pipe/zpipe/up), new /datum/pipe_recipe/pipe("Manual T-Valve", /obj/machinery/atmospherics/tvalve),
new /datum/pipe_recipe/pipe("Downward Pipe", /obj/machinery/atmospherics/pipe/zpipe/down), new /datum/pipe_recipe/pipe("Digital T-Valve", /obj/machinery/atmospherics/tvalve/digital),
new /datum/pipe_recipe/pipe("Universal Pipe Adaptor", /obj/machinery/atmospherics/pipe/simple/visible/universal), new /datum/pipe_recipe/pipe("Upward Pipe", /obj/machinery/atmospherics/pipe/zpipe/up, TRUE),
), new /datum/pipe_recipe/pipe("Downward Pipe", /obj/machinery/atmospherics/pipe/zpipe/down, TRUE),
"Devices" = list( new /datum/pipe_recipe/pipe("Universal Pipe Adaptor",/obj/machinery/atmospherics/pipe/simple/visible/universal, TRUE),
new /datum/pipe_recipe/pipe("Connector", /obj/machinery/atmospherics/portables_connector), ),
new /datum/pipe_recipe/pipe("Unary Vent", /obj/machinery/atmospherics/unary/vent_pump), "Devices" = list(
new /datum/pipe_recipe/pipe("Passive Vent", /obj/machinery/atmospherics/pipe/vent), new /datum/pipe_recipe/pipe("Connector", /obj/machinery/atmospherics/portables_connector),
new /datum/pipe_recipe/pipe("Injector", /obj/machinery/atmospherics/unary/outlet_injector), new /datum/pipe_recipe/pipe("Unary Vent", /obj/machinery/atmospherics/unary/vent_pump),
new /datum/pipe_recipe/pipe("Gas Pump", /obj/machinery/atmospherics/binary/pump), new /datum/pipe_recipe/pipe("Passive Vent", /obj/machinery/atmospherics/pipe/vent),
new /datum/pipe_recipe/pipe("Pressure Regulator", /obj/machinery/atmospherics/binary/passive_gate), new /datum/pipe_recipe/pipe("Injector", /obj/machinery/atmospherics/unary/outlet_injector),
new /datum/pipe_recipe/pipe("High Power Gas Pump",/obj/machinery/atmospherics/binary/pump/high_power), new /datum/pipe_recipe/pipe("Gas Pump", /obj/machinery/atmospherics/binary/pump),
//new /datum/pipe_recipe/pipe("Automatic Shutoff Valve",/obj/machinery/atmospherics/valve/shutoff), //VOREStation Removal: Without leaks, those are just regular valves, new /datum/pipe_recipe/pipe("Pressure Regulator", /obj/machinery/atmospherics/binary/passive_gate),
new /datum/pipe_recipe/pipe("Scrubber", /obj/machinery/atmospherics/unary/vent_scrubber), new /datum/pipe_recipe/pipe("High Power Gas Pump", /obj/machinery/atmospherics/binary/pump/high_power),
new /datum/pipe_recipe/meter("Meter"), new /datum/pipe_recipe/pipe("Scrubber", /obj/machinery/atmospherics/unary/vent_scrubber),
new /datum/pipe_recipe/pipe("Gas Filter", /obj/machinery/atmospherics/trinary/atmos_filter), new /datum/pipe_recipe/meter("Meter"),
new /datum/pipe_recipe/pipe("Gas Mixer", /obj/machinery/atmospherics/trinary/mixer), new /datum/pipe_recipe/pipe("Gas Filter", /obj/machinery/atmospherics/trinary/atmos_filter),
new /datum/pipe_recipe/pipe("Gas Mixer 'T'", /obj/machinery/atmospherics/trinary/mixer/t_mixer), new /datum/pipe_recipe/pipe("Gas Mixer", /obj/machinery/atmospherics/trinary/mixer),
new /datum/pipe_recipe/pipe("Omni Gas Mixer", /obj/machinery/atmospherics/omni/mixer), new /datum/pipe_recipe/pipe("Gas Mixer 'T'", /obj/machinery/atmospherics/trinary/mixer/t_mixer),
new /datum/pipe_recipe/pipe("Omni Gas Filter", /obj/machinery/atmospherics/omni/atmos_filter), new /datum/pipe_recipe/pipe("Omni Gas Mixer", /obj/machinery/atmospherics/omni/mixer),
), new /datum/pipe_recipe/pipe("Omni Gas Filter", /obj/machinery/atmospherics/omni/atmos_filter),
"Heat Exchange" = list( ),
new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple/heat_exchanging), "Heat Exchange" = list(
new /datum/pipe_recipe/pipe("Junction", /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction), new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple/heat_exchanging),
new /datum/pipe_recipe/pipe("Heat Exchanger", /obj/machinery/atmospherics/unary/heat_exchanger), new /datum/pipe_recipe/pipe("Junction", /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction),
), new /datum/pipe_recipe/pipe("Heat Exchanger", /obj/machinery/atmospherics/unary/heat_exchanger),
"Insulated pipes" = list( ),
new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple/insulated), "Insulated pipes" = list(
) new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple/insulated),
) )
return TRUE )
global.disposal_pipe_recipes = list(
// "Disposal Pipes" = list(
// New method of handling pipe construction. Instead of numeric constants and a giant switch statement of doom new /datum/pipe_recipe/disposal("Pipe", DISPOSAL_PIPE_STRAIGHT, "conpipe-s", PIPE_STRAIGHT),
// every pipe type has a datum instance which describes its name, placement rules and construction method, dispensing etc. new /datum/pipe_recipe/disposal("Bent Pipe", DISPOSAL_PIPE_CORNER, "conpipe-c"),
// The advantages are obvious, mostly in simplifying the code of the dispenser, and the ability to add new pipes without hassle. new /datum/pipe_recipe/disposal("Junction", DISPOSAL_PIPE_JUNCTION, "conpipe-j1", PIPE_TRIN_M, "conpipe-j2"),
// new /datum/pipe_recipe/disposal("Y-Junction", DISPOSAL_PIPE_JUNCTION_Y, "conpipe-y"),
/datum/pipe_recipe new /datum/pipe_recipe/disposal("Sort Junction", DISPOSAL_PIPE_SORTER, "conpipe-j1s", PIPE_TRIN_M, "conpipe-j2s", DISPOSAL_SORT_NORMAL),
var/name = "Abstract Pipe (fixme)" // Recipe name new /datum/pipe_recipe/disposal("Sort Junction (Wildcard)",DISPOSAL_PIPE_SORTER, "conpipe-j1s", PIPE_TRIN_M, "conpipe-j2s", DISPOSAL_SORT_WILDCARD),
var/dirtype // If using an RPD, this tells more about what previews to show. new /datum/pipe_recipe/disposal("Sort Junction (Untagged)",DISPOSAL_PIPE_SORTER, "conpipe-j1s", PIPE_TRIN_M, "conpipe-j2s", DISPOSAL_SORT_UNTAGGED),
new /datum/pipe_recipe/disposal("Tagger", DISPOSAL_PIPE_TAGGER, "pipe-tagger", PIPE_STRAIGHT),
// Render an HTML link to select this pipe type. Returns text. new /datum/pipe_recipe/disposal("Tagger (Partial)", DISPOSAL_PIPE_TAGGER_PARTIAL, "pipe-tagger-partial", PIPE_STRAIGHT),
/datum/pipe_recipe/proc/Render(dispenser) new /datum/pipe_recipe/disposal("Trunk", DISPOSAL_PIPE_TRUNK, "conpipe-t"),
return "<A href='?src=\ref[dispenser]&[Params()]'>[name]</A><BR>" new /datum/pipe_recipe/disposal("Upwards", DISPOSAL_PIPE_UPWARD, "pipe-u"),
new /datum/pipe_recipe/disposal("Downwards", DISPOSAL_PIPE_DOWNWARD, "pipe-d"),
// Parameters for the Topic link returned by Render(). Returns text. new /datum/pipe_recipe/disposal("Bin", DISPOSAL_PIPE_BIN, "disposal", PIPE_ONEDIR),
/datum/pipe_recipe/proc/Params() new /datum/pipe_recipe/disposal("Outlet", DISPOSAL_PIPE_OUTLET, "outlet"),
return "" new /datum/pipe_recipe/disposal("Chute", DISPOSAL_PIPE_CHUTE, "intake"),
)
// )
// Subtype for actual pipes global.all_pipe_recipes = disposal_pipe_recipes + atmos_pipe_recipes
// return TRUE
/datum/pipe_recipe/pipe
var/obj/item/pipe/construction_type // The type PATH to the type of pipe fitting object the recipe makes. //
var/obj/machinery/atmospherics/pipe_type // The type PATH of what actual pipe the fitting becomes. // New method of handling pipe construction. Instead of numeric constants and a giant switch statement of doom
// every pipe type has a datum instance which describes its name, placement rules and construction method, dispensing etc.
/datum/pipe_recipe/pipe/New(var/label, var/obj/machinery/atmospherics/path) // The advantages are obvious, mostly in simplifying the code of the dispenser, and the ability to add new pipes without hassle.
name = label //
pipe_type = path /datum/pipe_recipe
construction_type = initial(path.construction_type) var/name = "Abstract Pipe (fixme)" // Recipe name
dirtype = initial(construction_type.dispenser_class) var/pipe_type // The type PATH of what actual pipe the fitting becomes, used by RCD to print the pipe.
var/icon = 'icons/obj/pipe-item.dmi' // This tells the RPD which icon file to look for preview images in.
// Render an HTML link to select this pipe type var/icon_state // This tells the RPD what kind of pipe icon to render for the preview.
/datum/pipe_recipe/pipe/Render(dispenser) var/icon_state_m // This stores the mirrored version of the regular state (if available).
var/dat = ..(dispenser) var/dirtype // If using an RPD, this tells more about what previews to show.
// Stationary pipe dispensers don't allow you to pre-select pipe directions. var/subtype = 0 // Used for certain disposals pipes types.
// This makes it impossble to spawn bent versions of bendable pipes. var/paintable = FALSE // If TRUE, allow the RPD to paint this pipe.
// We add a "Bent" pipe type with a preset diagonal direction to work around it.
if(istype(dispenser, /obj/machinery/pipedispenser) && (dirtype == PIPE_BENDABLE)) // Render an HTML link to select this pipe type. Returns text.
dat += "<A href='?src=\ref[dispenser]&[Params()]&dir=[NORTHEAST]'>Bent [name]</A><BR>" /datum/pipe_recipe/proc/Render(dispenser)
return dat return "<A href='?src=\ref[dispenser]&[Params()]'>[name]</A><BR>"
/datum/pipe_recipe/pipe/Params() // Parameters for the Topic link returned by Render(). Returns text.
return "makepipe=[pipe_type]" /datum/pipe_recipe/proc/Params()
return ""
//
// Subtype for meters //
// // Subtype for actual pipes
/datum/pipe_recipe/meter //
dirtype = PIPE_ONEDIR /datum/pipe_recipe/pipe
var/obj/item/pipe/construction_type // The type PATH to the type of pipe fitting object the recipe makes.
/datum/pipe_recipe/meter/New(label)
name = label /datum/pipe_recipe/pipe/New(var/label, var/obj/machinery/atmospherics/path, var/colorable=FALSE)
name = label
/datum/pipe_recipe/meter/Params() pipe_type = path
return "makemeter=1" construction_type = initial(path.construction_type)
icon_state = initial(path.pipe_state)
dirtype = initial(construction_type.dispenser_class)
if (dirtype == PIPE_TRIN_M)
icon_state_m = "[icon_state]m"
paintable = colorable
// Render an HTML link to select this pipe type
/datum/pipe_recipe/pipe/Render(dispenser)
var/dat = ..(dispenser)
// Stationary pipe dispensers don't allow you to pre-select pipe directions.
// This makes it impossble to spawn bent versions of bendable pipes.
// We add a "Bent" pipe type with a preset diagonal direction to work around it.
if(istype(dispenser, /obj/machinery/pipedispenser) && (dirtype == PIPE_BENDABLE))
dat += "<A href='?src=\ref[dispenser]&[Params()]&dir=[NORTHEAST]'>Bent [name]</A><BR>"
return dat
/datum/pipe_recipe/pipe/Params()
return "makepipe=[pipe_type]"
//
// Subtype for meters
//
/datum/pipe_recipe/meter
dirtype = PIPE_ONEDIR
icon_state = "meter"
/datum/pipe_recipe/meter/New(label)
name = label
/datum/pipe_recipe/meter/Params()
return "makemeter=1"
//
// Subtype for disposal pipes
//
/datum/pipe_recipe/disposal
icon = 'icons/obj/pipes/disposal.dmi'
/datum/pipe_recipe/disposal/New(var/label, var/path, var/state, dt=PIPE_DIRECTIONAL, var/state_mirror=0, var/sort=0)
name = label
icon_state = state
pipe_type = path
dirtype = dt
subtype = sort
if (dirtype == PIPE_TRIN_M)
icon_state_m = state_mirror
// Render an HTML link to select this pipe type
/datum/pipe_recipe/disposal/Render(dispenser)
var/dat = ..(dispenser)
// Blah blah, add corner pipes because dispensers have no directional information. Look up for more info.
if(istype(dispenser, /obj/machinery/pipedispenser) && (dirtype == PIPE_BENDABLE))
dat += "<A href='?src=\ref[dispenser]&[Params()]&dir=[NORTHEAST]'>Bent [name]</A><BR>"
return dat
/datum/pipe_recipe/disposal/Params()
var/param = "dmake=[pipe_type]"
if (subtype)
param += "&sort=[subtype]"
return param

View File

@@ -0,0 +1,343 @@
#define PAINT_MODE -2
#define EATING_MODE -1
#define ATMOS_MODE 0
#define DISPOSALS_MODE 1
#define TRANSIT_MODE 2
/obj/item/weapon/pipe_dispenser
name = "Rapid Piping Device (RPD)"
desc = "A device used to rapidly pipe things."
icon = 'icons/obj/tools.dmi'
icon_state = "rpd"
flags = NOBLUDGEON
force = 10
throwforce = 10
throw_speed = 1
throw_range = 5
w_class = ITEMSIZE_NORMAL
matter = list(DEFAULT_WALL_MATERIAL = 50000, "glass" = 25000)
var/datum/effect/effect/system/spark_spread/spark_system
var/working = 0
var/mode = ATMOS_MODE
var/p_dir = NORTH
var/p_flipped = FALSE
var/paint_color="grey"
var/screen = ATMOS_MODE //Starts on the atmos tab.
var/piping_layer = PIPING_LAYER_DEFAULT
var/wrench_mode = FALSE
var/obj/item/weapon/tool/wrench/tool
var/datum/pipe_recipe/recipe
var/static/datum/pipe_recipe/first_atmos
var/static/datum/pipe_recipe/first_disposal
/obj/item/weapon/pipe_dispenser/New()
. = ..()
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
if(!first_atmos)
first_atmos = atmos_pipe_recipes[atmos_pipe_recipes[1]][1]
if(!first_disposal)
first_disposal = disposal_pipe_recipes[disposal_pipe_recipes[1]][1]
recipe = first_atmos
tool = new /obj/item/weapon/tool/wrench/cyborg(src) // RPDs have wrenches inside of them, so that they can wrench down spawned pipes without being used as superior wrenches themselves.
/obj/item/weapon/pipe_dispenser/Destroy()
qdel(spark_system)
spark_system = null
return ..()
/obj/item/weapon/pipe_dispenser/suicide_act(mob/user)
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
user.visible_message("<span class='suicide'>[user] points the end of the RPD down [TU.his] throat and presses a button! It looks like [TU.hes] trying to commit suicide...</span>")
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
playsound(get_turf(user), 'sound/items/deconstruct.ogg', 50, 1)
return(BRUTELOSS)
/obj/item/weapon/pipe_dispenser/attack_self(mob/user)
src.interact(user)
/obj/item/weapon/pipe_dispenser/interact(mob/user)
var/list/lines = list()
if(mode >= ATMOS_MODE)
lines += "<div class=\"block\"><h3>Direction:</h3><div class=\"item\">"
var/icon/preview = null
var/icon/previewm = null
if(recipe.icon && recipe.icon_state)
preview = new /icon(recipe.icon, recipe.icon_state)
if (recipe.icon_state_m)
previewm = new /icon(recipe.icon, recipe.icon_state_m)
switch(recipe.dirtype)
if(PIPE_STRAIGHT) // Straight, N-S, W-E
lines += render_dir_img(preview,user,NORTH,"Vertical","&#8597;")
lines += render_dir_img(preview,user,EAST,"Horizontal","&harr;")
if(PIPE_BENDABLE) // Bent, N-W, N-E etc
lines += render_dir_img(preview,user,NORTH,"Vertical","&#8597;")
lines += render_dir_img(preview,user,EAST,"Horizontal","&harr;")
lines += "<br />"
lines += render_dir_img(preview,user,NORTHWEST,"West to North","&#9565;")
lines += render_dir_img(preview,user,NORTHEAST,"North to East","&#9562;")
lines += "<br />"
lines += render_dir_img(preview,user,SOUTHWEST,"South to West","&#9559;")
lines += render_dir_img(preview,user,SOUTHEAST,"East to South","&#9556;")
if(PIPE_TRINARY) // Manifold
lines += render_dir_img(preview,user,NORTH,"West South East","&#9574;")
lines += render_dir_img(preview,user,EAST,"North West South","&#9571;")
lines += "<br />"
lines += render_dir_img(preview,user,SOUTH,"East North West","&#9577;")
lines += render_dir_img(preview,user,WEST,"South East North","&#9568;")
if(PIPE_TRIN_M) // Mirrored ones
//each mirror icon is 45 anticlockwise from it's real direction
lines += render_dir_img(preview,user,NORTH,"West South East","&#9574;")
lines += render_dir_img(preview,user,EAST,"North West South","&#9571;")
lines += "<br />"
lines += render_dir_img(preview,user,SOUTH,"East North West","&#9577;")
lines += render_dir_img(preview,user,WEST,"South East North","&#9568;")
lines += "<br />"
lines += render_dir_img(previewm,user,SOUTH,"West South East","&#9574;", 1)
lines += render_dir_img(previewm,user,EAST,"North West South","&#9571;", 1)
lines += "<br />"
lines += render_dir_img(previewm,user,NORTH,"East North West","&#9577;", 1)
lines += render_dir_img(previewm,user,WEST,"South East North","&#9568;", 1)
if(PIPE_DIRECTIONAL) // Stuff with four directions - includes pumps etc.
lines += render_dir_img(preview,user,NORTH,"North","&uarr;")
lines += render_dir_img(preview,user,EAST,"East","&rarr;")
lines += render_dir_img(preview,user,SOUTH,"South","&darr;")
lines += render_dir_img(preview,user,WEST,"West","&larr;")
if(PIPE_ONEDIR) // Single icon_state (eg 4-way manifolds)
lines += render_dir_img(preview,user,SOUTH,"Pipe","&#8597;")
lines += "</div></div>"
if(mode == ATMOS_MODE || mode == PAINT_MODE)
lines += "<div class=\"block\"><h3>Color:</h3>"
var/i = 0
for(var/c in pipe_colors)
++i
lines += "<a class='[paint_color == c? "linkOn" : ""]' href='?src=\ref[src];paint_color=[c]'>[c]</a>"
if(i == 4)
lines += "<br>"
i = 0
lines += "</div>"
lines += "<div class=\"block\"><h3>Utilities:</h3>"
lines += "<a class='[mode >= ATMOS_MODE ? "linkOn" : ""]' href='?src=\ref[src];mode=[screen]'>Lay Pipes</a>"
lines += "<a class='[mode == EATING_MODE ? "linkOn" : ""]' href='?src=\ref[src];mode=[EATING_MODE]'>Eat Pipes</a>"
lines += "<a class='[mode == PAINT_MODE ? "linkOn" : ""]' href='?src=\ref[src];mode=[PAINT_MODE]'>Paint Pipes</a>"
lines += "</div>"
lines += "<div class=\"block\"><h3>Catagory:</h3>"
lines += "<a class='[screen == ATMOS_MODE ? "linkOn" : ""]' href='?src=\ref[src];screen=[ATMOS_MODE]'>Atmospherics</a>"
lines += "<a class='[screen == DISPOSALS_MODE ? "linkOn" : ""]' href='?src=\ref[src];screen=[DISPOSALS_MODE]'>Disposals</a>"
//lines += "<a class='[screen == TRANSIT_MODE ? "linkOn" : ""]' href='?src=\ref[src];screen=[TRANSIT_MODE]'>Transit Tube</a>"
lines += "<br><a class='[wrench_mode ? "linkOn" : ""]' href='?src=\ref[src];switch_wrench=1;wrench_mode=[!wrench_mode]'>Wrench Mode</a>"
lines += "</div>"
if(screen == ATMOS_MODE)
for(var/category in atmos_pipe_recipes)
lines += "<div class=\"block\"><h3>[category]:</h3>"
if(category == "Pipes")
lines += "<div class=\"item\">"
lines += "<a class='[piping_layer == PIPING_LAYER_REGULAR ? "linkOn" : "linkOff"]' href='?src=\ref[src];piping_layer=[PIPING_LAYER_REGULAR]'>Regular</a> "
lines += "<a class='[piping_layer == PIPING_LAYER_SUPPLY ? "linkOn" : "linkOff"]' href='?src=\ref[src];piping_layer=[PIPING_LAYER_SUPPLY]'>Supply</a> "
lines += "<a class='[piping_layer == PIPING_LAYER_SCRUBBER ? "linkOn" : "linkOff"]' href='?src=\ref[src];piping_layer=[PIPING_LAYER_SCRUBBER]'>Scrubber</a> "
lines += "</div>"
for(var/i in 1 to atmos_pipe_recipes[category].len)
var/datum/pipe_recipe/PI = atmos_pipe_recipes[category][i]
lines += "<div class=\"item\">"
lines += "<a class='[recipe == PI ? "linkOn" : ""]' href='?src=\ref[src]&category=[category]&pipe_type=[i]'>[PI.name]</a>"
lines += "</div>"
lines += "</div>"
else if(screen == DISPOSALS_MODE)
for(var/category in disposal_pipe_recipes)
lines += "<div class=\"block\"><h3>[category]:</h3>"
for(var/i in 1 to disposal_pipe_recipes[category].len)
var/datum/pipe_recipe/PI = disposal_pipe_recipes[category][i]
lines += "<div class=\"item\">"
lines += "<a class='[recipe == PI ? "linkOn" : ""]' href='?src=\ref[src]&category=[category]&pipe_type=[i]'>[PI.name]</a>"
lines += "</div>"
lines += "</div>"
var/dat = lines.Join()
var/datum/browser/popup = new(user, "rpd", name, 300, 800, src)
popup.set_content("<TT>[dat]</TT>")
popup.open()
/obj/item/weapon/pipe_dispenser/Topic(href,href_list)
if(..())
return
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
return
var/playeffect = TRUE // Do we spark the device
var/anyclicked = FALSE // Tells us if we need to refresh the window.
if(href_list["paint_color"])
paint_color = href_list["paint_color"]
playeffect = FALSE
anyclicked = TRUE
if(href_list["mode"])
mode = text2num(href_list["mode"])
anyclicked = TRUE
if(href_list["screen"])
if(mode == screen)
mode = text2num(href_list["screen"])
screen = text2num(href_list["screen"])
switch(screen)
if(DISPOSALS_MODE)
recipe = first_disposal
if(ATMOS_MODE)
recipe = first_atmos
p_dir = NORTH
playeffect = FALSE
anyclicked = TRUE
if(href_list["piping_layer"])
piping_layer = text2num(href_list["piping_layer"])
playeffect = FALSE
anyclicked = TRUE
if(href_list["pipe_type"])
recipe = all_pipe_recipes[href_list["category"]][text2num(href_list["pipe_type"])]
if(recipe.dirtype == PIPE_ONEDIR) // One hell of a hack for the fact that the image previews for the onedir types only show on the south, but the default pipe type is north.
p_dir = SOUTH // Did I fuck this up? Maybe. Or maybe it's just the icon files not being ready for an RPD.
else // If going to try and fix this hack, be aware the pipe dispensers might rely on pipes defaulting south instead of north.
p_dir = NORTH
p_flipped = FALSE
anyclicked = TRUE
if(href_list["dir"])
p_dir = text2dir(href_list["dir"])
p_flipped = text2num(href_list["flipped"])
playeffect = FALSE
anyclicked = TRUE
if(href_list["switch_wrench"])
wrench_mode = text2num(href_list["wrench_mode"])
anyclicked = TRUE
if(anyclicked)
if(playeffect)
spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
src.interact(usr)
/obj/item/weapon/pipe_dispenser/afterattack(atom/A, mob/user as mob, proximity)
if(!user.IsAdvancedToolUser() || istype(A, /turf/space/transit) || !proximity)
return ..()
//So that changing the menu settings doesn't affect the pipes already being built.
var/queued_piping_layer = piping_layer
var/queued_p_type = recipe.pipe_type
var/queued_p_dir = p_dir
var/queued_p_flipped = p_flipped
var/queued_p_subtype = recipe.subtype
var/queued_p_paintable = recipe.paintable
//make sure what we're clicking is valid for the current mode
var/static/list/make_pipe_whitelist // This should probably be changed to be in line with polaris standards. Oh well.
if(!make_pipe_whitelist)
make_pipe_whitelist = typecacheof(list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe))
var/can_make_pipe = (isturf(A) || is_type_in_typecache(A, make_pipe_whitelist))
. = FALSE
switch(mode) //if we've gotten this var, the target is valid
if(PAINT_MODE) //Paint pipes
if(!istype(A, /obj/machinery/atmospherics/pipe))
return ..()
var/obj/machinery/atmospherics/pipe/P = A
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
P.change_color(pipe_colors[paint_color])
user.visible_message("<span class='notice'>[user] paints \the [P] [paint_color].</span>","<span class='notice'>You paint \the [P] [paint_color].</span>")
return
if(EATING_MODE) //Eating pipes
if(!(istype(A, /obj/item/pipe) || istype(A, /obj/item/pipe_meter) || istype(A, /obj/structure/disposalconstruct)))
return ..()
to_chat(user, "<span class='notice'>You start destroying a pipe...</span>")
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 2, target = A))
activate()
qdel(A)
if(ATMOS_MODE) //Making pipes
if(!can_make_pipe)
return ..()
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if (istype(recipe, /datum/pipe_recipe/meter))
to_chat(user, "<span class='notice'>You start building a meter...</span>")
if(do_after(user, 2, target = A))
activate()
var/obj/item/pipe_meter/PM = new /obj/item/pipe_meter(get_turf(A))
PM.setAttachLayer(queued_piping_layer)
if(wrench_mode)
do_wrench(PM, user)
else
to_chat(user, "<span class='notice'>You start building a pipe...</span>")
if(do_after(user, 2, target = A))
activate()
var/obj/machinery/atmospherics/path = queued_p_type
var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe
var/obj/item/pipe/P = new pipe_item_type(get_turf(A), queued_p_type, queued_p_dir)
P.update()
P.add_fingerprint(usr)
P.setPipingLayer(queued_piping_layer)
if (queued_p_paintable)
P.color = pipe_colors[paint_color]
if(queued_p_flipped)
P.do_a_flip()
if(wrench_mode)
do_wrench(P, user)
if(DISPOSALS_MODE) //Making disposals pipes
if(!can_make_pipe)
return ..()
A = get_turf(A)
if(istype(A, /turf/unsimulated))
to_chat(user, "<span class='warning'>[src]'s error light flickers; there's something in the way!</span>")
return
to_chat(user, "<span class='notice'>You start building a disposals pipe...</span>")
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 4, target = A))
var/obj/structure/disposalconstruct/C = new(A, queued_p_type, queued_p_dir, queued_p_flipped, queued_p_subtype)
if(!C.can_place())
to_chat(user, "<span class='warning'>There's not enough room to build that here!</span>")
qdel(C)
return
activate()
C.add_fingerprint(usr)
C.update_icon()
if(wrench_mode)
do_wrench(C, user)
return
else
return ..()
/obj/item/weapon/pipe_dispenser/proc/activate()
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
/obj/item/weapon/pipe_dispenser/proc/do_wrench(var/atom/target, mob/user)
var/resolved = target.attackby(tool,user)
if(!resolved && tool && target)
tool.afterattack(target,user,1)
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(preview,user,_dir,title,noimg,flipped=0)
var/dirtext = dir2text(_dir)
var/selected = " style=\"height:34px;width:34px;display:inline-block\""
if(_dir == p_dir && flipped == p_flipped)
selected += " class=\"linkOn\""
if(preview)
user << browse_rsc(new /icon(preview, dir=_dir), "[dirtext][flipped ? "m" : ""].png")
return "<a href=\"?src=\ref[src];dir=[dirtext];flipped=[flipped]\" title=\"[title]\"[selected]\"><img src=\"[dirtext][flipped ? "m" : ""].png\" /></a>"
else
return "<a href=\"?src=\ref[src];dir=[dirtext];flipped=[flipped]\" title=\"[title]\"[selected]\">[noimg]</a>"
#undef PAINT_MODE
#undef EATING_MODE
#undef ATMOS_MODE
#undef DISPOSALS_MODE

View File

@@ -33,7 +33,8 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering, /obj/item/clothing/suit/storage/hooded/wintercoat/engineering,
/obj/item/clothing/shoes/boots/winter/engineering, /obj/item/clothing/shoes/boots/winter/engineering,
/obj/item/weapon/tank/emergency/oxygen/engi, /obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add,
/obj/item/weapon/pipe_dispenser) //YW Add
/obj/structure/closet/secure_closet/engineering_chief/Initialize() /obj/structure/closet/secure_closet/engineering_chief/Initialize()
if(prob(50)) if(prob(50))
@@ -138,7 +139,8 @@
/obj/item/taperoll/atmos, /obj/item/taperoll/atmos,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos,
/obj/item/clothing/shoes/boots/winter/atmos, /obj/item/clothing/shoes/boots/winter/atmos,
/obj/item/weapon/tank/emergency/oxygen/engi) /obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/pipe_dispenser) //YW Addition
/obj/structure/closet/secure_closet/atmos_personal/Initialize() /obj/structure/closet/secure_closet/atmos_personal/Initialize()
if(prob(50)) if(prob(50))

View File

@@ -403,6 +403,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/floor_painter(src) src.modules += new /obj/item/device/floor_painter(src)
src.modules += new /obj/item/weapon/gripper/no_use/loader(src) src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
src.modules += new /obj/item/device/geiger(src) src.modules += new /obj/item/device/geiger(src)
src.modules += new /obj/item/weapon/pipe_dispenser(src) //YW Addition
var/datum/matter_synth/metal = new /datum/matter_synth/metal() var/datum/matter_synth/metal = new /datum/matter_synth/metal()
var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel()

View File

@@ -541,6 +541,7 @@
src.modules += new /obj/item/device/pipe_painter(src) src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/device/floor_painter(src) src.modules += new /obj/item/device/floor_painter(src)
src.modules += new /obj/item/device/geiger(src) src.modules += new /obj/item/device/geiger(src)
src.modules += new /obj/item/weapon/pipe_dispenser(src) //YW changes
//YW changes end //YW changes end
src.emag = new /obj/item/weapon/dogborg/pounce(src) src.emag = new /obj/item/weapon/dogborg/pounce(src)
@@ -837,4 +838,4 @@
var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag
B.reagents.add_reagent("beer2", 2 * amount) B.reagents.add_reagent("beer2", 2 * amount)
// YW Changes - Boozeborg end // YW Changes - Boozeborg end

View File

@@ -1,321 +1,374 @@
// Disposal pipe construction // Disposal pipe construction
// This is the pipe that you drag around, not the attached ones. // This is the pipe that you drag around, not the attached ones.
/obj/structure/disposalconstruct /obj/structure/disposalconstruct
name = "disposal pipe segment" name = "disposal pipe segment"
desc = "A huge pipe segment used for constructing disposal systems." desc = "A huge pipe segment used for constructing disposal systems."
icon = 'icons/obj/pipes/disposal.dmi' icon = 'icons/obj/pipes/disposal.dmi'
icon_state = "conpipe-s" icon_state = "conpipe-s"
anchored = 0 anchored = 0
density = 0 density = 0
pressure_resistance = 5*ONE_ATMOSPHERE pressure_resistance = 5*ONE_ATMOSPHERE
matter = list(DEFAULT_WALL_MATERIAL = 1850) matter = list(DEFAULT_WALL_MATERIAL = 1850)
level = 2 level = 2
var/sortType = "" var/sortType = ""
var/ptype = 0 var/ptype = 0
// 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet 9=pipe-j1s 10=pipe-j2s var/subtype = 0
var/subtype = 0 var/dpdir = 0 // directions as disposalpipe
var/dpdir = 0 // directions as disposalpipe var/base_state = "pipe-s"
var/base_state = "pipe-s"
/obj/structure/disposalconstruct/New(var/newturf, var/newtype, var/newdir, var/flipped, var/newsubtype)
// update iconstate and dpdir due to dir and type ..(newturf)
/obj/structure/disposalconstruct/proc/update() ptype = newtype
var/flip = turn(dir, 180) dir = newdir
var/left = turn(dir, 90) if(ptype == DISPOSAL_PIPE_STRAIGHT && dir in cornerdirs)
var/right = turn(dir, -90) ptype = DISPOSAL_PIPE_CORNER
switch(dir)
switch(ptype) if(NORTHWEST)
if(0) dir = WEST
base_state = "pipe-s" if(NORTHEAST)
dpdir = dir | flip dir = NORTH
if(1) if(SOUTHWEST)
base_state = "pipe-c" dir = SOUTH
dpdir = dir | right if(SOUTHEAST)
if(2) dir = EAST
base_state = "pipe-j1"
dpdir = dir | right | flip switch(ptype)
if(3) if(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE)
base_state = "pipe-j2" density = 1
dpdir = dir | left | flip if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED)
if(4) subtype = newsubtype
base_state = "pipe-y"
dpdir = dir | left | right if(flipped)
if(5) do_a_flip()
base_state = "pipe-t" else
dpdir = dir update() // do_a_flip() calls update anyway, so, lazy way of catching unupdated pipe!
// disposal bin has only one dir, thus we don't need to care about setting it
if(6) // update iconstate and dpdir due to dir and type
if(anchored) /obj/structure/disposalconstruct/proc/update()
base_state = "disposal" var/flip = turn(dir, 180)
else var/left = turn(dir, 90)
base_state = "condisposal" var/right = turn(dir, -90)
if(7)
base_state = "outlet" switch(ptype)
dpdir = dir if(DISPOSAL_PIPE_STRAIGHT)
if(8) base_state = "pipe-s"
base_state = "intake" dpdir = dir | flip
dpdir = dir if(DISPOSAL_PIPE_CORNER)
if(9) base_state = "pipe-c"
base_state = "pipe-j1s" dpdir = dir | right
dpdir = dir | right | flip if(DISPOSAL_PIPE_JUNCTION)
if(10) base_state = "pipe-j1"
base_state = "pipe-j2s" dpdir = dir | right | flip
dpdir = dir | left | flip if(DISPOSAL_PIPE_JUNCTION_FLIPPED)
///// Z-Level stuff base_state = "pipe-j2"
if(11) dpdir = dir | left | flip
base_state = "pipe-u" if(DISPOSAL_PIPE_JUNCTION_Y)
dpdir = dir base_state = "pipe-y"
if(12) dpdir = dir | left | right
base_state = "pipe-d" if(DISPOSAL_PIPE_TRUNK)
dpdir = dir base_state = "pipe-t"
if(13) dpdir = dir
base_state = "pipe-tagger" // disposal bin has only one dir, thus we don't need to care about setting it
dpdir = dir | flip if(DISPOSAL_PIPE_BIN)
if(14) if(anchored)
base_state = "pipe-tagger-partial" base_state = "disposal"
dpdir = dir | flip else
base_state = "condisposal"
///// Z-Level stuff if(DISPOSAL_PIPE_OUTLET)
if(!(ptype in list(6, 7, 8, 11, 12, 13, 14))) base_state = "outlet"
icon_state = "con[base_state]" dpdir = dir
else
icon_state = base_state if(DISPOSAL_PIPE_CHUTE)
base_state = "intake"
if(invisibility) // if invisible, fade icon dpdir = dir
alpha = 128
else if(DISPOSAL_PIPE_SORTER)
alpha = 255 base_state = "pipe-j1s"
//otherwise burying half-finished pipes under floors causes them to half-fade dpdir = dir | right | flip
// hide called by levelupdate if turf intact status changes if(DISPOSAL_PIPE_SORTER_FLIPPED)
// change visibility status and force update of icon base_state = "pipe-j2s"
/obj/structure/disposalconstruct/hide(var/intact) dpdir = dir | left | flip
invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact ///// Z-Level stuff
update() if(DISPOSAL_PIPE_UPWARD)
base_state = "pipe-u"
dpdir = dir
// flip and rotate verbs if(DISPOSAL_PIPE_DOWNWARD)
/obj/structure/disposalconstruct/verb/rotate_clockwise() base_state = "pipe-d"
set category = "Object" dpdir = dir
set name = "Rotate Pipe Clockwise" ///// Z-Level stuff
set src in view(1) if(DISPOSAL_PIPE_TAGGER)
base_state = "pipe-tagger"
if(usr.stat) dpdir = dir | flip
return if(DISPOSAL_PIPE_TAGGER_PARTIAL)
base_state = "pipe-tagger-partial"
if(anchored) dpdir = dir | flip
to_chat(usr, "You must unfasten the pipe before rotating it.")
return ///// Z-Level stuff
if(!(ptype in list(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE, DISPOSAL_PIPE_UPWARD, DISPOSAL_PIPE_DOWNWARD, DISPOSAL_PIPE_TAGGER, DISPOSAL_PIPE_TAGGER_PARTIAL)))
src.set_dir(turn(src.dir, 270)) ///// Z-Level stuff
update() icon_state = "con[base_state]"
else
/obj/structure/disposalconstruct/verb/flip() icon_state = base_state
set category = "Object"
set name = "Flip Pipe" if(invisibility) // if invisible, fade icon
set src in view(1) alpha = 128
if(usr.stat) else
return alpha = 255
//otherwise burying half-finished pipes under floors causes them to half-fade
if(anchored)
to_chat(usr, "You must unfasten the pipe before flipping it.") // hide called by levelupdate if turf intact status changes
return // change visibility status and force update of icon
/obj/structure/disposalconstruct/hide(var/intact)
set_dir(turn(dir, 180)) invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact
switch(ptype) update()
if(2)
ptype = 3
if(3) // flip and rotate verbs
ptype = 2 /obj/structure/disposalconstruct/verb/rotate()
if(9) set category = "Object"
ptype = 10 set name = "Rotate Pipe"
if(10) set src in view(1)
ptype = 9
if(usr.stat)
update() return
// returns the type path of disposalpipe corresponding to this item dtype if(anchored)
/obj/structure/disposalconstruct/proc/dpipetype() to_chat(usr, "You must unfasten the pipe before rotating it.")
switch(ptype) return
if(0,1)
return /obj/structure/disposalpipe/segment set_dir(turn(dir, -90))
if(2,3,4) update()
return /obj/structure/disposalpipe/junction
if(5) /obj/structure/disposalconstruct/verb/flip()
return /obj/structure/disposalpipe/trunk set category = "Object"
if(6) set name = "Flip Pipe"
return /obj/machinery/disposal set src in view(1)
if(7) if(usr.stat)
return /obj/structure/disposaloutlet return
if(8)
return /obj/machinery/disposal/deliveryChute if(anchored)
if(9) to_chat(usr, "You must unfasten the pipe before flipping it.")
switch(subtype) return
if(0)
return /obj/structure/disposalpipe/sortjunction do_a_flip()
if(1)
return /obj/structure/disposalpipe/sortjunction/wildcard /obj/structure/disposalconstruct/proc/do_a_flip()
if(2) set_dir(turn(dir, 180))
return /obj/structure/disposalpipe/sortjunction/untagged switch(ptype)
if(10) if(DISPOSAL_PIPE_JUNCTION)
switch(subtype) ptype = DISPOSAL_PIPE_JUNCTION_FLIPPED
if(0) if(DISPOSAL_PIPE_JUNCTION_FLIPPED)
return /obj/structure/disposalpipe/sortjunction/flipped ptype = DISPOSAL_PIPE_JUNCTION
if(1) if(DISPOSAL_PIPE_SORTER)
return /obj/structure/disposalpipe/sortjunction/wildcard/flipped ptype = DISPOSAL_PIPE_SORTER_FLIPPED
if(2) if(DISPOSAL_PIPE_SORTER_FLIPPED)
return /obj/structure/disposalpipe/sortjunction/untagged/flipped ptype = DISPOSAL_PIPE_SORTER
///// Z-Level stuff
if(11) update()
return /obj/structure/disposalpipe/up
if(12) // returns the type path of disposalpipe corresponding to this item dtype
return /obj/structure/disposalpipe/down /obj/structure/disposalconstruct/proc/dpipetype()
if(13) switch(ptype)
return /obj/structure/disposalpipe/tagger if(DISPOSAL_PIPE_STRAIGHT,DISPOSAL_PIPE_CORNER)
if(14) return /obj/structure/disposalpipe/segment
return /obj/structure/disposalpipe/tagger/partial if(DISPOSAL_PIPE_JUNCTION,DISPOSAL_PIPE_JUNCTION_FLIPPED,DISPOSAL_PIPE_JUNCTION_Y)
return return /obj/structure/disposalpipe/junction
if(DISPOSAL_PIPE_TRUNK)
return /obj/structure/disposalpipe/trunk
if(DISPOSAL_PIPE_BIN)
// attackby item return /obj/machinery/disposal
// wrench: (un)anchor if(DISPOSAL_PIPE_OUTLET)
// weldingtool: convert to real pipe return /obj/structure/disposaloutlet
/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user) if(DISPOSAL_PIPE_CHUTE)
var/nicetype = "pipe" return /obj/machinery/disposal/deliveryChute
var/ispipe = 0 // Indicates if we should change the level of this pipe if(DISPOSAL_PIPE_SORTER)
src.add_fingerprint(user) switch(subtype)
switch(ptype) if(DISPOSAL_SORT_NORMAL)
if(6) return /obj/structure/disposalpipe/sortjunction
nicetype = "disposal bin" if(DISPOSAL_SORT_WILDCARD)
if(7) return /obj/structure/disposalpipe/sortjunction/wildcard
nicetype = "disposal outlet" if(DISPOSAL_SORT_UNTAGGED)
if(8) return /obj/structure/disposalpipe/sortjunction/untagged
nicetype = "delivery chute" if(DISPOSAL_PIPE_SORTER_FLIPPED)
if(9, 10) switch(subtype)
switch(subtype) if(DISPOSAL_SORT_NORMAL)
if(0) return /obj/structure/disposalpipe/sortjunction/flipped
nicetype = "sorting pipe" if(DISPOSAL_SORT_WILDCARD)
if(1) return /obj/structure/disposalpipe/sortjunction/wildcard/flipped
nicetype = "wildcard sorting pipe" if(DISPOSAL_SORT_UNTAGGED)
if(2) return /obj/structure/disposalpipe/sortjunction/untagged/flipped
nicetype = "untagged sorting pipe" ///// Z-Level stuff
ispipe = 1 if(DISPOSAL_PIPE_UPWARD)
if(13) return /obj/structure/disposalpipe/up
nicetype = "tagging pipe" if(DISPOSAL_PIPE_DOWNWARD)
ispipe = 1 return /obj/structure/disposalpipe/down
if(14) ///// Z-Level stuff
nicetype = "partial tagging pipe" if(DISPOSAL_PIPE_TAGGER)
ispipe = 1 return /obj/structure/disposalpipe/tagger
else if(DISPOSAL_PIPE_TAGGER_PARTIAL)
nicetype = "pipe" return /obj/structure/disposalpipe/tagger/partial
ispipe = 1 return
var/turf/T = src.loc
if(!T.is_plating())
to_chat(user, "You can only attach the [nicetype] if the floor plating is removed.") // attackby item
return // wrench: (un)anchor
// weldingtool: convert to real pipe
var/obj/structure/disposalpipe/CP = locate() in T
/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user)
// wrench: (un)anchor var/nicetype = "pipe"
if(I.is_wrench()) var/ispipe = 0 // Indicates if we should change the level of this pipe
if(anchored) src.add_fingerprint(user)
anchored = 0 switch(ptype)
if(ispipe) if(DISPOSAL_PIPE_BIN)
level = 2 nicetype = "disposal bin"
density = 0 if(DISPOSAL_PIPE_OUTLET)
else nicetype = "disposal outlet"
density = 1 if(DISPOSAL_PIPE_CHUTE)
to_chat(user, "You detach the [nicetype] from the underfloor.") nicetype = "delivery chute"
else if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED)
if(ptype>=6 && ptype <= 8) // Disposal or outlet switch(subtype)
if(CP) // There's something there if(DISPOSAL_SORT_NORMAL)
if(!istype(CP,/obj/structure/disposalpipe/trunk)) nicetype = "sorting pipe"
to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") if(DISPOSAL_SORT_WILDCARD)
return nicetype = "wildcard sorting pipe"
else // Nothing under, fuck. if(DISPOSAL_SORT_UNTAGGED)
to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") nicetype = "untagged sorting pipe"
return ispipe = 1
else if(DISPOSAL_PIPE_TAGGER)
if(CP) nicetype = "tagging pipe"
update() ispipe = 1
var/pdir = CP.dpdir if(DISPOSAL_PIPE_TAGGER_PARTIAL)
if(istype(CP, /obj/structure/disposalpipe/broken)) nicetype = "partial tagging pipe"
pdir = CP.dir ispipe = 1
if(pdir & dpdir) else
to_chat(user, "There is already a [nicetype] at that location.") nicetype = "pipe"
return ispipe = 1
anchored = 1 var/turf/T = src.loc
if(ispipe) if(!T.is_plating())
level = 1 // We don't want disposal bins to disappear under the floors to_chat(user, "You can only attach the [nicetype] if the floor plating is removed.")
density = 0 return
else
density = 1 // We don't want disposal bins or outlets to go density 0 var/obj/structure/disposalpipe/CP = locate() in T
to_chat(user, "You attach the [nicetype] to the underfloor.")
playsound(loc, I.usesound, 100, 1) if(I.is_wrench())
update() if(anchored)
anchored = 0
// weldingtool: convert to real pipe if(ispipe)
else if(istype(I, /obj/item/weapon/weldingtool)) level = 2
if(anchored) density = 0
var/obj/item/weapon/weldingtool/W = I else
if(W.remove_fuel(0,user)) density = 1
playsound(src, W.usesound, 100, 1) to_chat(user, "You detach the [nicetype] from the underfloor.")
to_chat(user, "Welding the [nicetype] in place.") else
if(do_after(user, 20 * W.toolspeed)) if(ptype == DISPOSAL_PIPE_BIN || ptype == DISPOSAL_PIPE_OUTLET || ptype == DISPOSAL_PIPE_CHUTE) // Disposal or outlet
if(!src || !W.isOn()) return if(CP) // There's something there
to_chat(user, "The [nicetype] has been welded in place!") if(!istype(CP,/obj/structure/disposalpipe/trunk))
update() // TODO: Make this neat to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.")
if(ispipe) // Pipe return
else // Nothing under, fuck.
var/pipetype = dpipetype() to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.")
var/obj/structure/disposalpipe/P = new pipetype(src.loc) return
src.transfer_fingerprints_to(P) else
P.base_icon_state = base_state if(CP)
P.set_dir(dir) update()
P.dpdir = dpdir var/pdir = CP.dpdir
P.updateicon() if(istype(CP, /obj/structure/disposalpipe/broken))
pdir = CP.dir
//Needs some special treatment ;) if(pdir & dpdir)
if(ptype==9 || ptype==10) to_chat(user, "There is already a [nicetype] at that location.")
var/obj/structure/disposalpipe/sortjunction/SortP = P return
SortP.sortType = sortType
SortP.updatedir() anchored = 1
SortP.updatedesc() if(ispipe)
SortP.updatename() level = 1 // We don't want disposal bins to disappear under the floors
density = 0
else if(ptype==6) // Disposal bin else
var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) density = 1 // We don't want disposal bins or outlets to go density 0
src.transfer_fingerprints_to(P) to_chat(user, "You attach the [nicetype] to the underfloor.")
P.mode = 0 // start with pump off playsound(loc, I.usesound, 100, 1)
update()
else if(ptype==7) // Disposal outlet
var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) else if(istype(I, /obj/item/weapon/weldingtool))
src.transfer_fingerprints_to(P) if(anchored)
P.set_dir(dir) var/obj/item/weapon/weldingtool/W = I
var/obj/structure/disposalpipe/trunk/Trunk = CP if(W.remove_fuel(0,user))
Trunk.linked = P playsound(src, W.usesound, 100, 1)
to_chat(user, "Welding the [nicetype] in place.")
else if(ptype==8) // Disposal outlet if(do_after(user, 20 * W.toolspeed))
var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) if(!src || !W.isOn()) return
src.transfer_fingerprints_to(P) to_chat(user, "The [nicetype] has been welded in place!")
P.set_dir(dir) update() // TODO: Make this neat
if(ispipe) // Pipe
qdel(src)
return var/pipetype = dpipetype()
else var/obj/structure/disposalpipe/P = new pipetype(src.loc)
to_chat(user, "You need more welding fuel to complete this task.") src.transfer_fingerprints_to(P)
return P.base_icon_state = base_state
else P.set_dir(dir)
to_chat(user, "You need to attach it to the plating first!") P.dpdir = dpdir
return P.updateicon()
/obj/structure/disposalconstruct/hides_under_flooring() //Needs some special treatment ;)
if(anchored) if(ptype==DISPOSAL_PIPE_SORTER || ptype==DISPOSAL_PIPE_SORTER_FLIPPED)
return 1 var/obj/structure/disposalpipe/sortjunction/SortP = P
else SortP.sortType = sortType
return 0 SortP.updatedir()
SortP.updatedesc()
SortP.updatename()
else if(ptype==DISPOSAL_PIPE_BIN)
var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc)
src.transfer_fingerprints_to(P)
P.mode = 0 // start with pump off
else if(ptype==DISPOSAL_PIPE_OUTLET)
var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc)
src.transfer_fingerprints_to(P)
P.set_dir(dir)
var/obj/structure/disposalpipe/trunk/Trunk = CP
Trunk.linked = P
else if(ptype==DISPOSAL_PIPE_CHUTE)
var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc)
src.transfer_fingerprints_to(P)
P.set_dir(dir)
qdel(src)
return
else
to_chat(user, "You need more welding fuel to complete this task.")
return
else
to_chat(user, "You need to attach it to the plating first!")
return
/obj/structure/disposalconstruct/hides_under_flooring()
if(anchored)
return 1
else
return 0
/obj/structure/disposalconstruct/proc/is_pipe()
return (ptype != DISPOSAL_PIPE_BIN && ptype != DISPOSAL_PIPE_OUTLET && ptype != DISPOSAL_PIPE_CHUTE)
//helper proc that makes sure you can place the construct (i.e no dense objects stacking)
/obj/structure/disposalconstruct/proc/can_place()
if(is_pipe())
return TRUE
for(var/obj/structure/disposalconstruct/DC in get_turf(src))
if(DC == src)
continue
if(!DC.is_pipe()) //there's already a chute/outlet/bin there
return FALSE
return TRUE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 675 KiB

After

Width:  |  Height:  |  Size: 705 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -6997,24 +6997,30 @@
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/medical/chemistry) /area/medical/chemistry)
"apM" = ( "apM" = (
/obj/structure/closet/secure_closet/medical1, /obj/structure/table/reinforced,
/obj/item/weapon/storage/box/pillbottles, /obj/item/weapon/storage/box/beakers,
/turf/simulated/floor/tiled/white, /obj/item/weapon/reagent_containers/glass/beaker/large,
/area/medical/chemistry)
"apN" = (
/obj/structure/closet/secure_closet/chemical,
/obj/item/weapon/storage/box/pillbottles,
/obj/item/weapon/storage/box/pillbottles,
/obj/effect/floor_decal/corner/beige{ /obj/effect/floor_decal/corner/beige{
dir = 5 icon_state = "corner_white_full";
dir = 8
}, },
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"apO" = ( "apN" = (
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/machinery/chemical_dispenser/full,
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apO" = (
/obj/structure/sign/periodic{ /obj/structure/sign/periodic{
pixel_y = 32 pixel_y = 32
}, },
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"apP" = ( "apP" = (
@@ -7029,8 +7035,6 @@
/turf/simulated/floor/holofloor/tiled/dark, /turf/simulated/floor/holofloor/tiled/dark,
/area/medical/morgue) /area/medical/morgue)
"apQ" = ( "apQ" = (
/obj/structure/table/reinforced,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/item/device/radio/intercom{ /obj/item/device/radio/intercom{
desc = "Talk... listen through this."; desc = "Talk... listen through this.";
dir = 1; dir = 1;
@@ -7042,6 +7046,12 @@
/obj/machinery/light{ /obj/machinery/light{
dir = 1 dir = 1
}, },
/obj/structure/closet/secure_closet/chemical,
/obj/item/weapon/storage/box/pillbottles,
/obj/item/weapon/storage/box/pillbottles,
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"apR" = ( "apR" = (
@@ -7050,6 +7060,13 @@
/obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science,
/obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science,
/obj/item/clothing/glasses/science, /obj/item/clothing/glasses/science,
/obj/machinery/alarm{
frequency = 1441;
pixel_y = 22
},
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"apS" = ( "apS" = (
@@ -7061,11 +7078,17 @@
pixel_x = 0; pixel_x = 0;
pixel_y = 36 pixel_y = 36
}, },
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"apT" = ( "apT" = (
/obj/machinery/chemical_dispenser/full, /obj/machinery/chemical_dispenser/full,
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/effect/floor_decal/corner/beige/full{
dir = 1
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"apU" = ( "apU" = (
@@ -7526,6 +7549,12 @@
/obj/effect/floor_decal/corner/beige{ /obj/effect/floor_decal/corner/beige{
dir = 9 dir = 9
}, },
/obj/structure/bed/chair/office/light{
dir = 4
},
/obj/effect/landmark/start{
name = "Chemist"
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"aqV" = ( "aqV" = (
@@ -7539,15 +7568,6 @@
/obj/machinery/chem_master, /obj/machinery/chem_master,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"aqY" = (
/obj/structure/bed/chair/office/light{
dir = 4
},
/obj/effect/landmark/start{
name = "Chemist"
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"aqZ" = ( "aqZ" = (
/obj/structure/table/reinforced, /obj/structure/table/reinforced,
/obj/item/weapon/storage/box/beakers, /obj/item/weapon/storage/box/beakers,
@@ -7572,6 +7592,9 @@
icon_state = "tube1"; icon_state = "tube1";
pixel_y = 0 pixel_y = 0
}, },
/obj/effect/floor_decal/corner/beige{
dir = 6
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"arc" = ( "arc" = (
@@ -8544,10 +8567,14 @@
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbaylower) /area/medical/medbaylower)
"asN" = ( "asN" = (
/obj/machinery/smartfridge/chemistry/chemvator/down, /obj/machinery/door/firedoor,
/obj/structure/grille,
/obj/structure/window/reinforced/full,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/medical/chemistry) /area/medical/chemistry)
"asO" = ( "asO" = (
/obj/structure/closet/secure_closet/medical1,
/obj/item/weapon/storage/box/pillbottles,
/obj/effect/floor_decal/corner/beige/full, /obj/effect/floor_decal/corner/beige/full,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
@@ -8590,6 +8617,10 @@
/obj/effect/floor_decal/corner/beige{ /obj/effect/floor_decal/corner/beige{
dir = 10 dir = 10
}, },
/obj/machinery/camera/network/medbay{
c_tag = "Medbay Chemistry";
dir = 1
},
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
"asS" = ( "asS" = (
@@ -14793,14 +14824,9 @@
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/starboard) /area/maintenance/starboard)
"aFR" = ( "aFR" = (
/obj/machinery/chemical_dispenser/full, /obj/machinery/smartfridge/chemistry/chemvator/down,
/obj/structure/table/reinforced, /obj/effect/floor_decal/corner/beige{
/obj/machinery/camera/network/medbay{ dir = 5
c_tag = "Medbay Chemistry"
},
/obj/machinery/alarm{
frequency = 1441;
pixel_y = 22
}, },
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/chemistry) /area/medical/chemistry)
@@ -40091,6 +40117,12 @@
}, },
/turf/simulated/wall, /turf/simulated/wall,
/area/crew_quarters/longue_area) /area/crew_quarters/longue_area)
"gTr" = (
/obj/effect/floor_decal/corner/beige{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"mbM" = ( "mbM" = (
/obj/structure/table/glass, /obj/structure/table/glass,
/obj/structure/cable/green{ /obj/structure/cable/green{
@@ -75424,7 +75456,7 @@ any
aol aol
aoX aoX
apN apN
aqV aqX
arT arT
asP asP
aoX aoX
@@ -75928,7 +75960,7 @@ age
afF afF
aoX aoX
aFR aFR
aqX aqV
arV arV
asR asR
aoX aoX
@@ -76180,7 +76212,7 @@ age
afG afG
aoX aoX
apQ apQ
aqY aqV
arV arV
asS asS
aoX aoX
@@ -76937,7 +76969,7 @@ alk
aoX aoX
apT apT
arb arb
aqV gTr
aFx aFx
aoX aoX
auJ auJ

View File

@@ -6959,14 +6959,32 @@
dir = 8 dir = 8
}, },
/obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/atmospherics/unary/vent_pump/on,
/obj/machinery/bodyscanner, /obj/structure/closet/secure_closet/medical_wall{
name = "O- Blood Locker";
pixel_x = 0;
pixel_y = 32
},
/obj/machinery/iv_drip,
/obj/item/weapon/reagent_containers/blood/OMinus,
/obj/item/weapon/reagent_containers/blood/OMinus,
/obj/item/weapon/reagent_containers/blood/OMinus,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbaymain) /area/medical/medbaymain)
"aob" = ( "aob" = (
/obj/machinery/body_scanconsole,
/obj/effect/floor_decal/corner/paleblue{ /obj/effect/floor_decal/corner/paleblue{
dir = 6 dir = 6
}, },
/obj/structure/table/glass,
/obj/item/weapon/reagent_containers/spray/cleaner{
pixel_x = -2;
pixel_y = -2
},
/obj/item/weapon/reagent_containers/spray/cleaner{
pixel_x = -2;
pixel_y = -2
},
/obj/item/device/defib_kit/loaded,
/obj/item/device/defib_kit/loaded,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbaymain) /area/medical/medbaymain)
"aoc" = ( "aoc" = (
@@ -7786,12 +7804,7 @@
/obj/effect/floor_decal/corner/paleblue{ /obj/effect/floor_decal/corner/paleblue{
dir = 6 dir = 6
}, },
/obj/structure/table/glass, /obj/machinery/smartfridge/chemistry/chemvator,
/obj/item/weapon/reagent_containers/spray/cleaner{
pixel_x = -2;
pixel_y = -2
},
/obj/item/device/defib_kit/loaded,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbaymain) /area/medical/medbaymain)
"apC" = ( "apC" = (
@@ -8232,7 +8245,7 @@
dir = 4; dir = 4;
icon_state = "pipe-c" icon_state = "pipe-c"
}, },
/obj/machinery/smartfridge/chemistry/chemvator, /obj/machinery/bodyscanner,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbaymain) /area/medical/medbaymain)
"aql" = ( "aql" = (
@@ -8605,8 +8618,6 @@
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbay) /area/medical/medbay)
"aqS" = ( "aqS" = (
/obj/structure/table/glass,
/obj/item/weapon/reagent_containers/spray/cleaner,
/obj/effect/floor_decal/corner/paleblue{ /obj/effect/floor_decal/corner/paleblue{
dir = 5 dir = 5
}, },
@@ -9335,15 +9346,6 @@
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/medbaymain) /area/medical/medbaymain)
"asb" = ( "asb" = (
/obj/machinery/iv_drip,
/obj/structure/closet/secure_closet/medical_wall{
name = "O- Blood Locker";
pixel_x = 0;
pixel_y = -32
},
/obj/item/weapon/reagent_containers/blood/OMinus,
/obj/item/weapon/reagent_containers/blood/OMinus,
/obj/item/weapon/reagent_containers/blood/OMinus,
/obj/effect/floor_decal/corner/paleblue{ /obj/effect/floor_decal/corner/paleblue{
dir = 10 dir = 10
}, },
@@ -13271,6 +13273,8 @@
/obj/effect/floor_decal/corner/pink{ /obj/effect/floor_decal/corner/pink{
dir = 4 dir = 4
}, },
/obj/item/weapon/reagent_containers/spray/cleaner,
/obj/structure/table/standard,
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/medical/surgery_hallway) /area/medical/surgery_hallway)
"azi" = ( "azi" = (
@@ -14893,7 +14897,7 @@
opacity = 0 opacity = 0
}, },
/obj/structure/window/reinforced/polarized/full{ /obj/structure/window/reinforced/polarized/full{
id = "surgeryobs2" id = "surgeryobs"
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/medical/surgery) /area/medical/surgery)
@@ -34238,20 +34242,28 @@
/area/security/detectives_office) /area/security/detectives_office)
"blQ" = ( "blQ" = (
/obj/machinery/computer/security/wooden_tv, /obj/machinery/computer/security/wooden_tv,
/obj/machinery/button/windowtint{
id = "detectivetint";
pixel_x = 0;
pixel_y = 26
},
/turf/simulated/floor/carpet, /turf/simulated/floor/carpet,
/area/security/detectives_office) /area/security/detectives_office)
"blR" = ( "blR" = (
/obj/structure/table/woodentable, /obj/structure/table/woodentable,
/obj/item/device/flashlight/lamp/green, /obj/item/device/flashlight/lamp/green,
/obj/structure/window/reinforced/polarized{ /obj/structure/window/reinforced/polarized{
dir = 4 dir = 4;
id = "detectivetint"
}, },
/turf/simulated/floor/carpet, /turf/simulated/floor/carpet,
/area/security/detectives_office) /area/security/detectives_office)
"blS" = ( "blS" = (
/obj/structure/grille, /obj/structure/grille,
/obj/machinery/door/firedoor, /obj/machinery/door/firedoor,
/obj/structure/window/reinforced/polarized/full, /obj/structure/window/reinforced/polarized/full{
id = "detectivetint"
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/security/detectives_office) /area/security/detectives_office)
"blT" = ( "blT" = (
@@ -35102,7 +35114,8 @@
pixel_y = 2 pixel_y = 2
}, },
/obj/structure/window/reinforced/polarized{ /obj/structure/window/reinforced/polarized{
dir = 4 dir = 4;
id = "detectivetint"
}, },
/turf/simulated/floor/carpet, /turf/simulated/floor/carpet,
/area/security/detectives_office) /area/security/detectives_office)
@@ -35708,7 +35721,8 @@
/obj/item/weapon/pen, /obj/item/weapon/pen,
/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/sunglasses,
/obj/structure/window/reinforced/polarized{ /obj/structure/window/reinforced/polarized{
dir = 4 dir = 4;
id = "detectivetint"
}, },
/turf/simulated/floor/carpet, /turf/simulated/floor/carpet,
/area/security/detectives_office) /area/security/detectives_office)
@@ -56138,14 +56152,6 @@
/obj/machinery/mass_driver{ /obj/machinery/mass_driver{
id = "enginecore" id = "enginecore"
}, },
/obj/machinery/button/remote/airlock{
desc = "A remote control switch for the brig foyer.";
id = "medbayfoyer";
name = "Medbay Foyer Doors";
pixel_x = 26;
pixel_y = -6;
req_access = list()
},
/turf/simulated/floor/greengrid/nitrogen, /turf/simulated/floor/greengrid/nitrogen,
/area/engineering/engine_room) /area/engineering/engine_room)
"bZn" = ( "bZn" = (
@@ -56530,27 +56536,11 @@
/area/engineering/engine_room) /area/engineering/engine_room)
"bZY" = ( "bZY" = (
/obj/effect/floor_decal/industrial/warning/cee, /obj/effect/floor_decal/industrial/warning/cee,
/obj/machinery/button/remote/airlock{
desc = "A remote control switch for the brig foyer.";
id = "medbayfoyer";
name = "Medbay Foyer Doors";
pixel_x = 26;
pixel_y = -6;
req_access = list()
},
/turf/simulated/floor/reinforced/nitrogen{ /turf/simulated/floor/reinforced/nitrogen{
nitrogen = 82.1472 nitrogen = 82.1472
}, },
/area/engineering/engine_room) /area/engineering/engine_room)
"bZZ" = ( "bZZ" = (
/obj/machinery/button/remote/airlock{
desc = "A remote control switch for the brig foyer.";
id = "medbayfoyer";
name = "Medbay Foyer Doors";
pixel_x = 26;
pixel_y = -6;
req_access = list()
},
/turf/simulated/floor/greengrid/nitrogen, /turf/simulated/floor/greengrid/nitrogen,
/area/engineering/engine_room) /area/engineering/engine_room)
"caa" = ( "caa" = (
@@ -60213,17 +60203,13 @@
/obj/structure/sign/directions/science, /obj/structure/sign/directions/science,
/turf/simulated/wall, /turf/simulated/wall,
/area/storage/primary) /area/storage/primary)
"gHq" = ( "ikW" = (
/obj/machinery/button/remote/airlock{ /obj/structure/disposalpipe/segment{
desc = "A remote control switch for the brig foyer."; dir = 4
id = "medbayfoyer";
name = "Medbay Foyer Doors";
pixel_x = 26;
pixel_y = -6;
req_access = list()
}, },
/turf/simulated/wall/r_lead, /obj/machinery/body_scanconsole,
/area/borealis2/outdoors/grounds) /turf/simulated/floor/tiled/white,
/area/medical/medbaymain)
"nKF" = ( "nKF" = (
/obj/structure/sign/directions/security{ /obj/structure/sign/directions/security{
icon_state = "direction_sec"; icon_state = "direction_sec";
@@ -60231,21 +60217,6 @@
}, },
/turf/simulated/wall/r_wall, /turf/simulated/wall/r_wall,
/area/hallway/primary/central_one) /area/hallway/primary/central_one)
"oso" = (
/obj/effect/floor_decal/snow/floor/edges{
dir = 8
},
/obj/effect/overlay/snow/floor,
/obj/machinery/button/remote/airlock{
desc = "A remote control switch for the brig foyer.";
id = "medbayfoyer";
name = "Medbay Foyer Doors";
pixel_x = 26;
pixel_y = -6;
req_access = list()
},
/turf/simulated/floor/plating/snow/plating,
/area/borealis2/outdoors/grounds)
"oRX" = ( "oRX" = (
/obj/structure/grille, /obj/structure/grille,
/obj/structure/window/reinforced/full, /obj/structure/window/reinforced/full,
@@ -60260,17 +60231,6 @@
/obj/structure/sign/directions/security, /obj/structure/sign/directions/security,
/turf/simulated/wall/r_wall, /turf/simulated/wall/r_wall,
/area/hallway/primary/central_one) /area/hallway/primary/central_one)
"qts" = (
/obj/machinery/button/remote/airlock{
desc = "A remote control switch for the brig foyer.";
id = "medbayfoyer";
name = "Medbay Foyer Doors";
pixel_x = 26;
pixel_y = -6;
req_access = list()
},
/turf/simulated/wall/r_wall,
/area/engineering/engine_room)
"tbF" = ( "tbF" = (
/obj/structure/grille, /obj/structure/grille,
/obj/structure/window/reinforced/full, /obj/structure/window/reinforced/full,
@@ -90907,8 +90867,8 @@ bQL
bSi bSi
bTz bTz
bTz bTz
bRa bTz
bRa bVh
bRa bRa
bRa bRa
bVt bVt
@@ -92676,9 +92636,9 @@ bXj
bYn bYn
bZl bZl
bZY bZY
qts bPE
gHq bPM
oso cbo
cbo cbo
cbo cbo
cbo cbo
@@ -94610,7 +94570,7 @@ anh
anX anX
aoO aoO
apx apx
aql ikW
arf arf
asa asa
asW asW

View File

@@ -1068,6 +1068,7 @@
#include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\pipe_painter.dm"
#include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\powersink.dm"
#include "code\game\objects\items\weapons\RPD.dm"
#include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\scanners_vr.dm" #include "code\game\objects\items\devices\scanners_vr.dm"
#include "code\game\objects\items\devices\spy_bug.dm" #include "code\game\objects\items\devices\spy_bug.dm"