diff --git a/code/datums/elements/screentips/README.md b/code/datums/elements/screentips/README.md index b52a5d18d1..069b5d6f37 100644 --- a/code/datums/elements/screentips/README.md +++ b/code/datums/elements/screentips/README.md @@ -19,8 +19,8 @@ Example: . = ..() AddElement( \ /datum/element/contextual_screentip_bare_hands, \ - lmb_text = "Turn on", \ - rmb_text = "Turn off", \ + lmb_text = list(INTENT_HELP = "Turn on"), \ + rmb_text = list(INTENT_HELP = "Turn off"), \ ) ``` diff --git a/code/datums/elements/screentips/contextual_screentip_bare_hands.dm b/code/datums/elements/screentips/contextual_screentip_bare_hands.dm index 843d73e78d..136fcf6499 100644 --- a/code/datums/elements/screentips/contextual_screentip_bare_hands.dm +++ b/code/datums/elements/screentips/contextual_screentip_bare_hands.dm @@ -5,20 +5,30 @@ element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH id_arg_index = 3 + /* How to use SandPoot's version of this: + * + * Combat mode will be checked first, then the intents for it, if the + * current intent has not been set it defaults to the first item of the list. + * + * Otherwise if not in combat mode or no messages for it + * will also try to get messages for the current intent + * if failing to, will try to get the first item of the list. + */ + /// If set, the text to show for LMB - var/lmb_text + var/list/lmb_text /// If set, the text to show for RMB - var/rmb_text + var/list/rmb_text /// If set, the text to show for LMB when in combat mode. Otherwise, defaults to lmb_text. - var/lmb_text_combat_mode + var/list/lmb_text_combat_mode /// If set, the text to show for RMB when in combat mode. Otherwise, defaults to rmb_text. - var/rmb_text_combat_mode + var/list/rmb_text_combat_mode // If you're curious about `use_named_parameters`, it's because you should use named parameters! -// AddElement(/datum/element/contextual_screentip_bare_hands, lmb_text = "Do the thing") +// AddElement(/datum/element/contextual_screentip_bare_hands, lmb_text = list(INTENT_HELP = "Do the thing")) /datum/element/contextual_screentip_bare_hands/Attach( datum/target, use_named_parameters, @@ -64,10 +74,31 @@ if (!isnull(held_item)) return NONE - if (!isnull(lmb_text)) - context[SCREENTIP_CONTEXT_LMB] = user.a_intent == INTENT_HARM ? lmb_text_combat_mode : lmb_text + var/combat_mode = SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE) - if (!isnull(rmb_text)) - context[SCREENTIP_CONTEXT_RMB] = user.a_intent == INTENT_HARM ? rmb_text_combat_mode : rmb_text + 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] + 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] + 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] + 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] return CONTEXTUAL_SCREENTIP_SET diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 969469d8ea..d45d0c3260 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -700,6 +700,10 @@ /obj/machinery/door/airlock/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() + if(istype(held_item, /obj/item/stack/sheet/plasteel)) + context[SCREENTIP_CONTEXT_LMB] = "Reinforce" + return CONTEXTUAL_SCREENTIP_SET + switch (held_item?.tool_behaviour) if (TOOL_CROWBAR) if (panel_open) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 535214252a..b037c8f090 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -58,7 +58,7 @@ /obj/machinery/door/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() - if (isnull(held_item)) + if (isnull(held_item) && !istype(src, /obj/machinery/door/firedoor)) // You cannot open/close with your hands context[SCREENTIP_CONTEXT_LMB] = density ? "Open" : "Close" return CONTEXTUAL_SCREENTIP_SET diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 57b8fddbf8..b5ca314115 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -51,25 +51,16 @@ if (isnull(held_item)) if (density) - // This should be LMB/RMB one day - if (user.a_intent == INTENT_HARM) - context[SCREENTIP_CONTEXT_LMB] = "Knock" - else - context[SCREENTIP_CONTEXT_LMB] = "Bash" - + context[SCREENTIP_CONTEXT_LMB] = "Knock" return CONTEXTUAL_SCREENTIP_SET else return . switch (held_item.tool_behaviour) if (TOOL_CROWBAR) - if (density) - context[SCREENTIP_CONTEXT_LMB] = "Close" - else if (!welded) - context[SCREENTIP_CONTEXT_LMB] = "Hold open" - context[SCREENTIP_CONTEXT_RMB] = "Open permanently" - - return CONTEXTUAL_SCREENTIP_SET + if(!welded) + context[SCREENTIP_CONTEXT_LMB] = density ? "Open" : "Close" + return CONTEXTUAL_SCREENTIP_SET if (TOOL_WELDER) context[SCREENTIP_CONTEXT_LMB] = welded ? "Unweld shut" : "Weld shut" return CONTEXTUAL_SCREENTIP_SET @@ -79,9 +70,8 @@ return CONTEXTUAL_SCREENTIP_SET if (TOOL_SCREWDRIVER) if (welded) - context[SCREENTIP_CONTEXT_LMB] = "Unlock bolts" + context[SCREENTIP_CONTEXT_LMB] = boltslocked ? "Unlock bolts" : "Lock bolts" return CONTEXTUAL_SCREENTIP_SET - return . /obj/machinery/door/firedoor/proc/CalculateAffectingAreas() diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 013ede3a51..bd741d536e 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -51,11 +51,12 @@ myarea = get_base_area(src) LAZYADD(myarea.firealarms, src) - AddElement( \ - /datum/element/contextual_screentip_bare_hands, \ - lmb_text = "Turn on", \ - rmb_text = "Turn off", \ - ) +/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" + return CONTEXTUAL_SCREENTIP_SET /obj/machinery/firealarm/Destroy() myarea.firereset(src) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 160119c935..78d3ae58e4 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -572,6 +572,7 @@ GENETICS SCANNER name = "first aid analyzer" icon_state = "adv_spectrometer" desc = "A prototype MeLo-Tech medical scanner used to diagnose injuries and recommend treatment for serious wounds, but offers no further insight into the patient's health. You hope the final version is less annoying to read!" + scanmode = SCANMODE_WOUND // Forces context to give correct tip. var/next_encouragement var/greedy diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index e970622905..ded7c4d656 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -30,24 +30,6 @@ var/status_duration = 3 SECONDS //how long our status effects last for otherwise COOLDOWN_DECLARE(shove_cooldown) - /// The context to show when the baton is active and targetting a living thing - var/context_living_target_active = "Stun" - - /// The context to show when the baton is active and targetting a living thing in combat mode - var/context_living_target_active_combat_mode = "Stun" - - /// The context to show when the baton is inactive and targetting a living thing - var/context_living_target_inactive = "Prod" - - /// The context to show when the baton is inactive and targetting a living thing in combat mode - var/context_living_target_inactive_combat_mode = "Attack" - - /// The RMB context to show when the baton is active and targetting a living thing - var/context_living_rmb_active = "Attack" - - /// The RMB context to show when the baton is inactive and targetting a living thing - var/context_living_rmb_inactive = "Attack" - /obj/item/melee/baton/examine(mob/user) . = ..() . += "Right click attack while in combat mode to knockdown, but only once per [cooldown_duration / 10] seconds." @@ -183,19 +165,19 @@ context[SCREENTIP_CONTEXT_LMB] = "Attack" else if (turned_on) - context[SCREENTIP_CONTEXT_RMB] = context_living_rmb_active + context[SCREENTIP_CONTEXT_RMB] = "Knockdown" if (user.a_intent == INTENT_HARM) - context[SCREENTIP_CONTEXT_LMB] = context_living_target_active_combat_mode + context[SCREENTIP_CONTEXT_LMB] = "Harmful stun" else - context[SCREENTIP_CONTEXT_LMB] = context_living_target_active + context[SCREENTIP_CONTEXT_LMB] = "Stun" else - context[SCREENTIP_CONTEXT_RMB] = context_living_rmb_inactive + context[SCREENTIP_CONTEXT_RMB] = "Knockdown" // DON'T TELL EM, PRANKED. if (user.a_intent == INTENT_HARM) - context[SCREENTIP_CONTEXT_LMB] = context_living_target_inactive_combat_mode + context[SCREENTIP_CONTEXT_LMB] = "Attack" // It's fine i guess...? else - context[SCREENTIP_CONTEXT_LMB] = context_living_target_inactive + context[SCREENTIP_CONTEXT_LMB] = "Stun" // STILL DO NOT DARE TELLING THEM return CONTEXTUAL_SCREENTIP_SET diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 444df4d965..d0344d68fc 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -37,6 +37,16 @@ smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced, /obj/structure/table/greyscale) +/obj/structure/table/Initialize(mapload) + . = ..() + + var/static/list/barehanded_interactions = list( + INTENT_HELP = "Slap", + INTENT_HARM = "Slam" + ) + + AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text_combat_mode = barehanded_interactions) + /obj/structure/table/examine(mob/user) . = ..() . += deconstruction_hints(user) @@ -493,11 +503,11 @@ 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", ), ) diff --git a/code/modules/mob/living/carbon/carbon_context.dm b/code/modules/mob/living/carbon/carbon_context.dm index c632c08a2e..ae2a8d26e7 100644 --- a/code/modules/mob/living/carbon/carbon_context.dm +++ b/code/modules/mob/living/carbon/carbon_context.dm @@ -21,7 +21,7 @@ context[SCREENTIP_CONTEXT_LMB] = "CPR" if(INTENT_DISARM) context[SCREENTIP_CONTEXT_LMB] = "Disarm" - if(combat_mode) + if(combat_mode && (src != user)) context[SCREENTIP_CONTEXT_RMB] = "Shove" if(INTENT_GRAB) if(src != user) @@ -41,7 +41,7 @@ context[SCREENTIP_CONTEXT_LMB] = "Attack" // Did you know we cannot upgrade grabs from ctrl-click, that's cool - if(pulledby != user) + if((pulledby != user) && (src != user)) context[SCREENTIP_CONTEXT_CTRL_LMB] = "Pull" // Happens on any intent i believe if((user == src) && combat_mode && lying)