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_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.
//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.
#define STANDARD_ATMOS_CHOOSE_NODE(node_num, 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
name = "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)
/obj/machinery/pipedispenser/disposal/attack_hand(user as mob)
if(..())
/obj/machinery/pipedispenser/disposal/interact(mob/user)
user.set_machine(src)
var/list/lines = list()
for(var/category in disposal_pipe_recipes)
lines += "<b>[category]:</b><BR>"
for(var/datum/pipe_recipe/PI in disposal_pipe_recipes[category])
lines += PI.Render(src)
var/dat = lines.Join()
var/datum/browser/popup = new(user, "pipedispenser", name, 300, 500, src)
popup.set_content("<TT>[dat]</TT>")
popup.open()
return
///// Z-Level stuff
var/dat = {"<b>Disposal Pipes</b><br><br>
<A href='?src=\ref[src];dmake=0'>Pipe</A><BR>
<A href='?src=\ref[src];dmake=1'>Bent Pipe</A><BR>
<A href='?src=\ref[src];dmake=2'>Junction</A><BR>
<A href='?src=\ref[src];dmake=3'>Y-Junction</A><BR>
<A href='?src=\ref[src];dmake=4'>Trunk</A><BR>
<A href='?src=\ref[src];dmake=5'>Bin</A><BR>
<A href='?src=\ref[src];dmake=6'>Outlet</A><BR>
<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
// 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk
/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(..())
return
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["dmake"])
if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=pipedispenser")
return
if(!wait)
var/p_type = text2num(href_list["dmake"])
var/obj/structure/disposalconstruct/C = new (src.loc)
switch(p_type)
if(0)
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
var/ptype = text2num(href_list["dmake"])
var/pdir = (href_list["dir"] ? text2num(href_list["dir"]) : NORTH)
var/psub = (href_list["sort"] ? text2num(href_list["sort"]) : 0)
var/obj/structure/disposalconstruct/C = new (src.loc, ptype, pdir, 0, psub)
C.add_fingerprint(usr)
C.update()
wait = 1

View File

