From ce42a6d95298febde38b0c790c74584cd7b66537 Mon Sep 17 00:00:00 2001 From: Citinited Date: Sun, 29 Apr 2018 18:56:18 +0100 Subject: [PATCH 1/9] RPD refactor Adds rpd_act proc to do stuff instead of doing it all in one big afterattack proc Removes RPD_ALLOWED_HERE flag as it is now redundant --- code/__DEFINES/construction.dm | 8 + code/__DEFINES/flags.dm | 1 - code/game/atoms.dm | 3 + code/game/machinery/pipe/construction.dm | 22 +++ code/game/objects/items/weapons/rpd.dm | 161 +++++++++--------- code/game/objects/objs.dm | 4 + code/game/objects/structures/window.dm | 3 + code/game/turfs/simulated.dm | 1 - code/game/turfs/simulated/shuttle.dm | 4 +- code/game/turfs/simulated/walls.dm | 12 ++ code/game/turfs/space/space.dm | 1 - code/game/turfs/space/transit.dm | 4 +- code/game/turfs/turf.dm | 11 ++ code/game/turfs/unsimulated.dm | 3 + .../recycling/disposal-construction.dm | 13 ++ 15 files changed, 163 insertions(+), 88 deletions(-) diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 9d8ca0b3013..8e967777225 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -52,3 +52,11 @@ #define MAX_STACK_SIZE 50 //maximum amount of cable in a coil #define MAXCOIL 30 + +//rpd stuff + +#define RPD_ATMOS_MODE 1 +#define RPD_DISPOSALS_MODE 2 +#define RPD_ROTATE_MODE 3 +#define RPD_FLIP_MODE 4 +#define RPD_DELETE_MODE 5 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 0ec1567f86d..cd6688d095f 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -101,7 +101,6 @@ //turf-only flags #define NOJAUNT 1 -#define RPD_ALLOWED_HERE 2//By default, RPD is disabled on turfs. //ITEM INVENTORY SLOT BITMASKS #define SLOT_OCLOTHING 1 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 19af319aa20..e8ceb49dc35 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -296,6 +296,9 @@ /atom/proc/emag_act() return +/atom/proc/rpd_act() + return + /atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked) if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...). addtimer(CALLBACK(src, .proc/hitby_react, AM), 2) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 2d5a885aba1..7b67aed66be 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -180,6 +180,16 @@ //update the name and icon of the pipe item depending on the type +/obj/item/pipe/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(our_rpd.mode == RPD_ROTATE_MODE) + rotate() + else if(our_rpd.mode == RPD_FLIP_MODE) + flip() + else if(our_rpd.mode == RPD_DELETE_MODE) + our_rpd.delete_single_pipe(user, src) + else + ..() + /obj/item/pipe/proc/update(var/obj/machinery/atmospherics/make_from) var/list/nlist = list( \ "pipe", \ @@ -650,6 +660,12 @@ to_chat(user, "You have fastened the meter to the pipe.") qdel(src) +/obj/item/pipe_meter/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(our_rpd.mode == RPD_DELETE_MODE) + our_rpd.delete_single_pipe(user, src) + else + ..() + /obj/item/pipe_gsensor name = "gas sensor" desc = "A sensor that can be hooked to a computer" @@ -667,6 +683,12 @@ to_chat(user, "You have fastened the gas sensor.") qdel(src) +/obj/item/pipe_gsensor/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(our_rpd.mode == RPD_DELETE_MODE) + our_rpd.delete_single_pipe(user, src) + else + ..() + #undef PIPE_SIMPLE_STRAIGHT #undef PIPE_SIMPLE_BENT #undef PIPE_HE_STRAIGHT diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index aaaf034b933..b43d7d0a44f 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -14,16 +14,13 @@ #define GAS_SENSOR 98 #define METER 99 #define DISPOSALS_JUNCTION 2 -#define ATMOS_MODE 1 -#define DISPOSALS_MODE 2 -#define ROTATION_MODE 3 -#define FLIP_MODE 4 -#define DELETE_MODE 5 #define ATMOS_PIPING 1 #define SUPPLY_PIPING 2 #define SCRUBBERS_PIPING 3 #define DEVICES 4 #define HEAT_PIPING 5 +#define RPD_COOLDOWN_TIME 4 //How long should we have to wait between dispensing pipes? +#define RPD_WALLBUILD_TIME 40 //How long should drilling into a wall take? /obj/item/rpd name = "rapid pipe dispenser" @@ -44,12 +41,12 @@ var/datum/effect_system/spark_spread/spark_system var/lastused var/iconrotation = 0 //used to orient icons and pipes - var/mode = 1 //Disposals, atmospherics, etc. + var/mode = RPD_ATMOS_MODE //Disposals, atmospherics, etc. var/pipetype = 1//For nanoUI menus var/whatpipe = 0 //What kind of pipe is it? See code/game/machinery/pipe/construction.dm for a list of defines - var/whatdpipe = 0 //What kind of disposals pipe is it? See code/game/machinery/pipe/dispenser.dm for a list of defines - var/spawndelay = 4 //How long should we have to wait between dispensing pipes? - var/walldelay = 40 //How long should drilling into a wall take? + var/whatdpipe = 0 //What kind of disposals pipe is it? + var/spawndelay = RPD_COOLDOWN_TIME + var/walldelay = RPD_WALLBUILD_TIME /obj/item/rpd/New() ..() @@ -59,18 +56,81 @@ //Procs -/obj/item/rpd/proc/Activaterpd(delay) +/obj/item/rpd/proc/Activaterpd(delay) //Maybe makes sparks and activates cooldown if there is a delay. playsound(loc, "sound/machines/click.ogg", 50, 1) if(prob(15)) spark_system.start() if(delay) lastused = world.time -/obj/item/rpd/proc/Manipulatepipes(subject, atmosverb, disposalsverb) - if(istype(subject, /obj/item/pipe)) - call(subject, atmosverb)() - else if(istype(subject, /obj/structure/disposalconstruct/)) - call(subject, disposalsverb)() +/obj/item/rpd/proc/create_atmos_pipe(mob/user, turf/T) //Make an atmos pipe, meter, or gas sensor + var/obj/item/pipe/P + if(whatpipe == GAS_SENSOR) + P = new /obj/item/pipe_gsensor(T) + else if(whatpipe == METER) + P = new /obj/item/pipe_meter(T) + else + P = new(T, pipe_type = whatpipe, dir = user.dir) + if(iconrotation == 0 && P.is_bent_pipe()) //Automatic rotation of dispensed pipes + P.dir = turn(user.dir, 135) + else if(iconrotation == 0 && P.pipe_type in list(CONNECTOR, UNARY_VENT, GAS_SCRUBBER, HE_EXCHANGER, SIMPLE_CAP, SUPPLY_CAP, SCRUBBERS_CAP, INJECTOR, PASSIVE_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction + P.flip() + else if(iconrotation != 0 && P.is_bent_pipe()) //If they selected a rotation and the pipe is bent + P.dir = turn(iconrotation, -45) + else if(iconrotation != 0) + P.dir = iconrotation + to_chat(user, "[src] rapidly dispenses [P]!") + Activaterpd(1) + +/obj/item/rpd/proc/create_disposals_pipe(mob/user, turf/T) //Make a disposals pipe / construct + var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe + P.dir = iconrotation + P.ptype = whatdpipe + if(iconrotation == 0) //Automatic rotation + P.dir = user.dir + if(iconrotation == 0 && whatdpipe != DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though + P.flip() + P.update() + to_chat(user, "[src] rapidly dispenses [P]!") + Activaterpd(1) + +/obj/item/rpd/proc/rotate_all_pipes(mob/user, turf/T) //Rotate all pipes on a turf + for(var/obj/item/pipe/P in T) + P.rotate() + for(var/obj/structure/disposalconstruct/D in T) + D.rotate() + +/obj/item/rpd/proc/flip_all_pipes(mob/user, turf/T) //Flip all pipes on a turf + for(var/obj/item/pipe/P in T) + P.flip() + for(var/obj/structure/disposalconstruct/D in T) + D.flip() + +/obj/item/rpd/proc/delete_all_pipes(mob/user, turf/T) //Delete all pipes on a turf + var/eaten + for(var/obj/item/pipe/P in T) + QDEL_NULL(P) + eaten = TRUE + for(var/obj/item/pipe_gsensor/G in T) + QDEL_NULL(G) + eaten = TRUE + for(var/obj/item/pipe_meter/M in T) + QDEL_NULL(M) + eaten = TRUE + for(var/obj/structure/disposalconstruct/D in T) + if(!D.anchored) + QDEL_NULL(D) + eaten = TRUE + if(eaten) + to_chat(user, "[src] sucks up the loose pipes on [T].") + Activaterpd() + else + to_chat(user, "There were no loose pipes on [T].") + +/obj/item/rpd/proc/delete_single_pipe(mob/user, obj/P) //Delete a single pipe + to_chat(user, "[src] sucks up [P].") + QDEL_NULL(P) + Activaterpd() //Lists of things @@ -175,71 +235,11 @@ var/list/pipemenu = list( return SSnanoui.update_uis(src) -//What the RPD actually does - /obj/item/rpd/afterattack(atom/target, mob/user, proximity) ..() - var/turf/T = get_turf(target) - if(loc != user || ismob(target) || istype(target, /obj/structure/window) || !proximity || world.time < lastused + spawndelay) + if(loc != user || !proximity || world.time < lastused + spawndelay) return - if(!(T.flags & RPD_ALLOWED_HERE)) - to_chat(user, "[src] beeps, \"Unable to interface with [T]. Please try again later.\"") - return - if(mode == ATMOS_MODE) - if(istype(T, /turf/simulated/wall)) //Drilling into walls takes time - playsound(loc, "sound/weapons/circsawhit.ogg", 50, 1) - user.visible_message("[user] starts drilling a hole in [T]...", "You start drilling a hole in [T]...", "You hear a drill.") - if(!do_after(user, walldelay, target = T)) - return - user.visible_message("[user] finishes drilling a hole in [T]!", "You finish drilling a hole in [T]!", "You hear clanking.") - var/obj/item/pipe/P - if(whatpipe == GAS_SENSOR) - P = new /obj/item/pipe_gsensor(T) - else if(whatpipe == METER) - P = new /obj/item/pipe_meter(T) - else - P = new(T, pipe_type = whatpipe, dir = user.dir) - if(iconrotation == 0 && P.is_bent_pipe()) //Automatic rotation of dispensed pipes - P.dir = turn(user.dir, 135) - else if(iconrotation == 0 && P.pipe_type in list(CONNECTOR, UNARY_VENT, GAS_SCRUBBER, HE_EXCHANGER, SIMPLE_CAP, SUPPLY_CAP, SCRUBBERS_CAP, INJECTOR, PASSIVE_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction - P.flip() - else if(iconrotation != 0 && P.is_bent_pipe()) //If they selected a rotation and the pipe is bent - P.dir = turn(iconrotation, -45) - else if(iconrotation != 0) - P.dir = iconrotation - to_chat(user, "[src] rapidly dispenses [P]!") - Activaterpd(1) - else if(mode == DISPOSALS_MODE && !istype(T, /turf/simulated/shuttle)) - if(istype(T, /turf/simulated/wall)) //No disposals pipes on walls - to_chat(user, "That type of pipe won't fit on [T]!") - return - var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe - P.dir = iconrotation - P.ptype = whatdpipe - if(iconrotation == 0) //Automatic rotation - P.dir = user.dir - if(iconrotation == 0 && whatdpipe != DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though - P.flip() - P.update() - to_chat(user, "[src] rapidly dispenses [P]!") - Activaterpd(1) - else if(mode == ROTATION_MODE) - for(var/obj/W in T) - Manipulatepipes(W, /obj/item/pipe/verb/rotate, /obj/structure/disposalconstruct/verb/rotate) - else if(mode == FLIP_MODE) - for(var/obj/W in T) - Manipulatepipes(W, /obj/item/pipe/verb/flip, /obj/structure/disposalconstruct/verb/flip) - else if(mode == DELETE_MODE) - var/eaten - for(var/obj/W in T) - if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor) || istype(W, /obj/structure/disposalconstruct) && !W.anchored) - QDEL_NULL(W) - eaten = TRUE - if(eaten) - to_chat(user, "[src] sucks up the loose pipes on [T].") - Activaterpd() - else - to_chat(user, "There were no loose pipes on [T].") + target.rpd_act(user, src) #undef SIMPLE_CAP #undef SUPPLY_CAP @@ -253,13 +253,10 @@ var/list/pipemenu = list( #undef GAS_SENSOR #undef METER #undef DISPOSALS_JUNCTION -#undef ATMOS_MODE -#undef DISPOSALS_MODE -#undef ROTATION_MODE -#undef FLIP_MODE -#undef DELETE_MODE #undef ATMOS_PIPING #undef SUPPLY_PIPING #undef SCRUBBERS_PIPING #undef DEVICES #undef HEAT_PIPING +#undef RPD_COOLDOWN_TIME +#undef RPD_WALLBUILD_TIME diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index fe9e8444378..352868056f5 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -68,6 +68,10 @@ SSnanoui.close_uis(src) return ..() +/obj/rpd_act(mob/user, obj/item/rpd/our_rpd) + var/turf/T = get_turf(src) //This preserves RPD behaviour on specific turfs + T.rpd_act(user, our_rpd) + /obj/proc/process() set waitfor = 0 processing_objects.Remove(src) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index aebd111ad26..8b42d1f350e 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -79,6 +79,9 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f /obj/structure/window/narsie_act() color = "#7D1919" +/obj/structure/window/rpd_act() + return + /obj/structure/window/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) destroy() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 89c40be8641..61f622c071f 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -4,7 +4,6 @@ var/image/wet_overlay = null var/thermite = 0 - flags = RPD_ALLOWED_HERE oxygen = MOLES_O2STANDARD nitrogen = MOLES_N2STANDARD var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed diff --git a/code/game/turfs/simulated/shuttle.dm b/code/game/turfs/simulated/shuttle.dm index 0c5e6c08f6b..7a781679173 100644 --- a/code/game/turfs/simulated/shuttle.dm +++ b/code/game/turfs/simulated/shuttle.dm @@ -1,7 +1,6 @@ /turf/simulated/shuttle name = "shuttle" icon = 'icons/turf/shuttle.dmi' - flags = null thermal_conductivity = 0.05 heat_capacity = 0 layer = 2 @@ -13,6 +12,9 @@ density = 1 blocks_air = 1 +/turf/simulated/shuttle/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(our_rpd.mode == RPD_DELETE_MODE)//No pipes on shuttles + our_rpd.delete_all_pipes(user, src) /turf/simulated/shuttle/narsie_act() if(prob(20)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index b1cbf84493f..545cf857d6d 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -168,6 +168,18 @@ if(prob(50)) dismantle_wall() +/turf/simulated/wall/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(our_rpd.mode == RPD_ATMOS_MODE) + playsound(src, "sound/weapons/circsawhit.ogg", 50, 1) + user.visible_message("[user] starts drilling a hole in [src]...", "You start drilling a hole in [src]...", "You hear drilling.") + if(!do_after(user, our_rpd.walldelay, target = src)) //Drilling into walls takes time + return + our_rpd.create_atmos_pipe(user, src) + else if(our_rpd.mode == RPD_DISPOSALS_MODE) + return + else + ..() + /turf/simulated/wall/mech_melee_attack(obj/mecha/M) if(M.damtype == "brute") playsound(src, 'sound/weapons/punch4.ogg', 50, 1) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 60c63d0f221..58911d952b4 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -3,7 +3,6 @@ name = "\proper space" icon_state = "0" dynamic_lighting = 0 - flags = RPD_ALLOWED_HERE luminosity = 1 temperature = TCMB diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 611ff1656f3..a1749cf15c9 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -1,5 +1,4 @@ /turf/space/transit - flags = null var/pushdirection // push things that get caught in the transit tile this direction //Overwrite because we dont want people building rods in space. @@ -119,7 +118,8 @@ AM.newtonian_move(dir) - +/turf/space/transit/rpd_act() + return //Overwrite because we dont want people building rods in space. /turf/space/transit/attackby() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f70aee9740f..dda914482b1 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -71,6 +71,17 @@ /turf/ex_act(severity) return 0 +/turf/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(our_rpd.mode == RPD_ATMOS_MODE) + our_rpd.create_atmos_pipe(user, src) + else if(our_rpd.mode == RPD_DISPOSALS_MODE) + our_rpd.create_disposals_pipe(user, src) + else if(our_rpd.mode == RPD_ROTATE_MODE) + our_rpd.rotate_all_pipes(user, src) + else if(our_rpd.mode == RPD_FLIP_MODE) + our_rpd.flip_all_pipes(user, src) + else if(our_rpd.mode == RPD_DELETE_MODE) + our_rpd.delete_all_pipes(user, src) /turf/bullet_act(var/obj/item/projectile/Proj) if(istype(Proj ,/obj/item/projectile/beam/pulse)) diff --git a/code/game/turfs/unsimulated.dm b/code/game/turfs/unsimulated.dm index 5c9509a3d68..35b6c2056e3 100644 --- a/code/game/turfs/unsimulated.dm +++ b/code/game/turfs/unsimulated.dm @@ -7,6 +7,9 @@ /turf/unsimulated/can_lay_cable() return 0 +/turf/unsimulated/rpd_act() + return + /turf/unsimulated/floor/plating/vox icon_state = "plating" name = "plating" diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 3658846a696..137962d040c 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -265,3 +265,16 @@ else to_chat(user, "You need to attach it to the plating first!") return + +/obj/structure/disposalconstruct/rpd_act(mob/user, obj/item/rpd/our_rpd) + if(anchored) + to_chat(user, "[src] is bolted down!") + return + else if(our_rpd.mode == RPD_ROTATE_MODE) + rotate() + else if(our_rpd.mode == RPD_FLIP_MODE) + flip() + else if(our_rpd.mode == RPD_DELETE_MODE) + our_rpd.delete_single_pipe(user, src) + else + ..() From 2ec3c797fdb1b339931d2ce6e9016c5d22c33d6a Mon Sep 17 00:00:00 2001 From: Citinited Date: Thu, 3 May 2018 23:59:43 +0100 Subject: [PATCH 2/9] RPD refactor: part 2 --- code/__DEFINES/construction.dm | 8 - code/__DEFINES/pipes.dm | 69 ++++ code/__HELPERS/global_lists.dm | 7 + code/_globalvars/lists/objects.dm | 4 +- code/datums/pipe_datums.dm | 311 ++++++++++++++++++ code/game/machinery/pipe/construction.dm | 82 ----- code/game/machinery/pipe/pipe_dispenser.dm | 46 +-- code/game/objects/items/weapons/rpd.dm | 147 ++------- code/game/turfs/turf.dm | 2 +- .../recycling/disposal-construction.dm | 13 +- icons/obj/pipes/disposal.dmi | Bin 89359 -> 97824 bytes nano/templates/rpd.tmpl | 109 +++--- paradise.dme | 2 + 13 files changed, 505 insertions(+), 295 deletions(-) create mode 100644 code/__DEFINES/pipes.dm create mode 100644 code/datums/pipe_datums.dm diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 8e967777225..9d8ca0b3013 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -52,11 +52,3 @@ #define MAX_STACK_SIZE 50 //maximum amount of cable in a coil #define MAXCOIL 30 - -//rpd stuff - -#define RPD_ATMOS_MODE 1 -#define RPD_DISPOSALS_MODE 2 -#define RPD_ROTATE_MODE 3 -#define RPD_FLIP_MODE 4 -#define RPD_DELETE_MODE 5 diff --git a/code/__DEFINES/pipes.dm b/code/__DEFINES/pipes.dm new file mode 100644 index 00000000000..cd67811ecdf --- /dev/null +++ b/code/__DEFINES/pipes.dm @@ -0,0 +1,69 @@ +//Atmospherics pipes + +#define PIPE_SIMPLE_STRAIGHT 0 +#define PIPE_SIMPLE_BENT 1 +#define PIPE_HE_STRAIGHT 2 +#define PIPE_HE_BENT 3 +#define PIPE_CONNECTOR 4 +#define PIPE_MANIFOLD 5 +#define PIPE_JUNCTION 6 +#define PIPE_UVENT 7 +#define PIPE_MVALVE 8 +#define PIPE_PUMP 9 +#define PIPE_SCRUBBER 10 +#define PIPE_INSULATED_STRAIGHT 11 +#define PIPE_INSULATED_BENT 12 +#define PIPE_GAS_FILTER 13 +#define PIPE_GAS_MIXER 14 +#define PIPE_PASSIVE_GATE 15 +#define PIPE_VOLUME_PUMP 16 +#define PIPE_HEAT_EXCHANGE 17 +#define PIPE_TVALVE 18 +#define PIPE_MANIFOLD4W 19 +#define PIPE_CAP 20 +#define PIPE_OMNI_MIXER 21 +#define PIPE_OMNI_FILTER 22 +#define PIPE_UNIVERSAL 23 +#define PIPE_SUPPLY_STRAIGHT 24 +#define PIPE_SUPPLY_BENT 25 +#define PIPE_SCRUBBERS_STRAIGHT 26 +#define PIPE_SCRUBBERS_BENT 27 +#define PIPE_SUPPLY_MANIFOLD 28 +#define PIPE_SCRUBBERS_MANIFOLD 29 +#define PIPE_SUPPLY_MANIFOLD4W 30 +#define PIPE_SCRUBBERS_MANIFOLD4W 31 +#define PIPE_SUPPLY_CAP 32 +#define PIPE_SCRUBBERS_CAP 33 +#define PIPE_INJECTOR 34 +#define PIPE_DVALVE 35 +#define PIPE_DP_VENT 36 +#define PIPE_PASV_VENT 37 +#define PIPE_DTVALVE 38 +#define PIPE_CIRCULATOR 39 +#define PIPE_GAS_SENSOR 98 +#define PIPE_METER 99 + +//Disposals pipes + +#define PIPE_DISPOSALS_STRAIGHT 0 +#define PIPE_DISPOSALS_BENT 1 +#define PIPE_DISPOSALS_JUNCTION 2 +#define PIPE_DISPOSALS_Y_JUNCTION 4 +#define PIPE_DISPOSALS_TRUNK 5 +#define PIPE_DISPOSALS_BIN 6 +#define PIPE_DISPOSALS_OUTLET 7 +#define PIPE_DISPOSALS_CHUTE 8 + +//RPD stuff + +#define RPD_ATMOS_MODE 1 +#define RPD_DISPOSALS_MODE 2 +#define RPD_ROTATE_MODE 3 +#define RPD_FLIP_MODE 4 +#define RPD_DELETE_MODE 5 + +#define RPD_ATMOS_PIPING 1 +#define RPD_SUPPLY_PIPING 2 +#define RPD_SCRUBBERS_PIPING 3 +#define RPD_DEVICES 4 +#define RPD_HEAT_PIPING 5 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index d0e1feb3d62..2af41d294db 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -50,6 +50,13 @@ init_subtypes(/datum/crafting_recipe, crafting_recipes) +//RPD stuff + var/list/pipe_list = list() + init_subtypes(/datum/pipes/atmospheric, pipe_list) + init_subtypes(/datum/pipes/disposal, pipe_list) + for(var/I in pipe_list) + var/datum/pipes/P = I + construction_pipe_list += list(list("pipename" = P.pipename, "pipeid" = P.pipeid, "atmosordisposals" = P.pipetype, "category" = P.category, "orientations" = P.orientations, "icon" = P.previewicon, "bendy" = P.bendy)) return 1 /* // Uncomment to debug chemical reaction list. diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 5a025702877..62bc1716c36 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -43,4 +43,6 @@ var/global/list/meteor_list = list() //list of all meteors var/global/list/poi_list = list() //list of points of interest for observe/follow var/global/list/active_jammers = list() // List of active radio jammers -var/global/list/active_diseases = list() //List of Active disease in all mobs; purely for quick referencing. \ No newline at end of file +var/global/list/active_diseases = list() //List of Active disease in all mobs; purely for quick referencing. + +var/global/list/construction_pipe_list = list() //List of all pipe datums diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm new file mode 100644 index 00000000000..95850555a6e --- /dev/null +++ b/code/datums/pipe_datums.dm @@ -0,0 +1,311 @@ +//For use with the RPD (for now). All pipes here are ones that can be dispensed with the RPD + +#define RPD_ATMOS 1 +#define RPD_DISPOSAL 2 + +/datum/pipes + var/pipename //What the pipe is called in the interface + var/pipeid //Use the pipe define for this + var/pipetype //Atmos, disposals etc. + var/category //What category of pipe + var/bendy = FALSE//Is this pipe bendy? + var/orientations //Number of orientations (for interface purposes) + var/previewicon //icon_state of the dispensed pipe (for interface purposes) + +/datum/pipes/atmospheric + pipetype = RPD_ATMOS + category = RPD_ATMOS_PIPING + +/datum/pipes/disposal + pipetype = RPD_DISPOSAL + +//Normal pipes + +/datum/pipes/atmospheric/simple + pipename = "Straight pipe" + pipeid = PIPE_SIMPLE_STRAIGHT + orientations = 2 + previewicon = "simple" + +/datum/pipes/atmospheric/simple/bent + pipename = "Bent pipe" + pipeid = PIPE_SIMPLE_BENT + orientations = 4 + bendy = TRUE + +/datum/pipes/atmospheric/manifold + pipename = "T-manifold" + pipeid = PIPE_MANIFOLD + orientations = 4 + previewicon = "manifold" + +/datum/pipes/atmospheric/manifold4w + pipename = "4-way manifold" + pipeid = PIPE_MANIFOLD4W + orientations = 1 + previewicon = "manifold4w" + +/datum/pipes/atmospheric/cap + pipename = "Pipe cap" + pipeid = PIPE_CAP + orientations = 4 + previewicon = "cap" + +/datum/pipes/atmospheric/valve + pipename = "Manual valve" + pipeid = PIPE_MVALVE + orientations = 2 + previewicon = "mvalve" + +/datum/pipes/atmospheric/valve/digital + pipename = "Digital valve" + pipeid = PIPE_DVALVE + previewicon = "dvalve" + +/datum/pipes/atmospheric/tvalve + pipename = "Manual T-valve" + pipeid = PIPE_TVALVE + orientations = 4 + previewicon = "tvalve" + +/datum/pipes/atmospheric/tvalve/digital + pipename = "Digital T-valve" + pipeid = PIPE_DTVALVE + previewicon = "dtvalve" + +//Supply pipes + + +/datum/pipes/atmospheric/simple/supply + pipename = "Straight supply pipe" + pipeid = PIPE_SUPPLY_STRAIGHT + category = RPD_SUPPLY_PIPING + +/datum/pipes/atmospheric/simple/bent/supply + pipename = "Bent supply pipe" + pipeid = PIPE_SUPPLY_BENT + category = RPD_SUPPLY_PIPING + +/datum/pipes/atmospheric/manifold/supply + pipename = "Supply T-manifold" + pipeid = PIPE_SUPPLY_MANIFOLD + category = RPD_SUPPLY_PIPING + +/datum/pipes/atmospheric/manifold4w/supply + pipename = "4-way supply manifold" + pipeid = PIPE_SUPPLY_MANIFOLD4W + category = RPD_SUPPLY_PIPING + +/datum/pipes/atmospheric/cap/supply + pipename = "Supply pipe cap" + pipeid = PIPE_SUPPLY_CAP + category = RPD_SUPPLY_PIPING + +//Scrubbers pipes + +/datum/pipes/atmospheric/simple/scrubbers + pipename = "Straight scrubbers pipe" + pipeid = PIPE_SCRUBBERS_STRAIGHT + category = RPD_SCRUBBERS_PIPING + +/datum/pipes/atmospheric/simple/bent/scrubbers + pipename = "Bent scrubbers pipe" + pipeid = PIPE_SCRUBBERS_BENT + category = RPD_SCRUBBERS_PIPING + +/datum/pipes/atmospheric/manifold/scrubbers + pipename = "Scrubbers T-manifold" + pipeid = PIPE_SCRUBBERS_MANIFOLD + category = RPD_SCRUBBERS_PIPING + +/datum/pipes/atmospheric/manifold4w/scrubbers + pipename = "4-way scrubbers manifold" + pipeid = PIPE_SCRUBBERS_MANIFOLD4W + category = RPD_SCRUBBERS_PIPING + +/datum/pipes/atmospheric/cap/scrubbers + pipename = "Scrubbers pipe cap" + pipeid = PIPE_SCRUBBERS_CAP + category = RPD_SCRUBBERS_PIPING + +//Devices + +/datum/pipes/atmospheric/upa + pipename = "Universal pipe adapter" + pipeid = PIPE_UNIVERSAL + orientations = 2 + previewicon = "universal" + category = RPD_DEVICES + +/datum/pipes/atmospheric/connector + pipename = "Connector" + pipeid = PIPE_CONNECTOR + orientations = 4 + previewicon = "connector" + category = RPD_DEVICES + +/datum/pipes/atmospheric/unaryvent + pipename = "Unary vent" + pipeid = PIPE_UVENT + orientations = 4 + previewicon = "uvent" + category = RPD_DEVICES + +/datum/pipes/atmospheric/scrubber + pipename = "Scrubber" + pipeid = PIPE_SCRUBBER + orientations = 4 + previewicon = "scrubber" + category = RPD_DEVICES + +/datum/pipes/atmospheric/pump + pipename = "Gas pump" + pipeid = PIPE_PUMP + orientations = 4 + previewicon = "pump" + category = RPD_DEVICES + +/datum/pipes/atmospheric/volume_pump + pipename = "Volume pump" + pipeid = PIPE_VOLUME_PUMP + orientations = 4 + previewicon = "volumepump" + category = RPD_DEVICES + +/datum/pipes/atmospheric/gate + pipename = "Passive gate" + pipeid = PIPE_PASSIVE_GATE + orientations = 4 + previewicon = "passivegate" + category = RPD_DEVICES + +/datum/pipes/atmospheric/filter + pipename = "Gas filter" + pipeid = PIPE_GAS_FILTER + orientations = 4 + previewicon = "filter" + category = RPD_DEVICES + +/datum/pipes/atmospheric/mixer + pipename = "Gas mixer" + pipeid = PIPE_GAS_MIXER + orientations = 4 + previewicon = "mixer" + category = RPD_DEVICES + +/datum/pipes/atmospheric/sensor + pipename = "Gas sensor" + pipeid = PIPE_GAS_SENSOR + orientations = 1 + previewicon = "sensor" + category = RPD_DEVICES + +/datum/pipes/atmospheric/meter + pipename = "Gas meter" + pipeid = PIPE_METER + orientations = 1 + previewicon = "meter" + category = RPD_DEVICES + +/datum/pipes/atmospheric/passive_vent + pipename = "Passive vent" + pipeid = PIPE_PASV_VENT + orientations = 4 + previewicon = "passive vent" + category = RPD_DEVICES + +/datum/pipes/atmospheric/dual_vent_pump + pipename = "Dual-port vent pump" + pipeid = PIPE_DP_VENT + orientations = 2 + previewicon = "dual-port vent" + category = RPD_DEVICES + +/datum/pipes/atmospheric/injector + pipename = "Air injector" + pipeid = PIPE_INJECTOR + orientations = 4 + previewicon = "injector" + category = RPD_DEVICES + +//Heat exchange pipes + +/datum/pipes/atmospheric/he + pipename = "Straight pipe" + pipeid = PIPE_HE_STRAIGHT + orientations = 2 + previewicon = "he" + category = RPD_HEAT_PIPING + +/datum/pipes/atmospheric/he/bent + pipename = "Bent pipe" + pipeid = PIPE_HE_BENT + orientations = 4 + bendy = TRUE + +/datum/pipes/atmospheric/he_junction + pipename = "Junction" + pipeid = PIPE_JUNCTION + orientations = 4 + previewicon = "junction" + category = RPD_HEAT_PIPING + +/datum/pipes/atmospheric/heat_exchanger + pipename = "Heat exchanger" + pipeid = PIPE_HEAT_EXCHANGE + orientations = 4 + previewicon = "heunary" + category = RPD_HEAT_PIPING + +//DISPOSALS PIPES + +/datum/pipes/disposal/straight + pipename = "Straight pipe" + pipeid = PIPE_DISPOSALS_STRAIGHT + orientations = 2 + previewicon = "conpipe-s" + +/datum/pipes/disposal/bent + pipename = "Bent pipe" + pipeid = PIPE_DISPOSALS_BENT + orientations = 4 + previewicon = "conpipe-c" + +/datum/pipes/disposal/junction + pipename = "Junction" + pipeid = PIPE_DISPOSALS_JUNCTION + orientations = 4 + previewicon = "conpipe-j1" + +/datum/pipes/disposal/y_junction + pipename = "Y-junction" + pipeid = PIPE_DISPOSALS_Y_JUNCTION + orientations = 4 + previewicon = "conpipe-y" + +/datum/pipes/disposal/trunk + pipename = "Trunk" + pipeid = PIPE_DISPOSALS_TRUNK + orientations = 4 + previewicon = "conpipe-t" + +/datum/pipes/disposal/bin + pipename = "Bin" + pipeid = PIPE_DISPOSALS_BIN + orientations = 1 + previewicon = "condisposal" + +/datum/pipes/disposal/outlet + pipename = "Outlet" + pipeid = PIPE_DISPOSALS_OUTLET + orientations = 4 + previewicon = "outlet" + +/datum/pipes/disposal/chute + pipename = "Chute" + pipeid = PIPE_DISPOSALS_CHUTE + orientations = 4 + previewicon = "intake" + +#undef RPD_ATMOS +#undef RPD_DISPOSAL diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 7b67aed66be..4c702be5c39 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -1,44 +1,3 @@ -#define PIPE_SIMPLE_STRAIGHT 0 -#define PIPE_SIMPLE_BENT 1 -#define PIPE_HE_STRAIGHT 2 -#define PIPE_HE_BENT 3 -#define PIPE_CONNECTOR 4 -#define PIPE_MANIFOLD 5 -#define PIPE_JUNCTION 6 -#define PIPE_UVENT 7 -#define PIPE_MVALVE 8 -#define PIPE_PUMP 9 -#define PIPE_SCRUBBER 10 -#define PIPE_INSULATED_STRAIGHT 11 -#define PIPE_INSULATED_BENT 12 -#define PIPE_GAS_FILTER 13 -#define PIPE_GAS_MIXER 14 -#define PIPE_PASSIVE_GATE 15 -#define PIPE_VOLUME_PUMP 16 -#define PIPE_HEAT_EXCHANGE 17 -#define PIPE_TVALVE 18 -#define PIPE_MANIFOLD4W 19 -#define PIPE_CAP 20 -#define PIPE_OMNI_MIXER 21 -#define PIPE_OMNI_FILTER 22 -#define PIPE_UNIVERSAL 23 -#define PIPE_SUPPLY_STRAIGHT 24 -#define PIPE_SUPPLY_BENT 25 -#define PIPE_SCRUBBERS_STRAIGHT 26 -#define PIPE_SCRUBBERS_BENT 27 -#define PIPE_SUPPLY_MANIFOLD 28 -#define PIPE_SCRUBBERS_MANIFOLD 29 -#define PIPE_SUPPLY_MANIFOLD4W 30 -#define PIPE_SCRUBBERS_MANIFOLD4W 31 -#define PIPE_SUPPLY_CAP 32 -#define PIPE_SCRUBBERS_CAP 33 -#define PIPE_INJECTOR 34 -#define PIPE_DVALVE 35 -#define PIPE_DP_VENT 36 -#define PIPE_PASV_VENT 37 -#define PIPE_DTVALVE 38 -#define PIPE_CIRCULATOR 39 - /obj/item/pipe name = "pipe" desc = "A pipe" @@ -688,44 +647,3 @@ our_rpd.delete_single_pipe(user, src) else ..() - -#undef PIPE_SIMPLE_STRAIGHT -#undef PIPE_SIMPLE_BENT -#undef PIPE_HE_STRAIGHT -#undef PIPE_HE_BENT -#undef PIPE_CONNECTOR -#undef PIPE_MANIFOLD -#undef PIPE_JUNCTION -#undef PIPE_UVENT -#undef PIPE_MVALVE -#undef PIPE_PUMP -#undef PIPE_SCRUBBER -#undef PIPE_INSULATED_STRAIGHT -#undef PIPE_INSULATED_BENT -#undef PIPE_GAS_FILTER -#undef PIPE_GAS_MIXER -#undef PIPE_PASSIVE_GATE -#undef PIPE_VOLUME_PUMP -#undef PIPE_HEAT_EXCHANGE -#undef PIPE_TVALVE -#undef PIPE_MANIFOLD4W -#undef PIPE_CAP -#undef PIPE_OMNI_MIXER -#undef PIPE_OMNI_FILTER -#undef PIPE_UNIVERSAL -#undef PIPE_SUPPLY_STRAIGHT -#undef PIPE_SUPPLY_BENT -#undef PIPE_SCRUBBERS_STRAIGHT -#undef PIPE_SCRUBBERS_BENT -#undef PIPE_SUPPLY_MANIFOLD -#undef PIPE_SCRUBBERS_MANIFOLD -#undef PIPE_SUPPLY_MANIFOLD4W -#undef PIPE_SCRUBBERS_MANIFOLD4W -#undef PIPE_SUPPLY_CAP -#undef PIPE_SCRUBBERS_CAP -#undef PIPE_INJECTOR -#undef PIPE_DVALVE -#undef PIPE_DP_VENT -#undef PIPE_PASV_VENT -#undef PIPE_DTVALVE -#undef PIPE_CIRCULATOR diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index cb2892722aa..138efcc0f9b 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -10,12 +10,12 @@ /obj/machinery/pipedispenser/attack_hand(mob/user) if(..()) return 1 - + interact(user) - + /obj/machinery/pipedispenser/attack_ghost(mob/user) interact(user) - + /obj/machinery/pipedispenser/interact(mob/user) var/dat = {" Regular pipes:
@@ -163,22 +163,22 @@ /obj/machinery/pipedispenser/disposal/attack_hand(mob/user) if(..()) return - + interact(user) - + /obj/machinery/pipedispenser/disposal/attack_ghost(mob/user) interact(user) - + /obj/machinery/pipedispenser/disposal/interact(mob/user) var/dat = {"Disposal Pipes

Pipe
Bent Pipe
Junction
-Y-Junction
-Trunk
-Bin
-Outlet
-Chute
+Y-Junction
+Trunk
+Bin
+Outlet
+Chute
"} var/datum/browser/popup = new(user, "pipedispenser", name, 400, 400) @@ -194,29 +194,15 @@ if(!wait) var/p_type = text2num(href_list["dmake"]) - var/obj/structure/disposalconstruct/C = new (loc) + var/obj/structure/disposalconstruct/C = new (loc, p_type) 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 + C.density = TRUE if(7) - C.ptype = 8 - C.density = 1 + C.density = TRUE + if(8) + C.density = TRUE C.add_fingerprint(usr) - C.update() wait = 1 spawn(15) wait = 0 \ No newline at end of file diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index b43d7d0a44f..b74ff4ba594 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -2,23 +2,6 @@ Rapid Pipe Dispenser */ -#define SIMPLE_CAP 20 -#define SUPPLY_CAP 32 -#define SCRUBBERS_CAP 33 -#define HE_EXCHANGER 17 -#define CONNECTOR 4 -#define UNARY_VENT 7 -#define PASSIVE_VENT 37 -#define GAS_SCRUBBER 10 -#define INJECTOR 34 -#define GAS_SENSOR 98 -#define METER 99 -#define DISPOSALS_JUNCTION 2 -#define ATMOS_PIPING 1 -#define SUPPLY_PIPING 2 -#define SCRUBBERS_PIPING 3 -#define DEVICES 4 -#define HEAT_PIPING 5 #define RPD_COOLDOWN_TIME 4 //How long should we have to wait between dispensing pipes? #define RPD_WALLBUILD_TIME 40 //How long should drilling into a wall take? @@ -40,11 +23,11 @@ origin_tech = "engineering=4;materials=2" var/datum/effect_system/spark_spread/spark_system var/lastused - var/iconrotation = 0 //used to orient icons and pipes + var/iconrotation = 0 //Used to orient icons and pipes var/mode = RPD_ATMOS_MODE //Disposals, atmospherics, etc. - var/pipetype = 1//For nanoUI menus - var/whatpipe = 0 //What kind of pipe is it? See code/game/machinery/pipe/construction.dm for a list of defines - var/whatdpipe = 0 //What kind of disposals pipe is it? + var/pipetype = RPD_ATMOS_PIPING//For nanoUI menus, this is a subtype of pipes e.g. scrubbers pipes, devices + var/whatpipe = PIPE_SIMPLE_STRAIGHT //What kind of atmos pipe is it? + var/whatdpipe = PIPE_DISPOSALS_STRAIGHT //What kind of disposals pipe is it? var/spawndelay = RPD_COOLDOWN_TIME var/walldelay = RPD_WALLBUILD_TIME @@ -56,7 +39,7 @@ //Procs -/obj/item/rpd/proc/Activaterpd(delay) //Maybe makes sparks and activates cooldown if there is a delay. +/obj/item/rpd/proc/activate_rpd(delay) //Maybe makes sparks and activates cooldown if there is a delay playsound(loc, "sound/machines/click.ogg", 50, 1) if(prob(15)) spark_system.start() @@ -65,34 +48,31 @@ /obj/item/rpd/proc/create_atmos_pipe(mob/user, turf/T) //Make an atmos pipe, meter, or gas sensor var/obj/item/pipe/P - if(whatpipe == GAS_SENSOR) + if(whatpipe == PIPE_GAS_SENSOR) P = new /obj/item/pipe_gsensor(T) - else if(whatpipe == METER) + else if(whatpipe == PIPE_METER) P = new /obj/item/pipe_meter(T) else - P = new(T, pipe_type = whatpipe, dir = user.dir) - if(iconrotation == 0 && P.is_bent_pipe()) //Automatic rotation of dispensed pipes + P = new(T, pipe_type = whatpipe, dir = user.dir) //Make the pipe, BUT WAIT! There's more! + if(!iconrotation && P.is_bent_pipe()) //Automatically rotates dispensed pipes if the user selected auto-rotation P.dir = turn(user.dir, 135) - else if(iconrotation == 0 && P.pipe_type in list(CONNECTOR, UNARY_VENT, GAS_SCRUBBER, HE_EXCHANGER, SIMPLE_CAP, SUPPLY_CAP, SCRUBBERS_CAP, INJECTOR, PASSIVE_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction + else if(!iconrotation && P.pipe_type in list(PIPE_CONNECTOR, PIPE_UVENT, PIPE_SCRUBBER, PIPE_HEAT_EXCHANGE, PIPE_CAP, PIPE_SUPPLY_CAP, PIPE_SCRUBBERS_CAP, PIPE_INJECTOR, PIPE_PASV_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction P.flip() - else if(iconrotation != 0 && P.is_bent_pipe()) //If they selected a rotation and the pipe is bent + else if(iconrotation && P.is_bent_pipe()) //If user selected a rotation and the pipe is bent P.dir = turn(iconrotation, -45) - else if(iconrotation != 0) + else if(iconrotation) //If user selected a rotation P.dir = iconrotation to_chat(user, "[src] rapidly dispenses [P]!") - Activaterpd(1) + activate_rpd(1) /obj/item/rpd/proc/create_disposals_pipe(mob/user, turf/T) //Make a disposals pipe / construct - var/obj/structure/disposalconstruct/P = new(T) //Now we make the pipe - P.dir = iconrotation - P.ptype = whatdpipe - if(iconrotation == 0) //Automatic rotation + var/obj/structure/disposalconstruct/P = new(T, whatdpipe, iconrotation) + if(!iconrotation) //Automatic rotation P.dir = user.dir - if(iconrotation == 0 && whatdpipe != DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though + if(!iconrotation && whatdpipe != PIPE_DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though P.flip() - P.update() to_chat(user, "[src] rapidly dispenses [P]!") - Activaterpd(1) + activate_rpd(1) /obj/item/rpd/proc/rotate_all_pipes(mob/user, turf/T) //Rotate all pipes on a turf for(var/obj/item/pipe/P in T) @@ -123,76 +103,29 @@ eaten = TRUE if(eaten) to_chat(user, "[src] sucks up the loose pipes on [T].") - Activaterpd() + activate_rpd() else to_chat(user, "There were no loose pipes on [T].") /obj/item/rpd/proc/delete_single_pipe(mob/user, obj/P) //Delete a single pipe to_chat(user, "[src] sucks up [P].") QDEL_NULL(P) - Activaterpd() + activate_rpd() //Lists of things -var/list/pipelist = list( //id refers to the pipe_type found in construction.dm, icon refers to the name of the icon state in icons/obj/pipe-item.dmi. Icons are made with the asset-cache - list("pipename" = "Straight pipe", "id" = 0, "category" = ATMOS_PIPING, "orientations" = 2, "icon" = "simple"), - list("pipename" = "Bent pipe", "id" = 1, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "simple", "bendy" = 1), - list("pipename" = "T-manifold", "id" = 5, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "manifold"), - list("pipename" = "4-way manifold", "id" = 19, "category" = ATMOS_PIPING, "orientations" = 1, "icon" = "manifold4w"), - list("pipename" = "Pipe cap", "id" = 20, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "cap"), - list("pipename" = "Manual valve", "id" = 8, "category" = ATMOS_PIPING, "orientations" = 2, "icon" = "mvalve"), - list("pipename" = "Digital valve", "id" = 35, "category" = ATMOS_PIPING, "orientations" = 2, "icon" = "dvalve"), - list("pipename" = "Manual T-valve", "id" = 18, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "tvalve"), - list("pipename" = "Digital T-valve", "id" = 38, "category" = ATMOS_PIPING, "orientations" = 4, "icon" = "dtvalve"), - list("pipename" = "Straight supply pipe", "id" = 24, "category" = SUPPLY_PIPING, "orientations" = 2, "icon" = "simple"), - list("pipename" = "Bent supply pipe", "id" = 25, "category" = SUPPLY_PIPING, "orientations" = 4, "icon" = "simple", "bendy" = 1), - list("pipename" = "Supply T-manifold", "id" = 28, "category" = SUPPLY_PIPING, "orientations" = 4, "icon" = "manifold"), - list("pipename" = "4-way supply manifold", "id" = 30, "category" = SUPPLY_PIPING, "orientations" = 1, "icon" = "manifold4w"), - list("pipename" = "Supply pipe cap", "id" = 32, "category" = SUPPLY_PIPING, "orientations" = 4, "icon" = "cap"), - list("pipename" = "Straight scrubbers pipe", "id" = 26, "category" = SCRUBBERS_PIPING, "orientations" = 2, "icon" = "simple"), - list("pipename" = "Bent scrubbers pipe", "id" = 27, "category" = SCRUBBERS_PIPING, "orientations" = 4, "icon" = "simple", "bendy" = 1), - list("pipename" = "Scrubbers T-manifold", "id" = 29, "category" = SCRUBBERS_PIPING, "orientations" = 4, "icon" = "manifold"), - list("pipename" = "4-way scrubbers manifold", "id" = 31, "category" = SCRUBBERS_PIPING, "orientations" = 1, "icon" = "manifold4w"), - list("pipename" = "Scrubbers pipe cap", "id" = 33, "category" = SCRUBBERS_PIPING, "orientations" = 4, "icon" = "cap"), - list("pipename" = "Universal pipe adapter", "id" = 23, "category" = DEVICES, "orientations" = 2, "icon" = "universal"), - list("pipename" = "Connector", "id" = 4, "category" = DEVICES, "orientations" = 4, "icon" = "connector"), - list("pipename" = "Unary vent", "id" = 7, "category" = DEVICES, "orientations" = 4, "icon" = "uvent"), - list("pipename" = "Scrubber", "id" = 10, "category" = DEVICES, "orientations" = 4, "icon" = "scrubber"), - list("pipename" = "Gas pump", "id" = 9, "category" = DEVICES, "orientations" = 4, "icon" = "pump"), - list("pipename" = "Volume pump", "id" = 16, "category" = DEVICES, "orientations" = 4, "icon" = "volumepump"), - list("pipename" = "Passive gate", "id" = 15, "category" = DEVICES, "orientations" = 4, "icon" = "passivegate"), - list("pipename" = "Gas filter", "id" = 13, "category" = DEVICES, "orientations" = 4, "icon" = "filter"), - list("pipename" = "Gas mixer", "id" = 14, "category" = DEVICES, "orientations" = 4, "icon" = "mixer"), - list("pipename" = "Gas sensor", "id" = 98, "category" = DEVICES, "orientations" = 1, "icon" = "sensor"), - list("pipename" = "Meter", "id" = 99, "category" = DEVICES, "orientations" = 1, "icon" = "meter"), - list("pipename" = "Passive vent", "id" = 37, "category" = DEVICES, "orientations" = 4, "icon" = "passive vent"), - list("pipename" = "Dual-port vent pump", "id" = 36, "category" = DEVICES, "orientations" = 2, "icon" = "dual-port vent"), - list("pipename" = "Air injector", "id" = 34, "category" = DEVICES, "orientations" = 4, "icon" = "injector"), - list("pipename" = "Straight HE pipe", "id" = 2, "category" = HEAT_PIPING, "orientations" = 2, "icon" = "he"), - list("pipename" = "Bent HE pipe", "id" = 3, "category" = HEAT_PIPING, "orientations" = 4, "icon" = "he", "bendy" = 1), - list("pipename" = "Junction", "id" = 6, "category" = HEAT_PIPING, "orientations" = 4, "icon" = "junction"), - list("pipename" = "Heat exchanger", "id" = 17, "category" = HEAT_PIPING, "orientations" = 4, "icon" = "heunary")) -var/list/dpipelist = list( - list("pipename" = "Straight pipe", "id" = 0, "orientations" = 2, "icon" = "conpipe-s"), - list("pipename" = "Bent pipe", "id" = 1, "orientations" = 4, "icon" = "conpipe-c"), - list("pipename" = "Junction", "id" = 2, "orientations" = 4, "icon" = "conpipe-j1"), - list("pipename" = "Y-junction", "id" = 4, "orientations" = 4, "icon" = "conpipe-y"), - list("pipename" = "Trunk", "id" = 5, "orientations" = 4, "icon" = "conpipe-t"), - list("pipename" = "Bin", "id" = 6, "orientations" = 1, "icon" = "condisposal"), - list("pipename" = "Outlet", "id" = 7, "orientations" = 4, "icon" = "outlet"), - list("pipename" = "Chute", "id" = 8, "orientations" = 4, "icon" = "intake")) var/list/mainmenu = list( - list("category" = "Atmospherics", "mode" = 1, "icon" = "wrench"), - list("category" = "Disposals", "mode" = 2, "icon" = "recycle"), - list("category" = "Rotate", "mode" = 3, "icon" = "rotate-right"), - list("category" = "Flip", "mode" = 4, "icon" = "exchange"), - list("category" = "Recycle", "mode" = 5, "icon" = "trash")) + list("category" = "Atmospherics", "mode" = RPD_ATMOS_MODE, "icon" = "wrench"), + list("category" = "Disposals", "mode" = RPD_DISPOSALS_MODE, "icon" = "recycle"), + list("category" = "Rotate", "mode" = RPD_ROTATE_MODE, "icon" = "rotate-right"), + list("category" = "Flip", "mode" = RPD_FLIP_MODE, "icon" = "exchange"), + list("category" = "Recycle", "mode" = RPD_DELETE_MODE, "icon" = "trash")) var/list/pipemenu = list( - list("pipecategory" = "Normal", "pipemode" = 1), - list("pipecategory" = "Supply", "pipemode" = 2), - list("pipecategory" = "Scrubber", "pipemode" = 3), - list("pipecategory" = "Devices", "pipemode" = 4), - list("pipecategory" = "Heat exchange", "pipemode" = 5)) + list("pipecategory" = "Normal", "pipemode" = RPD_ATMOS_PIPING), + list("pipecategory" = "Supply", "pipemode" = RPD_SUPPLY_PIPING), + list("pipecategory" = "Scrubber", "pipemode" = RPD_SCRUBBERS_PIPING), + list("pipecategory" = "Devices", "pipemode" = RPD_DEVICES), + list("pipecategory" = "Heat exchange", "pipemode" = RPD_HEAT_PIPING)) //NanoUI stuff @@ -208,11 +141,10 @@ var/list/pipemenu = list( /obj/item/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state) var/data[0] - data["dpipelist"] = dpipelist data["iconrotation"] = iconrotation data["mainmenu"] = mainmenu data["mode"] = mode - data["pipelist"] = pipelist + data["pipelist"] = construction_pipe_list data["pipemenu"] = pipemenu data["pipetype"] = pipetype data["whatdpipe"] = whatdpipe @@ -239,24 +171,7 @@ var/list/pipemenu = list( ..() if(loc != user || !proximity || world.time < lastused + spawndelay) return - target.rpd_act(user, src) + target.rpd_act(user, src) //Handle RPD effects in separate procs -#undef SIMPLE_CAP -#undef SUPPLY_CAP -#undef SCRUBBERS_CAP -#undef HE_EXCHANGER -#undef CONNECTOR -#undef UNARY_VENT -#undef PASSIVE_VENT -#undef GAS_SCRUBBER -#undef INJECTOR -#undef GAS_SENSOR -#undef METER -#undef DISPOSALS_JUNCTION -#undef ATMOS_PIPING -#undef SUPPLY_PIPING -#undef SCRUBBERS_PIPING -#undef DEVICES -#undef HEAT_PIPING #undef RPD_COOLDOWN_TIME #undef RPD_WALLBUILD_TIME diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index dda914482b1..aa0c8ecdcac 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -71,7 +71,7 @@ /turf/ex_act(severity) return 0 -/turf/rpd_act(mob/user, obj/item/rpd/our_rpd) +/turf/rpd_act(mob/user, obj/item/rpd/our_rpd) //This is the default turf behaviour for the RPD; override it as required if(our_rpd.mode == RPD_ATMOS_MODE) our_rpd.create_atmos_pipe(user, src) else if(our_rpd.mode == RPD_DISPOSALS_MODE) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 137962d040c..ebdd9b5fde4 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -17,6 +17,14 @@ var/dpdir = 0 // directions as disposalpipe var/base_state = "pipe-s" +/obj/structure/disposalconstruct/New(loc, pipe_type, direction) + ..() + if(pipe_type) + ptype = pipe_type + if(dir) + dir = direction + update() + // update iconstate and dpdir due to dir and type /obj/structure/disposalconstruct/proc/update() var/flip = turn(dir, 180) @@ -267,10 +275,7 @@ return /obj/structure/disposalconstruct/rpd_act(mob/user, obj/item/rpd/our_rpd) - if(anchored) - to_chat(user, "[src] is bolted down!") - return - else if(our_rpd.mode == RPD_ROTATE_MODE) + if(our_rpd.mode == RPD_ROTATE_MODE) rotate() else if(our_rpd.mode == RPD_FLIP_MODE) flip() diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/pipes/disposal.dmi index 707a064dd94bc2b14c41ee526a162f8f96dc44ab..cbd0834b435845be68c5b2e691dff3853a1ab604 100644 GIT binary patch literal 97824 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 eaiT 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 MZKzdw$tLW-0Fi&&S^xk5 literal 89359 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

EKCIx6rcET_M~jE6Y93--OwK9O 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

Pipe type:

{{for data.pipemenu}} - {{:helper.link(String(value.pipecategory), null, {"pipetype": Number(value.pipemode)}, data.pipetype == Number(value.pipemode) ? "linkOn" : null)}} + {{:helper.link(String(value.pipecategory), null, {pipetype: Number(value.pipemode)}, data.pipetype == Number(value.pipemode) ? "linkOn" : null)}} {{/for}}

Available pipes:

{{for data.pipelist}} - {{if value.category == data.pipetype}} -
{{:helper.link(String(value.pipename), "arrow-right", {"whatpipe": Number(value.id)}, data.whatpipe == Number(value.id) ? "linkOn" : null)}}
+ {{if value.atmosordisposals == 1 && value.category == data.pipetype}} +
{{:helper.link(String(value.pipename), "arrow-right", {"whatpipe": Number(value.pipeid)}, data.whatpipe == Number(value.pipeid) ? "linkOn" : null)}}
{{/if}} {{/for}}
{{for data.pipelist}} + {{if value.atmosordisposals != 1 || value.pipeid != data.whatpipe || value.orientations == 1}} + {{continue;}} + {{/if}}
- {{if value.id == data.whatpipe && value.orientations != 1}} -
- {{:helper.link("Orient automatically", null, {"iconrotation": 0}, data.iconrotation == 0 ? "linkOn" : null)}} -
- {{/if}} - {{if value.id == data.whatpipe && value.orientations != 1 && value.bendy != 1}} +
+ {{:helper.link("Orient automatically", null, {iconrotation: 0}, data.iconrotation == 0 ? "linkOn" : null)}} +
+ {{if value.bendy}}
- {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - -
-
- {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - -
- {{/if}} - {{if value.id == data.whatpipe && value.orientations == 4 && value.bendy != 1}} -
- {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} - -
-
- {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} - -
- {{/if}} - {{if value.id == data.whatpipe && value.bendy == 1}} -
- {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} + {{:helper.link("", "arrow-right", {iconrotation: 1}, data.iconrotation == 1 ? "linkOn" : null)}}
- {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} + {{:helper.link("", "arrow-right", {iconrotation: 4}, data.iconrotation == 4 ? "linkOn" : null)}}
- {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} + {{:helper.link("", "arrow-right", {iconrotation: 2}, data.iconrotation == 2 ? "linkOn" : null)}}
- {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} + {{:helper.link("", "arrow-right", {iconrotation: 8}, data.iconrotation == 8 ? "linkOn" : null)}}
+ {{else}} +
+ {{:helper.link("", "arrow-right", {iconrotation: 1}, data.iconrotation == 1 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {iconrotation: 4}, data.iconrotation == 4 ? "linkOn" : null)}} + +
+ {{if value.orientations == 4}} +
+ {{:helper.link("", "arrow-right", {iconrotation: 2}, data.iconrotation == 2 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {iconrotation: 8}, data.iconrotation == 8 ? "linkOn" : null)}} + +
+ {{/if}} {{/if}}
{{/for}} {{else data.mode == 2}}

Available pipes:

- {{for data.dpipelist}} -
{{:helper.link(String(value.pipename), "arrow-right", {"whatdpipe": Number(value.id)}, data.whatdpipe == Number(value.id) ? "linkOn" : null)}}
+ {{for data.pipelist}} + {{if value.atmosordisposals == 2}} +
{{:helper.link(String(value.pipename), "arrow-right", {"whatdpipe": Number(value.pipeid)}, data.whatdpipe == Number(value.pipeid) ? "linkOn" : null)}}
+ {{/if}} {{/for}}
- {{for data.dpipelist}} + {{for data.pipelist}} + {{if value.atmosordisposals != 2 || value.pipeid != data.whatdpipe || value.orientations == 1}} + {{continue;}} + {{/if}}
- {{if value.id == data.whatdpipe && value.orientations != 1}} -
- {{:helper.link("Orient automatically", null, {"iconrotation": 0}, data.iconrotation == 0 ? "linkOn" : null)}} -
+
+ {{:helper.link("Orient automatically", null, {iconrotation: 0}, data.iconrotation == 0 ? "linkOn" : null)}} +
+
+ {{:helper.link("", "arrow-right", {iconrotation: 1}, data.iconrotation == 1 ? "linkOn" : null)}} + +
+
+ {{:helper.link("", "arrow-right", {iconrotation: 4}, data.iconrotation == 4 ? "linkOn" : null)}} + +
+ {{if value.orientations == 4}}
- {{:helper.link("", "arrow-right", {"iconrotation": 1}, data.iconrotation == 1 ? "linkOn" : null)}} - -
-
- {{:helper.link("", "arrow-right", {"iconrotation": 4}, data.iconrotation == 4 ? "linkOn" : null)}} - -
- {{/if}} - {{if value.id == data.whatdpipe && value.orientations == 4}} -
- {{:helper.link("", "arrow-right", {"iconrotation": 2}, data.iconrotation == 2 ? "linkOn" : null)}} + {{:helper.link("", "arrow-right", {iconrotation: 2}, data.iconrotation == 2 ? "linkOn" : null)}}
- {{:helper.link("", "arrow-right", {"iconrotation": 8}, data.iconrotation == 8 ? "linkOn" : null)}} + {{:helper.link("", "arrow-right", {iconrotation: 8}, data.iconrotation == 8 ? "linkOn" : null)}}
{{/if}} @@ -109,4 +112,4 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm

Device ready to flip loose pipes...

{{else data.mode == 5}}

Device ready to eat loose pipes...

-{{/if}} +{{/if}} \ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 62908577586..cf4ebc2bb56 100644 --- a/paradise.dme +++ b/paradise.dme @@ -45,6 +45,7 @@ #include "code\__DEFINES\misc.dm" #include "code\__DEFINES\mobs.dm" #include "code\__DEFINES\pda.dm" +#include "code\__DEFINES\pipes.dm" #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\process_scheduler.dm" #include "code\__DEFINES\qdel.dm" @@ -229,6 +230,7 @@ #include "code\datums\mixed.dm" #include "code\datums\mutable_appearance.dm" #include "code\datums\periodic_news.dm" +#include "code\datums\pipe_datums.dm" #include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" #include "code\datums\ruins.dm" From a8527fca1913027c4088785a213bff60444430ad Mon Sep 17 00:00:00 2001 From: Citinited Date: Fri, 4 May 2018 18:01:34 +0100 Subject: [PATCH 3/9] span class formatting --- code/game/turfs/simulated/walls.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 545cf857d6d..a9ece2355e2 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -171,7 +171,7 @@ /turf/simulated/wall/rpd_act(mob/user, obj/item/rpd/our_rpd) if(our_rpd.mode == RPD_ATMOS_MODE) playsound(src, "sound/weapons/circsawhit.ogg", 50, 1) - user.visible_message("[user] starts drilling a hole in [src]...", "You start drilling a hole in [src]...", "You hear drilling.") + user.visible_message("[user] starts drilling a hole in [src]...", "You start drilling a hole in [src]...", "You hear drilling.") if(!do_after(user, our_rpd.walldelay, target = src)) //Drilling into walls takes time return our_rpd.create_atmos_pipe(user, src) From 14ba039d81e2eef99b4e43de67add90ce660b1d5 Mon Sep 17 00:00:00 2001 From: Citinited Date: Wed, 30 May 2018 21:45:23 +0100 Subject: [PATCH 4/9] GLOB --- code/__HELPERS/global_lists.dm | 13 ++++++------- code/_globalvars/lists/objects.dm | 2 -- code/datums/pipe_datums.dm | 2 ++ code/game/objects/items/weapons/rpd.dm | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 2af41d294db..367028b3936 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -49,14 +49,13 @@ whitelisted_species += S.name init_subtypes(/datum/crafting_recipe, crafting_recipes) - -//RPD stuff - var/list/pipe_list = list() - init_subtypes(/datum/pipes/atmospheric, pipe_list) - init_subtypes(/datum/pipes/disposal, pipe_list) - for(var/I in pipe_list) + var/list/temp_pipe_list = list() + init_subtypes(/datum/pipes/atmospheric, temp_pipe_list) + init_subtypes(/datum/pipes/disposal, temp_pipe_list) + for(var/I in temp_pipe_list) var/datum/pipes/P = I - construction_pipe_list += list(list("pipename" = P.pipename, "pipeid" = P.pipeid, "atmosordisposals" = P.pipetype, "category" = P.category, "orientations" = P.orientations, "icon" = P.previewicon, "bendy" = P.bendy)) + GLOB.construction_pipe_list += list(list("pipename" = P.pipename, "pipeid" = P.pipeid, "atmosordisposals" = P.pipetype, "category" = P.category, "orientations" = P.orientations, "icon" = P.previewicon, "bendy" = P.bendy)) + return 1 /* // Uncomment to debug chemical reaction list. diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 62bc1716c36..82d4c113997 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -44,5 +44,3 @@ var/global/list/poi_list = list() //list of points of interest for observe/f var/global/list/active_jammers = list() // List of active radio jammers var/global/list/active_diseases = list() //List of Active disease in all mobs; purely for quick referencing. - -var/global/list/construction_pipe_list = list() //List of all pipe datums diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm index 95850555a6e..14d42510fb6 100644 --- a/code/datums/pipe_datums.dm +++ b/code/datums/pipe_datums.dm @@ -3,6 +3,8 @@ #define RPD_ATMOS 1 #define RPD_DISPOSAL 2 +GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums + /datum/pipes var/pipename //What the pipe is called in the interface var/pipeid //Use the pipe define for this diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index b74ff4ba594..98639030b3a 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -144,7 +144,7 @@ var/list/pipemenu = list( data["iconrotation"] = iconrotation data["mainmenu"] = mainmenu data["mode"] = mode - data["pipelist"] = construction_pipe_list + data["pipelist"] = GLOB.construction_pipe_list data["pipemenu"] = pipemenu data["pipetype"] = pipetype data["whatdpipe"] = whatdpipe From d978472d272c2ea68862ac852427d10c1f717290 Mon Sep 17 00:00:00 2001 From: Citinited Date: Thu, 31 May 2018 22:44:10 +0100 Subject: [PATCH 5/9] RPD nanoUI improvement; misc. code tweaks --- code/__HELPERS/global_lists.dm | 5 +++-- code/datums/pipe_datums.dm | 8 ++++---- code/game/objects/items/weapons/rpd.dm | 24 ++++++++++++++++-------- nano/templates/rpd.tmpl | 10 +++++----- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 367028b3936..c11fd98f433 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -49,11 +49,12 @@ whitelisted_species += S.name init_subtypes(/datum/crafting_recipe, crafting_recipes) + + //RPD pipe list building var/list/temp_pipe_list = list() init_subtypes(/datum/pipes/atmospheric, temp_pipe_list) init_subtypes(/datum/pipes/disposal, temp_pipe_list) - for(var/I in temp_pipe_list) - var/datum/pipes/P = I + for(var/datum/pipes/P in temp_pipe_list) //Yes I know the list(list(...)) thing looks weird, but it allows us to group pipe metadata into ordered lists instead of being one big list GLOB.construction_pipe_list += list(list("pipename" = P.pipename, "pipeid" = P.pipeid, "atmosordisposals" = P.pipetype, "category" = P.category, "orientations" = P.orientations, "icon" = P.previewicon, "bendy" = P.bendy)) return 1 diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm index 14d42510fb6..43cda53a4a9 100644 --- a/code/datums/pipe_datums.dm +++ b/code/datums/pipe_datums.dm @@ -29,11 +29,12 @@ GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums orientations = 2 previewicon = "simple" -/datum/pipes/atmospheric/simple/bent +/datum/pipes/atmospheric/bent //Why is this not atmospheric/simple/bent you ask? Because otherwise the ordering of the pipes in the UI menu gets weird pipename = "Bent pipe" pipeid = PIPE_SIMPLE_BENT orientations = 4 bendy = TRUE + previewicon = "simple" /datum/pipes/atmospheric/manifold pipename = "T-manifold" @@ -77,13 +78,12 @@ GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums //Supply pipes - /datum/pipes/atmospheric/simple/supply pipename = "Straight supply pipe" pipeid = PIPE_SUPPLY_STRAIGHT category = RPD_SUPPLY_PIPING -/datum/pipes/atmospheric/simple/bent/supply +/datum/pipes/atmospheric/bent/supply pipename = "Bent supply pipe" pipeid = PIPE_SUPPLY_BENT category = RPD_SUPPLY_PIPING @@ -110,7 +110,7 @@ GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums pipeid = PIPE_SCRUBBERS_STRAIGHT category = RPD_SCRUBBERS_PIPING -/datum/pipes/atmospheric/simple/bent/scrubbers +/datum/pipes/atmospheric/bent/scrubbers pipename = "Bent scrubbers pipe" pipeid = PIPE_SCRUBBERS_BENT category = RPD_SCRUBBERS_PIPING diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 98639030b3a..5efa881b861 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -37,6 +37,10 @@ spark_system.set_up(1, 0, src) spark_system.attach(src) +/obj/item/rcd/Destroy() + QDEL_NULL(spark_system) + return ..() + //Procs /obj/item/rpd/proc/activate_rpd(delay) //Maybe makes sparks and activates cooldown if there is a delay @@ -53,17 +57,17 @@ else if(whatpipe == PIPE_METER) P = new /obj/item/pipe_meter(T) else - P = new(T, pipe_type = whatpipe, dir = user.dir) //Make the pipe, BUT WAIT! There's more! + P = new(T, whatpipe, iconrotation) //Make the pipe, BUT WAIT! There's more! if(!iconrotation && P.is_bent_pipe()) //Automatically rotates dispensed pipes if the user selected auto-rotation P.dir = turn(user.dir, 135) else if(!iconrotation && P.pipe_type in list(PIPE_CONNECTOR, PIPE_UVENT, PIPE_SCRUBBER, PIPE_HEAT_EXCHANGE, PIPE_CAP, PIPE_SUPPLY_CAP, PIPE_SCRUBBERS_CAP, PIPE_INJECTOR, PIPE_PASV_VENT)) //Some pipes dispense oppositely to what you'd expect, but we don't want to do anything if they selected a direction P.flip() else if(iconrotation && P.is_bent_pipe()) //If user selected a rotation and the pipe is bent P.dir = turn(iconrotation, -45) - else if(iconrotation) //If user selected a rotation - P.dir = iconrotation - to_chat(user, "[src] rapidly dispenses [P]!") - activate_rpd(1) + else if(!iconrotation) //If user selected a rotation + P.dir = user.dir + to_chat(user, "[src] rapidly dispenses [P]!") + activate_rpd(TRUE) /obj/item/rpd/proc/create_disposals_pipe(mob/user, turf/T) //Make a disposals pipe / construct var/obj/structure/disposalconstruct/P = new(T, whatdpipe, iconrotation) @@ -71,8 +75,8 @@ P.dir = user.dir if(!iconrotation && whatdpipe != PIPE_DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though P.flip() - to_chat(user, "[src] rapidly dispenses [P]!") - activate_rpd(1) + to_chat(user, "[src] rapidly dispenses [P]!") + activate_rpd(TRUE) /obj/item/rpd/proc/rotate_all_pipes(mob/user, turf/T) //Rotate all pipes on a turf for(var/obj/item/pipe/P in T) @@ -169,7 +173,11 @@ var/list/pipemenu = list( /obj/item/rpd/afterattack(atom/target, mob/user, proximity) ..() - if(loc != user || !proximity || world.time < lastused + spawndelay) + if(loc != user) + return + if(!proximity) + return + if(world.time < lastused + spawndelay) return target.rpd_act(user, src) //Handle RPD effects in separate procs diff --git a/nano/templates/rpd.tmpl b/nano/templates/rpd.tmpl index 6c380b3c046..f08a5ff02b4 100644 --- a/nano/templates/rpd.tmpl +++ b/nano/templates/rpd.tmpl @@ -4,21 +4,21 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm

Mode:

{{for data.mainmenu}} - {{:helper.link(String(value.category), String(value.icon), {"mode": Number(value.mode)}, data.mode == Number(value.mode) ? "linkOn" : null)}} + {{:helper.link(value.category, value.icon, {mode: value.mode}, data.mode == value.mode ? "linkOn" : null)}} {{/for}}
{{if data.mode == 1}}

Pipe type:

{{for data.pipemenu}} - {{:helper.link(String(value.pipecategory), null, {pipetype: Number(value.pipemode)}, data.pipetype == Number(value.pipemode) ? "linkOn" : null)}} + {{:helper.link(value.pipecategory, null, {pipetype: value.pipemode}, data.pipetype == value.pipemode ? "linkOn" : null)}} {{/for}}

Available pipes:

{{for data.pipelist}} {{if value.atmosordisposals == 1 && value.category == data.pipetype}} -
{{:helper.link(String(value.pipename), "arrow-right", {"whatpipe": Number(value.pipeid)}, data.whatpipe == Number(value.pipeid) ? "linkOn" : null)}}
+
{{:helper.link(value.pipename, "arrow-right", {whatpipe: value.pipeid}, data.whatpipe == value.pipeid ? "linkOn" : null)}}
{{/if}} {{/for}}
@@ -74,12 +74,12 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm
{{for data.pipelist}} {{if value.atmosordisposals == 2}} -
{{:helper.link(String(value.pipename), "arrow-right", {"whatdpipe": Number(value.pipeid)}, data.whatdpipe == Number(value.pipeid) ? "linkOn" : null)}}
+
{{:helper.link(value.pipename, "arrow-right", {whatdpipe: value.pipeid}, data.whatdpipe == value.pipeid ? "linkOn" : null)}}
{{/if}} {{/for}}
{{for data.pipelist}} - {{if value.atmosordisposals != 2 || value.pipeid != data.whatdpipe || value.orientations == 1}} + {{if value.atmosordisposals != 2 || value.pipeid != data.whatdpipe || value.orientations == 1}} {{continue;}} {{/if}}
From 2a310f3539e333fdbd4fc95c8dc2be7410ae0a6e Mon Sep 17 00:00:00 2001 From: Citinited Date: Sat, 2 Jun 2018 08:52:31 +0100 Subject: [PATCH 6/9] Renames a bunch of variables; prevents possible exploit --- code/__HELPERS/global_lists.dm | 2 +- code/datums/pipe_datums.dm | 318 ++++++++++++------------- code/game/objects/items/weapons/rpd.dm | 31 ++- nano/templates/rpd.tmpl | 38 +-- 4 files changed, 201 insertions(+), 188 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index c11fd98f433..2c36a04eab9 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -55,7 +55,7 @@ init_subtypes(/datum/pipes/atmospheric, temp_pipe_list) init_subtypes(/datum/pipes/disposal, temp_pipe_list) for(var/datum/pipes/P in temp_pipe_list) //Yes I know the list(list(...)) thing looks weird, but it allows us to group pipe metadata into ordered lists instead of being one big list - GLOB.construction_pipe_list += list(list("pipename" = P.pipename, "pipeid" = P.pipeid, "atmosordisposals" = P.pipetype, "category" = P.category, "orientations" = P.orientations, "icon" = P.previewicon, "bendy" = P.bendy)) + GLOB.construction_pipe_list += list(list("pipe_name" = P.pipe_name, "pipe_id" = P.pipe_id, "pipe_type" = P.pipe_type, "pipe_category" = P.pipe_category, "orientations" = P.orientations, "pipe_icon" = P.pipe_icon, "bendy" = P.bendy)) return 1 diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm index 43cda53a4a9..ea6d2f016f8 100644 --- a/code/datums/pipe_datums.dm +++ b/code/datums/pipe_datums.dm @@ -6,308 +6,308 @@ GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums /datum/pipes - var/pipename //What the pipe is called in the interface - var/pipeid //Use the pipe define for this - var/pipetype //Atmos, disposals etc. - var/category //What category of pipe + var/pipe_name //What the pipe is called in the interface + var/pipe_id //Use the pipe define for this + var/pipe_type //Atmos, disposals etc. + var/pipe_category //What category of pipe var/bendy = FALSE//Is this pipe bendy? var/orientations //Number of orientations (for interface purposes) - var/previewicon //icon_state of the dispensed pipe (for interface purposes) + var/pipe_icon //icon_state of the dispensed pipe (for interface purposes) /datum/pipes/atmospheric - pipetype = RPD_ATMOS - category = RPD_ATMOS_PIPING + pipe_type = RPD_ATMOS + pipe_category = RPD_ATMOS_PIPING /datum/pipes/disposal - pipetype = RPD_DISPOSAL + pipe_type = RPD_DISPOSAL //Normal pipes /datum/pipes/atmospheric/simple - pipename = "Straight pipe" - pipeid = PIPE_SIMPLE_STRAIGHT + pipe_name = "Straight pipe" + pipe_id = PIPE_SIMPLE_STRAIGHT orientations = 2 - previewicon = "simple" + pipe_icon = "simple" /datum/pipes/atmospheric/bent //Why is this not atmospheric/simple/bent you ask? Because otherwise the ordering of the pipes in the UI menu gets weird - pipename = "Bent pipe" - pipeid = PIPE_SIMPLE_BENT + pipe_name = "Bent pipe" + pipe_id = PIPE_SIMPLE_BENT orientations = 4 bendy = TRUE - previewicon = "simple" + pipe_icon = "simple" /datum/pipes/atmospheric/manifold - pipename = "T-manifold" - pipeid = PIPE_MANIFOLD + pipe_name = "T-manifold" + pipe_id = PIPE_MANIFOLD orientations = 4 - previewicon = "manifold" + pipe_icon = "manifold" /datum/pipes/atmospheric/manifold4w - pipename = "4-way manifold" - pipeid = PIPE_MANIFOLD4W + pipe_name = "4-way manifold" + pipe_id = PIPE_MANIFOLD4W orientations = 1 - previewicon = "manifold4w" + pipe_icon = "manifold4w" /datum/pipes/atmospheric/cap - pipename = "Pipe cap" - pipeid = PIPE_CAP + pipe_name = "Pipe cap" + pipe_id = PIPE_CAP orientations = 4 - previewicon = "cap" + pipe_icon = "cap" /datum/pipes/atmospheric/valve - pipename = "Manual valve" - pipeid = PIPE_MVALVE + pipe_name = "Manual valve" + pipe_id = PIPE_MVALVE orientations = 2 - previewicon = "mvalve" + pipe_icon = "mvalve" /datum/pipes/atmospheric/valve/digital - pipename = "Digital valve" - pipeid = PIPE_DVALVE - previewicon = "dvalve" + pipe_name = "Digital valve" + pipe_id = PIPE_DVALVE + pipe_icon = "dvalve" /datum/pipes/atmospheric/tvalve - pipename = "Manual T-valve" - pipeid = PIPE_TVALVE + pipe_name = "Manual T-valve" + pipe_id = PIPE_TVALVE orientations = 4 - previewicon = "tvalve" + pipe_icon = "tvalve" /datum/pipes/atmospheric/tvalve/digital - pipename = "Digital T-valve" - pipeid = PIPE_DTVALVE - previewicon = "dtvalve" + pipe_name = "Digital T-valve" + pipe_id = PIPE_DTVALVE + pipe_icon = "dtvalve" //Supply pipes /datum/pipes/atmospheric/simple/supply - pipename = "Straight supply pipe" - pipeid = PIPE_SUPPLY_STRAIGHT - category = RPD_SUPPLY_PIPING + pipe_name = "Straight supply pipe" + pipe_id = PIPE_SUPPLY_STRAIGHT + pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/bent/supply - pipename = "Bent supply pipe" - pipeid = PIPE_SUPPLY_BENT - category = RPD_SUPPLY_PIPING + pipe_name = "Bent supply pipe" + pipe_id = PIPE_SUPPLY_BENT + pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/manifold/supply - pipename = "Supply T-manifold" - pipeid = PIPE_SUPPLY_MANIFOLD - category = RPD_SUPPLY_PIPING + pipe_name = "Supply T-manifold" + pipe_id = PIPE_SUPPLY_MANIFOLD + pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/manifold4w/supply - pipename = "4-way supply manifold" - pipeid = PIPE_SUPPLY_MANIFOLD4W - category = RPD_SUPPLY_PIPING + pipe_name = "4-way supply manifold" + pipe_id = PIPE_SUPPLY_MANIFOLD4W + pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/cap/supply - pipename = "Supply pipe cap" - pipeid = PIPE_SUPPLY_CAP - category = RPD_SUPPLY_PIPING + pipe_name = "Supply pipe cap" + pipe_id = PIPE_SUPPLY_CAP + pipe_category = RPD_SUPPLY_PIPING //Scrubbers pipes /datum/pipes/atmospheric/simple/scrubbers - pipename = "Straight scrubbers pipe" - pipeid = PIPE_SCRUBBERS_STRAIGHT - category = RPD_SCRUBBERS_PIPING + pipe_name = "Straight scrubbers pipe" + pipe_id = PIPE_SCRUBBERS_STRAIGHT + pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/bent/scrubbers - pipename = "Bent scrubbers pipe" - pipeid = PIPE_SCRUBBERS_BENT - category = RPD_SCRUBBERS_PIPING + pipe_name = "Bent scrubbers pipe" + pipe_id = PIPE_SCRUBBERS_BENT + pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/manifold/scrubbers - pipename = "Scrubbers T-manifold" - pipeid = PIPE_SCRUBBERS_MANIFOLD - category = RPD_SCRUBBERS_PIPING + pipe_name = "Scrubbers T-manifold" + pipe_id = PIPE_SCRUBBERS_MANIFOLD + pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/manifold4w/scrubbers - pipename = "4-way scrubbers manifold" - pipeid = PIPE_SCRUBBERS_MANIFOLD4W - category = RPD_SCRUBBERS_PIPING + pipe_name = "4-way scrubbers manifold" + pipe_id = PIPE_SCRUBBERS_MANIFOLD4W + pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/cap/scrubbers - pipename = "Scrubbers pipe cap" - pipeid = PIPE_SCRUBBERS_CAP - category = RPD_SCRUBBERS_PIPING + pipe_name = "Scrubbers pipe cap" + pipe_id = PIPE_SCRUBBERS_CAP + pipe_category = RPD_SCRUBBERS_PIPING //Devices /datum/pipes/atmospheric/upa - pipename = "Universal pipe adapter" - pipeid = PIPE_UNIVERSAL + pipe_name = "Universal pipe adapter" + pipe_id = PIPE_UNIVERSAL orientations = 2 - previewicon = "universal" - category = RPD_DEVICES + pipe_icon = "universal" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/connector - pipename = "Connector" - pipeid = PIPE_CONNECTOR + pipe_name = "Connector" + pipe_id = PIPE_CONNECTOR orientations = 4 - previewicon = "connector" - category = RPD_DEVICES + pipe_icon = "connector" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/unaryvent - pipename = "Unary vent" - pipeid = PIPE_UVENT + pipe_name = "Unary vent" + pipe_id = PIPE_UVENT orientations = 4 - previewicon = "uvent" - category = RPD_DEVICES + pipe_icon = "uvent" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/scrubber - pipename = "Scrubber" - pipeid = PIPE_SCRUBBER + pipe_name = "Scrubber" + pipe_id = PIPE_SCRUBBER orientations = 4 - previewicon = "scrubber" - category = RPD_DEVICES + pipe_icon = "scrubber" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/pump - pipename = "Gas pump" - pipeid = PIPE_PUMP + pipe_name = "Gas pump" + pipe_id = PIPE_PUMP orientations = 4 - previewicon = "pump" - category = RPD_DEVICES + pipe_icon = "pump" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/volume_pump - pipename = "Volume pump" - pipeid = PIPE_VOLUME_PUMP + pipe_name = "Volume pump" + pipe_id = PIPE_VOLUME_PUMP orientations = 4 - previewicon = "volumepump" - category = RPD_DEVICES + pipe_icon = "volumepump" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/gate - pipename = "Passive gate" - pipeid = PIPE_PASSIVE_GATE + pipe_name = "Passive gate" + pipe_id = PIPE_PASSIVE_GATE orientations = 4 - previewicon = "passivegate" - category = RPD_DEVICES + pipe_icon = "passivegate" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/filter - pipename = "Gas filter" - pipeid = PIPE_GAS_FILTER + pipe_name = "Gas filter" + pipe_id = PIPE_GAS_FILTER orientations = 4 - previewicon = "filter" - category = RPD_DEVICES + pipe_icon = "filter" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/mixer - pipename = "Gas mixer" - pipeid = PIPE_GAS_MIXER + pipe_name = "Gas mixer" + pipe_id = PIPE_GAS_MIXER orientations = 4 - previewicon = "mixer" - category = RPD_DEVICES + pipe_icon = "mixer" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/sensor - pipename = "Gas sensor" - pipeid = PIPE_GAS_SENSOR + pipe_name = "Gas sensor" + pipe_id = PIPE_GAS_SENSOR orientations = 1 - previewicon = "sensor" - category = RPD_DEVICES + pipe_icon = "sensor" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/meter - pipename = "Gas meter" - pipeid = PIPE_METER + pipe_name = "Gas meter" + pipe_id = PIPE_METER orientations = 1 - previewicon = "meter" - category = RPD_DEVICES + pipe_icon = "meter" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/passive_vent - pipename = "Passive vent" - pipeid = PIPE_PASV_VENT + pipe_name = "Passive vent" + pipe_id = PIPE_PASV_VENT orientations = 4 - previewicon = "passive vent" - category = RPD_DEVICES + pipe_icon = "passive vent" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/dual_vent_pump - pipename = "Dual-port vent pump" - pipeid = PIPE_DP_VENT + pipe_name = "Dual-port vent pump" + pipe_id = PIPE_DP_VENT orientations = 2 - previewicon = "dual-port vent" - category = RPD_DEVICES + pipe_icon = "dual-port vent" + pipe_category = RPD_DEVICES /datum/pipes/atmospheric/injector - pipename = "Air injector" - pipeid = PIPE_INJECTOR + pipe_name = "Air injector" + pipe_id = PIPE_INJECTOR orientations = 4 - previewicon = "injector" - category = RPD_DEVICES + pipe_icon = "injector" + pipe_category = RPD_DEVICES //Heat exchange pipes /datum/pipes/atmospheric/he - pipename = "Straight pipe" - pipeid = PIPE_HE_STRAIGHT + pipe_name = "Straight pipe" + pipe_id = PIPE_HE_STRAIGHT orientations = 2 - previewicon = "he" - category = RPD_HEAT_PIPING + pipe_icon = "he" + pipe_category = RPD_HEAT_PIPING /datum/pipes/atmospheric/he/bent - pipename = "Bent pipe" - pipeid = PIPE_HE_BENT + pipe_name = "Bent pipe" + pipe_id = PIPE_HE_BENT orientations = 4 bendy = TRUE /datum/pipes/atmospheric/he_junction - pipename = "Junction" - pipeid = PIPE_JUNCTION + pipe_name = "Junction" + pipe_id = PIPE_JUNCTION orientations = 4 - previewicon = "junction" - category = RPD_HEAT_PIPING + pipe_icon = "junction" + pipe_category = RPD_HEAT_PIPING /datum/pipes/atmospheric/heat_exchanger - pipename = "Heat exchanger" - pipeid = PIPE_HEAT_EXCHANGE + pipe_name = "Heat exchanger" + pipe_id = PIPE_HEAT_EXCHANGE orientations = 4 - previewicon = "heunary" - category = RPD_HEAT_PIPING + pipe_icon = "heunary" + pipe_category = RPD_HEAT_PIPING //DISPOSALS PIPES /datum/pipes/disposal/straight - pipename = "Straight pipe" - pipeid = PIPE_DISPOSALS_STRAIGHT + pipe_name = "Straight pipe" + pipe_id = PIPE_DISPOSALS_STRAIGHT orientations = 2 - previewicon = "conpipe-s" + pipe_icon = "conpipe-s" /datum/pipes/disposal/bent - pipename = "Bent pipe" - pipeid = PIPE_DISPOSALS_BENT + pipe_name = "Bent pipe" + pipe_id = PIPE_DISPOSALS_BENT orientations = 4 - previewicon = "conpipe-c" + pipe_icon = "conpipe-c" /datum/pipes/disposal/junction - pipename = "Junction" - pipeid = PIPE_DISPOSALS_JUNCTION + pipe_name = "Junction" + pipe_id = PIPE_DISPOSALS_JUNCTION orientations = 4 - previewicon = "conpipe-j1" + pipe_icon = "conpipe-j1" /datum/pipes/disposal/y_junction - pipename = "Y-junction" - pipeid = PIPE_DISPOSALS_Y_JUNCTION + pipe_name = "Y-junction" + pipe_id = PIPE_DISPOSALS_Y_JUNCTION orientations = 4 - previewicon = "conpipe-y" + pipe_icon = "conpipe-y" /datum/pipes/disposal/trunk - pipename = "Trunk" - pipeid = PIPE_DISPOSALS_TRUNK + pipe_name = "Trunk" + pipe_id = PIPE_DISPOSALS_TRUNK orientations = 4 - previewicon = "conpipe-t" + pipe_icon = "conpipe-t" /datum/pipes/disposal/bin - pipename = "Bin" - pipeid = PIPE_DISPOSALS_BIN + pipe_name = "Bin" + pipe_id = PIPE_DISPOSALS_BIN orientations = 1 - previewicon = "condisposal" + pipe_icon = "condisposal" /datum/pipes/disposal/outlet - pipename = "Outlet" - pipeid = PIPE_DISPOSALS_OUTLET + pipe_name = "Outlet" + pipe_id = PIPE_DISPOSALS_OUTLET orientations = 4 - previewicon = "outlet" + pipe_icon = "outlet" /datum/pipes/disposal/chute - pipename = "Chute" - pipeid = PIPE_DISPOSALS_CHUTE + pipe_name = "Chute" + pipe_id = PIPE_DISPOSALS_CHUTE orientations = 4 - previewicon = "intake" + pipe_icon = "intake" #undef RPD_ATMOS #undef RPD_DISPOSAL diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 5efa881b861..c7f16776a57 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -25,7 +25,7 @@ var/lastused var/iconrotation = 0 //Used to orient icons and pipes var/mode = RPD_ATMOS_MODE //Disposals, atmospherics, etc. - var/pipetype = RPD_ATMOS_PIPING//For nanoUI menus, this is a subtype of pipes e.g. scrubbers pipes, devices + var/pipe_category = RPD_ATMOS_PIPING//For nanoUI menus, this is a subtype of pipes e.g. scrubbers pipes, devices var/whatpipe = PIPE_SIMPLE_STRAIGHT //What kind of atmos pipe is it? var/whatdpipe = PIPE_DISPOSALS_STRAIGHT //What kind of disposals pipe is it? var/spawndelay = RPD_COOLDOWN_TIME @@ -50,7 +50,17 @@ if(delay) lastused = world.time +/obj/item/rpd/proc/can_dispense_pipe(var/pipe_id, var/pipe_type) //Returns TRUE if this is a legit pipe we can dispense, otherwise returns FALSE + for(var/list/L in GLOB.construction_pipe_list) + if(pipe_type != L["pipe_type"]) //Sometimes pipes in different categories have the same pipe_id, so we need to skip anything not in the category we want + continue + if(pipe_id == L["pipe_id"]) //Found the pipe, we can dispense it + return TRUE + /obj/item/rpd/proc/create_atmos_pipe(mob/user, turf/T) //Make an atmos pipe, meter, or gas sensor + if(!can_dispense_pipe(whatpipe, RPD_ATMOS_MODE)) + to_chat(user, "[src] beeps, \"ERROR\" ") //Damn dirty apes -- I mean hackers + return var/obj/item/pipe/P if(whatpipe == PIPE_GAS_SENSOR) P = new /obj/item/pipe_gsensor(T) @@ -70,6 +80,9 @@ activate_rpd(TRUE) /obj/item/rpd/proc/create_disposals_pipe(mob/user, turf/T) //Make a disposals pipe / construct + if(!can_dispense_pipe(whatdpipe, RPD_DISPOSALS_MODE)) + to_chat(user, "[src] beeps, \"ERROR\" ") + return var/obj/structure/disposalconstruct/P = new(T, whatdpipe, iconrotation) if(!iconrotation) //Automatic rotation P.dir = user.dir @@ -125,11 +138,11 @@ var/list/mainmenu = list( list("category" = "Flip", "mode" = RPD_FLIP_MODE, "icon" = "exchange"), list("category" = "Recycle", "mode" = RPD_DELETE_MODE, "icon" = "trash")) var/list/pipemenu = list( - list("pipecategory" = "Normal", "pipemode" = RPD_ATMOS_PIPING), - list("pipecategory" = "Supply", "pipemode" = RPD_SUPPLY_PIPING), - list("pipecategory" = "Scrubber", "pipemode" = RPD_SCRUBBERS_PIPING), - list("pipecategory" = "Devices", "pipemode" = RPD_DEVICES), - list("pipecategory" = "Heat exchange", "pipemode" = RPD_HEAT_PIPING)) + list("category" = "Normal", "pipemode" = RPD_ATMOS_PIPING), + list("category" = "Supply", "pipemode" = RPD_SUPPLY_PIPING), + list("category" = "Scrubber", "pipemode" = RPD_SCRUBBERS_PIPING), + list("category" = "Devices", "pipemode" = RPD_DEVICES), + list("category" = "Heat exchange", "pipemode" = RPD_HEAT_PIPING)) //NanoUI stuff @@ -150,7 +163,7 @@ var/list/pipemenu = list( data["mode"] = mode data["pipelist"] = GLOB.construction_pipe_list data["pipemenu"] = pipemenu - data["pipetype"] = pipetype + data["pipe_category"] = pipe_category data["whatdpipe"] = whatdpipe data["whatpipe"] = whatpipe return data @@ -163,8 +176,8 @@ var/list/pipemenu = list( whatpipe = text2num(sanitize(href_list["whatpipe"])) else if(href_list["whatdpipe"]) whatdpipe = text2num(sanitize(href_list["whatdpipe"])) - else if(href_list["pipetype"]) - pipetype = text2num(sanitize(href_list["pipetype"])) + else if(href_list["pipe_category"]) + pipe_category = text2num(sanitize(href_list["pipe_category"])) else if(href_list["mode"]) mode = text2num(sanitize(href_list["mode"])) else diff --git a/nano/templates/rpd.tmpl b/nano/templates/rpd.tmpl index f08a5ff02b4..6a9c2ccb517 100644 --- a/nano/templates/rpd.tmpl +++ b/nano/templates/rpd.tmpl @@ -11,19 +11,19 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm

Pipe type:

{{for data.pipemenu}} - {{:helper.link(value.pipecategory, null, {pipetype: value.pipemode}, data.pipetype == value.pipemode ? "linkOn" : null)}} + {{:helper.link(value.category, null, {pipe_category: value.pipemode}, data.pipe_category == value.pipemode ? "linkOn" : null)}} {{/for}}

Available pipes:

{{for data.pipelist}} - {{if value.atmosordisposals == 1 && value.category == data.pipetype}} -
{{:helper.link(value.pipename, "arrow-right", {whatpipe: value.pipeid}, data.whatpipe == value.pipeid ? "linkOn" : null)}}
+ {{if value.pipe_type == 1 && value.pipe_category == data.pipe_category}} +
{{:helper.link(value.pipe_name, "arrow-right", {whatpipe: value.pipe_id}, data.whatpipe == value.pipe_id ? "linkOn" : null)}}
{{/if}} {{/for}}
{{for data.pipelist}} - {{if value.atmosordisposals != 1 || value.pipeid != data.whatpipe || value.orientations == 1}} + {{if value.pipe_type != 1 || value.pipe_id != data.whatpipe || value.orientations == 1}} {{continue;}} {{/if}}
@@ -33,37 +33,37 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm {{if value.bendy}}
{{:helper.link("", "arrow-right", {iconrotation: 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
{{else}}
{{:helper.link("", "arrow-right", {iconrotation: 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
{{if value.orientations == 4}}
{{:helper.link("", "arrow-right", {iconrotation: 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
{{/if}} {{/if}} @@ -73,13 +73,13 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm

Available pipes:

{{for data.pipelist}} - {{if value.atmosordisposals == 2}} -
{{:helper.link(value.pipename, "arrow-right", {whatdpipe: value.pipeid}, data.whatdpipe == value.pipeid ? "linkOn" : null)}}
+ {{if value.pipe_type == 2}} +
{{:helper.link(value.pipe_name, "arrow-right", {whatdpipe: value.pipe_id}, data.whatdpipe == value.pipe_id ? "linkOn" : null)}}
{{/if}} {{/for}}
{{for data.pipelist}} - {{if value.atmosordisposals != 2 || value.pipeid != data.whatdpipe || value.orientations == 1}} + {{if value.pipe_type != 2 || value.pipe_id != data.whatdpipe || value.orientations == 1}} {{continue;}} {{/if}}
@@ -88,20 +88,20 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm
{{:helper.link("", "arrow-right", {iconrotation: 1}, data.iconrotation == 1 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 4}, data.iconrotation == 4 ? "linkOn" : null)}} - +
{{if value.orientations == 4}}
{{:helper.link("", "arrow-right", {iconrotation: 2}, data.iconrotation == 2 ? "linkOn" : null)}} - +
{{:helper.link("", "arrow-right", {iconrotation: 8}, data.iconrotation == 8 ? "linkOn" : null)}} - +
{{/if}}
From 29c6e6d69bb46e73d8f29693749fe8971cfdc8a1 Mon Sep 17 00:00:00 2001 From: Citinited Date: Mon, 16 Jul 2018 00:23:03 +0100 Subject: [PATCH 7/9] A bunch of refactoring; RPD runtimes if a forbidden pipe is attempted to be dispensed; names loose disposals pipes --- code/__DEFINES/pipes.dm | 23 +- code/__HELPERS/global_lists.dm | 13 +- code/datums/pipe_datums.dm | 216 ++++++++++++------ code/game/machinery/pipe/construction.dm | 88 +------ code/game/machinery/pipe/pipe_dispenser.dm | 29 +-- code/game/objects/items/weapons/rpd.dm | 12 +- code/modules/client/asset_cache.dm | 2 +- .../recycling/disposal-construction.dm | 117 ++++------ code/modules/recycling/disposal.dm | 20 +- code/modules/recycling/sortingmachinery.dm | 2 +- icons/obj/pipes/disposal.dmi | Bin 97824 -> 97836 bytes 11 files changed, 252 insertions(+), 270 deletions(-) diff --git a/code/__DEFINES/pipes.dm b/code/__DEFINES/pipes.dm index cd67811ecdf..c855a5e4260 100644 --- a/code/__DEFINES/pipes.dm +++ b/code/__DEFINES/pipes.dm @@ -45,14 +45,18 @@ //Disposals pipes -#define PIPE_DISPOSALS_STRAIGHT 0 -#define PIPE_DISPOSALS_BENT 1 -#define PIPE_DISPOSALS_JUNCTION 2 -#define PIPE_DISPOSALS_Y_JUNCTION 4 -#define PIPE_DISPOSALS_TRUNK 5 -#define PIPE_DISPOSALS_BIN 6 -#define PIPE_DISPOSALS_OUTLET 7 -#define PIPE_DISPOSALS_CHUTE 8 +#define PIPE_DISPOSALS_STRAIGHT 100 +#define PIPE_DISPOSALS_BENT 101 +#define PIPE_DISPOSALS_JUNCTION_RIGHT 102 +#define PIPE_DISPOSALS_JUNCTION_LEFT 103 +#define PIPE_DISPOSALS_Y_JUNCTION 104 +#define PIPE_DISPOSALS_TRUNK 105 +#define PIPE_DISPOSALS_BIN 106 +#define PIPE_DISPOSALS_OUTLET 107 +#define PIPE_DISPOSALS_CHUTE 108 +#define PIPE_DISPOSALS_SORT_RIGHT 109 +#define PIPE_DISPOSALS_SORT_LEFT 110 + //RPD stuff @@ -67,3 +71,6 @@ #define RPD_SCRUBBERS_PIPING 3 #define RPD_DEVICES 4 #define RPD_HEAT_PIPING 5 + +#define PIPETYPE_ATMOS 1 +#define PIPETYPE_DISPOSAL 2 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 2c36a04eab9..edec5d7c952 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -51,12 +51,17 @@ init_subtypes(/datum/crafting_recipe, crafting_recipes) //RPD pipe list building - var/list/temp_pipe_list = list() - init_subtypes(/datum/pipes/atmospheric, temp_pipe_list) - init_subtypes(/datum/pipes/disposal, temp_pipe_list) +/* var/list/temp_pipe_list = list() + init_subtypes(/datum/pipes/atmospheric/dispensable, temp_pipe_list) + init_subtypes(/datum/pipes/disposal/dispensable, temp_pipe_list) for(var/datum/pipes/P in temp_pipe_list) //Yes I know the list(list(...)) thing looks weird, but it allows us to group pipe metadata into ordered lists instead of being one big list GLOB.construction_pipe_list += list(list("pipe_name" = P.pipe_name, "pipe_id" = P.pipe_id, "pipe_type" = P.pipe_type, "pipe_category" = P.pipe_category, "orientations" = P.orientations, "pipe_icon" = P.pipe_icon, "bendy" = P.bendy)) - +*/ + init_subtypes(/datum/pipes, GLOB.construction_pipe_list) + for(var/D in GLOB.construction_pipe_list) + var/datum/pipes/P = D + if(P.rpd_dispensable) + GLOB.rpd_pipe_list += list(list("pipe_name" = P.pipe_name, "pipe_id" = P.pipe_id, "pipe_type" = P.pipe_type, "pipe_category" = P.pipe_category, "orientations" = P.orientations, "pipe_icon" = P.pipe_icon, "bendy" = P.bendy)) return 1 /* // Uncomment to debug chemical reaction list. diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm index ea6d2f016f8..007f08c6673 100644 --- a/code/datums/pipe_datums.dm +++ b/code/datums/pipe_datums.dm @@ -1,95 +1,99 @@ -//For use with the RPD (for now). All pipes here are ones that can be dispensed with the RPD - -#define RPD_ATMOS 1 -#define RPD_DISPOSAL 2 - GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums +GLOBAL_LIST_EMPTY(rpd_pipe_list) //Some pipes we don't want to be dispensable by the RPD, so we have a separate thing /datum/pipes - var/pipe_name //What the pipe is called in the interface - var/pipe_id //Use the pipe define for this - var/pipe_type //Atmos, disposals etc. - var/pipe_category //What category of pipe - var/bendy = FALSE//Is this pipe bendy? - var/orientations //Number of orientations (for interface purposes) - var/pipe_icon //icon_state of the dispensed pipe (for interface purposes) + var/pipe_name //What the pipe is called in the interface + var/pipe_id //Use the pipe define for this + var/pipe_type //Atmos, disposals etc. + var/pipe_category //What category of pipe + var/bendy = FALSE //Is this pipe bendy? + var/orientations //Number of orientations (for interface purposes) + var/pipe_icon //icon_state of the dispensed pipe (for interface purposes) + var/rpd_dispensable = FALSE /datum/pipes/atmospheric - pipe_type = RPD_ATMOS - pipe_category = RPD_ATMOS_PIPING + pipe_type = PIPETYPE_ATMOS + pipe_category = PIPETYPE_ATMOS /datum/pipes/disposal - pipe_type = RPD_DISPOSAL + pipe_type = PIPETYPE_DISPOSAL //Normal pipes /datum/pipes/atmospheric/simple - pipe_name = "Straight pipe" + pipe_name = "straight pipe" pipe_id = PIPE_SIMPLE_STRAIGHT orientations = 2 pipe_icon = "simple" + rpd_dispensable = TRUE /datum/pipes/atmospheric/bent //Why is this not atmospheric/simple/bent you ask? Because otherwise the ordering of the pipes in the UI menu gets weird - pipe_name = "Bent pipe" + pipe_name = "bent pipe" pipe_id = PIPE_SIMPLE_BENT orientations = 4 bendy = TRUE pipe_icon = "simple" + rpd_dispensable = TRUE /datum/pipes/atmospheric/manifold - pipe_name = "T-manifold" + pipe_name = "t-manifold" pipe_id = PIPE_MANIFOLD orientations = 4 pipe_icon = "manifold" + rpd_dispensable = TRUE /datum/pipes/atmospheric/manifold4w pipe_name = "4-way manifold" pipe_id = PIPE_MANIFOLD4W orientations = 1 pipe_icon = "manifold4w" + rpd_dispensable = TRUE /datum/pipes/atmospheric/cap - pipe_name = "Pipe cap" + pipe_name = "pipe cap" pipe_id = PIPE_CAP orientations = 4 pipe_icon = "cap" + rpd_dispensable = TRUE /datum/pipes/atmospheric/valve - pipe_name = "Manual valve" + pipe_name = "manual valve" pipe_id = PIPE_MVALVE orientations = 2 pipe_icon = "mvalve" + rpd_dispensable = TRUE /datum/pipes/atmospheric/valve/digital - pipe_name = "Digital valve" + pipe_name = "digital valve" pipe_id = PIPE_DVALVE pipe_icon = "dvalve" /datum/pipes/atmospheric/tvalve - pipe_name = "Manual T-valve" + pipe_name = "manual t-valve" pipe_id = PIPE_TVALVE orientations = 4 pipe_icon = "tvalve" + rpd_dispensable = TRUE /datum/pipes/atmospheric/tvalve/digital - pipe_name = "Digital T-valve" + pipe_name = "digital t-valve" pipe_id = PIPE_DTVALVE pipe_icon = "dtvalve" //Supply pipes /datum/pipes/atmospheric/simple/supply - pipe_name = "Straight supply pipe" + pipe_name = "straight supply pipe" pipe_id = PIPE_SUPPLY_STRAIGHT pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/bent/supply - pipe_name = "Bent supply pipe" + pipe_name = "bent supply pipe" pipe_id = PIPE_SUPPLY_BENT pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/manifold/supply - pipe_name = "Supply T-manifold" + pipe_name = "supply T-manifold" pipe_id = PIPE_SUPPLY_MANIFOLD pipe_category = RPD_SUPPLY_PIPING @@ -99,24 +103,24 @@ GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums pipe_category = RPD_SUPPLY_PIPING /datum/pipes/atmospheric/cap/supply - pipe_name = "Supply pipe cap" + pipe_name = "supply pipe cap" pipe_id = PIPE_SUPPLY_CAP pipe_category = RPD_SUPPLY_PIPING //Scrubbers pipes /datum/pipes/atmospheric/simple/scrubbers - pipe_name = "Straight scrubbers pipe" + pipe_name = "straight scrubbers pipe" pipe_id = PIPE_SCRUBBERS_STRAIGHT pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/bent/scrubbers - pipe_name = "Bent scrubbers pipe" + pipe_name = "bent scrubbers pipe" pipe_id = PIPE_SCRUBBERS_BENT pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/manifold/scrubbers - pipe_name = "Scrubbers T-manifold" + pipe_name = "scrubbers t-manifold" pipe_id = PIPE_SCRUBBERS_MANIFOLD pipe_category = RPD_SCRUBBERS_PIPING @@ -126,188 +130,260 @@ GLOBAL_LIST_EMPTY(construction_pipe_list) //List of all pipe datums pipe_category = RPD_SCRUBBERS_PIPING /datum/pipes/atmospheric/cap/scrubbers - pipe_name = "Scrubbers pipe cap" + pipe_name = "scrubbers pipe cap" pipe_id = PIPE_SCRUBBERS_CAP pipe_category = RPD_SCRUBBERS_PIPING //Devices /datum/pipes/atmospheric/upa - pipe_name = "Universal pipe adapter" + pipe_name = "universal pipe adapter" pipe_id = PIPE_UNIVERSAL orientations = 2 pipe_icon = "universal" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/connector - pipe_name = "Connector" + pipe_name = "connector" pipe_id = PIPE_CONNECTOR orientations = 4 pipe_icon = "connector" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/unaryvent - pipe_name = "Unary vent" + pipe_name = "unary vent" pipe_id = PIPE_UVENT orientations = 4 pipe_icon = "uvent" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/scrubber - pipe_name = "Scrubber" + pipe_name = "scrubber" pipe_id = PIPE_SCRUBBER orientations = 4 pipe_icon = "scrubber" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/pump - pipe_name = "Gas pump" + pipe_name = "pump" pipe_id = PIPE_PUMP orientations = 4 pipe_icon = "pump" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/volume_pump - pipe_name = "Volume pump" + pipe_name = "volume pump" pipe_id = PIPE_VOLUME_PUMP orientations = 4 pipe_icon = "volumepump" pipe_category = RPD_DEVICES /datum/pipes/atmospheric/gate - pipe_name = "Passive gate" + pipe_name = "passive gate" pipe_id = PIPE_PASSIVE_GATE orientations = 4 pipe_icon = "passivegate" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/filter - pipe_name = "Gas filter" + pipe_name = "gas filter" pipe_id = PIPE_GAS_FILTER orientations = 4 pipe_icon = "filter" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/mixer - pipe_name = "Gas mixer" + pipe_name = "gas mixer" pipe_id = PIPE_GAS_MIXER orientations = 4 pipe_icon = "mixer" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/sensor - pipe_name = "Gas sensor" + pipe_name = "gas sensor" pipe_id = PIPE_GAS_SENSOR orientations = 1 pipe_icon = "sensor" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/meter - pipe_name = "Gas meter" + pipe_name = "meter" pipe_id = PIPE_METER orientations = 1 pipe_icon = "meter" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/passive_vent - pipe_name = "Passive vent" + pipe_name = "passive vent" pipe_id = PIPE_PASV_VENT orientations = 4 pipe_icon = "passive vent" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/dual_vent_pump - pipe_name = "Dual-port vent pump" + pipe_name = "dual-port vent pump" pipe_id = PIPE_DP_VENT orientations = 2 pipe_icon = "dual-port vent" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE /datum/pipes/atmospheric/injector - pipe_name = "Air injector" + pipe_name = "air injector" pipe_id = PIPE_INJECTOR orientations = 4 pipe_icon = "injector" pipe_category = RPD_DEVICES + rpd_dispensable = TRUE //Heat exchange pipes -/datum/pipes/atmospheric/he - pipe_name = "Straight pipe" +/datum/pipes/atmospheric/simple/he + pipe_name = "straight h/e pipe" pipe_id = PIPE_HE_STRAIGHT - orientations = 2 pipe_icon = "he" pipe_category = RPD_HEAT_PIPING -/datum/pipes/atmospheric/he/bent - pipe_name = "Bent pipe" +/datum/pipes/atmospheric/bent/he + pipe_name = "bent h/e pipe" pipe_id = PIPE_HE_BENT - orientations = 4 + pipe_icon = "he" bendy = TRUE + pipe_category = RPD_HEAT_PIPING /datum/pipes/atmospheric/he_junction - pipe_name = "Junction" + pipe_name = "junction" pipe_id = PIPE_JUNCTION orientations = 4 pipe_icon = "junction" pipe_category = RPD_HEAT_PIPING + rpd_dispensable = TRUE /datum/pipes/atmospheric/heat_exchanger - pipe_name = "Heat exchanger" + pipe_name = "heat exchanger" pipe_id = PIPE_HEAT_EXCHANGE orientations = 4 pipe_icon = "heunary" pipe_category = RPD_HEAT_PIPING + rpd_dispensable = TRUE //DISPOSALS PIPES /datum/pipes/disposal/straight - pipe_name = "Straight pipe" + pipe_name = "straight disposals pipe" pipe_id = PIPE_DISPOSALS_STRAIGHT orientations = 2 - pipe_icon = "conpipe-s" + pipe_icon = "pipe-s" + rpd_dispensable = TRUE /datum/pipes/disposal/bent - pipe_name = "Bent pipe" + pipe_name = "bent disposals pipe" pipe_id = PIPE_DISPOSALS_BENT orientations = 4 - pipe_icon = "conpipe-c" + pipe_icon = "pipe-c" + rpd_dispensable = TRUE /datum/pipes/disposal/junction - pipe_name = "Junction" - pipe_id = PIPE_DISPOSALS_JUNCTION + pipe_name = "disposals junction" + pipe_id = PIPE_DISPOSALS_JUNCTION_RIGHT orientations = 4 - pipe_icon = "conpipe-j1" + pipe_icon = "pipe-j1" + rpd_dispensable = TRUE /datum/pipes/disposal/y_junction - pipe_name = "Y-junction" + pipe_name = "disposals y-junction" pipe_id = PIPE_DISPOSALS_Y_JUNCTION orientations = 4 - pipe_icon = "conpipe-y" + pipe_icon = "pipe-y" + rpd_dispensable = TRUE /datum/pipes/disposal/trunk - pipe_name = "Trunk" + pipe_name = "disposals trunk" pipe_id = PIPE_DISPOSALS_TRUNK orientations = 4 - pipe_icon = "conpipe-t" + pipe_icon = "pipe-t" + rpd_dispensable = TRUE /datum/pipes/disposal/bin - pipe_name = "Bin" + pipe_name = "disposals pipe bin" pipe_id = PIPE_DISPOSALS_BIN orientations = 1 - pipe_icon = "condisposal" + pipe_icon = "disposal" + rpd_dispensable = TRUE /datum/pipes/disposal/outlet - pipe_name = "Outlet" + pipe_name = "disposals outlet" pipe_id = PIPE_DISPOSALS_OUTLET orientations = 4 pipe_icon = "outlet" + rpd_dispensable = TRUE /datum/pipes/disposal/chute - pipe_name = "Chute" + pipe_name = "disposals chute" pipe_id = PIPE_DISPOSALS_CHUTE orientations = 4 pipe_icon = "intake" + rpd_dispensable = TRUE -#undef RPD_ATMOS -#undef RPD_DISPOSAL +//Pipes the RPD can't dispense. Since these don't use an interface, we don't need to bother with setting an icon. We do, however, want to name these for other purposes + +/datum/pipes/atmospheric/circulator + pipe_name = "circulator / heat exchanger" + pipe_id = PIPE_CIRCULATOR + pipe_icon = "circ" + +/datum/pipes/atmospheric/omni_filter + pipe_name = "omni filter" + pipe_id = PIPE_OMNI_FILTER + pipe_icon = "omni_filter" + +/datum/pipes/atmospheric/omni_mixer + pipe_name = "omni mixer" + pipe_id = PIPE_OMNI_MIXER + pipe_icon = "omni_mixer" + +/datum/pipes/atmospheric/insulated + pipe_name = "insulated pipe" + pipe_id = PIPE_INSULATED_STRAIGHT + pipe_icon = "insulated" + +/datum/pipes/atmospheric/insulated/bent + pipe_name = "bent insulated pipe" + pipe_id = PIPE_INSULATED_BENT + +/datum/pipes/disposal/sortjunction + pipe_name = "disposals sort junction" + pipe_id = PIPE_DISPOSALS_SORT_RIGHT + pipe_icon = "pipe-j1s" + +/datum/pipes/disposal/sortjunction/left + pipe_id = PIPE_DISPOSALS_SORT_LEFT + pipe_icon = "pipe-j2s" + +/datum/pipes/disposal/left_junction + pipe_name = "disposals junction" + pipe_id = PIPE_DISPOSALS_JUNCTION_LEFT + pipe_icon = "pipe-j2" + +/proc/get_pipe_name(var/pipe_id, var/pipe_type) + for(var/datum/pipes/P in GLOB.construction_pipe_list) + if(P.pipe_id == pipe_id && P.pipe_type == pipe_type) + return P.pipe_name + return "unknown pipe" + +/proc/get_pipe_icon(var/pipe_id) + for(var/datum/pipes/P in GLOB.construction_pipe_list) + if(P.pipe_id == pipe_id) + return P.pipe_icon + return "unknown icon" diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 4c702be5c39..270b2a99411 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -150,92 +150,8 @@ ..() /obj/item/pipe/proc/update(var/obj/machinery/atmospherics/make_from) - var/list/nlist = list( \ - "pipe", \ - "bent pipe", \ - "h/e pipe", \ - "bent h/e pipe", \ - "connector", \ - "manifold", \ - "junction", \ - "uvent", \ - "mvalve", \ - "pump", \ - "scrubber", \ - "insulated pipe", \ - "bent insulated pipe", \ - "gas filter", \ - "gas mixer", \ - "passive gate", \ - "volume pump", \ - "heat exchanger", \ - "t-valve", \ - "4-way manifold", \ - "pipe cap", \ - "omni mixer", \ - "omni filter", \ - "universal pipe adapter", \ - "supply pipe", \ - "bent supply pipe", \ - "scrubbers pipe", \ - "bent scrubbers pipe", \ - "supply manifold", \ - "scrubbers manifold", \ - "supply 4-way manifold", \ - "scrubbers 4-way manifold", \ - "supply pipe cap", \ - "scrubbers pipe cap", \ - "air injector", \ - "digital valve", \ - "dual-port vent", \ - "passive vent", \ - "digital t-valve", \ - "circulator/heat exchanger", \ - ) - name = nlist[pipe_type+1] + " fitting" - var/list/islist = list( \ - "simple", \ - "simple", \ - "he", \ - "he", \ - "connector", \ - "manifold", \ - "junction", \ - "uvent", \ - "mvalve", \ - "pump", \ - "scrubber", \ - "insulated", \ - "insulated", \ - "filter", \ - "mixer", \ - "passivegate", \ - "volumepump", \ - "heunary", \ - "tvalve", \ - "manifold4w", \ - "cap", \ - "omni_mixer", \ - "omni_filter", \ - "universal", \ - "simple", \ - "simple", \ - "simple", \ - "simple", \ - "manifold", \ - "manifold", \ - "manifold4w", \ - "manifold4w", \ - "cap", \ - "cap", \ - "injector", \ - "dvalve", \ - "dual-port vent", \ - "passive vent", \ - "dtvalve", \ - "circ", \ - ) - icon_state = islist[pipe_type + 1] + name = "[get_pipe_name(pipe_type, PIPETYPE_ATMOS)] fitting" + icon_state = get_pipe_icon(pipe_type) var/obj/machinery/atmospherics/trinary/triP = make_from if(istype(triP) && triP.flipped) icon_state = "m_[icon_state]" diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 138efcc0f9b..43613ef4990 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -171,14 +171,14 @@ /obj/machinery/pipedispenser/disposal/interact(mob/user) var/dat = {"Disposal Pipes

-
Pipe
-Bent Pipe
-Junction
-Y-Junction
-Trunk
-Bin
-Outlet
-Chute
+Pipe
+Bent Pipe
+Junction
+Y-Junction
+Trunk
+Bin
+Outlet
+Chute
"} var/datum/browser/popup = new(user, "pipedispenser", name, 400, 400) @@ -194,15 +194,10 @@ if(!wait) var/p_type = text2num(href_list["dmake"]) - var/obj/structure/disposalconstruct/C = new (loc, p_type) - switch(p_type) - if(6) - C.density = TRUE - if(7) - C.density = TRUE - if(8) - C.density = TRUE + var/obj/structure/disposalconstruct/C = new(loc, p_type) + if(p_type in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE)) + C.density = TRUE C.add_fingerprint(usr) wait = 1 spawn(15) - wait = 0 \ No newline at end of file + wait = 0 diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index c7f16776a57..e130c3ed606 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -37,7 +37,7 @@ spark_system.set_up(1, 0, src) spark_system.attach(src) -/obj/item/rcd/Destroy() +/obj/item/rpd/Destroy() QDEL_NULL(spark_system) return ..() @@ -51,7 +51,7 @@ lastused = world.time /obj/item/rpd/proc/can_dispense_pipe(var/pipe_id, var/pipe_type) //Returns TRUE if this is a legit pipe we can dispense, otherwise returns FALSE - for(var/list/L in GLOB.construction_pipe_list) + for(var/list/L in GLOB.rpd_pipe_list) if(pipe_type != L["pipe_type"]) //Sometimes pipes in different categories have the same pipe_id, so we need to skip anything not in the category we want continue if(pipe_id == L["pipe_id"]) //Found the pipe, we can dispense it @@ -59,7 +59,7 @@ /obj/item/rpd/proc/create_atmos_pipe(mob/user, turf/T) //Make an atmos pipe, meter, or gas sensor if(!can_dispense_pipe(whatpipe, RPD_ATMOS_MODE)) - to_chat(user, "[src] beeps, \"ERROR\" ") //Damn dirty apes -- I mean hackers + log_runtime(EXCEPTION("Failed to spawn [get_pipe_name(whatpipe, PIPETYPE_ATMOS)] - possible tampering detected")) //Damn dirty apes -- I mean hackers return var/obj/item/pipe/P if(whatpipe == PIPE_GAS_SENSOR) @@ -81,12 +81,12 @@ /obj/item/rpd/proc/create_disposals_pipe(mob/user, turf/T) //Make a disposals pipe / construct if(!can_dispense_pipe(whatdpipe, RPD_DISPOSALS_MODE)) - to_chat(user, "[src] beeps, \"ERROR\" ") + log_runtime(EXCEPTION("Failed to spawn [get_pipe_name(whatdpipe, PIPETYPE_DISPOSAL)] - possible tampering detected")) return var/obj/structure/disposalconstruct/P = new(T, whatdpipe, iconrotation) if(!iconrotation) //Automatic rotation P.dir = user.dir - if(!iconrotation && whatdpipe != PIPE_DISPOSALS_JUNCTION) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though + if(!iconrotation && whatdpipe != PIPE_DISPOSALS_JUNCTION_RIGHT) //Disposals pipes are in the opposite direction to atmos pipes, so we need to flip them. Junctions don't have this quirk though P.flip() to_chat(user, "[src] rapidly dispenses [P]!") activate_rpd(TRUE) @@ -161,7 +161,7 @@ var/list/pipemenu = list( data["iconrotation"] = iconrotation data["mainmenu"] = mainmenu data["mode"] = mode - data["pipelist"] = GLOB.construction_pipe_list + data["pipelist"] = GLOB.rpd_pipe_list data["pipemenu"] = pipemenu data["pipe_category"] = pipe_category data["whatdpipe"] = whatdpipe diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index d3dd6a5438b..acd9e12721c 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -317,7 +317,7 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) for(var/D in cardinal) assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) for(var/state in icon_states('icons/obj/pipes/disposal.dmi')) - if(!(state in list("conpipe-c", "conpipe-j1", "conpipe-s", "conpipe-t", "conpipe-y", "intake", "outlet"))) //Pipes we want sprites for + if(!(state in list("pipe-c", "pipe-j1", "pipe-s", "pipe-t", "pipe-y", "intake", "outlet"))) //Pipes we want sprites for continue for(var/D in cardinal) assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipes/disposal.dmi', state, D) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index ebdd9b5fde4..c7e276cae17 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -11,11 +11,9 @@ density = 0 pressure_resistance = 5*ONE_ATMOSPHERE level = 2 - var/ptype = 0 - // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet - + var/ptype = PIPE_DISPOSALS_STRAIGHT //Use the defines + var/base_state var/dpdir = 0 // directions as disposalpipe - var/base_state = "pipe-s" /obj/structure/disposalconstruct/New(loc, pipe_type, direction) ..() @@ -27,58 +25,43 @@ // update iconstate and dpdir due to dir and type /obj/structure/disposalconstruct/proc/update() + base_state = get_pipe_icon(ptype) + icon_state = "con[base_state]" var/flip = turn(dir, 180) var/left = turn(dir, 90) var/right = turn(dir, -90) - + name = get_pipe_name(ptype, PIPETYPE_DISPOSAL) switch(ptype) - if(0) - base_state = "pipe-s" + if(PIPE_DISPOSALS_STRAIGHT) dpdir = dir | flip - if(1) - base_state = "pipe-c" + if(PIPE_DISPOSALS_BENT) dpdir = dir | right - if(2) - base_state = "pipe-j1" + if(PIPE_DISPOSALS_JUNCTION_RIGHT) dpdir = dir | right | flip - if(3) - base_state = "pipe-j2" + if(PIPE_DISPOSALS_JUNCTION_LEFT) dpdir = dir | left | flip - if(4) - base_state = "pipe-y" + if(PIPE_DISPOSALS_Y_JUNCTION) dpdir = dir | left | right - if(5) - base_state = "pipe-t" + if(PIPE_DISPOSALS_TRUNK) dpdir = dir - // disposal bin has only one dir, thus we don't need to care about setting it - if(6) - if(anchored) - base_state = "disposal" - else - base_state = "condisposal" - - if(7) - base_state = "outlet" - dpdir = dir - - if(8) - base_state = "intake" - dpdir = dir - - if(9) - base_state = "pipe-j1s" + if(PIPE_DISPOSALS_SORT_RIGHT) dpdir = dir | right | flip - - if(10) - base_state = "pipe-j2s" + if(PIPE_DISPOSALS_SORT_LEFT) dpdir = dir | left | flip - - - if(ptype<6 || ptype>8) + // disposal bin has only one dir, thus we don't need to care about setting it + if(PIPE_DISPOSALS_BIN) + if(!anchored) + icon_state = "[base_state]-unanchored" + else + icon_state = base_state + if(PIPE_DISPOSALS_OUTLET) + dpdir = dir + icon_state = base_state + if(PIPE_DISPOSALS_CHUTE) + dpdir = dir + icon_state = base_state + if(!(ptype in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE))) icon_state = "con[base_state]" - else - icon_state = base_state - if(invisibility) // if invisible, fade icon icon -= rgb(0,0,0,128) @@ -124,33 +107,33 @@ dir = turn(dir, 180) switch(ptype) - if(2) - ptype = 3 - if(3) - ptype = 2 - if(9) - ptype = 10 - if(10) - ptype = 9 + if(PIPE_DISPOSALS_JUNCTION_RIGHT) + ptype = PIPE_DISPOSALS_JUNCTION_LEFT + if(PIPE_DISPOSALS_JUNCTION_LEFT) + ptype = PIPE_DISPOSALS_JUNCTION_RIGHT + if(PIPE_DISPOSALS_SORT_RIGHT) + ptype = PIPE_DISPOSALS_SORT_LEFT + if(PIPE_DISPOSALS_SORT_LEFT) + ptype = PIPE_DISPOSALS_SORT_RIGHT update() // returns the type path of disposalpipe corresponding to this item dtype /obj/structure/disposalconstruct/proc/dpipetype() switch(ptype) - if(0,1) + if(PIPE_DISPOSALS_STRAIGHT, PIPE_DISPOSALS_BENT) return /obj/structure/disposalpipe/segment - if(2,3,4) + if(PIPE_DISPOSALS_JUNCTION_RIGHT, PIPE_DISPOSALS_JUNCTION_LEFT, PIPE_DISPOSALS_Y_JUNCTION) return /obj/structure/disposalpipe/junction - if(5) + if(PIPE_DISPOSALS_TRUNK) return /obj/structure/disposalpipe/trunk - if(6) + if(PIPE_DISPOSALS_BIN) return /obj/machinery/disposal - if(7) + if(PIPE_DISPOSALS_OUTLET) return /obj/structure/disposaloutlet - if(8) + if(PIPE_DISPOSALS_CHUTE) return /obj/machinery/disposal/deliveryChute - if(9,10) + if(PIPE_DISPOSALS_SORT_RIGHT, PIPE_DISPOSALS_SORT_LEFT) return /obj/structure/disposalpipe/sortjunction return @@ -165,13 +148,13 @@ var/ispipe = 0 // Indicates if we should change the level of this pipe src.add_fingerprint(user) switch(ptype) - if(6) + if(PIPE_DISPOSALS_BIN) nicetype = "disposal bin" - if(7) + if(PIPE_DISPOSALS_OUTLET) nicetype = "disposal outlet" - if(8) + if(PIPE_DISPOSALS_CHUTE) nicetype = "delivery chute" - if(9, 10) + if(PIPE_DISPOSALS_SORT_RIGHT, PIPE_DISPOSALS_SORT_LEFT) nicetype = "sorting pipe" ispipe = 1 else @@ -205,7 +188,7 @@ return var/obj/structure/disposalpipe/CP = locate() in T - if(ptype>=6 && ptype <= 8) // Disposal or outlet + if(ptype in list(PIPE_DISPOSALS_BIN, PIPE_DISPOSALS_OUTLET, PIPE_DISPOSALS_CHUTE)) // Disposal or outlet if(CP) // There's something there if(!istype(CP,/obj/structure/disposalpipe/trunk)) to_chat(user, "The [nicetype] requires a trunk underneath it in order to work.") @@ -244,22 +227,22 @@ P.update_icon() //Needs some special treatment ;) - if(ptype==9 || ptype==10) + if(ptype == PIPE_DISPOSALS_SORT_RIGHT || ptype == PIPE_DISPOSALS_SORT_LEFT) var/obj/structure/disposalpipe/sortjunction/SortP = P SortP.updatedir() - else if(ptype==6) // Disposal bin + else if(ptype == PIPE_DISPOSALS_BIN) // Disposal bin var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc) src.transfer_fingerprints_to(P) P.mode = 0 // start with pump off - else if(ptype==7) // Disposal outlet + else if(ptype == PIPE_DISPOSALS_OUTLET) // Disposal outlet var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc) src.transfer_fingerprints_to(P) P.dir = dir - else if(ptype==8) // Disposal outlet + else if(ptype==PIPE_DISPOSALS_CHUTE) // Disposal outlet var/obj/machinery/disposal/deliveryChute/P = new /obj/machinery/disposal/deliveryChute(src.loc) src.transfer_fingerprints_to(P) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index aaf35238d80..bf044a6b16c 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -97,7 +97,7 @@ to_chat(user, "You sliced the floorweld off the disposal unit.") var/obj/structure/disposalconstruct/C = new (src.loc) src.transfer_fingerprints_to(C) - C.ptype = 6 // 6 = disposal unit + C.ptype = PIPE_DISPOSALS_BIN C.anchored = 1 C.density = 1 C.update() @@ -889,21 +889,21 @@ var/obj/structure/disposalconstruct/C = new (src.loc) switch(base_icon_state) if("pipe-s") - C.ptype = 0 + C.ptype = PIPE_DISPOSALS_STRAIGHT if("pipe-c") - C.ptype = 1 + C.ptype = PIPE_DISPOSALS_BENT if("pipe-j1") - C.ptype = 2 + C.ptype = PIPE_DISPOSALS_JUNCTION_RIGHT if("pipe-j2") - C.ptype = 3 + C.ptype = PIPE_DISPOSALS_JUNCTION_LEFT if("pipe-y") - C.ptype = 4 + C.ptype = PIPE_DISPOSALS_Y_JUNCTION if("pipe-t") - C.ptype = 5 + C.ptype = PIPE_DISPOSALS_TRUNK if("pipe-j1s") - C.ptype = 9 + C.ptype = PIPE_DISPOSALS_SORT_RIGHT if("pipe-j2s") - C.ptype = 10 + C.ptype = PIPE_DISPOSALS_SORT_LEFT src.transfer_fingerprints_to(C) C.dir = dir C.density = 0 @@ -1339,7 +1339,7 @@ to_chat(user, "You sliced the floorweld off the disposal outlet.") var/obj/structure/disposalconstruct/C = new (src.loc) src.transfer_fingerprints_to(C) - C.ptype = 7 // 7 = outlet + C.ptype = PIPE_DISPOSALS_OUTLET C.update() C.anchored = 1 C.density = 1 diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index c40ed9fe73b..8b2f7c4197f 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -349,7 +349,7 @@ if(!src || !W.isOn()) return to_chat(user, "You sliced the floorweld off the delivery chute.") var/obj/structure/disposalconstruct/C = new (src.loc) - C.ptype = 8 // 8 = Delivery chute + C.ptype = PIPE_DISPOSALS_CHUTE C.update() C.anchored = 1 C.density = 1 diff --git a/icons/obj/pipes/disposal.dmi b/icons/obj/pipes/disposal.dmi index cbd0834b435845be68c5b2e691dff3853a1ab604..83440fc1b528adf2fe7cd008a2ca1c4997455fa6 100644 GIT binary patch delta 405 zcmV;G0c!rB`~|H11&}0vcY0Jg&-y7ydzEFn zHrWndmNrWd?RTK^EUXL+pi95~4%FH>EwACABtL%-f%jjM&+XUlKsNhb+JSY_Xi}2Z z%WInaO6~o0^~{fFmaxFASGFF=^EphqOE4S62<~wqzRXQ){&CrX;NGE1L6Jl zO=WZ=8=%!dt{#)$`4gzav&9oAUW+F^n!H5G{v@K?e><{TwN6aqA8Eotu?s0lp7moL zo+DESmR5q<6HKd$K~-eqo6~`%b*qqz?!Z#PG*>gFrg#gCU!u6wo}D4O#{r|2GEVB# zH2yyP?>fux$KWx4tyd5~{D4u@fJW5nN1o;D`(ll3fF7g80#@U=cXZ)m`fx_E{KEUxoLV)`dw^k~g_u7m#5qf}hQQn7FD zL>bde8po0Kxc(@x=3vX5sF;tAB_+42b#uf>xAOv$cRF5J;ZFn8qB zs&Y`3c{%ZLcUH)zFWgbVbgO1cP4SMi_L{_{4(!B}XB;uwDC4C*PUG*x`>yliehnUT z4vMEge#EG;TqA0K^{dE>^?flbEvJWMv50jzE Date: Mon, 16 Jul 2018 00:26:49 +0100 Subject: [PATCH 8/9] Removes commented out code --- code/__HELPERS/global_lists.dm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index edec5d7c952..2a81cca7045 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -50,13 +50,7 @@ init_subtypes(/datum/crafting_recipe, crafting_recipes) - //RPD pipe list building -/* var/list/temp_pipe_list = list() - init_subtypes(/datum/pipes/atmospheric/dispensable, temp_pipe_list) - init_subtypes(/datum/pipes/disposal/dispensable, temp_pipe_list) - for(var/datum/pipes/P in temp_pipe_list) //Yes I know the list(list(...)) thing looks weird, but it allows us to group pipe metadata into ordered lists instead of being one big list - GLOB.construction_pipe_list += list(list("pipe_name" = P.pipe_name, "pipe_id" = P.pipe_id, "pipe_type" = P.pipe_type, "pipe_category" = P.pipe_category, "orientations" = P.orientations, "pipe_icon" = P.pipe_icon, "bendy" = P.bendy)) -*/ + //Pipe list building init_subtypes(/datum/pipes, GLOB.construction_pipe_list) for(var/D in GLOB.construction_pipe_list) var/datum/pipes/P = D From 7b81e7f5041b7dcb7371ac2f05aee7d9fc56ed6c Mon Sep 17 00:00:00 2001 From: Citinited Date: Mon, 16 Jul 2018 22:03:03 +0100 Subject: [PATCH 9/9] RPD exploit fix --- code/game/turfs/turf.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index aa0c8ecdcac..337233b5bf4 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -75,6 +75,10 @@ if(our_rpd.mode == RPD_ATMOS_MODE) our_rpd.create_atmos_pipe(user, src) else if(our_rpd.mode == RPD_DISPOSALS_MODE) + for(var/obj/machinery/door/airlock/A in src) + if(A.density) + to_chat(user, "That type of pipe won't fit under [A]!") + return our_rpd.create_disposals_pipe(user, src) else if(our_rpd.mode == RPD_ROTATE_MODE) our_rpd.rotate_all_pipes(user, src)

H@BY(DsVhQy(?lcwI%AB60h-wtLo-`!N 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 diff --git a/nano/templates/rpd.tmpl b/nano/templates/rpd.tmpl index bd92b91c979..6c380b3c046 100644 --- a/nano/templates/rpd.tmpl +++ b/nano/templates/rpd.tmpl @@ -11,93 +11,96 @@ Used In File(s): /code/game/objects/items/weapons/rpd.dm