Makes catslugs slightly less annoying
@@ -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()
|
||||
|
||||
@@ -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! <br>- - - - -<br> <span class='notice'>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.</span>"
|
||||
|
||||
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, "<span class='notice'>\The [user] feeds \the [O] to you.</span>")
|
||||
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("<span class='notice'>\The [M.name] shakes \the [src] awake from their nap.</span>","<span class='notice'>You shake \the [src] awake!</span>")
|
||||
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
|
||||
|
||||
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |