RCD Rework.

RCDs now work on a system of schematics, with an RPD style UI.

RPD, RCD, RSF and tile painters all implemented into this new system. (reverted from commit ccb9ceb811) (reverted from commit 1d9a328ba6)
This commit is contained in:
PJB3005
2015-08-16 22:44:15 +02:00
committed by Ren
parent b96ab050f4
commit 83598d6e50
44 changed files with 2284 additions and 1611 deletions

View File

@@ -98,7 +98,7 @@
/obj/machinery/atmospherics/unary/cap/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/pipe_dispenser) || istype(W, /obj/item/device/pipe_painter))
if(istype(W, /obj/item/device/rcd/rpd) || istype(W, /obj/item/device/pipe_painter))
return // Coloring pipes.
if(istype(W, /obj/item/weapon/reagent_containers/glass/paint/red))

View File

@@ -95,7 +95,7 @@
/obj/machinery/atmospherics/unary/tank/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/pipe_dispenser) || istype(W, /obj/item/device/pipe_painter))
if(istype(W, /obj/item/device/rcd/rpd) || istype(W, /obj/item/device/pipe_painter))
return // Coloring pipes.
if (istype(W, /obj/item/device/analyzer) && get_dist(user, src) <= 1)
user.visible_message("<span class='attack'>[user] has used [W] on \icon[icon] [src]</span>", "<span class='attack'>You use \the [W] on \icon[icon] [src]</span>")

View File

@@ -16,6 +16,8 @@
burst_type = /obj/machinery/atmospherics/unary/vent/burstpipe/heat_exchanging
available_colors = null //Overrides the available colors list from the parent.
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/getNodeType(var/node_id)
return PIPE_TYPE_HE

View File

@@ -24,13 +24,13 @@
var/baseicon=""
available_colors = list(
"grey"=PIPE_COLOR_GREY,
"red"=PIPE_COLOR_RED,
"blue"=PIPE_COLOR_BLUE,
"cyan"=PIPE_COLOR_CYAN,
"green"=PIPE_COLOR_GREEN,
"yellow"=PIPE_COLOR_YELLOW,
"purple"=PIPE_COLOR_PURPLE
"grey" = PIPE_COLOR_GREY,
"red" = PIPE_COLOR_RED,
"blue" = PIPE_COLOR_BLUE,
"cyan" = PIPE_COLOR_CYAN,
"green" = PIPE_COLOR_GREEN,
"yellow" = PIPE_COLOR_YELLOW,
"purple" = PIPE_COLOR_PURPLE
)
/obj/machinery/atmospherics/pipe/singularity_pull(/obj/machinery/singularity/S, size)
@@ -407,7 +407,7 @@
level = 1
alpha=128
/obj/machinery/atmospherics/pipe/simple/insulated
name = "Insulated pipe"
name = "\improper Insulated pipe"
//icon = 'icons/obj/atmospherics/red_pipe.dmi'
icon = 'icons/obj/atmospherics/insulated.dmi'
minimum_temperature_difference = 10000
@@ -418,8 +418,12 @@
alert_pressure = 900000
available_colors = list(
"red"=IPIPE_COLOR_RED,
"blue"=IPIPE_COLOR_BLUE
"red" = IPIPE_COLOR_RED,
"blue" = IPIPE_COLOR_BLUE,
"cyan" = PIPE_COLOR_CYAN,
"green" = PIPE_COLOR_GREEN,
"yellow" = PIPE_COLOR_YELLOW,
"purple" = PIPE_COLOR_PURPLE
)
_color = "red"
/obj/machinery/atmospherics/pipe/simple/insulated/visible
@@ -595,35 +599,35 @@
update_icon()
/obj/machinery/atmospherics/pipe/manifold/scrubbers
name = "Scrubbers pipe"
name = "\improper Scrubbers pipe"
_color = "red"
color=PIPE_COLOR_RED
/obj/machinery/atmospherics/pipe/manifold/supply
name = "Air supply pipe"
name = "\improper Air supply pipe"
_color = "blue"
color=PIPE_COLOR_BLUE
/obj/machinery/atmospherics/pipe/manifold/supplymain
name = "Main air supply pipe"
name = "\improper Main air supply pipe"
_color = "purple"
color=PIPE_COLOR_PURPLE
/obj/machinery/atmospherics/pipe/manifold/general
name = "Gas pipe"
name = "\improper Gas pipe"
_color = "gray"
color=PIPE_COLOR_GREY
/obj/machinery/atmospherics/pipe/manifold/yellow
name = "Air supply pipe"
name = "\improper Air supply pipe"
_color = "yellow"
color=PIPE_COLOR_YELLOW
/obj/machinery/atmospherics/pipe/manifold/cyan
name = "Air supply pipe"
name = "\improper Air supply pipe"
_color = "cyan"
color=PIPE_COLOR_CYAN
/obj/machinery/atmospherics/pipe/manifold/filtering
name = "Air filtering pipe"
name = "\improper Air filtering pipe"
_color = "green"
color=PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold/insulated
name = "Insulated pipe"
name = "\improper Insulated pipe"
//icon = 'icons/obj/atmospherics/red_pipe.dmi'
icon = 'icons/obj/atmospherics/insulated.dmi'
icon_state = "manifold"
@@ -631,10 +635,16 @@
_color = "red"
color=IPIPE_COLOR_RED
level = 2
available_colors = list(
"red"=IPIPE_COLOR_RED,
"blue"=IPIPE_COLOR_BLUE
"red" = IPIPE_COLOR_RED,
"blue" = IPIPE_COLOR_BLUE,
"cyan" = PIPE_COLOR_CYAN,
"green" = PIPE_COLOR_GREEN,
"yellow" = PIPE_COLOR_YELLOW,
"purple" = PIPE_COLOR_PURPLE
)
/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden
@@ -841,40 +851,46 @@
update_icon()
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers
name = "Scrubbers pipe"
name = "\improper Scrubbers pipe"
_color = "red"
color=PIPE_COLOR_RED
/obj/machinery/atmospherics/pipe/manifold4w/supply
name = "Air supply pipe"
name = "\improper Air supply pipe"
_color = "blue"
color=PIPE_COLOR_BLUE
/obj/machinery/atmospherics/pipe/manifold4w/supplymain
name = "Main air supply pipe"
name = "\improper Main air supply pipe"
_color = "purple"
color=PIPE_COLOR_PURPLE
/obj/machinery/atmospherics/pipe/manifold4w/general
name = "Air supply pipe"
name = "\improper Air supply pipe"
_color = "gray"
color=PIPE_COLOR_GREY
/obj/machinery/atmospherics/pipe/manifold4w/yellow
name = "Air supply pipe"
name = "\improper Air supply pipe"
_color = "yellow"
color=PIPE_COLOR_YELLOW
/obj/machinery/atmospherics/pipe/manifold4w/filtering
name = "Air filtering pipe"
name = "\improper Air filtering pipe"
_color = "green"
color=PIPE_COLOR_GREEN
/obj/machinery/atmospherics/pipe/manifold4w/insulated
icon = 'icons/obj/atmospherics/insulated.dmi'
name = "Insulated pipe"
name = "\improper Insulated pipe"
_color = "red"
alert_pressure = 900*ONE_ATMOSPHERE
color=IPIPE_COLOR_RED
level = 2
available_colors = list(
"red"=IPIPE_COLOR_RED,
"blue"=IPIPE_COLOR_BLUE
"red" = IPIPE_COLOR_RED,
"blue" = IPIPE_COLOR_BLUE,
"cyan" = PIPE_COLOR_CYAN,
"green" = PIPE_COLOR_GREEN,
"yellow" = PIPE_COLOR_YELLOW,
"purple" = PIPE_COLOR_PURPLE
)
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible
level = 2
/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden
@@ -919,7 +935,7 @@
/obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/pipe_dispenser) || istype(W, /obj/item/device/pipe_painter))
if(istype(W, /obj/item/device/rcd/rpd) || istype(W, /obj/item/device/pipe_painter))
return // Coloring pipes.
if(istype(W, /obj/item/weapon/reagent_containers/glass/paint/red))

View File

@@ -86,7 +86,7 @@ rcd light flash thingy on matter drain
for(var/datum/AI_Module/large/disable_rcd/rcdmod in current_modules)
if(rcdmod.uses > 0)
rcdmod.uses --
for(var/obj/item/weapon/rcd/rcd in world)
for(var/obj/item/device/rcd/matter/engineering/rcd in world)
rcd.disabled = 1
for(var/obj/item/mecha_parts/mecha_equipment/tool/rcd/rcd in world)
rcd.disabled = 1

View File

@@ -72,12 +72,12 @@
/datum/theft_objective/traitor/rcd
name = "an RCD"
typepath = /obj/item/weapon/rcd
typepath = /obj/item/device/rcd/matter/engineering
protected_jobs = list("Chief Engineer")
/datum/theft_objective/traitor/rpd
name = "an RPD"
typepath = /obj/item/weapon/pipe_dispenser
typepath = /obj/item/device/rcd/rpd
protected_jobs = list("Chief Engineer", "Atmospherics Technician")
/datum/theft_objective/traitor/jetpack

View File

@@ -92,7 +92,7 @@
new /obj/item/clothing/head/welding(), \
new /obj/item/device/taperecorder(), \
new /obj/item/weapon/chisel(), \
new /obj/item/weapon/tile_painter(), \
new /obj/item/device/rcd/tile_painter(), \
),
"Misc_Other"=list(
new /obj/item/weapon/rcd_ammo(), \
@@ -107,9 +107,9 @@
"Hidden_Items" = list(
new /obj/item/weapon/flamethrower/full(), \
new /obj/item/ammo_storage/box/flare(), \
new /obj/item/weapon/rcd(), \
new /obj/item/weapon/pipe_dispenser(),\
new /obj/item/weapon/rsf(), \
new /obj/item/device/rcd/matter/engineering(), \
new /obj/item/device/rcd/rpd(),\
new /obj/item/device/rcd/matter/rsf(), \
new /obj/item/device/radio/electropack(), \
new /obj/item/weapon/weldingtool/largetank/empty(), \
new /obj/item/weapon/handcuffs(), \

View File

@@ -1,289 +0,0 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/*
CONTAINS:
RCD
*/
/obj/item/weapon/rcd
name = "rapid-construction-device (RCD)"
desc = "A device used to rapidly build walls/floor."
icon = 'icons/obj/items.dmi'
icon_state = "rcd"
opacity = 0
density = 0
anchored = 0.0
flags = FPRINT
siemens_coefficient = 1
force = 10.0
throwforce = 10.0
throw_speed = 1
throw_range = 5
w_class = 3.0
starting_materials = list(MAT_IRON = 50000)
w_type = RECYK_ELECTRONIC
melt_temperature = MELTPOINT_STEEL // Lots of metal
origin_tech = "engineering=4;materials=2"
var/datum/effect/effect/system/spark_spread/spark_system
var/matter = 0
var/max_matter = 30
var/working = 0
var/mode = 1
var/canRwall = 0
var/disabled = 0
var/airlock_type = /obj/machinery/door/airlock
var/floor_cost = 1
var/wall_cost = 3
var/airlock_cost = 3
var/decon_cost = 5
/obj/item/weapon/rcd/verb/change_airlock_setting()
set name = "Change Airlock Setting"
set category = "Object"
set src in usr
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/rcd/verb/change_airlock_setting() called tick#: [world.time]")
var airlockcat = input(usr, "Select the type of the airlock.") in list("Solid", "Glass")
switch(airlockcat)
if("Solid")
var airlockpaint = input(usr, "Select the paintjob of the airlock.") in list("Default", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining", "Maintenance", "External", "High Security")
switch(airlockpaint)
if("Default")
airlock_type = /obj/machinery/door/airlock
if("Engineering")
airlock_type = /obj/machinery/door/airlock/engineering
if("Atmospherics")
airlock_type = /obj/machinery/door/airlock/atmos
if("Security")
airlock_type = /obj/machinery/door/airlock/security
if("Command")
airlock_type = /obj/machinery/door/airlock/command
if("Medical")
airlock_type = /obj/machinery/door/airlock/medical
if("Research")
airlock_type = /obj/machinery/door/airlock/research
if("Mining")
airlock_type = /obj/machinery/door/airlock/mining
if("Maintenance")
airlock_type = /obj/machinery/door/airlock/maintenance
if("External")
airlock_type = /obj/machinery/door/airlock/external
if("High Security")
airlock_type = /obj/machinery/door/airlock/highsecurity
if("Glass")
var airlockpaint = input(usr, "Select the paintjob of the airlock.") in list("Default", "Engineering", "Atmospherics", "Security", "Command", "Medical", "Research", "Mining")
switch(airlockpaint)
if("Default")
airlock_type = /obj/machinery/door/airlock/glass
if("Engineering")
airlock_type = /obj/machinery/door/airlock/glass_engineering
if("Atmospherics")
airlock_type = /obj/machinery/door/airlock/glass_atmos
if("Security")
airlock_type = /obj/machinery/door/airlock/glass_security
if("Command")
airlock_type = /obj/machinery/door/airlock/glass_command
if("Medical")
airlock_type = /obj/machinery/door/airlock/glass_medical
if("Research")
airlock_type = /obj/machinery/door/airlock/glass_research
if("Mining")
airlock_type = /obj/machinery/door/airlock/glass_mining
else
airlock_type = /obj/machinery/door/airlock
/obj/item/weapon/rcd/suicide_act(mob/user)
viewers(user) << "<span class='danger'>[user] is using the deconstruct function on the [src.name] on \himself! It looks like \he's trying to commit suicide!</span>"
return (user.death(1))
/obj/item/weapon/rcd/New()
..()
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
return
/obj/item/weapon/rcd/examine(mob/user)
..()
if(istype(src, /obj/item/weapon/rcd/borg))
user << "It's been set to draw power from a power cell."
else
user << "It currently holds [matter]/[max_matter] matter-units."
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > max_matter)
user << "<span class='notice'>The RCD can't hold any more matter-units.</span>"
return
qdel(W)
matter += 10
playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1)
user << "<span class='notice'>The RCD now holds [matter]/[max_matter] matter-units.</span>"
return
if(isscrewdriver(W))
user << "<span class='notice'>You unscrew the access panel and release the cartridge chamber.</span>"
while(matter>=10)
new /obj/item/weapon/rcd_ammo(user.loc)
matter -= 10
return
/obj/item/weapon/rcd/attack_self(mob/user)
//Change the mode
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
switch(mode)
if(1)
mode = 2
user << "<span class='notice'>Changed mode to 'Airlock'</span>"
if(prob(20))
src.spark_system.start()
return
if(2)
mode = 3
user << "<span class='notice'>Changed mode to 'Deconstruct'</span>"
if(prob(20))
src.spark_system.start()
return
if(3)
mode = 1
user << "<span class='notice'>Changed mode to 'Floor & Walls'</span>"
if(prob(20))
src.spark_system.start()
return
/obj/item/weapon/rcd/proc/activate()
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/rcd/proc/activate() called tick#: [world.time]")
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
/obj/item/weapon/rcd/afterattack(atom/A, mob/user)
if(disabled && !isrobot(user))
return 0
if(get_dist(user,A)>1)
return 0
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock)))
return 0
switch(mode)
if(1)
if(istype(A, /turf/space))
if(useResource(floor_cost, user))
user << "Building Floor..."
activate()
A:ChangeTurf(/turf/simulated/floor/plating/airless)
return 1
return 0
if(istype(A, /turf/simulated/floor))
if(checkResource(wall_cost, user))
user << "Building Wall ..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 20))
if(!useResource(wall_cost, user)) return 0
activate()
A:ChangeTurf(/turf/simulated/wall)
return 1
return 0
if(2)
if(checkResource(airlock_cost, user))
user << "Building Airlock..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 50))
if(!useResource(airlock_cost, user)) return 0
if(locate(/obj/machinery/door/airlock) in A) return 0
activate()
var/obj/machinery/door/airlock/T = new airlock_type( A )
T.autoclose = 1
return 1
return 0
return 0
if(3)
if(istype(A, /turf/simulated/wall))
if(istype(A, /turf/simulated/wall/r_wall) && !canRwall)
return 0
if(checkResource(decon_cost, user))
user << "Deconstructing Wall..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 40))
if(!useResource(decon_cost, user)) return 0
activate()
A:ChangeTurf(/turf/simulated/floor/plating)
return 1
return 0
if(istype(A, /turf/simulated/floor))
if(checkResource(decon_cost, user))
user << "Deconstructing Floor..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 50))
if(!useResource(decon_cost, user)) return 0
activate()
A:ChangeTurf(get_base_turf(A.z))
return 1
return 0
if(istype(A, /obj/machinery/door/airlock))
if(checkResource((decon_cost * 2), user))
user << "Deconstructing Airlock..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 50))
if(!useResource((decon_cost * 2), user)) return 0
activate()
del(A)
return 1
return 0
return 0
else
user << "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin."
return 0
/obj/item/weapon/rcd/proc/useResource(var/amount, var/mob/user)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/rcd/proc/useResource() called tick#: [world.time]")
if(matter < amount)
return 0
matter -= amount
return 1
/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/rcd/proc/checkResource() called tick#: [world.time]")
return matter >= amount
/obj/item/weapon/rcd/borg/useResource(var/amount, var/mob/user)
if(!isrobot(user))
return 0
return user:cell:use(amount * 30)
/obj/item/weapon/rcd/borg/checkResource(var/amount, var/mob/user)
if(!isrobot(user))
return 0
return user:cell:charge >= (amount * 30)
/obj/item/weapon/rcd/borg/New()
..()
canRwall = 1
/obj/item/weapon/rcd_ammo
name = "compressed matter cartridge"
desc = "Highly compressed matter in a cartridge form, used in various fabricators."
icon = 'icons/obj/ammo.dmi'
icon_state = "rcd"
item_state = "rcdammo"
opacity = 0
density = 0
anchored = 0.0
origin_tech = "materials=2"
w_class = 2.0
starting_materials = list(MAT_IRON = 30000, MAT_GLASS = 15000)
w_type = RECYK_ELECTRONIC
/obj/item/weapon/rcd_ammo/attackby(var/obj/O, mob/user)
if(istype(O, /obj/item/device/material_synth) && !istype(O, /obj/item/device/material_synth/robot))
return O.attackby(src, user)
else if(istype(O, /obj/item/weapon/rcd) && !istype(O, /obj/item/weapon/rcd/borg))
return O.attackby(src, user)
else if(istype(O, /obj/item/weapon/rsf) && !istype(O, /obj/item/weapon/rsf/cyborg))
return O.attackby(src, user)

View File

