Merge pull request #7054 from mwerezak/cat

Fixes simple_animal emotes, implements custom item for for Foxler
This commit is contained in:
Zuhayr
2014-11-19 23:15:39 +10:30
31 changed files with 229 additions and 133 deletions

View File

@@ -1412,3 +1412,86 @@
desc = "This cane seems to have 'Ryals' engraved on its handle."
icon_state = "cane"
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.")

View File

@@ -1,4 +1,6 @@
// 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)
if(stat || !use_me && usr == src)

View File

@@ -7,8 +7,8 @@
speak_emote = list("chirrups")
emote_hear = list("chirrups")
response_help = "pokes"
response_disarm = "prods the"
response_harm = "stomps on the"
response_disarm = "prods"
response_harm = "stomps on"
icon_state = "brainslug"
icon_living = "brainslug"
icon_dead = "brainslug_dead"

View File

@@ -8,14 +8,14 @@
speak = list("Meow!","Esp!","Purr!","HSSSSS")
speak_emote = list("purrs", "meows")
emote_hear = list("meows","mews")
emote_see = list("shakes its head", "shivers")
emote_see = list("shakes their head", "shivers")
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
min_oxy = 16 //Require atleast 16kPA oxygen
@@ -27,40 +27,45 @@
//MICE!
if((src.loc) && isturf(src.loc))
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)
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
stop_automated_movement = 0
break
..()
for(var/mob/living/simple_animal/mouse/snack in oview(src, 3))
if(prob(15))
emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
for(var/mob/living/simple_animal/mouse/snack in oview(src,5))
if(snack.stat < DEAD && prob(15))
audible_emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
break
if(!stat && !resting && !buckled)
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, 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)
handle_movement_target()
/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)
@@ -73,10 +78,16 @@
else
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~
/mob/living/simple_animal/cat/Runtime
name = "Runtime"
desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
gender = FEMALE
icon_state = "cat"
icon_living = "cat"
icon_dead = "cat_dead"

View File

@@ -14,9 +14,9 @@
turns_per_move = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
meat_amount = 3
response_help = "pets the"
response_disarm = "bops the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
var/obj/item/inventory_head
var/obj/item/inventory_back
@@ -58,7 +58,7 @@
for (var/mob/M in viewers(src, null))
M.show_message("\red [user] gently taps [src] with the [O]. ")
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
..()
@@ -310,10 +310,10 @@
if(isturf(movement_target.loc) )
UnarmedAttack(movement_target)
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))
emote(pick("dances around","chases its tail"))
visible_emote(pick("dances around","chases their tail"))
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))
dir = i
@@ -467,7 +467,7 @@
if(prob(1))
emote(pick("dances around","chases her tail"))
visible_emote(pick("dances around","chases her tail"))
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))
dir = i

View File

@@ -12,9 +12,9 @@
speak_chance = 1
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "stomps the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
stop_automated_movement = 1
friendly = "pinches"
var/obj/item/inventory_head

View File

@@ -14,9 +14,9 @@
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 4
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
faction = "goat"
attacktext = "kicked"
health = 40
@@ -99,9 +99,9 @@
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 6
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
health = 50
var/datum/reagents/udder = null
@@ -160,9 +160,9 @@
turns_per_move = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 1
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
health = 1
var/amount_grown = 0
@@ -201,9 +201,9 @@ var/global/chicken_count = 0
turns_per_move = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_amount = 2
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
health = 10
var/eggsleft = 0

View File

@@ -1,7 +1,7 @@
/mob/living/simple_animal/mouse
name = "mouse"
real_name = "mouse"
desc = "It's a small, disease-ridden rodent."
desc = "It's a small rodent."
icon_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
@@ -17,9 +17,9 @@
maxHealth = 5
health = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "stamps on the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
density = 0
var/body_color //brown, gray and white, leave blank for random
layer = MOB_LAYER
@@ -47,7 +47,7 @@
icon_state = "mouse_[body_color]"
wander = 1
else if(prob(5))
emote("snuffles")
audible_emote("snuffles.")
/mob/living/simple_animal/mouse/New()
..()
@@ -110,9 +110,6 @@
/mob/living/simple_animal/mouse/brown/Tom
name = "Tom"
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()
return

