From ccb9ceb8112d8718bc437c65985a682273efc57c Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Sat, 15 Aug 2015 18:18:51 +0200 Subject: [PATCH] RCD Rework. RCDs now work on a system of schematics, with an RPD style UI. RPD, RCD, RSF and tile painters all implemented into this new system. --- code/ATMOSPHERICS/components/unary/cap.dm | 2 +- code/ATMOSPHERICS/components/unary/tank.dm | 2 +- code/ATMOSPHERICS/he_pipes.dm | 2 + code/ATMOSPHERICS/pipes.dm | 76 ++- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- code/game/gamemodes/steal_items.dm | 4 +- code/game/machinery/autolathe.dm | 8 +- code/game/objects/items/weapons/RCD.dm | 289 --------- code/game/objects/items/weapons/RPD.dm | 609 ------------------ code/game/objects/items/weapons/RSF.dm | 135 ---- .../objects/items/weapons/tile_painter.dm | 490 -------------- .../closets/secure/engineering.dm | 2 +- .../structures/crates_lockers/crates.dm | 2 +- code/global.dm | 2 +- code/modules/RCD/RCD.dm | 231 +++++++ code/modules/RCD/RPD.dm | 64 ++ code/modules/RCD/RSF.dm | 39 ++ code/modules/RCD/engie.dm | 45 ++ code/modules/RCD/schematic.dm | 83 +++ code/modules/RCD/schematics/engi.dm | 394 +++++++++++ code/modules/RCD/schematics/pipe.dm | 572 ++++++++++++++++ code/modules/RCD/schematics/service.dm | 46 ++ code/modules/RCD/schematics/test.dm | 6 + code/modules/RCD/schematics/tile.dm | 609 ++++++++++++++++++ code/modules/RCD/tile painter.dm | 15 + code/modules/clothing/spacesuits/alien.dm | 2 +- code/modules/clothing/spacesuits/ert.dm | 2 +- code/modules/clothing/spacesuits/rig.dm | 6 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/html_interface/RCD/RCD.css | 28 + code/modules/html_interface/RCD/RCD.dm | 21 + .../RCD/html_interface_no_bootstrap.html | 15 + code/modules/html_interface/html_interface.dm | 5 +- code/modules/maps/spawners/spawners.dm | 6 +- .../mob/living/silicon/mommi/mommi_modules.dm | 4 +- .../mob/living/silicon/robot/robot_modules.dm | 8 +- code/setup.dm | 6 + html/changelogs/PJB3005-RCD.yml | 9 + icons/obj/RCD.dmi | Bin 0 -> 928 bytes icons/obj/items.dmi | Bin 89167 -> 88243 bytes maps/defficiency.dmm | 6 +- maps/metaclub.dmm | 14 +- maps/taxistation.dmm | 6 +- maps/tgstation.dmm | 12 +- vgstation13.dme | 16 +- 45 files changed, 2293 insertions(+), 1604 deletions(-) delete mode 100644 code/game/objects/items/weapons/RCD.dm delete mode 100644 code/game/objects/items/weapons/RPD.dm delete mode 100644 code/game/objects/items/weapons/RSF.dm delete mode 100644 code/game/objects/items/weapons/tile_painter.dm create mode 100644 code/modules/RCD/RCD.dm create mode 100644 code/modules/RCD/RPD.dm create mode 100644 code/modules/RCD/RSF.dm create mode 100644 code/modules/RCD/engie.dm create mode 100644 code/modules/RCD/schematic.dm create mode 100644 code/modules/RCD/schematics/engi.dm create mode 100644 code/modules/RCD/schematics/pipe.dm create mode 100644 code/modules/RCD/schematics/service.dm create mode 100644 code/modules/RCD/schematics/test.dm create mode 100644 code/modules/RCD/schematics/tile.dm create mode 100644 code/modules/RCD/tile painter.dm create mode 100644 code/modules/html_interface/RCD/RCD.css create mode 100644 code/modules/html_interface/RCD/RCD.dm create mode 100644 code/modules/html_interface/RCD/html_interface_no_bootstrap.html create mode 100644 html/changelogs/PJB3005-RCD.yml create mode 100644 icons/obj/RCD.dmi 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 0000000000000000000000000000000000000000..47d4d60b25ea0e0820569cfe58937568891269da GIT binary patch literal 928 zcmV;R17G}!P)TrMsyPft%cI5b5D%94_3W*cXw-RYi4FiF9MTv_uC9|j)$TQ^POe;#vO@*)#Y6^%@Q=Ar`UX)l#j6z&$loee4T)@5n0I{+; z3>*P#tN;K3wn;=mR9J=WmT6DIKoEwiA@e@P!9NfP_1K$Zd+^fN{kaYT;;2K-7fC7n^S86{+3 zgF}SGV*HRB_Q^4(W-?Uy?tCP#jE;>@C`z;+pul`+(I$&ixP%32K%^gFIuNK|bmzK0 z(*-9e89pUdjp@kiL@K50v$MG2?%?YZv7=Ck?!c=w=fJXUi%(=-4^9BEG%cbdm}3sg z^Yi7Hl>Ep-vA7T?z>czQ#|g+!0!@n*APEyd?+HkN^bjBk0)apv5d5CS#idH6;#iJV zwW?MA&$GO|QmfTg>#Oxfz0s(1`P%vhfriaZEY7gCy+fd3cNdE{?3oU|51f4`Z8%xO zsfO}{rc1ed=%$a{?2+5x1v#Hq?pUTWIl+lf`{eYDsu>o@vT@!zZyjHBo&iQ!;CYu< z?W^|n&1DBp0H#csxZK|2hRd5Cad+o=_xHHr@(vddCOq2qBmaGer{@=Vwe8oq?*ZPX z6aUWe{*jymPLT9I0GuE(Cz4O-ohQBzzLN_C|G_8AzeHMt;l_Lb0000x~6Yebys(Ns_sOnD$C$vkzyerAmGZ$N~$9uAc?{+Y78_u z#m;`-76Adx&`VRtRnpwW)Y;0>)ylyh0l_2dG^59UmFGq1#Ek~)a%FRPHlG!K7m-{P zk>w=s3+Y+eELN#Hi9c7+Bk#>+BSxc(QkVBWy2u+iG7{EzE@ipA-F{FoICX5O8<4wE z$AAfRsrS4c$pqJb3bp0s&1}{__?lu~*ZP>qX}-Q{3(PPZUExl20c7Xm7FfB|w+aEs zk}cS}bMs#`xD^pfST;vaRIQ9KKr14EE0W!n)66XQ5rxiQj3<6q5Vgz3H%8)}?54Oq z<4b0;vHJ>-71B`HIwFHIU$=DL>Sm~Opcx6)zG1#Q{7QIbEF@GqY{vve-b{9(?67E9MW4cm+a^YP6SuA`3crWJue zju<&~IYx`;ZE@-A(Y*kjGn< z7%-B-#2MYvwtH;idwX1ETKkVUkS__SWgdm@FH#4bc$w*KSAWn%|5}e5xOB(OHyW(x zJ9|yfK9XgLLMQU(bFGufj{}jY9s3sUIBTR&bMYxtMpFIqQV*E z#j`&OASVLpwu33-gv+n2R=yC}>r%{Z$kW$@XsyuZ86h!Z?zkq0oRAm}Bi+ZvFPm>m zSpB_#2s8u_7(s0Z@z3%S$ZLXR}9<9qhHnHdqI{N0o@Zyr$I7JF8=Fhv zYhA_qIt?vj_-lYmupMKVTgQYJs?ji;ndp)JeutalQZIh1vprYs+haa@7SS!fw9PV_ z3y;=LQ)A+K^inZKv3kbaqSDk>Y?>~9EGd}I9L&l zd{`jQVXTvk5Hvwr)WK^BlbW`c-OIi>^RoAI81@ZdHI6iHkW1yWq1UZEqyC5`Be#07IXbFlx$@%IPehEqp6}cKbW(kD zEmkc~eqU5<2^WU+ueQzy7~*EzZ=VV%+sM@QEX02kWmD7V1xIApMGAB!Z~D)7FjC<$ z`zXO;MnNuno=TxFX$QY7{^V&iJAz#g5y-UNUJWQGo8&4Xw5wR4dB3o5Vr1OpE5ax4 z1`umzFZ&Vem!Z0KPIYfZ>ez8^Nw6*nMH7wm*w^%j84Da0mJ*A zn1A6FPrYg3L+}RfXv6A96iTnPzA-(m8^P6k@~qv&nw^UUNH4w`on zv$F!pbeeys(u8!N!1t1uH<;}xLa^uegtM(IKNIdKL%c)I#c&1`MHz*3_id3Kuf$uev1D5o~(^5%B=tol4YfbaeO{9%D6^>@Qh9%=+RNij{2tdneSAELRn z=Z&xIt%<>+NSM58qNuDP{<6uWYL$WN#U6bl$STQ}4>~K>b`Oij(VYv+B8^6bc8yx) zjk8T!J=oT>?`VUQ)Wb2tS6^1s1gze80sThD&D`rVPt4tUPqZgHaYSS$`zZjls7vh`X<3&vmss1qZpFA5e4OE=$w*NF8SiLPwd80>8>1B5 zly2+(6fbK!%p8pU=7iW75CGcBnRy!_;ZPJNnc`n?=?Zw^!;+RPj1$w&LjYN~u}de< znHcGmc50SF|f|Pzo061Oy_s``b6%gYFjFl>2m3<+rb11w~XFEOySp0g4 z2L--zU5DD3_mqxJN4~%s`QP=?d&9gGz3fHyf!E;bI?}}zL!2LQJx6x&+YcgoHOl{v zswmQ_Sdf^^PLP*!VA&#`epF~*<^I7XjPGku*8M9p4Y(ZpyxFJz+V2y50589QZ{J$( z%P2p_%Qjsijy)PQs6=Ll5XCB--chBBud^1(wp}8Yy-aw=JYJo!-TCX`*(f>gtF~M` z)=nXvoqF1s3csr1QunBe(wwWV#z$eh?y7gs9EMsjx@hPpajgnc){ue?m(`+Q?xCX~ zhP-O|-;+qHl?1>a3(@?43XOd*tgr`kh7uP=iokb>e2XXpYxSX+#|8{bKlz#7CE>V# zL}Wl+Lz&BF*oC6C@DDQ_3UAtiJAeV$gsGod0+GU`kLS?weU%zqZ#j;cQsEvAur2(I6dIEQy(Uz!IG_lN*SMbm5sTGb?Ohn;l*yu z%&?lrA=h%U+`OlX0L`?#KksPVc1$f67*rW#ojPd6yTH}$XKl40;fIs@;rn&$DPu@x)y> zV&83@shWGv{c4}604yS*%!c4*U}oGDh9N9IY({l7J%2p&?2=#i{*+t{Es&Ruu<&rb zE{lUX2-g$@E-&j{`K7bRt~<>N5CSD-8B8PzSZpvNnY7qXd3I}%lbP9?h@-`|G{)8Q zI48AcRXw9L?skRXyoNEg>B3e=Q$ILBvRn;vbF`B$!2ZNt|qe(ZHbV$E0mR5m^#OepscmJ1uKw>s1^T`H2;xnEw>_m-q% zq#%u5O!px)o4wbxiO(%g-qX}h(P(Xm`Ex8#!7`Fa`h=!@;lD zZ$V0`Em7hQI!~2CYtTp{x+&nCCNffqa`v)mG877Z`zMtyWu9IMV1fMBKwKSHGg9<7 z*&UH3I_J)M>~F6C`-9}UwenI&t5Ub*08m$IFm?=X!J5`@f$YzZ;=DL5qjt^~Q;ItLiPZ}BA4XN?{{T>a z@Lp!})^;IAJ{tMlvCa^G5?9U^NM7+r2Z3Dkh;t_deCw^&xm{Tj z@uGS6`_id=J1M11U(eXgGCC$O)We3zA>~}poYZdnjOw#84$T5j^cBGdjPzf>n*Vg% z>diABNo7ah?5t+{1vUQjB-V{ia4gpQ@@w>O|AiWybR-C5?I^ljV_~py$&x?;)O%RN zd!(XZ`M^O!y@l2CtkTFmIlM8K!xg`o+pA>?b<-v)!EN|018MBH1ExlU~LMP5_GC!UuQT@4nlrfd>4qp;!>rS$!_{Xz6d1lGKO?fFF9 zcHppx($IwP+1{@mZ%5ej9I09ApjUW8dzc*u^m=(hg1gyzV(ipS=J?{SG06Sia1bmx z{A}J;RaSOrU-si;PR0u8`1ryL8OmlemTK>6mQGYqz4Ahe6HuoZnek_nhOCO#U>5x| zvuLzMAiPnNUMven014>QFe+#A;vtK1WHs(uy}F*6sP35d04|xQN*ScE`UbsWgKc?% z7$p1z0^Mk|LkYzJiYQD=YE)caD6*_SxNsItXI{DrGkoC^wa*JWLy?flJ9YeQ{jsyy zrGsX|Fu+!fcs`xOVZ!bnlSdTTd+3SSJa6m4L>#cH^Brm>1WYYWwet*Ia6zwr7!p9P zsYj^UAe$OZTj>O{v-uGN0j^$xm-03^aSNc2-<4X-_YdGx%saV60s`=J&V3Z_?kG44 zuw)CzbCF4DIaD49jew$f`OvqoGcp|$e({;6fK25w_C2N*virtY9me7uMu}Q0$Xf|5 z96(%QBrC{<5&dUA5@u$R|sK^qAx5b zE)meD#0iCO-*X@lyK@aL_*Wiyi5&8nYi)vB-wXdR&pFR0Ud;8!KQ>~V2RUcNZXBHR z@Z_hh_yXTw1#KuOpf~6fp^e4UH#I z8=9NL3;~pEk`Fp_h%?9`7ryDa0=_;>4Gp>lXtFH7*h@2<3!?-rSAHm}{lE_{>Og99 zOCFAeih8LV30!7SRTi+vkH&ghS7o9+QA6YJ(&MVKRETOS~6mEV+O2knhn9t&7MQHpv_n!AR*wiO>+UJqt%>O3`VR%Q{ zir}i=Zdf&2Ov?}WBI(9XEzcP`KL@6*tO1F$*OgZ(Ex}Dv+)5mv_BAo-A-fE;#`ZN= zcX#JEeC{V{^veRFQ{|wQ$6#+I+Cw#}HOWtCJoYh2#SN27*Jwr4kHJmF@Al@XMkjhh zuv#NQ2TcDuVZ&VyE`_4X!B5?Rhh_zOfq$rOo=X&|hR8cZ#Q!-Kp-zf&sSIY*8 zqO>(=Yllh(Bv=BiNlQnrob9OloS(Wl8Fms+l89Y1b4fp!GcUu-+Es7+9uFVyC;Vd4 zZaAB9nZSfE^urVtmRX9S1hk@Zv5(jJxt6;!j10(TZ?fOn!B!B=Q%+<≥k}5!f0) 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 QTL1t607*qoM6N<$g7g0mH~;_u literal 89167 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