diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm
index f06548b4e5..68e8a1737c 100644
--- a/code/modules/ai/ai_holder_targeting.dm
+++ b/code/modules/ai/ai_holder_targeting.dm
@@ -254,6 +254,10 @@
on_attacked(attacker) // So we attack immediately and not threaten.
return give_target(attacker) // Also handles setting the appropiate stance.
+ if(holder.resting) // I can't kill someone while I'm laying down!
+ ai_log("react_to_attack() : AI is resting. Getting up.", AI_LOG_TRACE)
+ holder.lay_down()
+
if(stance == STANCE_SLEEP) // If we're asleep, try waking up if someone's wailing on us.
ai_log("react_to_attack() : AI is asleep. Waking up.", AI_LOG_TRACE)
go_wake()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm
index 48b3279d2a..911d60842d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm
@@ -2,7 +2,7 @@
/datum/category_item/catalogue/fauna/catslug
name = "Alien Wildlife - Catslug"
- desc = "The catslug is an omnivorous terrestrial creature.\
+ desc = "The Catslug is an omnivorous terrestrial creature.\
Exhibiting properties of both a cat and a slug (hence its name)\
it moves somewhat awkwardly. However, the unique qualities of\
its body make it exceedingly flexible and smooth, allowing it to\
@@ -29,6 +29,7 @@
movement_cooldown = 2
meat_amount = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+ holder_type = /obj/item/weapon/holder/catslug
response_help = "hugs"
response_disarm = "rudely paps"
@@ -39,11 +40,13 @@
melee_damage_upper = 5
has_hands = TRUE
- mob_size = MOB_MEDIUM
+ mob_size = MOB_SMALL
friendly = list("hugs")
+ see_in_dark = 8
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug)
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug
+ say_list_type = /datum/say_list/catslug
player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds!
- - - - -
Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason."
has_langs = list("Sign Language")
@@ -61,12 +64,28 @@
/atom/movable/emissive_blocker,
/obj/item/weapon/material,
/obj/item/weapon/melee,
- /obj/item/stack/material,
+ /obj/item/stack/,
/obj/item/weapon/tool,
/obj/item/weapon/reagent_containers/food,
/obj/item/weapon/coin,
/obj/item/weapon/aliencoin,
- /obj/item/weapon/ore
+ /obj/item/weapon/ore,
+ /obj/item/weapon/disk/nuclear,
+ /obj/item/toy,
+ /obj/item/weapon/card,
+ /obj/item/device/radio,
+ /obj/item/device/perfect_tele_beacon,
+ /obj/item/weapon/clipboard,
+ /obj/item/weapon/paper,
+ /obj/item/weapon/pen,
+ /obj/item/canvas,
+ /obj/item/paint_palette,
+ /obj/item/paint_brush,
+ /obj/item/device/camera,
+ /obj/item/weapon/photo,
+ /obj/item/device/camera_film,
+ /obj/item/device/taperecorder,
+ /obj/item/device/tape
)
vore_active = 1
@@ -80,6 +99,12 @@
vore_default_contamination_color = "grey"
vore_default_item_mode = IM_DIGEST
+/datum/say_list/catslug //Quiet quiet, no noise! We speak in sign so only people with sign will understand our questions.
+ speak = list("Have any porl?", "What is that?", "Where is this?", "What are you doing?", "How did you get here?", "Don't go into the rain.")
+ emote_hear = list()
+ emote_see = list("turns their head.", "looks at you.", "watches something unseen.", "sways its tail.", "flicks its ears.", "stares at you.", "gestures an unintelligible message.", "points into the distance!")
+ say_maybe_target = list()
+ say_got_target = list()
/mob/living/simple_mob/vore/alienanimals/catslug/init_vore()
..()
@@ -98,7 +123,7 @@
hostile = FALSE
cooperative = FALSE
retaliate = TRUE
- speak_chance = 0
+ speak_chance = 0.5
wander = TRUE
/mob/living/simple_mob/vore/alienanimals/catslug/Initialize()
@@ -137,6 +162,16 @@
to_chat(user, "\The [user] feeds \the [O] to you.")
playsound(src, 'sound/items/eatfood.ogg', 75, 1)
+/mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob)
+ if(stat != DEAD && M.a_intent == I_HELP && resting)
+ M.visible_message("\The [M.name] shakes \the [src] awake from their nap.","You shake \the [src] awake!")
+ playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ lay_down()
+ ai_holder.go_wake()
+ return
+ else
+ return ..()
+
/mob/living/simple_mob/vore/alienanimals/catslug/Life()
. = ..()
if(nutrition < 150)
@@ -178,22 +213,53 @@
color = newcolor
picked_color = TRUE
-/datum/ai_holder/simple_mob/melee/evasive/catslug/handle_wander_movement()
- if(holder.client)
- return
+/datum/ai_holder/simple_mob/melee/evasive/catslug/proc/consider_awakening()
if(holder.resting)
- if(prob(5))
- holder.lay_down()
- return
- if(prob(0.5))
holder.lay_down()
+ go_wake()
+
+/datum/ai_holder/simple_mob/melee/evasive/catslug/handle_wander_movement()
+ if(holder.client || holder.resting)
return
- return ..()
+ else if(prob(0.5))
+ holder.lay_down()
+ go_sleep()
+ addtimer(CALLBACK(src, .proc/consider_awakening), rand(1 MINUTE, 5 MINUTES), TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
+ else
+ return ..()
+
/datum/ai_holder/simple_mob/melee/evasive/catslug/on_hear_say(mob/living/speaker, message)
- if(holder.client)
+ if(holder.client || !speaker.client)
return
- if(!speaker.client)
+ if(findtext(message, "psps") && stance == STANCE_IDLE)
+ set_follow(speaker, follow_for = 5 SECONDS)
+
+ if(holder.stat || !holder.say_list || !message || speaker == holder) //Copied from parrots
+ return
+ var/datum/say_list/S = holder.say_list
+ S.speak |= message
+
+
+/mob/living/simple_mob/vore/alienanimals/catslug/horrible
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug/horrible
+
+/datum/ai_holder/simple_mob/melee/evasive/catslug/horrible/on_hear_say(mob/living/speaker, message) //this was an accident originally but it was very funny so here you go
+ if(holder.client || !speaker.client)
return
if(findtext(message, "psps") || stance == STANCE_IDLE)
set_follow(speaker, follow_for = 5 SECONDS)
+
+ if(holder.stat || !holder.say_list || !message || speaker == holder) //Copied from parrots
+ return
+ var/datum/say_list/S = holder.say_list
+ S.speak |= message
+
+/obj/item/weapon/holder/catslug
+ origin_tech = list(TECH_BIO = 2)
+ icon = 'icons/mob/alienanimals_x32.dmi'
+ item_state = "catslug"
+
+/obj/item/weapon/holder/catslug/Initialize(mapload, mob/held)
+ . = ..()
+ color = held.color
diff --git a/icons/inventory/head/mob_skrell.dmi b/icons/inventory/head/mob_skrell.dmi
index f518f8fb70..e862a0730e 100644
Binary files a/icons/inventory/head/mob_skrell.dmi and b/icons/inventory/head/mob_skrell.dmi differ
diff --git a/icons/inventory/head/mob_tajaran.dmi b/icons/inventory/head/mob_tajaran.dmi
index 24901a33b3..84f3982c2d 100644
Binary files a/icons/inventory/head/mob_tajaran.dmi and b/icons/inventory/head/mob_tajaran.dmi differ
diff --git a/icons/inventory/head/mob_teshari.dmi b/icons/inventory/head/mob_teshari.dmi
index 038fb9cc3d..fea6c2503f 100644
Binary files a/icons/inventory/head/mob_teshari.dmi and b/icons/inventory/head/mob_teshari.dmi differ
diff --git a/icons/inventory/head/mob_unathi.dmi b/icons/inventory/head/mob_unathi.dmi
index 2a113796d7..c48827c6bf 100644
Binary files a/icons/inventory/head/mob_unathi.dmi and b/icons/inventory/head/mob_unathi.dmi differ
diff --git a/icons/inventory/head/mob_vr.dmi b/icons/inventory/head/mob_vr.dmi
index 14c51c2748..dff6cb7eab 100644
Binary files a/icons/inventory/head/mob_vr.dmi and b/icons/inventory/head/mob_vr.dmi differ
diff --git a/icons/inventory/head/mob_vr_akula.dmi b/icons/inventory/head/mob_vr_akula.dmi
index d030932919..a952c48923 100644
Binary files a/icons/inventory/head/mob_vr_akula.dmi and b/icons/inventory/head/mob_vr_akula.dmi differ
diff --git a/icons/inventory/head/mob_vr_sergal.dmi b/icons/inventory/head/mob_vr_sergal.dmi
index 4d5a35c047..d1c60634b2 100644
Binary files a/icons/inventory/head/mob_vr_sergal.dmi and b/icons/inventory/head/mob_vr_sergal.dmi differ
diff --git a/icons/inventory/head/mob_vr_skrell.dmi b/icons/inventory/head/mob_vr_skrell.dmi
index d3de0f973d..70d45b72af 100644
Binary files a/icons/inventory/head/mob_vr_skrell.dmi and b/icons/inventory/head/mob_vr_skrell.dmi differ
diff --git a/icons/inventory/head/mob_vr_tajaran.dmi b/icons/inventory/head/mob_vr_tajaran.dmi
index 8f478fe37a..8b430eb274 100644
Binary files a/icons/inventory/head/mob_vr_tajaran.dmi and b/icons/inventory/head/mob_vr_tajaran.dmi differ
diff --git a/icons/inventory/head/mob_vr_teshari.dmi b/icons/inventory/head/mob_vr_teshari.dmi
index ec34ef23f1..bed3f6532f 100644
Binary files a/icons/inventory/head/mob_vr_teshari.dmi and b/icons/inventory/head/mob_vr_teshari.dmi differ
diff --git a/icons/inventory/head/mob_vr_unathi.dmi b/icons/inventory/head/mob_vr_unathi.dmi
index 9e05584157..730be5905f 100644
Binary files a/icons/inventory/head/mob_vr_unathi.dmi and b/icons/inventory/head/mob_vr_unathi.dmi differ
diff --git a/icons/inventory/head/mob_vr_vulpkanin.dmi b/icons/inventory/head/mob_vr_vulpkanin.dmi
index 50001ce846..bff1c5f81b 100644
Binary files a/icons/inventory/head/mob_vr_vulpkanin.dmi and b/icons/inventory/head/mob_vr_vulpkanin.dmi differ
diff --git a/icons/mob/alienanimals_x32.dmi b/icons/mob/alienanimals_x32.dmi
index c6fc251dc3..0f46897c7b 100644
Binary files a/icons/mob/alienanimals_x32.dmi and b/icons/mob/alienanimals_x32.dmi differ
diff --git a/icons/mob/items/lefthand_holder.dmi b/icons/mob/items/lefthand_holder.dmi
index e7c1da2fd3..aad27da53a 100644
Binary files a/icons/mob/items/lefthand_holder.dmi and b/icons/mob/items/lefthand_holder.dmi differ
diff --git a/icons/mob/items/righthand_holder.dmi b/icons/mob/items/righthand_holder.dmi
index cb874e6181..0015ff061b 100644
Binary files a/icons/mob/items/righthand_holder.dmi and b/icons/mob/items/righthand_holder.dmi differ