mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-15 20:52:41 +00:00
Merge branch 'master' into master
This commit is contained in:
@@ -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)) { \
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
343
code/game/objects/items/weapons/RPD.dm
Normal file
343
code/game/objects/items/weapons/RPD.dm
Normal 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","↕")
|
||||||
|
lines += render_dir_img(preview,user,EAST,"Horizontal","↔")
|
||||||
|
|
||||||
|
if(PIPE_BENDABLE) // Bent, N-W, N-E etc
|
||||||
|
lines += render_dir_img(preview,user,NORTH,"Vertical","↕")
|
||||||
|
lines += render_dir_img(preview,user,EAST,"Horizontal","↔")
|
||||||
|
lines += "<br />"
|
||||||
|
lines += render_dir_img(preview,user,NORTHWEST,"West to North","╝")
|
||||||
|
lines += render_dir_img(preview,user,NORTHEAST,"North to East","╚")
|
||||||
|
lines += "<br />"
|
||||||
|
lines += render_dir_img(preview,user,SOUTHWEST,"South to West","╗")
|
||||||
|
lines += render_dir_img(preview,user,SOUTHEAST,"East to South","╔")
|
||||||
|
|
||||||
|
if(PIPE_TRINARY) // Manifold
|
||||||
|
lines += render_dir_img(preview,user,NORTH,"West South East","╦")
|
||||||
|
lines += render_dir_img(preview,user,EAST,"North West South","╣")
|
||||||
|
lines += "<br />"
|
||||||
|
lines += render_dir_img(preview,user,SOUTH,"East North West","╩")
|
||||||
|
lines += render_dir_img(preview,user,WEST,"South East North","╠")
|
||||||
|
|
||||||
|
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","╦")
|
||||||
|
lines += render_dir_img(preview,user,EAST,"North West South","╣")
|
||||||
|
lines += "<br />"
|
||||||
|
lines += render_dir_img(preview,user,SOUTH,"East North West","╩")
|
||||||
|
lines += render_dir_img(preview,user,WEST,"South East North","╠")
|
||||||
|
lines += "<br />"
|
||||||
|
lines += render_dir_img(previewm,user,SOUTH,"West South East","╦", 1)
|
||||||
|
lines += render_dir_img(previewm,user,EAST,"North West South","╣", 1)
|
||||||
|
lines += "<br />"
|
||||||
|
lines += render_dir_img(previewm,user,NORTH,"East North West","╩", 1)
|
||||||
|
lines += render_dir_img(previewm,user,WEST,"South East North","╠", 1)
|
||||||
|
|
||||||
|
if(PIPE_DIRECTIONAL) // Stuff with four directions - includes pumps etc.
|
||||||
|
lines += render_dir_img(preview,user,NORTH,"North","↑")
|
||||||
|
lines += render_dir_img(preview,user,EAST,"East","→")
|
||||||
|
lines += render_dir_img(preview,user,SOUTH,"South","↓")
|
||||||
|
lines += render_dir_img(preview,user,WEST,"West","←")
|
||||||
|
|
||||||
|
if(PIPE_ONEDIR) // Single icon_state (eg 4-way manifolds)
|
||||||
|
lines += render_dir_img(preview,user,SOUTH,"Pipe","↕")
|
||||||
|
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
|
||||||
@@ -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))
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 |
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user