@@ -1,616 +0,0 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/*
CONTAINS:
RPD
*/
#define PIPE_BINARY 0
#define PIPE_BENT 1
#define PIPE_TRINARY 2
#define PIPE_TRIN_M 3
#define PIPE_UNARY 4
/datum/pipe_info
var/id=-1
var/dir=SOUTH
var/dirtype=PIPE_BINARY
var/icon = 'icons/obj/pipe-item.dmi'
var/icon_state=""
var/selected=0
/datum/pipe_info/New(var/pid,var/direction,var/dt)
src.id=pid
src.icon_state=pipeID2State[pid+1]
src.dir=direction
src.dirtype=dt
/datum/pipe_info/proc/Render(var/dispenser,var/label)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/pipe_info/proc/Render() called tick#: [world.time]")
return "<li><a href='?src=\ref[dispenser];makepipe=[id];dir=[dir];type=[dirtype]'>[label]</a></li>"
/datum/pipe_info/meter
icon = 'icons/obj/pipes.dmi'
icon_state = "meterX"
/datum/pipe_info/meter/New()
return
/datum/pipe_info/meter/Render(var/dispenser,var/label)
return "<li><a href='?src=\ref[dispenser];makemeter=1;type=[PIPE_UNARY]'>[label]</a></li>" //hardcoding is no
/datum/pipe_info/gsensor
icon = 'icons/obj/stationobjs.dmi'
icon_state = "gsensor1"
/datum/pipe_info/gsensor/New()
return
/datum/pipe_info/gsensor/Render(var/dispenser,var/label)
return "<li><a href='?src=\ref[dispenser];makegsensor=1;type=[PIPE_UNARY]'>[label]</a></li>" //hardcoding is no
var/global/list/disposalpipeID2State=list(
"pipe-s",
"pipe-c",
"pipe-j1",
"pipe-y",
"pipe-t",
"disposal",
"outlet",
"intake",
"pipe-j1s",
"pipe-j1s",
)
/datum/pipe_info/disposal
icon = 'icons/obj/pipes/disposal.dmi'
icon_state = "meterX"
/datum/pipe_info/disposal/New(var/pid,var/dt)
src.id=pid
src.icon_state=disposalpipeID2State[pid+1]
src.dir=2
src.dirtype=dt
if(pid<6 || pid>8)
icon_state = "con[icon_state]"
/datum/pipe_info/disposal/Render(var/dispenser,var/label)
return "<li><a href='?src=\ref[dispenser];dmake=[id];type=[PIPE_UNARY]'>[label]</a></li>" //avoid hardcoding.
//find these defines in code\ATMOSPHERICS\\\pipe\consruction.dm
var/global/list/RPD_recipes=list(
"Regular Pipes" = list(
"Pipe" = new /datum/pipe_info(PIPE_SIMPLE_STRAIGHT, 1, PIPE_BINARY),
"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE_BENT, 5, PIPE_BENT),
"Manifold" = new /datum/pipe_info(PIPE_MANIFOLD, 1, PIPE_TRINARY),
"Manual Valve" = new /datum/pipe_info(PIPE_MVALVE, 1, PIPE_BINARY),
"Digital Valve" = new /datum/pipe_info(PIPE_DVALVE, 1, PIPE_BINARY),
"Pipe Cap" = new /datum/pipe_info(PIPE_CAP, 1, PIPE_UNARY),
"4-Way Manifold" = new /datum/pipe_info(PIPE_MANIFOLD4W, 1, PIPE_BINARY),
"Manual T-Valve" = new /datum/pipe_info(PIPE_MTVALVE, 2, PIPE_TRIN_M),
"Digital T-Valve" = new /datum/pipe_info(PIPE_DTVALVE, 2, PIPE_TRIN_M),
"Layer Manifold" = new /datum/pipe_info(PIPE_LAYER_MANIFOLD, 2, PIPE_UNARY),
),
"Devices"=list(
"Connector" = new /datum/pipe_info(PIPE_CONNECTOR, 1, PIPE_UNARY),
"Unary Vent" = new /datum/pipe_info(PIPE_UVENT, 1, PIPE_UNARY),
"Passive Vent" = new /datum/pipe_info(PIPE_PASV_VENT, 1, PIPE_UNARY),
"Gas Pump" = new /datum/pipe_info(PIPE_PUMP, 1, PIPE_UNARY),
"Passive Gate" = new /datum/pipe_info(PIPE_PASSIVE_GATE, 1, PIPE_UNARY),
"Volume Pump" = new /datum/pipe_info(PIPE_VOLUME_PUMP, 1, PIPE_UNARY),
"Scrubber" = new /datum/pipe_info(PIPE_SCRUBBER, 1, PIPE_UNARY),
"Meter" = new /datum/pipe_info/meter(),
"Gas Sensor" = new /datum/pipe_info/gsensor(),
"Gas Filter" = new /datum/pipe_info(PIPE_GAS_FILTER, 1, PIPE_TRIN_M),
"Gas Mixer" = new /datum/pipe_info(PIPE_GAS_MIXER, 1, PIPE_TRIN_M),
"Thermal Plate" = new /datum/pipe_info(PIPE_THERMAL_PLATE, 1, PIPE_UNARY),
"Injector" = new /datum/pipe_info(PIPE_INJECTOR, 1, PIPE_UNARY),
"Dual-Port Vent" = new /datum/pipe_info(PIPE_DP_VENT, 1, PIPE_UNARY),
),
"Heat Exchange" = list(
"Pipe" = new /datum/pipe_info(PIPE_HE_STRAIGHT, 1, PIPE_BINARY),
"Bent Pipe" = new /datum/pipe_info(PIPE_HE_BENT, 5, PIPE_BENT),
"Junction" = new /datum/pipe_info(PIPE_JUNCTION, 1, PIPE_UNARY),
"Heat Exchanger" = new /datum/pipe_info(PIPE_HEAT_EXCHANGE, 1, PIPE_UNARY),
),
"Insulated Pipes" = list(
"Pipe" = new /datum/pipe_info(PIPE_INSULATED_STRAIGHT,1, PIPE_BINARY),
"Bent Pipe" = new /datum/pipe_info(PIPE_INSULATED_BENT, 5, PIPE_BENT),
"Manifold" = new /datum/pipe_info(PIPE_INSUL_MANIFOLD, 1, PIPE_TRINARY),
"4-Way Manifold" = new /datum/pipe_info(PIPE_INSUL_MANIFOLD4W, 1, PIPE_BINARY),
),
"Disposal Pipes" = list(
"Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_STRAIGHT, PIPE_UNARY),
"Bent Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_BENT, PIPE_BENT),
"Junction" = new /datum/pipe_info/disposal(DISP_JUNCTION, PIPE_TRINARY),
"Y-Junction" = new /datum/pipe_info/disposal(DISP_YJUNCTION, PIPE_TRINARY),
"Trunk" = new /datum/pipe_info/disposal(DISP_END_TRUNK, PIPE_UNARY),
"Bin" = new /datum/pipe_info/disposal(DISP_END_BIN, PIPE_BINARY),
"Outlet" = new /datum/pipe_info/disposal(DISP_END_OUTLET, PIPE_UNARY),
"Chute" = new /datum/pipe_info/disposal(DISP_END_CHUTE, PIPE_UNARY),
"Sorting Junction" = new /datum/pipe_info/disposal(DISP_SORT_JUNCTION, PIPE_TRINARY),
"Wrapped Sorting Junction" = new /datum/pipe_info/disposal(DISP_SORT_WRAP_JUNCTION, PIPE_TRINARY),
)
)
/obj/item/weapon/pipe_dispenser
name = "Rapid Piping Device (RPD)"
desc = "A device used to rapidly pipe things."
icon = 'icons/obj/items.dmi'
icon_state = "rpd"
opacity = 0
density = 0
anchored = 0.0
flags = FPRINT
siemens_coefficient = 1
force = 10.0
throwforce = 10.0
throw_speed = 1
throw_range = 5
w_class = 3.0
starting_materials = list(MAT_IRON = 75000, MAT_GLASS = 37500)
w_type = RECYK_ELECTRONIC
melt_temperature = MELTPOINT_STEEL
origin_tech = "engineering=4;materials=2"
var/datum/effect/effect/system/spark_spread/spark_system
var/working = 0
var/p_type = 0
var/p_conntype = 0
var/p_dir = 1
var/p_class = 0
var/p_disposal = 0
var/list/paint_colors = list(
"grey" = "#cccccc",
"red" = "#800000",
"blue" = "#000080",
"cyan" = "#1C94C4",
"green" = "#00CC00",
"yellow" = "#FFCC00",
"purple" = "purple"
)
var/paint_color="grey"
/obj/item/weapon/pipe_dispenser/New()
. = ..()
spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
/obj/item/weapon/pipe_dispenser/attack_self(mob/user as mob)
show_menu(user)
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(var/_dir,var/pic,var/title)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/pipe_dispenser/proc/render_dir_img() called tick#: [world.time]")
var/selected=""
if(_dir == p_dir)
selected=" class=\"selected\""
return "<a href=\"?src=\ref[src];setdir=[_dir]\" title=\"[title]\"[selected]><img src=\"[pic]\" /></a>"
/obj/item/weapon/pipe_dispenser/proc/show_menu(mob/user as mob)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/pipe_dispenser/proc/show_menu() called tick#: [world.time]")
if(!user || !src) return 0
var/dat = {"<h2>Type</h2>
<b>Utilities:</b>
<ul>
<li><a href='?src=\ref[src];eatpipes=1;type=-1'>Eat Pipes</a></li>
<li><a href='?src=\ref[src];paintpipes=1;type=-1'>Paint Pipes</a></li>
</ul>"}
var/icon/preview=null
for(var/category in RPD_recipes)
dat += "<b>[category]:</b><ul>"
var/list/cat=RPD_recipes[category]
for(var/label in cat)
var/datum/pipe_info/I = cat[label]
var/found=0
if(I.id == p_type)
if(p_class==0 && I.type==/datum/pipe_info)
found=1
else if(p_class==2 && I.type==/datum/pipe_info/disposal)
found=1
if(found)
preview=new /icon(I.icon,I.icon_state)
dat += I.Render(src,label)
dat += "</ul>"
var/color_css=""
var/color_picker=""
for(var/color_name in paint_colors)
var/color=paint_colors[color_name]
color_css += {"
a.color.[color_name] {
color: [color];
}
a.color.[color_name]:hover {
border:1px solid [color];
}
a.color.[color_name].selected {
background-color: [color];
}
"}
var/selected=""
if(color_name==paint_color)
selected = " selected"
color_picker += {"<a class="color [color_name][selected]" href="?src=\ref[src];set_color=[color_name]">&bull;</a>"}
var/dirsel="<h2>Direction</h2>"
switch(p_conntype)
if(-1)
if(p_class==-2)
dirsel = "<h2>Direction</h2>[color_picker]"
if(PIPE_BINARY) // Straight, N-S, W-E
if(preview)
user << browse_rsc(new /icon(preview, dir=NORTH), "vertical.png")
user << browse_rsc(new /icon(preview, dir=EAST), "horizontal.png")
dirsel += "<p>"
dirsel += render_dir_img(1,"vertical.png","Vertical")
dirsel += render_dir_img(4,"horizontal.png","Horizontal")
dirsel += "</p>"
else
dirsel+={"
<p>
<a href="?src=\ref[src];setdir=1" title="vertical">&#8597;</a>
<a href="?src=\ref[src];setdir=4" title="horizontal">&harr;</a>
</p>
"}
if(PIPE_BENT) // Bent, N-W, N-E etc
if(preview)
user << browse_rsc(new /icon(preview, dir=NORTHWEST), "nw.png")
user << browse_rsc(new /icon(preview, dir=NORTHEAST), "ne.png")
user << browse_rsc(new /icon(preview, dir=SOUTHWEST), "sw.png")
user << browse_rsc(new /icon(preview, dir=SOUTHEAST), "se.png")
dirsel += "<p>"
dirsel += render_dir_img(9,"nw.png","West to North")
dirsel += render_dir_img(5,"ne.png","North to East")
dirsel += "<br />"
dirsel += render_dir_img(10,"sw.png","South to West")
dirsel += render_dir_img(6,"se.png","East to South")
dirsel += "</p>"
else
dirsel+={"
<p>
<a href="?src=\ref[src];setdir=9" title="West to North">&#9565;</a>
<a href="?src=\ref[src];setdir=5" title="North to East">&#9562;</a>
<br />
<a href="?src=\ref[src];setdir=10" title="South to West">&#9559;</a>
<a href="?src=\ref[src];setdir=6" title="East to South">&#9556;</a>
</p>
"}
if(PIPE_TRINARY) // Manifold
if(preview)
user << browse_rsc(new /icon(preview, dir=NORTH), "s.png")
user << browse_rsc(new /icon(preview, dir=EAST), "w.png")
user << browse_rsc(new /icon(preview, dir=SOUTH), "n.png")
user << browse_rsc(new /icon(preview, dir=WEST), "e.png")
dirsel += "<p>"
dirsel += render_dir_img(1,"s.png","West South East")
dirsel += render_dir_img(4,"w.png","North West South")
dirsel += "<br />"
dirsel += render_dir_img(2,"n.png","East North West")
dirsel += render_dir_img(8,"e.png","South East North")
dirsel += "</p>"
else
dirsel+={"
<p>
<a href="?src=\ref[src];setdir=1" title="West, South, East">&#9574;</a>
<a href="?src=\ref[src];setdir=4" title="North, West, South">&#9571;</a>
<br />
<a href="?src=\ref[src];setdir=2" title="East, North, West">&#9577;</a>
<a href="?src=\ref[src];setdir=8" title="South, East, North">&#9568;</a>
</p>
"}
if(PIPE_TRIN_M) // Mirrored ones
if(preview)
user << browse_rsc(new /icon(preview, dir=NORTH), "s.png")
user << browse_rsc(new /icon(preview, dir=EAST), "w.png")
user << browse_rsc(new /icon(preview, dir=SOUTH), "n.png")
user << browse_rsc(new /icon(preview, dir=WEST), "e.png")
user << browse_rsc(new /icon(preview, dir=SOUTHEAST), "sm.png") //each mirror icon is 45 anticlockwise from it's real direction
user << browse_rsc(new /icon(preview, dir=NORTHEAST), "wm.png")
user << browse_rsc(new /icon(preview, dir=NORTHWEST), "nm.png")
user << browse_rsc(new /icon(preview, dir=SOUTHWEST), "em.png")
dirsel += "<p>"
dirsel += render_dir_img(1,"s.png","West South East")
dirsel += render_dir_img(4,"w.png","North West South")
dirsel += "<br />"
dirsel += render_dir_img(2,"n.png","East North West")
dirsel += render_dir_img(8,"e.png","South East North")
dirsel += "<br />"
dirsel += render_dir_img(6,"sm.png","West South East")
dirsel += render_dir_img(5,"wm.png","North West South")
dirsel += "<br />"
dirsel += render_dir_img(9,"nm.png","East North West")
dirsel += render_dir_img(10,"em.png","South East North")
dirsel += "</p>"
else
dirsel+={"
<p>
<a href="?src=\ref[src];setdir=1" title="West, South, East">&#9574;</a>
<a href="?src=\ref[src];setdir=4" title="North, West, South">&#9571;</a>
<br />
<a href="?src=\ref[src];setdir=2" title="East, North, West">&#9577;</a>
<a href="?src=\ref[src];setdir=8" title="South, East, North">&#9568;</a>
<br />
<a href="?src=\ref[src];setdir=6" title="West, South, East">&#9574;</a>
<a href="?src=\ref[src];setdir=5" title="North, West, South">&#9571;</a>
<br />
<a href="?src=\ref[src];setdir=9" title="East, North, West">&#9577;</a>
<a href="?src=\ref[src];setdir=10" title="South, East, North">&#9568;</a>
</p>
"}
if(PIPE_UNARY) // Unary
if(preview)
user << browse_rsc(new /icon(preview, dir=NORTH), "n.png")
user << browse_rsc(new /icon(preview, dir=EAST), "e.png")
user << browse_rsc(new /icon(preview, dir=SOUTH), "s.png")
user << browse_rsc(new /icon(preview, dir=WEST), "w.png")
dirsel += "<p>"
dirsel += render_dir_img(NORTH,"n.png","North")
dirsel += render_dir_img(EAST, "e.png","East")
dirsel += render_dir_img(SOUTH,"s.png","South")
dirsel += render_dir_img(WEST, "w.png","West")
dirsel += "</p>"
else
dirsel+={"
<p>
<a href="?src=\ref[src];setdir=[NORTH]" title="North">&uarr;</a>
<a href="?src=\ref[src];setdir=[EAST]" title="East">&rarr;</a>
<a href="?src=\ref[src];setdir=[SOUTH]" title="South">&darr;</a>
<a href="?src=\ref[src];setdir=[WEST]" title="West">&larr;</a>
</p>
"}
dat = {"
<html>
<head>
<title>[name]</title>
<style type="text/css">
html {
font-family:sans-serif;
font-size:small;
}
a{
color:#0066cc;
text-decoration:none;
}
a img {
border:1px solid #0066cc;
background:#dfdfdf;
}
a.color {
padding: 5px 10px;
font-size: large;
font-weight: bold;
border:1px solid white;
}
a.selected img,
a:hover {
background: #0066cc;
color: #ffffff;
}
[color_css]
</style>
</head>
<body>
[dirsel][dat]
</body>
</html>
"}
user << browse(dat, "window=pipedispenser")
onclose(user, "pipedispenser")
return
/obj/item/weapon/pipe_dispenser/Topic(href, href_list)
if(usr.stat || usr.restrained())
usr << browse(null, "window=pipedispenser")
return
usr.set_machine(src)
src.add_fingerprint(usr)
if(!src.Adjacent(usr))
usr.unset_machine(usr)
return
if(href_list["setdir"])
p_dir= text2num(href_list["setdir"])
show_menu(usr)
if(href_list["eatpipes"])
p_class = -1
p_conntype=-1
p_dir=1
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
if(href_list["paintpipes"])
p_class = -2
p_conntype=-1
p_dir=1
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
if(href_list["set_color"])
paint_color=href_list["set_color"]
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
if(href_list["makepipe"])
p_type = text2num(href_list["makepipe"])
p_dir = text2num(href_list["dir"])
p_conntype = text2num(href_list["type"])
p_class = 0
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
if(href_list["makemeter"])
p_class = 1
p_conntype=-1
p_dir=1
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
if(href_list["makegsensor"])
p_class = 3
p_conntype=-1
p_dir=1
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
if(href_list["dmake"])
p_type = text2num(href_list["dmake"])
p_conntype = text2num(href_list["type"])
p_dir = 1
p_class = 2
src.spark_system.start()
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
show_menu(usr)
/obj/item/weapon/pipe_dispenser/afterattack(atom/A, mob/user)
if(!in_range(A,user))
return
if(loc != user)
return
if(!isrobot(user) && !ishuman(user))
return 0
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
if(istype(A, /obj/structure/lattice) || istype(A,/obj/structure/catwalk))
A = get_turf(A)
switch(p_class)
if(-2) // Paint pipes
if(!istype(A,/obj/machinery/atmospherics/pipe) || istype(A,/obj/machinery/atmospherics/unary/tank) || istype(A,/obj/machinery/atmospherics/unary/vent) || istype(A,/obj/machinery/atmospherics/pipe/simple/heat_exchanging) || istype(A,/obj/machinery/atmospherics/pipe/simple/insulated))
// Avoid spewing errors about invalid mode -2 when clicking on stuff that aren't pipes.
user << "\The [src]'s error light flickers. Perhaps you need to only use it on pipes and pipe meters?"
return 0
var/obj/machinery/atmospherics/pipe/P = A
if(!(paint_color in P.available_colors))
user << "<span class='warning'>This [P] can't be painted [paint_color]. Available colors: [english_list(P.available_colors)]</span>"
return 0
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
P._color = 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>")
P.update_icon()
return 1
if(-1) // Eating pipes
// Must click on an actual pipe or meter.
if(istype(A,/obj/item/pipe) || istype(A,/obj/item/pipe_meter) || istype(A,/obj/structure/disposalconstruct) || istype(A,/obj/item/pipe_gsensor))
user << "Destroying Pipe..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 5))
if(A)
activate()
if(istype(A, /obj/item/pipe))
returnToPool(A)
else
qdel(A)
return 1
return 0
// Avoid spewing errors about invalid mode -1 when clicking on stuff that aren't pipes.
user << "The [src]'s error light flickers. Perhaps you need to only use it on pipes and pipe meters?"
return 0
if(0)
var/pipelayer_to_lay = PIPING_LAYER_DEFAULT
if(istype(A, /obj/machinery/atmospherics))
var/obj/machinery/atmospherics/AM = A
pipelayer_to_lay = AM.piping_layer
A = get_turf(user)
if(!(istype(A, /turf)))
user << "The [src]'s error light flickers."
return 0
user << "Building Pipes ..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 20))
activate()
var/obj/item/pipe/P = getFromPool(/obj/item/pipe, A)
P.New(A,pipe_type=p_type,dir=p_dir) //new (A, pipe_type=p_type, dir=p_dir)
P.setPipingLayer(pipelayer_to_lay)
P.update()
P.add_fingerprint(usr)
return 1
return 0
if(1)
if(!(istype(A, /turf)))
user << "The [src]'s error light flickers."
return 0
user << "Building Meter..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 20))
activate()
new /obj/item/pipe_meter(A)
return 1
return 0
if(2)
if(!(istype(A, /turf)))
user << "The [src]'s error light flickers."
return 0
user << "Building Pipes..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 20))
activate()
var/obj/structure/disposalconstruct/C = new (A)
// This may still produce runtimes, but I checked and /obj/structure/disposalconstruct
// DOES have a dir property, inherited from /obj/structure. - N3X
C.dir=p_dir
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
if(9)
C.ptype = 11
C.add_fingerprint(usr)
C.update()
return 1
return 0
if(3)
if(!(istype(A, /turf)))
user << "The [src]'s error light flickers."
return 0
user << "Building Sensor..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 20))
activate()
new /obj/item/pipe_gsensor(A)
return 1
return 0
else
..()
return 0
/obj/item/weapon/pipe_dispenser/proc/activate()
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/pipe_dispenser/proc/activate() called tick#: [world.time]")
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)

View File

@@ -1,135 +0,0 @@
/*
CONTAINS:
RSF
*/
/obj/item/weapon/rsf
name = "\improper Rapid-Service-Fabricator"
desc = "A device used to rapidly deploy service items."
icon = 'icons/obj/items.dmi'
icon_state = "rsf"
opacity = 0
density = 0
anchored = 0.0
starting_materials = list(MAT_IRON = 40000)
var/matter = 0
var/max_matter = 40
var/matter_respawn = 0
var/mode = 1
var/list/modes
w_class = 3.0
/obj/item/weapon/rsf/New()
..()
modes = list(
"glass",
"paper",
"flask",
"dice",
"deck of cards",
"candle",
"cardboard sheet",
)
return
/obj/item/weapon/rsf/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/rcd_ammo))
if (matter >= max_matter)
user << "The RSF can't hold any more matter."
return
if ((matter+20) >= max_matter)
qdel(W)
matter = max_matter
playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1)
user << "<span class='notice'>The RSF now holds [matter]/[max_matter] fabrication-units.</span>"
return
qdel(W)
matter += 20
playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1)
user << "<span class='notice'>The RSF now holds [matter]/[max_matter] fabrication-units.</span>"
return
/obj/item/weapon/rsf/attack_self(mob/user as mob)
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
mode++
if(mode>modes.len) mode = 1
user << "Now dispensing [modes[mode]]!"
/obj/item/weapon/rsf/examine(mob/user)
..()
if(istype(src, /obj/item/weapon/rsf/cyborg))
user << "It's been set to draw power from a power cell."
else
user << "It currently holds [matter]/[max_matter] fabrication-units."
/obj/item/weapon/rsf/proc/pay(var/mob/user, var/amount) //spend matter or energy
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/rsf/proc/pay() called tick#: [world.time]")
if(isrobot(user)) //if the user is a robot, take power from its cell
var/mob/living/silicon/robot/R = user
if(R.cell)
return R.cell.use(amount * 50)
return 0
if(amount <= matter)
matter -= amount
user << "The RSF now holds [matter]/[max_matter] fabrication-units."
return 1
return 0
/obj/item/weapon/rsf/afterattack(atom/A, mob/user as mob)
if(!A.Adjacent(user))
return
if (!(istype(A, /obj/structure/table) || istype(A, /turf/simulated/floor))) //Must click on a table or floor to spawn stuff
return
switch(modes[mode])
if("dosh")
if(pay(user,4))
user << "Dispensing Dosh..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/spacecash/c10(get_turf(A))
return
if("glass")
if(pay(user,1))
user << "Dispensing Glass..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(get_turf(A))
if("flask")
if(pay(user,1))
user << "Dispensing Flask..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/reagent_containers/food/drinks/flask/barflask(get_turf(A))
if("paper")
if(pay(user,1))
user << "Dispensing Paper..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/paper(get_turf(A))
if("candle")
if(pay(user,1))
user << "Dispensing a Candle..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/candle(get_turf(A))
if("dice")
if(pay(user,1))
user << "Dispensing Dice Pack..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/weapon/storage/pill_bottle/dice(get_turf(A))
if("deck of cards")
if(pay(user,1))
user << "Dispensing a Deck of Cards..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/toy/cards(get_turf(A))
if("cardboard sheet")
if(pay(user,1))
user << "Dispensing a Cardboard Sheet..."
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new /obj/item/stack/sheet/cardboard(get_turf(A))
/obj/item/weapon/rsf/cyborg/New()
..()
modes |= "dosh" //cyborg rsfs get money
desc = "A device used to rapidly deploy service items."
/obj/item/weapon/rsf/cyborg/process()
return //Borg RSF doesn't need matter

View File

@@ -1,490 +0,0 @@
#define PAINT_FLOOR 1
#define PAINT_PLATING 2
#define PAINT_REINFORCED 3
#define PAINT_ALL 0
#define DIR_ONE 1 //for those tiles with only one direction
#define DIR_ORTHO 2 //orthogonal (south, west, north, east)
#define DIR_ALL 3 //all the directions
/datum/paint_info
var/dir = SOUTH
var/icon/icon = 'icons/turf/floors.dmi'
var/icon_state = "floor"
var/ftype as num //the floor type required for this paint job
var/adirs //available dirs for this floor type
/datum/paint_info/New(var/padir, var/picon)
src.adirs = padir
src.dir = SOUTH
src.icon_state = picon
src.ftype = PAINT_FLOOR
/datum/paint_info/New(var/padir, var/picon, var/ptype)
if(ptype == null) ptype = PAINT_FLOOR //DM really can't resolve this?
src.dir = SOUTH
src.icon_state = picon
src.ftype = ptype
src.adirs = padir
/datum/paint_info/proc/validate(var/turf/simulated/floor/test)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/paint_info/proc/validate() called tick#: [world.time]")
//This is used to give the user a hint that he's a massive retard for using a floor painter on the carpet
switch(ftype)
if(PAINT_FLOOR) //why is it named plasteel anyway?
if(!(istype(test.floor_tile,/obj/item/stack/tile/plasteel)))
return 0 //if it's carpet, wood or some other stuff, we aren't going to paint that
if(istype(test, /turf/simulated/floor/engine))
return 0 //reinforced floor has plasteel in floor_tile too
//but that isn't a regular floor
if(PAINT_PLATING)
if(!istype(test,/turf/simulated/floor/plating))
return 0
if(PAINT_REINFORCED)
if(!istype(test,/turf/simulated/floor/engine))
return 0
return 1
/datum/paint_info/proc/apply(var/turf/simulated/floor/T, var/pname, var/pdesc)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/datum/paint_info/proc/apply() called tick#: [world.time]")
//warning("[type]: Running /datum/paint_info/proc/apply.")
T.icon_state = icon_state
T.icon_regular_floor = icon_state //required to 'save' the new floor type so if someone crowbars it and puts it back it won't revert to the original state
T.dir = dir
T.desc = pdesc //so if you paint over a plaque with a floor the tile loses its description
if(pname != "")
T.name = pname
T.ClearDecals()
/datum/paint_info/decal
icon = 'icons/effects/warning_stripes.dmi'
ftype = PAINT_ALL
/datum/paint_info/decal/apply(var/turf/simulated/floor/T, var/pname, var/pdesc)
T.AddDecal(image(icon, icon_state = icon_state, dir = dir))
//The list of all available floor design groups
var/global/list/paint_variants = list(
"Decals" = list(
// Stripes
new /datum/paint_info/decal(DIR_ALL, "warning"),
new /datum/paint_info/decal(DIR_ONE, "all"),
// Loading areas (TODO: colorable)
new /datum/paint_info/decal(DIR_ORTHO, "warning_corner"),
new /datum/paint_info/decal(DIR_ONE, "unloading"),
new /datum/paint_info/decal(DIR_ONE, "bot"),
new /datum/paint_info/decal(DIR_ORTHO, "loading_area"),
new /datum/paint_info/decal(DIR_ONE, "no"),
// Atmos lettering
new /datum/paint_info/decal(DIR_ORTHO, "oxygen"),
new /datum/paint_info/decal(DIR_ORTHO, "nitrogen"),
new /datum/paint_info/decal(DIR_ORTHO, "carbon_dioxide"),
new /datum/paint_info/decal(DIR_ORTHO, "nitrous_oxide"),
new /datum/paint_info/decal(DIR_ORTHO, "air"),
new /datum/paint_info/decal(DIR_ORTHO, "plasma"),
new /datum/paint_info/decal(DIR_ORTHO, "zoo"),
// Numbers
new /datum/paint_info/decal(DIR_ORTHO, "1"),
new /datum/paint_info/decal(DIR_ORTHO, "2"),
new /datum/paint_info/decal(DIR_ORTHO, "3"),
new /datum/paint_info/decal(DIR_ORTHO, "4"),
new /datum/paint_info/decal(DIR_ORTHO, "5"),
new /datum/paint_info/decal(DIR_ORTHO, "6"),
new /datum/paint_info/decal(DIR_ORTHO, "7"),
new /datum/paint_info/decal(DIR_ORTHO, "8"),
new /datum/paint_info/decal(DIR_ORTHO, "9"),
new /datum/paint_info/decal(DIR_ORTHO, "0"),
),
"Gray" = list(new /datum/paint_info(DIR_ONE,"floor"),
new /datum/paint_info(DIR_ALL,"black"),
new /datum/paint_info(DIR_ORTHO,"blackcorner")),
"Neutral" = list(new /datum/paint_info(DIR_ALL,"neutral"),
new /datum/paint_info(DIR_ORTHO,"neutralcorner"),
new /datum/paint_info(DIR_ONE,"neutralfull")),
"White" = list(new /datum/paint_info(DIR_ONE,"white"),
new /datum/paint_info(DIR_ALL,"whitehall"),
new /datum/paint_info(DIR_ORTHO,"whitecorner")),
"Red" = list(new /datum/paint_info(DIR_ONE,"redfull"),
new /datum/paint_info(DIR_ALL,"red"),
new /datum/paint_info(DIR_ORTHO,"redcorner")),
"Green" = list(new /datum/paint_info(DIR_ONE,"greenfull"),
new /datum/paint_info(DIR_ALL,"green"),
new /datum/paint_info(DIR_ORTHO,"greencorner")),
"Blue" = list(new /datum/paint_info(DIR_ONE,"bluefull"),
new /datum/paint_info(DIR_ALL,"blue"),
new /datum/paint_info(DIR_ORTHO,"bluecorner")),
"Yellow" = list(new /datum/paint_info(DIR_ONE,"yellowfull"),
new /datum/paint_info(DIR_ALL,"yellow"),
new /datum/paint_info(DIR_ORTHO,"yellowcorner")),
"Purple" = list(new /datum/paint_info(DIR_ONE,"purplefull"),
new /datum/paint_info(DIR_ALL,"purple"),
new /datum/paint_info(DIR_ORTHO,"purplecorner")),
"Orange" = list(new /datum/paint_info(DIR_ONE,"orangefull"),
new /datum/paint_info(DIR_ALL,"orange"),
new /datum/paint_info(DIR_ORTHO,"orangecorner")),
"Brown" = list(new /datum/paint_info(DIR_ONE,"dark brown full"),
new /datum/paint_info(DIR_ALL,"brown"),
new /datum/paint_info(DIR_ORTHO,"browncorner")),
"Red and yellow" = list(new /datum/paint_info(DIR_ONE,"redyellowfull"),
new /datum/paint_info(DIR_ALL,"redyellow")),
"Red and blue" = list(new /datum/paint_info(DIR_ONE,"redbluefull"),
new /datum/paint_info(DIR_ALL,"redblue")),
"Red and green" = list(new /datum/paint_info(DIR_ONE,"redgreenfull"),
new /datum/paint_info(DIR_ALL,"redgreen")),
"Green and yellow" = list(new /datum/paint_info(DIR_ONE,"greenyellowfull"),
new /datum/paint_info(DIR_ALL,"greenyellow")),
"Green and blue" = list(new /datum/paint_info(DIR_ONE,"greenbluefull"),
new /datum/paint_info(DIR_ALL,"greenblue")),
"Blue and yellow" = list(new /datum/paint_info(DIR_ONE,"blueyellowfull"),
new /datum/paint_info(DIR_ALL,"blueyellow")),
"White red" = list(new /datum/paint_info(DIR_ONE,"whiteredfull"),
new /datum/paint_info(DIR_ALL,"whitered"),
new /datum/paint_info(DIR_ORTHO,"whiteredcorner")),
"White green" = list(new /datum/paint_info(DIR_ONE,"whitegreenfull"),
new /datum/paint_info(DIR_ALL,"whitegreen"),
new /datum/paint_info(DIR_ORTHO,"whitegreencorner")),
"White blue" = list(new /datum/paint_info(DIR_ONE,"whitebluefull"),
new /datum/paint_info(DIR_ALL,"whiteblue"),
new /datum/paint_info(DIR_ORTHO,"whitebluecorner"),
new /datum/paint_info(DIR_ONE,"cmo")),
"White yellow" = list(new /datum/paint_info(DIR_ONE,"whiteyellowfull"),
new /datum/paint_info(DIR_ALL,"whiteyellow"),
new /datum/paint_info(DIR_ORTHO,"whiteyellowcorner")),
"White purple" = list(new /datum/paint_info(DIR_ONE,"whitepurplefull"),
new /datum/paint_info(DIR_ALL,"whitepurple"),
new /datum/paint_info(DIR_ORTHO,"whitepurplecorner")),
"Arrival" = list(new /datum/paint_info(DIR_ALL,"arrival")),
"Escape" = list(new /datum/paint_info(DIR_ALL,"escape")),
"Dark" = list(new /datum/paint_info(DIR_ONE,"dark"),
new /datum/paint_info(DIR_ALL,"dark floor stripe"),
new /datum/paint_info(DIR_ORTHO,"dark floor corner")),
"Dark red" = list(new /datum/paint_info(DIR_ONE,"dark red full"),
new /datum/paint_info(DIR_ALL,"dark red stripe"),
new /datum/paint_info(DIR_ORTHO,"dark red corner")),
"Dark blue" = list(new /datum/paint_info(DIR_ONE,"dark blue full"),
new /datum/paint_info(DIR_ALL,"dark blue stripe"),
new /datum/paint_info(DIR_ORTHO,"dark blue corner")),
"Dark green" = list(new /datum/paint_info(DIR_ONE,"dark green full"),
new /datum/paint_info(DIR_ALL,"dark green stripe"),
new /datum/paint_info(DIR_ORTHO,"dark green corner")),
"Dark purple" = list(new /datum/paint_info(DIR_ONE,"dark purple full"),
new /datum/paint_info(DIR_ALL,"dark purple stripe"),
new /datum/paint_info(DIR_ORTHO,"dark purple corner")),
"Dark yellow" = list(new /datum/paint_info(DIR_ONE,"dark yellow full"),
new /datum/paint_info(DIR_ALL,"dark yellow stripe"),
new /datum/paint_info(DIR_ORTHO,"dark yellow corner")),
"Dark orange" = list(new /datum/paint_info(DIR_ONE,"dark orange full"),
new /datum/paint_info(DIR_ALL,"dark orange stripe"),
new /datum/paint_info(DIR_ORTHO,"dark orange corner")),
"Dark orange" = list(new /datum/paint_info(DIR_ONE,"dark orange full"),
new /datum/paint_info(DIR_ALL,"dark orange stripe"),
new /datum/paint_info(DIR_ORTHO,"dark orange corner")),
"Dark vault" = list(new /datum/paint_info(DIR_ONE,"dark vault full"),
new /datum/paint_info(DIR_ALL,"dark vault stripe"),
new /datum/paint_info(DIR_ORTHO,"dark vault corner"),
new /datum/paint_info(DIR_ORTHO,"dark-markings")),
"Markings" = list(new /datum/paint_info(DIR_ONE,"delivery"),
new /datum/paint_info(DIR_ONE,"bot"),
new /datum/paint_info(DIR_ONE,"whitedelivery"),
new /datum/paint_info(DIR_ONE,"whitebot"),
new /datum/paint_info(DIR_ONE,"enginedelivery", PAINT_REINFORCED),
new /datum/paint_info(DIR_ONE,"enginebot", PAINT_REINFORCED),
new /datum/paint_info(DIR_ONE,"plaque")),
"Loading area" = list(new /datum/paint_info(DIR_ORTHO,"loadingarea"),
new /datum/paint_info(DIR_ORTHO,"engineloadingarea", PAINT_REINFORCED),
new /datum/paint_info(DIR_ORTHO,"dark loading")),
"Warning" = list(new /datum/paint_info(DIR_ALL,"warning"),
new /datum/paint_info(DIR_ORTHO,"warningcorner")),
"White warning" = list(new /datum/paint_info(DIR_ALL,"warnwhite"),
new /datum/paint_info(DIR_ORTHO,"warnwhitecorner")),
"Reinforced warning" = list(new /datum/paint_info(DIR_ALL,"enginewarn", PAINT_REINFORCED),
new /datum/paint_info(DIR_ORTHO,"enginewarncorner", PAINT_REINFORCED)),
"Plating warning" = list(new /datum/paint_info(DIR_ALL,"warnplate", PAINT_PLATING),
new /datum/paint_info(DIR_ORTHO,"warnplatecorner", PAINT_PLATING)),
"Chapel" = list(new /datum/paint_info(DIR_ALL,"chapel")),
"SS13 logo" = list(new /datum/paint_info(DIR_ONE,"L1"),
new /datum/paint_info(DIR_ONE,"L3"),
new /datum/paint_info(DIR_ONE,"L5"),
new /datum/paint_info(DIR_ONE,"L7"),
new /datum/paint_info(DIR_ONE,"L9"),
new /datum/paint_info(DIR_ONE,"L11"),
new /datum/paint_info(DIR_ONE,"L13"),
new /datum/paint_info(DIR_ONE,"L15"),
new /datum/paint_info(DIR_ONE,"L2"),
new /datum/paint_info(DIR_ONE,"L4"),
new /datum/paint_info(DIR_ONE,"L6"),
new /datum/paint_info(DIR_ONE,"L8"),
new /datum/paint_info(DIR_ONE,"L10"),
new /datum/paint_info(DIR_ONE,"L12"),
new /datum/paint_info(DIR_ONE,"L14"),
new /datum/paint_info(DIR_ONE,"L16")),
"Derelict logo" = list(new /datum/paint_info(DIR_ONE,"derelict9"),
new /datum/paint_info(DIR_ONE,"derelict10"),
new /datum/paint_info(DIR_ONE,"derelict11"),
new /datum/paint_info(DIR_ONE,"derelict12"),
new /datum/paint_info(DIR_ONE,"derelict13"),
new /datum/paint_info(DIR_ONE,"derelict14"),
new /datum/paint_info(DIR_ONE,"derelict15"),
new /datum/paint_info(DIR_ONE,"derelict16"),
new /datum/paint_info(DIR_ONE,"derelict1"),
new /datum/paint_info(DIR_ONE,"derelict2"),
new /datum/paint_info(DIR_ONE,"derelict3"),
new /datum/paint_info(DIR_ONE,"derelict4"),
new /datum/paint_info(DIR_ONE,"derelict5"),
new /datum/paint_info(DIR_ONE,"derelict6"),
new /datum/paint_info(DIR_ONE,"derelict7"),
new /datum/paint_info(DIR_ONE,"derelict8")),
"Other" = list(new /datum/paint_info(DIR_ONE,"dark"),
new /datum/paint_info(DIR_ONE,"bar"),
new /datum/paint_info(DIR_ONE,"cafeteria"),
new /datum/paint_info(DIR_ONE,"checker"),
new /datum/paint_info(DIR_ONE,"barber"),
new /datum/paint_info(DIR_ONE,"grimy"),
new /datum/paint_info(DIR_ONE,"hydrofloor"),
new /datum/paint_info(DIR_ONE,"showroomfloor"),
new /datum/paint_info(DIR_ONE,"freezerfloor"),
new /datum/paint_info(DIR_ONE,"bcircuit"),
new /datum/paint_info(DIR_ONE,"gcircuit"),
new /datum/paint_info(DIR_ONE,"solarpanel"))
)
/obj/item/weapon/tile_painter
name = "tile painter"
desc = "A device used to paint floors in various colors and fashions."
icon = 'icons/obj/items.dmi'
icon_state = "rpd" //placeholder art, someone please sprite it
opacity = 0
density = 0
anchored = 0.0
flags = FPRINT
siemens_coefficient = 1
force = 10.0
throwforce = 10.0
throw_speed = 1
throw_range = 5
w_class = 3.0
starting_materials = list(MAT_IRON = 15000, MAT_GLASS = 7500)
w_type = RECYK_ELECTRONIC
melt_temperature = MELTPOINT_STEEL
origin_tech = "engineering=2;materials=1"
var/working = 0
var/datum/paint_info/selected
var/category = ""
/obj/item/weapon/tile_painter/New()
selected = new /datum/paint_info(SOUTH,"floor")
..()
/obj/item/weapon/tile_painter/Destroy() //do I even have to do that
selected = null
..() // FUCKING DUMB
/obj/item/weapon/tile_painter/attack_self(mob/user as mob)
show_menu(user)
/obj/item/weapon/tile_painter/proc/render_tile(var/icon/basestate, var/mob/user, var/datum/paint_info/I, var/cdir=SOUTH)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/tile_painter/proc/render_tile() called tick#: [world.time]")
// Send user the image
user << browse_rsc(new /icon(basestate, dir=cdir), "[I.icon_state][cdir].png")
// Determine if we're actually selecting this
var/is_selected = selected.icon==I.icon && selected.icon_state == I.icon_state && selected.dir==cdir
var/class=""
if(is_selected)
class=" class=\"selected\""
// Make HTML.
return "<a href=\"?src=\ref[src];set_dir=[cdir];set_state=[I.icon_state];set_type=\ref[I]\"[class]><img src='[I.icon_state][cdir].png'></a>"
/obj/item/weapon/tile_painter/proc/populate_selection(mob/user as mob, var/datum/paint_info/I)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/tile_painter/proc/populate_selection() called tick#: [world.time]")
var/data = ""
var/icon/basestate = new /icon(I.icon, I.icon_state)
switch(I.adirs)
if(DIR_ONE)
data += render_tile(basestate,user,I)
if(DIR_ORTHO)
for(var/d in cardinal) // cardinal is N,S,E,W (see global.dm)
data += render_tile(basestate,user,I,d)
if(DIR_ALL)
for(var/d in alldirs) // All 2D directions
data += render_tile(basestate,user,I,d)
return data
/obj/item/weapon/tile_painter/proc/show_menu(mob/user as mob)
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/tile_painter/proc/show_menu() called tick#: [world.time]")
if(!user || !src) return 0
var/data = {"<h2>Tile Painter</h2>
<style type="text/css">
html {
font-family:sans-serif;
font-size:small;
}
a{
color:#0066cc;
text-decoration:none;
}
a img {
border:1px solid #0066cc;
background: #99B2CC;
}
a.color {
padding: 5px 10px;
font-size: large;
font-weight: bold;
border:1px solid white;
}
a.selected img,
a:hover {
background: #0066cc;
color: #ffffff;
}
</style>"}
if(category == "")
data += "<p>List of available tile groups:</p>"
data += "<p>"
for(var/iterator in paint_variants)
data += "<a href=\"?src=\ref[src];select=[iterator]\">[iterator] (view)</a><br>"
data += "</p>"
else
var/list/tiles = paint_variants[category]
data += "<p><b>[category]</b></p>"
data += "<p>"
for(var/i = 1; i <= tiles.len; i++)
if((category == "SS13 logo" || category == "Derelict logo") && i == 9)
data += "<br>"
var/datum/paint_info/I = tiles[i]
data += populate_selection(user, I)
data += "<br><br><a href=\"?src=\ref[src];select=null\">Back</a>"
data += "</p>"
var/menu = {"
<html>
<head>
<title>Tile Painter</title>
</head>
<body>
[data]
</body>
</html>
"}
user << browse(menu, "window=tilepainter")
onclose(user, "tilepainter")
return
/obj/item/weapon/tile_painter/Topic(href, href_list)
if(usr.stat || usr.restrained())
usr << browse(null, "window=tilepainter")
return
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["select"])
if(href_list["select"] == "null") category = ""
else category = href_list["select"]
show_menu(usr)
//if we got this, that means we got set_state as well
if(href_list["set_dir"])
selected = locate(href_list["set_type"])
selected.dir = text2num(href_list["set_dir"])
/obj/item/weapon/tile_painter/afterattack(atom/A, mob/user)
if(!in_range(A,user))
return
if(loc != user)
return
if(!isrobot(user) && !ishuman(user))
return 0
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
if(!(istype(A, /turf/simulated/floor)))
return 0
var/turf/simulated/floor/test = get_turf(A) //it should be the simulated floor type
//world.log << "[src]: selected=[selected.type]"
if(!selected.validate(test))
user << "<span class='warning'>An error indicator on [src] flicks on for a moment. Perhaps you're using it on the wrong floor type?</span>"
return 0
var/pdesc = ""
var/pname = ""
switch(selected.ftype)
if(PAINT_FLOOR) pname = "floor" //restoring the name of our new tile, usually if you place a floor tile on a plating it's still called "plating" for now
if(PAINT_REINFORCED) pname = "reinforced floor" //also getting rid of the plaque if it's there
if(PAINT_PLATING) pname = "plating"
if(selected.icon_state == "plaque") //some juice
pdesc = input(user,"What do you want to be described on this plaque?", "Plaque description")
pname = "Commemorative Plaque"
user << "Painting floor..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user,A, 20))
activate()
var/turf/simulated/floor/T = get_turf(A)
selected.apply(T,pname,pdesc)
return 1
return 0
/obj/item/weapon/tile_painter/proc/activate()
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/weapon/tile_painter/proc/activate() called tick#: [world.time]")
playsound(get_turf(src), 'sound/effects/extinguish.ogg', 50, 1) //pssshtt

View File

@@ -151,7 +151,7 @@
new /obj/item/weapon/wrench/socket(src)
new /obj/item/weapon/gun/projectile/flare(src) //yay for emergency lighting
new /obj/item/ammo_storage/box/flare(src)
new /obj/item/weapon/pipe_dispenser(src)
new /obj/item/device/rcd/rpd(src)
new /obj/item/device/analyzer(src)
return

View File

@@ -342,7 +342,7 @@
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd(src)
new /obj/item/device/rcd/matter/engineering(src)
/obj/structure/closet/crate/radiation/New()
..()

View File

@@ -205,9 +205,9 @@ var/list/blobstart = list()
var/list/ninjastart = list()
// list/traitors = list() //traitor list
var/list/cardinal = list( NORTH, SOUTH, EAST, WEST )
var/list/diagonal = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
var/global/universal_cult_chat = 0 //if set to 1, even human cultists can use cultchat
var/datum/station_state/start_state = null

231
code/modules/RCD/RCD.dm Normal file
View File

@@ -0,0 +1,231 @@
//Main class for the modular RCD system.
/obj/item/device/rcd
name = "\improper Rapid-Construction-Device (RCD)"
desc = "Used to rapidly construct things, or deconstruct them, for that matter."
icon = 'icons/obj/RCD.dmi'
icon_state = "rcd"
flags = FPRINT
siemens_coefficient = 1
w_class = 3
siemens_coefficient = 1
force = 10
throwforce = 10
throw_speed = 1
throw_range = 5
starting_materials = list(MAT_IRON = 50000)
w_type = RECYK_ELECTRONIC
melt_temperature = MELTPOINT_STEEL // Lots of metal
origin_tech = "engineering=4;materials=2"
var/datum/rcd_schematic/selected
var/list/schematics = list(/datum/rcd_schematic/test) //list of schematics, in definitions of RCD subtypes, no organization is needed, in New() these get organized.
var/sparky = 1 //Make sparks. LOTS OF SPARKS.
var/busy = 0
var/datum/html_interface/rcd/interface
var/datum/effect/effect/system/spark_spread/spark_system
/obj/item/device/rcd/New()
. = ..()
interface = new(src, sanitize(name)) //interface gets created BEFORE the schematics get created, so they can modify the HEAD content (RPD pipe colour picker).
init_schematics()
rebuild_ui()
spark_system = new
spark_system.set_up(5, 0, src)
spark_system.attach(src)
//create and organize the schematics
/obj/item/device/rcd/proc/init_schematics()
var/list/old_schematics = schematics
schematics = list()
for(var/path in old_schematics)
var/datum/rcd_schematic/C = new path(src)
if(!schematics[C.category])
schematics[C.category] = list()
schematics[C.category] += C
/obj/item/device/rcd/Destroy()
for(var/cat in schematics)
for(var/datum/rcd_schematic/C in schematics[cat])
C.master = null
schematics = null
del(interface)
del(spark_system)
. = ..()
/obj/item/device/rcd/attack_self(var/mob/user)
interface.show(user)
/obj/item/device/rcd/proc/rebuild_ui()
var/dat = ""
dat += {"
<b>Selected:</b> <span id="selectedname"></span>
<h2>Options</h2>
<div id="schematic_options">
</div>
<h2>Available schematics</h2>
"}
for(var/cat in schematics)
dat += "<b>[cat]:</b><ul style='list-style-type:disc'>"
var/list/L = schematics[cat]
for(var/i = 1 to L.len) //So we have the indexes.
var/datum/rcd_schematic/C = L[i]
dat += "<li><a href='?src=\ref[interface];cat=[cat];index=[i]'>[C.name]</a></li>"
dat += "</ul>"
interface.updateLayout(dat)
if(selected)
interface.updateContent("schematic_options", selected.get_HTML())
interface.updateContent("selectedname", selected.name)
/obj/item/device/rcd/Topic(var/href, var/list/href_list)
. = ..()
if(.)
return
if(href_list["cat"] && href_list["index"] && !busy) //Change selected schematic.
var/list/L = schematics[href_list["cat"]]
if(!L)
return 1
var/datum/rcd_schematic/C = L[Clamp(text2num(href_list["index"]), 1, L.len)]
if(!istype(C))
return 1
if(!(selected ? selected.deselect(usr, C) : 1 && C.select(usr, selected)))
return 1
spark()
selected = C
update_options_menu()
interface.updateContent("selectedname", selected.name)
return 1
else if(selected) //The href didn't get handled by us so we pass it down to the selected schematic.
return selected.Topic(href, href_list)
/obj/item/device/rcd/afterattack(var/atom/A, var/mob/user)
if(!selected)
return 1
if(selected.flags ^ (RCD_SELF_SANE | RCD_RANGE) && !(user.Adjacent(A) && A.Adjacent(user))) //If RCD_SELF_SANE and RCD_RANGE are disabled we use adjacency.
return 1
if(selected.flags & RCD_RANGE && selected.flags ^ RCD_SELF_SANE && get_dist(A, user) > 1) //RCD_RANGE is used AND we're NOT SELF_SANE, use range(1)
return 1
if(selected.flags & RCD_GET_TURF) //Get the turf because RCD_GET_TURF is on.
A = get_turf(A)
if(selected.flags ^ RCD_SELF_SANE && get_energy() < selected.energy_cost) //Handle energy amounts, but only if not SELF_SANE.
return 1
busy = 1 //Busy to prevent switching schematic while it's in use.
var/t = selected.attack(A, user)
if(!t) //No errors
if(selected.flags ^ RCD_SELF_COST) //Handle energy costs unless the schematic does it itself.
use_energy(selected.energy_cost, user)
else
if(istext(t))
user << "<span class='warning'>\the [src]'s error light flickers: [t]</span>"
else
user << "<span class='warning'>\the [src]'s error light flickers.</span>"
busy = 0
return 1
/obj/item/device/rcd/proc/spark()
if(sparky)
spark_system.start()
/obj/item/device/rcd/proc/get_energy()
return INFINITY
/obj/item/device/rcd/proc/use_energy(var/amount, var/mob/user)
return
/obj/item/device/rcd/proc/update_options_menu()
if(selected)
interface.updateContent("schematic_options", selected.get_HTML())
else
interface.updateContent("schematic_options", " ")
/obj/item/device/rcd/borg
var/cell_power_per_energy = 30
/obj/item/device/rcd/borg/use_energy(var/amount, var/mob/user)
if(!isrobot(user))
return
var/mob/living/silicon/robot/R = user
if(!R.cell)
return
R.cell.use(amount * cell_power_per_energy)
/obj/item/device/rcd/borg/get_energy(var/amount, var/mob/user)
if(!isrobot(user))
return 0
var/mob/living/silicon/robot/R = user
if(!R.cell)
return
return R.cell.charge * cell_power_per_energy
//Matter based RCDs.
/obj/item/device/rcd/matter
var/matter = 0
var/max_matter = 30
/obj/item/device/rcd/matter/examine(var/mob/user)
..()
user << "It currently holds [matter]/[max_matter] matter-units."
/obj/item/device/rcd/matter/attackby(var/obj/item/weapon/W, var/mob/user)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > max_matter)
user << "<span class='notice'>\the [src] can't hold any more matter-units.</span>"
return 1
qdel(W)
matter += 10
playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1)
user << "<span class='notice'>\the [src] now holds [matter]/[max_matter] matter-units.</span>"
return 1
if(isscrewdriver(W))
user << "<span class='notice'>You unscrew the access panel and release the cartridge chamber.</span>"
while(matter >= 10)
new /obj/item/weapon/rcd_ammo(user.loc)
matter -= 10
return 1
/obj/item/device/rcd/matter/use_energy(var/amount, var/mob/user)
matter -= amount
user << "<span class='notice'>\the [src] currently holds [matter]/[max_matter] matter-units."
/obj/item/device/rcd/matter/get_energy()
return matter

64
code/modules/RCD/RPD.dm Normal file
View File

@@ -0,0 +1,64 @@
/obj/item/device/rcd/rpd
name = "Rapid Piping Device (RPD)"
desc = "A device used to rapidly pipe things."
icon_state = "rpd"
starting_materials = list(MAT_IRON = 75000, MAT_GLASS = 37500)
schematics = list(
/* Utilities */
/datum/rcd_schematic/decon_pipes,
/datum/rcd_schematic/paint_pipes,
/* Regular pipes */
/datum/rcd_schematic/pipe,
/datum/rcd_schematic/pipe/bent,
/datum/rcd_schematic/pipe/manifold,
/datum/rcd_schematic/pipe/valve,
/datum/rcd_schematic/pipe/dvalve,
/datum/rcd_schematic/pipe/cap,
/datum/rcd_schematic/pipe/manifold_4w,
/datum/rcd_schematic/pipe/mtvalve,
/datum/rcd_schematic/pipe/dtvalve,
/* Devices */
/datum/rcd_schematic/pipe/connector,
/datum/rcd_schematic/pipe/unary_vent,
/datum/rcd_schematic/pipe/passive_vent,
/datum/rcd_schematic/pipe/pump,
/datum/rcd_schematic/pipe/passive_gate,
/datum/rcd_schematic/pipe/volume_pump,
/datum/rcd_schematic/pipe/scrubber,
/datum/rcd_schematic/pmeter,
/datum/rcd_schematic/gsensor,
/datum/rcd_schematic/pipe/filter,
/datum/rcd_schematic/pipe/mixer,
/datum/rcd_schematic/pipe/thermal_plate,
/datum/rcd_schematic/pipe/injector,
/datum/rcd_schematic/pipe/dp_vent,
/* H/E Pipes */
/datum/rcd_schematic/pipe/he,
/datum/rcd_schematic/pipe/he_bent,
/datum/rcd_schematic/pipe/juntion,
/datum/rcd_schematic/pipe/heat_exchanger,
/* Insulated Pipes */
/datum/rcd_schematic/pipe/insulated,
/datum/rcd_schematic/pipe/insulated_bent,
/datum/rcd_schematic/pipe/insulated_manifold,
/datum/rcd_schematic/pipe/insulated_4w_manifold,
/* Disposal Pipes */
/datum/rcd_schematic/pipe/disposal,
/datum/rcd_schematic/pipe/disposal/bent,
/datum/rcd_schematic/pipe/disposal/junction,
/datum/rcd_schematic/pipe/disposal/y_junction,
/datum/rcd_schematic/pipe/disposal/trunk,
/datum/rcd_schematic/pipe/disposal/bin,
/datum/rcd_schematic/pipe/disposal/outlet,
/datum/rcd_schematic/pipe/disposal/chute,
/datum/rcd_schematic/pipe/disposal/sort,
/datum/rcd_schematic/pipe/disposal/sort_wrap
)

39
code/modules/RCD/RSF.dm Normal file
View File

@@ -0,0 +1,39 @@
//Yes, subtype of engineering. (compressed matter handling.)
/obj/item/device/rcd/matter/rsf
name = "\improper Rapid-Service-Fabricator"
desc = "A device used to rapidly deploy service items."
icon_state = "rsf"
starting_materials = list(MAT_IRON = 40000)
max_matter = 40
schematics = list(
/datum/rcd_schematic/rsf/glass,
/datum/rcd_schematic/rsf/flask,
/datum/rcd_schematic/rsf/paper,
/datum/rcd_schematic/rsf/candle,
/datum/rcd_schematic/rsf/dice,
/datum/rcd_schematic/rsf/cards,
/datum/rcd_schematic/rsf/cardboard
)
/obj/item/device/rcd/borg/rsf
name = "\improper Rapid-Service-Fabricator"
desc = "A device used to rapidly deploy service items."
icon_state = "rsf"
cell_power_per_energy = 50
schematics = list(
/datum/rcd_schematic/rsf/dosh,
/datum/rcd_schematic/rsf/glass,
/datum/rcd_schematic/rsf/flask,
/datum/rcd_schematic/rsf/paper,
/datum/rcd_schematic/rsf/candle,
/datum/rcd_schematic/rsf/dice,
/datum/rcd_schematic/rsf/cards,
/datum/rcd_schematic/rsf/cardboard
)

45
code/modules/RCD/engie.dm Normal file
View File

@@ -0,0 +1,45 @@
/obj/item/device/rcd/matter/engineering
schematics = list(
/datum/rcd_schematic/decon,
/datum/rcd_schematic/con_floors,
/datum/rcd_schematic/con_walls,
/datum/rcd_schematic/con_airlock
)
var/disabled = 0
/obj/item/device/rcd/matter/engineering/afterattack(var/atom/A, var/mob/user)
if(disabled)
return
return ..()
/obj/item/device/rcd/matter/engineering/suicide_act(var/mob/user)
visible_message("<span class='danger'>[user] is using the deconstruct function on \the [src] on \himself! It looks like \he's trying to commit suicide!</span>")
return (user.death(1))
/obj/item/device/rcd/borg/engineering
schematics = list(
/datum/rcd_schematic/decon,
/datum/rcd_schematic/con_floors,
/datum/rcd_schematic/con_walls,
/datum/rcd_schematic/con_airlock/no_access
)
/obj/item/weapon/rcd_ammo
name = "compressed matter cartridge"
desc = "Highly compressed matter in a cartridge form, used in various fabricators."
icon = 'icons/obj/ammo.dmi'
icon_state = "rcd"
item_state = "rcdammo"
opacity = 0
density = 0
anchored = 0.0
origin_tech = "materials=2"
w_class = 2.0
starting_materials = list(MAT_IRON = 30000, MAT_GLASS = 15000)
w_type = RECYK_ELECTRONIC
/obj/item/weapon/rcd_ammo/attackby(var/obj/O, mob/user)
if(is_type_in_list(O, list(/obj/item/device/rcd/matter/engineering, /obj/item/device/rcd/matter/rsf)) || (istype(O, /obj/item/device/material_synth) && !istype(O, /obj/item/device/material_synth/robot)))
return O.attackby(src, user)

View File

@@ -0,0 +1,83 @@
/datum/rcd_schematic
var/name = "whomp" //Obvious.
var/category = "" //More obvious. Yes you need a category.
var/energy_cost = 0 //Energy cost of this schematic.
var/flags = 0 //Bitflags.
var/obj/item/device/rcd/master //Okay all of the vars here are obvious...
/datum/rcd_schematic/New(var/obj/item/device/rcd/n_master)
master = n_master
. = ..()
/*
Called when the RCD this thing belongs to attacks an atom.
params:
- var/atom/A: The atom being attacked.
- var/mob/user: The mob using the RCD.
return value:
- !0: Non-descriptive error.
- string: Error with reason.
- 0: No errors.
*/
/datum/rcd_schematic/proc/attack(var/atom/A, var/mob/user)
return 0
/*
Called when the RCD's schematic changes away from this one.
params:
- var/mob/user: The user, duh...
- var/datum/rcd_schematic/old_schematic: The new schematic.
return value:
- !0: Switch allowed.
- 0: Switch not allowed
*/
/datum/rcd_schematic/proc/deselect(var/mob/user, var/datum/rcd_schematic/new_schematic)
return 1
/*
Called when the RCD's schematic changes to this one
Note: this is called AFTER deselect().
params:
- var/mob/user: The user, duh...
- var/datum/rcd_schematic/old_schematic: The schematic before this one.
return value:
- !0: Switch allowed.
- 0: Switch not allowed
*/
/datum/rcd_schematic/proc/select(var/mob/user, var/datum/rcd_schematic/old_schematic)
return 1
/*
Called to get the HTML for things like the direction menu on an RPD.
Note:
- Do not do hrefs to the src, any hrefs should direct at the HTML interface, Topic() calls are passed down if not used by the RCD itself.
- Always return something here ("" is not enough), else there will be a Jscript error for clients.
params:
- I don't need to explain this.
*/
/datum/rcd_schematic/proc/get_HTML()
return " "
/*
Called when a client logs in and the required resources need to be sent to the cache.
Use client << browse_rsc() to sent the files.
params:
- var/client/client: client to send to.
*/
/datum/rcd_schematic/proc/send_icons(var/client/client)
return

View File

@@ -0,0 +1,394 @@
/datum/rcd_schematic/decon
name = "Deconstruct"
category = "Construction"
energy_cost = 5
var/can_r_wall = 0
/datum/rcd_schematic/decon/attack(var/atom/A, var/mob/user)
if(istype(A, /turf/simulated/wall))
var/turf/simulated/wall/T = A
if(istype(T, /turf/simulated/wall/r_wall) && !can_r_wall)
return "it cannot deconstruct reinforced walls!"
user << "Deconstructing \the [T]..."
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user, T, 40))
if(master.get_energy() < energy_cost)
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
T.ChangeTurf(/turf/simulated/floor/plating)
return 0
else if(istype(A, /turf/simulated/floor))
var/turf/simulated/floor/T = A
user << "Deconstructing \the [T]..."
if(do_after(user, T, 50))
if(master.get_energy() < energy_cost)
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
T.ChangeTurf(get_base_turf(T.z))
return 0
else if(istype(A, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/D = A
user << "Deconstructing \the [D]..."
if(do_after(user, D, 50))
if(master.get_energy() < energy_cost)
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
qdel(D)
return 0
return 1
/datum/rcd_schematic/con_floors
name = "Build floors"
category = "Construction"
energy_cost = 1
/datum/rcd_schematic/con_floors/attack(var/atom/A, var/mob/user)
if(!(istype(A, /turf/space) && !istype(A, /turf/space/transit)))
return "it can only create floors on space!"
var/turf/space/S = A
user << "Building floor..."
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
S.ChangeTurf(/turf/simulated/floor/plating/airless)
return 0
/datum/rcd_schematic/con_walls
name = "Build walls"
category = "Construction"
energy_cost = 3
/datum/rcd_schematic/con_walls/attack(var/atom/A, var/mob/user)
if(!istype(A, /turf/simulated/floor))
return 1
var/turf/simulated/floor/T = A
user << "Building wall"
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user, A, 20))
if(master.get_energy() < energy_cost)
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
T.ChangeTurf(/turf/simulated/wall)
return 0
return 1
/datum/rcd_schematic/con_airlock
name = "Build airlock"
category = "Construction"
energy_cost = 3
var/allow_access = 1
var/selected_name = "Airlock"
var/list/selected_access = list() //Selected access levels.
var/one_access = 0
var/list/schematics = list()
var/datum/airlock_schematic/selected
/datum/rcd_schematic/con_airlock/no_access
allow_access = 0
/datum/rcd_schematic/con_airlock/New()
. = ..()
for(var/path in typesof(/datum/airlock_schematic))
schematics += new path
selected = schematics[1]
/datum/rcd_schematic/con_airlock/deselect()
. = ..()
selected = schematics[1] //Reset the selection.
/datum/rcd_schematic/con_airlock/send_icons(var/client/client)
for(var/datum/airlock_schematic/C in schematics)
C.send_icon(client)
/datum/rcd_schematic/con_airlock/get_HTML()
. = "<p>"
for(var/i = 1 to schematics.len)
var/datum/airlock_schematic/C = schematics[i]
var/selected_text = ""
if(selected == C)
selected_text = " class='selected'"
. += "<a href='?src=\ref[master.interface];set_selected=[i]' title='[sanitize(C.name)]'[selected_text]><img src='[C.img]'/></a>"
if(!(i % 5))
. += "<br/>"
. += {"
<!-- Name form -->
<form action="?src=\ref[master.interface]" method="get">
<input type="hidden" name="src" value="\ref[master.interface]"/> <!-- Here so the SRC href gets passed down -->
<input type="text" name="new_name" value="[selected_name]"/>
<input type="submit" name="act" value="Save Name"/>
</form><br/>
"}
if(allow_access)
. += {"
<!-- Access list visibility toggler -->
<script>
$("#accessListShowButton").click(
function toggleAccessList()
{
if($("#accessList").is(":hidden"))
{
$("#accessList").slideDown("fast");
$("#accessListShowButton").html("Hide access controls");
}
else
{
$("#accessList").slideUp("fast");
$("#accessListShowButton").html("Show access controls");
}
}
);
</script>
<a id="accessListShowButton">Show access controls</a><br/>
<!-- Access levels form. -->
<form action="?src=\ref[master.interface]" method="get" id="accessList" style="display: none;">
<input type="hidden" name="src" value="\ref[master.interface]"/> <!-- Here so the SRC href gets passed down -->
<input type="submit" value="Save Access Settings"/><br/><br/>
<!-- One access radio buttons -->
Access requirement is set to: <br/>
"}
if(one_access) //So we check the correct button by default
. += {"
<input type="radio" name="oneAccess" value="0"/>ALL
<br/>
<input type="radio" name="oneAccess" value="1" checked/>ONE
"}
else
. += {"
<input type="radio" name="oneAccess" value="0" checked/>ALL
<br/>
<input type="radio" name="oneAccess" value="1"/>ONE
"}
. += {"<br/>
Access levels: <br/>
"}
//Access level selection comes here.
for(var/access in get_all_accesses())
var/access_name = get_access_desc(access)
if(!access_name) //I noticed in testing there's a broken access level that shows up, this should filter it out.
continue
var/checked = ""
if(access in selected_access)
checked = " checked"
. += {"
<input type="checkbox" name="[access]"[checked]/> [access_name] <br/>
"}
. += "</form>"
. += "</p>"
/datum/rcd_schematic/con_airlock/Topic(var/href, var/href_list)
if(href_list["set_selected"])
var/idx = Clamp(text2num(href_list["set_selected"]), 1, schematics.len)
var/datum/airlock_schematic/C = schematics[idx]
selected = C
selected_name = C.name //Reset the name.
master.update_options_menu()
return 1
if(href_list["new_name"])
selected_name = copytext(sanitize(href_list["new_name"]), 1, MAX_NAME_LEN)
master.update_options_menu()
return 1
if(href_list["oneAccess"] && allow_access)
one_access = text2num(href_list["oneAccess"])
//Along with oneAccess, the hrefs for access levels get called, as such we process them here before we return 1
selected_access.Cut()
var/list/access_levels = get_all_accesses()
for(var/href_key in href_list - list("oneAccess", "src")) //This should loop through all the access levels that are on.
var/access = text2num(href_key)
if(!(access in access_levels)) //Only check valid access levels.
continue
selected_access |= access
master.update_options_menu()
return 1
/datum/rcd_schematic/con_airlock/attack(var/atom/A, var/mob/user)
if(!istype(A, /turf))
return 1
if(locate(/obj/machinery/door/airlock) in A)
return "there is already an airlock on this spot!"
user << "Building airlock..."
if(!do_after(user, A, 50))
return 1
if(master.get_energy() < energy_cost)
return 1
if(locate(/obj/machinery/door/airlock) in A)
return "there is already an airlock on this spot!"
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
var/obj/machinery/door/airlock/D = new selected.airlock_type(A)
if(capitalize(selected_name) == selected_name) //The name inputted is capitalized, so we add \improper.
D.name = "\improper [selected_name]"
else
D.name = selected_name
if(allow_access)
if(one_access)
D.req_one_access = selected_access.Copy()
else
D.req_access = selected_access.Copy()
D.autoclose = 1
//Schematics for schematics, I know, but it's OOP!
/datum/airlock_schematic
var/name = "airlock" //Name of the airlock for the tooltip.
var/airlock_type = /obj/machinery/door/airlock //Type of the airlock.
var/img = "rcd_airlock.png" //Icon to send to the client AND to use for the preview.
var/icon = 'icons/obj/doors/Doorint.dmi' //Icon file to pull the icon from to send to the client.
/datum/airlock_schematic/proc/send_icon(var/client/client)
client << browse_rsc(new /icon(icon, "door_closed"), img)
//ALL THE AIRLOCK TYPES.
/datum/airlock_schematic/engie
name = "\improper Engineering Airlock"
airlock_type = /obj/machinery/door/airlock/engineering
img = "rcd_airlock_eng.png"
icon = 'icons/obj/doors/Dooreng.dmi'
/datum/airlock_schematic/atmos
name = "\improper Atmospherics Airlock"
airlock_type = /obj/machinery/door/airlock/atmos
img = "rcd_airlock_atmos.png"
icon = 'icons/obj/doors/Dooratmo.dmi'
/datum/airlock_schematic/sec
name = "\improper Security Airlock"
airlock_type = /obj/machinery/door/airlock/security
img = "rcd_airlock_sec.png"
icon = 'icons/obj/doors/Doorsec.dmi'
/datum/airlock_schematic/command
name = "\improper Command Airlock"
airlock_type = /obj/machinery/door/airlock/command
img = "rcd_airlock_command.png"
icon = 'icons/obj/doors/Doorcom.dmi'
/datum/airlock_schematic/med
name = "\improper Medical Airlock"
airlock_type = /obj/machinery/door/airlock/medical
img = "rcd_airlock_med.png"
icon = 'icons/obj/doors/Doormed.dmi'
/datum/airlock_schematic/sci
name = "\improper Research Airlock"
airlock_type = /obj/machinery/door/airlock/research
img = "rcd_airlock_sci.png"
icon = 'icons/obj/doors/doorresearch.dmi'
/datum/airlock_schematic/mining
name = "\improper Mining Airlock"
airlock_type = /obj/machinery/door/airlock/mining
img = "rcd_airlock_mining.png"
icon = 'icons/obj/doors/Doormining.dmi'
/datum/airlock_schematic/maint
name = "\improper Maintenance Access"
airlock_type = /obj/machinery/door/airlock/maintenance
img = "rcd_airlock_maint.png"
icon = 'icons/obj/doors/Doormaint.dmi'
/datum/airlock_schematic/ext
name = "\improper External Airlock"
airlock_type = /obj/machinery/door/airlock/external
img = "rcd_airlock_ext.png"
icon = 'icons/obj/doors/Doorext.dmi'
/datum/airlock_schematic/high_sec
name = "\improper High-Tech Security Airlock"
airlock_type = /obj/machinery/door/airlock/highsecurity
img = "rcd_airlock_high-sec.png"
icon = 'icons/obj/doors/hightechsecurity.dmi'
/datum/airlock_schematic/glass
name = "\improper Glass Airlock"
airlock_type = /obj/machinery/door/airlock/glass
img = "rcd_airlock_glass.png"
icon = 'icons/obj/doors/Doorglass.dmi'
/datum/airlock_schematic/glass_eng
name = "\improper Glass Engineering Airlock"
airlock_type = /obj/machinery/door/airlock/glass_engineering
img = "rcd_airlock_glass_eng.png"
icon = 'icons/obj/doors/Doorengglass.dmi'
/datum/airlock_schematic/glass_atmos
name = "\improper Glass Atmospherics Airlock"
airlock_type = /obj/machinery/door/airlock/glass_atmos
img = "rcd_airlock_glass_atmos.png"
icon = 'icons/obj/doors/Dooratmoglass.dmi'
/datum/airlock_schematic/glass_sec
name = "\improper Glass Security Airlock"
airlock_type = /obj/machinery/door/airlock/glass_security
img = "rcd_airlock_glass_sec.png"
icon = 'icons/obj/doors/Doorsecglass.dmi'
/datum/airlock_schematic/glass_command
name = "\improper Glass Command Airlock"
airlock_type = /obj/machinery/door/airlock/glass_command
img = "rcd_airlock_glass_com.png"
icon = 'icons/obj/doors/Doorcomglass.dmi'
/datum/airlock_schematic/glass_med
name = "\improper Glass Medical Airlock"
airlock_type = /obj/machinery/door/airlock/glass_medical
img = "rcd_airlock_glass_med.png"
icon = 'icons/obj/doors/doormedglass.dmi'
/datum/airlock_schematic/glass_sci
name = "\improper Glass Research Airlock"
airlock_type = /obj/machinery/door/airlock/glass_research
img = "rcd_airlock_glass_sci.png"
icon = 'icons/obj/doors/doorresearchglass.dmi'
/datum/airlock_schematic/glass_mining
name = "\improper Glass Mining Airlock"
airlock_type = /obj/machinery/door/airlock/glass_mining
img = "rcd_airlock_glass_mining.png"
icon = 'icons/obj/doors/Doorminingglass.dmi'

View File

@@ -0,0 +1,572 @@
#define PIPE_BINARY 0
#define PIPE_BENT 1
#define PIPE_TRINARY 2
#define PIPE_TRIN_M 3
#define PIPE_UNARY 4
//UTILITIES.
/datum/rcd_schematic/decon_pipes
name = "Eat pipes"
category = "Utilities"
flags = RCD_RANGE
/datum/rcd_schematic/decon_pipes/attack(var/atom/A, var/mob/user)
if(!istype(A, /atom/movable))
return 1
var/atom/movable/AM = A
if(!is_type_in_list(AM, list(/obj/item/pipe, /obj/item/pipe_meter, /obj/item/pipe_gsensor, /obj/structure/disposalconstruct)))
return 1
user << "Destroying Pipe..."
playsound(get_turf(master), 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, AM, 5))
return 1
if(!AM)
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
if(istype(AM, /obj/item/pipe))
returnToPool(A)
else
qdel(AM)
/datum/rcd_schematic/paint_pipes
name = "Paint pipes"
category = "Utilities"
flags = RCD_RANGE
var/list/available_colors = list(
"grey" = "#CCCCCC",
"red" = "#800000",
"blue" = "#000080",
"cyan" = "#1C94C4",
"green" = "#00CC00",
"yellow" = "#FFCC00",
"purple" = "purple"
)
var/selected_color = "grey"
/datum/rcd_schematic/paint_pipes/New(var/obj/item/device/rcd/n_master)
. = ..()
if(!master || !master.interface)
return
//Add the colour CSS defines to the master's interface's HEAD.
var/color_css
for(var/color_name in available_colors)
var/color = available_colors[color_name]
color_css += {"
a.color.[color_name] {
color: [color];
}
a.color.[color_name]:hover {
border:1px solid [color];
}
a.color.[color_name].selected {
background-color: [color];
}
"}
master.interface.head += "<style type='text/css'>[color_css]</style>"
/datum/rcd_schematic/paint_pipes/deselect(var/mob/user, var/datum/rcd_schematic/new_schematic)
. = ..()
selected_color = available_colors[1]
/datum/rcd_schematic/paint_pipes/get_HTML()
for(var/color_name in available_colors)
var/selected = ""
if(color_name == selected_color)
selected = " selected"
. += "<a class='color [color_name][selected]' href='?src=\ref[master.interface];set_color=[color_name]'>&bull;</a>"
/datum/rcd_schematic/paint_pipes/attack(var/atom/A, var/mob/user)
if(!istype(A, /obj/machinery/atmospherics))
return 1
var/obj/machinery/atmospherics/O = A
if(!O.available_colors || !O.available_colors.len)
return "you cannot paint this!"
if(!(selected_color in O.available_colors))
return "the color '[selected_color]' is not available for \a [O]"
playsound(get_turf(master), 'sound/machines/click.ogg', 50, 1)
O._color = selected_color
user.visible_message("<span class='notice'>[user] paints \the [O] [selected_color].</span>","<span class='notice'>You paint \the [O] [selected_color].</span>")
O.update_icon()
/datum/rcd_schematic/paint_pipes/Topic(var/href, var/list/href_list)
if(href_list["set_color"])
if(href_list["set_color"] in available_colors)
selected_color = href_list["set_color"]
master.update_options_menu()
return 1
//METERS AND SENSORS.
/datum/rcd_schematic/gsensor
name = "Gas sensor"
category = "Devices"
flags = RCD_RANGE | RCD_GET_TURF
/datum/rcd_schematic/gsensor/attack(var/atom/A, var/mob/user)
if(!isturf(A))
return
user << "Building gas sensor..."
playsound(get_turf(master), 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, A, 20))
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
new /obj/item/pipe_gsensor(A)
/datum/rcd_schematic/pmeter
name = "Pipe meter"
category = "Devices"
flags = RCD_RANGE | RCD_GET_TURF
/datum/rcd_schematic/pmeter/attack(var/atom/A, var/mob/user)
if(!isturf(A))
return
user << "Building pipe meter..."
playsound(get_turf(master), 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, A, 20))
return 1
playsound(get_turf(master), 'sound/items/Deconstruct.ogg', 50, 1)
new /obj/item/pipe_meter(A)
//ACTUAL PIPES.
/datum/rcd_schematic/pipe
name = "Pipe"
category = "Regular pipes"
flags = RCD_RANGE | RCD_GET_TURF
var/pipe_id = PIPE_SIMPLE_STRAIGHT
var/pipe_type = PIPE_BINARY
var/selected_dir = NORTH
/datum/rcd_schematic/pipe/send_icons(var/client/client)
var/list/dir_list //We get the dirs to loop through and send images to the client for.
switch(pipe_type)
if(PIPE_UNARY, PIPE_TRINARY)
dir_list = cardinal
if(PIPE_BINARY)
dir_list = list(NORTH, EAST)
if(PIPE_BENT)
dir_list = diagonal
if(PIPE_TRIN_M)
dir_list = alldirs
else
dir_list = list()
for(var/dir in dir_list)
send_icon(client, dir)
/datum/rcd_schematic/pipe/proc/send_icon(var/client/client, var/dir)
client << browse_rsc(new/icon('icons/obj/pipe-item.dmi', pipeID2State[pipe_id + 1], dir), "RPD_[pipe_id]_[dir].png")
/datum/rcd_schematic/pipe/get_HTML()
. += "<p>"
switch(pipe_type)
if(PIPE_BINARY)
. += render_dir_image(NORTH, "Vertical")
. += render_dir_image(EAST, "Horizontal")
if(PIPE_UNARY)
. += render_dir_image(NORTH, "North")
. += render_dir_image(EAST, "East")
. += render_dir_image(SOUTH, "South")
. += render_dir_image(WEST, "West")
if(PIPE_BENT)
. += render_dir_image(9, "West to North")
. += render_dir_image(5, "North to East")
. += "<br/>"
. += render_dir_image(10, "South to West")
. += render_dir_image(6, "East to South")
if(PIPE_TRINARY)
. += render_dir_image(NORTH, "West South East")
. += render_dir_image(EAST, "North West South")
. += "<br/>"
. += render_dir_image(SOUTH, "East North West")
. += render_dir_image(WEST, "South East North")
if(PIPE_TRIN_M)
. += render_dir_image(NORTH, "West South East")
. += render_dir_image(EAST, "North West South")
. += "<br/>"
. += render_dir_image(SOUTH, "East North West")
. += render_dir_image(WEST, "South East North")
. += "<br/>"
. += render_dir_image(6, "West South East")
. += render_dir_image(5, "North West South")
. += "<br/>"
. += render_dir_image(9, "East North West")
. += render_dir_image(10, "South East North")
. += "</p>"
/datum/rcd_schematic/pipe/proc/render_dir_image(var/dir, var/title)
var/selected = ""
if(selected_dir == dir)
selected = " class='selected'"
return "<a href='?src=\ref[master.interface];set_dir=[dir]'[selected] title='[title]'><img src='RPD_[pipe_id]_[dir].png'/></a>"
/datum/rcd_schematic/pipe/Topic(var/href, var/href_list)
if(href_list["set_dir"])
var/dir = text2num(href_list["set_dir"])
if(!(dir in alldirs) || selected_dir == dir)
return 1
selected_dir = dir
master.update_options_menu()
return 1
/datum/rcd_schematic/pipe/attack(var/atom/A, var/mob/user)
user << "Building Pipes ..."
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, A, 20))
return 1
playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1)
var/obj/item/pipe/P = getFromPool(/obj/item/pipe, A, pipe_id, selected_dir)
P.update()
P.add_fingerprint(user)
//Disposal piping.
/datum/rcd_schematic/pipe/disposal
category = "Disposal Pipes"
pipe_id = DISP_PIPE_STRAIGHT
var/actual_id = 0 //This is needed because disposals construction code is a shit.
/datum/rcd_schematic/pipe/disposal/send_icon(var/client/client, var/dir)
client << browse_rsc(new/icon('icons/obj/pipes/disposal.dmi', disposalpipeID2State[pipe_id + 1], dir), "RPD_D_[pipe_id]_[dir].png")
/datum/rcd_schematic/pipe/disposal/render_dir_image(var/dir, var/title)
var/selected = ""
if(selected_dir == dir)
selected = " class='selected'"
return "<a href='?src=\ref[master.interface];set_dir=[dir]'[selected] title='[title]'><img src='RPD_D_[pipe_id]_[dir].png'/></a>"
/datum/rcd_schematic/pipe/disposal/attack(var/atom/A, var/mob/user)
user << "Building Pipes ..."
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, A, 20))
return 1
playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1)
var/obj/structure/disposalconstruct/C = new/obj/structure/disposalconstruct(A)
C.dir = selected_dir
C.ptype = actual_id
C.update()
C.add_fingerprint(user)
var/global/list/disposalpipeID2State=list(
"pipe-s",
"pipe-c",
"pipe-j1",
"pipe-y",
"pipe-t",
"disposal",
"outlet",
"intake",
"pipe-j1s",
"pipe-j1s",
)
//PIPE DEFINES START HERE.
//REGULAR PIPES.
//Straight is the base class, so not included.
/datum/rcd_schematic/pipe/bent
name = "Bent Pipe"
pipe_id = PIPE_SIMPLE_BENT
pipe_type = PIPE_BENT
/datum/rcd_schematic/pipe/manifold
name = "Manifold"
pipe_id = PIPE_MANIFOLD
pipe_type = PIPE_TRINARY
/datum/rcd_schematic/pipe/valve
name = "Manual Valve"
pipe_id = PIPE_MVALVE
pipe_type = PIPE_BINARY
/datum/rcd_schematic/pipe/dvalve
name = "Digital Valve"
pipe_id = PIPE_DVALVE
pipe_type = PIPE_BINARY
/datum/rcd_schematic/pipe/cap
name = "Pipe Cap"
pipe_id = PIPE_CAP
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/manifold_4w
name = "4-Way Manifold"
pipe_id = PIPE_MANIFOLD4W
pipe_type = PIPE_BINARY
/datum/rcd_schematic/pipe/mtvalve
name = "Manual T-Valve"
pipe_id = PIPE_MTVALVE
pipe_type = PIPE_TRIN_M
/datum/rcd_schematic/pipe/dtvalve
name = "Digital T-Valve"
pipe_id = PIPE_DTVALVE
pipe_type = PIPE_TRIN_M
//DEVICES.
/datum/rcd_schematic/pipe/connector
name = "Connecter"
category = "Devices"
pipe_id = PIPE_CONNECTOR
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/unary_vent
name = "Unary Vent"
category = "Devices"
pipe_id = PIPE_UVENT
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/passive_vent
name = "Passive Vent"
category = "Devices"
pipe_id = PIPE_PASV_VENT
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/pump
name = "Gas Pump"
category = "Devices"
pipe_id = PIPE_PUMP
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/passive_gate
name = "Passive gate"
category = "Devices"
pipe_id = PIPE_PASSIVE_GATE
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/volume_pump
name = "Volume Pump"
category = "Devices"
pipe_id = PIPE_VOLUME_PUMP
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/scrubber
name = "Scrubber"
category = "Devices"
pipe_id = PIPE_SCRUBBER
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/filter
name = "Gas Filter"
category = "Devices"
pipe_id = PIPE_GAS_FILTER
pipe_type = PIPE_TRIN_M
/datum/rcd_schematic/pipe/mixer
name = "Gas Mixer"
category = "Devices"
pipe_id = PIPE_GAS_MIXER
pipe_type = PIPE_TRIN_M
/datum/rcd_schematic/pipe/thermal_plate
name = "Thermal Plate"
category = "Devices"
pipe_id = PIPE_THERMAL_PLATE
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/injector
name = "Injector"
category = "Devices"
pipe_id = PIPE_INJECTOR
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/dp_vent
name = "Dual-Port Vent"
category = "Devices"
pipe_id = PIPE_DP_VENT
pipe_type = PIPE_UNARY
//H/E Pipes.
/datum/rcd_schematic/pipe/he
name = "Pipe"
category = "Heat Exchange"
pipe_id = PIPE_HE_STRAIGHT
pipe_type = PIPE_BINARY
/datum/rcd_schematic/pipe/he_bent
name = "Bent Pipe"
category = "Heat Exchange"
pipe_id = PIPE_HE_BENT
pipe_type = PIPE_BENT
/datum/rcd_schematic/pipe/juntion
name = "Junction"
category = "Heat Exchange"
pipe_id = PIPE_JUNCTION
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/heat_exchanger
name = "Heat Exchanger"
category = "Heat Exchange"
pipe_id = PIPE_HEAT_EXCHANGE
pipe_type = PIPE_UNARY
//INSULATED PIPES.
/datum/rcd_schematic/pipe/insulated
name = "Pipe"
category = "Insulated Pipes"
pipe_id = PIPE_INSULATED_STRAIGHT
pipe_type = PIPE_BINARY
/datum/rcd_schematic/pipe/insulated_bent
name = "Bent Pipe"
category = "Insulated Pipes"
pipe_id = PIPE_INSULATED_BENT
pipe_type = PIPE_BENT
/datum/rcd_schematic/pipe/insulated_manifold
name = "Manifold"
category = "Insulated Pipes"
pipe_id = PIPE_INSUL_MANIFOLD
pipe_type = PIPE_TRINARY
/datum/rcd_schematic/pipe/insulated_4w_manifold
name = "4-Way Manifold"
category = "Insulated Pipes"
pipe_id = PIPE_INSUL_MANIFOLD4W
pipe_type = PIPE_BINARY
//DISPOSAL PIPES
//Again basic straight is handled in the parent.
/datum/rcd_schematic/pipe/disposal/bent
name = "Bent Pipe"
pipe_id = DISP_PIPE_BENT
actual_id = 1
pipe_type = PIPE_UNARY //Yes this makes no sense but BLAME FUCKING DISPOSALS CODE.
/datum/rcd_schematic/pipe/disposal/junction
name = "Junction"
pipe_id = DISP_JUNCTION
actual_id = 2
pipe_type = PIPE_TRINARY
/datum/rcd_schematic/pipe/disposal/y_junction
name = "Y-Junction"
pipe_id = DISP_YJUNCTION
actual_id = 4
pipe_type = PIPE_TRINARY
/datum/rcd_schematic/pipe/disposal/trunk
name = "Trunk"
pipe_id = DISP_END_TRUNK
actual_id = 5
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/disposal/bin
name = "Bin"
pipe_id = DISP_END_BIN
actual_id = 6
pipe_type = -1 //Will disable the icon.
/datum/rcd_schematic/pipe/disposal/outlet
name = "Outlet"
pipe_id = DISP_END_OUTLET
actual_id = 7
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/disposal/chute
name = "Chute"
pipe_id = DISP_END_CHUTE
actual_id = 8
pipe_type = PIPE_UNARY
/datum/rcd_schematic/pipe/disposal/sort
name = "Sorting Junction"
pipe_id = DISP_SORT_JUNCTION
actual_id = 9
pipe_type = PIPE_TRINARY
/datum/rcd_schematic/pipe/disposal/sort_wrap
name = "Wrapped Sorting Junction"
pipe_id = DISP_SORT_WRAP_JUNCTION
actual_id = 11
pipe_type = PIPE_TRINARY

