Merge pull request #15962 from SandPoot/contextual-screentips
Contextual screentips -- Screentips now show you what items/objects can do
This commit is contained in:
@@ -697,6 +697,42 @@
|
||||
. += "<span class='notice'>Alt-click [src] to [ secondsElectrified ? "un-electrify" : "permanently electrify"] it.</span>"
|
||||
. += "<span class='notice'>Ctrl-Shift-click [src] to [ emergency ? "disable" : "enable"] emergency access.</span>"
|
||||
|
||||
/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))
|
||||
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)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Remove shielding")
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
else if (should_try_removing_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.
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Pry open")
|
||||
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
if (TOOL_WELDER)
|
||||
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)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Cut shielding")
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Repair")
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/door/airlock/attack_ai(mob/user)
|
||||
if(!src.canAIControl(user))
|
||||
if(src.canAIHack())
|
||||
@@ -1024,6 +1060,31 @@
|
||||
return
|
||||
return !operating && density
|
||||
|
||||
/// Returns if a crowbar would remove the airlock electronics
|
||||
/obj/machinery/door/airlock/proc/should_try_removing_electronics()
|
||||
if (security_level != 0)
|
||||
return FALSE
|
||||
|
||||
if (!panel_open)
|
||||
return FALSE
|
||||
|
||||
if (obj_flags & EMAGGED)
|
||||
return TRUE
|
||||
|
||||
if (!density)
|
||||
return FALSE
|
||||
|
||||
if (!welded)
|
||||
return FALSE
|
||||
|
||||
if (hasPower())
|
||||
return FALSE
|
||||
|
||||
if (locked)
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/door/airlock/try_to_crowbar(obj/item/I, mob/living/user)
|
||||
var/beingcrowbarred = null
|
||||
if(I.tool_behaviour == TOOL_CROWBAR)
|
||||
@@ -1042,9 +1103,9 @@
|
||||
charge.forceMove(get_turf(user))
|
||||
charge = null
|
||||
return
|
||||
if(beingcrowbarred && panel_open && ((obj_flags & EMAGGED) || (density && welded && !operating && !hasPower() && !locked)))
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", \
|
||||
"<span class='notice'>You start to remove electronics from the airlock assembly...</span>")
|
||||
if(beingcrowbarred && should_try_removing_electronics() && !operating)
|
||||
user.visible_message(span_notice("[user] removes the electronics from the airlock assembly."), \
|
||||
span_notice("You start to remove electronics from the airlock assembly..."))
|
||||
if(I.use_tool(src, user, 40, volume=100))
|
||||
deconstruct(TRUE, user)
|
||||
return
|
||||
|
||||
@@ -55,6 +55,13 @@
|
||||
if(!poddoor)
|
||||
. += "<span class='notice'>Its maintenance panel is <b>screwed</b> in place.</span>"
|
||||
|
||||
/obj/machinery/door/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
|
||||
. = ..()
|
||||
|
||||
if (isnull(held_item) && !istype(src, /obj/machinery/door/firedoor)) // You cannot open/close with your hands
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (density ? "Open" : "Close"))
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
|
||||
/obj/machinery/door/check_access_list(list/access_list)
|
||||
if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED)
|
||||
return TRUE
|
||||
@@ -65,6 +72,7 @@
|
||||
set_init_door_layer()
|
||||
update_freelook_sight()
|
||||
air_update_turf(1)
|
||||
register_context()
|
||||
GLOB.airlocks += src
|
||||
spark_system = new /datum/effect_system/spark_spread
|
||||
spark_system.set_up(2, 1, src)
|
||||
|
||||
@@ -46,6 +46,34 @@
|
||||
else
|
||||
. += "<span class='notice'>The bolt locks have been <i>unscrewed</i>, but the bolts themselves are still <b>wrenched</b> to the floor.</span>"
|
||||
|
||||
/obj/machinery/door/firedoor/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
|
||||
. = ..()
|
||||
|
||||
if (isnull(held_item))
|
||||
if (density)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Knock")
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
else
|
||||
return .
|
||||
|
||||
switch (held_item.tool_behaviour)
|
||||
if (TOOL_CROWBAR)
|
||||
if(!welded)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (density ? "Open" : "Close"))
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
if (TOOL_WELDER)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (welded ? "Unweld shut" : "Weld shut"))
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
if (TOOL_WRENCH)
|
||||
if (welded && !boltslocked)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, "Unfasten bolts")
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
if (TOOL_SCREWDRIVER)
|
||||
if (welded)
|
||||
LAZYSET(context[SCREENTIP_CONTEXT_LMB], INTENT_ANY, (boltslocked ? "Unlock bolts" : "Lock bolts"))
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
return .
|
||||
|
||||
/obj/machinery/door/firedoor/proc/CalculateAffectingAreas()
|
||||
remove_from_areas()
|
||||
affecting_areas = get_adjacent_open_areas(src) | get_base_area(src)
|
||||
|
||||
@@ -51,6 +51,16 @@
|
||||
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))
|
||||
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()
|
||||
myarea.firereset(src)
|
||||
LAZYREMOVE(myarea.firealarms, src)
|
||||
|
||||
Reference in New Issue
Block a user