diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 04308f2a2f0..f688e10034c 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -59,6 +59,9 @@
#define iszombie(A) (is_species(A, /datum/species/zombie))
#define ishumanbasic(A) (is_species(A, /datum/species/human))
+//why arent catpeople a subspecies
+#define iscatperson(A) (ishumanbasic(A) && ( A.dna.features["ears"] == "Cat" || A.dna.features["human_tail"] == "Cat") )
+
//more carbon mobs
#define ismonkey(A) (istype(A, /mob/living/carbon/monkey))
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index d0b845ffba5..b1b200f4898 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -95,7 +95,7 @@
else if(prob(50))
severity = 0
- //20% chance to actually hit the eyes
+ //chance to actually hit the eyes depends on internal component
if(prob(effectchance * diode.rating) && C.flash_act(severity))
outmsg = "You blind [C] by shining [src] in their eyes."
else
@@ -104,13 +104,13 @@
//robots
else if(iscyborg(target))
var/mob/living/silicon/S = target
- //20% chance to actually hit the sensors
+ add_logs(user, S, "shone in the sensors", src)
+ //chance to actually hit the eyes depends on internal component
if(prob(effectchance * diode.rating))
S.flash_act(affect_silicon = 1)
S.Knockdown(rand(100,200))
to_chat(S, "Your sensors were overloaded by a laser!")
outmsg = "You overload [S] by shining [src] at their sensors."
- add_logs(user, S, "shone in the sensors", src)
else
outmsg = "You fail to overload [S] by shining [src] at their sensors!"
@@ -126,12 +126,28 @@
//catpeople
for(var/mob/living/carbon/human/H in view(1,targloc))
- if(ishumanbasic(H) && (H.getorgan(/obj/item/organ/tail/cat) || H.getorgan(/obj/item/organ/ears/cat) || H.dna.features["ears"] == "Cat" || H.dna.features["human_tail"] == "Cat"))
- if(!H.incapacitated() && !H.lying)
- H.visible_message("[H] pounces on the light!","LIGHT!")
- H.Knockdown(10)
+ if(!iscatperson(H) || H.incapacitated() || H.eye_blind )
+ continue
+ if(!H.lying)
+ H.setDir(get_dir(H,targloc)) // kitty always looks at the light
+ if(prob(effectchance))
+ H.visible_message("[H] makes a grab for the light!","LIGHT!")
H.Move(targloc)
- H.setDir(NORTH) //Facedown looks best imo
+ add_logs(user, H, "moved with a laser pointer",src)
+ else
+ H.visible_message("[H] looks briefly distracted by the light."," You're briefly tempted by the shiny light... ")
+ else
+ H.visible_message("[H] stares at the light"," You stare at the light... ")
+
+ //cats!
+ for(var/mob/living/simple_animal/pet/cat/C in view(1,targloc))
+ if(prob(50))
+ C.visible_message("[C] pounces on the light!","LIGHT!")
+ C.Move(targloc)
+ C.resting = TRUE
+ C.update_canmove()
+ else
+ C.visible_message("[C] looks uninterested in your games.","You spot [user] shining [src] at you. How insulting!")
//laser pointer image
icon_state = "pointer_[pointer_icon_state]"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index accd8f7dcff..bf12b3eb66f 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1091,9 +1091,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
log_admin("[key_name(usr)] sent \"[input]\" as the Tip of the Round.")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Tip")
-#define ON_PURRBATION(H) (\H.getorgan(/obj/item/organ/tail/cat) || H.getorgan(/obj/item/organ/ears/cat) || \
- H.dna.features["ears"] == "Cat" || H.dna.features["human_tail"] == "Cat")
-
/proc/mass_purrbation()
for(var/M in GLOB.mob_list)
if(ishumanbasic(M))
@@ -1109,7 +1106,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
/proc/purrbation_toggle(mob/living/carbon/human/H, silent = FALSE)
if(!ishumanbasic(H))
return
- if(!ON_PURRBATION(H))
+ if(!iscatperson(H))
purrbation_apply(H, silent)
. = TRUE
else
@@ -1119,7 +1116,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
/proc/purrbation_apply(mob/living/carbon/human/H, silent = FALSE)
if(!ishuman(H))
return
- if(ON_PURRBATION(H))
+ if(iscatperson(H))
return
var/obj/item/organ/ears/cat/ears = new
@@ -1134,7 +1131,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
/proc/purrbation_remove(mob/living/carbon/human/H, silent = FALSE)
if(!ishuman(H))
return
- if(!ON_PURRBATION(H))
+ if(!iscatperson(H))
return
var/obj/item/organ/ears/cat/ears = H.getorgan(/obj/item/organ/ears/cat)
@@ -1173,8 +1170,6 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(!silent)
to_chat(H, "You are no longer a cat.")
-#undef ON_PURRBATION
-
/client/proc/modify_goals()
set category = "Debug"
set name = "Modify goals"