View File

@@ -0,0 +1,46 @@
//RSF schematics.
/datum/rcd_schematic/rsf
energy_cost = 1
var/spawn_type
category = "Service"
/datum/rcd_schematic/rsf/attack(var/atom/A, var/mob/user)
if(!is_type_in_list(A, list(/obj/structure/table, /turf/simulated/floor)))
return 1
user << "Dispensing [lowertext(name)]"
playsound(get_turf(src), 'sound/machines/click.ogg', 10, 1)
new spawn_type(get_turf(A))
/datum/rcd_schematic/rsf/dosh
name = "Dosh"
spawn_type = /obj/item/weapon/spacecash/c10
energy_cost = 4
/datum/rcd_schematic/rsf/glass
name = "Glass"
spawn_type = /obj/item/weapon/reagent_containers/food/drinks/drinkingglass
/datum/rcd_schematic/rsf/flask
name = "Flask"
spawn_type = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask
/datum/rcd_schematic/rsf/paper
name = "Paper"
spawn_type = /obj/item/weapon/paper
/datum/rcd_schematic/rsf/candle
name = "Candle"
spawn_type = /obj/item/candle
/datum/rcd_schematic/rsf/dice
name = "Dice"
spawn_type = /obj/item/weapon/storage/pill_bottle/dice
/datum/rcd_schematic/rsf/cards
name = "Deck of cards"
spawn_type = /obj/item/toy/cards
/datum/rcd_schematic/rsf/cardboard
name = "Cardboard Sheet..."
spawn_type = /obj/item/stack/sheet/cardboard

