From 586e9633f1b94d709de1eebddda50653f510193e Mon Sep 17 00:00:00 2001 From: AlexanderSeto Date: Sat, 24 May 2014 08:56:51 -0700 Subject: [PATCH 1/2] Adds the rapid part exchange device --- code/WorkInProgress/Tastyfish/mainspipe.dm | 703 +++++++++++++++++++++ code/defines/obj/weapon.dm | 16 + code/game/machinery/machinery.dm | 27 + code/modules/research/designs.dm | 10 + icons/obj/storage.dmi | Bin 59105 -> 59866 bytes 5 files changed, 756 insertions(+) create mode 100644 code/WorkInProgress/Tastyfish/mainspipe.dm diff --git a/code/WorkInProgress/Tastyfish/mainspipe.dm b/code/WorkInProgress/Tastyfish/mainspipe.dm new file mode 100644 index 00000000000..e2b3acde640 --- /dev/null +++ b/code/WorkInProgress/Tastyfish/mainspipe.dm @@ -0,0 +1,703 @@ +// internal pipe, don't actually place or use these +obj/machinery/atmospherics/pipe/mains_component + var/obj/machinery/atmospherics/mains_pipe/parent_pipe + var/list/obj/machinery/atmospherics/pipe/mains_component/nodes = new() + + New(loc) + ..(loc) + parent_pipe = loc + + check_pressure(pressure) + var/datum/gas_mixture/environment = loc.loc.return_air() + + var/pressure_difference = pressure - environment.return_pressure() + + if(pressure_difference > parent_pipe.maximum_pressure) + mains_burst() + + else if(pressure_difference > parent_pipe.fatigue_pressure) + //TODO: leak to turf, doing pfshhhhh + if(prob(5)) + mains_burst() + + else return 1 + + pipeline_expansion() + return nodes + + disconnect(obj/machinery/atmospherics/reference) + if(nodes.Find(reference)) + nodes.Remove(reference) + + proc/mains_burst() + parent_pipe.burst() + +obj/machinery/atmospherics/mains_pipe + icon = 'icons/obj/atmospherics/mainspipe.dmi' + layer = 2.4 //under wires with their 2.5 + + var/volume = 0 + var/force = 20 + + var/alert_pressure = 80*ONE_ATMOSPHERE + + var/initialize_mains_directions = 0 + + var/list/obj/machinery/atmospherics/mains_pipe/nodes = new() + var/obj/machinery/atmospherics/pipe/mains_component/supply + var/obj/machinery/atmospherics/pipe/mains_component/scrubbers + var/obj/machinery/atmospherics/pipe/mains_component/aux + + var/minimum_temperature_difference = 300 + var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No + + var/maximum_pressure = 70*ONE_ATMOSPHERE + var/fatigue_pressure = 55*ONE_ATMOSPHERE + alert_pressure = 55*ONE_ATMOSPHERE + + New() + ..() + + supply = new(src) + supply.volume = volume + supply.nodes.len = nodes.len + scrubbers = new(src) + scrubbers.volume = volume + scrubbers.nodes.len = nodes.len + aux = new(src) + aux.volume = volume + aux.nodes.len = nodes.len + + hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + + proc/burst() + ..() + for(var/obj/machinery/atmospherics/pipe/mains_component/pipe in contents) + burst() + + proc/check_pressure(pressure) + var/datum/gas_mixture/environment = loc.return_air() + + var/pressure_difference = pressure - environment.return_pressure() + + if(pressure_difference > maximum_pressure) + burst() + + else if(pressure_difference > fatigue_pressure) + //TODO: leak to turf, doing pfshhhhh + if(prob(5)) + burst() + + else return 1 + + disconnect() + ..() + for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes) + node.disconnect() + + Del() + disconnect() + ..() + + initialize() + for(var/i = 1 to nodes.len) + var/obj/machinery/atmospherics/mains_pipe/node = nodes[i] + if(node) + supply.nodes[i] = node.supply + scrubbers.nodes[i] = node.scrubbers + aux.nodes[i] = node.aux + +obj/machinery/atmospherics/mains_pipe/simple + name = "mains pipe" + desc = "A one meter section of 3-line mains pipe" + + dir = SOUTH + initialize_mains_directions = SOUTH|NORTH + + New() + nodes.len = 2 + ..() + switch(dir) + if(SOUTH || NORTH) + initialize_mains_directions = SOUTH|NORTH + if(EAST || WEST) + initialize_mains_directions = EAST|WEST + if(NORTHEAST) + initialize_mains_directions = NORTH|EAST + if(NORTHWEST) + initialize_mains_directions = NORTH|WEST + if(SOUTHEAST) + initialize_mains_directions = SOUTH|EAST + if(SOUTHWEST) + initialize_mains_directions = SOUTH|WEST + + proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 + + update_icon() + if(nodes[1] && nodes[2]) + icon_state = "intact[invisibility ? "-f" : "" ]" + + //var/node1_direction = get_dir(src, node1) + //var/node2_direction = get_dir(src, node2) + + //dir = node1_direction|node2_direction + + else + if(!nodes[1]&&!nodes[2]) + del(src) //TODO: silent deleting looks weird + var/have_node1 = nodes[1]?1:0 + var/have_node2 = nodes[2]?1:0 + icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" + + initialize() + normalize_dir() + var/node1_dir + var/node2_dir + + for(var/direction in cardinal) + if(direction&initialize_mains_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + + ..() // initialize internal pipes + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + hidden + level = 1 + icon_state = "intact-f" + + visible + level = 2 + icon_state = "intact" + +obj/machinery/atmospherics/mains_pipe/manifold + name = "manifold pipe" + desc = "A manifold composed of mains pipes" + + dir = SOUTH + initialize_mains_directions = EAST|NORTH|WEST + volume = 105 + + New() + nodes.len = 3 + ..() + initialize_mains_directions = (NORTH|SOUTH|EAST|WEST) & ~dir + + initialize() + var/connect_directions = initialize_mains_directions + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + connect_directions &= ~direction + break + if (nodes[1]) + break + + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + connect_directions &= ~direction + break + if (nodes[2]) + break + + + for(var/direction in cardinal) + if(direction&connect_directions) + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[3] = target + connect_directions &= ~direction + break + if (nodes[3]) + break + + ..() // initialize internal pipes + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "manifold[invisibility ? "-f" : "" ]" + + hidden + level = 1 + icon_state = "manifold-f" + + visible + level = 2 + icon_state = "manifold" + +obj/machinery/atmospherics/mains_pipe/manifold4w + name = "manifold pipe" + desc = "A manifold composed of mains pipes" + + dir = SOUTH + initialize_mains_directions = EAST|NORTH|WEST|SOUTH + volume = 105 + + New() + nodes.len = 4 + ..() + + initialize() + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,NORTH)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,SOUTH)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,EAST)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[3] = target + break + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,WEST)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[3] = target + break + + ..() // initialize internal pipes + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "manifold4w[invisibility ? "-f" : "" ]" + + hidden + level = 1 + icon_state = "manifold4w-f" + + visible + level = 2 + icon_state = "manifold4w" + +obj/machinery/atmospherics/mains_pipe/split + name = "mains splitter" + desc = "A splitter for connecting to a single pipe off a mains." + + var/obj/machinery/atmospherics/pipe/mains_component/split_node + var/obj/machinery/atmospherics/node3 + var/icon_type + + New() + nodes.len = 2 + ..() + initialize_mains_directions = turn(dir, 90) | turn(dir, -90) + initialize_directions = dir // actually have a normal connection too + + initialize() + var/node1_dir + var/node2_dir + var/node3_dir + + node1_dir = turn(dir, 90) + node2_dir = turn(dir, -90) + node3_dir = dir + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + ..() // initialize internal pipes + + // bind them + spawn(5) + if(node3 && split_node) + var/datum/pipe_network/N1 = node3.return_network(src) + var/datum/pipe_network/N2 = split_node.return_network(split_node) + if(N1 && N2) + N1.merge(N2) + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "split-[icon_type][invisibility ? "-f" : "" ]" + + return_network(A) + return split_node.return_network(A) + + supply + icon_type = "supply" + + New() + ..() + split_node = supply + + hidden + level = 1 + icon_state = "split-supply-f" + + visible + level = 2 + icon_state = "split-supply" + + scrubbers + icon_type = "scrubbers" + + New() + ..() + split_node = scrubbers + + hidden + level = 1 + icon_state = "split-scrubbers-f" + + visible + level = 2 + icon_state = "split-scrubbers" + + aux + icon_type = "aux" + + New() + ..() + split_node = aux + + hidden + level = 1 + icon_state = "split-aux-f" + + visible + level = 2 + icon_state = "split-aux" + +obj/machinery/atmospherics/mains_pipe/split3 + name = "triple mains splitter" + desc = "A splitter for connecting to the 3 pipes on a mainline." + + var/obj/machinery/atmospherics/supply_node + var/obj/machinery/atmospherics/scrubbers_node + var/obj/machinery/atmospherics/aux_node + + New() + nodes.len = 1 + ..() + initialize_mains_directions = dir + initialize_directions = cardinal & ~dir // actually have a normal connection too + + initialize() + var/node1_dir + var/supply_node_dir + var/scrubbers_node_dir + var/aux_node_dir + + node1_dir = dir + aux_node_dir = turn(dir, 180) + if(dir & (NORTH|SOUTH)) + supply_node_dir = EAST + scrubbers_node_dir = WEST + else + supply_node_dir = SOUTH + scrubbers_node_dir = NORTH + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src, node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,supply_node_dir)) + if(target.initialize_directions & get_dir(target,src)) + supply_node = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,scrubbers_node_dir)) + if(target.initialize_directions & get_dir(target,src)) + scrubbers_node = target + break + for(var/obj/machinery/atmospherics/target in get_step(src,aux_node_dir)) + if(target.initialize_directions & get_dir(target,src)) + aux_node = target + break + + ..() // initialize internal pipes + + // bind them + spawn(5) + if(supply_node) + var/datum/pipe_network/N1 = supply_node.return_network(src) + var/datum/pipe_network/N2 = supply.return_network(supply) + if(N1 && N2) + N1.merge(N2) + if(scrubbers_node) + var/datum/pipe_network/N1 = scrubbers_node.return_network(src) + var/datum/pipe_network/N2 = scrubbers.return_network(scrubbers) + if(N1 && N2) + N1.merge(N2) + if(aux_node) + var/datum/pipe_network/N1 = aux_node.return_network(src) + var/datum/pipe_network/N2 = aux.return_network(aux) + if(N1 && N2) + N1.merge(N2) + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + update_icon() + icon_state = "split-t[invisibility ? "-f" : "" ]" + + return_network(obj/machinery/atmospherics/reference) + var/obj/machinery/atmospherics/A + + A = supply_node.return_network(reference) + if(!A) + A = scrubbers_node.return_network(reference) + if(!A) + A = aux_node.return_network(reference) + + return A + + hidden + level = 1 + icon_state = "split-t-f" + + visible + level = 2 + icon_state = "split-t" + +obj/machinery/atmospherics/mains_pipe/cap + name = "pipe cap" + desc = "A cap for the end of a mains pipe" + + dir = SOUTH + initialize_directions = SOUTH + volume = 35 + + New() + nodes.len = 1 + ..() + initialize_mains_directions = dir + + update_icon() + icon_state = "cap[invisibility ? "-f" : ""]" + + initialize() + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + + ..() + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + update_icon() + + hidden + level = 1 + icon_state = "cap-f" + + visible + level = 2 + icon_state = "cap" + +obj/machinery/atmospherics/mains_pipe/valve + icon_state = "mvalve0" + + name = "mains shutoff valve" + desc = "A mains pipe valve" + + var/open = 1 + + dir = SOUTH + initialize_mains_directions = SOUTH|NORTH + + New() + nodes.len = 2 + ..() + initialize_mains_directions = dir | turn(dir, 180) + + update_icon(animation) + var/turf/simulated/floor = loc + var/hide = istype(floor) ? floor.intact : 0 + level = 1 + for(var/obj/machinery/atmospherics/mains_pipe/node in nodes) + if(node.level == 2) + hide = 0 + level = 2 + break + + if(animation) + flick("[hide?"h":""]mvalve[src.open][!src.open]",src) + else + icon_state = "[hide?"h":""]mvalve[open]" + + initialize() + normalize_dir() + var/node1_dir + var/node2_dir + + for(var/direction in cardinal) + if(direction&initialize_mains_directions) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[1] = target + break + for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) + if(target.initialize_mains_directions & get_dir(target,src)) + nodes[2] = target + break + + if(open) + ..() // initialize internal pipes + + update_icon() + + proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 + + proc/open() + if(open) return 0 + + open = 1 + update_icon() + + initialize() + + return 1 + + proc/close() + if(!open) return 0 + + open = 0 + update_icon() + + for(var/obj/machinery/atmospherics/pipe/mains_component/node in src) + for(var/obj/machinery/atmospherics/pipe/mains_component/o in node.nodes) + o.disconnect(node) + o.build_network() + + return 1 + + attack_ai(mob/user as mob) + return + + attack_paw(mob/user as mob) + return attack_hand(user) + + attack_hand(mob/user as mob) + src.add_fingerprint(usr) + update_icon(1) + sleep(10) + if (open) + close() + else + open() + + digital // can be controlled by AI + name = "digital mains valve" + desc = "A digitally controlled valve." + icon_state = "dvalve0" + + attack_ai(mob/user as mob) + return src.attack_hand(user) + + attack_hand(mob/user as mob) + if(!src.allowed(user)) + user << "\red Access denied." + return + ..() + + //Radio remote control + + proc + set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) + + var/frequency = 0 + var/id = null + var/datum/radio_frequency/radio_connection + + initialize() + ..() + if(frequency) + set_frequency(frequency) + + update_icon(animation) + var/turf/simulated/floor = loc + var/hide = istype(floor) ? floor.intact : 0 + level = 1 + for(var/obj/machinery/atmospherics/mains_pipe/node in nodes) + if(node.level == 2) + hide = 0 + level = 2 + break + + if(animation) + flick("[hide?"h":""]dvalve[src.open][!src.open]",src) + else + icon_state = "[hide?"h":""]dvalve[open]" + + receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id)) + return 0 + + switch(signal.data["command"]) + if("valve_open") + if(!open) + open() + + if("valve_close") + if(open) + close() + + if("valve_toggle") + if(open) + close() + else + open() \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index f155cd3ff55..be2a97a4201 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -579,6 +579,22 @@ ///////////////////////////////////////Stock Parts ///////////////////////////////// +/obj/item/weapon/storage/part_replacer + name = "Rapid Part Exchange Device" + desc = "Special mechanical module made to store, sort, and apply standard machine parts." + icon_state = "RPED" + item_state = "RPED" + w_class = 5 + can_hold = list(/obj/item/weapon/stock_parts) + storage_slots = 14 + use_to_pickup = 1 + allow_quick_gather = 1 + allow_quick_empty = 1 + collection_mode = 1 + max_w_class = 3 + max_combined_w_class = 28 + + /obj/item/weapon/stock_parts name = "stock part" desc = "What?" diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2fb8bb1393e..ee520bd173a 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -304,3 +304,30 @@ Class Procs: state(text, "blue") playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) +/obj/machinery/proc/exchange_parts(mob/user, obj/item/weapon/storage/part_replacer/W) + if(istype(W) && component_parts) + if(panel_open) + var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts + var/P + for(var/obj/item/weapon/stock_parts/A in component_parts) + for(var/D in CB.req_components) + if(ispath(A.type, text2path(D))) + P = text2path(D) + break + for(var/obj/item/weapon/stock_parts/B in W.contents) + if(istype(B, P) && istype(A, P)) + if(B.rating > A.rating) + W.remove_from_storage(B, src) + W.handle_item_insertion(A, 1) + component_parts -= A + component_parts += B + B.loc = null + user << "[A.name] replaced with [B.name]." + break + RefreshParts() + else + user << "Following parts detected in the machine:" + for(var/var/obj/item/C in component_parts) + user << " [C.name]" + return 1 + return 0 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index c00e98f1ef9..f440ddbe399 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -952,6 +952,16 @@ datum/design/tech_disk /////////////Stock Parts//////////////// //////////////////////////////////////// +datum/design/RPED + name = "Rapid Part Exchange Device" + desc = "Special mechanical module made to store, sort, and apply standard machine parts." + id = "rped" + req_tech = list("engineering" = 3, + "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 15000, "$glass" = 5000) //hardcore + build_path = /obj/item/weapon/storage/part_replacer + datum/design/basic_capacitor name = "Basic Capacitor" desc = "A stock part used in the construction of various devices." diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index bb6610bcc30b47b1a5160cc2a00c912665f6be5e..4b626cd83a93056f945ff6fc0c356d3635eb77ad 100644 GIT binary patch delta 20222 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 KMNUMnLSTYL>jvon delta 19435 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 Date: Sat, 24 May 2014 09:06:23 -0700 Subject: [PATCH 2/2] Fixes borked WIP files --- baystation12.dme | 76 ++- code/WorkInProgress/Tastyfish/mainspipe.dm | 703 --------------------- 2 files changed, 72 insertions(+), 707 deletions(-) delete mode 100644 code/WorkInProgress/Tastyfish/mainspipe.dm diff --git a/baystation12.dme b/baystation12.dme index 113bcecab76..68882234e80 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -5,6 +5,74 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR "code" +#define FILE_DIR "code/TriDimension" +#define FILE_DIR "code/unused" +#define FILE_DIR "code/unused/goonheist" +#define FILE_DIR "code/WorkInProgress" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jungle" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/ShieldGen" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" +#define FILE_DIR "code/WorkInProgress/Susan" +#define FILE_DIR "html" +#define FILE_DIR "icons" +#define FILE_DIR "icons/48x48" +#define FILE_DIR "icons/ass" +#define FILE_DIR "icons/effects" +#define FILE_DIR "icons/mecha" +#define FILE_DIR "icons/misc" +#define FILE_DIR "icons/mob" +#define FILE_DIR "icons/mob/human_races" +#define FILE_DIR "icons/mob/in-hand" +#define FILE_DIR "icons/mob/in-hand/left" +#define FILE_DIR "icons/mob/in-hand/right" +#define FILE_DIR "icons/mob/otherHuman" +#define FILE_DIR "icons/mob/species" +#define FILE_DIR "icons/mob/species/vox" +#define FILE_DIR "icons/mob/species/vox/armalis" +#define FILE_DIR "icons/mob/spirits" +#define FILE_DIR "icons/NTOS" +#define FILE_DIR "icons/obj" +#define FILE_DIR "icons/obj/assemblies" +#define FILE_DIR "icons/obj/atmospherics" +#define FILE_DIR "icons/obj/clothing" +#define FILE_DIR "icons/obj/doors" +#define FILE_DIR "icons/obj/flora" +#define FILE_DIR "icons/obj/machines" +#define FILE_DIR "icons/obj/pipes" +#define FILE_DIR "icons/obj/power_cond" +#define FILE_DIR "icons/pda_icons" +#define FILE_DIR "icons/pods" +#define FILE_DIR "icons/spideros_icons" +#define FILE_DIR "icons/stamp_icons" +#define FILE_DIR "icons/Testing" +#define FILE_DIR "icons/turf" +#define FILE_DIR "icons/vending_icons" +#define FILE_DIR "nano" +#define FILE_DIR "nano/images" +#define FILE_DIR "sound" +#define FILE_DIR "sound/AI" +#define FILE_DIR "sound/ambience" +#define FILE_DIR "sound/effects" +#define FILE_DIR "sound/effects/turret" +#define FILE_DIR "sound/effects/wind" +#define FILE_DIR "sound/hallucinations" +#define FILE_DIR "sound/items" +#define FILE_DIR "sound/machines" +#define FILE_DIR "sound/mecha" +#define FILE_DIR "sound/misc" +#define FILE_DIR "sound/music" +#define FILE_DIR "sound/piano" +#define FILE_DIR "sound/turntable" +#define FILE_DIR "sound/violin" +#define FILE_DIR "sound/voice" +#define FILE_DIR "sound/voice/complionator" +#define FILE_DIR "sound/voice/Serithi" +#define FILE_DIR "sound/vox" +#define FILE_DIR "sound/vox_fem" +#define FILE_DIR "sound/weapons" // END_FILE_DIR // BEGIN_PREFERENCES #define DEBUG @@ -883,10 +951,10 @@ #include "code\modules\customitems\item_spawning.dm" #include "code\modules\customitems\definitions\base.dm" #include "code\modules\destilery\main.dm" -#include "code\modules\detectivework\detective_work.dm" -#include "code\modules\detectivework\evidence.dm" -#include "code\modules\detectivework\footprints_and_rag.dm" -#include "code\modules\detectivework\scanner.dm" +#include "code\modules\DetectiveWork\detective_work.dm" +#include "code\modules\DetectiveWork\evidence.dm" +#include "code\modules\DetectiveWork\footprints_and_rag.dm" +#include "code\modules\DetectiveWork\scanner.dm" #include "code\modules\economy\Accounts.dm" #include "code\modules\economy\Accounts_DB.dm" #include "code\modules\economy\ATM.dm" diff --git a/code/WorkInProgress/Tastyfish/mainspipe.dm b/code/WorkInProgress/Tastyfish/mainspipe.dm deleted file mode 100644 index e2b3acde640..00000000000 --- a/code/WorkInProgress/Tastyfish/mainspipe.dm +++ /dev/null @@ -1,703 +0,0 @@ -// internal pipe, don't actually place or use these -obj/machinery/atmospherics/pipe/mains_component - var/obj/machinery/atmospherics/mains_pipe/parent_pipe - var/list/obj/machinery/atmospherics/pipe/mains_component/nodes = new() - - New(loc) - ..(loc) - parent_pipe = loc - - check_pressure(pressure) - var/datum/gas_mixture/environment = loc.loc.return_air() - - var/pressure_difference = pressure - environment.return_pressure() - - if(pressure_difference > parent_pipe.maximum_pressure) - mains_burst() - - else if(pressure_difference > parent_pipe.fatigue_pressure) - //TODO: leak to turf, doing pfshhhhh - if(prob(5)) - mains_burst() - - else return 1 - - pipeline_expansion() - return nodes - - disconnect(obj/machinery/atmospherics/reference) - if(nodes.Find(reference)) - nodes.Remove(reference) - - proc/mains_burst() - parent_pipe.burst() - -obj/machinery/atmospherics/mains_pipe - icon = 'icons/obj/atmospherics/mainspipe.dmi' - layer = 2.4 //under wires with their 2.5 - - var/volume = 0 - var/force = 20 - - var/alert_pressure = 80*ONE_ATMOSPHERE - - var/initialize_mains_directions = 0 - - var/list/obj/machinery/atmospherics/mains_pipe/nodes = new() - var/obj/machinery/atmospherics/pipe/mains_component/supply - var/obj/machinery/atmospherics/pipe/mains_component/scrubbers - var/obj/machinery/atmospherics/pipe/mains_component/aux - - var/minimum_temperature_difference = 300 - var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No - - var/maximum_pressure = 70*ONE_ATMOSPHERE - var/fatigue_pressure = 55*ONE_ATMOSPHERE - alert_pressure = 55*ONE_ATMOSPHERE - - New() - ..() - - supply = new(src) - supply.volume = volume - supply.nodes.len = nodes.len - scrubbers = new(src) - scrubbers.volume = volume - scrubbers.nodes.len = nodes.len - aux = new(src) - aux.volume = volume - aux.nodes.len = nodes.len - - hide(var/i) - if(level == 1 && istype(loc, /turf/simulated)) - invisibility = i ? 101 : 0 - update_icon() - - proc/burst() - ..() - for(var/obj/machinery/atmospherics/pipe/mains_component/pipe in contents) - burst() - - proc/check_pressure(pressure) - var/datum/gas_mixture/environment = loc.return_air() - - var/pressure_difference = pressure - environment.return_pressure() - - if(pressure_difference > maximum_pressure) - burst() - - else if(pressure_difference > fatigue_pressure) - //TODO: leak to turf, doing pfshhhhh - if(prob(5)) - burst() - - else return 1 - - disconnect() - ..() - for(var/obj/machinery/atmospherics/pipe/mains_component/node in nodes) - node.disconnect() - - Del() - disconnect() - ..() - - initialize() - for(var/i = 1 to nodes.len) - var/obj/machinery/atmospherics/mains_pipe/node = nodes[i] - if(node) - supply.nodes[i] = node.supply - scrubbers.nodes[i] = node.scrubbers - aux.nodes[i] = node.aux - -obj/machinery/atmospherics/mains_pipe/simple - name = "mains pipe" - desc = "A one meter section of 3-line mains pipe" - - dir = SOUTH - initialize_mains_directions = SOUTH|NORTH - - New() - nodes.len = 2 - ..() - switch(dir) - if(SOUTH || NORTH) - initialize_mains_directions = SOUTH|NORTH - if(EAST || WEST) - initialize_mains_directions = EAST|WEST - if(NORTHEAST) - initialize_mains_directions = NORTH|EAST - if(NORTHWEST) - initialize_mains_directions = NORTH|WEST - if(SOUTHEAST) - initialize_mains_directions = SOUTH|EAST - if(SOUTHWEST) - initialize_mains_directions = SOUTH|WEST - - proc/normalize_dir() - if(dir==3) - dir = 1 - else if(dir==12) - dir = 4 - - update_icon() - if(nodes[1] && nodes[2]) - icon_state = "intact[invisibility ? "-f" : "" ]" - - //var/node1_direction = get_dir(src, node1) - //var/node2_direction = get_dir(src, node2) - - //dir = node1_direction|node2_direction - - else - if(!nodes[1]&&!nodes[2]) - del(src) //TODO: silent deleting looks weird - var/have_node1 = nodes[1]?1:0 - var/have_node2 = nodes[2]?1:0 - icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" - - initialize() - normalize_dir() - var/node1_dir - var/node2_dir - - for(var/direction in cardinal) - if(direction&initialize_mains_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - break - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[2] = target - break - - ..() // initialize internal pipes - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - - hidden - level = 1 - icon_state = "intact-f" - - visible - level = 2 - icon_state = "intact" - -obj/machinery/atmospherics/mains_pipe/manifold - name = "manifold pipe" - desc = "A manifold composed of mains pipes" - - dir = SOUTH - initialize_mains_directions = EAST|NORTH|WEST - volume = 105 - - New() - nodes.len = 3 - ..() - initialize_mains_directions = (NORTH|SOUTH|EAST|WEST) & ~dir - - initialize() - var/connect_directions = initialize_mains_directions - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - connect_directions &= ~direction - break - if (nodes[1]) - break - - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[2] = target - connect_directions &= ~direction - break - if (nodes[2]) - break - - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,direction)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[3] = target - connect_directions &= ~direction - break - if (nodes[3]) - break - - ..() // initialize internal pipes - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - - update_icon() - icon_state = "manifold[invisibility ? "-f" : "" ]" - - hidden - level = 1 - icon_state = "manifold-f" - - visible - level = 2 - icon_state = "manifold" - -obj/machinery/atmospherics/mains_pipe/manifold4w - name = "manifold pipe" - desc = "A manifold composed of mains pipes" - - dir = SOUTH - initialize_mains_directions = EAST|NORTH|WEST|SOUTH - volume = 105 - - New() - nodes.len = 4 - ..() - - initialize() - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,NORTH)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - break - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,SOUTH)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[2] = target - break - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,EAST)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[3] = target - break - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,WEST)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[3] = target - break - - ..() // initialize internal pipes - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - - update_icon() - icon_state = "manifold4w[invisibility ? "-f" : "" ]" - - hidden - level = 1 - icon_state = "manifold4w-f" - - visible - level = 2 - icon_state = "manifold4w" - -obj/machinery/atmospherics/mains_pipe/split - name = "mains splitter" - desc = "A splitter for connecting to a single pipe off a mains." - - var/obj/machinery/atmospherics/pipe/mains_component/split_node - var/obj/machinery/atmospherics/node3 - var/icon_type - - New() - nodes.len = 2 - ..() - initialize_mains_directions = turn(dir, 90) | turn(dir, -90) - initialize_directions = dir // actually have a normal connection too - - initialize() - var/node1_dir - var/node2_dir - var/node3_dir - - node1_dir = turn(dir, 90) - node2_dir = turn(dir, -90) - node3_dir = dir - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - break - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[2] = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir)) - if(target.initialize_directions & get_dir(target,src)) - node3 = target - break - - ..() // initialize internal pipes - - // bind them - spawn(5) - if(node3 && split_node) - var/datum/pipe_network/N1 = node3.return_network(src) - var/datum/pipe_network/N2 = split_node.return_network(split_node) - if(N1 && N2) - N1.merge(N2) - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - - update_icon() - icon_state = "split-[icon_type][invisibility ? "-f" : "" ]" - - return_network(A) - return split_node.return_network(A) - - supply - icon_type = "supply" - - New() - ..() - split_node = supply - - hidden - level = 1 - icon_state = "split-supply-f" - - visible - level = 2 - icon_state = "split-supply" - - scrubbers - icon_type = "scrubbers" - - New() - ..() - split_node = scrubbers - - hidden - level = 1 - icon_state = "split-scrubbers-f" - - visible - level = 2 - icon_state = "split-scrubbers" - - aux - icon_type = "aux" - - New() - ..() - split_node = aux - - hidden - level = 1 - icon_state = "split-aux-f" - - visible - level = 2 - icon_state = "split-aux" - -obj/machinery/atmospherics/mains_pipe/split3 - name = "triple mains splitter" - desc = "A splitter for connecting to the 3 pipes on a mainline." - - var/obj/machinery/atmospherics/supply_node - var/obj/machinery/atmospherics/scrubbers_node - var/obj/machinery/atmospherics/aux_node - - New() - nodes.len = 1 - ..() - initialize_mains_directions = dir - initialize_directions = cardinal & ~dir // actually have a normal connection too - - initialize() - var/node1_dir - var/supply_node_dir - var/scrubbers_node_dir - var/aux_node_dir - - node1_dir = dir - aux_node_dir = turn(dir, 180) - if(dir & (NORTH|SOUTH)) - supply_node_dir = EAST - scrubbers_node_dir = WEST - else - supply_node_dir = SOUTH - scrubbers_node_dir = NORTH - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src, node1_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,supply_node_dir)) - if(target.initialize_directions & get_dir(target,src)) - supply_node = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,scrubbers_node_dir)) - if(target.initialize_directions & get_dir(target,src)) - scrubbers_node = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,aux_node_dir)) - if(target.initialize_directions & get_dir(target,src)) - aux_node = target - break - - ..() // initialize internal pipes - - // bind them - spawn(5) - if(supply_node) - var/datum/pipe_network/N1 = supply_node.return_network(src) - var/datum/pipe_network/N2 = supply.return_network(supply) - if(N1 && N2) - N1.merge(N2) - if(scrubbers_node) - var/datum/pipe_network/N1 = scrubbers_node.return_network(src) - var/datum/pipe_network/N2 = scrubbers.return_network(scrubbers) - if(N1 && N2) - N1.merge(N2) - if(aux_node) - var/datum/pipe_network/N1 = aux_node.return_network(src) - var/datum/pipe_network/N2 = aux.return_network(aux) - if(N1 && N2) - N1.merge(N2) - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - - update_icon() - icon_state = "split-t[invisibility ? "-f" : "" ]" - - return_network(obj/machinery/atmospherics/reference) - var/obj/machinery/atmospherics/A - - A = supply_node.return_network(reference) - if(!A) - A = scrubbers_node.return_network(reference) - if(!A) - A = aux_node.return_network(reference) - - return A - - hidden - level = 1 - icon_state = "split-t-f" - - visible - level = 2 - icon_state = "split-t" - -obj/machinery/atmospherics/mains_pipe/cap - name = "pipe cap" - desc = "A cap for the end of a mains pipe" - - dir = SOUTH - initialize_directions = SOUTH - volume = 35 - - New() - nodes.len = 1 - ..() - initialize_mains_directions = dir - - update_icon() - icon_state = "cap[invisibility ? "-f" : ""]" - - initialize() - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - break - - ..() - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - update_icon() - - hidden - level = 1 - icon_state = "cap-f" - - visible - level = 2 - icon_state = "cap" - -obj/machinery/atmospherics/mains_pipe/valve - icon_state = "mvalve0" - - name = "mains shutoff valve" - desc = "A mains pipe valve" - - var/open = 1 - - dir = SOUTH - initialize_mains_directions = SOUTH|NORTH - - New() - nodes.len = 2 - ..() - initialize_mains_directions = dir | turn(dir, 180) - - update_icon(animation) - var/turf/simulated/floor = loc - var/hide = istype(floor) ? floor.intact : 0 - level = 1 - for(var/obj/machinery/atmospherics/mains_pipe/node in nodes) - if(node.level == 2) - hide = 0 - level = 2 - break - - if(animation) - flick("[hide?"h":""]mvalve[src.open][!src.open]",src) - else - icon_state = "[hide?"h":""]mvalve[open]" - - initialize() - normalize_dir() - var/node1_dir - var/node2_dir - - for(var/direction in cardinal) - if(direction&initialize_mains_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node1_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[1] = target - break - for(var/obj/machinery/atmospherics/mains_pipe/target in get_step(src,node2_dir)) - if(target.initialize_mains_directions & get_dir(target,src)) - nodes[2] = target - break - - if(open) - ..() // initialize internal pipes - - update_icon() - - proc/normalize_dir() - if(dir==3) - dir = 1 - else if(dir==12) - dir = 4 - - proc/open() - if(open) return 0 - - open = 1 - update_icon() - - initialize() - - return 1 - - proc/close() - if(!open) return 0 - - open = 0 - update_icon() - - for(var/obj/machinery/atmospherics/pipe/mains_component/node in src) - for(var/obj/machinery/atmospherics/pipe/mains_component/o in node.nodes) - o.disconnect(node) - o.build_network() - - return 1 - - attack_ai(mob/user as mob) - return - - attack_paw(mob/user as mob) - return attack_hand(user) - - attack_hand(mob/user as mob) - src.add_fingerprint(usr) - update_icon(1) - sleep(10) - if (open) - close() - else - open() - - digital // can be controlled by AI - name = "digital mains valve" - desc = "A digitally controlled valve." - icon_state = "dvalve0" - - attack_ai(mob/user as mob) - return src.attack_hand(user) - - attack_hand(mob/user as mob) - if(!src.allowed(user)) - user << "\red Access denied." - return - ..() - - //Radio remote control - - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA) - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - - initialize() - ..() - if(frequency) - set_frequency(frequency) - - update_icon(animation) - var/turf/simulated/floor = loc - var/hide = istype(floor) ? floor.intact : 0 - level = 1 - for(var/obj/machinery/atmospherics/mains_pipe/node in nodes) - if(node.level == 2) - hide = 0 - level = 2 - break - - if(animation) - flick("[hide?"h":""]dvalve[src.open][!src.open]",src) - else - icon_state = "[hide?"h":""]dvalve[open]" - - receive_signal(datum/signal/signal) - if(!signal.data["tag"] || (signal.data["tag"] != id)) - return 0 - - switch(signal.data["command"]) - if("valve_open") - if(!open) - open() - - if("valve_close") - if(open) - close() - - if("valve_toggle") - if(open) - close() - else - open() \ No newline at end of file