From 480613208d4989fa78c4d0df3300fc27b1825583 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 17 Sep 2015 22:26:03 -0400 Subject: [PATCH] Point Rework --- code/_onclick/click.dm | 2 +- code/_onclick/cyborg.dm | 2 +- code/game/objects/effects/decals/misc.dm | 2 +- code/game/verbs/atom_verbs.dm | 28 ------------------- code/modules/mob/dead/observer/observer.dm | 11 +++++++- code/modules/mob/living/carbon/human/emote.dm | 10 ++----- code/modules/mob/living/living.dm | 12 ++++++++ .../mob/living/silicon/ai/freelook/eye.dm | 5 ---- code/modules/mob/mob.dm | 27 ++++++++++++++++++ 9 files changed, 55 insertions(+), 44 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index a40a9e16e55..799d5ee8ee0 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -190,7 +190,7 @@ Only used for swapping hands */ /mob/proc/MiddleClickOn(var/atom/A) - A.point() + pointed(A) return // See click_override.dm diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 1dcd785db7d..fd54407f19e 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -111,7 +111,7 @@ if(istype(src, /mob/living/silicon/robot/drone)) // Drones cannot point. return - A.point() + pointed(A) return //Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 4f80ff5e4fe..e7f0fb03cad 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -5,7 +5,7 @@ icon_state = "arrow" layer = 16.0 anchored = 1 - + mouse_opacity = 0 // Used for spray that you spray at walls, tables, hydrovats etc /obj/effect/decal/spraystill diff --git a/code/game/verbs/atom_verbs.dm b/code/game/verbs/atom_verbs.dm index b758f11cea1..4f77bf52f4c 100644 --- a/code/game/verbs/atom_verbs.dm +++ b/code/game/verbs/atom_verbs.dm @@ -6,31 +6,3 @@ if(Adjacent(usr)) usr.start_pulling(src) return - -/atom/verb/point() - set name = "Point To" - set category = null - set popup_menu = 0 - set src in oview() - var/atom/this = src//detach proc from src - src = null - - if(!usr || !isturf(usr.loc)) - return - if(usr.stat || usr.restrained()) - return - if(usr.status_flags & FAKEDEATH) - return - if(usr.next_move > world.time) - return - - var/tile = get_turf(this) - if (!tile) - return - - var/P = new /obj/effect/decal/point(tile) - usr.changeNext_move(CLICK_CD_POINT) - spawn (20) - if(P) qdel(P) - - usr.visible_message("[usr] points to [this]") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b16e94e2abb..96df9455e00 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -630,4 +630,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 0 /mob/dead/observer/can_admin_interact() - return check_rights(R_ADMIN, 0, src) \ No newline at end of file + return check_rights(R_ADMIN, 0, src) + +//this is a mob verb instead of atom for performance reasons +//see /mob/verb/examinate() in mob.dm for more info +//overriden here and in /mob/living for different point span classes and sanity checks +/mob/dead/observer/pointed(atom/A as mob|obj|turf in view()) + if(!..()) + return 0 + usr.visible_message("[src] points to [A].") + return 1 diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index abbe2d2cf3d..229e4c93d8a 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -518,9 +518,9 @@ if ("point") if (!src.restrained()) - var/mob/M = null + var/atom/M = null if (param) - for (var/atom/A as mob|obj|turf|area in view(null, null)) + for (var/atom/A as mob|obj|turf in view()) if (param == A.name) M = A break @@ -528,11 +528,7 @@ if (!M) message = "[src] points." else - M.point() - - if (M) - message = "[src] points to [M]." - else + pointed(M) m_type = 1 if ("raise") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ddc46419e7f..15a9f473212 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -25,6 +25,18 @@ special_role = null current << "\red The fog clouding your mind clears. You remember nothing from the moment you were implanted until now..(You don't remember who enslaved you)" */ + +//same as above +/mob/living/pointed(atom/A as mob|obj|turf in view()) + if(src.stat || !src.canmove || src.restrained()) + return 0 + if(src.status_flags & FAKEDEATH) + return 0 + if(!..()) + return 0 + visible_message("[src] points to [A]") + return 1 + /mob/living/verb/succumb() set hidden = 1 if (InCritical()) diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 18c26f9cb4f..89dbeb14740 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -46,11 +46,6 @@ set src = usr.contents return 0 -/mob/aiEye/point() - set popup_menu = 0 - set src = usr.contents - return 0 - // Use this when setting the aiEye's location. // It will also stream the chunk that the new loc is in. /mob/aiEye/setLoc(var/T, var/cancel_tracking = 1) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 098f2f10914..c1cbd8d9671 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -73,6 +73,8 @@ /mob/visible_message(var/message, var/self_message, var/blind_message) for(var/mob/M in viewers(src)) + if(M.see_invisible < invisibility) + continue //can't view the invisible var/msg = message if(self_message && M==src) msg = self_message @@ -494,6 +496,31 @@ var/list/slot_equipment_priority = list( \ face_atom(A) A.examine(src) +//same as above +//note: ghosts can point, this is intended +//visible_message will handle invisibility properly +//overriden here and in /mob/dead/observer for different point span classes and sanity checks +/mob/verb/pointed(atom/A as mob|obj|turf in view()) + set name = "Point To" + set category = "Object" + + if(!src || !isturf(src.loc)) + return 0 + if(istype(A, /obj/effect/decal/point)) + return 0 + + var/tile = get_turf(A) + if (!tile) + return 0 + + var/obj/P = new /obj/effect/decal/point(tile) + P.invisibility = invisibility + spawn (20) + if(P) + qdel(P) + + return 1 + /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) ))) if (!( L ))