From 7db828644c8cbcc9aa5c617d33bcf0268df4aa2c Mon Sep 17 00:00:00 2001 From: Robustin Date: Thu, 13 Apr 2017 17:31:43 -0400 Subject: [PATCH] EngiMarket Part Four - Ranged RCD and Rapid Lighting Device (RLD) (#25263) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two new items, one brand new, the other an RCD that works at range without any other bells and whistles. The RLD allows you to create floor and wall lighting along with temporary (they use fuel like flares) glowsticks at range. It can also deconstruct lights. The best part of this feature (besides the visual "ammo" updating icons) is the ability to select absolutely any color you desire. 🆑 Robustin add: Ranged RCD added to the game add: Rapid Lighting Device (also ranged) has been added. It can create wall, floor, and temporary lights of any color you desire. /🆑 --- .../lavaland_surface_ash_walker1.dmm | 2 +- _maps/map_files/debug/runtimestation.dmm | 2861 ++++++++++++++++- code/datums/action.dm | 3 + code/game/atoms.dm | 4 +- .../gamemodes/malfunction/Malf_Modules.dm | 4 +- code/game/gamemodes/sandbox/h_sandbox.dm | 2 +- code/game/machinery/doors/airlock.dm | 4 +- code/game/machinery/vending.dm | 2 +- code/game/objects/items/weapons/RCD.dm | 403 ++- .../structures/crates_lockers/crates.dm | 2 +- code/game/objects/structures/girders.dm | 4 +- code/game/objects/structures/grille.dm | 4 +- code/game/objects/structures/window.dm | 4 +- code/game/turfs/simulated/floor.dm | 4 +- code/game/turfs/simulated/wall/reinf_walls.dm | 4 +- code/game/turfs/simulated/walls.dm | 4 +- code/game/turfs/space/space.dm | 5 +- code/modules/cargo/exports/tools.dm | 2 +- code/modules/clothing/outfits/ert.dm | 4 +- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 2 +- code/modules/flufftext/Hallucination.dm | 3 +- code/modules/mining/aux_base_camera.dm | 8 +- .../mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/power/lighting.dm | 11 + .../research/designs/autolathe_designs.dm | 2 +- code/modules/research/experimentor.dm | 2 +- icons/obj/tools.dmi | Bin 10864 -> 15004 bytes 28 files changed, 3164 insertions(+), 190 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index f219cfcc992..a6c92c7610c 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -145,7 +145,7 @@ /area/ruin/unpowered) "u" = ( /obj/structure/closet/crate/engineering, -/obj/item/weapon/rcd/loaded, +/obj/item/weapon/construction/rcd/loaded, /turf/open/floor/engine/cult{ baseturf = /turf/open/floor/plating/lava/smooth }, diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index b3facda8d26..2c90bf7f22f 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -1,3 +1,4 @@ + "aa" = (/turf/open/space/basic,/area/space) "ab" = (/obj/structure/lattice,/turf/open/space,/area/space) "ac" = (/turf/open/space,/area/space/nearstation) @@ -87,7 +88,7 @@ "bI" = (/obj/structure/table,/turf/open/floor/plasteel,/area/bridge) "bJ" = (/obj/structure/table,/obj/item/weapon/card/id/captains_spare,/turf/open/floor/plasteel,/area/bridge) "bK" = (/obj/structure/table,/obj/item/weapon/storage/backpack/holding,/turf/open/floor/plasteel,/area/bridge) -"bL" = (/obj/structure/table,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/rcd,/turf/open/floor/plasteel,/area/bridge) +"bL" = (/obj/structure/table,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/rcd_ammo/large,/obj/item/weapon/construction/rcd,/turf/open/floor/plasteel,/area/bridge) "bM" = (/obj/structure/closet/secure_closet/hop,/turf/open/floor/plasteel/blue/side{dir = 4},/area/bridge) "bN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/hallway/primary/central) "bO" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/open/floor/plasteel,/area/hallway/primary/central) @@ -200,56 +201,2810 @@ "dR" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/turf/open/floor/plasteel,/area/storage/primary) (1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadadadadadadadadadaeaeaeaeaeaeaeadadadadadadadadadadadadadadadadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafafafafafafafadagagagagacacacadafafafafafafafafafafafafafafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahahahahahahahagaiaiagacacacajajajajakakakakakakakakakakafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahalamamamamahaganaoagagajajajapaqarakasatauavavavavavakafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahawaxayayazahagaiaAaBaBaCaDaCaDaEaFakaGaHaIavaJaKaLavakafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahaMawaNaOaPahagaQaRagagajajajaSaTaDaUaVaWaXavaKavaKaYakafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahaZbabbbcaPahagaiaiagacacacajbdbebfakbgbhaIavaLbiaJavakafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahbjbkblbmbnahagagagagacacacajbobebpakbqbraIavavavavavakafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafahbsbtahahahbububvbvbvbvbvbububwbxajakakakakbybybybybybyafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadbzbAbBbCbDbEbFbubGbHbIbJbKbLbMbubNbObPbQbRbSbTbybUbVbWbXbyafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacbYafbZcacbcccccccdcecfcfcfcfcfcgchcicjccccccccccckclcmcmcmcnafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacbYafbZbObNbEbEcobucpcqcqcqcqcqcrcsctbEbEbEbEbEcobycucmcmcmbybybyacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacbYafbZbObNbEbEbEbucvbvbucwbubvbucsbNbEbEbEbEbEbEcxcucmcmcycnczcnacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacbYafbZbObCcAcAcAcBcCcDcDcDcDcDcDcEcFcAcAcAcAcAcAcGcHcmcmcmbybybyacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacbYafbZbObNbEbEbEbEbEbEbEbEbEbEbEbObNbEbEbEbEbEbEbycIcmcmcmcnafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadbzbAbObNbEbEbEbEbEbEbEbEbEbEbEbObNbEbEbEbEbEbEbycJcKcLcMbyafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNcOcPcQcQcNcRcRcRcNcQcQcNcScTcUcScScScVcVcVbybybybybybyafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNcWcXcYcYcYcYcYcYcYcYcYcZcSdadbdcdddedfdgdhdidjdkdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdmdndndndndndndndndndndocSdpdldcdqdrdsdtdudvdwdkdldxcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzcSdldldAdBdBdBdBdBdBdBdCdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzcSdldldldldldldldldldldldldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzcSdldldDdEdEdEdEdEdEdEdFdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzdGdldldcdHdHdHdHdHdHdHdkdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzdGdldldcdIdIdIdIdIdIdIdkdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzcSdldldAdBdBdBdBdBdBdBdCdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzcSdldldldldldldldldldldldldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdydndndndndndndndndndndzcSdldldDdEdEdEdEdEdEdEdFdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdmdndndndndndndndndndndocSdpdldcdJdJdJdJdJdJdJdkdldxcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNdKdLdLdLdLdLdLdLdLdLdLdMcSdldldcdNdOdNdNdPdQdRdkdldlcSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafcNcNcNcNcNcNcNcNcNcNcNcNcNcScScScScScScScScScScScScScScSafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(4,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(5,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(6,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(8,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(9,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(10,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(11,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +bY +bY +bY +bY +bY +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(12,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +af +af +af +af +af +af +af +bz +af +af +af +af +af +bz +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(13,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ah +ah +ah +ah +ah +ah +ah +bA +bZ +bZ +bZ +bZ +bZ +bA +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(14,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ah +al +aw +aM +aZ +bj +bs +bB +ca +bO +bO +bO +bO +bO +cO +cW +dm +dy +dy +dy +dy +dy +dy +dy +dy +dm +dK +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(15,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ah +am +ax +aw +ba +bk +bt +bC +cb +bN +bN +bC +bN +bN +cP +cX +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(16,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ah +am +ay +aN +bb +bl +ah +bD +cc +bE +bE +cA +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ah +am +ay +aO +bc +bm +ah +bE +cc +bE +bE +cA +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ah +am +az +aP +aP +bn +ah +bF +cc +co +bE +cA +bE +bE +cN +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +ad +ah +ah +ah +ah +ah +ah +bu +bu +cd +bu +bu +cB +bE +bE +cR +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(20,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ag +ag +ag +ag +ag +ag +ag +bu +bG +ce +cp +cv +cC +bE +bE +cR +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(21,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ag +ai +an +ai +aQ +ai +ag +bv +bH +cf +cq +bv +cD +bE +bE +cR +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(22,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ag +ai +ao +aA +aR +ai +ag +bv +bI +cf +cq +bu +cD +bE +bE +cN +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(23,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ag +ag +ag +aB +ag +ag +ag +bv +bJ +cf +cq +cw +cD +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(24,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ac +ac +ag +aB +ag +ac +ac +bv +bK +cf +cq +bu +cD +bE +bE +cQ +cY +dn +dn +dn +dn +dn +dn +dn +dn +dn +dn +dL +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ac +ac +aj +aC +aj +ac +ac +bv +bL +cf +cq +bv +cD +bE +bE +cN +cZ +do +dz +dz +dz +dz +dz +dz +dz +dz +do +dM +cN +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(26,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ae +ac +ac +aj +aD +aj +ac +ac +bu +bM +cg +cr +bu +cD +bE +bE +cS +cS +cS +cS +cS +cS +dG +dG +cS +cS +cS +cS +cS +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(27,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +ad +aj +aj +aC +aj +aj +aj +bu +bu +ch +cs +cs +cE +bO +bO +cT +da +dp +dl +dl +dl +dl +dl +dl +dl +dl +dp +dl +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(28,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +aj +ap +aD +aS +bd +bo +bw +bN +ci +ct +bN +cF +bN +bN +cU +db +dl +dl +dl +dl +dl +dl +dl +dl +dl +dl +dl +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +aj +aq +aE +aT +be +be +bx +bO +cj +bE +bE +cA +bE +bE +cS +dc +dc +dA +dl +dD +dc +dc +dA +dl +dD +dc +dc +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +aj +ar +aF +aD +bf +bp +aj +bP +cc +bE +bE +cA +bE +bE +cS +dd +dq +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dN +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +ak +ak +aU +ak +ak +ak +bQ +cc +bE +bE +cA +bE +bE +cS +de +dr +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dO +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(32,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +as +aG +aV +bg +bq +ak +bR +cc +bE +bE +cA +bE +bE +cV +df +ds +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dN +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(33,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +at +aH +aW +bh +br +ak +bS +cc +bE +bE +cA +bE +bE +cV +dg +dt +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dN +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(34,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +au +aI +aX +aI +aI +ak +bT +cc +co +bE +cA +bE +bE +cV +dh +du +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dP +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(35,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +av +av +av +av +av +by +by +ck +by +cx +cG +by +by +by +di +dv +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dQ +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(36,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +av +aJ +aK +aL +av +by +bU +cl +cu +cu +cH +cI +cJ +by +dj +dw +dB +dl +dE +dH +dI +dB +dl +dE +dJ +dR +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(37,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +av +aK +av +bi +av +by +bV +cm +cm +cm +cm +cm +cK +by +dk +dk +dC +dl +dF +dk +dk +dC +dl +dF +dk +dk +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(38,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +av +aL +aK +aJ +av +by +bW +cm +cm +cm +cm +cm +cL +by +dl +dl +dl +dl +dl +dl +dl +dl +dl +dl +dl +dl +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +av +av +aY +av +av +by +bX +cm +cm +cy +cm +cm +cM +by +dl +dx +dl +dl +dl +dl +dl +dl +dl +dl +dx +dl +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(40,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +ak +ak +ak +ak +ak +ak +by +by +cn +by +cn +by +cn +by +by +cS +cS +cS +cS +cS +cS +cS +cS +cS +cS +cS +cS +cS +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(41,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +af +af +af +af +af +af +af +af +af +af +by +cz +by +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(42,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +by +cn +by +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(44,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +"} +(45,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(46,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(47,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(48,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(49,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(50,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} diff --git a/code/datums/action.dm b/code/datums/action.dm index 03b293b13dc..63de6b19e37 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -198,6 +198,9 @@ if(target == C.internal) button.icon_state = "template_active" +/datum/action/item_action/pick_color + name = "Choose A Color" + /datum/action/item_action/toggle_mister name = "Toggle Mister" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 95b77d9d67a..c12d828fff7 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -445,10 +445,10 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/ratvar_act() return -/atom/proc/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/atom/proc/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) return FALSE -/atom/proc/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/atom/proc/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) return FALSE /atom/proc/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index d581af11b94..4eea55dbca7 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -197,8 +197,8 @@ return for(var/I in GLOB.rcd_list) - if(!istype(I, /obj/item/weapon/rcd/borg)) //Ensures that cyborg RCDs are spared. - var/obj/item/weapon/rcd/RCD = I + if(!istype(I, /obj/item/weapon/construction/rcd/borg)) //Ensures that cyborg RCDs are spared. + var/obj/item/weapon/construction/rcd/RCD = I RCD.detonate_pulse() to_chat(src, "RCD detonation pulse emitted.") diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index ae0486c399f..07a4e0af6c0 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -218,7 +218,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if("hsbrcd") if(!GLOB.hsboxspawn) return - new/obj/item/weapon/rcd/combat(usr.loc) + new/obj/item/weapon/construction/rcd/combat(usr.loc) // // New sandbox airlock maker diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9a3af5b627f..147e07fe1da 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1540,13 +1540,13 @@ ae.loc = src.loc qdel(src) -/obj/machinery/door/airlock/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/obj/machinery/door/airlock/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 32) return FALSE -/obj/machinery/door/airlock/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/obj/machinery/door/airlock/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_DECONSTRUCT) to_chat(user, "You deconstruct the airlock.") diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 92984b4852b..a05a5af3755 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1052,7 +1052,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "engivend" icon_deny = "engivend-deny" req_access_txt = "11" //Engineering Equipment access - products = list(/obj/item/clothing/glasses/meson/engine = 2,/obj/item/device/multitool = 4,/obj/item/weapon/electronics/airlock = 10,/obj/item/weapon/electronics/apc = 10,/obj/item/weapon/electronics/airalarm = 10,/obj/item/weapon/stock_parts/cell/high = 10, /obj/item/weapon/rcd/loaded = 3, /obj/item/device/geiger_counter = 5) + products = list(/obj/item/clothing/glasses/meson/engine = 2,/obj/item/device/multitool = 4,/obj/item/weapon/electronics/airlock = 10,/obj/item/weapon/electronics/apc = 10,/obj/item/weapon/electronics/airalarm = 10,/obj/item/weapon/stock_parts/cell/high = 10, /obj/item/weapon/construction/rcd/loaded = 3, /obj/item/device/geiger_counter = 5) contraband = list(/obj/item/weapon/stock_parts/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index dbb3149a385..f8e716ea694 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -1,14 +1,14 @@ - +#define GLOW_MODE 3 +#define LIGHT_MODE 2 +#define REMOVE_MODE 1 /* CONTAINS: RCD +ARCD */ -/obj/item/weapon/rcd - name = "rapid-construction-device (RCD)" - desc = "A device used to rapidly build and deconstruct walls and floors." - icon = 'icons/obj/tools.dmi' - icon_state = "rcd" + +obj/item/weapon/construction opacity = 0 density = 0 anchored = 0 @@ -25,30 +25,114 @@ RCD resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/matter = 0 - var/max_matter = 160 - var/working = 0 + var/max_matter = 100 + var/sheetmultiplier = 4 //Controls the amount of matter added for each glass/metal sheet, triple for plasteel + var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal + var/no_ammo_message = "The \'Low Ammo\' light on the device blinks yellow." + +/obj/item/weapon/construction/Initialize() + ..() + desc = "A [src]. It currently holds [matter]/[max_matter] matter-units." + spark_system = new /datum/effect_system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + + +/obj/item/weapon/construction/Destroy() + QDEL_NULL(spark_system) + . = ..() + +/obj/item/weapon/construction/attackby(obj/item/weapon/W, mob/user, params) + if(iscyborg(user)) + return + var/loaded = 0 + if(istype(W, /obj/item/weapon/rcd_ammo)) + var/obj/item/weapon/rcd_ammo/R = W + if((matter + R.ammoamt) > max_matter) + to_chat(user, "The [src] can't hold any more matter-units!") + return + qdel(W) + matter += R.ammoamt + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + loaded = 1 + else if(istype(W, /obj/item/stack/sheet/metal) || istype(W, /obj/item/stack/sheet/glass)) + loaded = loadwithsheets(W, sheetmultiplier, user) + else if(istype(W, /obj/item/stack/sheet/plasteel)) + loaded = loadwithsheets(W, plasteelmultiplier*sheetmultiplier, user) //Plasteel is worth 3 times more than glass or metal + if(loaded) + to_chat(user, "The [src] now holds [matter]/[max_matter] matter-units.") + desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." + else + return ..() + +/obj/item/weapon/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user) + var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD + if(maxsheets > 0) + var/amount_to_use = min(S.amount, maxsheets) + S.use(amount_to_use) + matter += value*amount_to_use + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + to_chat(user, "You insert [amount_to_use] [S.name] sheets into the [src]. ") + return 1 + to_chat(user, "You can't insert any more [S.name] sheets into the [src]!") + return 0 + +/obj/item/weapon/construction/proc/activate() + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + +/obj/item/weapon/construction/attack_self(mob/user) + playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) + if(prob(20)) + spark_system.start() + +/obj/item/weapon/construction/proc/useResource(amount, mob/user) + if(matter < amount) + if(user) + to_chat(user, no_ammo_message) + return 0 + matter -= amount + desc = "A [src]. It currently holds [matter]/[max_matter] matter-units." + return 1 + +/obj/item/weapon/construction/proc/checkResource(amount, mob/user) + . = matter >= amount + if(!. && user) + to_chat(user, no_ammo_message) + return . + +/obj/item/weapon/construction/proc/range_check(atom/A, mob/user) + if(!(A in view(7, get_turf(user)))) + to_chat(user, "The \'Out of Range\' light on the [src] blinks red.") + return FALSE + +/obj/item/weapon/construction/proc/prox_check(proximity) + if(!proximity) + return + + +/obj/item/weapon/construction/rcd + name = "rapid-construction-device (RCD)" + desc = "A device used to rapidly build and deconstruct walls and floors." + icon = 'icons/obj/tools.dmi' + icon_state = "rcd" + max_matter = 160 var/mode = 1 var/canRturf = 0 + var/ranged = FALSE var/airlock_type = /obj/machinery/door/airlock var/window_type = /obj/structure/window/fulltile var/advanced_airlock_setting = 1 //Set to 1 if you want more paintjobs available - var/sheetmultiplier = 4 //Controls the amount of matter added for each glass/metal sheet, triple for plasteel - var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal - var/list/conf_access = null var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses. - var/delay_mod = 1 - var/no_ammo_message = "The \'Low Ammo\' light on \ - the RCD blinks yellow." -/obj/item/weapon/rcd/suicide_act(mob/user) +/obj/item/weapon/construction/rcd/suicide_act(mob/user) user.visible_message("[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..") return (BRUTELOSS) -/obj/item/weapon/rcd/verb/toggle_window_type() +/obj/item/weapon/construction/rcd/verb/toggle_window_type() set name = "Toggle Window Type" set category = "Object" set src in usr // What does this do? @@ -64,7 +148,7 @@ RCD to_chat(usr, "You change \the [src]'s window mode to [window_type_name].") -/obj/item/weapon/rcd/verb/change_airlock_access() +/obj/item/weapon/construction/rcd/verb/change_airlock_access() set name = "Change Airlock Access" set category = "Object" set src in usr @@ -79,7 +163,6 @@ RCD var/t1 = text("") - if(use_one_access) t1 += "Restriction Type: At least one access required
" else @@ -114,7 +197,7 @@ RCD popup.open() onclose(usr, "airlock") -/obj/item/weapon/rcd/Topic(href, href_list) +/obj/item/weapon/construction/rcd/Topic(href, href_list) ..() if (usr.stat || usr.restrained()) return @@ -127,7 +210,7 @@ RCD change_airlock_access() -/obj/item/weapon/rcd/proc/toggle_access(acc) +/obj/item/weapon/construction/rcd/proc/toggle_access(acc) if (acc == "all") conf_access = null else if(acc == "one") @@ -145,7 +228,7 @@ RCD if (!conf_access.len) conf_access = null -/obj/item/weapon/rcd/verb/change_airlock_setting() +/obj/item/weapon/construction/rcd/verb/change_airlock_setting() set name = "Change Airlock Setting" set category = "Object" set src in usr @@ -207,59 +290,16 @@ RCD airlock_type = /obj/machinery/door/airlock -/obj/item/weapon/rcd/New() +/obj/item/weapon/construction/rcd/New() ..() - desc = "An RCD. It currently holds [matter]/[max_matter] matter-units." - src.spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) GLOB.rcd_list += src - -/obj/item/weapon/rcd/Destroy() - qdel(spark_system) - spark_system = null +/obj/item/weapon/construction/rcd/Destroy() GLOB.rcd_list -= src . = ..() -/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params) - if(iscyborg(user)) //Make sure cyborgs can't load their RCDs - return - var/loaded = 0 - if(istype(W, /obj/item/weapon/rcd_ammo)) - var/obj/item/weapon/rcd_ammo/R = W - if((matter + R.ammoamt) > max_matter) - to_chat(user, "The RCD can't hold any more matter-units!") - return - qdel(W) - matter += R.ammoamt - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - loaded = 1 - else if(istype(W, /obj/item/stack/sheet/metal) || istype(W, /obj/item/stack/sheet/glass)) - loaded = loadwithsheets(W, sheetmultiplier, user) - else if(istype(W, /obj/item/stack/sheet/plasteel)) - loaded = loadwithsheets(W, plasteelmultiplier*sheetmultiplier, user) //Plasteel is worth 3 times more than glass or metal - if(loaded) - to_chat(user, "The RCD now holds [matter]/[max_matter] matter-units.") - desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." - else - return ..() - -/obj/item/weapon/rcd/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user) - var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD - if(maxsheets > 0) - var/amount_to_use = min(S.amount, maxsheets) - S.use(amount_to_use) - matter += value*amount_to_use - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - to_chat(user, "You insert [amount_to_use] [S.name] sheets into the RCD. ") - return 1 - to_chat(user, "You can't insert any more [S.name] sheets into the RCD!") - return 0 - -/obj/item/weapon/rcd/attack_self(mob/user) - //Change the mode - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) +/obj/item/weapon/construction/rcd/attack_self(mob/user) + ..() switch(mode) if(1) mode = 2 @@ -274,16 +314,14 @@ RCD mode = 1 to_chat(user, "You change RCD's mode to 'Floor & Walls'.") - if(prob(20)) - src.spark_system.start() - -/obj/item/weapon/rcd/proc/activate() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - - -/obj/item/weapon/rcd/afterattack(atom/A, mob/user, proximity) - if(!proximity) +/obj/item/weapon/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with + if((isturf(A) && A.density && mode==RCD_DECONSTRUCT) || (isturf(A) && !A.density) || (istype(A, /obj/machinery/door/airlock) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/grille) || (istype(A, /obj/structure/window) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/girder)) + return TRUE + else return FALSE + +/obj/item/weapon/construction/rcd/afterattack(atom/A, mob/user, proximity) + prox_check() var/list/rcd_results = A.rcd_vals(user, src) if(!rcd_results) return FALSE @@ -295,40 +333,26 @@ RCD playsound(src.loc, 'sound/machines/click.ogg', 50, 1) return TRUE -/obj/item/weapon/rcd/proc/useResource(amount, mob/user) - if(matter < amount) - if(user) - to_chat(user, no_ammo_message) - return 0 - matter -= amount - desc = "An RCD. It currently holds [matter]/[max_matter] matter-units." - return 1 -/obj/item/weapon/rcd/proc/checkResource(amount, mob/user) - . = matter >= amount - if(!. && user) - to_chat(user, no_ammo_message) - return . - -/obj/item/weapon/rcd/proc/detonate_pulse() +/obj/item/weapon/construction/rcd/proc/detonate_pulse() audible_message("[src] begins to vibrate and \ buzz loudly!","[src] begins \ vibrating violently!") // 5 seconds to get rid of it addtimer(CALLBACK(src, .proc/detonate_pulse_explode), 50) -/obj/item/weapon/rcd/proc/detonate_pulse_explode() +/obj/item/weapon/construction/rcd/proc/detonate_pulse_explode() explosion(src, 0, 0, 3, 1, flame_range = 1) qdel(src) -/obj/item/weapon/rcd/borg/New() +/obj/item/weapon/construction/rcd/borg/New() ..() no_ammo_message = "Insufficient charge." desc = "A device used to rapidly build walls and floors." canRturf = 1 -/obj/item/weapon/rcd/borg/useResource(amount, mob/user) +/obj/item/weapon/construction/rcd/borg/useResource(amount, mob/user) if(!iscyborg(user)) return 0 var/mob/living/silicon/robot/borgy = user @@ -341,7 +365,7 @@ RCD to_chat(user, no_ammo_message) return . -/obj/item/weapon/rcd/borg/checkResource(amount, mob/user) +/obj/item/weapon/construction/rcd/borg/checkResource(amount, mob/user) if(!iscyborg(user)) return 0 var/mob/living/silicon/robot/borgy = user @@ -354,10 +378,10 @@ RCD to_chat(user, no_ammo_message) return . -/obj/item/weapon/rcd/loaded +/obj/item/weapon/construction/rcd/loaded matter = 160 -/obj/item/weapon/rcd/combat +/obj/item/weapon/construction/rcd/combat name = "industrial RCD" max_matter = 500 matter = 500 @@ -378,7 +402,188 @@ RCD ammoamt = 160 -/obj/item/weapon/rcd/admin +/obj/item/weapon/construction/rcd/admin name = "admin RCD" max_matter = INFINITY matter = INFINITY + + +// Ranged RCD + + +/obj/item/weapon/construction/rcd/arcd + name = "advanced rapid-construction-device (ARCD)" + desc = "A prototype RCD with ranged capability and extended capacity" + max_matter = 300 + matter = 300 + delay_mod = 0.6 + ranged = TRUE + icon_state = "arcd" + +/obj/item/weapon/construction/rcd/arcd/afterattack(atom/A, mob/user) + range_check(A,user) + if(target_check(A,user)) + user.Beam(A,icon_state="rped_upgrade",time=30) + ..() + + + +// RAPID LIGHTING DEVICE + + + +/obj/item/weapon/construction/rld + name = "rapid-light-device (RLD)" + desc = "A device used to rapidly provide lighting sources to an area." + icon = 'icons/obj/tools.dmi' + icon_state = "rld-5" + matter = 200 + max_matter = 200 + var/mode = LIGHT_MODE + actions_types = list(/datum/action/item_action/pick_color) + + var/wallcost = 10 + var/floorcost = 15 + var/launchcost = 5 + var/deconcost = 10 + + var/walldelay = 10 + var/floordelay = 10 + var/decondelay = 15 + + var/color_choice = null + + +/obj/item/weapon/construction/rld/ui_action_click(mob/user, var/datum/action/A) + if(istype(A, /datum/action/item_action/pick_color)) + color_choice = input(user,"Choose Color") as color + else + ..() + +/obj/item/weapon/construction/rld/update_icon() + icon_state = "rld-[round(matter/35)]" + ..() + + +/obj/item/weapon/construction/rld/attack_self(mob/user) + ..() + switch(mode) + if(REMOVE_MODE) + mode = LIGHT_MODE + to_chat(user, "You change RLD's mode to 'Permanent Light Construction'.") + if(LIGHT_MODE) + mode = GLOW_MODE + to_chat(user, "You change RLD's mode to 'Light Launcher'.") + if(GLOW_MODE) + mode = REMOVE_MODE + to_chat(user, "You change RLD's mode to 'Deconstruct'.") + + +/obj/item/weapon/construction/rld/proc/checkdupes(var/target) + . = list() + var/turf/checking = get_turf(target) + for(var/obj/machinery/light/dupe in checking) + if(istype(dupe, /obj/machinery/light)) + . |= dupe + + +/obj/item/weapon/construction/rld/afterattack(atom/A, mob/user) + range_check(A,user) + var/turf/start = get_turf(src) + switch(mode) + if(REMOVE_MODE) + if(istype(A, /obj/machinery/light/)) + if(checkResource(deconcost, user)) + to_chat(user, "You start deconstructing [A]...") + user.Beam(A,icon_state="nzcrentrs_power",time=15) + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + if(do_after(user, decondelay, target = A)) + if(!useResource(deconcost, user)) + return 0 + activate() + qdel(A) + return TRUE + return FALSE + if(LIGHT_MODE) + if(iswallturf(A)) + var/turf/closed/wall/W = A + if(checkResource(floorcost, user)) + to_chat(user, "You start building a wall light...") + user.Beam(A,icon_state="nzcrentrs_power",time=15) + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + playsound(src.loc, 'sound/effects/light_flicker.ogg', 50, 0) + if(do_after(user, floordelay, target = A)) + if(!istype(W)) + return FALSE + var/list/candidates = list() + var/turf/open/winner = null + var/winning_dist = null + for(var/direction in GLOB.cardinal) + var/turf/C = get_step(W, direction) + var/list/dupes = checkdupes(C) + if(start.CanAtmosPass(C) && !dupes.len) + candidates += C + if(!candidates.len) + to_chat(user, "Valid target not found...") + playsound(src.loc, 'sound/misc/compiler-failure.ogg', 30, 1) + return FALSE + for(var/turf/open/O in candidates) + if(istype(O)) + var/x0 = O.x + var/y0 = O.y + var/contender = cheap_hypotenuse(start.x, start.y, x0, y0) + if(!winner) + winner = O + winning_dist = contender + else + if(contender < winning_dist) // lower is better + winner = O + winning_dist = contender + activate() + if(!useResource(wallcost, user)) + return FALSE + var/light = get_turf(winner) + var/align = get_dir(winner, A) + var/obj/machinery/light/L = new /obj/machinery/light(light) + L.dir = align + L.color = color_choice + L.light_color = L.color + return TRUE + return FALSE + + if(isfloorturf(A)) + var/turf/open/floor/F = A + if(checkResource(floorcost, user)) + to_chat(user, "You start building a floor light...") + user.Beam(A,icon_state="nzcrentrs_power",time=15) + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + playsound(src.loc, 'sound/effects/light_flicker.ogg', 50, 1) + if(do_after(user, floordelay, target = A)) + if(!istype(F)) + return 0 + if(!useResource(floorcost, user)) + return 0 + activate() + var/destination = get_turf(A) + var/obj/machinery/light/floor/FL = new /obj/machinery/light/floor(destination) + FL.color = color_choice + FL.light_color = FL.color + return TRUE + return FALSE + + if(GLOW_MODE) + if(useResource(launchcost, user)) + activate() + to_chat(user, "You fire a glowstick!") + var/obj/item/device/flashlight/glowstick/G = new /obj/item/device/flashlight/glowstick(start) + G.color = color_choice + G.light_color = G.color + G.throw_at(A, 9, 3, user) + G.on = TRUE + G.update_brightness() + return TRUE + return FALSE + +#undef GLOW_MODE +#undef LIGHT_MODE +#undef REMOVE_MODE diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 4270e765a29..040edcd9316 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -139,7 +139,7 @@ ..() for(var/i in 1 to 4) new /obj/item/weapon/rcd_ammo(src) - new /obj/item/weapon/rcd(src) + new /obj/item/weapon/construction/rcd(src) /obj/structure/closet/crate/science name = "science crate" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 4a3ab87770d..9f37710d78d 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -396,7 +396,7 @@ new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1) qdel(src) -/obj/structure/girder/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/obj/structure/girder/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_FLOORWALL) return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 8) @@ -404,7 +404,7 @@ return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 13) return FALSE -/obj/structure/girder/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/obj/structure/girder/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) var/turf/T = get_turf(src) switch(passed_mode) if(RCD_FLOORWALL) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 478b3273b29..2dc159d4828 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -18,7 +18,7 @@ var/grille_type = null var/broken_type = /obj/structure/grille/broken -/obj/structure/grille/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/obj/structure/grille/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5) @@ -26,7 +26,7 @@ return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 10) return FALSE -/obj/structure/grille/rcd_act(mob/user, var/obj/item/weapon/rcd/the_rcd, passed_mode) +/obj/structure/grille/rcd_act(mob/user, var/obj/item/weapon/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_DECONSTRUCT) to_chat(user, "You deconstruct the grille.") diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d5bcb8b60b5..c6c2ef358bc 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -57,13 +57,13 @@ if(rods) debris += new /obj/item/stack/rods(src, rods) -/obj/structure/window/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/obj/structure/window/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5) return FALSE -/obj/structure/window/rcd_act(mob/user, var/obj/item/weapon/rcd/the_rcd) +/obj/structure/window/rcd_act(mob/user, var/obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_DECONSTRUCT) to_chat(user, "You deconstruct the window.") diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 98c28256e92..5f581fba63f 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -200,7 +200,7 @@ /turf/open/floor/acid_melt() ChangeTurf(baseturf) -/turf/open/floor/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/turf/open/floor/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_FLOORWALL) return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 16) @@ -212,7 +212,7 @@ return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 4) return FALSE -/turf/open/floor/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/turf/open/floor/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a wall.") diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm index c1eff8e4154..c15e478c499 100644 --- a/code/game/turfs/simulated/wall/reinf_walls.dm +++ b/code/game/turfs/simulated/wall/reinf_walls.dm @@ -251,12 +251,12 @@ if(prob(30)) dismantle_wall() -/turf/closed/wall/r_wall/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/turf/closed/wall/r_wall/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) if(!the_rcd.canRturf) return FALSE return ..() -/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) if(!the_rcd.canRturf) return FALSE return ..() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 2fd5b4433ff..1aea3d7dbc4 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -258,13 +258,13 @@ /turf/closed/wall/acid_melt() dismantle_wall(1) -/turf/closed/wall/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/turf/closed/wall/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 40, "cost" = 26) return FALSE -/turf/closed/wall/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/turf/closed/wall/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_DECONSTRUCT) to_chat(user, "You deconstruct the wall.") diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 4d96decc5aa..f71e7dbe0f8 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -159,15 +159,16 @@ return 0 -/turf/open/space/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd) +/turf/open/space/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) if(!CanBuildHere()) return FALSE + switch(the_rcd.mode) if(RCD_FLOORWALL) return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2) return FALSE -/turf/open/space/rcd_act(mob/user, obj/item/weapon/rcd/the_rcd, passed_mode) +/turf/open/space/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") diff --git a/code/modules/cargo/exports/tools.dm b/code/modules/cargo/exports/tools.dm index 71b778e931f..683f2c08cc0 100644 --- a/code/modules/cargo/exports/tools.dm +++ b/code/modules/cargo/exports/tools.dm @@ -105,7 +105,7 @@ /datum/export/rcd cost = 100 // 15 metal -> 75 credits, +25 credits for production unit_name = "rapid construction device" - export_types = list(/obj/item/weapon/rcd) + export_types = list(/obj/item/weapon/construction/rcd) /datum/export/rcd_ammo cost = 15 // 1.5 metal, 1 glass -> 12.5 credits, +2.5 credits diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 83a8747252e..b3f74b038fa 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -139,7 +139,7 @@ /obj/item/weapon/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer=1,\ /obj/item/weapon/gun/energy/e_gun=1,\ - /obj/item/weapon/rcd/loaded=1) + /obj/item/weapon/construction/rcd/loaded=1) /datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -158,7 +158,7 @@ /obj/item/weapon/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\ - /obj/item/weapon/rcd/combat=1) + /obj/item/weapon/construction/rcd/combat=1) /datum/outfit/centcom_official diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 6cc485a34c9..d8a0c97f51c 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -67,7 +67,7 @@ obj_integrity = 300 max_integrity = 300 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/pipe_dispenser) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/t_scanner, /obj/item/weapon/construction/rcd, /obj/item/weapon/pipe_dispenser) siemens_coefficient = 0 var/obj/item/clothing/head/helmet/space/hardsuit/helmet actions_types = list(/datum/action/item_action/toggle_helmet) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index e0b92a8fad6..321163d1040 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -493,7 +493,7 @@ icon_state = "coatengineer" item_state = "coatengineer" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/pipe_dispenser) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/construction/rcd, /obj/item/weapon/pipe_dispenser) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering /obj/item/clothing/head/hooded/winterhood/engineering diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index d735d8e534f..cd034a11174 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -538,7 +538,7 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\ /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/weapon/construction/rcd, /obj/item/weapon/tank/jetpack,\ /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ /obj/item/clothing/suit/space/nasavoid, /obj/item/weapon/tank) @@ -673,7 +673,6 @@ Gunshots/explosions/opening doors/less rare audio (done) QDEL_IN(O, 300) - /obj/effect/hallucination/bolts var/list/doors = list() diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index fcbced3210d..ebcd35f6df9 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -20,7 +20,7 @@ dir = direct //This camera eye is visible as a drone, and needs to keep the dir updated ..() -/obj/item/weapon/rcd/internal //Base console's internal RCD. Roundstart consoles are filled, rebuilt cosoles start empty. +/obj/item/weapon/construction/rcd/internal //Base console's internal RCD. Roundstart consoles are filled, rebuilt cosoles start empty. name = "internal RCD" max_matter = 600 //Bigger container and faster speeds due to being specialized and stationary. no_ammo_message = "Internal matter exhausted. Please add additional materials." @@ -30,7 +30,7 @@ name = "base contruction console" desc = "An industrial computer integrated with a camera-assisted rapid construction drone." networks = list("SS13") - var/obj/item/weapon/rcd/internal/RCD //Internal RCD. The computer passes user commands to this in order to avoid massive copypaste. + var/obj/item/weapon/construction/rcd/internal/RCD //Internal RCD. The computer passes user commands to this in order to avoid massive copypaste. circuit = /obj/item/weapon/circuitboard/computer/base_construction off_action = new/datum/action/innate/camera_off/base_construction var/datum/action/innate/aux_base/switch_mode/switch_mode_action = new //Action for switching the RCD's build modes @@ -50,7 +50,7 @@ /obj/machinery/computer/camera_advanced/base_construction/New() ..() - RCD = new /obj/item/weapon/rcd/internal(src) + RCD = new /obj/item/weapon/construction/rcd/internal(src) /obj/machinery/computer/camera_advanced/base_construction/Initialize(mapload) ..() @@ -117,7 +117,7 @@ remote_eye = C.remote_control B = target if(!B.RCD) //The console must always have an RCD. - B.RCD = new /obj/item/weapon/rcd/internal(src) //If the RCD is lost somehow, make a new (empty) one! + B.RCD = new /obj/item/weapon/construction/rcd/internal(src) //If the RCD is lost somehow, make a new (empty) one! /datum/action/innate/aux_base/proc/check_spot() //Check a loction to see if it is inside the aux base at the station. Camera visbility checks omitted so as to not hinder construction. diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 1ac95b26af2..257bf11163c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -287,7 +287,7 @@ basic_modules = list( /obj/item/device/assembly/flash/cyborg, /obj/item/borg/sight/meson, - /obj/item/weapon/rcd/borg, + /obj/item/weapon/construction/rcd/borg, /obj/item/weapon/pipe_dispenser, /obj/item/weapon/extinguisher, /obj/item/weapon/weldingtool/largetank/cyborg, diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 82124c14099..133fad1b4d8 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -649,3 +649,14 @@ force = 5 playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) update() + + +/obj/machinery/light/floor + name = "floor light" + icon = 'icons/obj/lighting.dmi' + base_state = "floor" // base description and icon_state + icon_state = "floor1" + brightness = 4 + layer = 2.5 + light_type = /obj/item/weapon/light/bulb + fitting = "bulb" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 28b5a893a98..9f2fbda1f34 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -581,7 +581,7 @@ id = "rcd" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) - build_path = /obj/item/weapon/rcd + build_path = /obj/item/weapon/construction/rcd category = list("hacked", "Construction") /datum/design/rpd diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 877ef70c66f..c12a6d553fd 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -73,7 +73,7 @@ valid_items += rand(1,max(2,35-probWeight)) valid_items += I - if(ispath(I,/obj/item/weapon/rcd) || ispath(I,/obj/item/weapon/grenade) || ispath(I,/obj/item/device/aicard) || ispath(I,/obj/item/weapon/storage/backpack/holding) || ispath(I,/obj/item/slime_extract) || ispath(I,/obj/item/device/onetankbomb) || ispath(I,/obj/item/device/transfer_valve)) + if(ispath(I,/obj/item/weapon/construction/rcd) || ispath(I,/obj/item/weapon/grenade) || ispath(I,/obj/item/device/aicard) || ispath(I,/obj/item/weapon/storage/backpack/holding) || ispath(I,/obj/item/slime_extract) || ispath(I,/obj/item/device/onetankbomb) || ispath(I,/obj/item/device/transfer_valve)) var/obj/item/tempCheck = I if(initial(tempCheck.icon_state) != null) critical_items += I diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index cd0d3f835ed180967e72f8721137d815ad85c93a..042a8c12cd39727c2c16e14d57cd065e7cf367da 100644 GIT binary patch literal 15004 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%0D}xqw=Tky+i6+l z14|9mzZmi*Wr}QRb$4E4D`fx>=ZCrzA`EmgL$Y{-g9J*Nr`h^lkjVS^7@vI>PfyPV zpUpp&Zms9a9#mS2=1y207O;&K_w z3Dn76Er~_9>45cDH`C`Q4Wz&_DFVWbpB1orTf?7>ODr*N5*k9ocz3OBT;)S(I_ zoX;+h!P)By!yy`vAfVd&DK-ZH98Xe^>FFpN%^d=ee2crzoIEd5u14_+U^}Wo02$1t z0ZF8-7QgArE~zgw|I=zHsjy#7Pc;60~)uHKk#8TLsYxu)=(oYu|^^SmC zI#rtYtLWT9jDBX*&wfv$c^4h1<+LyhE3|AAcB$}m;$bfuPxepS;v9acy{k6!Zl1ReQ9a%Sx7ireLqZ>wBdD<^h$ z1AU(1C$BV!y+Fc{#zpU1aN4Nd4v#4q5;O{I-IvA`e#zusG@mU-FJb~IPjTK=&2_hi zT(~bCIkItbTF1f!l>BxUkU7`H?# zlIB&nPCA9I578mxa{i&Sj`PLCFCe^B`kp%gsFy>5-$ag$3>v=M-vta`-UCpQN*B~K zVnwYbC((kf--d>VJwRtomkOX%L{!4=-o0B`SO@^Y$D;;|o+i&O*5Q0={dqN`bsy#) zGBsZ+nDd!0IAcNX0-+rDh;2S)2^w5~sArl_wtr%q>4ej+AukVM^q+^sZL+ekR0N&6 zCV%|+eS5kwkwExx(pmJ;2d2==eSxc!5D(c-1NQC2=7+Pi9IYA(L3>20L4xo9MBBb} z8?e2Ba98Y4v@KoA-4phSX4+PQK_4*>biZSp9!n0F6&EYCmpudJM7CR?L{#>mawa4a zeD$LM=Bn+~?~HN1ZtOX71KkQ3XVk6NK?+5pi_1q5*%u)|o`EHMS*wnj{{qhbMRj%c z#7*O1Y(+gyv~s4&uX=CKz4>}lK5u~OrKHsk>UlX+S2O2Uzog%e&9l1@$35tY0Xzrm}it&oO|l-#Of+Os_iuP9EenLy%ks<5`Et=X2e_2a;Z2=AlstE+Z;1_pi& zlemlDc~=HPuZ7h#G<=(WIow~2mD~Zq-N=#bx>j1i{rOp`M*ryOs9}}OYx9dmiO+R8 zOhVj$WENIu%gZ6zzCa^64B}_B(*bTVyYFSUd~Tb6ZH-iWi=hqrOl-h2)t}4Cu>0U* z6tnb+-<1i^7i_n`oX10I%3e{QPJ5AoZFLW!D-jg-g*l_p%K2Q5+gxk>5-8H@&$Nc% z^QvASEGQmnSE%bOF*OZDNvUD2pX*YpQqOcvuq@HRF8^Tb>~r9LB@a$p@T>N(VfLjx zB86X?i2!$WRP5=+(r!)L&UPCNR4z84_w=dNQl~9|9MGr@+#(uehYmj8Q!6Si?r5QB zACA9<6&5>%rpbi9ZO_1ZGZ^&NbUn$K-4;X@Q$835xMj*!tI-Dcl;?_&;H? z;fy1J0D%AH<}84yD6Nl=Ps2*GNwX{6q}`eNRe39gq9 z*VyKE5$em+AT_n5PmhHj-D~l8b#+CZ44bfKd&@?gyh)~2t?;#$^&AeMrGA$ENV1fX8dU~&Fk-wgx?4g5BdqGyG zJ2PMM@~{&U68sPPI2%dmMJpD(3?P6&OB+@+ognEqnbw2vyg!CVnHK6cj)~4Ix-H@RK8C+_25vKL8Eqp|VjXI{J zBM9JxBFU?OKHUjGRt=00*yp$2W5hE%E9=kN^;U)xA_l;|hOA_V7a2wUM`?(etT|ZAW#G#MC?joE)Ua>2!rdkuzpE6K|Gh7 zWHi3n0IxecGiHZd+P?lU)bCQ?anpRssfUp@3nNriPWUMBzI{snvR*S%PWB#d2#c$Hzq-nHA{2dJxjk?;Ozhe! zlybS~ZbdkxP=6cGfw9ekU2Fz{^;qSafxCnQs)dy1^*#Lq__*uJmHv-|9T?Rbp%SQ!U`SYC9H+kr%-l*t)>dWui=Iz`CM*Q7DG7)Y}j@#3EPeC4MQHQqm-M9_$HOPk zB+iR?WWP?4JMSG@&%B*tG@v&UL#zp|tdlB}3 znhm;E@(-V+T!x34Gf4QJ6uCELw0-+{D+2y%r_vs0z}IMJ>NgBfSihol~!uMi>k0Jv&`@xH&$#w26O3E(9zSQ+D-Su^eg8_igZ)DLUR5? z_i0#JuJJJO6#JgAaJPB0ZGSTI8rKP%Z6t5_H&TZcfUn;9z_QGV5nK&LcxpZh*Lc$e z{8(u@)il%{5m}-*Vdmt-qm9M^H!^NIw-sbFzd50B@MQ$xxyI?IVrR#ZCLL6#Yvk;ZvPv|EbaY)VH(;xp-2)I(2mL>O*rWUnv?j_6mZBPVBSg`-VRLt zOgmd*!i=|i&PuTX;>#Qj3Xmr&0g-Mzd%Nf73{GS_H_B0IUQ~mc!@0Q$yjFiCD1p<; z@5dFg)~B#<HP8~8FC3%%NjD3dSw|y7>NPqr=xYU7_F7EVIBqjZoI#xU z?1j$VFzuvQ8)O>oG?-KVt;fC+xp3!g} z`Yl(J+-YzdCg*pUs1~rCu+BIp4Z;zC496qOt*O!Di@OSB;@CZ-%qmbv6~>8H)}{S) zs1?cCwi9-870ns_6H#1ccVAq_Yis;&y*yVllbGurdRc@N=w5R^{#Qqdn(pA4oxYn< z$m6-&v23xxnsd`T4TRjKt%>Tzi*Y(ph~FGZ^H&mCzeI7%F~^|J<%yT}l3xn=r_0Q`PQhlwvmxzsP|tLNmQfPn(5=MB9aHd z>0GERFc0zvk6_T%yDuv$aZgu^NWkjqL}R!FdtXy=Y8e{-J<(oF<~L~o?Zx-{GN6E% zPZc~{b>D*}QesjR?7c+g<>etasUl$5&N_o-tDJP?SVH&jQ+Gy^co~a148qx_L&SD8 z9-%@MWU^x*g5SV=&npTCXBS0l6W-WAqdBkdQt!@0zk5en-p;wz z>Da4pA{3T`3zfM(vz9ve#tO_I84AUtv2*UrNaMa2mTlzi5I#eHm8f){KJx(Mq50Bs zU!oA~t%e9r=lNl4Fh7rS?9qd>h!FA6YbnHWiTUdnp{2Q4DzS{+3!PEWe9brrfyjOl zXLkB|pY*~cmHXM=0)SNeAi(WQLvylVFME+{=nLLMZX`m;ofbjV|E9Uas~}XY{W8B2 zc