View File

@@ -0,0 +1,6 @@
/datum/rcd_schematic/test
category = "test"
/datum/rcd_schematic/test/attack(var/atom/A, var/mob/user)
user << "WHOMP"
A.color = "#FFFF00"

View File

@@ -0,0 +1,609 @@
#define PAINT_ALL 0
#define PAINT_FLOOR 1
#define PAINT_PLATING 2
#define PAINT_REINFORCED 3
#define DIR_ONE 1 //For those tiles with only one direction.
#define DIR_ORTHO 2 //Orthogonal (south, west, north, east).
#define DIR_ALL 3 //All the directions.
#define PAINT_ASK_DESC = 1
s
/datum/rcd_schematic/tile
name = "Decals"
category = "Painting"
flags = RCD_GET_TURF
var/datum/paint_info/selected
var/selected_dir = 2
/datum/rcd_schematic/tile/send_icons(var/client/client)
var/list/our_list = get_our_list()
if(!our_list)
return
for(var/datum/paint_info/P in our_list)
for(var/ndir in get_dir_list_by_dir_type(P.adirs))
client << browse_rsc(new/icon(P.icon, P.icon_state, ndir), "[P.file_name][P.icon_state]_[ndir].png")
/datum/rcd_schematic/tile/proc/get_dir_list_by_dir_type(var/adir)
switch(adir)
if(DIR_ONE)
return list(SOUTH)
if(DIR_ORTHO)
return cardinal
if(DIR_ALL)
return alldirs
/datum/rcd_schematic/tile/get_HTML()
. += "<p>"
var/list/our_list = get_our_list()
for(var/datum/paint_info/P in our_list)
for(var/dir in get_dir_list_by_dir_type(P.adirs))
var/selected = ""
if(selected == P && dir == selected_dir)
selected = " class='selected'"
. += "<a href='?src=\ref[master.interface];select_paint=[our_list.Find(P)];set_dir=[dir]'[selected]><img src='[P.file_name][P.icon_state]_[dir].png'/></a>"
. += "</p>"
/datum/rcd_schematic/tile/Topic(var/href, var/href_list)
if(href_list["select_paint"])
var/list/our_list = get_our_list()
var/idx = Clamp(round(text2num(href_list["select_paint"])), 1, our_list.len)
selected = our_list[idx]
if(!(selected_dir in get_dir_list_by_dir_type(selected.adirs)))
selected_dir = 2
master.update_options_menu()
. = 1
if(href_list["set_dir"])
var/dir = text2num(href_list["set_dir"])
if(!(dir in get_dir_list_by_dir_type(selected.adirs)))
return 1
selected_dir = dir
/datum/rcd_schematic/tile/attack(var/atom/A, var/mob/user)
if(!selected)
return 1
if(!selected.validate(A))
return "maybe you're using it on the wrong floor type?"
var/nname = ""
switch(selected.ftype)
if(PAINT_FLOOR) nname = "floor" //restoring the name of our new tile, usually if you place a floor tile on a plating it's still called "plating" for now
if(PAINT_REINFORCED) nname = "reinforced floor" //also getting rid of the plaque if it's there
if(PAINT_PLATING) nname = "plating"
user << "Painting floor..."
playsound(get_turf(master), 'sound/machines/click.ogg', 50, 1)
if(!do_after(user, A, 20))
return 1
playsound(get_turf(master), 'sound/effects/extinguish.ogg', 25, 1)
selected.apply(A, nname, dir = selected_dir)
//Gets the list of paint info datums.
/datum/rcd_schematic/tile/proc/get_our_list()
return paint_variants[name]
/datum/paint_info
var/icon/icon = 'icons/turf/floors.dmi'
var/icon_state = "floor"
var/ftype = PAINT_FLOOR //The floor type required for this paint job.
var/adirs = DIR_ONE //Available dirs for this floor type.
var/file_name = "tile_painter_" //The file data gets added after this, used to seperate the decals and floor types.
var/flags = 0
/datum/paint_info/New(var/padir, var/picon, var/ptype, var/nflags = 0)
if(ptype)
ftype = ptype
if(padir)
adirs = padir
if(picon)
icon_state = picon
flags = nflags
//This is used to give the user a hint that he's a massive retard for using a floor painter on the carpet
/datum/paint_info/proc/validate(var/turf/simulated/floor/test)
switch(ftype)
if(PAINT_FLOOR) //why is it named plasteel anyway?
if(!(istype(test.floor_tile,/obj/item/stack/tile/plasteel)))
return 0 //if it's carpet, wood or some other stuff, we aren't going to paint that
if(istype(test, /turf/simulated/floor/engine))
return 0 //reinforced floor has plasteel in floor_tile too
//but that isn't a regular floor
if(PAINT_PLATING)
if(!istype(test,/turf/simulated/floor/plating))
return 0
if(PAINT_REINFORCED)
if(!istype(test,/turf/simulated/floor/engine))
return 0
return 1
/datum/paint_info/proc/apply(var/turf/simulated/floor/T, var/pname, var/pdesc, var/dir)
T.icon_state = icon_state
T.icon_regular_floor = icon_state //required to 'save' the new floor type so if someone crowbars it and puts it back it won't revert to the original state
T.dir = dir
T.desc = pdesc //so if you paint over a plaque with a floor the tile loses its description
if(pname)
T.name = pname
T.ClearDecals()
/datum/paint_info/decal
icon = 'icons/effects/warning_stripes.dmi'
ftype = PAINT_ALL
file_name = "tile_painter_d_"
/datum/paint_info/decal/apply(var/turf/simulated/floor/T, var/pname, var/pdesc, var/dir)
T.AddDecal(image(icon, icon_state = icon_state, dir = dir))
//The list of all available floor design groups.
/datum/rcd_schematic/tile/gray
name = "Gray"
/datum/rcd_schematic/tile/neutral
name = "Neutral"
/datum/rcd_schematic/tile/white
name = "White"
/datum/rcd_schematic/tile/red
name = "Red"
/datum/rcd_schematic/tile/green
name = "Green"
/datum/rcd_schematic/tile/blue
name = "Blue"
/datum/rcd_schematic/tile/yellow
name = "Yellow"
/datum/rcd_schematic/tile/purple
name = "Purple"
/datum/rcd_schematic/tile/orange
name = "Orange"
/datum/rcd_schematic/tile/brown
name = "Brown"
/datum/rcd_schematic/tile/red_yellow
name = "Red and yellow"
/datum/rcd_schematic/tile/red_blue
name = "Red and blue"
/datum/rcd_schematic/tile/red_green
name = "Red and green"
/datum/rcd_schematic/tile/green_yellow
name = "Green and yellow"
/datum/rcd_schematic/tile/green_blue
name = "Green and blue"
/datum/rcd_schematic/tile/blue_yellow
name = "Blue and yellow"
/datum/rcd_schematic/tile/white_red
name = "White red"
/datum/rcd_schematic/tile/white_green
name = "White green"
/datum/rcd_schematic/tile/white_blue
name = "White blue"
/datum/rcd_schematic/tile/white_yellow
name = "White yellow"
/datum/rcd_schematic/tile/white_purple
name = "White purple"
/datum/rcd_schematic/tile/arrival
name = "Arrival"
/datum/rcd_schematic/tile/escape
name = "Escape"
/datum/rcd_schematic/tile/dark
name = "Dark"
/datum/rcd_schematic/tile/dark_red
name = "Dark red"
/datum/rcd_schematic/tile/dark_blue
name = "Dark blue"
/datum/rcd_schematic/tile/dark_green
name = "Dark green"
/datum/rcd_schematic/tile/dark_purple
name = "Dark purple"
/datum/rcd_schematic/tile/dark_yellow
name = "Dark yellow"
/datum/rcd_schematic/tile/dark_orange
name = "Dark orange"
/datum/rcd_schematic/tile/dark_vault
name = "Dark vault"
/datum/rcd_schematic/tile/markings
name = "Markings"
/datum/rcd_schematic/tile/loading
name = "Loading area"
/datum/rcd_schematic/tile/warning
name = "Warning"
/datum/rcd_schematic/tile/warning_white
name = "White warning"
/datum/rcd_schematic/tile/warning_reinforced
name = "Reinforced warning"
/datum/rcd_schematic/tile/warning_plating
name = "Plating warning"
/datum/rcd_schematic/tile/chapel
name = "Chapel"
/datum/rcd_schematic/tile/ss13_logo
name = "SS13 logo"
/datum/rcd_schematic/tile/derelict_logo
name = "Derelict logo"
/datum/rcd_schematic/tile/other
name = "Other"
//Ririchiyo's potatobox grid.
/datum/rcd_schematic/tile/all
name = "All"
//We override this so we DON'T send files twice, sending is handled in the specific ones.
/datum/rcd_schematic/tile/all/send_icons(var/client/client)
return
//We get EVERY paint info datum.
/datum/rcd_schematic/tile/all/get_our_list()
. = list()
for(var/key in paint_variants)
for(var/datum/paint_info/P in paint_variants[key])
. += P
var/global/list/paint_variants = list(
"Decals" = list(
// Stripes
new /datum/paint_info/decal(DIR_ALL, "warning"),
new /datum/paint_info/decal(DIR_ONE, "all"),
// Loading areas (TODO: colourable)
new /datum/paint_info/decal(DIR_ORTHO, "warning_corner"),
new /datum/paint_info/decal(DIR_ONE, "unloading"),
new /datum/paint_info/decal(DIR_ONE, "bot"),
new /datum/paint_info/decal(DIR_ORTHO, "loading_area"),
new /datum/paint_info/decal(DIR_ONE, "no"),
// Atmos lettering
new /datum/paint_info/decal(DIR_ORTHO, "oxygen"),
new /datum/paint_info/decal(DIR_ORTHO, "nitrogen"),
new /datum/paint_info/decal(DIR_ORTHO, "carbon_dioxide"),
new /datum/paint_info/decal(DIR_ORTHO, "nitrous_oxide"),
new /datum/paint_info/decal(DIR_ORTHO, "air"),
new /datum/paint_info/decal(DIR_ORTHO, "plasma"),
new /datum/paint_info/decal(DIR_ORTHO, "zoo"),
// Numbers
new /datum/paint_info/decal(DIR_ORTHO, "1"),
new /datum/paint_info/decal(DIR_ORTHO, "2"),
new /datum/paint_info/decal(DIR_ORTHO, "3"),
new /datum/paint_info/decal(DIR_ORTHO, "4"),
new /datum/paint_info/decal(DIR_ORTHO, "5"),
new /datum/paint_info/decal(DIR_ORTHO, "6"),
new /datum/paint_info/decal(DIR_ORTHO, "7"),
new /datum/paint_info/decal(DIR_ORTHO, "8"),
new /datum/paint_info/decal(DIR_ORTHO, "9"),
new /datum/paint_info/decal(DIR_ORTHO, "0"),
// Path markers
new /datum/paint_info/decal(DIR_ORTHO, "1"),
new /datum/paint_info/decal(DIR_ORTHO, "1"),
new /datum/paint_info/decal(DIR_ORTHO, "1"),
new /datum/paint_info/decal(DIR_ORTHO, "1"),
),
"Gray" = list(
new /datum/paint_info(DIR_ONE, "floor"),
new /datum/paint_info(DIR_ALL, "black"),
new /datum/paint_info(DIR_ORTHO, "blackcorner")
),
"Neutral" = list(
new /datum/paint_info(DIR_ALL, "neutral"),
new /datum/paint_info(DIR_ORTHO, "neutralcorner"),
new /datum/paint_info(DIR_ONE, "neutralfull")
),
"White" = list(
new /datum/paint_info(DIR_ONE, "white"),
new /datum/paint_info(DIR_ALL, "whitehall"),
new /datum/paint_info(DIR_ORTHO, "whitecorner")
),
"Red" = list(
new /datum/paint_info(DIR_ONE, "redfull"),
new /datum/paint_info(DIR_ALL, "red"),
new /datum/paint_info(DIR_ORTHO, "redcorner")
),
"Green" = list(
new /datum/paint_info(DIR_ONE, "greenfull"),
new /datum/paint_info(DIR_ALL, "green"),
new /datum/paint_info(DIR_ORTHO, "greencorner")
),
"Blue" = list(
new /datum/paint_info(DIR_ONE, "bluefull"),
new /datum/paint_info(DIR_ALL, "blue"),
new /datum/paint_info(DIR_ORTHO, "bluecorner")
),
"Yellow" = list(
new /datum/paint_info(DIR_ONE, "yellowfull"),
new /datum/paint_info(DIR_ALL, "yellow"),
new /datum/paint_info(DIR_ORTHO, "yellowcorner")
),
"Purple" = list(
new /datum/paint_info(DIR_ONE, "purplefull"),
new /datum/paint_info(DIR_ALL, "purple"),
new /datum/paint_info(DIR_ORTHO, "purplecorner")
),
"Orange" = list(
new /datum/paint_info(DIR_ONE, "orangefull"),
new /datum/paint_info(DIR_ALL, "orange"),
new /datum/paint_info(DIR_ORTHO, "orangecorner")
),
"Brown" = list(
new /datum/paint_info(DIR_ONE, "dark brown full"),
new /datum/paint_info(DIR_ALL, "brown"),
new /datum/paint_info(DIR_ORTHO, "browncorner")
),
"Red and yellow" = list(
new /datum/paint_info(DIR_ONE, "redyellowfull"),
new /datum/paint_info(DIR_ALL, "redyellow")
),
"Red and blue" = list(
new /datum/paint_info(DIR_ONE, "redbluefull"),
new /datum/paint_info(DIR_ALL, "redblue")
),
"Red and green" = list(
new /datum/paint_info(DIR_ONE, "redgreenfull"),
new /datum/paint_info(DIR_ALL, "redgreen")
),
"Green and yellow" = list(
new /datum/paint_info(DIR_ONE, "greenyellowfull"),
new /datum/paint_info(DIR_ALL, "greenyellow")
),
"Green and blue" = list(
new /datum/paint_info(DIR_ONE, "greenbluefull"),
new /datum/paint_info(DIR_ALL, "greenblue")
),
"Blue and yellow" = list(
new /datum/paint_info(DIR_ONE, "blueyellowfull"),
new /datum/paint_info(DIR_ALL, "blueyellow")
),
"White red" = list(
new /datum/paint_info(DIR_ONE, "whiteredfull"),
new /datum/paint_info(DIR_ALL, "whitered"),
new /datum/paint_info(DIR_ORTHO, "whiteredcorner")
),
"White green" = list(
new /datum/paint_info(DIR_ONE, "whitegreenfull"),
new /datum/paint_info(DIR_ALL, "whitegreen"),
new /datum/paint_info(DIR_ORTHO, "whitegreencorner")
),
"White blue" = list(
new /datum/paint_info(DIR_ONE, "whitebluefull"),
new /datum/paint_info(DIR_ALL, "whiteblue"),
new /datum/paint_info(DIR_ORTHO, "whitebluecorner"),
new /datum/paint_info(DIR_ONE, "cmo")
),
"White yellow" = list(
new /datum/paint_info(DIR_ONE, "whiteyellowfull"),
new /datum/paint_info(DIR_ALL, "whiteyellow"),
new /datum/paint_info(DIR_ORTHO, "whiteyellowcorner")
),
"White purple" = list(
new /datum/paint_info(DIR_ONE, "whitepurplefull"),
new /datum/paint_info(DIR_ALL, "whitepurple"),
new /datum/paint_info(DIR_ORTHO, "whitepurplecorner")
),
"Arrival" = list(
new /datum/paint_info(DIR_ALL, "arrival")
),
"Escape" = list(
new /datum/paint_info(DIR_ALL, "escape")
),
"Dark" = list(
new /datum/paint_info(DIR_ONE, "dark"),
new /datum/paint_info(DIR_ALL, "dark floor stripe"),
new /datum/paint_info(DIR_ORTHO, "dark floor corner")
),
"Dark red" = list(
new /datum/paint_info(DIR_ONE, "dark red full"),
new /datum/paint_info(DIR_ALL, "dark red stripe"),
new /datum/paint_info(DIR_ORTHO, "dark red corner")
),
"Dark blue" = list(
new /datum/paint_info(DIR_ONE, "dark blue full"),
new /datum/paint_info(DIR_ALL, "dark blue stripe"),
new /datum/paint_info(DIR_ORTHO, "dark blue corner")
),
"Dark green" = list(
new /datum/paint_info(DIR_ONE, "dark green full"),
new /datum/paint_info(DIR_ALL, "dark green stripe"),
new /datum/paint_info(DIR_ORTHO, "dark green corner")
),
"Dark purple" = list(
new /datum/paint_info(DIR_ONE, "dark purple full"),
new /datum/paint_info(DIR_ALL, "dark purple stripe"),
new /datum/paint_info(DIR_ORTHO, "dark purple corner")
),
"Dark yellow" = list(
new /datum/paint_info(DIR_ONE, "dark yellow full"),
new /datum/paint_info(DIR_ALL, "dark yellow stripe"),
new /datum/paint_info(DIR_ORTHO, "dark yellow corner")
),
"Dark orange" = list(
new /datum/paint_info(DIR_ONE, "dark orange full"),
new /datum/paint_info(DIR_ALL, "dark orange stripe"),
new /datum/paint_info(DIR_ORTHO, "dark orange corner")
),
"Dark vault" = list(
new /datum/paint_info(DIR_ONE, "dark vault full"),
new /datum/paint_info(DIR_ALL, "dark vault stripe"),
new /datum/paint_info(DIR_ORTHO, "dark vault corner"),
new /datum/paint_info(DIR_ORTHO, "dark-markings")
),
"Markings" = list(
new /datum/paint_info(DIR_ONE, "delivery"),
new /datum/paint_info(DIR_ONE, "bot"),
new /datum/paint_info(DIR_ONE, "whitedelivery"),
new /datum/paint_info(DIR_ONE, "whitebot"),
new /datum/paint_info(DIR_ONE, "enginedelivery", PAINT_REINFORCED),
new /datum/paint_info(DIR_ONE, "enginebot", PAINT_REINFORCED),
new /datum/paint_info(DIR_ONE, "plaque")
),
"Loading area" = list(
new /datum/paint_info(DIR_ORTHO, "loadingarea"),
new /datum/paint_info(DIR_ORTHO, "engineloadingarea", PAINT_REINFORCED),
new /datum/paint_info(DIR_ORTHO, "dark loading")
),
"Warning" = list(
new /datum/paint_info(DIR_ALL, "warning"),
new /datum/paint_info(DIR_ORTHO, "warningcorner")
),
"White warning" = list(
new /datum/paint_info(DIR_ALL, "warnwhite"),
new /datum/paint_info(DIR_ORTHO, "warnwhitecorner")
),
"Reinforced warning" = list(
new /datum/paint_info(DIR_ALL, "enginewarn", PAINT_REINFORCED),
new /datum/paint_info(DIR_ORTHO, "enginewarncorner", PAINT_REINFORCED)
),
"Plating warning" = list(
new /datum/paint_info(DIR_ALL, "warnplate", PAINT_PLATING),
new /datum/paint_info(DIR_ORTHO, "warnplatecorner", PAINT_PLATING)
),
"Chapel" = list(
new /datum/paint_info(DIR_ALL, "chapel")
),
"SS13 logo" = list(
new /datum/paint_info(DIR_ONE, "L1"),
new /datum/paint_info(DIR_ONE, "L3"),
new /datum/paint_info(DIR_ONE, "L5"),
new /datum/paint_info(DIR_ONE, "L7"),
new /datum/paint_info(DIR_ONE, "L9"),
new /datum/paint_info(DIR_ONE, "L11"),
new /datum/paint_info(DIR_ONE, "L13"),
new /datum/paint_info(DIR_ONE, "L15"),
new /datum/paint_info(DIR_ONE, "L2"),
new /datum/paint_info(DIR_ONE, "L4"),
new /datum/paint_info(DIR_ONE, "L6"),
new /datum/paint_info(DIR_ONE, "L8"),
new /datum/paint_info(DIR_ONE, "L10"),
new /datum/paint_info(DIR_ONE, "L12"),
new /datum/paint_info(DIR_ONE, "L14"),
new /datum/paint_info(DIR_ONE, "L16")
),
"Derelict logo" = list(
new /datum/paint_info(DIR_ONE, "derelict9"),
new /datum/paint_info(DIR_ONE, "derelict10"),
new /datum/paint_info(DIR_ONE, "derelict11"),
new /datum/paint_info(DIR_ONE, "derelict12"),
new /datum/paint_info(DIR_ONE, "derelict13"),
new /datum/paint_info(DIR_ONE, "derelict14"),
new /datum/paint_info(DIR_ONE, "derelict15"),
new /datum/paint_info(DIR_ONE, "derelict16"),
new /datum/paint_info(DIR_ONE, "derelict1"),
new /datum/paint_info(DIR_ONE, "derelict2"),
new /datum/paint_info(DIR_ONE, "derelict3"),
new /datum/paint_info(DIR_ONE, "derelict4"),
new /datum/paint_info(DIR_ONE, "derelict5"),
new /datum/paint_info(DIR_ONE, "derelict6"),
new /datum/paint_info(DIR_ONE, "derelict7"),
new /datum/paint_info(DIR_ONE, "derelict8")
),
"Other" = list(
new /datum/paint_info(DIR_ONE, "dark"),
new /datum/paint_info(DIR_ONE, "bar"),
new /datum/paint_info(DIR_ONE, "cafeteria"),
new /datum/paint_info(DIR_ONE, "checker"),
new /datum/paint_info(DIR_ONE, "barber"),
new /datum/paint_info(DIR_ONE, "grimy"),
new /datum/paint_info(DIR_ONE, "hydrofloor"),
new /datum/paint_info(DIR_ONE, "showroomfloor"),
new /datum/paint_info(DIR_ONE, "freezerfloor"),
new /datum/paint_info(DIR_ONE, "bcircuit"),
new /datum/paint_info(DIR_ONE, "gcircuit"),
new /datum/paint_info(DIR_ONE, "solarpanel")
)
)

