From 07d505b33bba9b7eeb0c36f0a178e7a41f41ee7c Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Thu, 25 Feb 2021 10:55:55 -0500 Subject: [PATCH] Ports Biotypes (#15471) * Ports Biotypes * styling * converts a species trait * comment --- code/__DEFINES/genetics.dm | 1 - code/__DEFINES/mobs.dm | 13 +++++ code/game/gamemodes/blob/blobs/blob_mobs.dm | 1 + .../gamemodes/miniantags/abduction/gland.dm | 2 + .../gamemodes/miniantags/bot_swarm/swarmer.dm | 1 + .../gamemodes/miniantags/guardian/guardian.dm | 1 + .../gamemodes/miniantags/revenant/revenant.dm | 1 + .../miniantags/slaughter/slaughter.dm | 1 + .../mob/living/carbon/human/human_defines.dm | 1 + .../living/carbon/human/species/_species.dm | 4 ++ .../mob/living/carbon/human/species/diona.dm | 2 +- .../mob/living/carbon/human/species/golem.dm | 3 +- .../mob/living/carbon/human/species/kidan.dm | 1 + .../living/carbon/human/species/machine.dm | 1 + .../living/carbon/human/species/plasmaman.dm | 1 + .../living/carbon/human/species/skeleton.dm | 1 + .../mob/living/carbon/human/species/unathi.dm | 1 + code/modules/mob/living/living_defines.dm | 2 + code/modules/mob/living/silicon/silicon.dm | 1 + .../mob/living/simple_animal/bot/bot.dm | 1 + .../mob/living/simple_animal/constructs.dm | 1 + .../simple_animal/friendly/butterfly.dm | 1 + .../simple_animal/friendly/cockroach.dm | 1 + .../mob/living/simple_animal/friendly/deer.dm | 1 + .../living/simple_animal/friendly/diona.dm | 1 + .../simple_animal/friendly/farm_animals.dm | 9 ++++ .../living/simple_animal/friendly/lizard.dm | 1 + .../living/simple_animal/friendly/mouse.dm | 1 + .../mob/living/simple_animal/friendly/pet.dm | 1 + .../living/simple_animal/friendly/snake.dm | 1 + .../simple_animal/friendly/spiderbot.dm | 1 + .../mob/living/simple_animal/hostile/bat.dm | 1 + .../mob/living/simple_animal/hostile/bear.dm | 1 + .../mob/living/simple_animal/hostile/bees.dm | 1 + .../mob/living/simple_animal/hostile/carp.dm | 1 + .../simple_animal/hostile/deathsquid.dm | 1 + .../living/simple_animal/hostile/faithless.dm | 1 + .../living/simple_animal/hostile/feral_cat.dm | 1 + .../simple_animal/hostile/floorcluwne.dm | 1 + .../simple_animal/hostile/giant_spider.dm | 1 + .../living/simple_animal/hostile/hellhound.dm | 1 + .../living/simple_animal/hostile/hivebot.dm | 1 + .../living/simple_animal/hostile/illusion.dm | 1 + .../simple_animal/hostile/jungle_animals.dm | 1 + .../simple_animal/hostile/killertomato.dm | 1 + .../hostile/megafauna/blood_drunk_miner.dm | 1 + .../hostile/megafauna/megafauna.dm | 1 + .../hostile/megafauna/swarmer.dm | 1 + .../mob/living/simple_animal/hostile/mimic.dm | 2 + .../simple_animal/hostile/mining/basilisk.dm | 1 + .../simple_animal/hostile/mining/goldgrub.dm | 1 + .../simple_animal/hostile/mining/goliath.dm | 1 + .../simple_animal/hostile/mining/gutlunch.dm | 1 + .../simple_animal/hostile/mining/hivelord.dm | 2 + .../living/simple_animal/hostile/mushroom.dm | 1 + .../living/simple_animal/hostile/pirate.dm | 1 + .../simple_animal/hostile/retaliate/clown.dm | 2 + .../simple_animal/hostile/retaliate/drone.dm | 1 + .../simple_animal/hostile/retaliate/fish.dm | 1 + .../hostile/retaliate/kangaroo.dm | 1 + .../simple_animal/hostile/retaliate/pet.dm | 3 +- .../simple_animal/hostile/retaliate/undead.dm | 3 ++ .../living/simple_animal/hostile/russian.dm | 1 + .../living/simple_animal/hostile/skeleton.dm | 1 + .../living/simple_animal/hostile/statue.dm | 1 + .../living/simple_animal/hostile/syndicate.dm | 2 + .../hostile/terror_spiders/terror_spiders.dm | 2 + .../mob/living/simple_animal/hostile/tree.dm | 1 + .../simple_animal/hostile/venus_human_trap.dm | 1 + .../mob/living/simple_animal/parrot.dm | 1 + .../living/simple_animal/posessed_object.dm | 1 + .../modules/mob/living/simple_animal/shade.dm | 1 + code/modules/projectiles/guns/magic/wand.dm | 24 +++++++--- code/modules/projectiles/projectile/magic.dm | 48 +++++++++++-------- .../reagents/chemistry/reagents/toxins.dm | 47 +++++++++--------- 75 files changed, 175 insertions(+), 53 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 6f5aaaf2b93..157fa1c30b9 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -81,4 +81,3 @@ #define NO_INTORGANS "no_internal_organs" #define CAN_WINGDINGS "can_wingdings" #define NO_CLONESCAN "no_clone_scan" -#define IS_PLANT "is_plant" // Convert this to a biotype TODO diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 9c8a197d84f..52ea8a174f9 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -13,6 +13,19 @@ #define DROPLIMB_BLUNT 1 #define DROPLIMB_BURN 2 +//Mob bio-types flags +#define MOB_ORGANIC (1 << 0) +#define MOB_MINERAL (1 << 1) +#define MOB_ROBOTIC (1 << 2) +#define MOB_UNDEAD (1 << 3) +#define MOB_HUMANOID (1 << 4) +#define MOB_BUG (1 << 5) +#define MOB_BEAST (1 << 6) // Not meant for human species, generally +#define MOB_EPIC (1 << 7) //megafauna +#define MOB_REPTILE (1 << 8) +#define MOB_SPIRIT (1 << 9) +#define MOB_PLANT (1 << 10) + #define AGE_MIN 17 //youngest a character can be #define AGE_MAX 85 //oldest a character can be diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index a842778d76e..963a56f9cbd 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -92,6 +92,7 @@ health = maxHealth name = "blob zombie" desc = "A shambling corpse animated by the blob." + mob_biotypes |= MOB_HUMANOID melee_damage_lower = 10 melee_damage_upper = 15 icon = H.icon diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index e9a218b240b..e49d6ad545e 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -113,6 +113,8 @@ mind_control_duration = 3000 /obj/item/organ/internal/heart/gland/heals/activate() + if(!(owner.mob_biotypes & MOB_ORGANIC)) + return to_chat(owner, "You feel curiously revitalized.") owner.adjustToxLoss(-20) owner.adjustBruteLoss(-20) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index c2d92ee8ec7..6c6388e5e70 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -60,6 +60,7 @@ desc = "Robotic constructs of unknown design, swarmers seek only to consume materials and replicate themselves indefinitely." speak_emote = list("tones") bubble_icon = "swarmer" + mob_biotypes = MOB_ROBOTIC health = 40 maxHealth = 40 status_flags = CANPUSH diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 7ae70286755..b0194c53f33 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -12,6 +12,7 @@ icon_living = "magicOrange" icon_dead = "magicOrange" speed = 0 + mob_biotypes = NONE a_intent = INTENT_HARM can_change_intents = 0 stop_automated_movement = 1 diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index f76ddbd64dd..fb46533b817 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -15,6 +15,7 @@ var/icon_reveal = "revenant_revealed" var/icon_stun = "revenant_stun" var/icon_drain = "revenant_draining" + mob_biotypes = MOB_SPIRIT incorporeal_move = 3 see_invisible = INVISIBILITY_REVENANT invisibility = INVISIBILITY_REVENANT diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 507e63cb873..b488e0a826c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -15,6 +15,7 @@ icon_living = "daemon" speed = 1 a_intent = INTENT_HARM + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/misc/demon_attack1.ogg' diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 4cd2d1847d9..d5c76b1dd97 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -2,6 +2,7 @@ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,GLAND_HUD) pressure_resistance = 25 + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID //Marking colour and style var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000. var/list/m_styles = DEFAULT_MARKING_STYLES //All markings set to None. diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index bb721aba59b..179351afb97 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -83,6 +83,8 @@ var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs var/remains_type = /obj/effect/decal/remains/human //What sort of remains is left behind when the species dusts var/base_color //Used when setting species. + /// bitfield of biotypes the mob belongs to. + var/inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID var/list/inherent_factions //Used in icon caching. @@ -285,6 +287,8 @@ H.hud_used.update_locked_slots() H.ventcrawler = ventcrawler + H.mob_biotypes = inherent_biotypes + for(var/X in inherent_traits) ADD_TRAIT(H, X, SPECIES_TRAIT) diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index 4fffa6907a1..bd3e85bf645 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -20,8 +20,8 @@ even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ water and other radiation." - species_traits = list(IS_PLANT) inherent_traits = list(TRAIT_NOGERMS, TRAIT_NODECAY) + inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT clothing_flags = HAS_SOCKS default_hair_colour = "#000000" has_gender = FALSE diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index f48f39b044c..b83b2e95a5f 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -6,6 +6,7 @@ species_traits = list(NO_BLOOD) inherent_traits = list(TRAIT_RESISTHEAT, TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_NOFIRE, TRAIT_CHUNKYFINGERS, TRAIT_RADIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_NOPAIN) + inherent_biotypes = MOB_HUMANOID | MOB_MINERAL dies_at_threshold = TRUE speed_mod = 2 brute_mod = 0.45 //55% damage reduction @@ -313,9 +314,9 @@ name = "Wood Golem" golem_colour = rgb(158, 112, 75) skinned_type = /obj/item/stack/sheet/wood - species_traits = list(NO_BLOOD, IS_PLANT) // Refactor into biotype //Can burn and take damage from heat inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_CHUNKYFINGERS, TRAIT_RADIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_NOPAIN) + inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT brute_mod = 0.7 //30% damage reduction down from 55% burn_mod = 0.875 tox_mod = 0.7 diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index c60e1855841..68ccfbb37a4 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -10,6 +10,7 @@ tox_mod = 1.7 species_traits = list(IS_WHITELISTED) + inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_BUG clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS eyes = "kidan_eyes_s" diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm index b329c268b5f..8dfae64dcee 100644 --- a/code/modules/mob/living/carbon/human/species/machine.dm +++ b/code/modules/mob/living/carbon/human/species/machine.dm @@ -23,6 +23,7 @@ species_traits = list(IS_WHITELISTED, NO_BLOOD, NO_CLONESCAN, NO_INTORGANS, NOTRANSSTING) inherent_traits = list(TRAIT_VIRUSIMMUNE, TRAIT_NOBREATH, TRAIT_RADIMMUNE, TRAIT_NOGERMS, TRAIT_NODECAY, TRAIT_NOPAIN, TRAIT_GENELESS) //Computers that don't decay? What a lie! + inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY | ALL_RPARTS dietflags = 0 //IPCs can't eat, so no diet diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index a99aaff7104..69f28131aa0 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -7,6 +7,7 @@ species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING) inherent_traits = list(TRAIT_RADIMMUNE, TRAIT_NOHUNGER) + inherent_biotypes = MOB_HUMANOID | MOB_MINERAL forced_heartattack = TRUE // Plasmamen have no blood, but they should still get heart-attacks skinned_type = /obj/item/stack/sheet/mineral/plasma // We're low on plasma, R&D! *eyes plasmaman co-worker intently* dietflags = DIET_OMNI diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index 10ae52768eb..b86c450f7e9 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -11,6 +11,7 @@ species_traits = list(NO_BLOOD) inherent_traits = list(TRAIT_RESISTHEAT, TRAIT_NOBREATH, TRAIT_RESISTCOLD, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_RADIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_NOHUNGER, TRAIT_XENO_IMMUNE) + inherent_biotypes = MOB_UNDEAD | MOB_HUMANOID tox_mod = 0 clone_mod = 0 dies_at_threshold = TRUE diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index e1b05d3e0d0..fa829f43f68 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -15,6 +15,7 @@ their native tongue is a heavy hissing laungage called Sinta'Unathi." species_traits = list(LIPS) + inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_REPTILE clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_BODY_MARKINGS | HAS_HEAD_MARKINGS | HAS_SKIN_COLOR | HAS_ALT_HEADS | TAIL_WAGGING dietflags = DIET_CARN diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 49c4dbfca63..7f0754f9d4c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -35,6 +35,8 @@ var/floating = FALSE var/mob_size = MOB_SIZE_HUMAN + // What type of mob is this + var/mob_biotypes = MOB_ORGANIC var/metabolism_efficiency = 1 //more or less efficiency to metabolize helpful/harmful reagents and regulate body temperature.. var/digestion_ratio = 1 //controls how quickly reagents metabolize; largely governered by species attributes. diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index afaa2f21e57..4730f854391 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -5,6 +5,7 @@ bubble_icon = "machine" has_unlimited_silicon_privilege = 1 weather_immunities = list("ash") + mob_biotypes = MOB_ROBOTIC flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 var/syndicate = 0 var/const/MAIN_CHANNEL = "Main Frequency" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 094a35372c1..f9a7b412ad3 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -4,6 +4,7 @@ /mob/living/simple_animal/bot icon = 'icons/obj/aibots.dmi' layer = MOB_LAYER - 0.1 + mob_biotypes = MOB_ROBOTIC light_range = 3 stop_automated_movement = 1 wander = 0 diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index bafed690f1a..f1df2fb8ed7 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/hostile/construct name = "Construct" real_name = "Construct" + mob_biotypes = NONE speak_emote = list("hisses") emote_hear = list("wails","screeches") response_help = "thinks better of touching" diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index ebf068ff130..336f0ce42d2 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -19,6 +19,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = 2 mob_size = MOB_SIZE_TINY + mob_biotypes = MOB_ORGANIC | MOB_BUG butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 0) gold_core_spawnable = FRIENDLY_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 0722cf7c602..e90a2f6fdc5 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -10,6 +10,7 @@ minbodytemp = 270 maxbodytemp = INFINITY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_biotypes = MOB_ORGANIC | MOB_BUG mob_size = MOB_SIZE_TINY response_help = "pokes" response_disarm = "shoos" diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm index a10ec1b7b35..3a17387d0a9 100644 --- a/code/modules/mob/living/simple_animal/friendly/deer.dm +++ b/code/modules/mob/living/simple_animal/friendly/deer.dm @@ -15,4 +15,5 @@ response_disarm = "gently pushes aside" response_harm = "kicks" can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST gold_core_spawnable = FRIENDLY_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index 7d6f90b7d0d..1c5053e20b9 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -11,6 +11,7 @@ icon_dead = "nymph_dead" icon_resting = "nymph_sleep" pass_flags = PASSTABLE | PASSMOB + mob_biotypes = MOB_ORGANIC | MOB_PLANT mob_size = MOB_SIZE_SMALL ventcrawler = 2 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index f2e9743ff2d..b958c6a74d2 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -17,6 +17,7 @@ response_disarm = "gently pushes aside" response_harm = "kicks" faction = list("neutral") + mob_biotypes = MOB_ORGANIC | MOB_BEAST attack_same = 1 attacktext = "kicks" attack_sound = 'sound/weapons/punch1.ogg' @@ -132,6 +133,7 @@ blood_volume = BLOOD_VOLUME_NORMAL var/obj/item/udder/udder = null gender = FEMALE + mob_biotypes = MOB_ORGANIC | MOB_BEAST /mob/living/simple_animal/cow/Initialize() udder = new() @@ -178,6 +180,7 @@ icon_dead = "chick_dead" icon_gib = "chick_gib" gender = FEMALE + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") speak_emote = list("cheeps") emote_hear = list("cheeps") @@ -222,6 +225,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) name = "\improper chicken" desc = "Hopefully the eggs are good this season." gender = FEMALE + mob_biotypes = MOB_ORGANIC | MOB_BEAST icon_state = "chicken_brown" icon_living = "chicken_brown" icon_dead = "chicken_brown_dead" @@ -333,6 +337,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) health = 50 maxHealth = 50 can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL @@ -357,6 +362,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) health = 50 maxHealth = 50 can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/goose @@ -380,6 +386,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) health = 50 maxHealth = 50 can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/seal @@ -403,6 +410,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) health = 50 maxHealth = 50 can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL @@ -427,6 +435,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) health = 50 maxHealth = 50 can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 566791786f6..5db493be1f7 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -22,6 +22,7 @@ can_hide = 1 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) can_collar = 1 + mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/lizard/decompile_act(obj/item/matter_decompiler/C, mob/user) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 043d145ba64..a4ed83aa4fe 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -23,6 +23,7 @@ density = 0 ventcrawler = 2 pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_biotypes = MOB_ORGANIC | MOB_BEAST mob_size = MOB_SIZE_TINY var/mouse_color //brown, gray and white, leave blank for random layer = MOB_LAYER diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index ac4f3367002..53be2df8892 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/pet icon = 'icons/mob/pets.dmi' mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC | MOB_BEAST blood_volume = BLOOD_VOLUME_NORMAL can_collar = TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm index b4a15ba27b4..fe4fa0db6cd 100644 --- a/code/modules/mob/living/simple_animal/friendly/snake.dm +++ b/code/modules/mob/living/simple_animal/friendly/snake.dm @@ -29,6 +29,7 @@ ventcrawler = VENTCRAWLER_ALWAYS density = FALSE pass_flags = PASSTABLE | PASSMOB + mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE mob_size = MOB_SIZE_SMALL gold_core_spawnable = FRIENDLY_SPAWN obj_damage = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 877d542fa2b..14d2f201e98 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -21,6 +21,7 @@ response_disarm = "shoos" response_harm = "stomps on" speed = 0 + mob_biotypes = MOB_ROBOTIC mob_size = MOB_SIZE_SMALL speak_emote = list("beeps","clicks","chirps") diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index b47b0eb1f23..4e25a6708c4 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -6,6 +6,7 @@ icon_living = "bat" icon_dead = "bat_dead" icon_gib = "bat_dead" + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 3 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index d5b7205f09c..e154b1b2cfd 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -6,6 +6,7 @@ icon_living = "bear" icon_dead = "bear_dead" icon_gib = "bear_gib" + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak = list("RAWR!","Rawr!","GRR!","Growl!") speak_emote = list("growls", "roars") emote_hear = list("rawrs","grumbles","grawls") diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 3419279ffe5..ac245258c7b 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -35,6 +35,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB density = FALSE mob_size = MOB_SIZE_TINY + mob_biotypes = MOB_ORGANIC | MOB_BUG flying = TRUE gold_core_spawnable = HOSTILE_SPAWN search_objects = TRUE //have to find those plant trays! diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 7b0b52f0b4f..ec1baeb0bdf 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -8,6 +8,7 @@ icon_living = "base" icon_dead = "base_dead" icon_gib = "carp_gib" + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 5 butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2) diff --git a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm index 69f5257d4dd..2cfa2877400 100644 --- a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm +++ b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/hostile/deathsquid name = "death squid" desc = "A large, floating eldritch horror. Its body glows with an evil red light, and its tentacles look to have been dipped in alien blood." + mob_biotypes = MOB_ORGANIC | MOB_BEAST speed = 1 speak_emote = list("telepathically thunders", "telepathically booms") diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 0ed560f24e9..5ccee07395e 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -4,6 +4,7 @@ icon_state = "faithless" icon_living = "faithless" icon_dead = "faithless_dead" + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID speak_chance = 0 turns_per_move = 5 response_help = "passes through the" diff --git a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm index 4067d552089..b10cd9c761d 100644 --- a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm +++ b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm @@ -6,6 +6,7 @@ icon_living = "cat2" icon_dead = "cat2_dead" gender = MALE + mob_biotypes = MOB_ORGANIC | MOB_BEAST maxHealth = 20 health = 20 melee_damage_lower = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm index 23b9ceb2c6b..90e0aee9593 100644 --- a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm +++ b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm @@ -11,6 +11,7 @@ icon_state = "cursedclown" icon_living = "cursedclown" icon_gib = "clown_gib" + mob_biotypes = NONE maxHealth = 200 health = 200 speed = -1 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 9211a43ae8c..38b37a2a4b3 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -12,6 +12,7 @@ var/butcher_state = 8 // Icon state for dead spider icons icon_living = "guard" icon_dead = "guard_dead" + mob_biotypes = MOB_ORGANIC | MOB_BUG speak_emote = list("chitters") emote_hear = list("chitters") speak_chance = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/hellhound.dm b/code/modules/mob/living/simple_animal/hostile/hellhound.dm index 2ae36d88db0..d99d42e610a 100644 --- a/code/modules/mob/living/simple_animal/hostile/hellhound.dm +++ b/code/modules/mob/living/simple_animal/hostile/hellhound.dm @@ -7,6 +7,7 @@ icon_living = "hellhound" icon_dead = "hellhound_dead" icon_resting = "hellhound_rest" + mob_biotypes = MOB_ORGANIC | MOB_BEAST atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 2b9358214b1..75ca73eb2d5 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -9,6 +9,7 @@ icon_state = "basic" icon_living = "basic" icon_dead = "basic" + mob_biotypes = MOB_ROBOTIC health = 15 maxHealth = 15 melee_damage_lower = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index 79c7e63a341..f225bbe1342 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -5,6 +5,7 @@ icon_state = "static" icon_living = "static" icon_dead = "null" + mob_biotypes = NONE melee_damage_lower = 5 melee_damage_upper = 5 a_intent = INTENT_HARM diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm index 934e1312606..4e6376d3b31 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm @@ -11,6 +11,7 @@ icon_dead = "panther_dead" icon_resting = "panther_rest" icon_gib = "panther_dead" + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 3 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index e2c7d2e1b21..fc4876034ab 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -4,6 +4,7 @@ icon_state = "tomato" icon_living = "tomato" icon_dead = "tomato_dead" + mob_biotypes = MOB_ORGANIC | MOB_PLANT speak_chance = 0 turns_per_move = 5 maxHealth = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 70585b818f5..fb3049cf4d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -28,6 +28,7 @@ Difficulty: Medium icon_state = "miner" icon_living = "miner" icon = 'icons/mob/lavaland/blood_drunk.dmi' + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID light_color = "#E4C7C5" flying = FALSE speak_emote = list("roars") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index e5f499a29ee..f4f011bac85 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -6,6 +6,7 @@ a_intent = INTENT_HARM sentience_type = SENTIENCE_BOSS environment_smash = ENVIRONMENT_SMASH_RWALLS + mob_biotypes = MOB_ORGANIC | MOB_EPIC obj_damage = 400 light_range = 3 faction = list("mining", "boss") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index 77c710359bb..45f8222d335 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -47,6 +47,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa icon_state = "swarmer_console" health = 750 maxHealth = 750 //""""low-ish"""" HP because it's a passive boss, and the swarm itself is the real foe + mob_biotypes = MOB_ROBOTIC internal_type = /obj/item/gps/internal/swarmer_beacon medal_type = BOSS_MEDAL_SWARMERS score_type = SWARMER_BEACON_SCORE diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index fbf65ccfa9b..4f193f5d725 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -12,6 +12,8 @@ maxHealth = 250 health = 250 + mob_biotypes = NONE + harm_intent_damage = 5 melee_damage_lower = 8 melee_damage_upper = 12 diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm index 74eaf55b57c..9f3dc477218 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm @@ -8,6 +8,7 @@ icon_aggro = "Basilisk_alert" icon_dead = "Basilisk_dead" icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC | MOB_BEAST move_to_delay = 20 projectiletype = /obj/item/projectile/temp/basilisk projectilesound = 'sound/weapons/pierce.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm index ea73bfb8840..b1b3c7066b8 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm @@ -8,6 +8,7 @@ icon_aggro = "Goldgrub_alert" icon_dead = "Goldgrub_dead" icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC | MOB_BEAST vision_range = 2 aggro_vision_range = 9 move_to_delay = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index d052dd9bc23..ecf45181bdf 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -8,6 +8,7 @@ icon_aggro = "Goliath_alert" icon_dead = "Goliath_dead" icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC | MOB_BEAST mouse_opacity = MOUSE_OPACITY_ICON move_to_delay = 40 ranged = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm index fb2c741cb30..c5c50177511 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm @@ -6,6 +6,7 @@ icon_state = "gutlunch" icon_living = "gutlunch" icon_dead = "gutlunch" + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_emote = list("warbles", "quavers") emote_hear = list("trills.") emote_see = list("sniffs.", "burps.") diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index f24e979a152..4f526d2e119 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -7,6 +7,7 @@ icon_aggro = "Hivelord_alert" icon_dead = "Hivelord_dead" icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 14 ranged = 1 @@ -160,6 +161,7 @@ icon_aggro = "legion" icon_dead = "legion" icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID mouse_opacity = MOUSE_OPACITY_ICON obj_damage = 60 melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 80d07801b9e..f08d4d32637 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -4,6 +4,7 @@ icon_state = "mushroom_color" icon_living = "mushroom_color" icon_dead = "mushroom_dead" + mob_biotypes = MOB_ORGANIC | MOB_PLANT speak_chance = 0 turns_per_move = 1 maxHealth = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index d8d2d55a8ee..66f475d4863 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -5,6 +5,7 @@ icon_state = "piratemelee" icon_living = "piratemelee" icon_dead = "piratemelee_dead" // Does not actually exist. del_on_death. + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID speak_chance = 0 turns_per_move = 5 response_help = "pushes the" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index f58f7fcfda2..d0dacaf5a88 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -7,6 +7,7 @@ icon_dead = "clown_dead" icon_gib = "clown_gib" speak_chance = 0 + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID turns_per_move = 5 response_help = "pokes the" response_disarm = "gently pushes aside the" @@ -39,6 +40,7 @@ icon_state = "clowngoblin" icon_living = "clowngoblin" icon_dead = null + mob_biotypes = MOB_ORGANIC response_help = "honks the" speak = list("Honk!") speak_emote = list("sqeaks") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 7dfac96a807..223241426f9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -6,6 +6,7 @@ icon_state = "drone3" icon_living = "drone3" icon_dead = "drone_dead" + mob_biotypes = MOB_ROBOTIC ranged = 1 rapid = 3 retreat_distance = 3 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm index ca6987d735c..1b6a54be53e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm @@ -5,6 +5,7 @@ icon = 'icons/mob/carp.dmi' icon_state = "carp" icon_gib = "carp_gib" + mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 5 butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 1) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/kangaroo.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/kangaroo.dm index 0bd75fa4185..00bced469ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/kangaroo.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/kangaroo.dm @@ -7,6 +7,7 @@ icon_living = "kangaroo" icon_dead = "kangaroo_dead" icon_gib = "kangaroo_dead" + mob_biotypes = MOB_ORGANIC | MOB_BEAST turns_per_move = 8 response_help = "pets" emote_hear = list("bark") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm index 6be9725e9aa..136e0df9245 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm @@ -8,6 +8,7 @@ icon_living = "guard" icon_dead = "guard_dead" icon_gib = "guard_dead" + mob_biotypes = MOB_ORGANIC | MOB_BUG turns_per_move = 8 response_help = "pets" emote_hear = list("chitters") @@ -19,4 +20,4 @@ unique_pet = TRUE atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 2, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) gender = FEMALE - + diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 5d946662854..d1170289f45 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -22,6 +22,7 @@ icon_state = "ghost2" icon_living = "ghost2" icon_dead = "ghost" + mob_biotypes = MOB_SPIRIT density = 0 // ghost invisibility = 60 // no seriously ghost speak_chance = 0 // fyi, ghost @@ -69,6 +70,7 @@ icon_state = "skeleton_s" icon_living = "skeleton_s" icon_dead = "skeleton_l" + mob_biotypes = MOB_UNDEAD | MOB_HUMANOID speak_chance = 0 turns_per_move = 10 response_help = "shakes hands with" @@ -97,6 +99,7 @@ icon_state = "zombie_s" icon_living = "zombie_s" icon_dead = "zombie_l" + mob_biotypes = MOB_UNDEAD | MOB_HUMANOID speak_chance = 0 turns_per_move = 10 response_help = "gently prods" diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 83c6fa67e1d..933a2700b8a 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -6,6 +6,7 @@ icon_living = "russianmelee" icon_dead = "russianmelee_dead" // Does not actually exist. del_on_death. icon_gib = "russianmelee_gib" // Does not actually exist. del_on_death. + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID speak_chance = 0 turns_per_move = 5 response_help = "pokes the" diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index e0e71506bbe..58411b6abd2 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -4,6 +4,7 @@ icon = 'icons/mob/simple_human.dmi' icon_state = "skeleton" icon_living = "skeleton" + mob_biotypes = MOB_UNDEAD | MOB_HUMANOID turns_per_move = 5 speak_emote = list("rattles") emote_see = list("rattles") diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 105b9a02819..5ccb43272a8 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -9,6 +9,7 @@ icon_dead = "angel" gender = NEUTER a_intent = INTENT_HARM + mob_biotypes = MOB_HUMANOID response_help = "touches" response_disarm = "pushes" diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index b763144d6fe..4664cdedf16 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -6,6 +6,7 @@ icon_living = "syndicate" icon_dead = "syndicate_dead" // Does not actually exist. del_on_death. icon_gib = "syndicate_gib" // Does not actually exist. del_on_death. + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID speak_chance = 0 turns_per_move = 5 response_help = "pokes the" @@ -350,6 +351,7 @@ icon_living = "viscerator_attack" pass_flags = PASSTABLE | PASSMOB a_intent = INTENT_HARM + mob_biotypes = MOB_ROBOTIC health = 15 maxHealth = 15 obj_damage = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 7b028042951..f028b98ce28 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -25,6 +25,8 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) icon_living = "terror_red" icon_dead = "terror_red_dead" + mob_biotypes = MOB_ORGANIC | MOB_BUG + // Health maxHealth = 120 health = 120 diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 6881e3d7b12..18c2f941f48 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -6,6 +6,7 @@ icon_living = "pine_1" icon_dead = "pine_1" icon_gib = "pine_1" + mob_biotypes = MOB_ORGANIC | MOB_PLANT speak_chance = 0 turns_per_move = 5 response_help = "brushes the" diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index c8e6b8c5d8e..f6827b636a3 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -49,6 +49,7 @@ name = "venus human trap" desc = "Now you know how the fly feels." icon_state = "venus_human_trap" + mob_biotypes = MOB_ORGANIC | MOB_PLANT layer = MOB_LAYER + 0.9 health = 50 maxHealth = 50 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 73a08ef2bfd..f1715ddd314 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -53,6 +53,7 @@ response_harm = "swats" stop_automated_movement = TRUE universal_speak = TRUE + mob_biotypes = MOB_ORGANIC | MOB_BEAST mob_size = MOB_SIZE_SMALL var/parrot_state = PARROT_WANDER //Hunt for a perch when created diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 729790d098c..edeadf742fc 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -1,6 +1,7 @@ /mob/living/simple_animal/possessed_object name = "possessed doodad" var/spirit_name = "mysterious force" // What we call ourselves in attack messages. + mob_biotypes = MOB_SPIRIT health = 50 maxHealth = 50 diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index d150bd4c309..181b40eb397 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -6,6 +6,7 @@ icon_state = "shade" icon_living = "shade" icon_dead = "shade_dead" + mob_biotypes = MOB_SPIRIT maxHealth = 50 health = 50 speak_emote = list("hisses") diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index e69eec1831f..08e7b79ac33 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -66,12 +66,17 @@ max_charges = 3 //3, 2, 2, 1 /obj/item/gun/magic/wand/death/zap_self(mob/living/user) - var/message ="You irradiate yourself with pure energy! " - message += pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?") - to_chat(user, message) - user.adjustFireLoss(3000) - charges-- ..() + charges-- + if(isliving(user)) + if(user.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead + user.revive() + to_chat(user, "You feel great!") + return + to_chat(user, "You irradiate yourself with pure negative energy! [pick("Do not pass go. Do not collect 200 zorkmids.", "You feel more confident in your spell casting skills.", "You Die...", "Do you want your possessions identified?")]") + if(ismachineperson(user)) //speshul snowfleks deserv speshul treetment + user.adjustFireLoss(6969) + user.death(FALSE) ///////////////////////////////////// //WAND OF HEALING @@ -86,10 +91,15 @@ max_charges = 3 //3, 2, 2, 1 /obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user) + ..() + charges-- + if(isliving(user)) + if(user.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead + to_chat(user, "You irradiate yourself with pure positive energy! [pick("Do not pass go. Do not collect 200 zorkmids.", "You feel more confident in your spell casting skills.", "You Die...", "Do you want your possessions identified?")]") + user.death(FALSE) + return user.revive() to_chat(user, "You feel great!") - charges-- - ..() ///////////////////////////////////// //WAND OF POLYMORPH diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index c8090686aa3..3d1f69b62c4 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -25,15 +25,21 @@ var/exp_flash = 3 var/exp_fire = 2 -/obj/item/projectile/magic/death/on_hit(mob/living/carbon/C) +/obj/item/projectile/magic/death/on_hit(mob/living/carbon/target) . = ..() - if(isliving(C)) - if(ismachineperson(C)) //speshul snowfleks deserv speshul treetment - C.adjustFireLoss(6969) //remember - slimes love fire - else - C.death() + if(isliving(target)) + if(target.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead + if(target.revive()) + target.grab_ghost(force = TRUE) // even suicides + to_chat(target, "You rise with a start, you're undead!!!") + else if(target.stat != DEAD) + to_chat(target, "You feel great!") + return + if(ismachineperson(target)) //speshul snowfleks deserv speshul treetment + target.adjustFireLoss(6969) //remember - slimes love fire + target.death(FALSE) - visible_message("[C] topples backwards as the death bolt impacts [C.p_them()]!") + target.visible_message("[target] topples backwards as the death bolt impacts [target.p_them()]!") /obj/item/projectile/magic/fireball/Range() var/turf/T1 = get_step(src,turn(dir, -45)) @@ -73,21 +79,25 @@ name = "bolt of resurrection" icon_state = "ion" -/obj/item/projectile/magic/resurrection/on_hit(var/mob/living/carbon/target) +/obj/item/projectile/magic/resurrection/on_hit(mob/living/carbon/target) . = ..() if(ismob(target)) - var/old_stat = target.stat - target.suiciding = 0 - target.revive() - if(!target.ckey) - for(var/mob/dead/observer/ghost in GLOB.player_list) - if(target.real_name == ghost.real_name) - ghost.reenter_corpse() - break - if(old_stat != DEAD) - to_chat(target, "You feel great!") + if(target.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead + target.death(FALSE) + target.visible_message("[target] topples backwards as the death bolt impacts [target.p_them()]!") else - to_chat(target, "You rise with a start, you're alive!!!") + var/old_stat = target.stat + target.suiciding = FALSE + target.revive() + if(!target.ckey) + for(var/mob/dead/observer/ghost in GLOB.player_list) + if(target.real_name == ghost.real_name) + ghost.reenter_corpse() + break + if(old_stat != DEAD) + to_chat(target, "You feel great!") + else + to_chat(target, "You rise with a start, you're alive!!!") /obj/item/projectile/magic/teleport name = "bolt of teleportation" diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index c7e709cdcaf..739ca3ee97d 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -1040,20 +1040,19 @@ var/obj/structure/spacevine/SV = O SV.on_chem_effect(src) -/datum/reagent/glyphosate/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.wear_mask) // If not wearing a mask - C.adjustToxLoss(lethality) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(IS_PLANT in H.dna.species.species_traits) //plantmen take extra damage - H.adjustToxLoss(3) - ..() - else if(istype(M, /mob/living/simple_animal/diona)) //nymphs take EVEN MORE damage - var/mob/living/simple_animal/diona/D = M - D.adjustHealth(100) - ..() +/datum/reagent/glyphosate/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) + if(isliving(M)) + if(M.mob_biotypes & MOB_PLANT) + var/damage = min(round(0.4 * volume, 0.1), 10) + M.adjustToxLoss(damage) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.wear_mask) // If not wearing a mask + C.adjustToxLoss(lethality) + if(istype(M, /mob/living/simple_animal/diona)) //nymphs take EVEN MORE damage + var/mob/living/simple_animal/diona/D = M + D.adjustHealth(100) + ..() /datum/reagent/glyphosate/atrazine name = "Atrazine" @@ -1081,15 +1080,17 @@ O.visible_message("The ants die.") qdel(O) -/datum/reagent/pestkiller/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.wear_mask) // If not wearing a mask - C.adjustToxLoss(2) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(iskidan(H)) //RIP - H.adjustToxLoss(20) +/datum/reagent/pestkiller/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume) + if(isliving(M)) + if(M.mob_biotypes & MOB_BUG) + var/damage = min(round(0.4 * volume, 0.1), 10) + M.adjustToxLoss(damage) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.wear_mask) // If not wearing a mask + C.adjustToxLoss(2) + if(iskidan(C)) //RIP + C.adjustToxLoss(18) /datum/reagent/capulettium name = "Capulettium"