diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index a9d9bda00c..964c4e911e 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -65,9 +65,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isslimeperson(A) (is_species(A, /datum/species/jelly/slime))
#define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent))
#define iszombie(A) (is_species(A, /datum/species/zombie))
-#define ismoth(A) (is_species(A, /datum/species/insect))
#define ishumanbasic(A) (is_species(A, /datum/species/human))
-#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) )
+#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid))
#define isdwarf(A) (is_species(A, /datum/species/dwarf))
#define isdullahan(A) (is_species(A, /datum/species/dullahan))
#define isangel(A) (is_species(A, /datum/species/angel))
@@ -80,8 +79,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isipcperson(A) (is_species(A, /datum/species/ipc))
#define issynthliz(A) (is_species(A, /datum/species/synthliz))
#define ismammal(A) (is_species(A, /datum/species/mammal))
-#define isavian(A) (is_species(A, /datum/species/avian))
-#define isaquatic(A) (is_species(A, /datum/species/aquatic))
#define isinsect(A) (is_species(A, /datum/species/insect))
#define isxenoperson(A) (is_species(A, /datum/species/xeno))
#define isstartjelly(A) (is_species(A, /datum/species/jelly/roundstartslime))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index d5a3c3abee..c2f8595ae7 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -85,7 +85,7 @@
tastes = list("dust" = 1, "lint" = 1)
/obj/item/clothing/attack(mob/M, mob/user, def_zone)
- if(user.a_intent != INTENT_HARM && ismoth(M))
+ if(user.a_intent != INTENT_HARM && isinsect(M))
var/obj/item/reagent_containers/food/snacks/clothing/clothing_as_food = new
clothing_as_food.name = name
if(clothing_as_food.attack(M, user, def_zone))
diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 8d8049194b..c1a17b87a4 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -920,75 +920,75 @@
/datum/chemical_reaction/coldscales
name = "Cold Scales"
- id = /datum/reagent/consumable/ethanol/coldscales
- results = list(/datum/reagent/consumable/ethanol/coldscales = 3)
+ id = /datum/reagent/consumable/ethanol/species_drink/coldscales
+ results = list(/datum/reagent/consumable/ethanol/species_drink/coldscales = 3)
required_reagents = list(/datum/reagent/consumable/tea = 1, /datum/reagent/toxin/slimejelly = 1, /datum/reagent/consumable/menthol = 1)
/datum/chemical_reaction/oil_drum
name = "Oil Drum"
- id = /datum/reagent/consumable/ethanol/oil_drum
- results = list(/datum/reagent/consumable/ethanol/oil_drum = 3)
+ id = /datum/reagent/consumable/ethanol/species_drink/oil_drum
+ results = list(/datum/reagent/consumable/ethanol/species_drink/oil_drum = 3)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/oil = 1, /datum/reagent/consumable/ethanol/champagne = 12)
/datum/chemical_reaction/nord_king
name = "Nord King"
- id = /datum/reagent/consumable/ethanol/nord_king
- results = list(/datum/reagent/consumable/ethanol/nord_king = 10)
+ id = /datum/reagent/consumable/ethanol/species_drink/nord_king
+ results = list(/datum/reagent/consumable/ethanol/species_drink/nord_king = 10)
required_reagents = list(/datum/reagent/consumable/ethanol = 5, /datum/reagent/consumable/honey = 1, /datum/reagent/consumable/ethanol/red_mead = 10)
/datum/chemical_reaction/velvet_kiss
name = "Velvet Kiss"
- id = /datum/reagent/consumable/ethanol/velvet_kiss
- results = list(/datum/reagent/consumable/ethanol/velvet_kiss = 15) //Limited races use this
+ id = /datum/reagent/consumable/ethanol/species_drink/velvet_kiss
+ results = list(/datum/reagent/consumable/ethanol/species_drink/velvet_kiss = 15) //Limited races use this
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/consumable/tea = 1, /datum/reagent/consumable/ethanol/wine = 10)
/datum/chemical_reaction/abduction_fruit
name = "Abduction Fruit"
- id = /datum/reagent/consumable/ethanol/abduction_fruit
- results = list(/datum/reagent/consumable/ethanol/abduction_fruit = 3)
+ id = /datum/reagent/consumable/ethanol/species_drink/abduction_fruit
+ results = list(/datum/reagent/consumable/ethanol/species_drink/abduction_fruit = 3)
required_reagents = list(/datum/reagent/consumable/limejuice = 10, /datum/reagent/consumable/strawberryjuice = 5, /datum/reagent/consumable/watermelonjuice = 10)
/datum/chemical_reaction/bug_zapper
name = "Bug Zapper"
- id = /datum/reagent/consumable/ethanol/bug_zapper
- results = list(/datum/reagent/consumable/ethanol/bug_zapper = 20) //Harder to make
+ id = /datum/reagent/consumable/ethanol/species_drink/bug_zapper
+ results = list(/datum/reagent/consumable/ethanol/species_drink/bug_zapper = 20) //Harder to make
required_reagents = list(/datum/reagent/consumable/lemonjuice = 10, /datum/reagent/teslium = 1, /datum/reagent/copper = 10)
/datum/chemical_reaction/mush_crush
name = "Mush Crush"
- id = /datum/reagent/consumable/ethanol/mush_crush
- results = list(/datum/reagent/consumable/ethanol/mush_crush = 10)
+ id = /datum/reagent/consumable/ethanol/species_drink/mush_crush
+ results = list(/datum/reagent/consumable/ethanol/species_drink/mush_crush = 10)
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/ash = 5, /datum/reagent/toxin/coffeepowder = 10)
/datum/chemical_reaction/darkbrew
name = "Darkbrew"
- id = /datum/reagent/consumable/ethanol/darkbrew
- results = list(/datum/reagent/consumable/ethanol/darkbrew = 20)//Limited races use this
+ id = /datum/reagent/consumable/ethanol/species_drink/darkbrew
+ results = list(/datum/reagent/consumable/ethanol/species_drink/darkbrew = 20)//Limited races use this
required_reagents = list(/datum/reagent/liquid_dark_matter = 5, /datum/reagent/toxin/bungotoxin = 5, /datum/reagent/toxin/coffeepowder = 10)
/datum/chemical_reaction/hollow_bone
name = "Hollow Bone"
- id = /datum/reagent/consumable/ethanol/hollow_bone
- results = list(/datum/reagent/consumable/ethanol/hollow_bone = 10)
+ id = /datum/reagent/consumable/ethanol/species_drink/hollow_bone
+ results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10)
required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10)
/datum/chemical_reaction/frisky_kitty
name = "Frisky Kitty"
- id = /datum/reagent/consumable/ethanol/frisky_kitty
- results = list(/datum/reagent/consumable/ethanol/frisky_kitty = 2)
+ id = /datum/reagent/consumable/ethanol/species_drink/frisky_kitty
+ results = list(/datum/reagent/consumable/ethanol/species_drink/frisky_kitty = 2)
required_reagents = list(/datum/reagent/consumable/catnip_tea = 1, /datum/reagent/consumable/milk = 1)
required_temp = 296 //Just above room temp (22.85'C)
/datum/chemical_reaction/jell_wyrm
name = "Jell Wyrm"
- id = /datum/reagent/consumable/ethanol/jell_wyrm
- results = list(/datum/reagent/consumable/ethanol/jell_wyrm = 2)
+ id = /datum/reagent/consumable/ethanol/species_drink/jell_wyrm
+ results = list(/datum/reagent/consumable/ethanol/species_drink/jell_wyrm = 2)
required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/toxin/carpotoxin = 1, /datum/reagent/carbondioxide = 5)
required_temp = 333 // (59.85'C)
/datum/chemical_reaction/laval_spit
name = "Laval Spit"
- id = /datum/reagent/consumable/ethanol/laval_spit
- results = list(/datum/reagent/consumable/ethanol/laval_spit = 20) //Limited use
+ id = /datum/reagent/consumable/ethanol/species_drink/laval_spit
+ results = list(/datum/reagent/consumable/ethanol/species_drink/laval_spit = 20) //Limited use
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/ethanol/mauna_loa = 10, /datum/reagent/sulfur = 5)
required_temp = 900 // (626.85'C)
diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm
index 24eb5d7234..96517d5ea2 100644
--- a/code/modules/mob/living/carbon/human/dummy.dm
+++ b/code/modules/mob/living/carbon/human/dummy.dm
@@ -4,6 +4,10 @@
status_flags = GODMODE|CANPUSH
mouse_drag_pointer = MOUSE_INACTIVE_POINTER
var/in_use = FALSE
+ vore_flags = NO_VORE
+
+/mob/living/carbon/human/vore
+ vore_flags = DEVOURABLE | DIGESTABLE | FEEDING
INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index ba6fde421d..470def1954 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -105,6 +105,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
var/icon_limbs //Overrides the icon used for the limbs of this species. Mainly for downstream, and also because hardcoded icons disgust me. Implemented and maintained as a favor in return for a downstream's implementation of synths.
+ var/species_type
+
+ var/tail_type //type of tail i.e. mam_tail
+ var/wagging_type //type of wagging i.e. waggingtail_lizard
/// Our default override for typing indicator state
var/typing_indicator_state
@@ -1061,7 +1065,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
H.adjustBruteLoss(1)
/datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H)
- return
+ if(H)
+ stop_wagging_tail(H)
/datum/species/proc/auto_equip(mob/living/carbon/human/H)
// handles the equipping of species-specific gear
@@ -2225,12 +2230,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/datum/species/proc/ExtinguishMob(mob/living/carbon/human/H)
return
-
////////////
//Stun//
////////////
/datum/species/proc/spec_stun(mob/living/carbon/human/H,amount)
+ if(H)
+ stop_wagging_tail(H)
+
. = stunmod * H.physiology.stun_mod * amount
//////////////
@@ -2248,11 +2255,29 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
////////////////
/datum/species/proc/can_wag_tail(mob/living/carbon/human/H)
- return FALSE
+ if(!tail_type || !wagging_type)
+ return FALSE
+ else
+ return mutant_bodyparts[tail_type] || mutant_bodyparts[wagging_type]
/datum/species/proc/is_wagging_tail(mob/living/carbon/human/H)
- return FALSE
+ return mutant_bodyparts["waggingtail_lizard"]
/datum/species/proc/start_wagging_tail(mob/living/carbon/human/H)
+ if(tail_type && wagging_type)
+ if(mutant_bodyparts[tail_type])
+ mutant_bodyparts[wagging_type] = mutant_bodyparts[tail_type]
+ mutant_bodyparts -= tail_type
+ if(mutant_bodyparts["spines"] || mutant_bodyparts["waggingspines"]) //special lizard thing
+ mutant_bodyparts["waggingspines"] = mutant_bodyparts["spines"]
+ mutant_bodyparts -= "spines"
+ H.update_body()
/datum/species/proc/stop_wagging_tail(mob/living/carbon/human/H)
+ if(tail_type && wagging_type)
+ mutant_bodyparts[tail_type] = mutant_bodyparts[wagging_type]
+ mutant_bodyparts -= wagging_type
+ if(mutant_bodyparts["spines"] || mutant_bodyparts["waggingspines"]) //special lizard thing
+ mutant_bodyparts["spines"] = mutant_bodyparts["waggingspines"]
+ mutant_bodyparts -= "waggingspines"
+ H.update_body()
diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm
index 409781efb2..1e77775efa 100644
--- a/code/modules/mob/living/carbon/human/species_types/abductors.dm
+++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm
@@ -6,6 +6,7 @@
species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL,CAN_SCAR)
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
mutanttongue = /obj/item/organ/tongue/abductor
+ species_type = "alien"
/datum/species/abductor/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index 94f64ceacb..c5b57b82ab 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -11,6 +11,7 @@
mutanttongue = /obj/item/organ/tongue/robot
species_language_holder = /datum/language_holder/synthetic
limbs_id = "synth"
+ species_type = "robotic"
/datum/species/android/on_species_gain(mob/living/carbon/C)
. = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm
index 2d43c9964e..d6860e1249 100644
--- a/code/modules/mob/living/carbon/human/species_types/angel.dm
+++ b/code/modules/mob/living/carbon/human/species_types/angel.dm
@@ -9,6 +9,7 @@
blacklisted = 1
limbs_id = "human"
skinned_type = /obj/item/stack/sheet/animalhide/human
+ species_type = "human" //they're a kind of human
var/datum/action/innate/flight/fly
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
index a51dadb523..25fb51aa87 100644
--- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -17,32 +17,6 @@
exotic_bloodtype = "BUG"
exotic_blood_color = BLOOD_COLOR_BUG
-/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/insect/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/insect/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_tail"] || mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/insect/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/insect/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_tail"])
- mutant_bodyparts["mam_waggingtail"] = mutant_bodyparts["mam_tail"]
- mutant_bodyparts -= "mam_tail"
- H.update_body()
-
-/datum/species/insect/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_waggingtail"])
- mutant_bodyparts["mam_tail"] = mutant_bodyparts["mam_waggingtail"]
- mutant_bodyparts -= "mam_waggingtail"
- H.update_body()
-
-/datum/species/insect/qualifies_for_rank(rank, list/features)
- return TRUE
+ tail_type = "mam_tail"
+ wagging_type = "mam_waggingtail"
+ species_type = "insect"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm
index e062e1cbf7..a2597ed286 100644
--- a/code/modules/mob/living/carbon/human/species_types/corporate.dm
+++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm
@@ -17,4 +17,5 @@
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER)
sexes = 0
- gib_types = /obj/effect/gibspawner/robot
\ No newline at end of file
+ gib_types = /obj/effect/gibspawner/robot
+ species_type = "robotic"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index 4e5aa57b0a..dcd81c90b9 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -14,6 +14,7 @@
limbs_id = "human"
skinned_type = /obj/item/stack/sheet/animalhide/human
has_field_of_vision = FALSE //Too much of a trouble, their vision is already bound to their severed head.
+ species_type = "undead"
var/pumpkin = FALSE
var/obj/item/dullahan_relay/myhead
diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm
index 009dba7707..8eb0e0181c 100644
--- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm
@@ -18,6 +18,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) //
mutant_organs = list(/obj/item/organ/dwarfgland) //Dwarven alcohol gland, literal gland warrior
mutantliver = /obj/item/organ/liver/dwarf //Dwarven super liver (Otherwise they r doomed)
species_language_holder = /datum/language_holder/dwarf
+ species_type = "human" //a kind of human
/mob/living/carbon/human/species/dwarf //species admin spawn path
race = /datum/species/dwarf //and the race the path is set to.
diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm
index 2f0595e2c0..b760fd0aee 100644
--- a/code/modules/mob/living/carbon/human/species_types/felinid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm
@@ -9,37 +9,9 @@
mutantears = /obj/item/organ/ears/cat
mutanttail = /obj/item/organ/tail/cat
-/datum/species/human/felinid/qualifies_for_rank(rank, list/features)
- return TRUE
-
-//Curiosity killed the cat's wagging tail.
-/datum/species/human/felinid/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/human/felinid/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-
-/datum/species/human/felinid/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_tail"] || mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/human/felinid/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/human/felinid/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_tail"])
- mutant_bodyparts["mam_waggingtail"] = mutant_bodyparts["mam_tail"]
- mutant_bodyparts -= "mam_tail"
- H.update_body()
-
-/datum/species/human/felinid/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_waggingtail"])
- mutant_bodyparts["mam_tail"] = mutant_bodyparts["mam_waggingtail"]
- mutant_bodyparts -= "mam_waggingtail"
- H.update_body()
+ tail_type = "mam_tail"
+ wagging_type = "mam_waggingtail"
+ species_type = "furry"
/datum/species/human/felinid/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load)
if(ishuman(C))
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index c3ec8b42ea..b99c3e2bc2 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -12,6 +12,7 @@
liked_food = GROSS
exotic_bloodtype = "BUG"
exotic_blood_color = BLOOD_COLOR_BUG
+ species_type = "insect"
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(istype(chem, /datum/reagent/toxin/pestkiller))
diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index d87b0c074c..18359f415f 100644
--- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -14,67 +14,6 @@
liked_food = MEAT | FRIED
disliked_food = TOXIC
-//Curiosity killed the cat's wagging tail.
-/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/mammal/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/mammal/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_tail"] || mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/mammal/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/mammal/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_tail"])
- mutant_bodyparts["mam_waggingtail"] = mutant_bodyparts["mam_tail"]
- mutant_bodyparts -= "mam_tail"
- H.update_body()
-
-/datum/species/mammal/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_waggingtail"])
- mutant_bodyparts["mam_tail"] = mutant_bodyparts["mam_waggingtail"]
- mutant_bodyparts -= "mam_waggingtail"
- H.update_body()
-
-
-/datum/species/mammal/qualifies_for_rank(rank, list/features)
- return TRUE
-
-
-//Alien//
-/datum/species/xeno
- // A cloning mistake, crossing human and xenomorph DNA
- name = "Xenomorph Hybrid"
- id = "xeno"
- say_mod = "hisses"
- default_color = "00FF00"
- icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR)
- mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")
- attack_verb = "slash"
- attack_sound = 'sound/weapons/slash.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
- gib_types = list(/obj/effect/gibspawner/xeno/xenoperson, /obj/effect/gibspawner/xeno/xenoperson/bodypartless)
- skinned_type = /obj/item/stack/sheet/animalhide/xeno
- exotic_bloodtype = "X*"
- damage_overlay_type = "xeno"
- liked_food = MEAT
-
-//Praise the Omnissiah, A challange worthy of my skills - HS
-
-//EXOTIC//
-//These races will likely include lots of downsides and upsides. Keep them relatively balanced.//
-
-//misc
-/mob/living/carbon/human/dummy
- vore_flags = NO_VORE
-
-/mob/living/carbon/human/vore
- vore_flags = DEVOURABLE | DIGESTABLE | FEEDING
+ tail_type = "mam_tail"
+ wagging_type = "mam_waggingtail"
+ species_type = "furry"
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 7100caf178..438eaf1eea 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -32,6 +32,8 @@
var/special_name_chance = 5
var/owner //dobby is a free golem
+ species_type = "golem"
+
/datum/species/golem/random_name(gender,unique,lastname)
var/golem_surname = pick(GLOB.golem_names)
// 3% chance that our golem has a human surname, because
diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm
index b164fb1ba0..e93a5106c9 100644
--- a/code/modules/mob/living/carbon/human/species_types/humans.dm
+++ b/code/modules/mob/living/carbon/human/species_types/humans.dm
@@ -10,8 +10,9 @@
disliked_food = GROSS | RAW
liked_food = JUNKFOOD | FRIED
-/datum/species/human/qualifies_for_rank(rank, list/features)
- return TRUE //Pure humans are always allowed in all roles.
+ tail_type = "tail_human"
+ wagging_type = "waggingtail_human"
+ species_type = "human"
/datum/species/human/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
@@ -21,21 +22,3 @@
if(H)
stop_wagging_tail(H)
. = ..()
-
-/datum/species/human/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["tail_human"] || mutant_bodyparts["waggingtail_human"]
-
-/datum/species/human/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["waggingtail_human"]
-
-/datum/species/human/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["tail_human"])
- mutant_bodyparts["waggingtail_human"] = mutant_bodyparts["tail_human"]
- mutant_bodyparts -= "tail_human"
- H.update_body()
-
-/datum/species/human/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["waggingtail_human"])
- mutant_bodyparts["tail_human"] = mutant_bodyparts["waggingtail_human"]
- mutant_bodyparts -= "waggingtail_human"
- H.update_body()
diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm
index 96efaebd74..b5862b2bd2 100644
--- a/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -21,6 +21,7 @@
exotic_bloodtype = "HF"
exotic_blood_color = BLOOD_COLOR_OIL
+ species_type = "robotic"
var/datum/action/innate/monitor_change/screen
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index e97db7aced..dc821c11ef 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -25,6 +25,10 @@
species_language_holder = /datum/language_holder/jelly
mutant_brain = /obj/item/organ/brain/jelly
+ tail_type = "mam_tail"
+ wagging_type = "mam_waggingtail"
+ species_type = "jelly"
+
/obj/item/organ/brain/jelly
name = "slime nucleus"
desc = "A slimey membranous mass from a slime person"
@@ -128,33 +132,6 @@
return
to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!")
-/datum/species/jelly/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/jelly/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/jelly/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_tail"] || mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/jelly/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/jelly/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_tail"])
- mutant_bodyparts["mam_waggingtail"] = mutant_bodyparts["mam_tail"]
- mutant_bodyparts -= "mam_tail"
- H.update_body()
-
-/datum/species/jelly/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_waggingtail"])
- mutant_bodyparts["mam_tail"] = mutant_bodyparts["mam_waggingtail"]
- mutant_bodyparts -= "mam_waggingtail"
- H.update_body()
-
////////////////////////////////////////////////////////SLIMEPEOPLE///////////////////////////////////////////////////////////////////
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index a424969175..7bcf6c89f4 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -27,6 +27,10 @@
inert_mutation = FIREBREATH
species_language_holder = /datum/language_holder/lizard
+ tail_type = "tail_lizard"
+ wagging_type = "waggingtail_lizard"
+ species_type = "lizard"
+
/datum/species/lizard/random_name(gender,unique,lastname)
if(unique)
return random_unique_lizard_name(gender)
@@ -38,41 +42,6 @@
return randname
-/datum/species/lizard/qualifies_for_rank(rank, list/features)
- return TRUE
-
-//I wag in death
-/datum/species/lizard/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/lizard/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/lizard/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["tail_lizard"] || mutant_bodyparts["waggingtail_lizard"]
-
-/datum/species/lizard/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["waggingtail_lizard"]
-
-/datum/species/lizard/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["tail_lizard"])
- mutant_bodyparts["waggingtail_lizard"] = mutant_bodyparts["tail_lizard"]
- mutant_bodyparts["waggingspines"] = mutant_bodyparts["spines"]
- mutant_bodyparts -= "tail_lizard"
- mutant_bodyparts -= "spines"
- H.update_body()
-
-/datum/species/lizard/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["waggingtail_lizard"])
- mutant_bodyparts["tail_lizard"] = mutant_bodyparts["waggingtail_lizard"]
- mutant_bodyparts["spines"] = mutant_bodyparts["waggingspines"]
- mutant_bodyparts -= "waggingtail_lizard"
- mutant_bodyparts -= "waggingspines"
- H.update_body()
-
/*
Lizard subspecies: ASHWALKERS
*/
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index 8e8c65b15e..4cb5442bf8 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -21,6 +21,8 @@
burnmod = 1.25
heatmod = 1.5
+ species_type = "plant"
+
mutanteyes = /obj/item/organ/eyes/night_vision/mushroom
var/datum/martial_art/mushpunch/mush
species_language_holder = /datum/language_holder/mushroom
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 91d3135ae1..5008fb13cd 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -22,6 +22,8 @@
liked_food = VEGETABLES
outfit_important_for_life = /datum/outfit/plasmaman
+ species_type = "skeleton"
+
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
var/datum/gas_mixture/environment = H.loc.return_air()
var/atmos_sealed = FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index 4806d4a6a1..706995d611 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -19,6 +19,8 @@
var/light_burnheal = -1
var/light_bruteheal = -1
+ species_type = "plant"
+
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
C.faction |= "plants"
@@ -71,29 +73,5 @@
light_burnheal = -0.2
light_toxheal = -0.7
-/datum/species/pod/pseudo_weak/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/pod/pseudo_weak/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/pod/pseudo_weak/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_tail"] || mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/pod/pseudo_weak/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/pod/pseudo_weak/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_tail"])
- mutant_bodyparts["mam_waggingtail"] = mutant_bodyparts["mam_tail"]
- mutant_bodyparts -= "mam_tail"
- H.update_body()
-
-/datum/species/pod/pseudo_weak/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_waggingtail"])
- mutant_bodyparts["mam_tail"] = mutant_bodyparts["mam_waggingtail"]
- mutant_bodyparts -= "mam_waggingtail"
- H.update_body()
+ tail_type = "mam_tail"
+ wagging_type = "mam_waggingtail"
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 2776c6d919..9f7d165edf 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -15,6 +15,8 @@
dangerous_existence = 1
mutanteyes = /obj/item/organ/eyes/night_vision
+ species_type = "shadow"
+
/datum/species/shadow/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
C.AddElement(/datum/element/photosynthesis, 1, 1, 0, 0, 0, 0, SHADOW_SPECIES_LIGHT_THRESHOLD, SHADOW_SPECIES_LIGHT_THRESHOLD)
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 78efddf70d..54d56fea06 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -15,6 +15,8 @@
brutemod = 1.25
burnmod = 1.25
+ species_type = "skeleton" //they have their own category that's disassociated from undead, paired with plasmapeople
+
/datum/species/skeleton/New()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) //skeletons are stronger during the spooky season!
inherent_traits |= list(TRAIT_RESISTHEAT,TRAIT_RESISTCOLD)
diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm
index af2e83ee0f..41b3d3a96a 100644
--- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm
@@ -20,33 +20,6 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
-/datum/species/synthliz/qualifies_for_rank(rank, list/features)
- return TRUE
-
-//I wag in death
-/datum/species/synthliz/spec_death(gibbed, mob/living/carbon/human/H)
- if(H)
- stop_wagging_tail(H)
-
-/datum/species/synthliz/spec_stun(mob/living/carbon/human/H,amount)
- if(H)
- stop_wagging_tail(H)
- . = ..()
-
-/datum/species/synthliz/can_wag_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_tail"] || mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/synthliz/is_wagging_tail(mob/living/carbon/human/H)
- return mutant_bodyparts["mam_waggingtail"]
-
-/datum/species/synthliz/start_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_tail"])
- mutant_bodyparts["mam_waggingtail"] = mutant_bodyparts["mam_tail"]
- mutant_bodyparts -= "mam_tail"
- H.update_body()
-
-/datum/species/synthliz/stop_wagging_tail(mob/living/carbon/human/H)
- if(mutant_bodyparts["mam_waggingtail"])
- mutant_bodyparts["mam_tail"] = mutant_bodyparts["mam_waggingtail"]
- mutant_bodyparts -= "mam_waggingtail"
- H.update_body()
+ tail_type = "mam_tail"
+ wagging_type = "mam_waggingtail"
+ species_type = "robotic"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 85f1fbf386..a1a2a33c54 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -17,6 +17,7 @@
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
species_language_holder = /datum/language_holder/synthetic
+ species_type = "robotic"
/datum/species/synth/military
name = "Military Synth"
@@ -43,7 +44,6 @@
return TRUE
return ..()
-
/datum/species/synth/proc/assume_disguise(datum/species/S, mob/living/carbon/human/H)
if(S && !istype(S, type))
name = S.name
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 9c9220132c..d8fc06b716 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -14,6 +14,7 @@
limbs_id = "human"
skinned_type = /obj/item/stack/sheet/animalhide/human
var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
+ species_type = "undead"
/datum/species/vampire/check_roundstart_eligible()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm
new file mode 100644
index 0000000000..db34d1ae45
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm
@@ -0,0 +1,19 @@
+/datum/species/xeno
+ // A cloning mistake, crossing human and xenomorph DNA
+ name = "Xenomorph Hybrid"
+ id = "xeno"
+ say_mod = "hisses"
+ default_color = "00FF00"
+ icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
+ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR)
+ mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")
+ attack_verb = "slash"
+ attack_sound = 'sound/weapons/slash.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
+ gib_types = list(/obj/effect/gibspawner/xeno/xenoperson, /obj/effect/gibspawner/xeno/xenoperson/bodypartless)
+ skinned_type = /obj/item/stack/sheet/animalhide/xeno
+ exotic_bloodtype = "X*"
+ damage_overlay_type = "xeno"
+ liked_food = MEAT
+ species_type = "alien"
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index ab0838c873..990e2c9db3 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -15,6 +15,7 @@
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
disliked_food = NONE
liked_food = GROSS | MEAT | RAW
+ species_type = "undead"
/datum/species/zombie/notspaceproof
id = "notspaceproofzombie"
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 7d0a701e8f..a5de3a2fdc 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -226,7 +226,7 @@
'sound/voice/catpeople/nyahehe.ogg'),
50, 1)
return
- else if(ismoth(C))
+ else if(isinsect(C))
playsound(C, 'sound/voice/moth/mothlaugh.ogg', 50, 1)
else if(ishumanbasic(C))
if(user.gender == FEMALE)
@@ -244,7 +244,7 @@
. = ..()
if(. && iscarbon(user)) //Citadel Edit because this is hilarious
var/mob/living/carbon/C = user
- if(ismoth(C))
+ if(isinsect(C))
playsound(C, 'sound/voice/moth/mothchitter.ogg', 50, 1)
/datum/emote/living/look
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 385a82baa5..4034759c72 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1962,12 +1962,12 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M)
//Bugs should not drink Bug spray.
- if(ismoth(M) || isflyperson(M))
+ if(isinsect(M) || isflyperson(M))
M.adjustToxLoss(1,0)
return ..()
/datum/reagent/consumable/ethanol/bug_spray/on_mob_add(mob/living/carbon/M)
- if(ismoth(M) || isflyperson(M))
+ if(isinsect(M) || isflyperson(M))
M.emote("scream")
return ..()
@@ -2270,25 +2270,29 @@ All effects don't start immediately, but rather get worse over time; the rate is
////////////////////
//Race-Base-Drinks//
////////////////////
+/datum/reagent/consumable/ethanol/species_drink
+ var/species_required
+ var/disgust = 25
+ boozepwr = 50
-/datum/reagent/consumable/ethanol/coldscales
+/datum/reagent/consumable/ethanol/species_drink/on_mob_life(mob/living/carbon/C)
+ if(C.dna.species && C.dna.species.species_type == species_required) //species have a species_type variable that refers to one of the drinks
+ quality = RACE_DRINK
+ else
+ C.adjust_disgust(disgust)
+
+/datum/reagent/consumable/ethanol/species_drink/coldscales
name = "Coldscales"
color = "#5AEB52" //(90, 235, 82)
description = "A cold looking drink made for people with scales."
- boozepwr = 50 //strong!
taste_description = "dead flies"
glass_icon_state = "coldscales"
glass_name = "glass of Coldscales"
glass_desc = "A soft green drink that looks inviting!"
-/datum/reagent/consumable/ethanol/coldscales/on_mob_life(mob/living/carbon/M)
- if(islizard(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "lizard"
-/datum/reagent/consumable/ethanol/oil_drum
+/datum/reagent/consumable/ethanol/species_drink/oil_drum
name = "Oil Drum"
color = "#000000" //(0, 0, 0)
description = "Industrial grade oil mixed with some ethanol to make it a drink. Somehow not known to be toxic."
@@ -2298,31 +2302,20 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Drum of oil"
glass_desc = "A gray can of booze and oil..."
-/datum/reagent/consumable/ethanol/oil_drum/on_mob_life(mob/living/carbon/M)
- if(isipcperson(M) || issynthliz(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "robot"
-/datum/reagent/consumable/ethanol/nord_king
+/datum/reagent/consumable/ethanol/species_drink/nord_king
name = "Nord King"
color = "#EB1010" //(235, 16, 16)
description = "Strong mead mixed with more honey and ethanol. Beloved by its human patrons."
- boozepwr = 50 //strong!
taste_description = "honey and red wine"
glass_icon_state = "nord_king"
glass_name = "Keg of Nord King"
glass_desc = "A dripping keg of red mead."
-/datum/reagent/consumable/ethanol/nord_king/on_mob_life(mob/living/carbon/M)
- if(ishumanbasic(M) || isdwarf(M) || isangel(M)) //Humans and angel races are rare
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "basic"
-/datum/reagent/consumable/ethanol/velvet_kiss
+/datum/reagent/consumable/ethanol/species_drink/velvet_kiss
name = "Velvet Kiss"
color = "#EB1010" //(235, 16, 16)
description = "A bloody drink mixed with wine."
@@ -2332,14 +2325,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Velvet Kiss"
glass_desc = "Red and white drink for the upper classes or undead."
-/datum/reagent/consumable/ethanol/velvet_kiss/on_mob_life(mob/living/carbon/M)
- if(iszombie(M) || isvampire(M) || isdullahan(M)) //Rare races!
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "undead"
-/datum/reagent/consumable/ethanol/abduction_fruit
+/datum/reagent/consumable/ethanol/species_drink/abduction_fruit
name = "Abduction Fruit"
color = "#DEFACD" //(222, 250, 205)
description = "Mixing of juices to make an alien taste."
@@ -2349,14 +2337,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Abduction Fruit"
glass_desc = "Mixed fruits that were never meant to be mixed..."
-/datum/reagent/consumable/ethanol/abduction_fruit/on_mob_life(mob/living/carbon/M)
- if(isabductor(M) || isxenoperson(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "alien"
-/datum/reagent/consumable/ethanol/bug_zapper
+/datum/reagent/consumable/ethanol/species_drink/bug_zapper
name = "Bug Zapper"
color = "#F5882A" //(222, 250, 205)
description = "Copper and lemon juice. Hardly even a drink."
@@ -2366,14 +2349,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Bug Zapper"
glass_desc = "An odd mix of copper, lemon juice and power meant for non-human consumption."
-/datum/reagent/consumable/ethanol/bug_zapper/on_mob_life(mob/living/carbon/M)
- if(isinsect(M) || isflyperson(M) || ismoth(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "bug"
-/datum/reagent/consumable/ethanol/mush_crush
+/datum/reagent/consumable/ethanol/species_drink/mush_crush
name = "Mush Crush"
color = "#F5882A" //(222, 250, 205)
description = "Soil in a glass."
@@ -2383,14 +2361,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Mush Crush"
glass_desc = "Popular among people that want to grow their own food rather than drink the soil."
-/datum/reagent/consumable/ethanol/mush_crush/on_mob_life(mob/living/carbon/M)
- if(ispodperson(M) || ismush(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "plant"
-/datum/reagent/consumable/ethanol/darkbrew
+/datum/reagent/consumable/ethanol/species_drink/darkbrew
name = "Darkbrew"
color = "#000000" //(0, 0, 0)
description = "Contained dark matter mixed with coffee."
@@ -2400,31 +2373,21 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Darkbrew"
glass_desc = "A pitch black drink that's commonly confused with a type of coffee."
-/datum/reagent/consumable/ethanol/darkbrew/on_mob_life(mob/living/carbon/M)
- if(isshadow(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "shadow"
-/datum/reagent/consumable/ethanol/hollow_bone
+/datum/reagent/consumable/ethanol/species_drink/hollow_bone
name = "Hollow Bone"
color = "#FCF7D4" //(252, 247, 212)
- description = "Shockingly none-harmful mix of toxins and milk."
+ description = "Shockingly non-harmful mix of toxins and milk."
boozepwr = 15
taste_description = "Milk and salt"
glass_icon_state = "hollow_bone"
glass_name = "skull of Hollow Bone"
- glass_desc = "Mixing of milk and bone hurting juice for enjoyment for rather skinny people."
+ glass_desc = "Mixing of milk and bone hurting juice for the enjoyment of rather skinny people."
-/datum/reagent/consumable/ethanol/hollow_bone/on_mob_life(mob/living/carbon/M)
- if(isplasmaman(M) || isskeleton(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "skeleton"
-/datum/reagent/consumable/ethanol/frisky_kitty
+/datum/reagent/consumable/ethanol/species_drink/frisky_kitty
name = "Frisky Kitty"
color = "#FCF7D4" //(252, 247, 212)
description = "Warm milk mixed with a catnip."
@@ -2434,14 +2397,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "cup of Drisky Kitty"
glass_desc = "Warm milk and some catnip."
-/datum/reagent/consumable/ethanol/frisky_kitty/on_mob_life(mob/living/carbon/M)
- if(ismammal(M) || iscatperson(M)) //well its not to bad for mammals
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "furry"
-/datum/reagent/consumable/ethanol/jell_wyrm
+/datum/reagent/consumable/ethanol/species_drink/jell_wyrm
name = "Jell Wyrm"
color = "#FF6200" //(255, 98, 0)
description = "Horrible mix of Co2, toxins and heat. Meant for slime based life."
@@ -2451,15 +2409,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Jell Wyrm"
glass_desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for."
-/datum/reagent/consumable/ethanol/jell_wyrm/on_mob_life(mob/living/carbon/M)
- if(isjellyperson(M) || isstartjelly(M) || isslimeperson(M) || isluminescent(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- M.adjustToxLoss(1, 0) //Low tox due to being carp + jell toxins.
- return ..()
+ species_required = "jelly"
-/datum/reagent/consumable/ethanol/laval_spit //Yes Laval
+/datum/reagent/consumable/ethanol/species_drink/laval_spit //Yes Laval
name = "Laval Spit"
color = "#DE3009" //(222, 48, 9)
description = "Heat minerals and some mauna loa. Meant for rock based life."
@@ -2469,15 +2421,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "glass of Laval Spit"
glass_desc = "Piping hot drink for those who can stomach the heat of lava."
-/datum/reagent/consumable/ethanol/laval_spit/on_mob_life(mob/living/carbon/M)
- if(isgolem(M))
- quality = RACE_DRINK
- else
- M.adjust_disgust(25)
- return ..()
+ species_required = "golem"
///////////////
-//Barrle Wine//
+//Barrel Wine//
///////////////
/datum/reagent/consumable/ethanol/fruit_wine
diff --git a/tgstation.dme b/tgstation.dme
index 6b3bf6eb88..75914f9d66 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2492,6 +2492,7 @@
#include "code\modules\mob\living\carbon\human\species_types\synthliz.dm"
#include "code\modules\mob\living\carbon\human\species_types\synths.dm"
#include "code\modules\mob\living\carbon\human\species_types\vampire.dm"
+#include "code\modules\mob\living\carbon\human\species_types\xeno.dm"
#include "code\modules\mob\living\carbon\human\species_types\zombies.dm"
#include "code\modules\mob\living\carbon\monkey\combat.dm"
#include "code\modules\mob\living\carbon\monkey\death.dm"