diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 1c8f1f69ad1..3c963ff4c39 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 @@ -174,6 +176,9 @@ if(has_eye_glow) add_eyes() + if(organ_names) + organ_names = GET_DECL(organ_names) + return ..() /mob/living/simple_mob/Destroy() @@ -287,4 +292,7 @@ if(understands_common && speaking?.name == LANGUAGE_GALCOM) return TRUE return ..() -//Vorestation Add End \ No newline at end of file +//Vorestation Add End + +/decl/mob_organ_names + var/list/hit_zones = list("body") //When in doubt, it's probably got a body. 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 56194f13bbd..563b2925291 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 34a159801f3..52621268266 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 @@ -266,3 +268,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 d415ef30efb..6e9ad9bed8e 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 @@ -159,3 +161,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 b5373c176ad..3d590a19fd7 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 22be133be6b..40da6da92e9 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 = TRUE @@ -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 26b8eff0b47..a772346555a 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 a4fb4f40785..33ea730b2ec 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/sif/murkfish + +/decl/mob_organ_names/fish + hit_zones = list("head", "body", "dorsal fin", "left pectoral fin", "right pectoral fin", "tail fin") 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 6fc73fc5f94..3dabbb6430a 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 7fcd020f8e2..3e3647a0b08 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 329655a8084..e7be8a1f577 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 @@ -74,10 +74,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_disarm = "gently pushes aside" response_harm = "stamps on" density = FALSE + organ_names = /decl/mob_organ_names/possum minbodytemp = 223 maxbodytemp = 323 universal_speak = FALSE @@ -195,5 +196,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 5741727f695..c7692b391b2 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 @@ -84,3 +85,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 e0473b5b6d8..8c305e7ef85 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 @@ -89,6 +89,7 @@ icon_living = "corgi" icon_dead = "corgi_dead" holder_type = /obj/item/weapon/holder/corgi + organ_names = /decl/mob_organ_names/corgi /mob/living/simple_mob/animal/passive/dog/corgi/puppy name = "corgi puppy" @@ -275,4 +276,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 10f7ddc2cf9..2d0c0b638ef 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 2e6eb9940ca..1a3d98b772c 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 f7bec21beb1..c8935093a44 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 5b67a8604ca..0c2eb934aa1 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 7bb9db0b061..076c19a0661 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 301edc38727..e713433cff4 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 38e20ff4803..b6a14697727 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 8ad7f2b8c97..489c464b7ad 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 f70ea218c31..fcc31b644b3 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 2dcb5b8b518..5662026f45e 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." @@ -78,4 +80,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) + 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") 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 64aa7fbadc6..dabb9a206ec 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 @@ -106,3 +108,6 @@ ai_holder_type = /datum/ai_holder/simple_mob/passive makes_dirt = 0 faction = "neutral" + +/decl/mob_organ_names/shantak + hit_zones = list("head", "torso", "left foreleg", "right foreleg", "left hind leg", "right hind leg", "tail", "mane", "snout") 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 dbf9b481592..a775c315f9e 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 52b8e369a9b..f5a18eb16aa 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 43d159a9f0d..9f028ed56d6 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 aef54e599d3..ca5ab5e962e 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 752211812d7..31ffb6ef1db 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 fa48f57ecf2..4d4fda0c298 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 @@ -151,3 +153,6 @@ if(helpers) to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s.")) return damage_to_do + +/decl/mob_organ_names/spore + hit_zones = list("sporangium", "stolon", "sporangiophore") 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 b6f95206989..1fd1ebf2b4d 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 6e17e2e1a07..a52bd28c302 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 d26353ada30..6c1be004724 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 @@ -107,3 +109,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 ece32ca7a4b..22af8baaa4f 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 5c9fe28c2f1..10d195f281d 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 @@ -151,3 +153,6 @@ /mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A) casting = FALSE ranged_post_animation(A) + +/decl/mob_organ_names/golem + hit_zones = list("helmet", "cuirass", "left tasset", "right tasset", "left gauntlet", "right gauntlet", "weapon") 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 667c514f0b9..b1494bc268e 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 09bf26f05da..077cf1ebacb 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 243a67e4f56..dcfdc5b2c19 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 7f4e10f05dd..6b30eccab01 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 eea54e72121..c575922be52 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 @@ -39,5 +41,8 @@ ion_trail.start() return ..() -/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) - return TRUE \ No newline at end of file +/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0) + 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") 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 c3c18ecaf29..e43caff8c34 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, @@ -139,3 +141,6 @@ severity++ // This somewhat misleadingly makes it less severe. deflect_sprite() ..(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") 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 87e8b4223e9..02ba4adf94f 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 0e897599ac4..e1b1bb80fd9 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 69d0da02519..b0c4f869bb7 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 a161548d993..2ad33eeb610 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 = TRUE 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 2898eecf45a..94737e4b676 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 1a56abcdcd6..f20d02b5c78 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 0b8f69c7a9c..f4b1f7b9e03 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 fe385ee60b7..9151ea6e2ed 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 d65c9527b27..0ee4daf4330 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 79e5c4d3494..76753e8da60 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 404a209c60c..052fdaa196c 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 f210835b183..7eff7a4da82 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 @@ -241,4 +243,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 6c5bbd9ef07..9fc3ffcd3c9 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -671,17 +671,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