View File

@@ -0,0 +1,15 @@
/obj/item/device/rcd/tile_painter
name = "tile painter"
desc = "A device used to paint floors in various colours and fashions."
icon_state = "rpd" //placeholder art, someone please sprite it
starting_materials = list(MAT_IRON = 75000, MAT_GLASS = 37500)
origin_tech = "engineering=2;materials=1"
sparky = 0
/obj/item/device/rcd/tile_painter/New()
schematics = typesof(/datum/rcd_schematic/tile) //For some stupid reason typesof() isn't constant.
. = ..()

View File

@@ -14,7 +14,7 @@
/obj/item/clothing/suit/space/unathi
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/device/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Unathi")

View File

@@ -38,7 +38,7 @@
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60)
flags = FPRINT | PLASMAGUARD
pressure_resistance = 200 * ONE_ATMOSPHERE
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/device/rcd, /obj/item/weapon/crowbar, \
/obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse_rifle, \
/obj/item/weapon/gun/energy/taser, /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/gun)

View File

@@ -83,7 +83,7 @@
slowdown = 1
species_restricted = list("exclude","Vox")
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd, /obj/item/weapon/wrench/socket)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/device/rcd, /obj/item/weapon/wrench/socket)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
pressure_resistance = 200 * ONE_ATMOSPHERE
@@ -294,7 +294,7 @@
item_state = "atmos_gold_hardsuit"
slowdown = 2
armor = list(melee = 30, bullet = 5, laser = 40,energy = 5, bomb = 35, bio = 100, rad = 60)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/backpack/satchel_norm,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd, /obj/item/weapon/extinguisher, /obj/item/weapon/)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/backpack/satchel_norm,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/device/rcd, /obj/item/weapon/extinguisher, /obj/item/weapon/)
//ADMINBUS RIGS. SOVIET + NAZI
/obj/item/clothing/head/helmet/space/rig/nazi
@@ -436,4 +436,4 @@
icon_state = "rig0-t51b"
item_state = "rig0-t51b"
armor = list(melee = 35, bullet = 35, laser = 40, energy = 40, bomb = 80, bio = 100, rad = 100)
_color="t51b"
_color="t51b"

