diff --git a/code/datums/Emote_system/emote.dm b/code/datums/Emote_system/emote.dm index 8e63808be4d..1a1c1888f90 100644 --- a/code/datums/Emote_system/emote.dm +++ b/code/datums/Emote_system/emote.dm @@ -32,6 +32,7 @@ VampyrBytes var/canTarget = 0 // 1 if the emote accepts a target var/targetMob = 0 // 0 if target can be any atom, 1 if it has to be a mob, + var/mustTarget = 0 // 1 if the emote needs a target to work (won't get None as an option) var/targetText = "at" // what goes inbetween user and target var/takesNumber = 0 // 1 if the emote uses a number parameter @@ -124,16 +125,32 @@ VampyrBytes /datum/emote/proc/getTarget(var/mob/user) if(user.sdisabilities & BLIND || user.blinded || user.paralysis) return + var/list/targets = list() + if(!mustTarget) + targets += "None" + var/target if(targetMob) - return getMobTarget(user) - return getAtomTarget(user) - -/datum/emote/proc/getMobTarget(var/mob/user) - var/mob/target = input("Select target", "Target Mob") as null|mob in view(getLoc(user)) + target = getMobTarget(user, targets) + else + target = getAtomTarget(user, targets) + if(!target) + return INVALID + if(target == "None") + return return target -/datum/emote/proc/getAtomTarget(var/mob/user) - var/atom/target = input("Select target", "Target") as null|mob|obj|turf in oview(getLoc(user)) +/datum/emote/proc/getMobTarget(var/mob/user, var/list/targets) + for(var/mob/M in view(getLoc(user))) + targets += M + var/mob/target = input("Select target", "Target Mob") as null|anything in targets + return target + + +/datum/emote/proc/getAtomTarget(var/mob/user, var/list/targets) + for(var/A in oview(getLoc(user))) + if(ismob(A) || isobj(A) || isturf(A)) + targets += A + var/atom/target = input("Select target", "Target") as null|anything in targets return target // returns the reason the user can't currently do the emote diff --git a/code/datums/Emote_system/emotes.dm b/code/datums/Emote_system/emotes.dm index 1a490457a5c..81657b7fab1 100644 --- a/code/datums/Emote_system/emotes.dm +++ b/code/datums/Emote_system/emotes.dm @@ -756,6 +756,7 @@ selfText = "shake hands" canTarget = 1 targetMob = 1 + mustTarget = 1 targetText = "with" restrained = 1 @@ -768,13 +769,6 @@ if(!. && user.r_hand) return "you need your right hand free" -/datum/emote/handshake/getMobTarget(var/mob/user) - var/mob/target = ..() - if(target) - return target - to_chat(user, "You need someone to shake hands with") - return INVALID - /datum/emote/handshake/addTarget(var/mob/user, var/list/params, var/message) var/mob/target = params["target"] if(target.r_hand) @@ -836,6 +830,7 @@ mimeSelf = "take a drag from a cigarette and blow" canTarget = 1 targetMob = 1 + mustTarget = 1 targetText = "" /datum/emote/johnny/available(var/mob/user) @@ -844,7 +839,7 @@ /datum/emote/johnny/getTarget(var/mob/user) var/mob/target = ..() - if(target && target != user) + if(target != user) return target to_chat(user, "You need a target that isn't yourself") return INVALID @@ -1144,11 +1139,10 @@ if(!. && user.buckled) return "you are buckled to something" -/datum/emote/salute/getMobTarget(var/mob/user) +/datum/emote/salute/getMobTarget(var/mob/user, var/list/targets) var/mob/target = ..() - if(target == user) - return - return target + if(target != user) + return target /datum/emote/scratch name = "scratch" @@ -1342,9 +1336,11 @@ if(ishuman(user)) return 1 -/datum/emote/slap/getMobTarget(var/mob/user) - var/mob/target = input("Select target", "Target Mob") as null|mob in view(1) - if(!target) +/datum/emote/slap/getMobTarget(var/mob/user, var/list/targets) + for(var/mob/M in view(getLoc(user), 1)) + targets += M + var/mob/target = input("Select target", "Target Mob") as null|anything in targets + if(target == "None") target = user return target