@@ -3,21 +3,23 @@
//
var/global/list/atmos_pipe_recipes = null
var/global/list/disposal_pipe_recipes = null
var/global/list/all_pipe_recipes = null
/hook/startup/proc/init_pipe_recipes()
global.atmos_pipe_recipes = list(
"Pipes" = list(
new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple),
new /datum/pipe_recipe/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold),
new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple, TRUE),
new /datum/pipe_recipe/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold, TRUE),
new /datum/pipe_recipe/pipe("Manual Valve", /obj/machinery/atmospherics/valve),
new /datum/pipe_recipe/pipe("Digital Valve", /obj/machinery/atmospherics/valve/digital),
new /datum/pipe_recipe/pipe("Pipe cap", /obj/machinery/atmospherics/pipe/cap),
new /datum/pipe_recipe/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w),
new /datum/pipe_recipe/pipe("Pipe cap", /obj/machinery/atmospherics/pipe/cap, TRUE),
new /datum/pipe_recipe/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w, TRUE),
new /datum/pipe_recipe/pipe("Manual T-Valve", /obj/machinery/atmospherics/tvalve),
new /datum/pipe_recipe/pipe("Digital T-Valve", /obj/machinery/atmospherics/tvalve/digital),
new /datum/pipe_recipe/pipe("Upward Pipe", /obj/machinery/atmospherics/pipe/zpipe/up),
new /datum/pipe_recipe/pipe("Downward Pipe", /obj/machinery/atmospherics/pipe/zpipe/down),
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),
new /datum/pipe_recipe/pipe("Universal Pipe Adaptor",/obj/machinery/atmospherics/pipe/simple/visible/universal, TRUE),
),
"Devices" = list(
new /datum/pipe_recipe/pipe("Connector", /obj/machinery/atmospherics/portables_connector),
@@ -26,8 +28,7 @@ var/global/list/atmos_pipe_recipes = null
new /datum/pipe_recipe/pipe("Injector", /obj/machinery/atmospherics/unary/outlet_injector),
new /datum/pipe_recipe/pipe("Gas Pump", /obj/machinery/atmospherics/binary/pump),
new /datum/pipe_recipe/pipe("Pressure Regulator", /obj/machinery/atmospherics/binary/passive_gate),
new /datum/pipe_recipe/pipe("High Power Gas Pump",/obj/machinery/atmospherics/binary/pump/high_power),
//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("High Power Gas Pump", /obj/machinery/atmospherics/binary/pump/high_power),
new /datum/pipe_recipe/pipe("Scrubber", /obj/machinery/atmospherics/unary/vent_scrubber),
new /datum/pipe_recipe/meter("Meter"),
new /datum/pipe_recipe/pipe("Gas Filter", /obj/machinery/atmospherics/trinary/atmos_filter),
@@ -45,6 +46,26 @@ var/global/list/atmos_pipe_recipes = null
new /datum/pipe_recipe/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple/insulated),
)
)
global.disposal_pipe_recipes = list(
"Disposal Pipes" = list(
new /datum/pipe_recipe/disposal("Pipe", DISPOSAL_PIPE_STRAIGHT, "conpipe-s", PIPE_STRAIGHT),
new /datum/pipe_recipe/disposal("Bent Pipe", DISPOSAL_PIPE_CORNER, "conpipe-c"),
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"),
new /datum/pipe_recipe/disposal("Sort Junction", DISPOSAL_PIPE_SORTER, "conpipe-j1s", PIPE_TRIN_M, "conpipe-j2s", DISPOSAL_SORT_NORMAL),
new /datum/pipe_recipe/disposal("Sort Junction (Wildcard)",DISPOSAL_PIPE_SORTER, "conpipe-j1s", PIPE_TRIN_M, "conpipe-j2s", DISPOSAL_SORT_WILDCARD),
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),
new /datum/pipe_recipe/disposal("Tagger (Partial)", DISPOSAL_PIPE_TAGGER_PARTIAL, "pipe-tagger-partial", PIPE_STRAIGHT),
new /datum/pipe_recipe/disposal("Trunk", DISPOSAL_PIPE_TRUNK, "conpipe-t"),
new /datum/pipe_recipe/disposal("Upwards", DISPOSAL_PIPE_UPWARD, "pipe-u"),
new /datum/pipe_recipe/disposal("Downwards", DISPOSAL_PIPE_DOWNWARD, "pipe-d"),
new /datum/pipe_recipe/disposal("Bin", DISPOSAL_PIPE_BIN, "disposal", PIPE_ONEDIR),
new /datum/pipe_recipe/disposal("Outlet", DISPOSAL_PIPE_OUTLET, "outlet"),
new /datum/pipe_recipe/disposal("Chute", DISPOSAL_PIPE_CHUTE, "intake"),
)
)
global.all_pipe_recipes = disposal_pipe_recipes + atmos_pipe_recipes
return TRUE
//
@@ -54,7 +75,13 @@ var/global/list/atmos_pipe_recipes = null
//
/datum/pipe_recipe
var/name = "Abstract Pipe (fixme)" // Recipe name
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.
var/icon_state // This tells the RPD what kind of pipe icon to render for the preview.
var/icon_state_m // This stores the mirrored version of the regular state (if available).
var/dirtype // If using an RPD, this tells more about what previews to show.
var/subtype = 0 // Used for certain disposals pipes types.
var/paintable = FALSE // If TRUE, allow the RPD to paint this pipe.
// Render an HTML link to select this pipe type. Returns text.
/datum/pipe_recipe/proc/Render(dispenser)
@@ -69,13 +96,16 @@ var/global/list/atmos_pipe_recipes = null
//
/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.
/datum/pipe_recipe/pipe/New(var/label, var/obj/machinery/atmospherics/path)
/datum/pipe_recipe/pipe/New(var/label, var/obj/machinery/atmospherics/path, var/colorable=FALSE)
name = label
pipe_type = path
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)
@@ -95,9 +125,40 @@ var/global/list/atmos_pipe_recipes = null
//
/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/shoes/boots/winter/engineering,
/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()
if(prob(50))
@@ -138,7 +139,8 @@
/obj/item/taperoll/atmos,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/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()
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/weapon/gripper/no_use/loader(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/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/floor_painter(src)
src.modules += new /obj/item/device/geiger(src)
src.modules += new /obj/item/weapon/pipe_dispenser(src) //YW changes
//YW changes end
src.emag = new /obj/item/weapon/dogborg/pounce(src)

View File

@@ -14,71 +14,102 @@
level = 2
var/sortType = ""
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/dpdir = 0 // directions as disposalpipe
var/base_state = "pipe-s"
// update iconstate and dpdir due to dir and type
/obj/structure/disposalconstruct/New(var/newturf, var/newtype, var/newdir, var/flipped, var/newsubtype)
..(newturf)
ptype = newtype
dir = newdir
if(ptype == DISPOSAL_PIPE_STRAIGHT && dir in cornerdirs)
ptype = DISPOSAL_PIPE_CORNER
switch(dir)
if(NORTHWEST)
dir = WEST
if(NORTHEAST)
dir = NORTH
if(SOUTHWEST)
dir = SOUTH
if(SOUTHEAST)
dir = EAST
switch(ptype)
if(DISPOSAL_PIPE_BIN, DISPOSAL_PIPE_OUTLET, DISPOSAL_PIPE_CHUTE)
density = 1
if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED)
subtype = newsubtype
if(flipped)
do_a_flip()
else
update() // do_a_flip() calls update anyway, so, lazy way of catching unupdated pipe!
// update iconstate and dpdir due to dir and type
/obj/structure/disposalconstruct/proc/update()
var/flip = turn(dir, 180)
var/left = turn(dir, 90)
var/right = turn(dir, -90)
switch(ptype)
if(0)
if(DISPOSAL_PIPE_STRAIGHT)
base_state = "pipe-s"
dpdir = dir | flip
if(1)
if(DISPOSAL_PIPE_CORNER)
base_state = "pipe-c"
dpdir = dir | right
if(2)
if(DISPOSAL_PIPE_JUNCTION)
base_state = "pipe-j1"
dpdir = dir | right | flip
if(3)
if(DISPOSAL_PIPE_JUNCTION_FLIPPED)
base_state = "pipe-j2"
dpdir = dir | left | flip
if(4)
if(DISPOSAL_PIPE_JUNCTION_Y)
base_state = "pipe-y"
dpdir = dir | left | right
if(5)
if(DISPOSAL_PIPE_TRUNK)
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(DISPOSAL_PIPE_BIN)
if(anchored)
base_state = "disposal"
else
base_state = "condisposal"
if(7)
if(DISPOSAL_PIPE_OUTLET)
base_state = "outlet"
dpdir = dir
if(8)
if(DISPOSAL_PIPE_CHUTE)
base_state = "intake"
dpdir = dir
if(9)
if(DISPOSAL_PIPE_SORTER)
base_state = "pipe-j1s"
dpdir = dir | right | flip
if(10)
if(DISPOSAL_PIPE_SORTER_FLIPPED)
base_state = "pipe-j2s"
dpdir = dir | left | flip
///// Z-Level stuff
if(11)
if(DISPOSAL_PIPE_UPWARD)
base_state = "pipe-u"
dpdir = dir
if(12)
if(DISPOSAL_PIPE_DOWNWARD)
base_state = "pipe-d"
dpdir = dir
if(13)
///// Z-Level stuff
if(DISPOSAL_PIPE_TAGGER)
base_state = "pipe-tagger"
dpdir = dir | flip
if(14)
if(DISPOSAL_PIPE_TAGGER_PARTIAL)
base_state = "pipe-tagger-partial"
dpdir = dir | flip
///// Z-Level stuff
if(!(ptype in list(6, 7, 8, 11, 12, 13, 14)))
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)))
///// Z-Level stuff
icon_state = "con[base_state]"
else
icon_state = base_state
@@ -97,9 +128,9 @@
// flip and rotate verbs
/obj/structure/disposalconstruct/verb/rotate_clockwise()
/obj/structure/disposalconstruct/verb/rotate()
set category = "Object"
set name = "Rotate Pipe Clockwise"
set name = "Rotate Pipe"
set src in view(1)
if(usr.stat)
@@ -109,7 +140,7 @@
to_chat(usr, "You must unfasten the pipe before rotating it.")
return
src.set_dir(turn(src.dir, 270))
set_dir(turn(dir, -90))
update()
/obj/structure/disposalconstruct/verb/flip()
@@ -123,58 +154,62 @@
to_chat(usr, "You must unfasten the pipe before flipping it.")
return
do_a_flip()
/obj/structure/disposalconstruct/proc/do_a_flip()
set_dir(turn(dir, 180))
switch(ptype)
if(2)
ptype = 3
if(3)
ptype = 2
if(9)
ptype = 10
if(10)
ptype = 9
if(DISPOSAL_PIPE_JUNCTION)
ptype = DISPOSAL_PIPE_JUNCTION_FLIPPED
if(DISPOSAL_PIPE_JUNCTION_FLIPPED)
ptype = DISPOSAL_PIPE_JUNCTION
if(DISPOSAL_PIPE_SORTER)
ptype = DISPOSAL_PIPE_SORTER_FLIPPED
if(DISPOSAL_PIPE_SORTER_FLIPPED)
ptype = DISPOSAL_PIPE_SORTER
update()
// returns the type path of disposalpipe corresponding to this item dtype
/obj/structure/disposalconstruct/proc/dpipetype()
switch(ptype)
if(0,1)
if(DISPOSAL_PIPE_STRAIGHT,DISPOSAL_PIPE_CORNER)
return /obj/structure/disposalpipe/segment
if(2,3,4)
if(DISPOSAL_PIPE_JUNCTION,DISPOSAL_PIPE_JUNCTION_FLIPPED,DISPOSAL_PIPE_JUNCTION_Y)
return /obj/structure/disposalpipe/junction
if(5)
if(DISPOSAL_PIPE_TRUNK)
return /obj/structure/disposalpipe/trunk
if(6)
if(DISPOSAL_PIPE_BIN)
return /obj/machinery/disposal
if(7)
if(DISPOSAL_PIPE_OUTLET)
return /obj/structure/disposaloutlet
if(8)
if(DISPOSAL_PIPE_CHUTE)
return /obj/machinery/disposal/deliveryChute
if(9)
if(DISPOSAL_PIPE_SORTER)
switch(subtype)
if(0)
if(DISPOSAL_SORT_NORMAL)
return /obj/structure/disposalpipe/sortjunction
if(1)
if(DISPOSAL_SORT_WILDCARD)
return /obj/structure/disposalpipe/sortjunction/wildcard
if(2)
if(DISPOSAL_SORT_UNTAGGED)
return /obj/structure/disposalpipe/sortjunction/untagged
if(10)
if(DISPOSAL_PIPE_SORTER_FLIPPED)
switch(subtype)
if(0)
if(DISPOSAL_SORT_NORMAL)
return /obj/structure/disposalpipe/sortjunction/flipped
if(1)
if(DISPOSAL_SORT_WILDCARD)
return /obj/structure/disposalpipe/sortjunction/wildcard/flipped
if(2)
if(DISPOSAL_SORT_UNTAGGED)
return /obj/structure/disposalpipe/sortjunction/untagged/flipped
///// Z-Level stuff
if(11)
if(DISPOSAL_PIPE_UPWARD)
return /obj/structure/disposalpipe/up
if(12)
if(DISPOSAL_PIPE_DOWNWARD)
return /obj/structure/disposalpipe/down
if(13)
///// Z-Level stuff
if(DISPOSAL_PIPE_TAGGER)
return /obj/structure/disposalpipe/tagger
if(14)
if(DISPOSAL_PIPE_TAGGER_PARTIAL)
return /obj/structure/disposalpipe/tagger/partial
return
@@ -183,30 +218,31 @@
// attackby item
// wrench: (un)anchor
// weldingtool: convert to real pipe
/obj/structure/disposalconstruct/attackby(var/obj/item/I, var/mob/user)
var/nicetype = "pipe"
var/ispipe = 0 // Indicates if we should change the level of this pipe
src.add_fingerprint(user)
switch(ptype)
if(6)
if(DISPOSAL_PIPE_BIN)
nicetype = "disposal bin"
if(7)
if(DISPOSAL_PIPE_OUTLET)
nicetype = "disposal outlet"
if(8)
if(DISPOSAL_PIPE_CHUTE)
nicetype = "delivery chute"
if(9, 10)
if(DISPOSAL_PIPE_SORTER, DISPOSAL_PIPE_SORTER_FLIPPED)
switch(subtype)
if(0)
if(DISPOSAL_SORT_NORMAL)
nicetype = "sorting pipe"
if(1)
if(DISPOSAL_SORT_WILDCARD)
nicetype = "wildcard sorting pipe"
if(2)
if(DISPOSAL_SORT_UNTAGGED)
nicetype = "untagged sorting pipe"
ispipe = 1
if(13)
if(DISPOSAL_PIPE_TAGGER)
nicetype = "tagging pipe"
ispipe = 1
if(14)
if(DISPOSAL_PIPE_TAGGER_PARTIAL)
nicetype = "partial tagging pipe"
ispipe = 1
else
@@ -220,7 +256,6 @@
var/obj/structure/disposalpipe/CP = locate() in T
// wrench: (un)anchor
if(I.is_wrench())
if(anchored)
anchored = 0
@@ -231,7 +266,7 @@
density = 1
to_chat(user, "You detach the [nicetype] from the underfloor.")
else
if(ptype>=6 && ptype <= 8) // Disposal or outlet
if(ptype == DISPOSAL_PIPE_BIN || ptype == DISPOSAL_PIPE_OUTLET || ptype == DISPOSAL_PIPE_CHUTE) // Disposal or outlet
if(CP) // There's something there
if(!istype(CP,/obj/structure/disposalpipe/trunk))
to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.")
@@ -259,7 +294,6 @@
playsound(loc, I.usesound, 100, 1)
update()
// weldingtool: convert to real pipe
else if(istype(I, /obj/item/weapon/weldingtool))
if(anchored)
var/obj/item/weapon/weldingtool/W = I
@@ -281,26 +315,28 @@
P.updateicon()
//Needs some special treatment ;)
if(ptype==9 || ptype==10)
if(ptype==DISPOSAL_PIPE_SORTER || ptype==DISPOSAL_PIPE_SORTER_FLIPPED)
var/obj/structure/disposalpipe/sortjunction/SortP = P
SortP.sortType = sortType
SortP.updatedir()
SortP.updatedesc()
SortP.updatename()
else if(ptype==6) // Disposal bin
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==7) // Disposal outlet
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==8) // Disposal outlet
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)
@@ -319,3 +355,20 @@
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,
/area/medical/chemistry)
"apM" = (
/obj/structure/closet/secure_closet/medical1,
/obj/item/weapon/storage/box/pillbottles,
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apN" = (
/obj/structure/closet/secure_closet/chemical,
/obj/item/weapon/storage/box/pillbottles,
/obj/item/weapon/storage/box/pillbottles,
/obj/structure/table/reinforced,
/obj/item/weapon/storage/box/beakers,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/effect/floor_decal/corner/beige{
dir = 5
icon_state = "corner_white_full";
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apO" = (
"apN" = (
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/obj/structure/table/reinforced,
/obj/machinery/chemical_dispenser/full,
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apO" = (
/obj/structure/sign/periodic{
pixel_y = 32
},
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apP" = (
@@ -7029,8 +7035,6 @@
/turf/simulated/floor/holofloor/tiled/dark,
/area/medical/morgue)
"apQ" = (
/obj/structure/table/reinforced,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/item/device/radio/intercom{
desc = "Talk... listen through this.";
dir = 1;
@@ -7042,6 +7046,12 @@
/obj/machinery/light{
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,
/area/medical/chemistry)
"apR" = (
@@ -7050,6 +7060,13 @@
/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,
/area/medical/chemistry)
"apS" = (
@@ -7061,11 +7078,17 @@
pixel_x = 0;
pixel_y = 36
},
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apT" = (
/obj/machinery/chemical_dispenser/full,
/obj/structure/table/reinforced,
/obj/effect/floor_decal/corner/beige/full{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"apU" = (
@@ -7526,6 +7549,12 @@
/obj/effect/floor_decal/corner/beige{
dir = 9
},
/obj/structure/bed/chair/office/light{
dir = 4
},
/obj/effect/landmark/start{
name = "Chemist"
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"aqV" = (
@@ -7539,15 +7568,6 @@
/obj/machinery/chem_master,
/turf/simulated/floor/tiled/white,
/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" = (
/obj/structure/table/reinforced,
/obj/item/weapon/storage/box/beakers,
@@ -7572,6 +7592,9 @@
icon_state = "tube1";
pixel_y = 0
},
/obj/effect/floor_decal/corner/beige{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"arc" = (
@@ -8544,10 +8567,14 @@
/turf/simulated/floor/tiled/white,
/area/medical/medbaylower)
"asN" = (
/obj/machinery/smartfridge/chemistry/chemvator/down,
/obj/machinery/door/firedoor,
/obj/structure/grille,
/obj/structure/window/reinforced/full,
/turf/simulated/floor/plating,
/area/medical/chemistry)
"asO" = (
/obj/structure/closet/secure_closet/medical1,
/obj/item/weapon/storage/box/pillbottles,
/obj/effect/floor_decal/corner/beige/full,
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
@@ -8590,6 +8617,10 @@
/obj/effect/floor_decal/corner/beige{
dir = 10
},
/obj/machinery/camera/network/medbay{
c_tag = "Medbay Chemistry";
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"asS" = (
@@ -14793,14 +14824,9 @@
/turf/simulated/floor/plating,
/area/maintenance/starboard)
"aFR" = (
/obj/machinery/chemical_dispenser/full,
/obj/structure/table/reinforced,
/obj/machinery/camera/network/medbay{
c_tag = "Medbay Chemistry"
},
/obj/machinery/alarm{
frequency = 1441;
pixel_y = 22
/obj/machinery/smartfridge/chemistry/chemvator/down,
/obj/effect/floor_decal/corner/beige{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
@@ -40091,6 +40117,12 @@
},
/turf/simulated/wall,
/area/crew_quarters/longue_area)
"gTr" = (
/obj/effect/floor_decal/corner/beige{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"mbM" = (
/obj/structure/table/glass,
/obj/structure/cable/green{
@@ -75424,7 +75456,7 @@ any
aol
aoX
apN
aqV
aqX
arT
asP
aoX
@@ -75928,7 +75960,7 @@ age
afF
aoX
aFR
aqX
aqV
arV
asR
aoX
@@ -76180,7 +76212,7 @@ age
afG
aoX
apQ
aqY
aqV
arV
asS
aoX
@@ -76937,7 +76969,7 @@ alk
aoX
apT
arb
aqV
gTr
aFx
aoX
auJ

View File

@@ -6959,14 +6959,32 @@
dir = 8
},
/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,
/area/medical/medbaymain)
"aob" = (
/obj/machinery/body_scanconsole,
/obj/effect/floor_decal/corner/paleblue{
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,
/area/medical/medbaymain)
"aoc" = (
@@ -7786,12 +7804,7 @@
/obj/effect/floor_decal/corner/paleblue{
dir = 6
},
/obj/structure/table/glass,
/obj/item/weapon/reagent_containers/spray/cleaner{
pixel_x = -2;
pixel_y = -2
},
/obj/item/device/defib_kit/loaded,
/obj/machinery/smartfridge/chemistry/chemvator,
/turf/simulated/floor/tiled/white,
/area/medical/medbaymain)
"apC" = (
@@ -8232,7 +8245,7 @@
dir = 4;
icon_state = "pipe-c"
},
/obj/machinery/smartfridge/chemistry/chemvator,
/obj/machinery/bodyscanner,
/turf/simulated/floor/tiled/white,
/area/medical/medbaymain)
"aql" = (
@@ -8605,8 +8618,6 @@
/turf/simulated/floor/tiled/white,
/area/medical/medbay)
"aqS" = (
/obj/structure/table/glass,
/obj/item/weapon/reagent_containers/spray/cleaner,
/obj/effect/floor_decal/corner/paleblue{
dir = 5
},
@@ -9335,15 +9346,6 @@
/turf/simulated/floor/tiled/white,
/area/medical/medbaymain)
"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{
dir = 10
},
@@ -13271,6 +13273,8 @@
/obj/effect/floor_decal/corner/pink{
dir = 4
},
/obj/item/weapon/reagent_containers/spray/cleaner,
/obj/structure/table/standard,
/turf/simulated/floor/tiled/white,
/area/medical/surgery_hallway)
"azi" = (
@@ -14893,7 +14897,7 @@
opacity = 0
},
/obj/structure/window/reinforced/polarized/full{
id = "surgeryobs2"
id = "surgeryobs"
},
/turf/simulated/floor/plating,
/area/medical/surgery)
@@ -34238,20 +34242,28 @@
/area/security/detectives_office)
"blQ" = (
/obj/machinery/computer/security/wooden_tv,
/obj/machinery/button/windowtint{
id = "detectivetint";
pixel_x = 0;
pixel_y = 26
},
/turf/simulated/floor/carpet,
/area/security/detectives_office)
"blR" = (
/obj/structure/table/woodentable,
/obj/item/device/flashlight/lamp/green,
/obj/structure/window/reinforced/polarized{
dir = 4
dir = 4;
id = "detectivetint"
},
/turf/simulated/floor/carpet,
/area/security/detectives_office)
"blS" = (
/obj/structure/grille,
/obj/machinery/door/firedoor,
/obj/structure/window/reinforced/polarized/full,
/obj/structure/window/reinforced/polarized/full{
id = "detectivetint"
},
/turf/simulated/floor/plating,
/area/security/detectives_office)
"blT" = (
@@ -35102,7 +35114,8 @@
pixel_y = 2
},
/obj/structure/window/reinforced/polarized{
dir = 4
dir = 4;
id = "detectivetint"
},
/turf/simulated/floor/carpet,
/area/security/detectives_office)
@@ -35708,7 +35721,8 @@
/obj/item/weapon/pen,
/obj/item/clothing/glasses/sunglasses,
/obj/structure/window/reinforced/polarized{
dir = 4
dir = 4;
id = "detectivetint"
},
/turf/simulated/floor/carpet,
/area/security/detectives_office)
@@ -56138,14 +56152,6 @@
/obj/machinery/mass_driver{
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,
/area/engineering/engine_room)
"bZn" = (
@@ -56530,27 +56536,11 @@
/area/engineering/engine_room)
"bZY" = (
/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{
nitrogen = 82.1472
},
/area/engineering/engine_room)
"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,
/area/engineering/engine_room)
"caa" = (
@@ -60213,17 +60203,13 @@
/obj/structure/sign/directions/science,
/turf/simulated/wall,
/area/storage/primary)
"gHq" = (
/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()
"ikW" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/simulated/wall/r_lead,
/area/borealis2/outdoors/grounds)
/obj/machinery/body_scanconsole,
/turf/simulated/floor/tiled/white,
/area/medical/medbaymain)
"nKF" = (
/obj/structure/sign/directions/security{
icon_state = "direction_sec";
@@ -60231,21 +60217,6 @@
},
/turf/simulated/wall/r_wall,
/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" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -60260,17 +60231,6 @@
/obj/structure/sign/directions/security,
/turf/simulated/wall/r_wall,
/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" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -90907,8 +90867,8 @@ bQL
bSi
bTz
bTz
bRa
bRa
bTz
bVh
bRa
bRa
bVt
@@ -92676,9 +92636,9 @@ bXj
bYn
bZl
bZY
qts
gHq
oso
bPE
bPM
cbo
cbo
cbo
cbo
@@ -94610,7 +94570,7 @@ anh
anX
aoO
apx
aql
ikW
arf
asa
asW

View File

@@ -1068,6 +1068,7 @@
#include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\pipe_painter.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_vr.dm"
#include "code\game\objects\items\devices\spy_bug.dm"