diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index dbe67a1594..7cab3c23dc 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -35,7 +35,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/general/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/general/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -58,7 +58,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/scrubbers name="scrubbers pipe" pipe_color=rgb(255,0,0) @@ -77,7 +77,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden level = PIPE_HIDDEN_LEVEL @@ -90,7 +90,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/supply name="air supply pipe" pipe_color=rgb(0,0,255) @@ -99,7 +99,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/supply/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/supply/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -122,7 +122,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/supplymain name="main air supply pipe" pipe_color=rgb(130,43,255) @@ -141,7 +141,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/supplymain/hidden level = PIPE_HIDDEN_LEVEL @@ -154,7 +154,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/yellow pipe_color=rgb(255,198,0) color=rgb(255,198,0) @@ -172,7 +172,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/yellow/hidden level = PIPE_HIDDEN_LEVEL @@ -185,7 +185,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/cyan pipe_color=rgb(0,255,249) color=rgb(0,255,249) @@ -193,7 +193,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/cyan/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/cyan/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -206,7 +206,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/cyan/hidden level = PIPE_HIDDEN_LEVEL - + /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -224,7 +224,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/green/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/green/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -237,7 +237,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/green/hidden level = PIPE_HIDDEN_LEVEL - + /obj/machinery/atmospherics/pipe/simple/green/hidden/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -255,7 +255,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/orange/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/orange/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -268,7 +268,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/orange/hidden level = PIPE_HIDDEN_LEVEL - + /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -286,7 +286,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/purple/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/purple/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -309,7 +309,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/dark pipe_color=rgb(69,69,69) color=rgb(69,69,69) @@ -317,7 +317,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/dark/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/dark/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -340,7 +340,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/violet pipe_color=rgb(64,0,128) color=rgb(64,0,128) @@ -348,7 +348,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/violet/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/violet/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -371,7 +371,7 @@ The regular pipe you see everywhere, including bent ones. piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/pipe/simple/brown pipe_color=rgb(178,100,56) color=rgb(178,100,56) @@ -379,7 +379,7 @@ The regular pipe you see everywhere, including bent ones. /obj/machinery/atmospherics/pipe/simple/brown/visible level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER - + /obj/machinery/atmospherics/pipe/simple/brown/visible/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers/_mapping_helpers.dm similarity index 59% rename from code/modules/mapping/mapping_helpers.dm rename to code/modules/mapping/mapping_helpers/_mapping_helpers.dm index a7f84fd71f..99184b1c3e 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers/_mapping_helpers.dm @@ -1,90 +1,4 @@ //Landmarks and other helpers which speed up the mapping process and reduce the number of unique instances/subtypes of items/turf/ect - - - -/obj/effect/baseturf_helper //Set the baseturfs of every turf in the /area/ it is placed. - name = "baseturf editor" - icon = 'icons/effects/mapping_helpers.dmi' - icon_state = "" - - var/list/baseturf_to_replace - var/baseturf - - layer = POINT_LAYER - -/obj/effect/baseturf_helper/Initialize() - . = ..() - return INITIALIZE_HINT_LATELOAD - -/obj/effect/baseturf_helper/LateInitialize() - if(!baseturf_to_replace) - baseturf_to_replace = typecacheof(list(/turf/open/space,/turf/baseturf_bottom)) - else if(!length(baseturf_to_replace)) - baseturf_to_replace = list(baseturf_to_replace = TRUE) - else if(baseturf_to_replace[baseturf_to_replace[1]] != TRUE) // It's not associative - var/list/formatted = list() - for(var/i in baseturf_to_replace) - formatted[i] = TRUE - baseturf_to_replace = formatted - - var/area/our_area = get_area(src) - for(var/i in get_area_turfs(our_area, z)) - replace_baseturf(i) - - qdel(src) - -/obj/effect/baseturf_helper/proc/replace_baseturf(turf/thing) - var/list/baseturf_cache = thing.baseturfs - if(length(baseturf_cache)) - for(var/i in baseturf_cache) - if(baseturf_to_replace[i]) - baseturf_cache -= i - if(!baseturf_cache.len) - thing.assemble_baseturfs(baseturf) - else - thing.PlaceOnBottom(null, baseturf) - else if(baseturf_to_replace[thing.baseturfs]) - thing.assemble_baseturfs(baseturf) - else - thing.PlaceOnBottom(null, baseturf) - -/obj/effect/baseturf_helper/space - name = "space baseturf editor" - baseturf = /turf/open/space - -/obj/effect/baseturf_helper/asteroid - name = "asteroid baseturf editor" - baseturf = /turf/open/floor/plating/asteroid - -/obj/effect/baseturf_helper/asteroid/airless - name = "asteroid airless baseturf editor" - baseturf = /turf/open/floor/plating/asteroid/airless - -/obj/effect/baseturf_helper/asteroid/basalt - name = "asteroid basalt baseturf editor" - baseturf = /turf/open/floor/plating/asteroid/basalt - -/obj/effect/baseturf_helper/asteroid/snow - name = "asteroid snow baseturf editor" - baseturf = /turf/open/floor/plating/asteroid/snow - -/obj/effect/baseturf_helper/beach/sand - name = "beach sand baseturf editor" - baseturf = /turf/open/floor/plating/beach/sand - -/obj/effect/baseturf_helper/beach/water - name = "water baseturf editor" - baseturf = /turf/open/floor/plating/beach/water - -/obj/effect/baseturf_helper/lava - name = "lava baseturf editor" - baseturf = /turf/open/lava/smooth - -/obj/effect/baseturf_helper/lava_land/surface - name = "lavaland baseturf editor" - baseturf = /turf/open/lava/smooth/lava_land_surface - - /obj/effect/mapping_helpers icon = 'icons/effects/mapping_helpers.dmi' icon_state = "" @@ -94,7 +8,6 @@ ..() return late ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_QDEL - //airlock helpers /obj/effect/mapping_helpers/airlock layer = DOOR_HELPER_LAYER diff --git a/code/modules/mapping/mapping_helpers/baseturf.dm b/code/modules/mapping/mapping_helpers/baseturf.dm new file mode 100644 index 0000000000..f4bd0d7c7f --- /dev/null +++ b/code/modules/mapping/mapping_helpers/baseturf.dm @@ -0,0 +1,82 @@ +/obj/effect/baseturf_helper //Set the baseturfs of every turf in the /area/ it is placed. + name = "baseturf editor" + icon = 'icons/effects/mapping_helpers.dmi' + icon_state = "" + + var/list/baseturf_to_replace + var/baseturf + + layer = POINT_LAYER + +/obj/effect/baseturf_helper/Initialize() + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/effect/baseturf_helper/LateInitialize() + if(!baseturf_to_replace) + baseturf_to_replace = typecacheof(list(/turf/open/space,/turf/baseturf_bottom)) + else if(!length(baseturf_to_replace)) + baseturf_to_replace = list(baseturf_to_replace = TRUE) + else if(baseturf_to_replace[baseturf_to_replace[1]] != TRUE) // It's not associative + var/list/formatted = list() + for(var/i in baseturf_to_replace) + formatted[i] = TRUE + baseturf_to_replace = formatted + + var/area/our_area = get_area(src) + for(var/i in get_area_turfs(our_area, z)) + replace_baseturf(i) + + qdel(src) + +/obj/effect/baseturf_helper/proc/replace_baseturf(turf/thing) + var/list/baseturf_cache = thing.baseturfs + if(length(baseturf_cache)) + for(var/i in baseturf_cache) + if(baseturf_to_replace[i]) + baseturf_cache -= i + if(!baseturf_cache.len) + thing.assemble_baseturfs(baseturf) + else + thing.PlaceOnBottom(null, baseturf) + else if(baseturf_to_replace[thing.baseturfs]) + thing.assemble_baseturfs(baseturf) + else + thing.PlaceOnBottom(null, baseturf) + +/obj/effect/baseturf_helper/space + name = "space baseturf editor" + baseturf = /turf/open/space + +/obj/effect/baseturf_helper/asteroid + name = "asteroid baseturf editor" + baseturf = /turf/open/floor/plating/asteroid + +/obj/effect/baseturf_helper/asteroid/airless + name = "asteroid airless baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/airless + +/obj/effect/baseturf_helper/asteroid/basalt + name = "asteroid basalt baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/basalt + +/obj/effect/baseturf_helper/asteroid/snow + name = "asteroid snow baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/snow + +/obj/effect/baseturf_helper/beach/sand + name = "beach sand baseturf editor" + baseturf = /turf/open/floor/plating/beach/sand + +/obj/effect/baseturf_helper/beach/water + name = "water baseturf editor" + baseturf = /turf/open/floor/plating/beach/water + +/obj/effect/baseturf_helper/lava + name = "lava baseturf editor" + baseturf = /turf/open/lava/smooth + +/obj/effect/baseturf_helper/lava_land/surface + name = "lavaland baseturf editor" + baseturf = /turf/open/lava/smooth/lava_land_surface + diff --git a/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm b/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm new file mode 100644 index 0000000000..78a835cffa --- /dev/null +++ b/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm @@ -0,0 +1,43 @@ +//Builds networks like power cables/atmos lines/etc +//Just a holder parent type for now.. +/obj/effect/mapping_helpers/network_builder + /// set var to true to not del on lateload + var/custom_spawned = FALSE + + icon = 'icons/effects/mapping_helpers.dmi' + + late = TRUE + /// what directions we know connections are in + var/list/network_directions = list() + +/obj/effect/mapping_helpers/network_builder/Initialize(mapload) + . = ..() + to_chat(world, "DEBUG: Initializing [COORD(src)]") + var/conflict = check_duplicates() + if(conflict) + stack_trace("WARNING: [type] network building helper found check_duplicates() conflict [conflict] in its location.!") + return INITIALIZE_HINT_QDEL + if(!mapload) + if(GLOB.Debug2) + custom_spawned = TRUE + return INITIALIZE_HINT_NORMAL + else + return INITIALIZE_HINT_QDEL + return INITIALIZE_HINT_LATELOAD + +/// How this works: On LateInitialize, detect all directions that this should be applicable to, and do what it needs to do, and then inform all network builders in said directions that it's been around since it won't be around afterwards. +/obj/effect/mapping_helpers/network_builder/LateInitialize() + to_chat(world, "DEBUG: LateInitializing [COORD(src)]") + scan_directions() + build_network() + if(!custom_spawned) + qdel(src) + +/obj/effect/mapping_helpers/network_builder/proc/check_duplicates() + CRASH("Base abstract network builder tried to check duplicates.") + +/obj/effect/mapping_helpers/network_builder/proc/scan_directions() + CRASH("Base abstract network builder tried to scan directions.") + +/obj/effect/mapping_helpers/network_builder/proc/build_network() + CRASH("Base abstract network builder tried to build network.") diff --git a/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm b/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm new file mode 100644 index 0000000000..1983bab3b6 --- /dev/null +++ b/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm @@ -0,0 +1,96 @@ +/* Automatically places pipes on init based on any pipes connecting to it and adjacent helpers. Only supports cardinals. + * Conflicts with ANY PIPE ON ITS LAYER, as well as atmos network build helpers on the same layer, as well as any pipe on all layers. Do those manually. +*/ +/obj/effect/mapping_helpers/network_builder/atmos_pipe + name = "atmos pipe autobuilder" + icon_state = "atmospipebuilder" + + /// Layer to put our pipes on + var/pipe_layer = PIPING_LAYER_DEFAULT + + /// Color to set our pipes to + var/pipe_color + + /// Whether or not pipes we make are visible + var/visible_pipes = FALSE + + color = null + +/obj/effect/mapping_helpers/network_builder/atmos_pipe/check_duplicates() + for(var/obj/effect/mapping_helpers/network_builder/atmos_pipe/other in loc) + if(other == src) + continue + if(other.pipe_layer == pipe_layer) + return other + for(var/obj/machinery/atmospherics/A in loc) + if(A.pipe_flags & PIPING_ALL_LAYER) + return A + if(A.piping_layer == pipe_layer) + return A + return FALSE + +/// Scans directions, sets network_directions to have every direction that we can link to. If there's another power cable builder detected, make sure they know we're here by adding us to their cable directions list before we're deleted. +/obj/effect/mapping_helpers/network_builder/atmos_pipe/scan_directions() + var/turf/T + for(var/i in GLOB.cardinals) + if(i in network_directions) + continue //we're already set, that means another builder set us. + T = get_step(loc, i) + if(!T) + continue + var/found = FALSE + for(var/obj/effect/mapping_helpers/network_builder/atmos_pipe/other in T) + if(other.pipe_layer == pipe_layer) + network_directions += i + other.network_directions += turn(i, 180) + found = TRUE + break + if(found) + continue + for(var/obj/machinery/atmospherics/A in T) + if((A.piping_layer == pipe_layer) && (A.initialize_directions & turn(i, 180))) + network_directions += i + break + return network_directions + +/// Directions should only ever have cardinals. +/obj/effect/mapping_helpers/network_builder/atmos_pipe/build_network() + if(length(network_directions) <= 1) + return + var/obj/machinery/atmospherics/pipe/built + switch(length(network_directions)) + if(2) //straight pipe + built = new /obj/machinery/atmospherics/pipe/simple(loc) + var/d1 = network_directions[1] + var/d2 = network_directions[2] + var/combined = d1 | d2 + if(combined in GLOB.diagonals) + built.setDir(combined) + else + built.setDir(d1) + if(3) //manifold + var/list/missing = network_directions ^ GLOB.cardinals + missing = missing[1] + built = new /obj/machinery/atmospherics/pipe/manifold(loc) + built.setDir(missing) + if(4) //4 way manifold + built = new /obj/machinery/atmospherics/pipe/manifold4w(loc) + built.SetInitDirections() + built.on_construction(pipe_color, pipe_layer) + built.hide(!visible_pipes) + +/obj/effect/mapping_helpers/network_builder/atmos_pipe/distro + name = "distro line autobuilder" + pipe_layer = PIPING_LAYER_MIN + pixel_x = -PIPING_LAYER_P_X + pixel_y = -PIPING_LAYER_P_Y + pipe_color = rgb(130,43,255) + color = rgb(130,43,255) + +/obj/effect/mapping_helpers/network_builder/atmos_pipe/scrubbers + name = "scrubbers line autobuilder" + pipe_layer = PIPING_LAYER_MAX + pixel_x = PIPING_LAYER_P_X + pixel_y = PIPING_LAYER_P_Y + pipe_color = rgb(255,0,0) + color = rgb(255,0,0) diff --git a/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm b/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm new file mode 100644 index 0000000000..5385045618 --- /dev/null +++ b/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm @@ -0,0 +1,189 @@ +#define NO_KNOT 0 +#define KNOT_AUTO 1 +#define KNOT_FORCED 2 + +/// Automatically links on init to power cables and other cable builder helpers. Only supports cardinals. +/obj/effect/mapping_helpers/network_builder/power_cable + name = "power line autobuilder" + icon_state = "powerlinebuilder" + + color = "#ff0000" + + /// Whether or not we forcefully make a knot + var/knot = NO_KNOT + + /// cable color as from GLOB.cable_colors + var/cable_color = "red" + +/obj/effect/mapping_helpers/network_builder/power_cable/check_duplicates() + var/obj/structure/cable/C = locate() in loc + if(C) + return C + for(var/obj/effect/mapping_helpers/network_builder/power_cable/other in loc) + if(other == src) + continue + return other + +/// Scans directions, sets network_directions to have every direction that we can link to. If there's another power cable builder detected, make sure they know we're here by adding us to their cable directions list before we're deleted. +/obj/effect/mapping_helpers/network_builder/power_cable/scan_directions() + var/turf/T + for(var/i in GLOB.cardinals) + if(i in network_directions) + continue //we're already set, that means another builder set us. + T = get_step(loc, i) + if(!T) + continue + var/obj/effect/mapping_helpers/network_builder/power_cable/other = locate() in T + if(other) + network_directions += i + other.network_directions += turn(i, 180) + continue + for(var/obj/structure/cable/C in T) + if(C.d1 == turn(i, 180) || C.d2 == turn(i, 180)) + network_directions += i + continue + return network_directions + +/// Directions should only ever have cardinals. +/obj/effect/mapping_helpers/network_builder/power_cable/build_network() + if(!length(network_directions)) + return + else if(length(network_directions) == 1) + new /obj/structure/cable(loc, cable_color, NONE, network_directions[1]) + else + if(knot == KNOT_FORCED) + for(var/d in network_directions) + new /obj/structure/cable(loc, cable_color, NONE, d) + else + var/do_knot = (knot == KNOT_FORCED) || ((knot == KNOT_AUTO) && should_auto_knot()) + var/dirs = length(network_directions) + for(var/i in 1 to dirs - 1) + var/li = (i == 1)? dirs : (i - 1) + var/d1 = network_directions[i] + var/d2 = network_directions[li] + if(d1 > d2) //this is ugly please help me + d1 = network_directions[li] + d2 = network_directions[i] + new /obj/structure/cable(loc, cable_color, d1, d2) + if(do_knot) + new /obj/structure/cable(loc, cable_color, NONE, network_directions[i]) + do_knot = FALSE + +/obj/effect/mapping_helpers/network_builder/power_cable/proc/should_auto_knot() + return (locate(/obj/machinery/power/terminal) in loc) + +/obj/effect/mapping_helpers/network_builder/power_cable/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Red +/obj/effect/mapping_helpers/network_builder/power_cable/red + color = "#ff0000" + cable_color = "red" + +/obj/effect/mapping_helpers/network_builder/power_cable/red/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/red/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// White +/obj/effect/mapping_helpers/network_builder/power_cable/white + color = "#ffffff" + cable_color = "white" + +/obj/effect/mapping_helpers/network_builder/power_cable/white/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/white/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Cyan +/obj/effect/mapping_helpers/network_builder/power_cable/cyan + color = "#00ffff" + cable_color = "cyan" + +/obj/effect/mapping_helpers/network_builder/power_cable/cyan/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/cyan/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Orange +/obj/effect/mapping_helpers/network_builder/power_cable/orange + color = "#ff8000" + cable_color = "orange" + +/obj/effect/mapping_helpers/network_builder/power_cable/orange/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/orange/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Pink +/obj/effect/mapping_helpers/network_builder/power_cable/pink + color = "#ff3cc8" + cable_color = "pink" + +/obj/effect/mapping_helpers/network_builder/power_cable/pink/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/pink/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Blue +/obj/effect/mapping_helpers/network_builder/power_cable/blue + color = "#1919c8" + cable_color = "blue" + +/obj/effect/mapping_helpers/network_builder/power_cable/blue/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/blue/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Green +/obj/effect/mapping_helpers/network_builder/power_cable/green + color = "#00aa00" + cable_color = "green" + +/obj/effect/mapping_helpers/network_builder/power_cable/green/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/green/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +// Yellow +/obj/effect/mapping_helpers/network_builder/power_cable/yellow + color = "#ffff00" + cable_color = "yellow" + +/obj/effect/mapping_helpers/network_builder/power_cable/yellow/knot + icon_state = "powerlinebuilderknot" + knot = KNOT_FORCED + +/obj/effect/mapping_helpers/network_builder/power_cable/yellow/auto + icon_state = "powerlinebuilderauto" + knot = KNOT_AUTO + +#undef NO_KNOT +#undef KNOT_AUTO +#undef KNOT_FORCED diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b1c2d225ee..cee9a17ebf 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -79,13 +79,17 @@ By design, d1 is the smallest direction and d2 is the highest color = "#ffffff" // the power cable object -/obj/structure/cable/Initialize(mapload, param_color) +/obj/structure/cable/Initialize(mapload, param_color, _d1, _d2) . = ..() - // ensure d1 & d2 reflect the icon_state for entering and exiting cable - var/dash = findtext(icon_state, "-") - d1 = text2num( copytext( icon_state, 1, dash ) ) - d2 = text2num( copytext( icon_state, dash+1 ) ) + if(isnull(_d1) || isnull(_d2)) + // ensure d1 & d2 reflect the icon_state for entering and exiting cable + var/dash = findtext(icon_state, "-") + d1 = text2num( copytext( icon_state, 1, dash ) ) + d2 = text2num( copytext( icon_state, dash+1 ) ) + else + d1 = _d1 + d2 = _d2 var/turf/T = get_turf(src) // hide if turf is not intact if(level==1) diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index dec83046b9..e3cc3865b2 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 1893edc33d..27f79a420b 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2012,11 +2012,15 @@ #include "code\modules\lighting\lighting_turf.dm" #include "code\modules\mapping\dmm_suite.dm" #include "code\modules\mapping\map_template.dm" -#include "code\modules\mapping\mapping_helpers.dm" #include "code\modules\mapping\preloader.dm" #include "code\modules\mapping\reader.dm" #include "code\modules\mapping\ruins.dm" #include "code\modules\mapping\verify.dm" +#include "code\modules\mapping\mapping_helpers\_mapping_helpers.dm" +#include "code\modules\mapping\mapping_helpers\baseturf.dm" +#include "code\modules\mapping\mapping_helpers\network_builder\_network_builder.dm" +#include "code\modules\mapping\mapping_helpers\network_builder\atmos_pipe.dm" +#include "code\modules\mapping\mapping_helpers\network_builder\power_cables.dm" #include "code\modules\mapping\space_management\multiz_helpers.dm" #include "code\modules\mapping\space_management\space_level.dm" #include "code\modules\mapping\space_management\space_reservation.dm"