diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm
index 08067cb2ab..ee5ef98b59 100644
--- a/code/modules/mob/living/simple_mob/simple_mob.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob.dm
@@ -1,6 +1,7 @@
// Reorganized and somewhat cleaned up.
// AI code has been made into a datum, inside the AI module folder.
+
/mob/living/simple_mob
name = "animal"
desc = ""
@@ -59,6 +60,7 @@
var/harm_intent_damage = 3 // How much an unarmed harm click does to this mob.
var/list/loot_list = list() // The list of lootable objects to drop, with "/path = prob%" structure
var/obj/item/weapon/card/id/myid// An ID card if they have one to give them access to stuff.
+ var/organ_names = /decl/mob_organ_names //'False' bodyparts that can be shown as hit by projectiles in place of the default humanoid bodyplan.
//Mob environment settings
var/minbodytemp = 250 // Minimum "okay" temperature in kelvin
@@ -171,6 +173,9 @@
if(has_eye_glow)
add_eyes()
+ if(organ_names)
+ organ_names = GET_DECL(organ_names)
+
return ..()
/mob/living/simple_mob/Destroy()
@@ -278,3 +283,6 @@
hud_list[STATUS_HUD] = gen_hud_image(buildmode_hud, src, "ai_0", plane = PLANE_BUILDMODE)
hud_list[LIFE_HUD] = gen_hud_image(buildmode_hud, src, "ais_1", plane = PLANE_BUILDMODE)
add_overlay(hud_list)
+
+/decl/mob_organ_names
+ var/list/hit_zones = list("body") //When in doubt, it's probably got a body.
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm
index 56194f13bb..563b292529 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm
@@ -6,6 +6,8 @@
response_disarm = "shoos"
response_harm = "hits"
+ organ_names = /decl/mob_organ_names/quadruped
+
ai_holder_type = /datum/ai_holder/simple_mob/melee
internal_organs = list(\
@@ -20,3 +22,6 @@
butchery_loot = list(\
/obj/item/stack/animalhide = 3\
)
+
+/decl/mob_organ_names/quadruped //Most subtypes have this basic body layout.
+ hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
index e1f7535bf8..9ed5805412 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
@@ -16,6 +16,8 @@
attacktext = list("nipped")
friendly = list("prods")
+ organ_names = /decl/mob_organ_names/borer
+
status_flags = CANPUSH
pass_flags = PASSTABLE
movement_cooldown = 5
@@ -260,3 +262,7 @@
continue
else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
to_chat(M, "[src.true_name] whispers to [host], \"[message]\"")
+
+
+/decl/mob_organ_names/borer
+ hit_zones = list("head", "central segment", "tail segment")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
index 76d7bb9353..c7c2a46c40 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
@@ -20,6 +20,8 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
response_harm = "kicks"
attacktext = list("pecked")
+ organ_names = /decl/mob_organ_names/chicken
+
has_langs = list("Bird")
say_list_type = /datum/say_list/chicken
@@ -154,3 +156,6 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
emote_hear = list("cheeps")
emote_see = list("pecks at the ground","flaps its tiny wings")
+
+/decl/mob_organ_names/chicken
+ hit_zones = list("head", "body", "left wing", "right wing", "left leg", "right leg", "tendies")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
index b5373c176a..3d590a19fd 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
@@ -15,6 +15,8 @@
response_harm = "kicks"
attacktext = list("kicked")
+ organ_names = /decl/mob_organ_names/cow
+
say_list_type = /datum/say_list/cow
meat_amount = 6
@@ -64,4 +66,7 @@
/datum/say_list/cow
speak = list("moo?","moo","MOOOOOO")
emote_hear = list("brays", "moos","moos hauntingly")
- emote_see = list("shakes its head")
\ No newline at end of file
+ emote_see = list("shakes its head")
+
+/decl/mob_organ_names/cow
+ hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "udder")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
index 77ecf14da6..62c34209f7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
@@ -83,6 +83,9 @@
response_disarm = "gently pushes aside"
response_harm = "punches"
+ organ_names = /decl/mob_organ_names/spider
+
+
melee_damage_lower = 18
melee_damage_upper = 30
attack_sharp = 1
@@ -141,3 +144,6 @@
if(poison_per_bite)
poison_per_bite *= 1.3
+
+/decl/mob_organ_names/spider
+ hit_zones = list("cephalothorax", "abdomen", "left forelegs", "right forelegs", "left hind legs", "right hind legs", "pedipalp", "mouthparts")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
index 26b8eff0b4..a772346555 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
@@ -16,6 +16,8 @@
response_harm = "stomps"
friendly = "pinches"
+ organ_names = /decl/mob_organ_names/crab
+
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/crab
say_list_type = /datum/say_list/crab
@@ -54,4 +56,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/crab
name = "meat"
desc = "A chunk of meat."
- icon_state = "crustacean-meat"
\ No newline at end of file
+ icon_state = "crustacean-meat"
+
+/decl/mob_organ_names/crab
+ hit_zones = list("cephalothorax", "abdomen", "left walking legs", "right walking legs", "left swimming legs", "right swimming legs", "left pincer", "right pincer")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
index 2ce8d46af7..a74b0dc2c0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
@@ -18,6 +18,8 @@
plane = TURF_PLANE
layer = UNDERWATER_LAYER
+ organ_names = /decl/mob_organ_names/fish
+
holder_type = /obj/item/weapon/holder/fish
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
@@ -320,3 +322,6 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
+
+/decl/mob_organ_names/fish
+ hit_zones = list("head", "body", "dorsal fin", "left pectoral fin", "right pectoral fin", "tail fin")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm
index 6fc73fc5f9..3dabbb6430 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm
@@ -8,6 +8,8 @@
icon_dead = "yithian_dead"
icon = 'icons/jungle.dmi'
+ organ_names = /decl/mob_organ_names/yithian
+
// Same stats as lizards.
health = 5
maxHealth = 5
@@ -23,7 +25,15 @@
icon_dead = "tindalos_dead"
icon = 'icons/jungle.dmi'
+ organ_names = /decl/mob_organ_names/tindalos
+
// Same stats as lizards.
health = 5
maxHealth = 5
- mob_size = MOB_MINISCULE
\ No newline at end of file
+ mob_size = MOB_MINISCULE
+
+/decl/mob_organ_names/yithian
+ hit_zones = list("head", "abdomen", "left foreleg", "right foreleg", "left hind leg", "right hind leg")
+
+/decl/mob_organ_names/tindalos
+ hit_zones = list("head", "thorax", "abdomen", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "left middle leg", "right middle leg")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm
index 7fcd020f8e..3e3647a0b0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm
@@ -14,6 +14,8 @@
response_disarm = "pushes aside"
response_harm = "hits"
+ organ_names = /decl/mob_organ_names/penguin
+
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 15
@@ -25,3 +27,6 @@
name = "Tux"
desc = "A penguin that has been known to associate with gnus."
speak_emote = list("interjects")
+
+/decl/mob_organ_names/penguin
+ hit_zones = list("chest", "left leg", "right leg", "left flipper", "right flipper", "head")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm
index 80ccfff874..8eb0c29580 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/possum.dm
@@ -76,10 +76,10 @@
/datum/ai_holder/simple_mob/passive/possum/poppy
var/static/list/aaa_words = list(
- "delaminat",
- "meteor",
- "fire",
- "breach",
+ "delaminat",
+ "meteor",
+ "fire",
+ "breach",
"loose",
"level 7",
"level seven",
@@ -127,6 +127,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stamps on"
+ organ_names = /decl/mob_organ_names/possum
density = 0
minbodytemp = 223
maxbodytemp = 323
@@ -196,5 +197,12 @@
icon_dead = "poppy_dead"
icon_rest = "poppy_dead"
tt_desc = "Didelphis astrum salutem"
+ organ_names = /decl/mob_organ_names/poppy
holder_type = /obj/item/weapon/holder/possum/poppy
ai_holder_type = /datum/ai_holder/simple_mob/passive/possum/poppy
+
+/decl/mob_organ_names/possum
+ hit_zones = list("head", "body", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "pouch")
+
+/decl/mob_organ_names/poppy
+ hit_zones = list("head", "body", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "pouch", "cute little jacket")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm
index 7dc23ef7f9..2d1ec74af2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm
@@ -29,6 +29,7 @@
response_help = "pets"
response_disarm = "gently moves aside"
response_harm = "swats"
+ organ_names = /decl/mob_organ_names/bird
say_list_type = /datum/say_list/bird
holder_type = /obj/item/weapon/holder/bird
@@ -96,3 +97,6 @@
tt_desc = "E Streptopelia risoria" // This is actually disputed IRL but since we can't tell the future it'll stay the same for 500+ years.
icon_scale_x = 0.5
icon_scale_y = 0.5
+
+/decl/mob_organ_names/bird
+ hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
index a314885038..49bd4b46b8 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
@@ -87,6 +87,7 @@
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
+ organ_names = /decl/mob_organ_names/corgi
/mob/living/simple_mob/animal/passive/dog/corgi/puppy
name = "corgi puppy"
@@ -241,4 +242,7 @@
desc = "It's a brittany spaniel."
icon_state = "brittany"
icon_living = "brittany"
- icon_dead = "brittany_dead"
\ No newline at end of file
+ icon_dead = "brittany_dead"
+
+/decl/mob_organ_names/corgi
+ hit_zones = list("head", "body", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "heart") //You monster.
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm
index 10f7ddc2cf..2d0c0b638e 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/duck.dm
@@ -38,6 +38,8 @@
attack_edge = 1 // Razor-edged wings, and 'claws' made for digging through ice.
attacktext = list("nipped", "bit", "cut", "clawed")
+ organ_names = /decl/mob_organ_names/bird
+
tame_items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread = 90,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread = 25
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm
index 2e6eb9940c..1a3d98b772 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/frostfly.dm
@@ -45,6 +45,8 @@
base_attack_cooldown = 1.5 SECONDS
attacktext = list("nipped", "bit", "pinched")
+ organ_names = /decl/mob_organ_names/frostfly
+
projectiletype = /obj/item/projectile/energy/blob/freezing
special_attack_cooldown = 5 SECONDS
@@ -168,3 +170,6 @@
F.energy = max(0, F.energy - 1) // The AI will eventually flee.
+
+/decl/mob_organ_names/frostfly
+ hit_zones = list("head", "thorax", "abdomen", "left vestigal wing", "right vestigal wing", "left legs", "right legs")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm
index f7bec21beb..c8935093a4 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/glitterfly.dm
@@ -52,6 +52,8 @@
attacktext = list("bit", "buffeted", "slashed")
+ organ_names = /decl/mob_organ_names/smallflying
+
tame_items = list(
/obj/item/weapon/reagent_containers/food/snacks/grown = 90,
/obj/item/weapon/reagent_containers/food/snacks/meat/crab = 10,
@@ -123,3 +125,6 @@
return
else if(prob(1))
hostile = initial(hostile)
+
+/decl/mob_organ_names/smallflying
+ hit_zones = list("body", "left wing", "right wing") //For flying things too tiny to be granular
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm
index e796cd488b..8c3fc45c02 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm
@@ -58,6 +58,9 @@
response_disarm = "nudges"
response_harm = "kicks"
+ organ_names = /decl/mob_organ_names/hare
+
+
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
say_list_type = /datum/say_list/hare
@@ -65,4 +68,7 @@
/datum/say_list/hare
speak = list("Snrf...","Crk!")
emote_hear = list("crackles","sniffles")
- emote_see = list("stomps the ground", "sniffs the air", "chews on something")
\ No newline at end of file
+ emote_see = list("stomps the ground", "sniffs the air", "chews on something")
+
+/decl/mob_organ_names/hare
+ hit_zones = list("head", "chest", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "left head spike", "right head spike")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm
index 0ac8d54c2b..5ba37eb4cb 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm
@@ -81,6 +81,8 @@
attacktext = list("clawed", "pinched", "crushed")
speak_emote = list("clicks")
+ organ_names = /decl/mob_organ_names/crab
+
ai_holder_type = /datum/ai_holder/simple_mob/melee/hooligan
say_list_type = /datum/say_list/crab
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm
index 8a54faf874..03a253d0b5 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm
@@ -47,6 +47,8 @@
base_attack_cooldown = 2 SECONDS
attacktext = list("gouged", "bit", "cut", "clawed", "whipped")
+ organ_names = /decl/mob_organ_names/kururak
+
armor = list(
"melee" = 30,
"bullet" = 15,
@@ -421,3 +423,6 @@
evasion = 20
bleeding_rate_percent = 0.7
attack_speed_percent = 0.8
+
+/decl/mob_organ_names/kururak
+ hit_zones = list("head", "chest", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "far left tail", "far right tail", "left middle tail", "right middle tail")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm
index 41cd6aec93..ffae9cb76a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm
@@ -69,6 +69,8 @@
attack_sharp = TRUE
attacktext = list("nipped", "bit", "pinched")
+ organ_names = /decl/mob_organ_names/leech
+
armor = list(
"melee" = 10,
"bullet" = 15,
@@ -497,3 +499,6 @@
holder.a_intent = I_HURT
else
holder.a_intent = I_HURT
+
+/decl/mob_organ_names/leech
+ hit_zones = list("mouthparts", "central segment", "tail segment")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm
index 8ad7f2b8c9..489c464b7a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/moth.dm
@@ -48,6 +48,8 @@
base_attack_cooldown = 1.5 SECONDS
attacktext = list("nipped", "bit", "pinched")
+ organ_names = /decl/mob_organ_names/moth
+
projectiletype = /obj/item/projectile/energy/blob
special_attack_cooldown = 10 SECONDS
@@ -78,7 +80,6 @@
threaten_sound = 'sound/effects/spray3.ogg'
stand_down_sound = 'sound/effects/squelch1.ogg'
-
/obj/effect/effect/smoke/elemental/mothspore
name = "spore cloud"
desc = "A dust cloud filled with disorienting bacterial spores."
@@ -141,3 +142,6 @@
if(energy >= 20)
return TRUE
return FALSE
+
+/decl/mob_organ_names/moth
+ hit_zones = list("head", "thorax", "abdomen", "left forewing", "left hindwing", "right forewing", "right hindwing", "left foreleg", "right foreleg", "left hindleg", "right hindleg")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/pillbug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/pillbug.dm
index f70ea218c3..fcc31b644b 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/pillbug.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/pillbug.dm
@@ -29,6 +29,8 @@
response_disarm = "rolls over"
response_harm = "stomps on"
+ organ_names = /decl/mob_organ_names/pillbug
+
armor = list(
"melee" = 30,
"bullet" = 10,
@@ -39,7 +41,6 @@
"rad" = 100
)
- // The frostfly's body is incredibly cold at all times, natural resistance to things trying to burn it.
armor_soak = list(
"melee" = 10,
"bullet" = 0,
@@ -48,4 +49,7 @@
"bomb" = 0,
"bio" = 0,
"rad" = 0
- )
\ No newline at end of file
+ )
+
+/decl/mob_organ_names/pillbug
+ hit_zones = list("cephalon", "pereon", "pleon", "left forelegs", "right forelegs", "left hind legs", "right hind legs")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
index e6b19727b3..99665ea985 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
@@ -41,6 +41,8 @@
melee_attack_delay = 1 SECOND
attacktext = list("mauled")
+ organ_names = /decl/mob_organ_names/savik
+
player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \
a short period of time, however it will tire you and you will be much weaker for awhile after it expires."
@@ -79,3 +81,6 @@
set category = "Abilities"
add_modifier(/datum/modifier/berserk, 30 SECONDS)
+
+/decl/mob_organ_names/savik
+ hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "right bone plate", "left bone plate", "tail", "left claw", "right claw")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
index 60a035c432..d9a4204090 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
@@ -54,6 +54,8 @@
attack_edge = TRUE
attacktext = list("gouged")
+ organ_names = /decl/mob_organ_names/shantak
+
say_list_type = /datum/say_list/shantak
/datum/say_list/shantak
@@ -99,3 +101,6 @@
/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/retaliate
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+
+/decl/mob_organ_names/shantak
+ hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "mane", "snout")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm
index 7ca24f3174..858bc7946a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm
@@ -20,6 +20,8 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
+ organ_names = /decl/mob_organ_names/smallflying
+
harm_intent_damage = 10
melee_damage_lower = 5
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
index 307ec83073..ad31922b13 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
@@ -51,6 +51,8 @@
attack_sound = 'sound/weapons/bite.ogg'
attacktext = list("bitten")
+ organ_names = /decl/mob_organ_names/fish
+
meat_amount = 1
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm
index 43d159a9f0..9f028ed56d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm
@@ -21,6 +21,8 @@
attacktext = list("pecked")
attack_sound = 'sound/weapons/bite.ogg'
+ organ_names = /decl/mob_organ_names/goose
+
has_langs = list("Bird")
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
@@ -41,4 +43,7 @@
set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards."
set category = "Abilities"
- add_modifier(/datum/modifier/berserk, 30 SECONDS)
\ No newline at end of file
+ add_modifier(/datum/modifier/berserk, 30 SECONDS)
+
+/decl/mob_organ_names/goose
+ hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm
index aef54e599d..ca5ab5e962 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm
@@ -29,6 +29,8 @@
attacktext = list("slammed")
+ organ_names = /decl/mob_organ_names
+
ai_holder_type = /datum/ai_holder/simple_mob/inert
mob_class = MOB_CLASS_ABERRATION // It's a monster.
diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm
index 752211812d..31ffb6ef1d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm
@@ -7,6 +7,8 @@
pass_flags = PASSBLOB | PASSTABLE
faction = "blob"
+ organ_names = /decl/mob_organ_names/blob
+
heat_damage_per_tick = 0
cold_damage_per_tick = 0
min_oxy = 0
@@ -82,3 +84,6 @@
break
return ally
+
+/decl/mob_organ_names/blob
+ hit_zones = list("mass")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
index 2628fe3f76..c70a186d5f 100644
--- a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
@@ -24,6 +24,8 @@
attack_sound = 'sound/effects/slime_squish.ogg'
say_list_type = /datum/say_list/spore
+ organ_names = /decl/mob_organ_names/spore
+
var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie.
var/can_infest = FALSE
var/is_infesting = FALSE
@@ -152,4 +154,7 @@
if(helpers)
to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s."))
- return damage_to_do
\ No newline at end of file
+ return damage_to_do
+
+/decl/mob_organ_names/spore
+ hit_zones = list("sporangium", "stolon", "sporangiophore")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
index b6f9520698..1fd1ebf2b4 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
@@ -22,8 +22,13 @@
attacktext = list("attacked")
attack_sound = 'sound/items/bikehorn.ogg'
+ organ_names = /decl/mob_organ_names/clown
+
say_list_type = /datum/say_list/clown
/datum/say_list/clown
speak = list("HONK", "Honk!", "Welcome to clown planet!")
- emote_see = list("honks")
\ No newline at end of file
+ emote_see = list("honks")
+
+/decl/mob_organ_names/clown
+ hit_zones = list("head", "torso", "pie-hole", "honker", "left funny bone", "right funny bone", "left foot", "right foot", "unmentionables")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm
index 6e17e2e1a0..a52bd28c30 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm
@@ -15,6 +15,8 @@
health = 150 // Point of human crit, as of commenting
maxHealth = 150
+ organ_names = /decl/mob_organ_names/humanoid
+
// Most humans leave a corpse
var/corpse = null
@@ -23,4 +25,7 @@
if(corpse)
new corpse (src.loc)
qdel(src)
- return
\ No newline at end of file
+ return
+
+/decl/mob_organ_names/humanoid
+ hit_zones = list("head", "torso", "left leg", "right leg", "left arm", "right arm", "left hand", "right hand", "left foot", "right foot") //Same as real people!
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm
index 6766cd67d3..14d1365fb9 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/combat_drone.dm
@@ -54,6 +54,8 @@
response_disarm = "gently pushes aside"
response_harm = "hits"
+ organ_names = /decl/mob_organ_names/combatdrone
+
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
say_list_type = /datum/say_list/malf_drone
@@ -102,3 +104,6 @@
// It won't wander away from its spawn point
/mob/living/simple_mob/mechanical/combat_drone/event
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/event
+
+/decl/mob_organ_names/combatdrone
+ hit_zones = list("chassis", "comms array", "sensor suite", "left weapons module", "right weapons module", "maneuvering thruster")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
index 2e014482f2..a12b2c7c09 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
@@ -40,6 +40,8 @@
response_disarm = "gently pushes aside"
response_harm = "hits"
+ organ_names = /decl/mob_organ_names/miningdrone
+
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
say_list_type = /datum/say_list/malf_drone
@@ -124,3 +126,6 @@
src.Beam(OB, icon_state = "rped_upgrade", time = 1 SECONDS)
for(var/obj/item/I in my_storage)
my_storage.remove_from_storage(I, OB)
+
+/decl/mob_organ_names/miningdrone
+ hit_zones = list("chassis", "comms array", "sensor suite", "left excavator module", "right excavator module", "maneuvering thruster")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
index 946219f7df..3f4091b0c2 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
@@ -16,6 +16,8 @@
harm_intent_damage = 3
friendly = "hugs"
+ organ_names = /decl/mob_organ_names/golem
+
melee_damage_lower = 30 // It has a built in esword.
melee_damage_upper = 30
attack_armor_pen = 20
@@ -150,4 +152,7 @@
/mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A)
casting = FALSE
- ranged_post_animation(A)
\ No newline at end of file
+ ranged_post_animation(A)
+
+/decl/mob_organ_names/golem
+ hit_zones = list("helmet", "cuirass", "left tasset", "right tasset", "left gauntlet", "right gauntlet", "weapon")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm
index 667c514f0b..b1494bc268 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm
@@ -19,6 +19,8 @@
attacktext = list("clawed")
projectilesound = 'sound/weapons/Gunshot_old.ogg'
+ organ_names = /decl/mob_organ_names/hivebot
+
ai_holder_type = /datum/ai_holder/simple_mob/hivebot
say_list_type = /datum/say_list/hivebot
@@ -52,4 +54,7 @@
pointblank = TRUE
conserve_ammo = TRUE
firing_lanes = TRUE
- can_flee = FALSE // Fearless dumb machines.
\ No newline at end of file
+ can_flee = FALSE // Fearless dumb machines.
+
+/decl/mob_organ_names/hivebot
+ hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
index 09bf26f05d..077cf1ebac 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
@@ -118,6 +118,8 @@
icon_state = "red"
icon_living = "red"
+ organ_names = /decl/mob_organ_names/hivebotsiege
+
player_msg = "You are capable of firing very long range bombardment attacks.
\
To use, click on a tile or enemy at a long range. Note that the projectile arcs in the air, \
so it will fly over everything inbetween you and the target.
\
@@ -153,4 +155,7 @@
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation
name = "anti-personnel artillery hivebot"
desc = "A large robot capable of delivering fragmentation shells to rip apart their fleshy enemies."
- projectiletype = /obj/item/projectile/arc/fragmentation
\ No newline at end of file
+ projectiletype = /obj/item/projectile/arc/fragmentation
+
+/decl/mob_organ_names/hivebotsiege
+ hit_zones = list("central chassis", "armor plating", "reinforced positioning servo", "head", "sensor suite", "manipulator arm", "heavy weapons mount", "advanced weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
index 243a67e4f5..dcfdc5b2c1 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
@@ -8,6 +8,7 @@
melee_damage_lower = 2
melee_damage_upper = 2
+ organ_names = /decl/mob_organ_names/hivebotsupport
// This hivebot supplies a general buff to nearby hivebots that improve their performance.
// Note that the commander itself does not receive the buff.
@@ -85,3 +86,6 @@
to_chat(src, span("notice", "You have resupplied \the [SM]."))
last_resupply = world.time
break // Only one resupply per pulse.
+
+/decl/mob_organ_names/hivebotsupport
+ hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "battle analytics mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm
index 7f4e10f05d..6b30eccab0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm
@@ -9,6 +9,8 @@
melee_damage_lower = 3
melee_damage_upper = 3
attack_sound = 'sound/weapons/Egloves.ogg'
+ organ_names = /decl/mob_organ_names/hivebottank
+
// All tank hivebots apply a modifier to their target, and force them to attack them if they're AI controlled.
/mob/living/simple_mob/mechanical/hivebot/tank/apply_melee_effects(atom/A)
@@ -166,3 +168,6 @@
return -1 // complete projectile permutation
return (..(P))
+
+/decl/mob_organ_names/hivebottank
+ hit_zones = list("central chassis", "armor plating", "component shielding", "positioning servo", "head", "sensor suite", "heavy manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
index 8478e514a5..a0f442f909 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
@@ -28,6 +28,8 @@
projectiletype = /obj/item/projectile/beam
base_attack_cooldown = 2 SECONDS
+ organ_names = /decl/mob_organ_names/hoverpod
+
var/datum/effect/effect/system/ion_trail_follow/ion_trail
/mob/living/simple_mob/mechanical/mecha/hoverpod/manned
@@ -40,4 +42,7 @@
return ..()
/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0)
- return TRUE
\ No newline at end of file
+ return TRUE
+
+/decl/mob_organ_names/hoverpod
+ hit_zones = list("central chassis", "control module", "hydraulics", "left manipulator", "right manipulator", "left landing strut", "right landing strut", "maneuvering thruster", "sensor suite", "radiator", "power supply")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
index d69fd6c4c2..c2afc8b546 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
@@ -14,6 +14,8 @@
maxHealth = 300
mob_size = MOB_LARGE
+ organ_names = /decl/mob_organ_names/mecha
+
// Very close to the base 'damage_absorption' var on the base mecha class.
armor = list(
"melee" = 20,
@@ -138,4 +140,7 @@
if(prob(deflect_chance))
severity++ // This somewhat misleadingly makes it less severe.
deflect_sprite()
- ..(severity)
\ No newline at end of file
+ ..(severity)
+
+/decl/mob_organ_names/mecha
+ hit_zones = list("central chassis", "control module", "hydraulics", "left arm", "right arm", "left leg", "right leg", "sensor suite", "radiator", "power supply", "left equipment mount", "right equipment mount")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm
index 4545057bc6..915c14e9f7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm
@@ -45,6 +45,8 @@
attack_sound = 'sound/weapons/bladeslice.ogg'
attacktext = list("cut", "sliced")
+ organ_names = /decl/mob_organ_names/viscerator
+
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
/mob/living/simple_mob/mechanical/viscerator/death()
@@ -93,3 +95,6 @@
attack_armor_pen = 20
base_attack_cooldown = 10 // One attack a second or so.
movement_cooldown = 0.5
+
+/decl/mob_organ_names/viscerator
+ hit_zones = list("chassis", "rotor blades", "sensor array")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm
index 0e897599ac..e1b1bb80fd 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm
@@ -15,6 +15,8 @@
response_harm = "punches"
faction = "wards" // Needed as most human mobs are in neutral faction. The owner is generally except from any ward hostility regardless.
+ organ_names = /decl/mob_organ_names/ward
+
maxHealth = 15
health = 15
movement_cooldown = 0
@@ -39,4 +41,7 @@
/mob/living/simple_mob/mechanical/ward/IIsAlly(mob/living/L)
if(owner == L)
return TRUE
- return ..()
\ No newline at end of file
+ return ..()
+
+/decl/mob_organ_names/ward
+ hit_zones = list("chassis", "sensor array", "hover thruster")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm
index 69d0da0251..b0c4f869bb 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm
@@ -16,6 +16,7 @@
harm_intent_damage = 5
melee_damage_lower = 15 //It's not the strongest of the bunch, but that doesn't mean it can't hurt you.
melee_damage_upper = 20
+ organ_names = /decl/mob_organ_names/artificer
attacktext = list("rammed")
attack_sound = 'sound/weapons/rapidslice.ogg'
construct_spells = list(/spell/aoe_turf/conjure/construct/lesser,
@@ -27,4 +28,7 @@
/spell/aoe_turf/conjure/grille,
/spell/targeted/occult_repair_aura,
/spell/targeted/construct_advanced/mend_acolyte
- )
\ No newline at end of file
+ )
+
+/decl/mob_organ_names/artificer
+ hit_zones = list("body", "carapace", "right manipulator", "left manipulator", "upper left appendage", "upper right appendage", "eye")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm
index 9328d9cffd..93eef28228 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm
@@ -17,6 +17,7 @@
attack_sharp = 1
attacktext = list("violently stabbed")
friendly = list("caresses")
+ organ_names = /decl/mob_organ_names/harvester
movement_cooldown = 0
// environment_smash = 1 // Whatever this gets renamed to, Harvesters need to break things
@@ -37,4 +38,7 @@
/spell/targeted/construct_advanced/inversion_beam,
/spell/targeted/construct_advanced/agonizing_sphere,
/spell/rune_write
- )
\ No newline at end of file
+ )
+
+/decl/mob_organ_names/harvester
+ hit_zones = list("cephalothorax", "eye", "carapace", "energy crystal", "mandible")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm
index 2898eecf45..94737e4b67 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm
@@ -19,6 +19,7 @@
attack_armor_pen = 60 //Being punched by a living, floating statue.
attacktext = list("smashed their armoured gauntlet into")
friendly = list("pats")
+ organ_names = /decl/mob_organ_names/juggernaut
mob_size = MOB_HUGE
@@ -141,4 +142,7 @@
return -1 // complete projectile permutation
- return (..(P))
\ No newline at end of file
+ return (..(P))
+
+/decl/mob_organ_names/juggernaut
+ hit_zones = list("body", "left pauldron", "right pauldron", "left arm", "right arm", "eye", "head", "crystaline spike")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
index 1a56abcdcd..f20d02b5c7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
@@ -20,6 +20,8 @@
attack_armor_pen = 100 //It's a ghost/horror from beyond, I ain't gotta explain 100 AP
attacktext = list("drained the life from")
+ organ_names = /decl/mob_organ_names/shade
+
minbodytemp = 0
maxbodytemp = 4000
min_oxy = 0
@@ -45,4 +47,7 @@
ghostize()
qdel(src)
- return
\ No newline at end of file
+ return
+
+/decl/mob_organ_names/shade
+ hit_zones = list("spectral robe", "featureless visage", "haunting glow")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm
index 13580bc845..e77d749ac4 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm
@@ -19,6 +19,7 @@
attack_edge = 1
attacktext = list("slashed")
friendly = list("pinches")
+ organ_names = /decl/mob_organ_names/wraith
movement_cooldown = 0
attack_sound = 'sound/weapons/rapidslice.ogg'
construct_spells = list(/spell/targeted/ethereal_jaunt/shift,
@@ -30,4 +31,7 @@
/mob/living/simple_mob/construct/wraith/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
- L.add_modifier(/datum/modifier/deep_wounds, 30 SECONDS)
\ No newline at end of file
+ L.add_modifier(/datum/modifier/deep_wounds, 30 SECONDS)
+
+/decl/mob_organ_names/wraith
+ hit_zones = list("body", "eye", "crystaline spike", "left claw", "right claw")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm
index 3cc9df4fa3..80f734e162 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm
@@ -24,6 +24,8 @@
attacktext = list("chomped")
attack_sound = 'sound/weapons/bite.ogg'
+ organ_names = /decl/mob_organ_names/abberation
+
speak_emote = list("gibbers")
ai_holder_type = /datum/ai_holder/simple_mob/melee
@@ -65,4 +67,7 @@
harm_intent_damage = 5
melee_damage_lower = 13
- melee_damage_upper = 25
\ No newline at end of file
+ melee_damage_upper = 25
+
+/decl/mob_organ_names/abberation
+ hit_zones = list("fleshy mass", "maw", "eye(?)", "orifice(?)")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm
index 1c4ac8876c..28af6878d0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm
@@ -25,6 +25,8 @@
attacktext = list("gripped")
attack_sound = 'sound/hallucinations/growl1.ogg'
+ organ_names = /decl/mob_organ_names/faithless
+
ai_holder_type = /datum/ai_holder/simple_mob/melee
@@ -74,4 +76,7 @@
harm_intent_damage = 5
melee_damage_lower = 13
- melee_damage_upper = 28
\ No newline at end of file
+ melee_damage_upper = 28
+
+/decl/mob_organ_names/faithless
+ hit_zones = list("body", "left appendage", "right appendage", "shadowy tendrils", "head", "right stump", "left stump", "infernal eye")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm
index 79e5c4d349..76753e8da6 100644
--- a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm
@@ -17,6 +17,8 @@
response_disarm = "pushes aside"
response_harm = "smacks"
+ organ_names = /decl/mob_organ_names/tomato
+
harm_intent_damage = 5
melee_damage_upper = 15
melee_damage_lower = 10
@@ -25,3 +27,6 @@
ai_holder_type = /datum/ai_holder/simple_mob/melee
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
+
+/decl/mob_organ_names/tomato
+ hit_zones = list("flesh", "leaf", "mouth")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm
index 404a209c60..052fdaa196 100644
--- a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm
@@ -25,6 +25,8 @@
attacktext = list("bitten")
attack_sound = 'sound/weapons/bite.ogg'
+ organ_names = /decl/mob_organ_names/tree
+
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
pixel_x = -16
@@ -40,4 +42,7 @@
..(null,"is hacked into pieces!")
playsound(src, 'sound/effects/woodcutting.ogg', 100, 1)
new /obj/item/stack/material/wood(loc)
- qdel(src)
\ No newline at end of file
+ qdel(src)
+
+/decl/mob_organ_names/tree
+ hit_zones = list("trunk", "branches", "twigs")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
index cf213ca8c2..1400b22167 100644
--- a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
@@ -40,6 +40,8 @@ var/list/_slime_default_emotes = list(
response_help = "pets"
+ organ_names = /decl/mob_organ_names/slime
+
// Atmos stuff.
minbodytemp = T0C-30
heat_damage_per_tick = 0
@@ -233,4 +235,7 @@ var/list/_slime_default_emotes = list(
/mob/living/simple_mob/slime/proc/squish()
playsound(src, 'sound/effects/slime_squish.ogg', 50, 0)
- visible_message("\The [src] squishes!")
\ No newline at end of file
+ visible_message("\The [src] squishes!")
+
+/decl/mob_organ_names/slime
+ hit_zones = list("cytoplasmic membrane")
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 6cd885f0c1..04313cc473 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -667,17 +667,23 @@
playsound(target_mob, "bullet_miss", 75, 1)
return FALSE
+ var/impacted_organ = parse_zone(def_zone)
+ if(istype(target_mob, /mob/living/simple_mob))
+ var/mob/living/simple_mob/SM = target_mob
+ var/decl/mob_organ_names/organ_plan = SM.organ_names
+ impacted_organ = pick(organ_plan.hit_zones)
+
//hit messages
if(silenced)
playsound(target_mob, hitsound, 5, 1, -1)
- to_chat(target_mob, span("critical", "You've been hit in the [parse_zone(def_zone)] by \the [src]!"))
+ to_chat(target_mob, span("critical", "You've been hit in the [impacted_organ] by \the [src]!"))
else
var/volume = vol_by_damage()
playsound(target_mob, hitsound, volume, 1, -1)
// X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
target_mob.visible_message(
- span("danger", "\The [target_mob] was hit in the [parse_zone(def_zone)] by \the [src]!"),
- span("critical", "You've been hit in the [parse_zone(def_zone)] by \the [src]!")
+ span("danger", "\The [target_mob] was hit in the [impacted_organ] by \the [src]!"),
+ span("critical", "You've been hit in the [impacted_organ] by \the [src]!")
)
//admin logs