diff --git a/code/game/objects/items/weapons/RFD.dm b/code/game/objects/items/weapons/RFD.dm index 1cfcd822ba7..57fa9b7fe17 100644 --- a/code/game/objects/items/weapons/RFD.dm +++ b/code/game/objects/items/weapons/RFD.dm @@ -413,3 +413,139 @@ RFD Mining-Class var/mob/living/silicon/robot/R = user if(R.cell) R.cell.use(used_energy) + + +/* +RFD Piping-Class +*/ + +#define STANDARD_PIPE "Standard Pipes" +#define SUPPLY_PIPE "Supply Pipes" +#define SCRUBBER_PIPE "Scrubber Pipes" +#define DEVICES "Devices" + +/obj/item/rfd/piping + name = "\improper Rapid-Fabrication-Device P-Class" + desc = "A RFD, modified to construct pipes and piping accessories." + modes = list(STANDARD_PIPE, SUPPLY_PIPE, SCRUBBER_PIPE, DEVICES) + var/selected_mode = STANDARD_PIPE + var/pipe_examine = "Pipe" // used in the examine proc to see what you're putting down at a glance + var/selected_pipe = 0 // default is standard pipe, used for the new pipe creation + var/build_cost = 1 // this RFD only uses 1 unit of power per pipe, but can be modified if need be in future + var/build_delay = 10 + + // The numbers below refer to the numberized designator for each pipe, which is used in obj/item/pipe's new + // Take a look at code\game\machinery\pipe\construction.dm line 69 for more information. - Geeves + var/list/standard_pipes = list("Pipe" = 0, + "Bent Pipe" = 1, + "Manifold" = 5, + "Manual Valve" = 8, + "4-Way Manifold" = 19, + "Manual T-Valve" = 18, + "Upward Pipe" = 21, + "Downward Pipe" = 22) + + var/list/supply_pipes = list("Pipe" = 29, + "Bent Pipe" = 30, + "Manifold" = 33, + "4-Way Manifold" = 35, + "Upward Pipe" = 37, + "Downward Pipe" = 39) + + var/list/scrubber_pipes = list("Pipe" = 31, + "Bent Pipe" = 32, + "Manifold" = 34, + "4-Way Manifold" = 36, + "Upward Pipe" = 38, + "Downward Pipe" = 40) + + var/list/devices = list("Universal Pipe Adapter" = 28, + "Connector" = 4, + "Unary Vent" = 7, + "Scrubber" = 10, + "Gas Pump" = 9, + "Pressure Regulator" = 15, + "High Power Gas Pump" = 16, + "Gas Filter" = 13, + "Omni Gas Filter" = 27) + +/obj/item/rfd/piping/examine(mob/user) + . = ..() + to_chat(user, FONT_SMALL(SPAN_NOTICE("Change pipe category by Alt clicking, change pipe selection by using in-hand."))) + to_chat(user, SPAN_NOTICE("Selected pipe category: [selected_mode]")) + to_chat(user, SPAN_NOTICE("Selected pipe: [pipe_examine]")) + +/obj/item/rfd/piping/afterattack(atom/A, mob/user, proximity) + if(!proximity) + return + if(istype(get_area(A), /area/shuttle) || istype(get_area(A), /turf/space)) + to_chat(user, SPAN_WARNING("You can't lay pipe here!")) + return FALSE + var/turf/T = get_turf(A) + if(isNotStationLevel(T.z)) + to_chat(user, SPAN_WARNING("You can't lay your pipe on this level!")) + return FALSE + return do_pipe(T, user) + +/obj/item/rfd/piping/proc/do_pipe(var/turf/T, var/mob/user) + if(working) + return FALSE + + if(!useResource(build_cost, user)) + to_chat(user, SPAN_WARNING("The \'Low Ammo\' light on the device blinks yellow.")) + flick("[icon_state]-empty", src) + return FALSE + + playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) + + working = TRUE + to_chat(user, SPAN_NOTICE("You start laying down your pipe...")) + + if(build_delay && !do_after(user, build_delay)) + working = FALSE + return FALSE + + working = FALSE + if(build_delay && !can_use(user, T)) + return FALSE + + new /obj/item/pipe(T, selected_pipe, NORTH) + + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, TRUE) + return TRUE + +/obj/item/rfd/piping/attack_self(mob/user) + playsound(get_turf(src), 'sound/effects/pop.ogg', 50, FALSE) + var/list/pipe_selection = list() + switch(selected_mode) + if(STANDARD_PIPE) + pipe_selection = standard_pipes + if(SUPPLY_PIPE) + pipe_selection = supply_pipes + if(SCRUBBER_PIPE) + pipe_selection = scrubber_pipes + if(DEVICES) + pipe_selection = devices + pipe_examine = input(user, "Choose the pipe you want to deploy.", "Pipe Selection") in pipe_selection + selected_pipe = pipe_selection[pipe_examine] + +/obj/item/rfd/piping/AltClick(mob/user) + selected_mode = input(user, "Choose the category you want to change to.", "Pipe Categories") in modes + switch(selected_mode) + if(STANDARD_PIPE) + pipe_examine = "Pipe" + selected_pipe = 0 + if(SUPPLY_PIPE) + pipe_examine = "Pipe" + selected_pipe = 29 + if(SCRUBBER_PIPE) + pipe_examine = "Pipe" + selected_pipe = 31 + if(DEVICES) + pipe_examine = "Universal Pipe Adapter" + selected_pipe = 28 + +#undef STANDARD_PIPE +#undef SUPPLY_PIPE +#undef SCRUBBER_PIPE +#undef DEVICES 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 6632a825833..a1ede685c09 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -36,6 +36,7 @@ new /obj/item/device/flash(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/accessory/storage/overalls/chief(src) + new /obj/item/rfd/piping(src) /obj/structure/closet/secure_closet/engineering_chief2 name = "chief engineer's attire" @@ -164,3 +165,4 @@ new /obj/item/cartridge/atmos(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/accessory/storage/overalls/engineer(src) + new /obj/item/rfd/piping(src) diff --git a/html/changelogs/geeves-rfd_pp.yml b/html/changelogs/geeves-rfd_pp.yml new file mode 100644 index 00000000000..2e8e245bf23 --- /dev/null +++ b/html/changelogs/geeves-rfd_pp.yml @@ -0,0 +1,7 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Implements a Piping Rapid Fabrication Device, otherwise known as the RFD-P." + - rscadd: "Alt-clicking changes what types of pipes you can select, clicking on it in-hand or pressing Z while it's in your active hand will let you choose a specific pipe." \ No newline at end of file