From 9ec10f97c80ad48cee031775e4b28ece7d0b8d5b Mon Sep 17 00:00:00 2001 From: Mechoid Date: Thu, 20 Aug 2020 18:22:39 -0700 Subject: [PATCH] Reagent Hoses (#7386) * Starts work on basic reagent hose machinery. * Continue Work, Add Spray Nozzle * Tubing is craftable. * Changeling * Upkeep * TRUE --- code/__defines/hoses.dm | 3 + code/datums/autolathe/tools.dm | 12 + code/datums/beam.dm | 20 +- code/datums/supplypacks/misc.dm | 9 + code/game/machinery/reagents/pump.dm | 270 ++++++++++++++++++ .../circuitboards/machinery/fluidpump.dm | 14 + code/modules/materials/material_recipes.dm | 1 + code/modules/mining/mineral_effect.dm | 3 + code/modules/mining/ore_datum.dm | 12 + code/modules/mob/_modifiers/medical.dm | 10 + .../Chemistry-Reagents-Modifiers.dm | 11 + .../Chemistry-Reagents-Other.dm | 8 + .../Chemistry-Reagents-Toxins.dm | 7 + code/modules/reagents/hoses/connector.dm | 138 +++++++++ code/modules/reagents/hoses/hose.dm | 113 ++++++++ code/modules/reagents/hoses/hose_connector.dm | 92 ++++++ .../reagents/reagent_containers/spray.dm | 95 +++++- code/modules/reagents/reagent_dispenser.dm | 17 +- html/changelogs/mechoid - reagenthoses.yml | 37 +++ icons/effects/beam.dmi | Bin 120269 -> 120296 bytes icons/obj/janitor.dmi | Bin 17911 -> 17043 bytes icons/obj/machines/reagent.dmi | Bin 1748 -> 8928 bytes polaris.dme | 6 + 23 files changed, 871 insertions(+), 7 deletions(-) create mode 100644 code/__defines/hoses.dm create mode 100644 code/game/machinery/reagents/pump.dm create mode 100644 code/game/objects/items/weapons/circuitboards/machinery/fluidpump.dm create mode 100644 code/modules/reagents/hoses/connector.dm create mode 100644 code/modules/reagents/hoses/hose.dm create mode 100644 code/modules/reagents/hoses/hose_connector.dm create mode 100644 html/changelogs/mechoid - reagenthoses.yml diff --git a/code/__defines/hoses.dm b/code/__defines/hoses.dm new file mode 100644 index 0000000000..2a7bd4d803 --- /dev/null +++ b/code/__defines/hoses.dm @@ -0,0 +1,3 @@ +#define HOSE_INPUT "Input"// Only pull liquid. +#define HOSE_OUTPUT "Output"// Only push liquid. +#define HOSE_NEUTRAL "Neutral"// Equalize liquids, not super efficient, can waste reagents due to rounding. \ No newline at end of file diff --git a/code/datums/autolathe/tools.dm b/code/datums/autolathe/tools.dm index d0aa2aa196..9e9a87ea71 100644 --- a/code/datums/autolathe/tools.dm +++ b/code/datums/autolathe/tools.dm @@ -42,3 +42,15 @@ /datum/category_item/autolathe/tools/welder_industrial name = "industrial welding tool" path =/obj/item/weapon/weldingtool/largetank + +/datum/category_item/autolathe/tools/spraybottle + name = "spray bottle" + path = /obj/item/weapon/reagent_containers/spray + resources = list(MAT_PLASTIC = 2000) + +/datum/category_item/autolathe/tools/spraynozzle + name = "spray nozzle" + path = /obj/item/weapon/reagent_containers/spray + resources = list(MAT_PLASTIC = 5000, DEFAULT_WALL_MATERIAL = 2000) + hidden = 1 + man_rating = 2 diff --git a/code/datums/beam.dm b/code/datums/beam.dm index a35abf8c37..fc4e696702 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -6,6 +6,7 @@ var/icon/base_icon = null var/icon var/icon_state = "" //icon state of the main segments of the beam + var/beam_color = null // Color of the beam segments var/max_distance = 0 var/endtime = 0 var/sleep_time = 3 @@ -15,7 +16,7 @@ var/static_beam = 0 var/beam_type = /obj/effect/ebeam //must be subtype -/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3) +/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3,new_beam_color = null) endtime = world.time+time origin = beam_origin origin_oldloc = get_turf(origin) @@ -28,6 +29,8 @@ base_icon = new(beam_icon,beam_icon_state) icon = beam_icon icon_state = beam_icon_state + if(new_beam_color) + beam_color = new_beam_color beam_type = btype /datum/beam/proc/Start() @@ -68,9 +71,12 @@ var/matrix/rot_matrix = matrix() rot_matrix.Turn(Angle) + var/turf/T_target = get_turf(target) //Turfs are referenced instead of the objects directly so that beams will link between 2 objects inside other objects. + var/turf/T_origin = get_turf(origin) + //Translation vector for origin and target - var/DX = (32*target.x+target.pixel_x)-(32*origin.x+origin.pixel_x) - var/DY = (32*target.y+target.pixel_y)-(32*origin.y+origin.pixel_y) + var/DX = (32*T_target.x+target.pixel_x)-(32*T_origin.x+origin.pixel_x) + var/DY = (32*T_target.y+target.pixel_y)-(32*T_origin.y+origin.pixel_y) var/N = 0 var/length = round(sqrt((DX)**2+(DY)**2)) //hypotenuse of the triangle formed by target and origin's displacement @@ -78,6 +84,10 @@ if(QDELETED(src) || finished) break var/obj/effect/ebeam/X = new beam_type(origin_oldloc) + + if(beam_color) + X.color = beam_color + X.owner = src elements |= X @@ -184,8 +194,8 @@ -/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3) - var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time) +/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time=3,beam_color = null) + var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time,beam_color) spawn(0) newbeam.Start() return newbeam diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 40b8c33670..72d20b0686 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -179,3 +179,12 @@ cost = 40 containertype = /obj/structure/closet/crate/zenghu containername = "emergency rations" + +/datum/supply_pack/misc/reagentpump + name = "Machine - Pump" + contains = list( + /obj/machinery/pump = 1 + ) + cost = 60 + containertype = /obj/structure/closet/crate/large/xion + containername = "pump crate" diff --git a/code/game/machinery/reagents/pump.dm b/code/game/machinery/reagents/pump.dm new file mode 100644 index 0000000000..04916d4d9b --- /dev/null +++ b/code/game/machinery/reagents/pump.dm @@ -0,0 +1,270 @@ + +/obj/machinery/pump + name = "fluid pump" + desc = "A fluid pumping machine." + + description_info = "A machine that can pump fluid from certain turfs.
\ + Water can be pumped from any body of water. Certain locations or environmental\ + conditions can cause different byproducts to be produced.
\ + Magma or Lava can be pumped to produce mineralized fluid." + + anchored = 0 + density = 1 + + icon = 'icons/obj/machines/reagent.dmi' + icon_state = "pump" + + circuit = /obj/item/weapon/circuitboard/fluidpump + + var/on = 0 + var/obj/item/weapon/cell/cell = null + var/use = 200 + var/efficiency = 1 + var/reagents_per_cycle = 40 + var/unlocked = 0 + var/open = 0 + + var/obj/item/hose_connector/output/Output + +// Overlay cache vars. + var/icon/liquid + var/icon/tank + var/icon/powerlow + var/icon/glass + var/icon/open_overlay + var/icon/cell_overlay + +/obj/machinery/pump/Initialize() + create_reagents(200) + . = ..() + default_apply_parts() + + if(ispath(cell)) + cell = new cell(src) + + Output = new(src) + + RefreshParts() + update_icon() + +/obj/machinery/pump/update_icon() + ..() + if(!tank) + tank = new/icon(icon, "[icon_state]-volume") + + if(!powerlow) + powerlow = new/icon(icon, "[icon_state]-lowpower") + + if(!liquid) + var/icon/cutter = new/icon(icon, "[icon_state]-volume") + + cutter.Blend(rgb(0, 0, 0,), ICON_MULTIPLY) + + liquid = new/icon(icon, "[icon_state]-cutting") + + liquid.Blend(cutter,ICON_AND) + + if(!glass) + glass = new/icon(icon, "[icon_state]-glass") + + glass.Blend(rgb(1,1,1,0.5), ICON_MULTIPLY) + + if(!open_overlay) + open_overlay = new/icon(icon, "[icon_state]-open") + + if(!cell_overlay) + cell_overlay = new/icon(icon, "[icon_state]-cell") + + cut_overlays() + add_overlay(tank) + + if(cell && cell.charge < (use * CELLRATE / efficiency)) + add_overlay(powerlow) + + if(reagents.total_volume >= 1) + var/list/hextorgb = hex2rgb(reagents.get_color()) + liquid.GrayScale() + + liquid.Blend(rgb(hextorgb[1],hextorgb[2],hextorgb[3]),ICON_MULTIPLY) + + add_overlay(liquid) + + add_overlay(glass) + + if(open) + add_overlay(open_overlay) + + if(cell) + add_overlay(cell_overlay) + + if(on) + icon_state = "[initial(icon_state)]-running" + + else + icon_state = "[initial(icon_state)]" + +/obj/machinery/pump/process() + if(Output.get_pairing()) + reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume) + if(prob(5)) + visible_message("\The [src] gurgles as it exports fluid.") + + if(!on) + return + + if(!cell || (cell.charge < (use * CELLRATE / efficiency))) + turn_off(TRUE) + return + + handle_pumping() + update_icon() + +/obj/machinery/pump/RefreshParts() + for(var/obj/item/weapon/stock_parts/manipulator/SM in component_parts) + efficiency = SM.rating + + var/total_bin_rating = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/SB in component_parts) + total_bin_rating += SB.rating + + reagents.maximum_volume = round(initial(reagents.maximum_volume) + 100 * total_bin_rating) + + return + +/obj/machinery/pump/power_change() + if(!cell || cell.charge < (use * CELLRATE) || !anchored) + return turn_off(TRUE) + + return FALSE + + +// Returns 0 on failure and 1 on success +/obj/machinery/pump/proc/turn_on(var/loud = 0) + if(!cell) + return 0 + if(cell.charge < (use * CELLRATE)) + return 0 + + on = 1 + update_icon() + if(loud) + visible_message("\The [src] turns on.") + return 1 + +/obj/machinery/pump/proc/turn_off(var/loud = 0) + on = 0 + set_light(0, 0) + update_icon() + if(loud) + visible_message("\The [src] shuts down.") + + if(!on) + return TRUE + + return FALSE + +/obj/machinery/pump/attack_ai(mob/user as mob) + if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) + return attack_hand(user) + + if(on) + turn_off(TRUE) + else + if(!turn_on(1)) + to_chat(user, "You try to turn on \the [src] but it does not work.") + +/obj/machinery/pump/attack_hand(mob/user as mob) + if(open && cell) + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(cell) + cell.loc = user.loc + else + cell.loc = src.loc + + cell.add_fingerprint(user) + cell.update_icon() + + cell = null + on = 0 + set_light(0) + to_chat(user, "You remove the power cell.") + update_icon() + return + + if(on) + turn_off(TRUE) + else if(anchored) + if(!turn_on(1)) + to_chat(user, "You try to turn on \the [src] but it does not work.") + + update_icon() + +/obj/machinery/pump/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(W.is_screwdriver()) + if(!open) + if(unlocked) + unlocked = 0 + to_chat(user, "You screw the battery panel in place.") + else + unlocked = 1 + to_chat(user, "You unscrew the battery panel.") + + else if(W.is_crowbar()) + if(unlocked) + if(open) + open = 0 + overlays = null + to_chat(user, "You crowbar the battery panel in place.") + else + if(unlocked) + open = 1 + to_chat(user, "You remove the battery panel.") + + else if(W.is_wrench()) + if(on) + to_chat(user, "\The [src] is active. Turn it off before trying to move it!") + return + default_unfasten_wrench(user, W, 2 SECONDS) + + else if(istype(W, /obj/item/weapon/cell)) + if(open) + if(cell) + to_chat(user, "There is a power cell already installed.") + else + user.drop_item() + W.loc = src + cell = W + to_chat(user, "You insert the power cell.") + else + ..() + RefreshParts() + update_icon() + +/obj/machinery/pump/proc/handle_pumping() + var/turf/T = get_turf(src) + + if(istype(T, /turf/simulated/floor/water)) + cell.use(use * CELLRATE / efficiency) + reagents.add_reagent("water", reagents_per_cycle) + + if(T.temperature <= T0C) + reagents.add_reagent("ice", round(reagents_per_cycle / 2, 0.1)) + + if((istype(T,/turf/simulated/floor/water/pool) || istype(T,/turf/simulated/floor/water/deep/pool))) + reagents.add_reagent("chlorine", round(reagents_per_cycle / 10 * efficiency, 0.1)) + + else if(istype(T,/turf/simulated/floor/water/contaminated)) + reagents.add_reagent("vatstabilizer", round(reagents_per_cycle / 2)) + + if(T.loc.name == "Sea") // Saltwater. + reagents.add_reagent("sodiumchloride", round(reagents_per_cycle / 10 * efficiency, 0.1)) + + for(var/turf/simulated/mineral/MT in range(5)) + if(MT.mineral) + var/obj/effect/mineral/OR = MT.mineral + reagents.add_reagent(OR.ore_reagent, round(reagents_per_cycle / 20 * efficiency, 0.1)) + + else if(istype(T, /turf/simulated/floor/lava)) + cell.use(use * CELLRATE / efficiency * 4) + reagents.add_reagent("mineralizedfluid", round(reagents_per_cycle * efficiency / 2, 0.1)) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/fluidpump.dm b/code/game/objects/items/weapons/circuitboards/machinery/fluidpump.dm new file mode 100644 index 0000000000..3646d7311a --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/fluidpump.dm @@ -0,0 +1,14 @@ + +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/fluidpump + name = T_BOARD("fluid pump") + build_path = /obj/machinery/pump + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_DATA = 1) + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/motor = 2, + /obj/item/weapon/stock_parts/manipulator = 1) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index b5d2863f4a..e981c1130c 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -138,6 +138,7 @@ recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS) + recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE) /material/wood/generate_recipes() ..() diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm index 5f8daed8d1..12781a7ea4 100644 --- a/code/modules/mining/mineral_effect.dm +++ b/code/modules/mining/mineral_effect.dm @@ -7,11 +7,14 @@ anchored = 1 var/ore_key var/image/scanner_image + var/ore_reagent // Reagent from pumping water near this ore. /obj/effect/mineral/New(var/newloc, var/ore/M) ..(newloc) name = "[M.display_name] deposit" ore_key = M.name + if(M.reagent) + ore_reagent = M.reagent icon_state = "rock_[ore_key]" var/turf/T = get_turf(src) layer = T.layer+0.1 diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm index f888ae3bb6..0bca24db1f 100644 --- a/code/modules/mining/ore_datum.dm +++ b/code/modules/mining/ore_datum.dm @@ -17,6 +17,7 @@ var/global/list/ore_data = list() "million" = 999 ) var/xarch_source_mineral = "iron" + var/reagent = "silicate" /ore/New() . = ..() @@ -36,6 +37,7 @@ var/global/list/ore_data = list() "million" = 704 ) xarch_source_mineral = "potassium" + reagent = "uranium" /ore/hematite name = "hematite" @@ -46,6 +48,7 @@ var/global/list/ore_data = list() spread_chance = 25 ore = /obj/item/weapon/ore/iron scan_icon = "mineral_common" + reagent = "iron" /ore/coal name = "carbon" @@ -57,6 +60,7 @@ var/global/list/ore_data = list() spread_chance = 25 ore = /obj/item/weapon/ore/coal scan_icon = "mineral_common" + reagent = "carbon" /ore/glass name = "sand" @@ -81,6 +85,7 @@ var/global/list/ore_data = list() "billion_lower" = 10 ) xarch_source_mineral = "phoron" + reagent = "phoron" /ore/silver name = "silver" @@ -90,6 +95,7 @@ var/global/list/ore_data = list() spread_chance = 10 ore = /obj/item/weapon/ore/silver scan_icon = "mineral_uncommon" + reagent = "silver" /ore/gold smelts_to = "gold" @@ -105,6 +111,7 @@ var/global/list/ore_data = list() "billion" = 4, "billion_lower" = 3 ) + reagent = "gold" /ore/diamond name = "diamond" @@ -116,6 +123,7 @@ var/global/list/ore_data = list() ore = /obj/item/weapon/ore/diamond scan_icon = "mineral_rare" xarch_source_mineral = "nitrogen" + reagent = "carbon" /ore/platinum name = "platinum" @@ -127,6 +135,7 @@ var/global/list/ore_data = list() spread_chance = 10 ore = /obj/item/weapon/ore/osmium scan_icon = "mineral_rare" + reagent = "platinum" /ore/hydrogen name = "mhydrogen" @@ -134,6 +143,7 @@ var/global/list/ore_data = list() smelts_to = "tritium" compresses_to = "mhydrogen" scan_icon = "mineral_rare" + reagent = "hydrogen" /ore/verdantium name = MAT_VERDANTIUM @@ -156,6 +166,7 @@ var/global/list/ore_data = list() spread_chance = 10 ore = /obj/item/weapon/ore/marble scan_icon = "mineral_common" + reagent = "calciumcarbonate" /ore/lead name = MAT_LEAD @@ -165,3 +176,4 @@ var/global/list/ore_data = list() spread_chance = 20 ore = /obj/item/weapon/ore/lead scan_icon = "mineral_rare" + reagent = "lead" diff --git a/code/modules/mob/_modifiers/medical.dm b/code/modules/mob/_modifiers/medical.dm index 7e150ceb93..3d17071903 100644 --- a/code/modules/mob/_modifiers/medical.dm +++ b/code/modules/mob/_modifiers/medical.dm @@ -50,3 +50,13 @@ evasion = -5 attack_speed_percent = 1.1 disable_duration_percent = 1.05 + +/datum/modifier/clone_stabilizer + name = "clone stabilized" + desc = "Your body's regeneration is highly restricted." + + on_created_text = "You feel nauseous." + on_expired_text = "You feel healthier." + stacks = MODIFIER_STACK_EXTEND + + incoming_healing_percent = 0.1 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Modifiers.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Modifiers.dm index cd2e6767b4..bed5da5f47 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Modifiers.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Modifiers.dm @@ -57,3 +57,14 @@ var/turf/simulated/S = T S.freeze_floor() return + +/datum/reagent/modapplying/vatstabilizer + name = "clone growth inhibitor" + id = "vatstabilizer" + description = "A compound produced by NanoTrasen using a secret blend of phoron and toxins to stop the rampant growth of a clone beyond intended states." + taste_description = "sour glue" + color = "#060501" + metabolism = REM * 0.2 + + modifier_to_add = /datum/modifier/clone_stabilizer + modifier_duration = 30 SECONDS diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index ba7dc93d63..18a281783a 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -524,6 +524,14 @@ reagent_state = LIQUID color = "#DF9FBF" +/datum/reagent/mineralfluid + name = "Mineral-Rich Fluid" + id = "mineralizedfluid" + description = "A warm, mineral-rich fluid." + taste_description = "salt" + reagent_state = LIQUID + color = "#ff205255" + // The opposite to healing nanites, exists to make unidentified hypos implied to have nanites not be 100% safe. /datum/reagent/defective_nanites name = "Defective Nanites" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index e18c2e56d9..74abe0b4bf 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -120,6 +120,13 @@ spawn(rand(30, 60)) M.IgniteMob() +/datum/reagent/toxin/lead + name = "lead" + id = "lead" + description = "Elemental Lead." + color = "#273956" + strength = 4 + /datum/reagent/toxin/spidertoxin name = "Spidertoxin" id = "spidertoxin" diff --git a/code/modules/reagents/hoses/connector.dm b/code/modules/reagents/hoses/connector.dm new file mode 100644 index 0000000000..bac7fc7c6a --- /dev/null +++ b/code/modules/reagents/hoses/connector.dm @@ -0,0 +1,138 @@ + +/obj/attackby(var/obj/item/O, var/mob/user) + . = ..() + + if(locate(/obj/item/hose_connector) in src) + if(O.is_wirecutter()) + var/list/available_sockets = list() + + for(var/obj/item/hose_connector/HC in src) + if(HC.my_hose) + available_sockets |= HC + + if(LAZYLEN(available_sockets)) + if(available_sockets.len == 1) + var/obj/item/hose_connector/AC = available_sockets[1] + var/choice = alert("Are you sure you want to disconnect [AC]?", "Confirm", "Yes", "No") + + if(choice == "Yes" && Adjacent(user)) + visible_message("[user] disconnects \the hose from \the [src].") + AC.my_hose.disconnect() + return + + else + + var/choice = input("Select a target hose connector.", "Socket Disconnect", null) as null|anything in available_sockets + + if(choice) + var/obj/item/hose_connector/AC = choice + var/confirm = alert("Are you sure you want to disconnect [AC]?", "Confirm", "Yes", "No") + + if(confirm == "Yes" && Adjacent(user)) + visible_message("[user] disconnects \the hose from \the [src].") + AC.my_hose.disconnect() + + return + +/obj/item/hose_connector + name = "hose connector" + desc = "A socket for a hose. It.. doesn't do anything on its own." + + var/obj/carrier = null + + var/flow_direction = HOSE_NEUTRAL + + var/datum/hose/my_hose = null + +/obj/item/hose_connector/Destroy() + if(my_hose) + my_hose.disconnect() + my_hose = null + if(carrier) + carrier = null + ..() + +/obj/item/hose_connector/Initialize() + ..() + + create_reagents(100) + + if(!istype(loc, /turf)) + name = "[flow_direction] hose connector ([loc])" + +/obj/item/hose_connector/proc/valid_connection(var/obj/item/hose_connector/C) + if(istype(C)) + if(C.my_hose) + return FALSE + + if(C.flow_direction in list(HOSE_INPUT, HOSE_OUTPUT) - flow_direction) + return TRUE + + return FALSE + +/obj/item/hose_connector/proc/disconnect() + my_hose = null + +/obj/item/hose_connector/proc/connect(var/datum/hose/H = null) + if(istype(H)) + my_hose = H + +/obj/item/hose_connector/proc/setup_hoses(var/obj/item/hose_connector/target) + if(target) + var/datum/hose/H = new() + + H.set_hose(src, target) + +/obj/item/hose_connector/proc/get_pairing() + if(my_hose) + return my_hose.get_pairing(src) + + return + +/* + * Subtypes + */ + +/obj/item/hose_connector/input + name = "hose input" + flow_direction = HOSE_INPUT + +/obj/item/hose_connector/input/active + name = "active hose" + +/obj/item/hose_connector/input/active/Destroy() + STOP_PROCESSING(SSobj, src) + ..() + +/obj/item/hose_connector/input/active/Initialize() + ..() + START_PROCESSING(SSobj, src) + + if(!isturf(loc)) + carrier = loc + +/obj/item/hose_connector/input/active/process() + if(carrier) + reagents.trans_to_obj(carrier, reagents.maximum_volume) + +/obj/item/hose_connector/output + name = "hose output" + flow_direction = HOSE_OUTPUT + +/obj/item/hose_connector/output/active + name = "active hose" + +/obj/item/hose_connector/output/active/Destroy() + STOP_PROCESSING(SSobj, src) + ..() + +/obj/item/hose_connector/output/active/Initialize() + ..() + START_PROCESSING(SSobj, src) + + if(!isturf(loc)) + carrier = loc + +/obj/item/hose_connector/output/active/process() + if(carrier) + carrier.reagents.trans_to_holder(reagents, reagents.maximum_volume) diff --git a/code/modules/reagents/hoses/hose.dm b/code/modules/reagents/hoses/hose.dm new file mode 100644 index 0000000000..dfe0eade79 --- /dev/null +++ b/code/modules/reagents/hoses/hose.dm @@ -0,0 +1,113 @@ + +GLOBAL_LIST_EMPTY(hoses) + +/obj/effect/ebeam/hose + plane = OBJ_PLANE + layer = STAIRS_LAYER + +/datum/hose + var/name = "hose" + + var/obj/item/hose_connector/node1 = null + var/obj/item/hose_connector/node2 = null + + var/hose_color = "#ffffff" + + var/initial_distance = 7 + + var/datum/beam/hose = null + +/datum/hose/proc/get_pairing(var/obj/item/hose_connector/target) + if(target) + if(target == node1) + return node2 + else if(target == node2) + return node1 + + return + +/datum/hose/proc/disconnect() + if(node1) + node1.disconnect() + node1 = null + if(node2) + node2.disconnect() + node2 = null + +/datum/hose/proc/set_hose(var/obj/item/hose_connector/target1, var/obj/item/hose_connector/target2) + if(target1 && target2) + node1 = target1 + node2 = target2 + + node1.connect(src) + node2.connect(src) + + name = "[name] ([node1],[node2])" + + initial_distance = get_dist(get_turf(node1), get_turf(node2)) + + GLOB.hoses |= src + START_PROCESSING(SSobj, src) + +/datum/hose/process() + if(node1 && node2) + if(get_dist(get_turf(node1), get_turf(node2)) > 0) + hose = node1.loc.Beam(node2.loc, icon_state = "hose", beam_color = hose_color, maxdistance = world.view, beam_type = /obj/effect/ebeam/hose) + + if(!hose || get_dist(get_turf(node1), get_turf(node2)) > initial_distance) // The hose didn't form. Something's fucky. + disconnect() + return + + var/datum/reagents/reagent_node1 = node1.reagents + var/datum/reagents/reagent_node2 = node2.reagents + + switch(node1.flow_direction) // Node 1 is the default 'master', interactions are considered in all current possible states in regards to it, however. + if(HOSE_INPUT) + if(node2.flow_direction == HOSE_NEUTRAL) // We're input, they're neutral. Take half of our volume. + reagent_node2.trans_to_holder(reagent_node1, reagent_node1.maximum_volume / 2) + else if(node2.flow_direction == HOSE_OUTPUT) // We're input, they're output. Take all of our volume. + reagent_node2.trans_to_holder(reagent_node1, reagent_node1.maximum_volume) + + if(HOSE_OUTPUT) // We're output, give all of their maximum volume. + reagent_node1.trans_to_holder(reagent_node2, reagent_node2.maximum_volume) + + if(HOSE_NEUTRAL) + switch(node2.flow_direction) + if(HOSE_INPUT) // We're neutral, they're input. Give them half of their volume. + reagent_node1.trans_to_holder(reagent_node2, reagent_node2.maximum_volume / 2) + + if(HOSE_NEUTRAL) // We're neutral, they're neutral. Balance our values. + var/volume_difference_perc = (reagent_node1.total_volume / reagent_node1.maximum_volume) - (reagent_node2.total_volume / reagent_node2.maximum_volume) + var/volume_difference = 0 + + var/pulling = FALSE + if(volume_difference_perc > 0) // They are smaller, so they determine the transfer amount. Half of the difference will equalize. + volume_difference = reagent_node2.maximum_volume * volume_difference_perc / 2 + + else if(volume_difference_perc < 0) // We're smaller, so we determine the transfer amount. Half of the difference will equalize. + volume_difference_perc *= -1 + + pulling = TRUE + + volume_difference = reagent_node1.maximum_volume * volume_difference_perc / 2 + + if(volume_difference) + if(pulling) + reagent_node2.trans_to_holder(reagent_node1, volume_difference) + else + reagent_node1.trans_to_holder(reagent_node2, volume_difference) + + if(HOSE_OUTPUT) + reagent_node2.trans_to_holder(reagent_node1, reagent_node2.maximum_volume) + + else + if(node1) + node1.disconnect() + node1 = null + if(node2) + node2.disconnect() + node2 = null + + STOP_PROCESSING(SSobj, src) + GLOB.hoses -= src + qdel(src) diff --git a/code/modules/reagents/hoses/hose_connector.dm b/code/modules/reagents/hoses/hose_connector.dm new file mode 100644 index 0000000000..4c442cc712 --- /dev/null +++ b/code/modules/reagents/hoses/hose_connector.dm @@ -0,0 +1,92 @@ + +/obj/item/stack/hose + name = "plastic tubing" + singular_name = "plastic tube" + desc = "A non-reusable plastic tube for moving reagents to and fro. It looks flimsy." + + description_info = "This tubing may be used to join two hose sockets, if able.
\ + Clicking on an object with a connector, such as a water tank, will display a list of possible sockets.
\ + Neutral can link to all socket types, and Input/Output sockets can link to all but their own type.

\ + This hose does not stretch. The maximum distance you can move two objects from eachother\ + without snapping the tube is determined by distance upon connection." + + icon = 'icons/obj/machines/reagent.dmi' + icon_state = "hose" + origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 1) + amount = 1 + w_class = ITEMSIZE_SMALL + no_variants = TRUE + + var/obj/item/hose_connector/remembered = null + +/obj/item/stack/hose/Destroy() + remembered = null + ..() + +/obj/item/stack/hose/CtrlClick(mob/user) + if(remembered) + to_chat(user, "You wind \the [src] back up.") + remembered = null + return + +/obj/item/stack/hose/afterattack(var/atom/target, var/mob/living/user, proximity, params) + if(!proximity) + return + + var/list/available_sockets = list() + + for(var/obj/item/hose_connector/HC in target.contents) + if(!HC.my_hose) + if(remembered) + if(HC.flow_direction == HOSE_NEUTRAL || HC.flow_direction != remembered.flow_direction) + available_sockets |= HC + + else + available_sockets |= HC + + if(LAZYLEN(available_sockets)) + if(available_sockets.len == 1) + var/obj/item/hose_connector/AC = available_sockets[1] + if(remembered && remembered.valid_connection(AC)) + var/distancetonode = get_dist(remembered,AC) + if(distancetonode > world.view) + to_chat(user, "\The [src] would probably burst if it were this long.") + else if(distancetonode <= amount) + to_chat(user, "You join \the [remembered] to \the [AC]") + remembered.setup_hoses(AC) + use(distancetonode) + remembered = null + else + to_chat(user, "You do not have enough tubing to connect the sockets.") + + else + remembered = AC + to_chat(user, "You connect one end of tubing to \the [AC].") + + else + var/choice = input("Select a target hose connector.", "Socket Selection", null) as null|anything in available_sockets + + if(choice) + var/obj/item/hose_connector/CC = choice + if(remembered) + if(remembered.valid_connection(CC)) + var/distancetonode = get_dist(remembered, CC) + if(distancetonode > world.view) + to_chat(user, "\The [src] would probably burst if it were this long.") + else if(distancetonode <= amount) + to_chat(user, "You join \the [remembered] to \the [CC]") + remembered.setup_hoses(CC) + use(distancetonode) + remembered = null + + else + to_chat(user, "You do not have enough tubing to connect the sockets.") + + else + remembered = CC + to_chat(user, "You connect one end of tubing to \the [CC].") + + return + + else + ..() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 2a89067e8a..a83c961546 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -204,4 +204,97 @@ /obj/item/weapon/reagent_containers/spray/plantbgone/Initialize() . = ..() - reagents.add_reagent("plantbgone", 100) \ No newline at end of file + reagents.add_reagent("plantbgone", 100) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed + name = "hose nozzle" + desc = "A heavy spray nozzle that must be attached to a hose." + icon = 'icons/obj/janitor.dmi' + icon_state = "cleaner-industrial" + item_state = "cleaner" + center_of_mass = list("x" = 16,"y" = 10) + + possible_transfer_amounts = list(5,10,20) + + var/heavy_spray = FALSE + var/spray_particles = 3 + + var/icon/hose_overlay + + var/obj/item/hose_connector/input/active/InputSocket + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Initialize() + ..() + + InputSocket = new(src) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/update_icon() + ..() + + overlays.Cut() + + if(!hose_overlay) + hose_overlay = new icon(icon, "[icon_state]+hose") + + if(InputSocket.get_pairing()) + add_overlay(hose_overlay) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/AltClick(mob/living/carbon/user) + if(++spray_particles > 3) spray_particles = 1 + + to_chat(user, "You turn the dial on \the [src] to [spray_particles].") + return + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/CtrlClick(var/mob/user) + if(loc != get_turf(src)) + heavy_spray = !heavy_spray + else + . = ..() + +/obj/item/weapon/reagent_containers/spray/chemsprayer/hosed/Spray_at(atom/A as mob|obj) + update_icon() + + var/direction = get_dir(src, A) + var/turf/T = get_turf(A) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) + var/list/the_targets = list(T, T1, T2) + + if(src.reagents.total_volume < 1) + to_chat(usr, "\The [src] is empty.") + return + + if(!heavy_spray) + for(var/a = 1 to 3) + spawn(0) + if(reagents.total_volume < 1) break + playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6) + var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src)) + var/turf/my_target = the_targets[a] + D.create_reagents(amount_per_transfer_from_this) + if(!src) + return + reagents.trans_to_obj(D, amount_per_transfer_from_this) + D.set_color() + D.set_up(my_target, rand(6, 8), 2) + return + + else + playsound(src, 'sound/effects/extinguish.ogg', 75, 1, -3) + + for(var/a = 1 to spray_particles) + spawn(0) + if(!src || !reagents.total_volume) return + + var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src)) + var/turf/my_target + if(a <= the_targets.len) + my_target = the_targets[a] + else + my_target = pick(the_targets) + W.create_reagents(amount_per_transfer_from_this) + reagents.trans_to_obj(W, amount_per_transfer_from_this) + W.set_color() + W.set_up(my_target) + + return diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 129af30fe9..ae6ecf8505 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -10,18 +10,33 @@ anchored = 0 pressure_resistance = 2*ONE_ATMOSPHERE + var/obj/item/hose_connector/input/active/InputSocket + var/obj/item/hose_connector/output/active/OutputSocket + var/amount_per_transfer_from_this = 10 var/possible_transfer_amounts = list(10,25,50,100) - attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) return +/obj/structure/reagent_dispensers/Destroy() + QDEL_NULL(InputSocket) + QDEL_NULL(OutputSocket) + + ..() + /obj/structure/reagent_dispensers/Initialize() var/datum/reagents/R = new/datum/reagents(5000) reagents = R R.my_atom = src if (!possible_transfer_amounts) src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + + InputSocket = new(src) + InputSocket.carrier = src + OutputSocket = new(src) + OutputSocket.carrier = src + . = ..() /obj/structure/reagent_dispensers/examine(mob/user) diff --git a/html/changelogs/mechoid - reagenthoses.yml b/html/changelogs/mechoid - reagenthoses.yml new file mode 100644 index 0000000000..6cf9cfe9a9 --- /dev/null +++ b/html/changelogs/mechoid - reagenthoses.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Mechoid + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Reagent pumps added. You can refill water tanks planetside!" + - rscadd: "Reagent hoses added. Only used player-side by tanks, pumps, and spray nozzles." diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 4115b01ef2e048d9a5be2a927d00c0afea1f3327..4d0710885fa704f07ebe3da18c58435ef77f6936 100644 GIT binary patch delta 13059 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 b4Mw4rE$&W3>i`<~gQKdX^`K0_^7a1#i_3L0 delta 13207 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 N;OXk;vd$@?2>@s7<<9^B diff --git a/icons/obj/machines/reagent.dmi b/icons/obj/machines/reagent.dmi index d11f34270d5eee41aac79a89de1686dd79606b05..7495451380140bc952cf64701d5480f8a84f02d8 100644 GIT binary patch literal 8928 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 diff --git a/polaris.dme b/polaris.dme index 1d4cfa1bbd..98a7ac077c 100644 --- a/polaris.dme +++ b/polaris.dme @@ -38,6 +38,7 @@ #include "code\__defines\flags.dm" #include "code\__defines\gamemode.dm" #include "code\__defines\holomap.dm" +#include "code\__defines\hoses.dm" #include "code\__defines\integrated_circuits.dm" #include "code\__defines\inventory_sizes.dm" #include "code\__defines\is_helpers.dm" @@ -800,6 +801,7 @@ #include "code\game\machinery\pipe\pipe_dispenser.dm" #include "code\game\machinery\pipe\pipe_recipes.dm" #include "code\game\machinery\pipe\pipelayer.dm" +#include "code\game\machinery\reagents\pump.dm" #include "code\game\machinery\telecomms\broadcaster.dm" #include "code\game\machinery\telecomms\logbrowser.dm" #include "code\game\machinery\telecomms\machine_interactions.dm" @@ -1085,6 +1087,7 @@ #include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\engineering.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\fluidpump.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\jukebox.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\kitchen_appliances.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm" @@ -2718,6 +2721,9 @@ #include "code\modules\reagents\dispenser\supply.dm" #include "code\modules\reagents\distilling\Distilling-Recipes.dm" #include "code\modules\reagents\distilling\distilling.dm" +#include "code\modules\reagents\hoses\connector.dm" +#include "code\modules\reagents\hoses\hose.dm" +#include "code\modules\reagents\hoses\hose_connector.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\dropper.dm"