diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm
index 847fce35808..d1e5c3bce41 100644
--- a/code/modules/antagonists/morph/morph.dm
+++ b/code/modules/antagonists/morph/morph.dm
@@ -28,6 +28,7 @@
attack_verb_continuous = "glomps"
attack_verb_simple = "glomp"
attack_sound = 'sound/effects/blobattack.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE //nom nom nom
butcher_results = list(/obj/item/food/meat/slab = 2)
var/morphed = FALSE
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index cbbbeb827cf..5c533447a7e 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -22,6 +22,7 @@
stop_automated_movement = TRUE
status_flags = CANPUSH
attack_sound = 'sound/magic/demon_attack1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 250 //Weak to cold
maxbodytemp = INFINITY
@@ -210,6 +211,7 @@
attack_verb_simple = "wildly tickle"
attack_sound = 'sound/items/bikehorn.ogg'
+ attack_vis_effect = null
feast_sound = 'sound/spookoween/scary_horn2.ogg'
deathsound = 'sound/misc/sadtrombone.ogg'
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 07937c93c97..82f0fcdde92 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -146,7 +146,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
///Punch-specific attack verb.
var/attack_verb = "punch"
- ///
+ /// The visual effect of the attack.
+ var/attack_effect = ATTACK_EFFECT_PUNCH
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
@@ -1347,23 +1348,16 @@ GLOBAL_LIST_EMPTY(roundstart_races)
else
var/atk_verb = user.dna.species.attack_verb
+ var/atk_effect = user.dna.species.attack_effect
if(target.body_position == LYING_DOWN)
- atk_verb = ATTACK_EFFECT_KICK
+ atk_verb = "kick"
+ atk_effect = ATTACK_EFFECT_KICK
- switch(atk_verb)//this code is really stupid but some genius apparently made "claw" and "slash" two attack types but also the same one so it's needed i guess
- if(ATTACK_EFFECT_KICK)
- user.do_attack_animation(target, ATTACK_EFFECT_KICK)
- if(ATTACK_EFFECT_SLASH || ATTACK_EFFECT_CLAW)//smh
- user.do_attack_animation(target, ATTACK_EFFECT_CLAW)
- if(ATTACK_EFFECT_SMASH)
- user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
- if(ATTACK_EFFECT_BITE)
- if(user.is_mouth_covered(FALSE, TRUE))
- to_chat(user, "You can't bite with your mouth covered!")
- return FALSE
- user.do_attack_animation(target, ATTACK_EFFECT_BITE)
- else
- user.do_attack_animation(target, ATTACK_EFFECT_PUNCH)
+ if(atk_effect == ATTACK_EFFECT_BITE)
+ if(user.is_mouth_covered(mask_only = TRUE))
+ to_chat(user, "You can't [atk_verb] with your mouth covered!")
+ return FALSE
+ user.do_attack_animation(target, atk_effect)
var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh)
@@ -1371,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases
if(user.dna.species.punchdamagelow)
- if(atk_verb == ATTACK_EFFECT_KICK || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) //kicks never miss (provided your species deals more than 0 damage)
+ if(atk_effect == ATTACK_EFFECT_KICK || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) //kicks never miss (provided your species deals more than 0 damage)
miss_chance = 0
else
miss_chance = min((user.dna.species.punchdamagehigh/user.dna.species.punchdamagelow) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob()
@@ -1399,7 +1393,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(user.limb_destroyer)
target.dismembering_strike(user, affecting.body_zone)
- if(atk_verb == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage
+ if(atk_effect == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage
target.apply_damage(damage*1.5, user.dna.species.attack_type, affecting, armor_block)
log_combat(user, target, "kicked")
else//other attacks deal full raw damage + 1.5x in stamina damage
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index f39f4d597d7..db6de6ec344 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -195,6 +195,7 @@
meat = /obj/item/stack/ore/iron
info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching. You also magnetically attach to surfaces and so don't float without gravity and cannot have positions swapped with other beings."
attack_verb = "smash"
+ attack_effect = ATTACK_EFFECT_SMASH
attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard
prefix = "Plasteel"
special_names = null
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 287ccd5bfb0..ac81decc785 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -15,6 +15,7 @@
payday_modifier = 0.75
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
attack_verb = "slash"
+ attack_effect = ATTACK_EFFECT_CLAW
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
meat = /obj/item/food/meat/slab/human/mutant/lizard
diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
index 483f24aba4b..6328bc60452 100644
--- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm
+++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
@@ -3,6 +3,7 @@
id = "monkey"
say_mod = "chimpers"
attack_verb = "bite"
+ attack_effect = ATTACK_EFFECT_BITE
attack_sound = 'sound/weapons/bite.ogg'
miss_sound = 'sound/weapons/bite.ogg'
mutant_organs = list(/obj/item/organ/tail/monkey)
@@ -91,8 +92,8 @@
/datum/species/monkey/handle_mutations_and_radiation(mob/living/carbon/human/H)
. = ..()
- if(H.radiation > RAD_MOB_MUTATE * 2 && prob(50))
- H.gorillize()
+ if(H.radiation > RAD_MOB_MUTATE * 2 && prob(50))
+ H.gorillize()
return
/datum/species/monkey/check_roundstart_eligible()
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 98e7925b9ee..fbe069be61f 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -7,6 +7,7 @@
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
mutant_bodyparts = list("moth_wings" = "Plain", "moth_antennae" = "Plain", "moth_markings" = "None")
attack_verb = "slash"
+ attack_effect = ATTACK_EFFECT_CLAW
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
meat = /obj/item/food/meat/slab/human/mutant/moth
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index c00bbe4424c..c0ef45e5f89 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -6,6 +6,7 @@
species_traits = list(MUTCOLORS,EYECOLOR, HAS_FLESH, HAS_BONE)
inherent_factions = list("plants", "vines")
attack_verb = "slash"
+ attack_effect = ATTACK_EFFECT_CLAW
attack_sound = 'sound/weapons/slice.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
burnmod = 1.25
diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm
index e8c2bfa6706..7e4372f6222 100644
--- a/code/modules/mob/living/carbon/human/species_types/snail.dm
+++ b/code/modules/mob/living/carbon/human/species_types/snail.dm
@@ -6,6 +6,7 @@
species_traits = list(MUTCOLORS, NO_UNDERWEAR, HAS_FLESH, HAS_BONE)
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_NOSLIPALL)
attack_verb = "slap"
+ attack_effect = ATTACK_EFFECT_DISARM
say_mod = "slurs"
coldmod = 0.5 //snails only come out when its cold and wet
burnmod = 2
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index da8ae965821..a216fdd7a1e 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -60,6 +60,7 @@
species_traits |= S.species_traits
inherent_traits |= S.inherent_traits
attack_verb = S.attack_verb
+ attack_effect = S.attack_effect
attack_sound = S.attack_sound
miss_sound = S.miss_sound
meat = S.meat
@@ -78,6 +79,7 @@
species_traits = initial_species_traits.Copy()
inherent_traits = initial_inherent_traits.Copy()
attack_verb = initial(attack_verb)
+ attack_effect = initial(attack_verb)
attack_sound = initial(attack_sound)
miss_sound = initial(miss_sound)
mutant_bodyparts = list()
diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm
index 164fbc0ab51..c4872482ba3 100644
--- a/code/modules/mob/living/simple_animal/animal_defense.dm
+++ b/code/modules/mob/living/simple_animal/animal_defense.dm
@@ -172,7 +172,9 @@
/mob/living/simple_animal/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect)
if(!no_effect && !visual_effect_icon && melee_damage_upper)
- if(melee_damage_upper < 10)
+ if(attack_vis_effect && !iswallturf(A)) // override the standard visual effect.
+ visual_effect_icon = attack_vis_effect
+ else if(melee_damage_upper < 10)
visual_effect_icon = ATTACK_EFFECT_PUNCH
else
visual_effect_icon = ATTACK_EFFECT_SMASH
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 18d80a3f914..26d3e6e1391 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -204,6 +204,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift)
runetype = /datum/action/innate/cult/create_rune/tele
playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing."
@@ -378,6 +379,7 @@
attack_verb_continuous = "butchers"
attack_verb_simple = "butcher"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion,
/obj/effect/proc_holder/spell/targeted/forcewall/cult)
playstyle_string = "You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 822b81af410..cf46602df94 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -41,6 +41,11 @@
held_state = "cat2"
pet_bonus = TRUE
pet_bonus_emote = "purrs!"
+ ///In the case 'melee_damage_upper' is somehow raised above 0
+ attack_verb_continuous = "claws"
+ attack_verb_simple = "claw"
+ attack_sound = 'sound/weapons/slash.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
footstep_type = FOOTSTEP_MOB_CLAW
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 17109552a44..1f16bab40ef 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -23,6 +23,11 @@
var/obj/item/inventory_head
var/obj/item/inventory_mask
gold_core_spawnable = FRIENDLY_SPAWN
+ ///In the case 'melee_damage_upper' is somehow raised above 0
+ attack_verb_continuous = "snips"
+ attack_verb_simple = "snip"
+ attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
/mob/living/simple_animal/crab/Initialize()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 17f939f03a4..39eb901dc29 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -21,6 +21,11 @@
pet_bonus_emote = "woofs happily!"
ai_controller = /datum/ai_controller/dog
stop_automated_movement = TRUE
+ ///In the case 'melee_damage_upper' is somehow raised above 0
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
footstep_type = FOOTSTEP_MOB_CLAW
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 21e05bec577..5621b103517 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -25,6 +25,7 @@
attack_verb_continuous = "kicks"
attack_verb_simple = "kick"
attack_sound = 'sound/weapons/punch1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_KICK
health = 40
maxHealth = 40
minbodytemp = 180
@@ -138,6 +139,7 @@
attack_verb_continuous = "kicks"
attack_verb_simple = "kick"
attack_sound = 'sound/weapons/punch1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_KICK
health = 50
maxHealth = 50
var/obj/item/udder/udder = null
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index 44da7fc0a85..4447691d1eb 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -25,6 +25,11 @@
held_state = "fox"
pet_bonus = TRUE
pet_bonus_emote = "pants and yaps happily!"
+ ///In the case 'melee_damage_upper' is somehow raised above 0
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
footstep_type = FOOTSTEP_MOB_CLAW
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
index b906de69f70..116d201de08 100644
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm
@@ -27,6 +27,11 @@
held_state = "sloth"
pet_bonus = TRUE
pet_bonus_emote = "slowly smiles!"
+ ///In the case 'melee_damage_upper' is somehow raised above 0
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
footstep_type = FOOTSTEP_MOB_CLAW
diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm
index ad4ca315d65..64e0bf77d13 100644
--- a/code/modules/mob/living/simple_animal/friendly/snake.dm
+++ b/code/modules/mob/living/simple_animal/friendly/snake.dm
@@ -21,6 +21,8 @@
maxHealth = 20
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
+ attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
melee_damage_lower = 5
melee_damage_upper = 6
response_help_continuous = "pets"
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 87f1dc68113..15c0dc2bf1f 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -125,6 +125,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
recolorentiresprite = TRUE
if(!recolorentiresprite) //we want this to proc before stand logs in, so the overlay isn't gone for some reason
cooloverlay = mutable_appearance(icon, theme)
diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
index 9292dfd5037..7584661ecc0 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm
@@ -5,6 +5,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
playstyle_string = "As an assassin type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage."
magic_fluff_string = "..And draw the Space Ninja, a lethal, invisible assassin."
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 200d76e76c3..7b4e66962b8 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -22,6 +22,7 @@
bubble_icon = "alien"
combat_mode = TRUE
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
faction = list(ROLE_ALIEN)
status_flags = CANPUSH
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 7090e92a068..a6b35304fe1 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -33,6 +33,7 @@
attack_verb_continuous = "claws"
attack_verb_simple = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
friendly_verb_continuous = "bear hugs"
friendly_verb_simple = "bear hug"
@@ -142,6 +143,8 @@
deathmessage = "loses its false life and collapses!"
butcher_results = list(/obj/item/food/butter = 6, /obj/item/food/meat/slab = 3, /obj/item/organ/brain = 1, /obj/item/organ/heart = 1)
attack_sound = 'sound/weapons/slap.ogg'
+ attack_vis_effect = ATTACK_EFFECT_DISARM
+ attack_verb_simple = "slap"
attack_verb_continuous = "slaps"
/mob/living/simple_animal/hostile/bear/butter/add_cell_sample()
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 833065b70cd..56e8a186aa9 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -34,6 +34,7 @@
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
speak_emote = list("gnashes")
//Space carp aren't affected by cold.
diff --git a/code/modules/mob/living/simple_animal/hostile/cockroach.dm b/code/modules/mob/living/simple_animal/hostile/cockroach.dm
index bd9c0c0485f..66b3f64d74c 100644
--- a/code/modules/mob/living/simple_animal/hostile/cockroach.dm
+++ b/code/modules/mob/living/simple_animal/hostile/cockroach.dm
@@ -87,6 +87,7 @@
obj_damage = 20
gold_core_spawnable = HOSTILE_SPAWN
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
faction = list("hostile")
sharpness = SHARP_POINTY
squish_chance = 0 // manual squish if relevant
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index fc529963798..d30c82a2fbe 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -67,6 +67,7 @@
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
unique_name = 1
gold_core_spawnable = HOSTILE_SPAWN
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm
index ceb0b120e01..bc26e6ae35a 100644
--- a/code/modules/mob/living/simple_animal/hostile/goose.dm
+++ b/code/modules/mob/living/simple_animal/hostile/goose.dm
@@ -26,6 +26,7 @@
attack_verb_continuous = "pecks"
attack_verb_simple = "peck"
attack_sound = "goose"
+ attack_vis_effect = ATTACK_EFFECT_BITE
speak_emote = list("honks")
faction = list("neutral")
attack_same = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/headcrab.dm b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
index ae36d792ee0..82a77e40e88 100644
--- a/code/modules/mob/living/simple_animal/hostile/headcrab.dm
+++ b/code/modules/mob/living/simple_animal/hostile/headcrab.dm
@@ -14,6 +14,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
faction = list("creature")
robust_searching = 1
stat_attack = DEAD
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 97fc8a72256..644ec6e8a90 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -19,6 +19,7 @@
attack_verb_continuous = "claws"
attack_verb_simple = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
projectilesound = 'sound/weapons/gun/pistol/shot.ogg'
projectiletype = /obj/projectile/hivebotbullet
faction = list("hivebot")
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
index 4ea56112b57..406a2762139 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
@@ -20,6 +20,7 @@
aggro_vision_range = 9
speak_emote = list("chitters")
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
ranged_cooldown_time = 60
projectiletype = /obj/projectile/mega_arachnid
projectilesound = 'sound/weapons/pierce.ogg'
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
index 88fb58836ca..8a539812eb6 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
@@ -28,6 +28,7 @@
robust_searching = TRUE
stat_attack = HARD_CRIT
attack_sound = 'sound/weapons/rapierhit.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
deathsound = 'sound/voice/mook_death.ogg'
aggro_vision_range = 15 //A little more aggressive once in combat to balance out their really low HP
var/attack_state = MOOK_ATTACK_NEUTRAL
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm
index abbb7f6d4c1..161e51918fa 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/clockwork_knight.dm
@@ -17,6 +17,7 @@ I'd rather there be something than the clockwork ruin be entirely empty though s
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
weather_immunities = list("snow")
speak_emote = list("roars")
armour_penetration = 40
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 71f0198833c..4b3794c9461 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -42,6 +42,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/magic/demon_attack1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
icon = 'icons/mob/lavaland/64x64megafauna.dmi'
icon_state = "dragon"
icon_living = "dragon"
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index e20ed2a3a96..3bf5cc2901a 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -28,6 +28,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/magic/demon_attack1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
speak_emote = list("echoes")
armour_penetration = 50
melee_damage_lower = 25
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
index 8ab74e1f840..95ee2fd1c91 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
@@ -24,6 +24,7 @@ Difficulty: Hard
attack_verb_continuous = "claws"
attack_verb_simple = "claw"
attack_sound = 'sound/magic/demon_attack1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
weather_immunities = list("snow")
speak_emote = list("roars")
armour_penetration = 40
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
index 7cbff030d51..ea0cc8e3c34 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
@@ -28,6 +28,7 @@
attack_verb_simple = "bite into"
speak_emote = list("chitters")
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
aggro_vision_range = 9
turns_per_move = 5
gold_core_spawnable = HOSTILE_SPAWN
@@ -109,6 +110,7 @@
combat_mode = TRUE
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = null // doesn't bite unlike the parent type.
stat_attack = HARD_CRIT
is_flying_animal = TRUE
robust_searching = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
index 6f0e8349699..c13e31ea16f 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
@@ -18,6 +18,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/effects/curseattack.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
throw_message = "passes through the smokey body of"
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
index 6c563e0276b..9b0d649eabb 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm
@@ -32,6 +32,7 @@
attack_verb_continuous = "slashes its arms at"
attack_verb_simple = "slash your arms at"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
throw_message = "doesn't affect the sturdiness of"
speed = 1
move_to_delay = 3
@@ -249,6 +250,7 @@
attack_verb_continuous = "bites at"
attack_verb_simple = "bite at"
attack_sound = 'sound/effects/curse1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
throw_message = "simply misses"
speed = 0
move_to_delay = 2
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 5719ae251e3..cfd8e153849 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -81,6 +81,7 @@
attack_verb_simple = "slash"
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/pierce.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
throw_message = "falls right through the strange body of the"
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
@@ -179,6 +180,7 @@
melee_damage_upper = 12
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
+ attack_vis_effect = ATTACK_EFFECT_BITE
speak_emote = list("echoes")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "is shrugged off by"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm
index e820ec2e38e..d7e3af186aa 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm
@@ -26,6 +26,7 @@
attack_verb_continuous = "slices"
attack_verb_simple = "slice"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
vision_range = 9
aggro_vision_range = 9
move_force = MOVE_FORCE_VERY_STRONG
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm
index 917de76645b..42b0d75dea4 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm
@@ -23,6 +23,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/magic/demon_attack1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
ranged_message = "breathes fire at"
vision_range = 9
aggro_vision_range = 9
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm
index 0ca32a1a687..a6f78ac2e5d 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm
@@ -24,6 +24,7 @@
attack_verb_continuous = "snips"
attack_verb_simple = "snip"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE //the closest we have to a crustacean pinching attack effect rn.
weather_immunities = list("snow")
vision_range = 5
aggro_vision_range = 7
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm
index abfb3c732e7..5f95457b445 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm
@@ -20,6 +20,7 @@
attack_verb_continuous = "claws"
attack_verb_simple = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
vision_range = 2 // don't aggro unless you basically antagonize it, though they will kill you worse than a goliath will
aggro_vision_range = 9
move_force = MOVE_FORCE_VERY_STRONG
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm
index 200ccd67781..db92c29c377 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm
@@ -23,6 +23,7 @@
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
vision_range = 7
aggro_vision_range = 7
move_force = MOVE_FORCE_WEAK
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index 7fe0f5179eb..7fc82e643d2 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -23,6 +23,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
faction = list("mushroom")
environment_smash = ENVIRONMENT_SMASH_NONE
stat_attack = DEAD
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index 63bfbdb7759..8ba8f999a51 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -12,6 +12,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH // I always thought they bit. Guess I was wrong.
faction = list("nether")
speak_emote = list("screams")
gold_core_spawnable = HOSTILE_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index 9a5b54afd02..85ac4c1b1ee 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -40,6 +40,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/blade1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
var/obj/effect/light_emitter/red_energy_sword/sord
footstep_type = FOOTSTEP_MOB_SHOE
diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
index af00294a58a..6d8e9e128b5 100644
--- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm
@@ -22,7 +22,8 @@
melee_damage_upper = 15
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
- attack_sound = 'sound/weapons/punch1.ogg'
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
unique_name = TRUE
faction = list("rat")
///The spell that the rat uses to generate miasma
@@ -96,7 +97,7 @@
if (do_mob(src, target, 2 SECONDS, interaction_key = "regalrat"))
target.reagents.add_reagent(/datum/reagent/rat_spit,rand(1,3),no_react = TRUE)
to_chat(src, "You finish licking [target].")
- else
+ else
SEND_SIGNAL(target, COMSIG_RAT_INTERACT, src)
/**
@@ -320,7 +321,7 @@
if(HAS_TRAIT(L, TRAIT_AGEUSIA))
return
to_chat(L, "This food has a funny taste!")
-
+
/datum/reagent/rat_spit/overdose_start(mob/living/M)
..()
var/mob/living/carbon/victim = M
@@ -328,7 +329,7 @@
to_chat(victim, "With this last sip, you feel your body convulsing horribly from the contents you've ingested. As you contemplate your actions, you sense an awakened kinship with rat-kind and their newly risen leader!")
victim.faction |= "rat"
victim.vomit()
- metabolization_rate = 10 * REAGENTS_METABOLISM
+ metabolization_rate = 10 * REAGENTS_METABOLISM
/datum/reagent/rat_spit/on_mob_life(mob/living/carbon/C)
if(prob(15))
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
index 51f89bd48b6..5138cc7e258 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm
@@ -24,6 +24,7 @@
pass_flags = PASSTABLE
faction = list("hostile")
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
mob_size = MOB_SIZE_TINY
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index 3b97bfec436..b58a0832344 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -23,6 +23,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/hallucinations/growl1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 5
robust_searching = 1
@@ -98,9 +99,6 @@
melee_damage_lower = 15
melee_damage_upper = 20
light_color = LIGHT_COLOR_PURPLE
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/hallucinations/growl1.ogg'
deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!"
loot = list(/obj/effect/decal/remains/plasma)
@@ -117,6 +115,7 @@
attack_verb_continuous = "blasts"
attack_verb_simple = "blast"
attack_sound = 'sound/weapons/sonic_jackhammer.ogg'
+ attack_vis_effect = null // jackhammer moment
loot = list(/obj/effect/decal/remains/plasma, /obj/item/pickaxe/drill/jackhammer)
/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize()
diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
index 9a395f6e19d..e2af6a61ed5 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
@@ -35,6 +35,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/magic/demon_attack1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
deathsound = 'sound/magic/demon_dies.ogg'
icon = 'icons/mob/spacedragon.dmi'
icon_state = "spacedragon"
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index c1ee0aed3d9..99212de7829 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -27,6 +27,7 @@
attack_verb_continuous = "claws"
attack_verb_simple = "claw"
attack_sound = 'sound/hallucinations/growl1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_CLAW
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index c2c5355f91a..83d81f90394 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -81,6 +81,7 @@
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
status_flags = 0
var/projectile_deflect_chance = 0
@@ -302,6 +303,7 @@
attack_verb_continuous = "cuts"
attack_verb_simple = "cut"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
faction = list(ROLE_SYNDICATE)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 785605ed5fd..a72f186f97e 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -29,6 +29,7 @@
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
speak_emote = list("pines")
emote_taunt = list("growls")
taunt_chance = 20
diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
index 5b784580c5a..ee7306c12f8 100644
--- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
@@ -28,6 +28,7 @@
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
attack_sound = 'sound/weapons/punch1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
throw_message = "is avoided by the"
aggro_vision_range = 9
mob_size = MOB_SIZE_SMALL
diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm
index 4c98cd4cdde..f9e5e9c579d 100644
--- a/code/modules/mob/living/simple_animal/hostile/zombie.dm
+++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm
@@ -15,6 +15,7 @@
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/hallucinations/growl1.ogg'
+ attack_vis_effect = ATTACK_EFFECT_BITE
combat_mode = TRUE
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 72c26d57390..e9a4bf38e77 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -60,6 +60,7 @@
combat_mode = TRUE //parrots now start "aggressive" since only player parrots will nuzzle.
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
+ attack_vis_effect = ATTACK_EFFECT_BITE
friendly_verb_continuous = "grooms"
friendly_verb_simple = "groom"
mob_size = MOB_SIZE_SMALL
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 4c812707534..cb09c094e9f 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -88,7 +88,10 @@
var/attack_verb_continuous = "attacks"
///Attacking verb in present simple tense.
var/attack_verb_simple = "attack"
- var/attack_sound = null
+ /// Sound played when the critter attacks.
+ var/attack_sound
+ /// Override for the visual attack effect shown on 'do_attack_animation()'.
+ var/attack_vis_effect
///Attacking, but without damage, verb in present continuous tense.
var/friendly_verb_continuous = "nuzzles"
///Attacking, but without damage, verb in present simple tense.
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 0a947c671bf..683cc361aed 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