Adds unique projectile hit messages to simplemobs (#8250)

* Adds unique hit messages to simplemobs

* decl'd hit lists

* how was that even working

* set decl ref on init
This commit is contained in:
Cerebulon
2021-10-11 04:20:18 +01:00
committed by GitHub
parent 11ed1a07ce
commit cebc5fa3a1
54 changed files with 295 additions and 34 deletions
@@ -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.
@@ -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")
@@ -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")
@@ -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")
@@ -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")
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")
@@ -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")
@@ -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"
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")
@@ -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")
@@ -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
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")
@@ -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")
@@ -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")
@@ -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")
@@ -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"
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.
@@ -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
@@ -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")
@@ -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
@@ -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")
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")
@@ -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
@@ -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")
@@ -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")
@@ -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")
@@ -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
)
)
/decl/mob_organ_names/pillbug
hit_zones = list("cephalon", "pereon", "pleon", "left forelegs", "right forelegs", "left hind legs", "right hind legs")
@@ -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 <b>berserk at will</b>, 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")
@@ -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")
@@ -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
@@ -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
@@ -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)
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")
@@ -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.
@@ -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")
@@ -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
return damage_to_do
/decl/mob_organ_names/spore
hit_zones = list("sporangium", "stolon", "sporangiophore")
@@ -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")
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")
@@ -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
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!
@@ -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")
@@ -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")
@@ -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)
ranged_post_animation(A)
/decl/mob_organ_names/golem
hit_zones = list("helmet", "cuirass", "left tasset", "right tasset", "left gauntlet", "right gauntlet", "weapon")
@@ -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.
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")
@@ -118,6 +118,8 @@
icon_state = "red"
icon_living = "red"
organ_names = /decl/mob_organ_names/hivebotsiege
player_msg = "You are capable of firing <b>very long range bombardment attacks</b>.<br>\
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.<br>\
@@ -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
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")
@@ -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")
@@ -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")
@@ -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
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")
@@ -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)
..(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")
@@ -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")
@@ -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 ..()
return ..()
/decl/mob_organ_names/ward
hit_zones = list("chassis", "sensor array", "hover thruster")
@@ -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
)
)
/decl/mob_organ_names/artificer
hit_zones = list("body", "carapace", "right manipulator", "left manipulator", "upper left appendage", "upper right appendage", "eye")
@@ -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
)
)
/decl/mob_organ_names/harvester
hit_zones = list("cephalothorax", "eye", "carapace", "energy crystal", "mandible")
@@ -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))
return (..(P))
/decl/mob_organ_names/juggernaut
hit_zones = list("body", "left pauldron", "right pauldron", "left arm", "right arm", "eye", "head", "crystaline spike")
@@ -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
return
/decl/mob_organ_names/shade
hit_zones = list("spectral robe", "featureless visage", "haunting glow")
@@ -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)
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")
@@ -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
melee_damage_upper = 25
/decl/mob_organ_names/abberation
hit_zones = list("fleshy mass", "maw", "eye(?)", "orifice(?)")
@@ -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
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")
@@ -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")
@@ -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)
qdel(src)
/decl/mob_organ_names/tree
hit_zones = list("trunk", "branches", "twigs")
@@ -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("<b>\The [src]</b> squishes!")
visible_message("<b>\The [src]</b> squishes!")
/decl/mob_organ_names/slime
hit_zones = list("cytoplasmic membrane")
+9 -3
View File
@@ -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