View File

@@ -393,7 +393,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/device/radio/headset/syndicate, /obj/item/weapon/plastique,\
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
/obj/item/weapon/hand_tele, /obj/item/device/rcd, /obj/item/weapon/tank/jetpack,\
/obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\
/obj/item/clothing/shoes/magboots, /obj/item/blueprints, /obj/item/weapon/disk/nuclear,\
/obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank)

View File

@@ -0,0 +1,28 @@
/*Made by N3X15*/
html {
font-family:sans-serif;
font-size:small;
}
a{
color:#0066cc;
text-decoration:none;
}
a img {
border:1px solid #0066cc;
background:#dfdfdf;
}
a.color {
padding: 5px 10px;
font-size: large;
font-weight: bold;
border:1px solid white;
}
a.selected img,
a:hover {
background: #0066cc;
color: #ffffff;
}

View File

@@ -0,0 +1,21 @@
/*
RCD UI style.
N3X15 wrote the stylesheet (originally RPD stylesheet)
Made into a htmli datum by PJB3005
*/
/datum/html_interface/rcd
default_html_file = 'html_interface_no_bootstrap.html'
/datum/html_interface/rcd/New()
. = ..()
head += "<link rel='stylesheet' type='text/css' href='RCD.css'>"
/datum/html_interface/rcd/sendResources(var/client/client)
. = ..()
client << browse_rsc('RCD.css')
//Send the icons.
for(var/path in typesof(/datum/rcd_schematic) - /datum/rcd_schematic)
var/datum/rcd_schematic/C = new path()
C.send_icons(client)

