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