updates to most recent version and puts intent hints!

This commit is contained in:
SandPoot
2023-02-09 02:20:02 -03:00
parent 1b1154260c
commit 4491abc2d7
21 changed files with 382 additions and 107 deletions

View File

@@ -4,9 +4,24 @@
/// Context applied to RMB actions
#define SCREENTIP_CONTEXT_RMB "RMB"
/// Context applied to Shift-LMB actions
#define SCREENTIP_CONTEXT_SHIFT_LMB "Shift-LMB"
/// Context applied to Ctrl-LMB actions
#define SCREENTIP_CONTEXT_CTRL_LMB "Ctrl-LMB"
/// Context applied to Ctrl-RMB actions
#define SCREENTIP_CONTEXT_CTRL_RMB "Ctrl-RMB"
/// Context applied to Alt-LMB actions
#define SCREENTIP_CONTEXT_ALT_LMB "Alt-LMB"
/// Context applied to Alt-RMB actions
#define SCREENTIP_CONTEXT_ALT_RMB "Alt-RMB"
/// Context applied to Ctrl-Shift-LMB actions
#define SCREENTIP_CONTEXT_CTRL_SHIFT_LMB "Ctrl-Shift-LMB"
/// Screentips are always disabled
#define SCREENTIP_PREFERENCE_DISABLED "Disabled"
@@ -15,3 +30,6 @@
/// Screentips are only enabled when they have context
#define SCREENTIP_PREFERENCE_CONTEXT_ONLY "Only with tips"
/// Regardless of intent
#define INTENT_ANY "intent_any"

View File

@@ -17,6 +17,7 @@ Example:
```dm
/obj/machinery/firealarm/Initialize(mapload)
. = ..()
AddElement( \
/datum/element/contextual_screentip_bare_hands, \
lmb_text = list(INTENT_HELP = "Turn on"), \
@@ -37,12 +38,14 @@ Example:
if (!(flags_1 & NODECONSTRUCT_1))
var/static/list/tool_behaviors = list(
TOOL_SCREWDRIVER = list(
SCREENTIP_CONTEXT_RMB = "Disassemble",
SCREENTIP_CONTEXT_LMB = "Disassemble",
),
TOOL_WRENCH = list(
SCREENTIP_CONTEXT_RMB = "Deconstruct",
SCREENTIP_CONTEXT_LMB = "Deconstruct",
),
)
AddElement(/datum/element/contextual_screentip_tools, tool_behaviors)
```
@@ -57,14 +60,17 @@ Example:
```dm
/obj/item/restraints/handcuffs/cable/Initialize(mapload)
. = ..()
var/static/list/hovering_item_typechecks = list(
/obj/item/stack/rods = list(
SCREENTIP_CONTEXT_LMB = "Craft wired rod",
),
/obj/item/stack/sheet/iron = list(
SCREENTIP_CONTEXT_LMB = "Craft bola",
),
)
AddElement(/datum/element/contextual_screentip_item_typechecks, hovering_item_typechecks)
```

View File

@@ -76,29 +76,17 @@
var/combat_mode = SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)
// Combat lmb
if(combat_mode && length(lmb_text_combat_mode))
if(lmb_text_combat_mode[user.a_intent])
context[SCREENTIP_CONTEXT_LMB] = lmb_text_combat_mode[user.a_intent]
else
var/first_item = lmb_text_combat_mode[1]
context[SCREENTIP_CONTEXT_LMB] = lmb_text_combat_mode[first_item]
context[SCREENTIP_CONTEXT_LMB] = lmb_text_combat_mode
// LMB
else if(length(lmb_text))
if(lmb_text[user.a_intent])
context[SCREENTIP_CONTEXT_LMB] = lmb_text[user.a_intent]
else
var/first_item = lmb_text[1]
context[SCREENTIP_CONTEXT_LMB] = lmb_text[first_item]
context[SCREENTIP_CONTEXT_LMB] = lmb_text
// Combat rmb
if(combat_mode && length(rmb_text_combat_mode))
if(rmb_text_combat_mode[user.a_intent])
context[SCREENTIP_CONTEXT_RMB] = rmb_text_combat_mode[user.a_intent]
else
var/first_item = rmb_text_combat_mode[1]
context[SCREENTIP_CONTEXT_RMB] = rmb_text_combat_mode[first_item]
context[SCREENTIP_CONTEXT_RMB] = rmb_text_combat_mode
// RMB
else if(length(rmb_text))
if(rmb_text[user.a_intent])
context[SCREENTIP_CONTEXT_RMB] = rmb_text[user.a_intent]
else
var/first_item = rmb_text[1]
context[SCREENTIP_CONTEXT_RMB] = rmb_text[first_item]
context[SCREENTIP_CONTEXT_RMB] = rmb_text
return CONTEXTUAL_SCREENTIP_SET

