diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index bf546bc2832..560ad61a06e 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -252,6 +252,10 @@ on_attacked(attacker) return FALSE + 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 a9181e8329b..911d60842d4 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 @@ -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.dmi b/icons/inventory/head/mob.dmi index 3667c8597b1..4fe11e11f97 100644 Binary files a/icons/inventory/head/mob.dmi and b/icons/inventory/head/mob.dmi differ diff --git a/icons/inventory/head/mob_skrell.dmi b/icons/inventory/head/mob_skrell.dmi index f518f8fb704..e862a0730e5 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 24901a33b37..84f3982c2d4 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 038fb9cc3dd..fea6c2503fe 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 2a113796d72..c48827c6bfd 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 14c51c27481..dff6cb7eab6 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 d030932919f..a952c489232 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 4d5a35c047a..d1c60634b23 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 d3de0f973d4..70d45b72af2 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 8f478fe37a1..8b430eb2744 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 ec34ef23f12..bed3f6532f5 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 9e05584157f..730be5905fd 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 50001ce846e..bff1c5f81b2 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 c6fc251dc38..0f46897c7b1 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 e7c1da2fd31..aad27da53a6 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 cb874e61816..0015ff061ba 100644 Binary files a/icons/mob/items/righthand_holder.dmi and b/icons/mob/items/righthand_holder.dmi differ