View File

@@ -10,7 +10,7 @@
maxHealth = 5
health = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "whacks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "whacks"
harm_intent_damage = 5

View File

@@ -9,7 +9,7 @@
maxHealth = 15
health = 15
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
response_help = "prods the"
response_disarm = "pushes aside the"
response_harm = "smacks the"
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
harm_intent_damage = 5

View File

@@ -12,9 +12,9 @@
speak_chance = 1
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "punches the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "punches"
var/list/insults = list(
"Man you suck",
"You look like the most retarded douche around",

View File

@@ -6,9 +6,9 @@
icon_living = "alienh_running"
icon_dead = "alien_l"
icon_gib = "syndicate_gib"
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
speed = -1
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
maxHealth = 100

View File

@@ -14,9 +14,9 @@
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "pokes the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "pokes"
stop_automated_movement_when_pulled = 0
maxHealth = 60
health = 60
@@ -90,7 +90,7 @@
if(HOSTILE_STANCE_ATTACKING)
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_step = 0
walk(src, 0) //This stops the bear's walking

View File

@@ -6,9 +6,9 @@
icon_dead = "faithless_dead"
speak_chance = 0
turns_per_move = 5
response_help = "passes through the"
response_help = "passes through"
response_disarm = "shoves"
response_harm = "hits the"
response_harm = "hits"
speed = -1
maxHealth = 80
health = 80
@@ -38,7 +38,7 @@
/mob/living/simple_animal/hostile/faithless/FindTarget()
. = ..()
if(.)
emote("wails at [.]")
audible_emote("wails at [.]")
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
. =..()

View File

@@ -17,9 +17,9 @@
turns_per_move = 5
see_in_dark = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "pokes the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "pokes"
stop_automated_movement_when_pulled = 0
maxHealth = 200
health = 200

View File

@@ -10,9 +10,9 @@
icon_living = "crate"
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
response_help = "touches the"
response_disarm = "pushes the"
response_harm = "hits the"
response_help = "touches"
response_disarm = "pushes"
response_harm = "hits"
speed = 4
maxHealth = 250
health = 250
@@ -39,7 +39,7 @@
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
emote("growls at [.]")
audible_emote("growls at [.]")
/mob/living/simple_animal/hostile/mimic/death()
..()

View File

@@ -6,9 +6,9 @@
icon_dead = "piratemelee_dead"
speak_chance = 0
turns_per_move = 5
response_help = "pushes the"
response_help = "pushes"
response_disarm = "shoves"
response_harm = "hits the"
response_harm = "hits"
speed = 4
stop_automated_movement_when_pulled = 0
maxHealth = 100

View File

@@ -1,5 +1,5 @@
/mob/living/simple_animal/hostile/retaliate/clown
name = "Clown"
name = "clown"
desc = "A denizen of clown planet"
icon_state = "clown"
icon_living = "clown"
@@ -7,9 +7,9 @@
icon_gib = "clown_gib"
speak_chance = 0
turns_per_move = 5
response_help = "pokes the"
response_disarm = "gently pushes aside the"
response_harm = "hits the"
response_help = "pokes"
response_disarm = "gently pushes aside"
response_harm = "hits"
speak = list("HONK", "Honk!", "Welcome to clown planet!")
emote_see = list("honks")
speak_chance = 1

View File

@@ -10,9 +10,9 @@
rapid = 1
speak_chance = 5
turns_per_move = 3
response_help = "pokes the"
response_disarm = "gently pushes aside the"
response_harm = "hits the"
response_help = "pokes"
response_disarm = "gently pushes aside"
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.")
emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
a_intent = "harm"

View File

@@ -1,5 +1,5 @@
/mob/living/simple_animal/hostile/russian
name = "Russian"
name = "russian"
desc = "For the Motherland!"
icon_state = "russianmelee"
icon_living = "russianmelee"
@@ -7,9 +7,9 @@
icon_gib = "syndicate_gib"
speak_chance = 0
turns_per_move = 5
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
speed = 4
stop_automated_movement_when_pulled = 0
maxHealth = 100

View File

@@ -1,5 +1,5 @@
/mob/living/simple_animal/hostile/syndicate
name = "Syndicate Operative"
name = "\improper Syndicate operative"
desc = "Death to Nanotrasen."
icon_state = "syndicate"
icon_living = "syndicate"
@@ -7,9 +7,9 @@
icon_gib = "syndicate_gib"
speak_chance = 0
turns_per_move = 5
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
speed = 4
stop_automated_movement_when_pulled = 0
maxHealth = 100

View File

@@ -9,9 +9,9 @@
speak_chance = 0
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
response_help = "brushes the"
response_disarm = "pushes the"
response_harm = "hits the"
response_help = "brushes"
response_disarm = "pushes"
response_harm = "hits"
speed = -1
maxHealth = 250
health = 250
@@ -40,7 +40,7 @@
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
if(.)
emote("growls at [.]")
audible_emote("growls at [.]")
/mob/living/simple_animal/hostile/tree/AttackingTarget()
. =..()

View File

@@ -14,9 +14,9 @@
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
minbodytemp = 250
min_oxy = 16 //Require atleast 16kPA oxygen
minbodytemp = 223 //Below -50 Degrees Celcius

View File

@@ -44,9 +44,9 @@
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cracker/
response_help = "pets the"
response_disarm = "gently moves aside the"
response_harm = "swats the"
response_help = "pets"
response_disarm = "gently moves aside"
response_harm = "swats"
stop_automated_movement = 1
universal_speak = 1
@@ -342,7 +342,7 @@
//Search for item to steal
parrot_interest = search_for_item()
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
icon_state = "parrot_fly"
return
@@ -364,7 +364,7 @@
if(AM)
if(istype(AM, /obj/item) || isliving(AM)) //If stealable item
parrot_interest = AM
emote("turns and flies towards [parrot_interest]")
visible_emote("turns and flies towards [parrot_interest]")
parrot_state = PARROT_SWOOP | PARROT_STEAL
return
else //Else it's a perch
@@ -478,11 +478,11 @@
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)
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
L.adjustBruteLoss(damage)
emote(pick("pecks at [L]", "claws [L]"))
visible_emote(pick("pecks at [L].", "claws [L]."))
return
//Otherwise, fly towards the mob!

View File

@@ -13,7 +13,7 @@
emote_hear = list("wails","screeches")
response_help = "puts their hand through"
response_disarm = "flails at"
response_harm = "punches the"
response_harm = "punches"
melee_damage_lower = 5
melee_damage_upper = 15
attacktext = "drained the life from"

View File

@@ -114,23 +114,23 @@
else
randomValue -= speak.len
if(emote_see && randomValue <= emote_see.len)
emote(pick(emote_see),1)
visible_emote("[pick(emote_see)].")
else
emote(pick(emote_hear),2)
audible_emote("[pick(emote_hear)].")
else
say(pick(speak))
else
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))
emote(pick(emote_hear),2)
audible_emote("[pick(emote_hear)].")
if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
var/length = emote_hear.len + emote_see.len
var/pick = rand(1,length)
if(pick <= emote_see.len)
emote(pick(emote_see),1)
visible_emote("[pick(emote_see)].")
else
emote(pick(emote_hear),2)
audible_emote("[pick(emote_hear)].")
//Atmos
@@ -207,9 +207,14 @@
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
if(act)
if(act == "scream") act = "whimper" //ugly hack to stop animals screaming when crushed :P
..(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)
if(!Proj || Proj.nodamage)
return
@@ -224,9 +229,11 @@
if("help")
if (health > 0)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message("\blue [M] [response_help] [src]")
M.visible_message("\blue [M] [response_help] \the [src]")
if("disarm")
M.visible_message("\blue [M] [response_disarm] \the [src]")
//TODO: Push the mob away or something
if("grab")
if (M == src)
@@ -242,15 +249,11 @@
G.affecting = src
LAssailant = M
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
M.visible_message("\red [M] has grabbed [src] passively!")
if("hurt", "disarm")
if("hurt")
adjustBruteLoss(harm_intent_damage)
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message("\red [M] [response_harm] [src]")
M.visible_message("\red [M] [response_harm] \the [src]")
return

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 121 KiB