View File

@@ -0,0 +1,57 @@
/// Apply basic contextual screentips when the user hovers over this item with an item of the given tool behavior.
/// A "Type B" interaction.
/// This stacks with other contextual screentip elements, though you may want to register the signal/flag manually at that point for performance.
/datum/element/contextual_screentip_sharpness
element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH
id_arg_index = 2
/// If set, the text to show for LMB
var/list/lmb_text
/// If set, the text to show for RMB
var/list/rmb_text
/datum/element/contextual_screentip_sharpness/Attach(datum/target, lmb_text, rmb_text)
. = ..()
if (!isatom(target))
return ELEMENT_INCOMPATIBLE
src.lmb_text = lmb_text
src.rmb_text = rmb_text
var/atom/atom_target = target
atom_target.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1
RegisterSignal(atom_target, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, .proc/on_requesting_context_from_item)
/datum/element/contextual_screentip_sharpness/Detach(datum/source, ...)
UnregisterSignal(source, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM)
// We don't remove HAS_CONTEXTUAL_SCREENTIPS_1, since there could be other stuff still hooked to it,
// and being set without signals is not dangerous, just less performant.
// A lot of things don't do this, perhaps make a proc that checks if any signals are still set, and if not,
// remove the flag.
return ..()
/datum/element/contextual_screentip_sharpness/proc/on_requesting_context_from_item(
datum/source,
list/context,
obj/item/held_item,
)
SIGNAL_HANDLER
if (isnull(held_item))
return NONE
var/sharpness = held_item.get_sharpness()
if (!sharpness)
return NONE
if (length(lmb_text))
context[SCREENTIP_CONTEXT_LMB] = lmb_text
if (length(rmb_text))
context[SCREENTIP_CONTEXT_RMB] = rmb_text
return CONTEXTUAL_SCREENTIP_SET

View File

@@ -1460,12 +1460,34 @@
if(screentips_enabled == SCREENTIP_PREFERENCE_DISABLED || (flags_1 & NO_SCREENTIPS_1))
active_hud.screentip_text.maptext = ""
else
active_hud.screentip_text.maptext_y = 0
var/lmb_rmb_line = ""
var/ctrl_lmb_ctrl_rmb_line = ""
var/alt_lmb_alt_rmb_line = ""
var/shift_lmb_ctrl_shift_lmb_line = ""
var/extra_lines = 0
var/extra_context = ""
if (isliving(user))
// Generate intent icons
var/static/image/intent_help
if(!intent_help)
intent_help = image('icons/emoji.dmi', icon_state = INTENT_HELP)
var/static/image/intent_disarm
if(!intent_disarm)
intent_disarm = image('icons/emoji.dmi', icon_state = INTENT_DISARM)
var/static/image/intent_grab
if(!intent_grab)
intent_grab = image('icons/emoji.dmi', icon_state = INTENT_GRAB)
var/static/image/intent_harm
if(!intent_harm)
intent_harm = image('icons/emoji.dmi', icon_state = INTENT_HARM)
//
if (isliving(user) || isovermind(user) || isaicamera(user))
var/obj/item/held_item = user.get_active_held_item()
if ((flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1) || (held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS))
if (flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1 || held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS)
var/list/context = list()
var/contextual_screentip_returns = \
@@ -1474,23 +1496,168 @@
if (contextual_screentip_returns & CONTEXTUAL_SCREENTIP_SET)
// LMB and RMB on one line...
var/lmb_text = (SCREENTIP_CONTEXT_LMB in context) ? "[SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB]]" : ""
var/rmb_text = (SCREENTIP_CONTEXT_RMB in context) ? "[SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB]]" : ""
var/lmb_text = ""
if((SCREENTIP_CONTEXT_LMB in context) && (length(context[SCREENTIP_CONTEXT_LMB]) > 0))
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_LMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_LMB]: [context[SCREENTIP_CONTEXT_LMB][intent]]")
lmb_text = english_list(to_add, "", " | ", " | ", " | ")
var/rmb_text = ""
if((SCREENTIP_CONTEXT_RMB in context) && (length(context[SCREENTIP_CONTEXT_RMB]) > 0))
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_RMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_RMB]: [context[SCREENTIP_CONTEXT_RMB][intent]]")
rmb_text = english_list(to_add, "", " | ", " | ", " | ")
if (lmb_text)
extra_context = lmb_text
lmb_rmb_line = lmb_text
if (rmb_text)
extra_context += " | [rmb_text]"
lmb_rmb_line += " | [rmb_text]"
else if (rmb_text)
extra_context = rmb_text
lmb_rmb_line = rmb_text
// Ctrl-LMB and (in the future) Alt-LMB on another
if (SCREENTIP_CONTEXT_CTRL_LMB in context)
if (extra_context != "")
extra_context += "<br>"
extra_context += "[SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB]]"
// Ctrl-LMB, Ctrl-RMB on one line...
if (lmb_rmb_line != "")
lmb_rmb_line += "<br>"
extra_lines++
if((SCREENTIP_CONTEXT_CTRL_LMB in context) && (length(context[SCREENTIP_CONTEXT_CTRL_LMB]) > 0))
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_CTRL_LMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_CTRL_LMB]: [context[SCREENTIP_CONTEXT_CTRL_LMB][intent]]")
ctrl_lmb_ctrl_rmb_line = english_list(to_add, "", " | ", " | ", " | ")
extra_context = "<br><span style='font-size: 7px'>[extra_context]</span>"
if((SCREENTIP_CONTEXT_CTRL_RMB in context) && (length(context[SCREENTIP_CONTEXT_CTRL_RMB]) > 0))
if (ctrl_lmb_ctrl_rmb_line != "")
ctrl_lmb_ctrl_rmb_line += " | "
ctrl_lmb_ctrl_rmb_line += "[SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB]]"
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_CTRL_RMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_CTRL_RMB]: [context[SCREENTIP_CONTEXT_CTRL_RMB][intent]]")
ctrl_lmb_ctrl_rmb_line = english_list(to_add, "", " | ", " | ", " | ")
// Alt-LMB, Alt-RMB on one line...
if (ctrl_lmb_ctrl_rmb_line != "")
ctrl_lmb_ctrl_rmb_line += "<br>"
extra_lines++
if((SCREENTIP_CONTEXT_ALT_LMB in context) && (length(context[SCREENTIP_CONTEXT_ALT_LMB]) > 0))
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_ALT_LMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_ALT_LMB]: [context[SCREENTIP_CONTEXT_ALT_LMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_ALT_LMB]: [context[SCREENTIP_CONTEXT_ALT_LMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_ALT_LMB]: [context[SCREENTIP_CONTEXT_ALT_LMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_ALT_LMB]: [context[SCREENTIP_CONTEXT_ALT_LMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_ALT_LMB]: [context[SCREENTIP_CONTEXT_ALT_LMB][intent]]")
alt_lmb_alt_rmb_line = english_list(to_add, "", " | ", " | ", " | ")
if((SCREENTIP_CONTEXT_ALT_RMB in context) && (length(context[SCREENTIP_CONTEXT_ALT_RMB]) > 0))
if (alt_lmb_alt_rmb_line != "")
alt_lmb_alt_rmb_line += " | "
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_ALT_RMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_ALT_RMB]: [context[SCREENTIP_CONTEXT_ALT_RMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_ALT_RMB]: [context[SCREENTIP_CONTEXT_ALT_RMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_ALT_RMB]: [context[SCREENTIP_CONTEXT_ALT_RMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_ALT_RMB]: [context[SCREENTIP_CONTEXT_ALT_RMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_ALT_RMB]: [context[SCREENTIP_CONTEXT_ALT_RMB][intent]]")
alt_lmb_alt_rmb_line = english_list(to_add, "", " | ", " | ", " | ")
// Shift-LMB, Ctrl-Shift-LMB on one line...
if (alt_lmb_alt_rmb_line != "")
alt_lmb_alt_rmb_line += "<br>"
extra_lines++
if((SCREENTIP_CONTEXT_SHIFT_LMB in context) && (length(context[SCREENTIP_CONTEXT_SHIFT_LMB]) > 0))
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_SHIFT_LMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_SHIFT_LMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_SHIFT_LMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_SHIFT_LMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_SHIFT_LMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_SHIFT_LMB][intent]]")
shift_lmb_ctrl_shift_lmb_line = english_list(to_add, "", " | ", " | ", " | ")
if((SCREENTIP_CONTEXT_CTRL_SHIFT_LMB in context) && (length(context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]) > 0))
if (shift_lmb_ctrl_shift_lmb_line != "")
shift_lmb_ctrl_shift_lmb_line += " | "
shift_lmb_ctrl_shift_lmb_line += "[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]]"
var/list/to_add
for(var/intent in context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB])
switch(intent)
if(INTENT_HELP)
LAZYADD(to_add, "\icon[intent_help] [SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB][INTENT_HELP]]")
if(INTENT_DISARM)
LAZYADD(to_add, "\icon[intent_disarm] [SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB][INTENT_DISARM]]")
if(INTENT_GRAB)
LAZYADD(to_add, "\icon[intent_grab] [SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB][INTENT_GRAB]]")
if(INTENT_HARM)
LAZYADD(to_add, "\icon[intent_harm] [SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB][INTENT_HARM]]")
else // If you're adding intent-less YOU BETTER ADD IT FIRST IN THE LIST
LAZYADD(to_add, "[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB]: [context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB][intent]]")
shift_lmb_ctrl_shift_lmb_line = english_list(to_add, "", " | ", " | ", " | ")
if (shift_lmb_ctrl_shift_lmb_line != "")
extra_lines++
if(extra_lines)
extra_context = "<br><span style='font-size: 7px'>[lmb_rmb_line][ctrl_lmb_ctrl_rmb_line][alt_lmb_alt_rmb_line][shift_lmb_ctrl_shift_lmb_line]</span>"
//first extra line pushes atom name line up 10px, subsequent lines push it up 9px, this offsets that and keeps the first line in the same place
active_hud.screentip_text.maptext_y = -10 + (extra_lines - 1) * -9
if (screentips_enabled == SCREENTIP_PREFERENCE_CONTEXT_ONLY && extra_context == "")
active_hud.screentip_text.maptext = ""

View File

@@ -701,34 +701,34 @@
. = ..()
if(istype(held_item, /obj/item/stack/sheet/plasteel))
context[SCREENTIP_CONTEXT_LMB] = "Reinforce"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Reinforce")
return CONTEXTUAL_SCREENTIP_SET
switch (held_item?.tool_behaviour)
if (TOOL_CROWBAR)
if (panel_open)
if (security_level == AIRLOCK_SECURITY_PLASTEEL_O_S || security_level == AIRLOCK_SECURITY_PLASTEEL_I_S)
context[SCREENTIP_CONTEXT_LMB] = "Remove shielding"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Remove shielding")
return CONTEXTUAL_SCREENTIP_SET
else if (should_try_removing_electronics())
context[SCREENTIP_CONTEXT_LMB] = "Remove electronics"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Remove electronics")
return CONTEXTUAL_SCREENTIP_SET
// Not always contextually true, but is contextually false in ways that make gameplay interesting.
// For example, trying to pry open an airlock, only for the bolts to be down and the lights off.
context[SCREENTIP_CONTEXT_LMB] = "Pry open"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Pry open")
return CONTEXTUAL_SCREENTIP_SET
if (TOOL_WELDER)
context[SCREENTIP_CONTEXT_RMB] = "Weld shut"
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_ANY, "Weld shut")
if (panel_open)
switch (security_level)
if (AIRLOCK_SECURITY_METAL, AIRLOCK_SECURITY_PLASTEEL_I, AIRLOCK_SECURITY_PLASTEEL_O)
context[SCREENTIP_CONTEXT_LMB] = "Cut shielding"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Cut shielding")
return CONTEXTUAL_SCREENTIP_SET
context[SCREENTIP_CONTEXT_LMB] = "Repair"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Repair")
return CONTEXTUAL_SCREENTIP_SET
return .

View File

@@ -59,7 +59,7 @@
. = ..()
if (isnull(held_item) && !istype(src, /obj/machinery/door/firedoor)) // You cannot open/close with your hands
context[SCREENTIP_CONTEXT_LMB] = density ? "Open" : "Close"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (density ? "Open" : "Close"))
return CONTEXTUAL_SCREENTIP_SET
/obj/machinery/door/check_access_list(list/access_list)

View File

@@ -51,7 +51,7 @@
if (isnull(held_item))
if (density)
context[SCREENTIP_CONTEXT_LMB] = "Knock"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Knock")
return CONTEXTUAL_SCREENTIP_SET
else
return .
@@ -59,18 +59,18 @@
switch (held_item.tool_behaviour)
if (TOOL_CROWBAR)
if(!welded)
context[SCREENTIP_CONTEXT_LMB] = density ? "Open" : "Close"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (density ? "Open" : "Close"))
return CONTEXTUAL_SCREENTIP_SET
if (TOOL_WELDER)
context[SCREENTIP_CONTEXT_LMB] = welded ? "Unweld shut" : "Weld shut"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (welded ? "Unweld shut" : "Weld shut"))
return CONTEXTUAL_SCREENTIP_SET
if (TOOL_WRENCH)
if (welded && !boltslocked)
context[SCREENTIP_CONTEXT_LMB] = "Unfasten bolts"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Unfasten bolts")
return CONTEXTUAL_SCREENTIP_SET
if (TOOL_SCREWDRIVER)
if (welded)
context[SCREENTIP_CONTEXT_LMB] = boltslocked ? "Unlock bolts" : "Lock bolts"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (boltslocked ? "Unlock bolts" : "Lock bolts"))
return CONTEXTUAL_SCREENTIP_SET
return .

View File

@@ -51,11 +51,14 @@
myarea = get_base_area(src)
LAZYADD(myarea.firealarms, src)
register_context()
/obj/machinery/firealarm/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
if(isnull(held_item))
context[SCREENTIP_CONTEXT_LMB] = triggered ? "Turn off" : "Turn on"
var/area/location = get_area(src)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (location.fire ? "Turn off" : "Turn on"))
return CONTEXTUAL_SCREENTIP_SET
/obj/machinery/firealarm/Destroy()

View File

@@ -116,6 +116,38 @@ GLOBAL_LIST_EMPTY(PDAs)
if(inserted_item && (!isturf(loc)))
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
/obj/item/pda/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
if(held_item)
if(istype(held_item, /obj/item/cartridge) && !cartridge)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Insert Cartridge")
. = CONTEXTUAL_SCREENTIP_SET
else if(istype(held_item, /obj/item/card/id) && !id)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Insert ID")
. = CONTEXTUAL_SCREENTIP_SET
else if(istype(held_item, /obj/item/paicard) && !pai)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Insert pAI")
. = CONTEXTUAL_SCREENTIP_SET
else if(is_type_in_list(held_item, contained_item) && !inserted_item)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Insert [held_item]")
. = CONTEXTUAL_SCREENTIP_SET
else if(istype(held_item, /obj/item/photo))
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan photo")
. = CONTEXTUAL_SCREENTIP_SET
if(id) // ID gets removed before inserted_item
LAZYSET(context[SCREENTIP_CONTEXT_ALT_LMB], INTENT_ANY, "Remove ID")
. = CONTEXTUAL_SCREENTIP_SET
else if(inserted_item)
LAZYSET(context[SCREENTIP_CONTEXT_ALT_LMB], INTENT_ANY, "Remove [inserted_item]")
. = CONTEXTUAL_SCREENTIP_SET
if(inserted_item)
LAZYSET(context[SCREENTIP_CONTEXT_CTRL_LMB], INTENT_ANY, "Remove [inserted_item]")
. = CONTEXTUAL_SCREENTIP_SET
return . || NONE
/obj/item/pda/Initialize(mapload)
if(GLOB.pda_reskins)
unique_reskin = GLOB.pda_reskins