View File

@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta charset="UTF-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="html_interface.css"/>
<script type="text/javascript">var hSrc = "[hsrc]";</script>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="html_interface.js"></script>
</head>
<body>
</body>
</html>

View File

@@ -105,6 +105,9 @@ mob/verb/test()
// The initial height of the browser control, used when the window is first shown to a client.
var/height
// File which the HTML is copied from onto the browser window on the client.
var/default_html_file = 'html_interface.html'
/datum/html_interface/New(atom/ref, title, width = 700, height = 480, head = "")
html_interfaces.Add(src)
@@ -232,7 +235,7 @@ mob/verb/test()
else
src.createWindow(hclient)
hclient.is_loaded = FALSE
hclient.client << output(replacetextEx(replacetextEx(file2text('html_interface.html'), "\[hsrc\]", "\ref[src]"), "</head>", "[head]</head>"), "browser_\ref[src].browser")
hclient.client << output(replacetextEx(replacetextEx(file2text(default_html_file), "\[hsrc\]", "\ref[src]"), "</head>", "[head]</head>"), "browser_\ref[src].browser")
winshow(hclient.client, "browser_\ref[src]", TRUE)
if(oldwindow && winexists(hclient.client, "browser_\ref[oldwindow]"))
winshow(hclient.client, "browser_\ref[oldwindow]", FALSE)

View File

@@ -666,10 +666,10 @@
/obj/item/weapon/grenade/chem_grenade/antiweed,
/obj/item/weapon/hatchet,
/obj/item/weapon/pickaxe/jackhammer,
/obj/item/weapon/pipe_dispenser,
/obj/item/weapon/rcd,
/obj/item/device/rcd/rpd,
/obj/item/device/rcd,
/obj/item/weapon/rcd_ammo,
/obj/item/weapon/rsf,
/obj/item/device/rcd/matter/rsf,
/obj/item/weapon/weldingtool/hugetank,
/obj/item/weapon/tank/plasma,
/obj/item/gun_part/silencer,

View File

@@ -23,8 +23,8 @@
src.modules += new /obj/item/device/analyzer(src)
src.modules += new /obj/item/weapon/extinguisher(src) // Aurx sed so
src.modules += new /obj/item/weapon/extinguisher/foam(src)
src.modules += new /obj/item/weapon/pipe_dispenser(src)
src.modules += new /obj/item/weapon/tile_painter(src)
src.modules += new /obj/item/device/rcd/rpd(src)
src.modules += new /obj/item/device/rcd/tile_painter(src)
src.modules += new /obj/item/blueprints/mommiprints(src)
src.modules += new /obj/item/device/material_synth/robot/mommi(src)
sensor_augs = list("Mesons", "Disable")

View File

@@ -189,8 +189,8 @@
/obj/item/weapon/robot_module/engineering/New()
..()
src.emag = new /obj/item/borg/stun(src)
src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/pipe_dispenser(src) //What could possibly go wrong?
src.modules += new /obj/item/device/rcd/borg/engineering(src)
src.modules += new /obj/item/device/rcd/rpd(src) //What could possibly go wrong?
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/extinguisher/foam(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
@@ -203,7 +203,7 @@
src.modules += new /obj/item/device/analyzer(src)
src.modules += new /obj/item/taperoll/atmos(src)
src.modules += new /obj/item/taperoll/engineering(src)
src.modules += new /obj/item/weapon/tile_painter(src)
src.modules += new /obj/item/device/rcd/tile_painter(src)
src.modules += new /obj/item/device/material_synth/robot(src)
sensor_augs = list("Mesons", "Disable")
@@ -315,7 +315,7 @@
src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/rsf/cyborg(src)
src.modules += new /obj/item/device/rcd/borg/rsf(src)
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)

View File

@@ -1226,6 +1226,12 @@ var/proccalls = 1
#define COREFIRERESIST 1
#define HIGHRESCAMS 2
//RCD schematic bitflags.
#define RCD_SELF_SANE 1 //Check proximity ourselves.
#define RCD_GET_TURF 2 //If used on objs/mobs, get the turf instead.
#define RCD_RANGE 4 //Use range() instead of adjacency. (old RPD behaviour.) (overriden by RCD_SELF_SANE)
#define RCD_SELF_COST 8 //Handle energy usage ourselves. (energy availability still checked).
//Mob sizes
#define SIZE_TINY 1 //Mice, lizards, borers, kittens - mostly things that can fit into a man's palm
#define SIZE_SMALL 2 //Monkeys, dionae, cats, dogs

BIN
icons/obj/RCD.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

@@ -902,7 +902,7 @@
"arr" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fpmaint3)
"ars" = (/obj/structure/table,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 7},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/device/multitool,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/engineering/atmos)
"art" = (/obj/structure/table,/obj/item/stack/sheet/glass/glass{amount = 50},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor,/area/engineering/atmos)
"aru" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor,/area/engineering/atmos)
"aru" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/item/device/rcd/rpd,/turf/simulated/floor,/area/engineering/atmos)
"arv" = (/obj/machinery/atmospherics/pipe/simple/supply/visible,/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor,/area/engineering/atmos)
"arw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/engineering/atmos)
"arx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/space_heater,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/effect/decal/warning_stripes{icon_state = "bot"},/turf/simulated/floor,/area/engineering/atmos)
@@ -2713,7 +2713,7 @@
"bai" = (/obj/structure/table,/obj/item/weapon/storage/wallet/random{pixel_y = 9},/obj/item/weapon/storage/wallet/random{pixel_y = 6},/obj/item/weapon/storage/wallet/random{pixel_y = 3},/obj/item/weapon/storage/wallet/random,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"baj" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/fancy/crayons,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"bak" = (/obj/structure/table,/obj/item/device/camera,/obj/item/weapon/storage/box/labels,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"bal" = (/obj/machinery/camera{c_tag = "Chief Engineer's Office"; dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/table/reinforced,/obj/item/weapon/cartridge/engineering{pixel_x = 4; pixel_y = 5},/obj/item/weapon/cartridge/engineering{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cartridge/engineering{pixel_x = 3},/obj/item/weapon/cartridge/atmos,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"bal" = (/obj/machinery/camera{c_tag = "Chief Engineer's Office"; dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/table/reinforced,/obj/item/weapon/cartridge/engineering{pixel_x = 4; pixel_y = 5},/obj/item/weapon/cartridge/engineering{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cartridge/engineering{pixel_x = 3},/obj/item/weapon/cartridge/atmos,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/device/rcd/matter/engineering,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"bam" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"ban" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"bao" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
@@ -3020,7 +3020,7 @@
"bgd" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"bge" = (/obj/structure/table/reinforced,/obj/machinery/pos{name = "Bar point of sale"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"bgf" = (/obj/machinery/door/window{dir = 1; name = "Bar Door"; req_access_txt = "0"; req_one_access_txt = "25;28"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"bgg" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/machinery/light/small{dir = 4},/obj/item/weapon/rsf,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"bgg" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/machinery/light/small{dir = 4},/obj/item/device/rcd/matter/rsf,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"bgh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/cooking/still,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bgi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bgj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)

View File

@@ -1491,7 +1491,7 @@
"aCI" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "neutralcorner"},/area/crew_quarters/sleep)
"aCJ" = (/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor{dir = 2; icon_state = "floor"},/area/engineering/engine)
"aCK" = (/turf/simulated/floor{dir = 2; icon_state = "floor"},/area/engineering/engine)
"aCL" = (/obj/item/stack/sheet/plasteel{amount = 10},/obj/structure/table,/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/pipe_dispenser,/turf/simulated/floor{dir = 2; icon_state = "floor"},/area/engineering/engine)
"aCL" = (/obj/item/stack/sheet/plasteel{amount = 10},/obj/structure/table,/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/rcd/rpd,/turf/simulated/floor{dir = 2; icon_state = "floor"},/area/engineering/engine)
"aCM" = (/obj/structure/table,/obj/item/stack/rods{amount = 50},/obj/item/weapon/wrench,/obj/item/weapon/storage/box/lights/mixed,/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/storage/toolbox/electrical{pixel_y = 5},/turf/simulated/floor{dir = 2; icon_state = "floor"},/area/engineering/engine)
"aCN" = (/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/engineering/engine)
"aCO" = (/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/engineering/engine)
@@ -2767,7 +2767,7 @@
"bbk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/yellow,/obj/item/device/t_scanner,/obj/item/device/multitool,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "dark"},/area/storage/tech)
"bbl" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flash,/obj/item/device/flash,/obj/effect/decal/warning_stripes{icon_state = "bot"},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech)
"bbm" = (/obj/structure/table,/obj/effect/decal/warning_stripes{icon_state = "bot"},/obj/machinery/light/small{dir = 1},/obj/machinery/cell_charger{pixel_y = 0},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech)
"bbn" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -29},/obj/structure/table/reinforced,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
"bbn" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -29},/obj/structure/table/reinforced,/obj/item/device/rcd/rpd,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
"bbo" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
"bbp" = (/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 30},/obj/machinery/camera{c_tag = "Engineering - CE's Office"; dir = 2; network = list("SS13")},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
"bbq" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
@@ -2848,7 +2848,7 @@
"bcN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech)
"bcO" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech)
"bcP" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/effect/decal/warning_stripes{icon_state = "bot"},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech)
"bcQ" = (/obj/machinery/light{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
"bcQ" = (/obj/machinery/light{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/device/rcd/matter/engineering,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engineering/ce)
"bcR" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/engineering/ce)
"bcS" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/pill/kelotane{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "neutral"},/area/engineering/ce)
"bcT" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor{icon_state = "neutral"},/area/engineering/ce)
@@ -3741,7 +3741,7 @@
"btW" = (/obj/structure/table,/obj/item/weapon/storage/box/labels,/obj/item/weapon/hand_labeler,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/storage/art)
"btX" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/obj/item/device/radio/headset/headset_service,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = 0; pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"btY" = (/obj/machinery/reagentgrinder,/obj/structure/table/woodentable,/obj/machinery/requests_console{department = "Bar"; departmentType = 2; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"btZ" = (/obj/structure/table/woodentable,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/gun/projectile/russian,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/rsf,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"btZ" = (/obj/structure/table/woodentable,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/gun/projectile/russian,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/machinery/alarm{pixel_y = 23},/obj/item/device/rcd/matter/rsf,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bua" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bub" = (/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25"},/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/warning_stripes{icon_state = "unloading"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"buc" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plating,/area/crew_quarters/bar)
@@ -4358,7 +4358,7 @@
"bFP" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "dark vault stripe"; dir = 4},/area/crew_quarters/captain{name = "\improper Captain's Quarters"})
"bFQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8; initialize_directions = 11},/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central)
"bFR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/central)
"bFS" = (/obj/machinery/light{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/rsf,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bFS" = (/obj/machinery/light{dir = 8},/obj/structure/table/reinforced,/obj/item/device/rcd/matter/rsf,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bFT" = (/obj/structure/table/reinforced,/obj/item/clothing/head/that{throwforce = 1; throwing = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bFU" = (/obj/structure/table/reinforced,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bFV" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/matchbox{pixel_y = 5},/turf/simulated/floor/wood,/area/crew_quarters/bar)
@@ -5055,7 +5055,7 @@
"bTk" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/engineering/atmos)
"bTl" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 9; icon_state = "caution"},/area/engineering/atmos)
"bTm" = (/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/atmos)
"bTn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/device/t_scanner{pixel_y = 4},/obj/item/device/t_scanner{pixel_y = 4},/obj/item/device/t_scanner{pixel_y = 4},/obj/item/weapon/pipe_dispenser,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/atmos)
"bTn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/device/t_scanner{pixel_y = 4},/obj/item/device/t_scanner{pixel_y = 4},/obj/item/device/t_scanner{pixel_y = 4},/obj/item/device/rcd/rpd,/obj/item/device/rcd/rpd,/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/atmos)
"bTo" = (/obj/machinery/camera{c_tag = "Atmospherics - NW"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/atmos)
"bTp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/table,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 7},/obj/item/clothing/head/welding{pixel_x = 5; pixel_y = 3},/turf/simulated/floor{dir = 1; icon_state = "caution"},/area/engineering/atmos)
"bTq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/engineering/atmos)
@@ -8922,7 +8922,7 @@
"dpD" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"dpE" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/turf/unsimulated/floor{icon_state = "dark vault full"; dir = 4},/area/centcom/control)
"dpF" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/turf/unsimulated/floor{icon_state = "dark orange stripe"; dir = 1},/area/centcom/control)
"dpG" = (/obj/structure/table/reinforced,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/unsimulated/floor{icon_state = "dark orange stripe"; dir = 1},/area/centcom/control)
"dpG" = (/obj/structure/table/reinforced,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/rcd/matter/engineering,/obj/item/device/rcd/matter/engineering,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/unsimulated/floor{icon_state = "dark orange stripe"; dir = 1},/area/centcom/control)
"dpH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/device/flash,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "dark neutral stripe"; dir = 1},/area/centcom/control)
"dpI" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor{icon_state = "dark neutral stripe"; dir = 1},/area/centcom/control)
"dpJ" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)

View File

@@ -1080,7 +1080,7 @@
"auN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "dark vault stripe"},/area/engineering/engineering_auxiliary)
"auO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark vault full"},/area/engineering/engineering_auxiliary)
"auP" = (/obj/machinery/atmospherics/pipe/simple/filtering/visible{dir = 4},/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor,/area/engineering/atmos)
"auQ" = (/obj/structure/table,/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/weapon/pipe_dispenser,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor,/area/engineering/atmos)
"auQ" = (/obj/structure/table,/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/device/rcd/rpd,/obj/item/device/rcd/rpd,/turf/simulated/floor,/area/engineering/atmos)
"auR" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible,/obj/structure/closet/secure_closet/engineering_atmos,/turf/simulated/floor,/area/engineering/atmos)
"auS" = (/obj/machinery/suit_storage_unit/atmos,/turf/simulated/floor,/area/engineering/atmos)
"auT" = (/obj/machinery/atmospherics/pipe/simple/filtering/visible{dir = 4},/obj/structure/lattice,/turf/space,/area)
@@ -1350,7 +1350,7 @@
"azX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 2; icon_state = "blue"},/area/wreck/engineering{icon_state = "bridge"; name = "\improper Bridge Engineering"})
"azY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/wreck/engineering{icon_state = "bridge"; name = "\improper Bridge Engineering"})
"azZ" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 8; pixel_x = 22},/obj/structure/disposalpipe/trunk{desc = "An underfloor disposal pipe. This one has an acid proof coating."; dir = 8; name = "Acid-Proof disposal pipe"; unacidable = 1},/turf/simulated/floor,/area/wreck/engineering{icon_state = "bridge"; name = "\improper Bridge Engineering"})
"aAa" = (/obj/structure/table/reinforced,/obj/item/weapon/pipe_dispenser,/obj/item/weapon/lighter/zippo,/obj/machinery/newscaster{dir = 1; pixel_y = -30},/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/stamp/ce,/obj/item/device/radio/intercom{pixel_x = 25; pixel_y = 0},/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"aAa" = (/obj/structure/table/reinforced,/obj/item/device/rcd/rpd,/obj/item/weapon/lighter/zippo,/obj/machinery/newscaster{dir = 1; pixel_y = -30},/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/stamp/ce,/obj/item/device/radio/intercom{pixel_x = 25; pixel_y = 0},/obj/item/device/rcd/matter/engineering,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"aAb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
"aAc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1},/turf/simulated/floor,/area/hydroponics)
"aAd" = (/turf/simulated/floor,/area/hydroponics)
@@ -1492,7 +1492,7 @@
"aCJ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aCK" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aCL" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aCM" = (/obj/structure/table/reinforced,/obj/item/clothing/head/cakehat,/obj/item/weapon/rsf,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aCM" = (/obj/structure/table/reinforced,/obj/item/clothing/head/cakehat,/obj/item/device/rcd/matter/rsf,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aCN" = (/obj/structure/table/reinforced,/obj/machinery/pos{name = "Bar point of sale"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aCO" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1212; icon_state = "in"; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/machinery/air_sensor{frequency = 1212; id_tag = "n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/engine/starboard_gyro_bay{icon_state = "atmos"; name = "\improper Atmospherics Medical"})
"aCP" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/obj/item/weapon/storage/secure/safe{pixel_x = 28},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)

View File

@@ -1893,7 +1893,7 @@
"aKu" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aKv" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aKw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aKx" = (/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/table/woodentable,/obj/item/clothing/suit/storage/bandolier,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/machinery/reagentgrinder,/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rsf,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aKx" = (/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/table/woodentable,/obj/item/clothing/suit/storage/bandolier,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/machinery/reagentgrinder,/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/device/rcd/matter/rsf,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aKy" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aKz" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aKA" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -2400,7 +2400,7 @@
"aUh" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aUi" = (/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aUj" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aUk" = (/obj/structure/table/reinforced,/obj/item/device/radio/headset/headset_service,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/packageWrap,/obj/item/weapon/screwdriver,/obj/item/weapon/tile_painter,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aUk" = (/obj/structure/table/reinforced,/obj/item/device/radio/headset/headset_service,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/packageWrap,/obj/item/weapon/screwdriver,/obj/item/device/rcd/tile_painter,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aUl" = (/obj/machinery/alarm{dir = 4; pixel_x = -22},/obj/structure/bed/chair/vehicle/clowncart,/turf/simulated/floor/wood,/area/crew_quarters/theatre)
"aUm" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/wood,/area/crew_quarters/theatre)
"aUn" = (/turf/simulated/floor/wood,/area/crew_quarters/theatre)
@@ -6200,7 +6200,7 @@
"cpl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/sign/securearea,/turf/simulated/wall,/area/engineering/atmos_control)
"cpm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/structure/table,/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/stack/sheet/glass/glass{amount = 50},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/clothing/glasses/welding,/turf/simulated/floor,/area/engineering/atmos)
"cpn" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/weapon/wrench,/obj/item/device/pipe_painter,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/engineering/atmos)
"cpo" = (/obj/structure/table,/obj/item/device/t_scanner,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/radio/headset/headset_eng,/obj/item/weapon/cartridge/atmos,/obj/item/weapon/cartridge/atmos,/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 4},/obj/item/weapon/pipe_dispenser,/obj/item/weapon/pipe_dispenser,/turf/simulated/floor,/area/engineering/atmos)
"cpo" = (/obj/structure/table,/obj/item/device/t_scanner,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/radio/headset/headset_eng,/obj/item/weapon/cartridge/atmos,/obj/item/weapon/cartridge/atmos,/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 4},/obj/item/device/rcd/rpd,/obj/item/device/rcd/rpd,/turf/simulated/floor,/area/engineering/atmos)
"cpp" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor,/area/engineering/atmos)
"cpq" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor,/area/engineering/atmos)
"cpr" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/filtering/visible,/turf/simulated/floor{icon_state = "escape"; dir = 4},/area/engineering/atmos)
@@ -6744,7 +6744,7 @@
"czJ" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor,/area/engineering/engine)
"czK" = (/obj/structure/table,/obj/item/weapon/circuitboard/airlock,/obj/item/weapon/circuitboard/airlock,/obj/item/weapon/circuitboard/power_control,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/engineering/engine)
"czL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/full/reinforced,/turf/simulated/floor/plating,/area/engineering/ce)
"czM" = (/obj/machinery/keycard_auth{pixel_y = 32},/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd{pixel_x = 4; pixel_y = 3; pixel_z = 0},/obj/item/weapon/pipe_dispenser,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"czM" = (/obj/machinery/keycard_auth{pixel_y = 32},/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/device/rcd/matter/engineering{pixel_x = 4; pixel_y = 3; pixel_z = 0},/obj/item/device/rcd/rpd,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"czN" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's Desk"; departmentType = 3; name = "Chief Engineer RC"; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"czO" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
"czP" = (/obj/machinery/door_control{id_tag = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 10; pixel_y = 32; req_access_txt = "24"},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id_tag = "Engineering"; name = "Engineering Lockdown"; pixel_x = -10; pixel_y = 32; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id_tag = "Secure Storage"; name = "Engineering Secure Storage"; pixel_y = 32; req_access_txt = "11"},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engineering/ce)
@@ -8491,7 +8491,7 @@
"dho" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"dhp" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/turf/unsimulated/floor{icon_state = "dark vault full"; dir = 4},/area/centcom/control)
"dhq" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/turf/unsimulated/floor{icon_state = "dark orange stripe"; dir = 1},/area/centcom/control)
"dhr" = (/obj/structure/table/reinforced,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/unsimulated/floor{icon_state = "dark orange stripe"; dir = 1},/area/centcom/control)
"dhr" = (/obj/structure/table/reinforced,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/rcd/matter/engineering,/obj/item/device/rcd/matter/engineering,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/turf/unsimulated/floor{icon_state = "dark orange stripe"; dir = 1},/area/centcom/control)
"dhs" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/device/flash,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "dark neutral stripe"; dir = 1},/area/centcom/control)
"dht" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor{icon_state = "dark neutral stripe"; dir = 1},/area/centcom/control)
"dhu" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
@@ -11786,7 +11786,7 @@
"esL" = (/obj/machinery/computer/shuttle_control/salvage,/turf/simulated/floor/carpet,/area/shuttle/salvage/start)
"esM" = (/obj/structure/docking_port/destination/salvage/start{dir = 8},/turf/space,/area)
"esN" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/obj/structure/docking_port/shuttle{dir = 4},/turf/space,/area/shuttle/salvage/start)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

View File

@@ -679,10 +679,7 @@
#include "code\game\objects\items\weapons\paint.dm"
#include "code\game\objects\items\weapons\paiwire.dm"
#include "code\game\objects\items\weapons\power_cells.dm"
#include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RCL.dm"
#include "code\game\objects\items\weapons\RPD.dm"
#include "code\game\objects\items\weapons\RSF.dm"
#include "code\game\objects\items\weapons\scrolls.dm"
#include "code\game\objects\items\weapons\shard.dm"
#include "code\game\objects\items\weapons\shields.dm"
@@ -693,7 +690,6 @@
#include "code\game\objects\items\weapons\swords_axes_etc.dm"
#include "code\game\objects\items\weapons\table_rack_parts.dm"
#include "code\game\objects\items\weapons\teleportation.dm"
#include "code\game\objects\items\weapons\tile_painter.dm"
#include "code\game\objects\items\weapons\tools.dm"
#include "code\game\objects\items\weapons\twohanded.dm"
#include "code\game\objects\items\weapons\weaponry.dm"
@@ -1067,6 +1063,7 @@
#include "code\modules\html_interface\map\adv_sec\adv_camera.dm"
#include "code\modules\html_interface\map\crew\crew.dm"
#include "code\modules\html_interface\nanotrasen\nanotrasen.dm"
#include "code\modules\html_interface\RCD\RCD.dm"
#include "code\modules\html_interface\voting\voting.dm"
#include "code\modules\hydroponics\grown_inedible.dm"
#include "code\modules\hydroponics\hydro_tools.dm"
@@ -1492,6 +1489,17 @@
#include "code\modules\projectiles\projectile\force.dm"
#include "code\modules\projectiles\projectile\rocket.dm"
#include "code\modules\projectiles\projectile\special.dm"
#include "code\modules\RCD\engie.dm"
#include "code\modules\RCD\RCD.dm"
#include "code\modules\RCD\RPD.dm"
#include "code\modules\RCD\RSF.dm"
#include "code\modules\RCD\schematic.dm"
#include "code\modules\RCD\tile painter.dm"
#include "code\modules\RCD\schematics\engi.dm"
#include "code\modules\RCD\schematics\pipe.dm"
#include "code\modules\RCD\schematics\service.dm"
#include "code\modules\RCD\schematics\test.dm"
#include "code\modules\RCD\schematics\tile.dm"
#include "code\modules\reagents\Chemistry-Colours.dm"
#include "code\modules\reagents\Chemistry-Holder.dm"
#include "code\modules\reagents\Chemistry-Machinery.dm"