Merge pull request #7054 from mwerezak/cat
Fixes simple_animal emotes, implements custom item for for Foxler
@@ -1412,3 +1412,86 @@
|
|||||||
desc = "This cane seems to have 'Ryals' engraved on its handle."
|
desc = "This cane seems to have 'Ryals' engraved on its handle."
|
||||||
icon_state = "cane"
|
icon_state = "cane"
|
||||||
item_state = "stick"
|
item_state = "stick"
|
||||||
|
|
||||||
|
////////////////////////////// Foxler - Erstatz Vryroxes /////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/cat/fluff/bones
|
||||||
|
name = "Bones"
|
||||||
|
desc = "It's Bones! Meow."
|
||||||
|
gender = MALE
|
||||||
|
icon_state = "cat3"
|
||||||
|
|
||||||
|
//Use this subtype for spawning in the custom item.
|
||||||
|
/obj/item/weapon/holder/cat/fluff/bones/custom_item
|
||||||
|
|
||||||
|
/obj/item/weapon/holder/cat/fluff/bones/custom_item/New()
|
||||||
|
if (!contents.len)
|
||||||
|
new/mob/living/simple_animal/cat/fluff/bones (src)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/cat/fluff/bones
|
||||||
|
name = "Bones"
|
||||||
|
desc = "That's Bones the cat. He's a laid back, black cat. Meow."
|
||||||
|
gender = MALE
|
||||||
|
icon_state = "cat3"
|
||||||
|
icon_living = "cat3"
|
||||||
|
icon_dead = "cat3_dead"
|
||||||
|
holder_type = /obj/item/weapon/holder/cat/fluff/bones
|
||||||
|
bff_name = "Erstatz Vryroxes"
|
||||||
|
|
||||||
|
/mob/living/simple_animal/cat/fluff
|
||||||
|
var/bff_name
|
||||||
|
var/mob/living/carbon/human/bff
|
||||||
|
|
||||||
|
/mob/living/simple_animal/cat/fluff/handle_movement_target()
|
||||||
|
if (!bff)
|
||||||
|
for (var/mob/living/carbon/human/M in player_list)
|
||||||
|
if (M.real_name == bff_name)
|
||||||
|
bff = M
|
||||||
|
break
|
||||||
|
|
||||||
|
if (bff)
|
||||||
|
var/follow_dist = 5
|
||||||
|
if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit) //danger
|
||||||
|
follow_dist = 1
|
||||||
|
else if (bff.stat || bff.health <= 50) //danger or just sleeping
|
||||||
|
follow_dist = 2
|
||||||
|
var/near_dist = max(follow_dist - 3, 1)
|
||||||
|
var/current_dist = get_dist(src, bff)
|
||||||
|
|
||||||
|
if (movement_target != bff)
|
||||||
|
if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/mouse) && (bff in oview(src)))
|
||||||
|
//stop existing movement
|
||||||
|
walk_to(src,0)
|
||||||
|
turns_since_scan = 0
|
||||||
|
|
||||||
|
//walk to bff
|
||||||
|
stop_automated_movement = 1
|
||||||
|
movement_target = bff
|
||||||
|
walk_to(src, movement_target, near_dist, 4)
|
||||||
|
|
||||||
|
//already following and close enough, stop
|
||||||
|
else if (current_dist <= near_dist)
|
||||||
|
walk_to(src,0)
|
||||||
|
movement_target = null
|
||||||
|
stop_automated_movement = 0
|
||||||
|
|
||||||
|
if (!(bff && movement_target == bff))
|
||||||
|
..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/cat/fluff/Life()
|
||||||
|
..()
|
||||||
|
if (stat || !bff)
|
||||||
|
return
|
||||||
|
if (get_dist(src, bff) <= 1)
|
||||||
|
if (bff.stat >= DEAD || bff.health <= config.health_threshold_softcrit)
|
||||||
|
if (prob((bff.stat < DEAD)? 50 : 15))
|
||||||
|
audible_emote(pick("meows in distress.", "meows anxiously."))
|
||||||
|
else
|
||||||
|
if (prob(5))
|
||||||
|
visible_emote(pick("nuzzles [bff].",
|
||||||
|
"brushes against [bff].",
|
||||||
|
"rubs against [bff].",
|
||||||
|
"purrs."))
|
||||||
|
else if (bff.health <= 50)
|
||||||
|
if (prob(10)) audible_emote("meows anxiously.")
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
// All mobs should have custom emote, really..
|
// All mobs should have custom emote, really..
|
||||||
|
//m_type == 1 --> visual.
|
||||||
|
//m_type == 2 --> audible
|
||||||
/mob/proc/custom_emote(var/m_type=1,var/message = null)
|
/mob/proc/custom_emote(var/m_type=1,var/message = null)
|
||||||
|
|
||||||
if(stat || !use_me && usr == src)
|
if(stat || !use_me && usr == src)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
speak_emote = list("chirrups")
|
speak_emote = list("chirrups")
|
||||||
emote_hear = list("chirrups")
|
emote_hear = list("chirrups")
|
||||||
response_help = "pokes"
|
response_help = "pokes"
|
||||||
response_disarm = "prods the"
|
response_disarm = "prods"
|
||||||
response_harm = "stomps on the"
|
response_harm = "stomps on"
|
||||||
icon_state = "brainslug"
|
icon_state = "brainslug"
|
||||||
icon_living = "brainslug"
|
icon_living = "brainslug"
|
||||||
icon_dead = "brainslug_dead"
|
icon_dead = "brainslug_dead"
|
||||||
|
|||||||
@@ -8,14 +8,14 @@
|
|||||||
speak = list("Meow!","Esp!","Purr!","HSSSSS")
|
speak = list("Meow!","Esp!","Purr!","HSSSSS")
|
||||||
speak_emote = list("purrs", "meows")
|
speak_emote = list("purrs", "meows")
|
||||||
emote_hear = list("meows","mews")
|
emote_hear = list("meows","mews")
|
||||||
emote_see = list("shakes its head", "shivers")
|
emote_see = list("shakes their head", "shivers")
|
||||||
speak_chance = 1
|
speak_chance = 1
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
see_in_dark = 6
|
see_in_dark = 6
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
var/turns_since_scan = 0
|
var/turns_since_scan = 0
|
||||||
var/mob/living/simple_animal/mouse/movement_target
|
var/mob/living/simple_animal/mouse/movement_target
|
||||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||||
@@ -27,40 +27,45 @@
|
|||||||
//MICE!
|
//MICE!
|
||||||
if((src.loc) && isturf(src.loc))
|
if((src.loc) && isturf(src.loc))
|
||||||
if(!stat && !resting && !buckled)
|
if(!stat && !resting && !buckled)
|
||||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
for(var/mob/living/simple_animal/mouse/M in loc)
|
||||||
if(!M.stat)
|
if(!M.stat)
|
||||||
M.splat()
|
M.splat()
|
||||||
emote(pick("\red splats the [M]!","\red toys with the [M]","worries the [M]"))
|
visible_emote(pick("bites \the [M]!","toys with \the [M].","chomps on \the [M]!"))
|
||||||
movement_target = null
|
movement_target = null
|
||||||
stop_automated_movement = 0
|
stop_automated_movement = 0
|
||||||
break
|
break
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
for(var/mob/living/simple_animal/mouse/snack in oview(src, 3))
|
for(var/mob/living/simple_animal/mouse/snack in oview(src,5))
|
||||||
if(prob(15))
|
if(snack.stat < DEAD && prob(15))
|
||||||
emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
|
audible_emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
|
||||||
break
|
break
|
||||||
|
|
||||||
if(!stat && !resting && !buckled)
|
if(!stat && !resting && !buckled)
|
||||||
turns_since_scan++
|
handle_movement_target()
|
||||||
if(turns_since_scan > 5)
|
|
||||||
walk_to(src,0)
|
|
||||||
turns_since_scan = 0
|
|
||||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
|
||||||
movement_target = null
|
|
||||||
stop_automated_movement = 0
|
|
||||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
|
||||||
movement_target = null
|
|
||||||
stop_automated_movement = 0
|
|
||||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
|
||||||
if(isturf(snack.loc) && !snack.stat)
|
|
||||||
movement_target = snack
|
|
||||||
break
|
|
||||||
if(movement_target)
|
|
||||||
stop_automated_movement = 1
|
|
||||||
walk_to(src,movement_target,0,3)
|
|
||||||
|
|
||||||
|
/mob/living/simple_animal/cat/proc/handle_movement_target()
|
||||||
|
turns_since_scan++
|
||||||
|
if(turns_since_scan > 5)
|
||||||
|
walk_to(src,0)
|
||||||
|
turns_since_scan = 0
|
||||||
|
|
||||||
|
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||||
|
movement_target = null
|
||||||
|
stop_automated_movement = 0
|
||||||
|
if( !movement_target || !(movement_target.loc in oview(src, 4)) )
|
||||||
|
movement_target = null
|
||||||
|
stop_automated_movement = 0
|
||||||
|
for(var/mob/living/simple_animal/mouse/snack in oview(src))
|
||||||
|
if(isturf(snack.loc) && !snack.stat)
|
||||||
|
movement_target = snack
|
||||||
|
world << "[src]: mouse located."
|
||||||
|
break
|
||||||
|
if(movement_target)
|
||||||
|
world << "[src]: locking on [movement_target]"
|
||||||
|
stop_automated_movement = 1
|
||||||
|
walk_to(src,movement_target,0,3)
|
||||||
|
|
||||||
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
|
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
|
||||||
|
|
||||||
@@ -73,10 +78,16 @@
|
|||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/cat/get_scooped(var/mob/living/carbon/grabber)
|
||||||
|
if (stat >= DEAD)
|
||||||
|
return //since the holder icon looks like a living cat
|
||||||
|
..()
|
||||||
|
|
||||||
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
||||||
/mob/living/simple_animal/cat/Runtime
|
/mob/living/simple_animal/cat/Runtime
|
||||||
name = "Runtime"
|
name = "Runtime"
|
||||||
desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
|
desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
|
||||||
|
gender = FEMALE
|
||||||
icon_state = "cat"
|
icon_state = "cat"
|
||||||
icon_living = "cat"
|
icon_living = "cat"
|
||||||
icon_dead = "cat_dead"
|
icon_dead = "cat_dead"
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
turns_per_move = 10
|
turns_per_move = 10
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||||
meat_amount = 3
|
meat_amount = 3
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "bops the"
|
response_disarm = "bops"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
see_in_dark = 5
|
see_in_dark = 5
|
||||||
var/obj/item/inventory_head
|
var/obj/item/inventory_head
|
||||||
var/obj/item/inventory_back
|
var/obj/item/inventory_back
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
for (var/mob/M in viewers(src, null))
|
for (var/mob/M in viewers(src, null))
|
||||||
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
M.show_message("\red [user] gently taps [src] with the [O]. ")
|
||||||
if(prob(15))
|
if(prob(15))
|
||||||
emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face")
|
visible_emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face")
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
|
|
||||||
@@ -310,10 +310,10 @@
|
|||||||
if(isturf(movement_target.loc) )
|
if(isturf(movement_target.loc) )
|
||||||
UnarmedAttack(movement_target)
|
UnarmedAttack(movement_target)
|
||||||
else if(ishuman(movement_target.loc) && prob(20))
|
else if(ishuman(movement_target.loc) && prob(20))
|
||||||
custom_emote(1,"stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.")
|
visible_emote("stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.")
|
||||||
|
|
||||||
if(prob(1))
|
if(prob(1))
|
||||||
emote(pick("dances around","chases its tail"))
|
visible_emote(pick("dances around","chases their tail"))
|
||||||
spawn(0)
|
spawn(0)
|
||||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||||
dir = i
|
dir = i
|
||||||
@@ -467,7 +467,7 @@
|
|||||||
|
|
||||||
|
|
||||||
if(prob(1))
|
if(prob(1))
|
||||||
emote(pick("dances around","chases her tail"))
|
visible_emote(pick("dances around","chases her tail"))
|
||||||
spawn(0)
|
spawn(0)
|
||||||
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
|
||||||
dir = i
|
dir = i
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
speak_chance = 1
|
speak_chance = 1
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "stomps the"
|
response_harm = "stomps"
|
||||||
stop_automated_movement = 1
|
stop_automated_movement = 1
|
||||||
friendly = "pinches"
|
friendly = "pinches"
|
||||||
var/obj/item/inventory_head
|
var/obj/item/inventory_head
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
see_in_dark = 6
|
see_in_dark = 6
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
meat_amount = 4
|
meat_amount = 4
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
faction = "goat"
|
faction = "goat"
|
||||||
attacktext = "kicked"
|
attacktext = "kicked"
|
||||||
health = 40
|
health = 40
|
||||||
@@ -99,9 +99,9 @@
|
|||||||
see_in_dark = 6
|
see_in_dark = 6
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
meat_amount = 6
|
meat_amount = 6
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
attacktext = "kicked"
|
attacktext = "kicked"
|
||||||
health = 50
|
health = 50
|
||||||
var/datum/reagents/udder = null
|
var/datum/reagents/udder = null
|
||||||
@@ -160,9 +160,9 @@
|
|||||||
turns_per_move = 2
|
turns_per_move = 2
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
meat_amount = 1
|
meat_amount = 1
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
attacktext = "kicked"
|
attacktext = "kicked"
|
||||||
health = 1
|
health = 1
|
||||||
var/amount_grown = 0
|
var/amount_grown = 0
|
||||||
@@ -201,9 +201,9 @@ var/global/chicken_count = 0
|
|||||||
turns_per_move = 3
|
turns_per_move = 3
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
meat_amount = 2
|
meat_amount = 2
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
attacktext = "kicked"
|
attacktext = "kicked"
|
||||||
health = 10
|
health = 10
|
||||||
var/eggsleft = 0
|
var/eggsleft = 0
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/mob/living/simple_animal/mouse
|
/mob/living/simple_animal/mouse
|
||||||
name = "mouse"
|
name = "mouse"
|
||||||
real_name = "mouse"
|
real_name = "mouse"
|
||||||
desc = "It's a small, disease-ridden rodent."
|
desc = "It's a small rodent."
|
||||||
icon_state = "mouse_gray"
|
icon_state = "mouse_gray"
|
||||||
icon_living = "mouse_gray"
|
icon_living = "mouse_gray"
|
||||||
icon_dead = "mouse_gray_dead"
|
icon_dead = "mouse_gray_dead"
|
||||||
@@ -17,9 +17,9 @@
|
|||||||
maxHealth = 5
|
maxHealth = 5
|
||||||
health = 5
|
health = 5
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "stamps on the"
|
response_harm = "stamps on"
|
||||||
density = 0
|
density = 0
|
||||||
var/body_color //brown, gray and white, leave blank for random
|
var/body_color //brown, gray and white, leave blank for random
|
||||||
layer = MOB_LAYER
|
layer = MOB_LAYER
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
icon_state = "mouse_[body_color]"
|
icon_state = "mouse_[body_color]"
|
||||||
wander = 1
|
wander = 1
|
||||||
else if(prob(5))
|
else if(prob(5))
|
||||||
emote("snuffles")
|
audible_emote("snuffles.")
|
||||||
|
|
||||||
/mob/living/simple_animal/mouse/New()
|
/mob/living/simple_animal/mouse/New()
|
||||||
..()
|
..()
|
||||||
@@ -110,9 +110,6 @@
|
|||||||
/mob/living/simple_animal/mouse/brown/Tom
|
/mob/living/simple_animal/mouse/brown/Tom
|
||||||
name = "Tom"
|
name = "Tom"
|
||||||
desc = "Jerry the cat is not amused."
|
desc = "Jerry the cat is not amused."
|
||||||
response_help = "pets"
|
|
||||||
response_disarm = "gently pushes aside"
|
|
||||||
response_harm = "splats"
|
|
||||||
|
|
||||||
/mob/living/simple_animal/mouse/can_use_vents()
|
/mob/living/simple_animal/mouse/can_use_vents()
|
||||||
return
|
return
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
maxHealth = 5
|
maxHealth = 5
|
||||||
health = 5
|
health = 5
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "whacks the"
|
response_harm = "whacks"
|
||||||
harm_intent_damage = 5
|
harm_intent_damage = 5
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
maxHealth = 15
|
maxHealth = 15
|
||||||
health = 15
|
health = 15
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
|
||||||
response_help = "prods the"
|
response_help = "prods"
|
||||||
response_disarm = "pushes aside the"
|
response_disarm = "pushes aside"
|
||||||
response_harm = "smacks the"
|
response_harm = "smacks"
|
||||||
harm_intent_damage = 5
|
harm_intent_damage = 5
|
||||||
@@ -12,9 +12,9 @@
|
|||||||
speak_chance = 1
|
speak_chance = 1
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "punches the"
|
response_harm = "punches"
|
||||||
var/list/insults = list(
|
var/list/insults = list(
|
||||||
"Man you suck",
|
"Man you suck",
|
||||||
"You look like the most retarded douche around",
|
"You look like the most retarded douche around",
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
icon_living = "alienh_running"
|
icon_living = "alienh_running"
|
||||||
icon_dead = "alien_l"
|
icon_dead = "alien_l"
|
||||||
icon_gib = "syndicate_gib"
|
icon_gib = "syndicate_gib"
|
||||||
response_help = "pokes the"
|
response_help = "pokes"
|
||||||
response_disarm = "shoves the"
|
response_disarm = "shoves"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = -1
|
speed = -1
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||||
maxHealth = 100
|
maxHealth = 100
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
see_in_dark = 6
|
see_in_dark = 6
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "pokes the"
|
response_harm = "pokes"
|
||||||
stop_automated_movement_when_pulled = 0
|
stop_automated_movement_when_pulled = 0
|
||||||
maxHealth = 60
|
maxHealth = 60
|
||||||
health = 60
|
health = 60
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
|
|
||||||
if(HOSTILE_STANCE_ATTACKING)
|
if(HOSTILE_STANCE_ATTACKING)
|
||||||
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
|
if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest
|
||||||
custom_emote(1, "is worn out and needs to rest" )
|
custom_emote(1, "is worn out and needs to rest." )
|
||||||
stance = HOSTILE_STANCE_TIRED
|
stance = HOSTILE_STANCE_TIRED
|
||||||
stance_step = 0
|
stance_step = 0
|
||||||
walk(src, 0) //This stops the bear's walking
|
walk(src, 0) //This stops the bear's walking
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
icon_dead = "faithless_dead"
|
icon_dead = "faithless_dead"
|
||||||
speak_chance = 0
|
speak_chance = 0
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
response_help = "passes through the"
|
response_help = "passes through"
|
||||||
response_disarm = "shoves"
|
response_disarm = "shoves"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = -1
|
speed = -1
|
||||||
maxHealth = 80
|
maxHealth = 80
|
||||||
health = 80
|
health = 80
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
/mob/living/simple_animal/hostile/faithless/FindTarget()
|
/mob/living/simple_animal/hostile/faithless/FindTarget()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
emote("wails at [.]")
|
audible_emote("wails at [.]")
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
|
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
|
||||||
. =..()
|
. =..()
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
see_in_dark = 10
|
see_in_dark = 10
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "pokes the"
|
response_harm = "pokes"
|
||||||
stop_automated_movement_when_pulled = 0
|
stop_automated_movement_when_pulled = 0
|
||||||
maxHealth = 200
|
maxHealth = 200
|
||||||
health = 200
|
health = 200
|
||||||
|
|||||||
@@ -10,9 +10,9 @@
|
|||||||
icon_living = "crate"
|
icon_living = "crate"
|
||||||
|
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||||
response_help = "touches the"
|
response_help = "touches"
|
||||||
response_disarm = "pushes the"
|
response_disarm = "pushes"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = 4
|
speed = 4
|
||||||
maxHealth = 250
|
maxHealth = 250
|
||||||
health = 250
|
health = 250
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
/mob/living/simple_animal/hostile/mimic/FindTarget()
|
/mob/living/simple_animal/hostile/mimic/FindTarget()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
emote("growls at [.]")
|
audible_emote("growls at [.]")
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/mimic/death()
|
/mob/living/simple_animal/hostile/mimic/death()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
icon_dead = "piratemelee_dead"
|
icon_dead = "piratemelee_dead"
|
||||||
speak_chance = 0
|
speak_chance = 0
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
response_help = "pushes the"
|
response_help = "pushes"
|
||||||
response_disarm = "shoves"
|
response_disarm = "shoves"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = 4
|
speed = 4
|
||||||
stop_automated_movement_when_pulled = 0
|
stop_automated_movement_when_pulled = 0
|
||||||
maxHealth = 100
|
maxHealth = 100
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/mob/living/simple_animal/hostile/retaliate/clown
|
/mob/living/simple_animal/hostile/retaliate/clown
|
||||||
name = "Clown"
|
name = "clown"
|
||||||
desc = "A denizen of clown planet"
|
desc = "A denizen of clown planet"
|
||||||
icon_state = "clown"
|
icon_state = "clown"
|
||||||
icon_living = "clown"
|
icon_living = "clown"
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
icon_gib = "clown_gib"
|
icon_gib = "clown_gib"
|
||||||
speak_chance = 0
|
speak_chance = 0
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
response_help = "pokes the"
|
response_help = "pokes"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speak = list("HONK", "Honk!", "Welcome to clown planet!")
|
speak = list("HONK", "Honk!", "Welcome to clown planet!")
|
||||||
emote_see = list("honks")
|
emote_see = list("honks")
|
||||||
speak_chance = 1
|
speak_chance = 1
|
||||||
|
|||||||
@@ -10,9 +10,9 @@
|
|||||||
rapid = 1
|
rapid = 1
|
||||||
speak_chance = 5
|
speak_chance = 5
|
||||||
turns_per_move = 3
|
turns_per_move = 3
|
||||||
response_help = "pokes the"
|
response_help = "pokes"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
|
speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
|
||||||
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
|
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
|
||||||
a_intent = "harm"
|
a_intent = "harm"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/mob/living/simple_animal/hostile/russian
|
/mob/living/simple_animal/hostile/russian
|
||||||
name = "Russian"
|
name = "russian"
|
||||||
desc = "For the Motherland!"
|
desc = "For the Motherland!"
|
||||||
icon_state = "russianmelee"
|
icon_state = "russianmelee"
|
||||||
icon_living = "russianmelee"
|
icon_living = "russianmelee"
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
icon_gib = "syndicate_gib"
|
icon_gib = "syndicate_gib"
|
||||||
speak_chance = 0
|
speak_chance = 0
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
response_help = "pokes the"
|
response_help = "pokes"
|
||||||
response_disarm = "shoves the"
|
response_disarm = "shoves"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = 4
|
speed = 4
|
||||||
stop_automated_movement_when_pulled = 0
|
stop_automated_movement_when_pulled = 0
|
||||||
maxHealth = 100
|
maxHealth = 100
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/mob/living/simple_animal/hostile/syndicate
|
/mob/living/simple_animal/hostile/syndicate
|
||||||
name = "Syndicate Operative"
|
name = "\improper Syndicate operative"
|
||||||
desc = "Death to Nanotrasen."
|
desc = "Death to Nanotrasen."
|
||||||
icon_state = "syndicate"
|
icon_state = "syndicate"
|
||||||
icon_living = "syndicate"
|
icon_living = "syndicate"
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
icon_gib = "syndicate_gib"
|
icon_gib = "syndicate_gib"
|
||||||
speak_chance = 0
|
speak_chance = 0
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
response_help = "pokes the"
|
response_help = "pokes"
|
||||||
response_disarm = "shoves the"
|
response_disarm = "shoves"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = 4
|
speed = 4
|
||||||
stop_automated_movement_when_pulled = 0
|
stop_automated_movement_when_pulled = 0
|
||||||
maxHealth = 100
|
maxHealth = 100
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
speak_chance = 0
|
speak_chance = 0
|
||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||||
response_help = "brushes the"
|
response_help = "brushes"
|
||||||
response_disarm = "pushes the"
|
response_disarm = "pushes"
|
||||||
response_harm = "hits the"
|
response_harm = "hits"
|
||||||
speed = -1
|
speed = -1
|
||||||
maxHealth = 250
|
maxHealth = 250
|
||||||
health = 250
|
health = 250
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
/mob/living/simple_animal/hostile/tree/FindTarget()
|
/mob/living/simple_animal/hostile/tree/FindTarget()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(.)
|
if(.)
|
||||||
emote("growls at [.]")
|
audible_emote("growls at [.]")
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/tree/AttackingTarget()
|
/mob/living/simple_animal/hostile/tree/AttackingTarget()
|
||||||
. =..()
|
. =..()
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
see_in_dark = 6
|
see_in_dark = 6
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently pushes aside the"
|
response_disarm = "gently pushes aside"
|
||||||
response_harm = "kicks the"
|
response_harm = "kicks"
|
||||||
minbodytemp = 250
|
minbodytemp = 250
|
||||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||||
|
|||||||
@@ -44,9 +44,9 @@
|
|||||||
turns_per_move = 5
|
turns_per_move = 5
|
||||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cracker/
|
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cracker/
|
||||||
|
|
||||||
response_help = "pets the"
|
response_help = "pets"
|
||||||
response_disarm = "gently moves aside the"
|
response_disarm = "gently moves aside"
|
||||||
response_harm = "swats the"
|
response_harm = "swats"
|
||||||
stop_automated_movement = 1
|
stop_automated_movement = 1
|
||||||
universal_speak = 1
|
universal_speak = 1
|
||||||
|
|
||||||
@@ -342,7 +342,7 @@
|
|||||||
//Search for item to steal
|
//Search for item to steal
|
||||||
parrot_interest = search_for_item()
|
parrot_interest = search_for_item()
|
||||||
if(parrot_interest)
|
if(parrot_interest)
|
||||||
emote("looks in [parrot_interest]'s direction and takes flight")
|
visible_emote("looks in [parrot_interest]'s direction and takes flight")
|
||||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||||
icon_state = "parrot_fly"
|
icon_state = "parrot_fly"
|
||||||
return
|
return
|
||||||
@@ -364,7 +364,7 @@
|
|||||||
if(AM)
|
if(AM)
|
||||||
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
|
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
|
||||||
parrot_interest = AM
|
parrot_interest = AM
|
||||||
emote("turns and flies towards [parrot_interest]")
|
visible_emote("turns and flies towards [parrot_interest]")
|
||||||
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
parrot_state = PARROT_SWOOP | PARROT_STEAL
|
||||||
return
|
return
|
||||||
else //Else it's a perch
|
else //Else it's a perch
|
||||||
@@ -478,11 +478,11 @@
|
|||||||
var/datum/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
|
var/datum/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
|
||||||
|
|
||||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
|
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1)
|
||||||
emote(pick("pecks [H]'s [affecting]", "cuts [H]'s [affecting] with its talons"))
|
visible_emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons."))
|
||||||
|
|
||||||
else
|
else
|
||||||
L.adjustBruteLoss(damage)
|
L.adjustBruteLoss(damage)
|
||||||
emote(pick("pecks at [L]", "claws [L]"))
|
visible_emote(pick("pecks at [L].", "claws [L]."))
|
||||||
return
|
return
|
||||||
|
|
||||||
//Otherwise, fly towards the mob!
|
//Otherwise, fly towards the mob!
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
emote_hear = list("wails","screeches")
|
emote_hear = list("wails","screeches")
|
||||||
response_help = "puts their hand through"
|
response_help = "puts their hand through"
|
||||||
response_disarm = "flails at"
|
response_disarm = "flails at"
|
||||||
response_harm = "punches the"
|
response_harm = "punches"
|
||||||
melee_damage_lower = 5
|
melee_damage_lower = 5
|
||||||
melee_damage_upper = 15
|
melee_damage_upper = 15
|
||||||
attacktext = "drained the life from"
|
attacktext = "drained the life from"
|
||||||
|
|||||||
@@ -114,23 +114,23 @@
|
|||||||
else
|
else
|
||||||
randomValue -= speak.len
|
randomValue -= speak.len
|
||||||
if(emote_see && randomValue <= emote_see.len)
|
if(emote_see && randomValue <= emote_see.len)
|
||||||
emote(pick(emote_see),1)
|
visible_emote("[pick(emote_see)].")
|
||||||
else
|
else
|
||||||
emote(pick(emote_hear),2)
|
audible_emote("[pick(emote_hear)].")
|
||||||
else
|
else
|
||||||
say(pick(speak))
|
say(pick(speak))
|
||||||
else
|
else
|
||||||
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||||
emote(pick(emote_see),1)
|
visible_emote("[pick(emote_see)].")
|
||||||
if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
|
if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
|
||||||
emote(pick(emote_hear),2)
|
audible_emote("[pick(emote_hear)].")
|
||||||
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||||
var/length = emote_hear.len + emote_see.len
|
var/length = emote_hear.len + emote_see.len
|
||||||
var/pick = rand(1,length)
|
var/pick = rand(1,length)
|
||||||
if(pick <= emote_see.len)
|
if(pick <= emote_see.len)
|
||||||
emote(pick(emote_see),1)
|
visible_emote("[pick(emote_see)].")
|
||||||
else
|
else
|
||||||
emote(pick(emote_hear),2)
|
audible_emote("[pick(emote_hear)].")
|
||||||
|
|
||||||
|
|
||||||
//Atmos
|
//Atmos
|
||||||
@@ -207,9 +207,14 @@
|
|||||||
|
|
||||||
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
|
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
|
||||||
if(act)
|
if(act)
|
||||||
if(act == "scream") act = "whimper" //ugly hack to stop animals screaming when crushed :P
|
|
||||||
..(act, type, desc)
|
..(act, type, desc)
|
||||||
|
|
||||||
|
/mob/living/simple_animal/proc/visible_emote(var/act_desc)
|
||||||
|
custom_emote(1, act_desc)
|
||||||
|
|
||||||
|
/mob/living/simple_animal/proc/audible_emote(var/act_desc)
|
||||||
|
custom_emote(2, act_desc)
|
||||||
|
|
||||||
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
||||||
if(!Proj || Proj.nodamage)
|
if(!Proj || Proj.nodamage)
|
||||||
return
|
return
|
||||||
@@ -224,9 +229,11 @@
|
|||||||
|
|
||||||
if("help")
|
if("help")
|
||||||
if (health > 0)
|
if (health > 0)
|
||||||
for(var/mob/O in viewers(src, null))
|
M.visible_message("\blue [M] [response_help] \the [src]")
|
||||||
if ((O.client && !( O.blinded )))
|
|
||||||
O.show_message("\blue [M] [response_help] [src]")
|
if("disarm")
|
||||||
|
M.visible_message("\blue [M] [response_disarm] \the [src]")
|
||||||
|
//TODO: Push the mob away or something
|
||||||
|
|
||||||
if("grab")
|
if("grab")
|
||||||
if (M == src)
|
if (M == src)
|
||||||
@@ -242,15 +249,11 @@
|
|||||||
G.affecting = src
|
G.affecting = src
|
||||||
LAssailant = M
|
LAssailant = M
|
||||||
|
|
||||||
for(var/mob/O in viewers(src, null))
|
M.visible_message("\red [M] has grabbed [src] passively!")
|
||||||
if ((O.client && !( O.blinded )))
|
|
||||||
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
|
|
||||||
|
|
||||||
if("hurt", "disarm")
|
if("hurt")
|
||||||
adjustBruteLoss(harm_intent_damage)
|
adjustBruteLoss(harm_intent_damage)
|
||||||
for(var/mob/O in viewers(src, null))
|
M.visible_message("\red [M] [response_harm] \the [src]")
|
||||||
if ((O.client && !( O.blinded )))
|
|
||||||
O.show_message("\red [M] [response_harm] [src]")
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 121 KiB |