diff --git a/code/ATMOSPHERICS/components/unary/cap.dm b/code/ATMOSPHERICS/components/unary/cap.dm index 1cf8e3d7aab..be5face4e10 100644 --- a/code/ATMOSPHERICS/components/unary/cap.dm +++ b/code/ATMOSPHERICS/components/unary/cap.dm @@ -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)) diff --git a/code/ATMOSPHERICS/components/unary/tank.dm b/code/ATMOSPHERICS/components/unary/tank.dm index ea994ad4921..36ccdd589d6 100644 --- a/code/ATMOSPHERICS/components/unary/tank.dm +++ b/code/ATMOSPHERICS/components/unary/tank.dm @@ -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("[user] has used [W] on \icon[icon] [src]", "You use \the [W] on \icon[icon] [src]") diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index 019f1016808..e52d5e8e9bc 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -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 diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 11ff514acb3..30503968324 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -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) @@ -404,7 +404,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 @@ -415,8 +415,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 @@ -592,35 +596,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" @@ -628,10 +632,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 @@ -838,40 +848,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 @@ -916,7 +932,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)) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 04f01581c80..f68d02eb80f 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -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 diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 968d533ee33..626efd29f8b 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -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 diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index f390fd2e64c..605b1949313 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -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(), \ new /obj/item/weapon/handcuffs(), \ diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm deleted file mode 100644 index e7b66053156..00000000000 --- a/code/game/objects/items/weapons/RCD.dm +++ /dev/null @@ -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) << "[user] is using the deconstruct function on the [src.name] on \himself! It looks like \he's trying to commit suicide!" - 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 << "The RCD can't hold any more matter-units." - return - qdel(W) - matter += 10 - playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1) - user << "The RCD now holds [matter]/[max_matter] matter-units." - return - if(isscrewdriver(W)) - user << "You unscrew the access panel and release the cartridge chamber." - 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 << "Changed mode to 'Airlock'" - if(prob(20)) - src.spark_system.start() - return - if(2) - mode = 3 - user << "Changed mode to 'Deconstruct'" - if(prob(20)) - src.spark_system.start() - return - if(3) - mode = 1 - user << "Changed mode to 'Floor & Walls'" - 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) \ No newline at end of file diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm deleted file mode 100644 index ef703a8716a..00000000000 --- a/code/game/objects/items/weapons/RPD.dm +++ /dev/null @@ -1,609 +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 "
  • [label]
  • " - -/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 "
  • [label]
  • " //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 "
  • [label]
  • " //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 "
  • [label]
  • " //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), - ), - "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 "" - -/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 = {"

    Type

    -Utilities: -"} - var/icon/preview=null - for(var/category in RPD_recipes) - dat += "[category]:" - - 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 += {""} - - var/dirsel="

    Direction

    " - switch(p_conntype) - if(-1) - if(p_class==-2) - dirsel = "

    Direction

    [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 += "

    " - dirsel += render_dir_img(1,"vertical.png","Vertical") - dirsel += render_dir_img(4,"horizontal.png","Horizontal") - dirsel += "

    " - else - dirsel+={" -

    - - -

    - "} - 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 += "

    " - dirsel += render_dir_img(9,"nw.png","West to North") - dirsel += render_dir_img(5,"ne.png","North to East") - dirsel += "
    " - dirsel += render_dir_img(10,"sw.png","South to West") - dirsel += render_dir_img(6,"se.png","East to South") - dirsel += "

    " - else - dirsel+={" -

    - - -
    - - -

    - "} - 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 += "

    " - dirsel += render_dir_img(1,"s.png","West South East") - dirsel += render_dir_img(4,"w.png","North West South") - dirsel += "
    " - dirsel += render_dir_img(2,"n.png","East North West") - dirsel += render_dir_img(8,"e.png","South East North") - dirsel += "

    " - else - dirsel+={" -

    - - -
    - - -

    - "} - 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 += "

    " - dirsel += render_dir_img(1,"s.png","West South East") - dirsel += render_dir_img(4,"w.png","North West South") - dirsel += "
    " - dirsel += render_dir_img(2,"n.png","East North West") - dirsel += render_dir_img(8,"e.png","South East North") - dirsel += "
    " - dirsel += render_dir_img(6,"sm.png","West South East") - dirsel += render_dir_img(5,"wm.png","North West South") - dirsel += "
    " - dirsel += render_dir_img(9,"nm.png","East North West") - dirsel += render_dir_img(10,"em.png","South East North") - dirsel += "

    " - else - dirsel+={" -

    - - -
    - - -
    - - -
    - - -

    - "} - 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 += "

    " - 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 += "

    " - else - dirsel+={" -

    - - - - -

    - "} - - dat = {" - - - [name] - - - -[dirsel][dat] - - -"} - 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 << "This [P] can't be painted [paint_color]. Available colors: [english_list(P.available_colors)]" - return 0 - playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) - P._color = paint_color - user.visible_message("[user] paints \the [P] [paint_color].","You paint \the [P] [paint_color].") - 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) - 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.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) - diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm deleted file mode 100644 index e64c09e85dc..00000000000 --- a/code/game/objects/items/weapons/RSF.dm +++ /dev/null @@ -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 << "The RSF now holds [matter]/[max_matter] fabrication-units." - return - qdel(W) - matter += 20 - playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1) - user << "The RSF now holds [matter]/[max_matter] fabrication-units." - 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 \ No newline at end of file diff --git a/code/game/objects/items/weapons/tile_painter.dm b/code/game/objects/items/weapons/tile_painter.dm deleted file mode 100644 index f46af576afc..00000000000 --- a/code/game/objects/items/weapons/tile_painter.dm +++ /dev/null @@ -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 "" - -/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 = {"

    Tile Painter

    - "} - - if(category == "") - - data += "

    List of available tile groups:

    " - data += "

    " - - for(var/iterator in paint_variants) - data += "[iterator] (view)
    " - - data += "

    " - - else - - var/list/tiles = paint_variants[category] - data += "

    [category]

    " - data += "

    " - for(var/i = 1; i <= tiles.len; i++) - if((category == "SS13 logo" || category == "Derelict logo") && i == 9) - data += "
    " - var/datum/paint_info/I = tiles[i] - data += populate_selection(user, I) - - data += "

    Back" - data += "

    " - - var/menu = {" - - - Tile Painter - - - [data] - - -"} - 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 << "An error indicator on [src] flicks on for a moment. Perhaps you're using it on the wrong floor type?" - 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 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 5a91652eaaf..d9c7fc0e4e5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -150,7 +150,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 diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 29af30f6d24..a3cd6239600 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -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() ..() diff --git a/code/global.dm b/code/global.dm index 69ba5674e49..f15858a7f5e 100644 --- a/code/global.dm +++ b/code/global.dm @@ -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 diff --git a/code/modules/RCD/RCD.dm b/code/modules/RCD/RCD.dm new file mode 100644 index 00000000000..a362074e04f --- /dev/null +++ b/code/modules/RCD/RCD.dm @@ -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 += {" + Selected: +

    Options

    +
    +
    +

    Available schematics

    + "} + for(var/cat in schematics) + dat += "[cat]:" + + 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 << "\the [src]'s error light flickers: [t]" + else + user << "\the [src]'s error light flickers." + + 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 << "\the [src] can't hold any more matter-units." + return 1 + + qdel(W) + matter += 10 + playsound(get_turf(src), 'sound/machines/click.ogg', 20, 1) + user << "\the [src] now holds [matter]/[max_matter] matter-units." + return 1 + + if(isscrewdriver(W)) + user << "You unscrew the access panel and release the cartridge chamber." + 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 << "\the [src] currently holds [matter]/[max_matter] matter-units." + +/obj/item/device/rcd/matter/get_energy() + return matter diff --git a/code/modules/RCD/RPD.dm b/code/modules/RCD/RPD.dm new file mode 100644 index 00000000000..50727d3e8f6 --- /dev/null +++ b/code/modules/RCD/RPD.dm @@ -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 + ) diff --git a/code/modules/RCD/RSF.dm b/code/modules/RCD/RSF.dm new file mode 100644 index 00000000000..f51b115145a --- /dev/null +++ b/code/modules/RCD/RSF.dm @@ -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 + ) diff --git a/code/modules/RCD/engie.dm b/code/modules/RCD/engie.dm new file mode 100644 index 00000000000..7b8d295ba65 --- /dev/null +++ b/code/modules/RCD/engie.dm @@ -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("[user] is using the deconstruct function on \the [src] on \himself! It looks like \he's trying to commit suicide!") + 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) diff --git a/code/modules/RCD/schematic.dm b/code/modules/RCD/schematic.dm new file mode 100644 index 00000000000..ed30adfd241 --- /dev/null +++ b/code/modules/RCD/schematic.dm @@ -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 \ No newline at end of file diff --git a/code/modules/RCD/schematics/engi.dm b/code/modules/RCD/schematics/engi.dm new file mode 100644 index 00000000000..8222b92f624 --- /dev/null +++ b/code/modules/RCD/schematics/engi.dm @@ -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() + . = "

    " + for(var/i = 1 to schematics.len) + var/datum/airlock_schematic/C = schematics[i] + var/selected_text = "" + if(selected == C) + selected_text = " class='selected'" + + . += "" + + if(!(i % 5)) + . += "
    " + + . += {" + +

    + + + +

    + "} + + if(allow_access) + . += {" + + + + Show access controls
    + + + " + + . += "

    " + +/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' diff --git a/code/modules/RCD/schematics/pipe.dm b/code/modules/RCD/schematics/pipe.dm new file mode 100644 index 00000000000..308267af47b --- /dev/null +++ b/code/modules/RCD/schematics/pipe.dm @@ -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 += "" + +/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" + + . += "" + +/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("[user] paints \the [O] [selected_color].","You paint \the [O] [selected_color].") + 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() + . += "

    " + + 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") + . += "
    " + . += 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") + . += "
    " + . += 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") + . += "
    " + . += render_dir_image(SOUTH, "East North West") + . += render_dir_image(WEST, "South East North") + . += "
    " + . += render_dir_image(6, "West South East") + . += render_dir_image(5, "North West South") + . += "
    " + . += render_dir_image(9, "East North West") + . += render_dir_image(10, "South East North") + + . += "

    " + +/datum/rcd_schematic/pipe/proc/render_dir_image(var/dir, var/title) + var/selected = "" + if(selected_dir == dir) + selected = " class='selected'" + + return "" + +/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 "" + +/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 diff --git a/code/modules/RCD/schematics/service.dm b/code/modules/RCD/schematics/service.dm new file mode 100644 index 00000000000..c109df56260 --- /dev/null +++ b/code/modules/RCD/schematics/service.dm @@ -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 diff --git a/code/modules/RCD/schematics/test.dm b/code/modules/RCD/schematics/test.dm new file mode 100644 index 00000000000..bc7f5c07636 --- /dev/null +++ b/code/modules/RCD/schematics/test.dm @@ -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" diff --git a/code/modules/RCD/schematics/tile.dm b/code/modules/RCD/schematics/tile.dm new file mode 100644 index 00000000000..0886508cf8f --- /dev/null +++ b/code/modules/RCD/schematics/tile.dm @@ -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() + . += "

    " + + 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'" + + . += "" + + . += "

    " + +/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") + ) +) diff --git a/code/modules/RCD/tile painter.dm b/code/modules/RCD/tile painter.dm new file mode 100644 index 00000000000..7e6bcdc3ac7 --- /dev/null +++ b/code/modules/RCD/tile painter.dm @@ -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. + . = ..() diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 2e84b6f772b..e36bcf6a8f3 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -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") diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index 169c2063c67..5653df4b72a 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -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) diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index 921325afd27..48d8b7d837f 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -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" diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 947118c67fe..6465f5fe275 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -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) diff --git a/code/modules/html_interface/RCD/RCD.css b/code/modules/html_interface/RCD/RCD.css new file mode 100644 index 00000000000..045ec0cad97 --- /dev/null +++ b/code/modules/html_interface/RCD/RCD.css @@ -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; +} diff --git a/code/modules/html_interface/RCD/RCD.dm b/code/modules/html_interface/RCD/RCD.dm new file mode 100644 index 00000000000..ceedd82d136 --- /dev/null +++ b/code/modules/html_interface/RCD/RCD.dm @@ -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 += "" + +/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) diff --git a/code/modules/html_interface/RCD/html_interface_no_bootstrap.html b/code/modules/html_interface/RCD/html_interface_no_bootstrap.html new file mode 100644 index 00000000000..5ddb00eef6a --- /dev/null +++ b/code/modules/html_interface/RCD/html_interface_no_bootstrap.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/code/modules/html_interface/html_interface.dm b/code/modules/html_interface/html_interface.dm index e28fe0fb356..9baafb7cf27 100644 --- a/code/modules/html_interface/html_interface.dm +++ b/code/modules/html_interface/html_interface.dm @@ -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]"), "browser_\ref[src].browser") + hclient.client << output(replacetextEx(replacetextEx(file2text(default_html_file), "\[hsrc\]", "\ref[src]"), "", "[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) diff --git a/code/modules/maps/spawners/spawners.dm b/code/modules/maps/spawners/spawners.dm index f6b641332db..107d00c2b9d 100644 --- a/code/modules/maps/spawners/spawners.dm +++ b/code/modules/maps/spawners/spawners.dm @@ -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, diff --git a/code/modules/mob/living/silicon/mommi/mommi_modules.dm b/code/modules/mob/living/silicon/mommi/mommi_modules.dm index 8740fe94dd1..7dae0cce50c 100644 --- a/code/modules/mob/living/silicon/mommi/mommi_modules.dm +++ b/code/modules/mob/living/silicon/mommi/mommi_modules.dm @@ -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") diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 52360aa746d..0efd123ae09 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -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) diff --git a/code/setup.dm b/code/setup.dm index f3c750daf2d..43362410c0a 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -1213,6 +1213,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 diff --git a/html/changelogs/PJB3005-RCD.yml b/html/changelogs/PJB3005-RCD.yml new file mode 100644 index 00000000000..924f469f550 --- /dev/null +++ b/html/changelogs/PJB3005-RCD.yml @@ -0,0 +1,9 @@ +author: PJB3005 +delete-after: true +changes: + - tweak: Rewrites RCD/RPD/RSF/tile painter code into one to be more moduler & simpler. + - tweak: RCD, RSF & tile painter now have an RPD-like UI. + - tweak: Setting airlock colour on the RCD is now done through the UI instead of a verb. + - tweak: UIs of the RPD and tile painter are now MASSIVELY more responsive. + - tweak: The RCD can now make airlocks with custom names and access levels (latter is disabled for engie borgs). + - tweak: You can paint ALL insulated pipes now! (colours other than white available) \ No newline at end of file diff --git a/icons/obj/RCD.dmi b/icons/obj/RCD.dmi new file mode 100644 index 00000000000..47d4d60b25e Binary files /dev/null and b/icons/obj/RCD.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 589513bf3c8..74dea0a5b36 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/maps/defficiency.dmm b/maps/defficiency.dmm index d2b8216dbb8..efecbafd0e4 100644 --- a/maps/defficiency.dmm +++ b/maps/defficiency.dmm @@ -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) diff --git a/maps/metaclub.dmm b/maps/metaclub.dmm index 383b15d8b07..db852798638 100644 --- a/maps/metaclub.dmm +++ b/maps/metaclub.dmm @@ -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) diff --git a/maps/taxistation.dmm b/maps/taxistation.dmm index 18a62a03262..d232bc64807 100644 --- a/maps/taxistation.dmm +++ b/maps/taxistation.dmm @@ -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) diff --git a/maps/tgstation.dmm b/maps/tgstation.dmm index 4993ccf280d..a494e178fad 100644 --- a/maps/tgstation.dmm +++ b/maps/tgstation.dmm @@ -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 diff --git a/vgstation13.dme b/vgstation13.dme index 0f591d07218..68becee546b 100644 --- a/vgstation13.dme +++ b/vgstation13.dme @@ -677,10 +677,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" @@ -691,7 +688,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" @@ -1065,6 +1061,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" @@ -1471,6 +1468,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"