View File

@@ -145,11 +145,11 @@ GENETICS SCANNER
switch (scanmode)
if (SCANMODE_HEALTH)
context[SCREENTIP_CONTEXT_LMB] = "Scan health"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan health")
if (SCANMODE_CHEMICAL)
context[SCREENTIP_CONTEXT_LMB] = "Scan chemicals"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan chemicals")
if (SCANMODE_WOUND)
context[SCREENTIP_CONTEXT_LMB] = "Scan wounds"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan wounds")
return CONTEXTUAL_SCREENTIP_SET

View File

@@ -127,11 +127,11 @@
var/static/list/hovering_item_typechecks = list(
/obj/item/stack/rods = list(
SCREENTIP_CONTEXT_LMB = "Craft wired rod",
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft wired rod"),
),
/obj/item/stack/sheet/metal = list(
SCREENTIP_CONTEXT_LMB = "Craft bola",
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft bola"),
),
)

View File

@@ -162,22 +162,18 @@
return NONE
if (isobj(target))
context[SCREENTIP_CONTEXT_LMB] = "Attack"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Attack")
else
if (turned_on)
context[SCREENTIP_CONTEXT_RMB] = "Knockdown"
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_ANY, "Knockdown")
if (user.a_intent == INTENT_HARM)
context[SCREENTIP_CONTEXT_LMB] = "Harmful stun"
else
context[SCREENTIP_CONTEXT_LMB] = "Stun"
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Stun")
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HARM, "Harmful stun")
else
context[SCREENTIP_CONTEXT_RMB] = "Knockdown" // DON'T TELL EM, PRANKED.
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_ANY, "Knockdown") // DON'T TELL EM, PRANKED.
if (user.a_intent == INTENT_HARM)
context[SCREENTIP_CONTEXT_LMB] = "Attack" // It's fine i guess...?
else
context[SCREENTIP_CONTEXT_LMB] = "Stun" // STILL DO NOT DARE TELLING THEM
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Stun") // STILL DO NOT DARE TELLING THEM
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HARM, "Attack") // It's fine i guess...?
return CONTEXTUAL_SCREENTIP_SET

