From 7a64573c8bfa01bac0d690db68d4b6528d502579 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:12:18 +0200 Subject: [PATCH] [MIRROR] Atmos QOL + Small Sprite Fix [MDB IGNORE] (#20243) * Atmos QOL + Small Sprite Fix (#74251) ## About The Pull Request Added screentips and balloon alerts to many atmos machines/pipes Volume pump overclocking overlay is much slower and less seizure inducing RPD screentips for right clicking pipes to copy settings Removed (RPD) from the RPD's name since having an abbreviation in the name is ugly Crystallizer and electrolyzer use ctrl+click and alt-click to turn on On examine electrolyzer tells you about anchoring to drain from APC instead of cell ## Why It's Good For The Game QOL for atmos stuff, user friendliness and better experience ## Changelog :cl: fix: Volume pump overclocking animation is much slower, no more headaches qol: Added screentips to the RPD; screentips and balloon alerts to many atmos machines and devices :cl: * Atmos QOL + Small Sprite Fix --------- Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com> --- code/game/objects/items/RPD.dm | 16 +++-- .../components/binary_devices/passive_gate.dm | 11 ++++ .../binary_devices/pressure_valve.dm | 11 ++++ .../components/binary_devices/pump.dm | 8 +++ .../binary_devices/temperature_gate.dm | 11 ++++ .../binary_devices/temperature_pump.dm | 11 ++++ .../components/binary_devices/volume_pump.dm | 5 +- .../components/electrolyzer/electrolyzer.dm | 56 +++++++++--------- .../gas_recipe_machines/crystallizer.dm | 24 +++++++- .../components/trinary_devices/filter.dm | 13 +++- .../components/trinary_devices/mixer.dm | 11 ++++ .../unary_devices/bluespace_sender.dm | 25 +++++++- .../components/unary_devices/cryo.dm | 19 +++++- .../unary_devices/outlet_injector.dm | 8 +++ .../components/unary_devices/thermomachine.dm | 34 +++++++++-- .../components/binary_devices.dmi | Bin 75970 -> 75979 bytes 16 files changed, 218 insertions(+), 45 deletions(-) diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index 32bd167fbd6..6f4475460a1 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -1,8 +1,3 @@ -/* -CONTAINS: -RPD -*/ - #define ATMOS_CATEGORY 0 #define DISPOSALS_CATEGORY 1 #define TRANSIT_CATEGORY 2 @@ -210,7 +205,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( icon_state = "[icon_state]_preview" /obj/item/pipe_dispenser - name = "Rapid Pipe Dispenser (RPD)" + name = "Rapid Pipe Dispenser" desc = "A device used to rapidly pipe things." icon = 'icons/obj/tools.dmi' icon_state = "rpd" @@ -283,6 +278,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( first_transit = GLOB.transit_tube_recipes[GLOB.transit_tube_recipes[1]][1] recipe = first_atmos + register_item_context() /obj/item/pipe_dispenser/Destroy() qdel(spark_system) @@ -339,6 +335,14 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( return TRUE return ..() +/obj/item/pipe_dispenser/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) + . = ..() + if(istype(target, /obj/machinery/atmospherics)) + var/obj/machinery/atmospherics/atmos_target = target + if(atmos_target.pipe_color && atmos_target.piping_layer) + context[SCREENTIP_CONTEXT_RMB] = "Copy piping color and layer" + return CONTEXTUAL_SCREENTIP_SET + /** * Installs an upgrade into the RPD * diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index f33eb7fc3bb..2550c37a8cd 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -20,9 +20,20 @@ Passive gate is similar to the regular pump except: ///Set the target pressure the component should arrive to var/target_pressure = ONE_ATMOSPHERE +/obj/machinery/atmospherics/components/binary/passive_gate/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/atmospherics/components/binary/passive_gate/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/binary/passive_gate/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm index a208bc9d3e6..93192073275 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -12,9 +12,20 @@ ///Check if the gas is moving from one pipenet to the other var/is_gas_flowing = FALSE +/obj/machinery/atmospherics/components/binary/pressure_valve/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/atmospherics/components/binary/pressure_valve/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/binary/pressure_valve/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index e71d4695338..006d9c95648 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -27,10 +27,18 @@ AddComponent(/datum/component/usb_port, list( /obj/item/circuit_component/atmos_pump, )) + register_context() + +/obj/machinery/atmospherics/components/binary/pump/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user) if(can_interact(user)) set_on(!on) + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm index b9295a4d2cd..eca182b9bf4 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm @@ -17,9 +17,20 @@ ///Check if the gas is moving from one pipenet to the other var/is_gas_flowing = FALSE +/obj/machinery/atmospherics/components/binary/temperature_gate/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/atmospherics/components/binary/temperature_gate/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target temperature" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/binary/temperature_gate/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm index acdcfd90ac7..b33f8845d46 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm @@ -12,9 +12,20 @@ ///Maximum allowed transfer percentage var/max_heat_transfer_rate = 100 +/obj/machinery/atmospherics/components/binary/temperature_pump/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/atmospherics/components/binary/temperature_pump/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize transfer rate" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/binary/temperature_pump/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index d7dc3867319..180f6d66c5e 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -36,6 +36,7 @@ /obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user) if(can_interact(user)) set_on(!on) + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() @@ -103,9 +104,11 @@ /obj/machinery/atmospherics/components/binary/volume_pump/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize transfer rate" if(held_item && held_item.tool_behaviour == TOOL_MULTITOOL) context[SCREENTIP_CONTEXT_LMB] = "[overclocked ? "En" : "Dis"]able pressure limits" - return CONTEXTUAL_SCREENTIP_SET + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index 89486599740..d314e7eb79b 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -38,22 +38,19 @@ cell = new cell(src) SSair.start_processing_machine(src) update_appearance() + register_context() - AddElement( \ - /datum/element/contextual_screentip_bare_hands, \ - rmb_text = "Toggle power", \ - ) - - var/static/list/tool_behaviors = list( - TOOL_SCREWDRIVER = list( - SCREENTIP_CONTEXT_LMB = "Open hatch", - ), - - TOOL_WRENCH = list( - SCREENTIP_CONTEXT_LMB = "Anchor", - ), - ) - AddElement(/datum/element/contextual_screentip_tools, tool_behaviors) +/obj/machinery/electrolyzer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_ALT_LMB] = "Turn [on ? "off" : "on"]" + if(!held_item) + return CONTEXTUAL_SCREENTIP_SET + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "Unan" : "An"]chor" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/electrolyzer/Destroy() if(cell) @@ -68,14 +65,15 @@ /obj/machinery/electrolyzer/examine(mob/user) . = ..() - . += "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]." + . += "\The [src] is [on ? "on" : "off"], and the panel is [panel_open ? "open" : "closed"]." if(cell) . += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%." else . += "There is no power cell installed." if(in_range(user, src) || isobserver(user)) - . += span_notice("Right-click to toggle [on ? "off" : "on"].") + . += span_notice("Alt-click to toggle [on ? "off" : "on"].") + . += span_notice("Anchor to drain power from APC instead of cell") . += span_notice("It will drain power from the [anchored ? "area's APC" : "internal power cell"].") @@ -158,7 +156,7 @@ /obj/machinery/electrolyzer/screwdriver_act(mob/living/user, obj/item/tool) tool.play_tool_sound(src, 50) toggle_panel_open() - user.visible_message(span_notice("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src]."), span_notice("You [panel_open ? "open" : "close"] the hatch on \the [src].")) + balloon_alert(user, "[panel_open ? "opened" : "closed"] panel") update_appearance() return TRUE @@ -174,34 +172,38 @@ add_fingerprint(user) if(istype(I, /obj/item/stock_parts/cell)) if(!panel_open) - to_chat(user, span_warning("The hatch must be open to insert a power cell!")) + balloon_alert(user, "open panel!") return if(cell) - to_chat(user, span_warning("There is already a power cell inside!")) + balloon_alert(user, "cell inside!") return if(!user.transferItemToLoc(I, src)) return cell = I I.add_fingerprint(usr) - - user.visible_message(span_notice("\The [user] inserts a power cell into \the [src]."), span_notice("You insert the power cell into \the [src].")) + balloon_alert(user, "inserted cell") SStgui.update_uis(src) return return ..() -/obj/machinery/electrolyzer/attack_hand_secondary(mob/user, list/modifiers) +/obj/machinery/electrolyzer/AltClick(mob/user) + . = ..() + if(panel_open) + balloon_alert(user, "close panel!") + return if(!can_interact(user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return toggle_power(user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/machinery/electrolyzer/proc/toggle_power(user) + if(!anchored && !cell) + balloon_alert(user, "insert cell or anchor!") + return on = !on mode = ELECTROLYZER_MODE_STANDBY - if(!isnull(user)) - balloon_alert(user, "turned [on ? "on" : "off"]") update_appearance() + balloon_alert(user, "turned [on ? "on" : "off"]") if(on) SSair.start_processing_machine(src) diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index 56933324ad4..7cb547c0ba7 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -39,6 +39,19 @@ /obj/machinery/atmospherics/components/binary/crystallizer/Initialize(mapload) . = ..() internal = new + register_context() + +/obj/machinery/atmospherics/components/binary/crystallizer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + if(!held_item) + return CONTEXTUAL_SCREENTIP_SET + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Rotate" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, params) if(!on) @@ -102,13 +115,18 @@ else icon_state = "[base_icon_state]-off" -/obj/machinery/atmospherics/components/binary/crystallizer/attackby_secondary(obj/item/tool, mob/user, params) +/obj/machinery/atmospherics/components/binary/crystallizer/CtrlClick(mob/living/user) if(!can_interact(user)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return + if(panel_open) + balloon_alert(user, "close panel!") + return on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_icon() - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ..() + ///Checks if the reaction temperature is inside the range of temperature + a little deviation /obj/machinery/atmospherics/components/binary/crystallizer/proc/check_temp_requirements() if(internal.temperature >= selected_recipe.min_temp * MIN_DEVIATION_RATE && internal.temperature <= selected_recipe.max_temp * MAX_DEVIATION_RATE) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index ec34d3d9a0a..7af7d33e111 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -14,9 +14,20 @@ ///What gases are we filtering, by typepath var/list/filter_type = list() +/obj/machinery/atmospherics/components/trinary/filter/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/atmospherics/components/trinary/filter/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize transfer rate" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() @@ -164,7 +175,7 @@ /obj/machinery/atmospherics/components/trinary/filter/can_unwrench(mob/user) . = ..() if(. && on && is_operational) - to_chat(user, span_warning("You cannot unwrench [src], turn it off first!")) + balloon_alert(user, "turn off!") return FALSE // mapping diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index dd2fe39a9c1..b9fb506faf1 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -17,9 +17,20 @@ var/node2_concentration = 0.5 //node 3 is the outlet, nodes 1 & 2 are intakes +/obj/machinery/atmospherics/components/trinary/mixer/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/atmospherics/components/trinary/mixer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize target pressure" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm index f28abc7cb84..264ecd5ebf9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm @@ -46,6 +46,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component GLOB.bluespace_senders += src update_appearance() + register_context() /obj/machinery/atmospherics/components/unary/bluespace_sender/Destroy() if(bluespace_network.total_moles()) @@ -56,6 +57,24 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component return ..() +/obj/machinery/atmospherics/components/unary/bluespace_sender/examine(mob/user) + . = ..() + . += span_notice("With the panel open:") + . += span_notice(" -Use a wrench with left-click to rotate [src] and right-click to unanchor it.") + +/obj/machinery/atmospherics/components/unary/bluespace_sender/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + if(!held_item) + return CONTEXTUAL_SCREENTIP_SET + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Rotate" + context[SCREENTIP_CONTEXT_RMB] = "[anchored ? "Unan" : "An"]chor" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/atmospherics/components/unary/bluespace_sender/update_icon_state() if(panel_open) icon_state = "[base_icon_state]_open" @@ -84,10 +103,10 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component /obj/machinery/atmospherics/components/unary/bluespace_sender/screwdriver_act(mob/living/user, obj/item/tool) if(on) - to_chat(user, span_notice("You can't open [src] while it's on!")) + balloon_alert(user, "turn off!") return TOOL_ACT_TOOLTYPE_SUCCESS if(!anchored) - to_chat(user, span_notice("Anchor [src] first!")) + balloon_alert(user, "anchor!") return TOOL_ACT_TOOLTYPE_SUCCESS if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]", tool)) change_pipe_connection(panel_open) @@ -112,6 +131,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component /obj/machinery/atmospherics/components/unary/bluespace_sender/wrench_act_secondary(mob/living/user, obj/item/tool) if(!panel_open) + balloon_alert(user, "open panel!") return if(default_unfasten_wrench(user, tool)) return TOOL_ACT_TOOLTYPE_SUCCESS @@ -129,6 +149,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component if(!can_interact(user)) return on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 7319717b533..1be0cf135fa 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -134,6 +134,7 @@ vis_contents += occupant_vis if(airs[1]) airs[1].volume = CELL_VOLUME * 0.5 + register_context() /obj/machinery/atmospherics/components/unary/cryo_cell/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) . = ..() @@ -165,6 +166,20 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Efficiency at [efficiency*100]%.") +/obj/machinery/atmospherics/components/unary/cryo_cell/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "[state_open ? "Close" : "Open"] door" + if(!held_item) + return CONTEXTUAL_SCREENTIP_SET + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Rotate" + return CONTEXTUAL_SCREENTIP_SET + + /obj/machinery/atmospherics/components/unary/cryo_cell/Destroy() vis_contents.Cut() @@ -534,11 +549,13 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/CtrlClick(mob/user) if(can_interact(user) && !state_open) - set_on(!on) + if(set_on(!on)) + balloon_alert(user, "turned [on ? "on" : "off"]") return ..() /obj/machinery/atmospherics/components/unary/cryo_cell/AltClick(mob/user) if(can_interact(user)) + balloon_alert(user, "[state_open ? "closing" : "opening"] door") if(state_open) close_machine() else diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index ad8cf8fafdd..bf79819e01b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -28,6 +28,13 @@ ) ) AddElement(/datum/element/contextual_screentip_tools, tool_screentips) + register_context() + +/obj/machinery/atmospherics/components/unary/outlet_injector/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Maximize transfer rate" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/unary/outlet_injector/examine(mob/user) . = ..() @@ -60,6 +67,7 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/CtrlClick(mob/user) if(can_interact(user)) on = !on + balloon_alert(user, "turned [on ? "on" : "off"]") investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) update_appearance() return ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 94b1fa4bb57..ae3d231b85c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -43,6 +43,24 @@ . = ..() RefreshParts() update_appearance() + register_context() + +/obj/machinery/atmospherics/components/unary/thermomachine/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" + context[SCREENTIP_CONTEXT_ALT_LMB] = "Reset temperature" + if(!held_item) + return CONTEXTUAL_SCREENTIP_SET + switch(held_item.tool_behaviour) + if(TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Rotate" + context[SCREENTIP_CONTEXT_RMB] = "[anchored ? "Unan" : "An"]chor" + if(TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Change piping layer" + context[SCREENTIP_CONTEXT_RMB] = "Change piping color" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/unary/thermomachine/is_connectable() if(!anchored || panel_open) @@ -126,6 +144,9 @@ . += span_notice("Temperature range [min_temperature]K - [max_temperature]K ([(T0C-min_temperature)*-1]C - [(T0C-max_temperature)*-1]C).") /obj/machinery/atmospherics/components/unary/thermomachine/AltClick(mob/living/user) + if(panel_open) + balloon_alert(user, "close panel!") + return if(!can_interact(user)) return target_temperature = T20C @@ -172,10 +193,10 @@ /obj/machinery/atmospherics/components/unary/thermomachine/screwdriver_act(mob/living/user, obj/item/tool) if(on) - to_chat(user, span_notice("You can't open [src] while it's on!")) + balloon_alert(user, "turn off!") return TOOL_ACT_TOOLTYPE_SUCCESS if(!anchored) - to_chat(user, span_notice("Anchor [src] first!")) + balloon_alert(user, "anchor!") return TOOL_ACT_TOOLTYPE_SUCCESS if(default_deconstruction_screwdriver(user, "thermo-open", "thermo-0", tool)) change_pipe_connection(panel_open) @@ -189,7 +210,8 @@ /obj/machinery/atmospherics/components/unary/thermomachine/multitool_act(mob/living/user, obj/item/multitool/multitool) if(!panel_open) - return + balloon_alert(user, "open panel!") + return TOOL_ACT_TOOLTYPE_SUCCESS piping_layer = (piping_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (piping_layer + 1) to_chat(user, span_notice("You change the circuitboard to layer [piping_layer].")) update_appearance() @@ -204,7 +226,8 @@ /obj/machinery/atmospherics/components/unary/thermomachine/multitool_act_secondary(mob/living/user, obj/item/tool) if(!panel_open) - return + balloon_alert(user, "open panel!") + return TOOL_ACT_TOOLTYPE_SUCCESS color_index = (color_index >= GLOB.pipe_paint_colors.len) ? (color_index = 1) : (color_index = 1 + color_index) set_pipe_color(GLOB.pipe_paint_colors[GLOB.pipe_paint_colors[color_index]]) visible_message(span_notice("[user] set [src]'s pipe color to [GLOB.pipe_color_name[pipe_color]]."), ignored_mobs = user) @@ -286,6 +309,9 @@ update_appearance() /obj/machinery/atmospherics/components/unary/thermomachine/CtrlClick(mob/living/user) + if(panel_open) + balloon_alert(user, "close panel!") + return if(!panel_open) if(!can_interact(user)) return diff --git a/icons/obj/atmospherics/components/binary_devices.dmi b/icons/obj/atmospherics/components/binary_devices.dmi index 44afed1e43acd018442964dfc5a96b4ae6a79b09..407e9fc94f4443e90556923e7a9d2a2eabaa1627 100644 GIT binary patch delta 682 zcmV;b0#*IO(FDuU1dt?uih5L7bVOxyV{&P5bZKvH004NLtyjTrqc9Xa!&g}Cm8^iK z&528us>-4Lg$Tu_K@0c^UXtCv-$MxtDURQy6}d#3H}>$x&%?cXetF%ztM%I^JesyE zZKE=^{1u16snonznR-aWU~kHgJ%9e`IA^0Wbw?$cZP{?X^)JC+iaC-JvdPvYBF*N7c8Vn>bGQ6qNLh#fUzM~&D~19sGa9ktJn ztFIkRqclpxpt6>KTx5=gZy> z1Jr*!=up$vHi)twEfm+Ih5CB5P-2gksuYcY0V>ufnA=IzKVh)9+>vFKsbm!;t7wML zKgeZ#M_U1|9i#o)$7p|V$7p|V$7p|V&uFoUFAC&Z#a14F3Pg?@qXnCxLrwN*+FfOL zza8*oG&d(dO+DR;=o_l@Hml4lc`~NdbCD`9pD$2X=BWG!vnZO0ZYz!Anvol;c zqsDMx@1m$OMhm!+ctuFOA|PH75U+Y{QQ4D=Ih}ZDzSOahr&M^&A~~CooJ~m1CM0JM zExvf%(q9SvdohvdTKcKn!3Y1TYW*7zhB2UH^<-{)}Dy zjKx^Sax4Rv1Oqn&d#;D4*-Le%-m#Rd{@O?e7{0X!VV8mAz(5YzmF;fP9-2iw4_$uI za8cV;_9Q4ie@Rb^ZBe*tFV`U{ust|UB@^Q>c8l>CACg{-6L_y)-q&jVwh8|M^Kx1t Q3K|jXgRTO%t^xrRCdL*;nE(I) delta 673 zcmV;S0$%;g(FDTL1dt?ufqGO}bVOxyV{&P5bZKvH004NLt(U=Wqd*LX&+rtZ_DWVj z)8@owm1>nk`w9`t3=LXfEO5x~+wY+SLCSReCo4{sK6~b`|FNA%_4D=D?p|&A!fQl^}46z)uLgM&M^DY>PrJ&=!SUplyJ}jXZChxbi-S zfi_kCS7j=VKEIcxaK}-i@Fc$L^d!FRbdA_iBX-n?9W`P{jo48mcGQR+HDE^#*irlJ zxcOSqG)kj13@U4X$(77;@D0h_R=q9R|GQaZ$(~IsFUTdpUllslBzz_#3S{*^krDMj zkP-Di4?5Mfw+*6fpoQWFTBvWJg%Sr^s#4SfMpUd%(6^Il_`=|5xg*OeQ^_VuHqk;p zeum+Nc1ruTPicQ`r?kJeQ`%qK3oSPBRe)Tp*veynfXH!ET5uUU)nt3q9x8kI z?ZA@-t4u#vI@j^>xA~U-Q%>DCq`LQ3ly}`n&eFwYh70=E6c;qE3odL&QyjRvXe*i0 zg51a^MaU*az$Qh&CN;1{WzVk6>C8jRp^k$*p~8uZtki_8)P$_mgsjwK2{4WFytJtoxXF>4g zNAo<`7KJPJ`W%vi?a65>nHYbtTa5pa3}T$%qk4T0->U7~F8l{;#a0~QB$FY7w*t4f H0s#~z%@9*w