Merge pull request #15962 from SandPoot/contextual-screentips

Contextual screentips -- Screentips now show you what items/objects can do
This commit is contained in:
Timothy Teakettle
2023-02-15 23:04:54 +00:00
committed by GitHub
33 changed files with 1007 additions and 24 deletions
@@ -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
@@ -133,6 +165,8 @@ GLOBAL_LIST_EMPTY(PDAs)
new_overlays = TRUE
update_icon()
register_context()
/obj/item/pda/reskin_obj(mob/M)
. = ..()
new_overlays = TRUE
@@ -91,6 +91,11 @@ GENETICS SCANNER
var/scanmode = SCANMODE_HEALTH
var/advanced = FALSE
/obj/item/healthanalyzer/Initialize(mapload)
. = ..()
register_item_context()
/obj/item/healthanalyzer/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] begins to analyze [user.p_them()]self with [src]! The display shows that [user.p_theyre()] dead!</span>")
return BRUTELOSS
@@ -130,6 +135,24 @@ GENETICS SCANNER
add_fingerprint(user)
/obj/item/healthanalyzer/add_item_context(
obj/item/source,
list/context,
atom/target,
)
if (!isliving(target))
return NONE
switch (scanmode)
if (SCANMODE_HEALTH)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan health")
if (SCANMODE_CHEMICAL)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan chemicals")
if (SCANMODE_WOUND)
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Scan wounds")
return CONTEXTUAL_SCREENTIP_SET
// Used by the PDA medical scanner too
/proc/healthscan(mob/user, mob/living/M, mode = 1, advanced = FALSE)
if(isliving(user) && (user.incapacitated() || user.eye_blind))
@@ -549,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
+15
View File
@@ -122,6 +122,21 @@
breakouttime = 300 //Deciseconds = 30s
cuffsound = 'sound/weapons/cablecuff.ogg'
/obj/item/restraints/handcuffs/cable/Initialize(mapload)
. = ..()
var/static/list/hovering_item_typechecks = list(
/obj/item/stack/rods = list(
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft wired rod"),
),
/obj/item/stack/sheet/metal = list(
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft bola"),
),
)
AddElement(/datum/element/contextual_screentip_item_typechecks, hovering_item_typechecks)
/obj/item/restraints/handcuffs/cable/attack_self(mob/user)
to_chat(user, "<span class='notice'>You start unwinding the cable restraints back into coil</span>")
if(!do_after(user, 25, TRUE, user))
+22
View File
@@ -54,6 +54,8 @@
cell = new preload_cell_type(src)
update_icon()
register_item_context()
/obj/item/melee/baton/DoRevenantThrowEffects(atom/target)
switch_status()
@@ -155,6 +157,26 @@
if(!interrupt)
return ..()
/obj/item/melee/baton/add_item_context(datum/source, list/context, atom/target, mob/living/user)
if (isturf(target))
return NONE
if (isobj(target))
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Attack")
else
if (turned_on)
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_ANY, "Knockdown")
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Stun")
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_HARM, "Harmful stun")
else
LAZYSET(context[SCREENTIP_CONTEXT_RMB], INTENT_ANY, "Knockdown") // DON'T TELL EM, PRANKED.
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
/obj/item/melee/baton/alt_pre_attack(atom/A, mob/living/user, params)
if(!user.CheckActionCooldown(CLICK_CD_MELEE))
return
+15
View File
@@ -583,6 +583,21 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
wound_bonus = -10
/obj/item/wirerod/Initialize(mapload)
. = ..()
var/static/list/hovering_item_typechecks = list(
/obj/item/shard = list(
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft spear"),
),
/obj/item/assembly/igniter = list(
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Craft stunprod"),
),
)
AddElement(/datum/element/contextual_screentip_item_typechecks, hovering_item_typechecks)
/obj/item/wirerod/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/shard))
var/obj/item/spear/S = new /obj/item/spear
+24 -1
View File
@@ -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_ANY = "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)
@@ -490,6 +500,19 @@
// the sprites in the editor to see why.
icon = smooth_icon
if (!(flags_1 & NODECONSTRUCT_1))
var/static/list/tool_behaviors = list(
TOOL_SCREWDRIVER = list(
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Disassemble"),
),
TOOL_WRENCH = list(
SCREENTIP_CONTEXT_LMB = list(INTENT_ANY = "Deconstruct"),
),
)
AddElement(/datum/element/contextual_screentip_tools, tool_behaviors)
/obj/structure/table/wood/fancy/black
icon_state = "fancy_table_black"
buildstack = /obj/item/stack/tile/carpet/black
@@ -704,7 +727,7 @@
. = !density
if(istype(caller))
. = . || (caller.pass_flags & PASSTABLE)
/obj/structure/rack/MouseDrop_T(obj/O, mob/user)
. = ..()
if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O))