View File

@@ -588,11 +588,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
var/static/list/hovering_item_typechecks = list(
/obj/item/shard = list(
SCREENTIP_CONTEXT_LMB = "Craft spear",
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft spear"),
),
/obj/item/assembly/igniter = list(
SCREENTIP_CONTEXT_LMB = "Craft stunprod",
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft stunprod"),
),
)

View File

@@ -503,11 +503,11 @@
if (!(flags_1 & NODECONSTRUCT_1))
var/static/list/tool_behaviors = list(
TOOL_SCREWDRIVER = list(
SCREENTIP_CONTEXT_LMB = "Disassemble",
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Disassemble"),
),
TOOL_WRENCH = list(
SCREENTIP_CONTEXT_LMB = "Deconstruct",
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Deconstruct"),
),
)

View File

@@ -827,7 +827,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<b>UI Style:</b> <a href='?_src_=prefs;task=input;preference=ui'>[UI_style]</a><br>"
dat += "<b>Outline:</b> <a href='?_src_=prefs;preference=outline_enabled'>[outline_enabled ? "Enabled" : "Disabled"]</a><br>"
dat += "<b>Outline Color:</b> [outline_color ? "<span style='border:1px solid #161616; background-color: [outline_color];'>" : "Theme-based (null)"]&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=outline_color'>Change</a><BR>"
dat += "<b>Screentip:</b> <a href='?_src_=prefs;preference=screentip_pref'>[screentip_pref ? "Enabled" : "Disabled"]</a><br>"
dat += "<b>Screentip:</b> <a href='?_src_=prefs;preference=screentip_pref'>[screentip_pref]</a><br>"
dat += "<b>Screentip Color:</b> <span style='border:1px solid #161616; background-color: [screentip_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=screentip_color'>Change</a><BR>"
dat += "<b>tgui Monitors:</b> <a href='?_src_=prefs;preference=tgui_lock'>[(tgui_lock) ? "Primary" : "All"]</a><br>"
dat += "<b>tgui Style:</b> <a href='?_src_=prefs;preference=tgui_fancy'>[(tgui_fancy) ? "Fancy" : "No Frills"]</a><br>"

View File

