diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 0254a3caa13..4305d089af3 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -190,7 +190,8 @@ if (!Adjacent(user)) return if (user.a_intent == INTENT_HELP) - user.examinate(src) + if(!user.is_blind()) + user.examinate(src) return user.visible_message("[user] kicks the display case.", null, null, COMBAT_MESSAGE_RANGE) log_combat(user, src, "kicks") diff --git a/code/game/objects/structures/plaques/_plaques.dm b/code/game/objects/structures/plaques/_plaques.dm index cec563be8f0..347ea016a3c 100644 --- a/code/game/objects/structures/plaques/_plaques.dm +++ b/code/game/objects/structures/plaques/_plaques.dm @@ -33,7 +33,7 @@ /obj/structure/plaque/attack_hand(mob/user) . = ..() - if(.) + if(. || user.is_blind()) return user.examinate(src) diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index 7a1a1ab246a..61ba9a22e87 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -49,7 +49,7 @@ /obj/structure/sign/attack_hand(mob/user) . = ..() - if(.) + if(. || user.is_blind()) return user.examinate(src) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index e091f0ff906..c9510cdbd15 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -140,7 +140,7 @@ GLOBAL_LIST(labor_sheet_values) /obj/machinery/mineral/labor_points_checker/attack_hand(mob/user) . = ..() - if(.) + if(. || user.is_blind()) return user.examinate(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 09953b1be69..c3d07d58f21 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -446,9 +446,31 @@ // shift-click catcher may issue examinate() calls for out-of-sight turfs return - if(is_blind()) - to_chat(src, "Something is there but you can't see it!") - return + if(is_blind()) //blind people see things differently (through touch) + //need to be next to something, awake, on help intent, and have an empty hand + if(!in_range(A, src) || incapacitated() || a_intent != INTENT_HELP || LAZYLEN(do_afters) >= get_num_arms() || get_active_held_item()) + to_chat(src, "Something is there, but you can't see it!") + return + if(A in do_afters) + return + + to_chat(src, "You start feeling around for something...") + visible_message(" [name] begins feeling around for \the [A.name]...") + + /// how long it takes for the blind person to find the thing they're examining + var/examine_delay_length = rand(1 SECONDS, 2 SECONDS) + if(client?.recent_examines && client?.recent_examines[A]) //easier to find things we just touched + examine_delay_length = 0.5 SECONDS + else if(isobj(A)) + examine_delay_length *= 1.5 + else if(ismob(A) && A != src) + examine_delay_length *= 2 + + if(examine_delay_length > 0 && !do_after(src, examine_delay_length, target = A)) + to_chat(src, "You can't get a good feel for what is there.") + return + //now we go ahead and touch it with our hand + A.attack_hand(src) face_atom(A) var/list/result