@@ -9,42 +9,40 @@
var/combat_mode = SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)
switch(user.a_intent)
if(INTENT_HELP)
if(user == src)
context[SCREENTIP_CONTEXT_LMB] = "Check injuries"
else if(!lying)
context[SCREENTIP_CONTEXT_LMB] = "Comfort"
else if (health >= 0 && !HAS_TRAIT(src, TRAIT_FAKEDEATH))
context[SCREENTIP_CONTEXT_LMB] = "Shake"
else
context[SCREENTIP_CONTEXT_LMB] = "CPR"
if(INTENT_DISARM)
context[SCREENTIP_CONTEXT_LMB] = "Disarm"
if(combat_mode && (src != user))
context[SCREENTIP_CONTEXT_RMB] = "Shove"
if(INTENT_GRAB)
if(src != user)
if (pulledby == user)
switch (user.grab_state)
if (GRAB_PASSIVE)
context[SCREENTIP_CONTEXT_LMB] = "Grip"
if (GRAB_AGGRESSIVE)
context[SCREENTIP_CONTEXT_LMB] = "Choke"
if (GRAB_NECK)
context[SCREENTIP_CONTEXT_LMB] = "Strangle"
else
return .
if(user == src)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HELP, "Check injuries")
else if(!lying)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HELP, "Comfort")
else if (health >= 0 && !HAS_TRAIT(src, TRAIT_FAKEDEATH))
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HELP, "Shake")
else
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HELP, "CPR")
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_DISARM, "Disarm")
if(combat_mode && (src != user))
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_DISARM, "Shove")
if(src != user)
if (pulledby == user)
switch (user.grab_state)
if (GRAB_PASSIVE)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_GRAB, "Grip")
if (GRAB_AGGRESSIVE)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_GRAB, "Choke")
if (GRAB_NECK)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_GRAB, "Strangle")
else
context[SCREENTIP_CONTEXT_LMB] = "Pull"
if(INTENT_HARM)
context[SCREENTIP_CONTEXT_LMB] = "Attack"
return .
else
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_GRAB, "Pull")
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HARM, "Attack")
// Did you know we cannot upgrade grabs from ctrl-click, that's cool
if((pulledby != user) && (src != user))
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Pull"
LAZYSET(context[SCREENTIP_CONTEXT_CTRL_LMB], INTENT_ANY, "Pull")
// Happens on any intent i believe
if((user == src) && combat_mode && lying)
context[SCREENTIP_CONTEXT_RMB] = "Force to get up"
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_ANY, "Force to get up")
return CONTEXTUAL_SCREENTIP_SET

View File

@@ -1,12 +1,21 @@
/* // Nothing unique, yet.
/mob/living/carbon/human/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
. = ..()
if (!ishuman(user))
return .
if (user == src)
return .
var/aim_for_mouth = user.zone_selected == "mouth"
var/target_on_help = a_intent == INTENT_HELP
var/target_aiming_for_mouth = zone_selected == "mouth"
var/target_restrained = restrained()
var/same_dir = (dir & user.dir)
var/aim_for_groin = user.zone_selected == "groin"
var/target_aiming_for_groin = zone_selected == "groin"
if(aim_for_mouth && (target_on_help || target_restrained || target_aiming_for_mouth))
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_DISARM, "Slap face")
else if(aim_for_groin && (src == user || lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_DISARM, "Slap ass")
return CONTEXTUAL_SCREENTIP_SET
*/

View File

@@ -717,11 +717,10 @@
#include "code\datums\elements\ventcrawling.dm"
#include "code\datums\elements\weather_listener.dm"
#include "code\datums\elements\wuv.dm"
#include "code\datums\elements\screentips\atom_context.dm"
#include "code\datums\elements\screentips\contextual_screentip_bare_hands.dm"
#include "code\datums\elements\screentips\contextual_screentip_item_typechecks.dm"
#include "code\datums\elements\screentips\contextual_screentip_sharpness.dm"
#include "code\datums\elements\screentips\contextual_screentip_tools.dm"
#include "code\datums\elements\screentips\item_context.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
#include "code\datums\helper_datums\icon_snapshot.dm"
@@ -777,6 +776,8 @@
#include "code\datums\ruins\lavaland.dm"
#include "code\datums\ruins\space.dm"
#include "code\datums\ruins\station.dm"
#include "code\datums\screentips\atom_context.dm"
#include "code\datums\screentips\item_context.dm"
#include "code\datums\skills\_check_skills.dm"
#include "code\datums\skills\_skill.dm"
#include "code\datums\skills\_skill_holder.dm"