diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index 3c1f5d47ed8..6a1c242efb4 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -306,93 +306,6 @@ Made by Xhuis
MISCELLANEOUS
*/
-
-/datum/species/shadow/ling
- //Normal shadowpeople but with enhanced effects
- name = "Shadowling"
-
- icobase = 'icons/mob/human_races/r_shadowling.dmi'
- deform = 'icons/mob/human_races/r_shadowling.dmi'
-
- blood_color = "#555555"
- flesh_color = "#222222"
-
- species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NOGUNS, NO_EXAMINE) //Can't use guns due to muzzle flash
- burn_mod = 1.5 //1.5x burn damage, 2x is excessive
- oxy_mod = 0
- heatmod = 1.5
-
- silent_steps = 1
- grant_vision_toggle = 0
-
- has_organ = list(
- "brain" = /obj/item/organ/internal/brain,
- "eyes" = /obj/item/organ/internal/eyes)
-
-/datum/species/shadow/ling/handle_life(var/mob/living/carbon/human/H)
- if(!H.weakeyes)
- H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
- var/light_amount = 0
- H.nutrition = NUTRITION_LEVEL_WELL_FED //i aint never get hongry
- if(isturf(H.loc))
- var/turf/T = H.loc
- light_amount = T.get_lumcount() * 10
- if(light_amount > LIGHT_DAM_THRESHOLD && !H.incorporeal_move) //Can survive in very small light levels. Also doesn't take damage while incorporeal, for shadow walk purposes
- H.throw_alert("lightexposure", /obj/screen/alert/lightexposure)
- H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN)
- if(H.stat != DEAD)
- to_chat(H, "The light burns you!")//Message spam to say "GET THE FUCK OUT"
- H << 'sound/weapons/sear.ogg'
- else if(light_amount < LIGHT_HEAL_THRESHOLD)
- H.clear_alert("lightexposure")
- var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
- if(istype(E))
- E.receive_damage(-1)
- H.heal_overall_damage(5, 5)
- H.adjustToxLoss(-5)
- H.adjustBrainLoss(-25) //Shad O. Ling gibbers, "CAN U BE MY THRALL?!!"
- H.AdjustEyeBlurry(-1)
- H.CureNearsighted()
- H.CureBlind()
- H.adjustCloneLoss(-1)
- H.SetWeakened(0)
- H.SetStunned(0)
- ..()
-
-
-/datum/species/shadow/ling/lesser //Empowered thralls. Obvious, but powerful
- name = "Lesser Shadowling"
-
- icobase = 'icons/mob/human_races/r_lshadowling.dmi'
- deform = 'icons/mob/human_races/r_lshadowling.dmi'
-
- blood_color = "#CCCCCC"
- flesh_color = "#AAAAAA"
-
- species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE)
- burn_mod = 1.1
- oxy_mod = 0
- heatmod = 1.1
-
-/datum/species/shadow/ling/lesser/handle_life(var/mob/living/carbon/human/H)
- if(!H.weakeyes)
- H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
- var/light_amount = 0
- H.nutrition = NUTRITION_LEVEL_WELL_FED //i aint never get hongry
- if(isturf(H.loc))
- var/turf/T = H.loc
- light_amount = T.get_lumcount() * 10
- if(light_amount > LIGHT_DAM_THRESHOLD && !H.incorporeal_move)
- H.throw_alert("lightexposure", /obj/screen/alert/lightexposure)
- H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN/2)
- else if(light_amount < LIGHT_HEAL_THRESHOLD)
- H.clear_alert("lightexposure")
- H.heal_overall_damage(2,2)
- H.adjustToxLoss(-5)
- H.adjustBrainLoss(-25)
- H.adjustCloneLoss(-1)
- ..()
-
/datum/game_mode/proc/update_shadow_icons_added(datum/mind/shadow_mind)
var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW]
shadow_hud.join_hud(shadow_mind.current)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
similarity index 100%
rename from code/modules/mob/living/carbon/human/species/species.dm
rename to code/modules/mob/living/carbon/human/species/_species.dm
diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm
new file mode 100644
index 00000000000..7d7b2acd713
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/diona.dm
@@ -0,0 +1,114 @@
+/datum/species/diona
+ name = "Diona"
+ name_plural = "Dionaea"
+ icobase = 'icons/mob/human_races/r_diona.dmi'
+ deform = 'icons/mob/human_races/r_def_plant.dmi'
+ language = "Rootspeak"
+ speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16]
+ speech_chance = 20
+ unarmed_type = /datum/unarmed_attack/diona
+ //primitive_form = "Nymph"
+ slowdown = 5
+ remains_type = /obj/effect/decal/cleanable/ash
+
+
+ warning_low_pressure = 50
+ hazard_low_pressure = -1
+
+ cold_level_1 = 50
+ cold_level_2 = -1
+ cold_level_3 = -1
+
+ heat_level_1 = 300
+ heat_level_2 = 340
+ heat_level_3 = 400
+
+ blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
+ species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
+ there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
+ Minoris primary being ringed with a cloud of singing space-station-sized entities.
The Dionaea coexist peacefully with \
+ all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
+ 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(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN)
+ clothing_flags = HAS_SOCKS
+ default_hair_colour = "#000000"
+ dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary
+ taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
+ skinned_type = /obj/item/stack/sheet/wood
+
+ oxy_mod = 0
+
+ body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
+ blood_color = "#004400"
+ flesh_color = "#907E4A"
+ butt_sprite = "diona"
+
+ reagent_tag = PROCESS_ORG
+
+ has_organ = list(
+ "nutrient channel" = /obj/item/organ/internal/liver/diona,
+ "neural strata" = /obj/item/organ/internal/heart/diona,
+ "receptor node" = /obj/item/organ/internal/eyes/diona, //Default darksight of 2.
+ "gas bladder" = /obj/item/organ/internal/brain/diona,
+ "polyp segment" = /obj/item/organ/internal/kidneys/diona,
+ "anchoring ligament" = /obj/item/organ/internal/appendix/diona
+ )
+
+ vision_organ = /obj/item/organ/internal/eyes/diona
+ has_limbs = list(
+ "chest" = list("path" = /obj/item/organ/external/chest/diona),
+ "groin" = list("path" = /obj/item/organ/external/groin/diona),
+ "head" = list("path" = /obj/item/organ/external/head/diona),
+ "l_arm" = list("path" = /obj/item/organ/external/arm/diona),
+ "r_arm" = list("path" = /obj/item/organ/external/arm/right/diona),
+ "l_leg" = list("path" = /obj/item/organ/external/leg/diona),
+ "r_leg" = list("path" = /obj/item/organ/external/leg/right/diona),
+ "l_hand" = list("path" = /obj/item/organ/external/hand/diona),
+ "r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
+ "l_foot" = list("path" = /obj/item/organ/external/foot/diona),
+ "r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
+ )
+
+ suicide_messages = list(
+ "is losing branches!",
+ "pulls out a secret stash of herbicide and takes a hearty swig!",
+ "is pulling themselves apart!")
+
+/datum/species/diona/can_understand(var/mob/other)
+ if(istype(other, /mob/living/simple_animal/diona))
+ return 1
+ return 0
+
+/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
+ H.gender = NEUTER
+
+ return ..()
+
+/datum/species/diona/handle_life(var/mob/living/carbon/human/H)
+ H.radiation = Clamp(H.radiation, 0, 100) //We have to clamp this first, then decrease it, or there's a few edge cases of massive heals if we clamp and decrease at the same time.
+ var/rads = H.radiation / 25
+ H.radiation = max(H.radiation-rads, 0)
+ H.nutrition = min(H.nutrition+rads, NUTRITION_LEVEL_WELL_FED+10)
+ H.adjustBruteLoss(-(rads))
+ H.adjustToxLoss(-(rads))
+
+ var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
+ if(isturf(H.loc)) //else, there's considered to be no light
+ var/turf/T = H.loc
+ light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
+ H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
+
+ if(light_amount > 0)
+ H.clear_alert("nolight")
+ else
+ H.throw_alert("nolight", /obj/screen/alert/nolight)
+
+ if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
+
+ H.adjustBruteLoss(-(light_amount/2))
+ H.adjustFireLoss(-(light_amount/4))
+ if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
+ H.take_overall_damage(10,0)
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm
new file mode 100644
index 00000000000..7914c4e7d70
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/drask.dm
@@ -0,0 +1,62 @@
+/datum/species/drask
+ name = "Drask"
+ name_plural = "Drask"
+ icobase = 'icons/mob/human_races/r_drask.dmi'
+ deform = 'icons/mob/human_races/r_drask.dmi'
+ language = "Orluum"
+ eyes = "drask_eyes_s"
+
+ speech_sounds = list('sound/voice/DraskTalk.ogg')
+ speech_chance = 20
+ male_scream_sound = 'sound/voice/DraskTalk2.ogg'
+ female_scream_sound = 'sound/voice/DraskTalk2.ogg'
+ male_cough_sounds = 'sound/voice/DraskCough.ogg'
+ female_cough_sounds = 'sound/voice/DraskCough.ogg'
+ male_sneeze_sound = 'sound/voice/DraskSneeze.ogg'
+ female_sneeze_sound = 'sound/voice/DraskSneeze.ogg'
+
+ burn_mod = 2
+ //exotic_blood = "cryoxadone"
+ body_temperature = 273
+
+ blurb = "Hailing from Hoorlm, planet outside what is usually considered a habitable \
+ orbit, the Drask evolved to live in extreme cold. Their strange bodies seem \
+ to operate better the colder their surroundings are, and can regenerate rapidly \
+ when breathing supercooled gas.
On their homeworld, the Drask live long lives \
+ in their labyrinthine settlements, carved out beneath Hoorlm's icy surface, where the air \
+ is of breathable density."
+
+ suicide_messages = list(
+ "is self-warming with friction!",
+ "is jamming fingers through their big eyes!",
+ "is sucking in warm air!",
+ "is holding their breath!")
+
+ species_traits = list(LIPS, IS_WHITELISTED)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
+ bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS
+ dietflags = DIET_OMNI
+
+ cold_level_1 = -1 //Default 260 - Lower is better
+ cold_level_2 = -1 //Default 200
+ cold_level_3 = -1 //Default 120
+ coldmod = -1
+
+ heat_level_1 = 300 //Default 360 - Higher is better
+ heat_level_2 = 340 //Default 400
+ heat_level_3 = 400 //Default 460
+ heatmod = 2
+
+ flesh_color = "#a3d4eb"
+ reagent_tag = PROCESS_ORG
+ base_color = "#a3d4eb"
+ blood_color = "#a3d4eb"
+ butt_sprite = "drask"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart/drask,
+ "lungs" = /obj/item/organ/internal/lungs/drask,
+ "metabolic strainer" = /obj/item/organ/internal/liver/drask,
+ "eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight.
+ "brain" = /obj/item/organ/internal/brain/drask
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm
new file mode 100644
index 00000000000..ad4239c0d05
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/grey.dm
@@ -0,0 +1,55 @@
+/datum/species/grey
+ name = "Grey"
+ name_plural = "Greys"
+ icobase = 'icons/mob/human_races/r_grey.dmi'
+ deform = 'icons/mob/human_races/r_def_grey.dmi'
+ language = "Psionic Communication"
+ eyes = "grey_eyes_s"
+ butt_sprite = "grey"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs,
+ "liver" = /obj/item/organ/internal/liver/grey,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain/grey,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes/grey //5 darksight.
+ )
+
+ brute_mod = 1.25 //greys are fragile
+
+ default_genes = list(REMOTE_TALK)
+
+
+ species_traits = list(LIPS, IS_WHITELISTED, CAN_BE_FAT)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_BODY_MARKINGS
+ dietflags = DIET_HERB
+ reagent_tag = PROCESS_ORG
+ blood_color = "#A200FF"
+
+/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
+ if(!remove)
+ C.dna.SetSEState(REMOTETALKBLOCK,1,1)
+ genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
+ else
+ C.dna.SetSEState(REMOTETALKBLOCK,0,1)
+ genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
+ ..()
+
+/datum/species/grey/water_act(var/mob/living/carbon/C, volume, temperature, source)
+ ..()
+ C.take_organ_damage(5,min(volume,20))
+ C.emote("scream")
+
+/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
+ var/speech_pref = H.client.prefs.speciesprefs
+ if(speech_pref)
+ H.mind.speech_span = "wingdings"
+
+/datum/species/grey/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
+ if(R.id == "sacid")
+ H.reagents.del_reagent(R.id)
+ return 0
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm
new file mode 100644
index 00000000000..2a161ab9318
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/human.dm
@@ -0,0 +1,20 @@
+/datum/species/human
+ name = "Human"
+ name_plural = "Humans"
+ icobase = 'icons/mob/human_races/r_human.dmi'
+ deform = 'icons/mob/human_races/r_def_human.dmi'
+ primitive_form = /datum/species/monkey
+ language = "Sol Common"
+ species_traits = list(LIPS, CAN_BE_FAT)
+ skinned_type = /obj/item/stack/sheet/animalhide/human
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS
+ dietflags = DIET_OMNI
+ blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
+ colonies across a wide swathe of space. They hold a wide range of forms and creeds.
\
+ While the central Sol government maintains control of its far-flung people, powerful corporate \
+ interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
+ worlds tumultous at best."
+
+ reagent_tag = PROCESS_ORG
+ //Has standard darksight of 2.
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm
new file mode 100644
index 00000000000..583e098054b
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/kidan.dm
@@ -0,0 +1,41 @@
+/datum/species/kidan
+ name = "Kidan"
+ name_plural = "Kidan"
+ icobase = 'icons/mob/human_races/r_kidan.dmi'
+ deform = 'icons/mob/human_races/r_def_kidan.dmi'
+ language = "Chittin"
+ unarmed_type = /datum/unarmed_attack/claws
+
+ brute_mod = 0.8
+
+ species_traits = list(IS_WHITELISTED)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS
+ eyes = "kidan_eyes_s"
+ dietflags = DIET_HERB
+ blood_color = "#FB9800"
+ reagent_tag = PROCESS_ORG
+ //Default styles for created mobs.
+ default_headacc = "Normal Antennae"
+ butt_sprite = "kidan"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs,
+ "liver" = /obj/item/organ/internal/liver/kidan,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
+ "lantern" = /obj/item/organ/internal/lantern
+ )
+
+ allowed_consumed_mobs = list(/mob/living/simple_animal/diona)
+
+ suicide_messages = list(
+ "is attempting to bite their antenna off!",
+ "is jamming their claws into their eye sockets!",
+ "is twisting their own neck!",
+ "is cracking their exoskeleton!",
+ "is stabbing themselves with their mandibles!",
+ "is holding their breath!")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
new file mode 100644
index 00000000000..066677f3104
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -0,0 +1,88 @@
+/datum/species/machine
+ name = "Machine"
+ name_plural = "Machines"
+
+ blurb = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \
+ robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \
+ to corporate operations. IPCs (Integrated Positronic Chassis) are a loose category of self-willed robots with a humanoid form, \
+ generally self-owned after being 'born' into servitude; they are reliable and dedicated workers, albeit more than slightly \
+ inhuman in outlook and perspective."
+
+ icobase = 'icons/mob/human_races/r_machine.dmi'
+ deform = 'icons/mob/human_races/r_machine.dmi'
+ language = "Trinary"
+ remains_type = /obj/effect/decal/remains/robot
+ skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources!
+
+ eyes = "blank_eyes"
+ brute_mod = 2.5 // 100% * 2.5 * 0.6 (robolimbs) ~= 150%
+ burn_mod = 2.5 // So they take 50% extra damage from brute/burn overall.
+ tox_mod = 0
+ clone_mod = 0
+ oxy_mod = 0
+ death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..."
+
+ species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_BLOOD, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NOTRANSSTING)
+ 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
+ taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
+ blood_color = "#1F181F"
+ flesh_color = "#AAAAAA"
+ //Default styles for created mobs.
+ default_hair = "Blue IPC Screen"
+ can_revive_by_healing = 1
+ has_gender = FALSE
+ reagent_tag = PROCESS_SYN
+ male_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
+ female_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
+ male_cough_sounds = list('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
+ female_cough_sounds = list('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
+ male_sneeze_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
+ female_sneeze_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
+ butt_sprite = "machine"
+
+ has_organ = list(
+ "brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain,
+ "cell" = /obj/item/organ/internal/cell,
+ "optics" = /obj/item/organ/internal/eyes/optical_sensor, //Default darksight of 2.
+ "charger" = /obj/item/organ/internal/cyberimp/arm/power_cord
+ )
+
+ vision_organ = /obj/item/organ/internal/eyes/optical_sensor
+ has_limbs = list(
+ "chest" = list("path" = /obj/item/organ/external/chest/ipc),
+ "groin" = list("path" = /obj/item/organ/external/groin/ipc),
+ "head" = list("path" = /obj/item/organ/external/head/ipc),
+ "l_arm" = list("path" = /obj/item/organ/external/arm/ipc),
+ "r_arm" = list("path" = /obj/item/organ/external/arm/right/ipc),
+ "l_leg" = list("path" = /obj/item/organ/external/leg/ipc),
+ "r_leg" = list("path" = /obj/item/organ/external/leg/right/ipc),
+ "l_hand" = list("path" = /obj/item/organ/external/hand/ipc),
+ "r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
+ "l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
+ "r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
+ )
+
+ suicide_messages = list(
+ "is powering down!",
+ "is smashing their own monitor!",
+ "is twisting their own neck!",
+ "is downloading extra RAM!",
+ "is frying their own circuits!",
+ "is blocking their ventilation port!")
+
+ species_abilities = list(
+ /mob/living/carbon/human/proc/change_monitor
+ )
+
+/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
+ var/obj/item/organ/external/head/head_organ = H.get_organ("head")
+ if(!head_organ)
+ return
+ head_organ.h_style = "Bald"
+ head_organ.f_style = "Shaved"
+ spawn(100)
+ if(H)
+ H.update_hair()
+ H.update_fhair()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/nucleation.dm b/code/modules/mob/living/carbon/human/species/nucleation.dm
new file mode 100644
index 00000000000..4fcfae74282
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/nucleation.dm
@@ -0,0 +1,41 @@
+/datum/species/nucleation
+ name = "Nucleation"
+ name_plural = "Nucleations"
+ icobase = 'icons/mob/human_races/r_nucleation.dmi'
+ blurb = "A sub-race of unfortunates who have been exposed to too much supermatter radiation. As a result, \
+ supermatter crystal clusters have begun to grow across their bodies. Research to find a cure for this ailment \
+ has been slow, and so this is a common fate for veteran engineers. The supermatter crystals produce oxygen, \
+ negating the need for the individual to breathe. Their massive change in biology, however, renders most medicines \
+ obselete. Ionizing radiation seems to cause resonance in some of their crystals, which seems to encourage regeneration \
+ and produces a calming effect on the individual. Nucleations are highly stigmatized, and are treated much in the same \
+ way as lepers were back on Earth."
+ language = "Sol Common"
+ burn_mod = 4 // holy shite, poor guys wont survive half a second cooking smores
+ brute_mod = 2 // damn, double wham, double dam
+ oxy_mod = 0
+ species_traits = list(LIPS, IS_WHITELISTED, NO_BREATHE, NO_BLOOD, NO_PAIN, NO_SCAN, RADIMMUNE)
+ dietflags = DIET_OMNI //still human at their core, so they maintain their eating habits and diet
+
+ //Default styles for created mobs.
+ default_hair = "Nucleation Crystals"
+
+ reagent_tag = PROCESS_ORG
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "crystallized brain" = /obj/item/organ/internal/brain/crystal,
+ "eyes" = /obj/item/organ/internal/eyes/luminescent_crystal, //Standard darksight of 2.
+ "strange crystal" = /obj/item/organ/internal/nucleation/strange_crystal
+ )
+ vision_organ = /obj/item/organ/internal/eyes/luminescent_crystal
+
+/datum/species/nucleation/handle_post_spawn(var/mob/living/carbon/human/H)
+ H.light_color = "#1C1C00"
+ H.set_light(2)
+ return ..()
+
+/datum/species/nucleation/handle_death(var/mob/living/carbon/human/H)
+ var/turf/T = get_turf(H)
+ H.visible_message("[H]'s body explodes, leaving behind a pile of microscopic crystals!")
+ explosion(T, 0, 0, 2, 2) // Create a small explosion burst upon death
+// new /obj/item/shard/supermatter( T )
+ qdel(H)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/shadowling.dm b/code/modules/mob/living/carbon/human/species/shadowling.dm
new file mode 100644
index 00000000000..e7d7982a765
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/shadowling.dm
@@ -0,0 +1,85 @@
+/datum/species/shadow/ling
+ //Normal shadowpeople but with enhanced effects
+ name = "Shadowling"
+
+ icobase = 'icons/mob/human_races/r_shadowling.dmi'
+ deform = 'icons/mob/human_races/r_shadowling.dmi'
+
+ blood_color = "#555555"
+ flesh_color = "#222222"
+
+ species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NOGUNS, NO_EXAMINE) //Can't use guns due to muzzle flash
+ burn_mod = 1.5 //1.5x burn damage, 2x is excessive
+ oxy_mod = 0
+ heatmod = 1.5
+
+ silent_steps = 1
+ grant_vision_toggle = 0
+
+ has_organ = list(
+ "brain" = /obj/item/organ/internal/brain,
+ "eyes" = /obj/item/organ/internal/eyes)
+
+/datum/species/shadow/ling/handle_life(var/mob/living/carbon/human/H)
+ if(!H.weakeyes)
+ H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
+ var/light_amount = 0
+ H.nutrition = NUTRITION_LEVEL_WELL_FED //i aint never get hongry
+ if(isturf(H.loc))
+ var/turf/T = H.loc
+ light_amount = T.get_lumcount() * 10
+ if(light_amount > LIGHT_DAM_THRESHOLD && !H.incorporeal_move) //Can survive in very small light levels. Also doesn't take damage while incorporeal, for shadow walk purposes
+ H.throw_alert("lightexposure", /obj/screen/alert/lightexposure)
+ H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN)
+ if(H.stat != DEAD)
+ to_chat(H, "The light burns you!")//Message spam to say "GET THE FUCK OUT"
+ H << 'sound/weapons/sear.ogg'
+ else if(light_amount < LIGHT_HEAL_THRESHOLD)
+ H.clear_alert("lightexposure")
+ var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
+ if(istype(E))
+ E.receive_damage(-1)
+ H.heal_overall_damage(5, 5)
+ H.adjustToxLoss(-5)
+ H.adjustBrainLoss(-25) //Shad O. Ling gibbers, "CAN U BE MY THRALL?!!"
+ H.AdjustEyeBlurry(-1)
+ H.CureNearsighted()
+ H.CureBlind()
+ H.adjustCloneLoss(-1)
+ H.SetWeakened(0)
+ H.SetStunned(0)
+ ..()
+
+
+/datum/species/shadow/ling/lesser //Empowered thralls. Obvious, but powerful
+ name = "Lesser Shadowling"
+
+ icobase = 'icons/mob/human_races/r_lshadowling.dmi'
+ deform = 'icons/mob/human_races/r_lshadowling.dmi'
+
+ blood_color = "#CCCCCC"
+ flesh_color = "#AAAAAA"
+
+ species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE)
+ burn_mod = 1.1
+ oxy_mod = 0
+ heatmod = 1.1
+
+/datum/species/shadow/ling/lesser/handle_life(var/mob/living/carbon/human/H)
+ if(!H.weakeyes)
+ H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs
+ var/light_amount = 0
+ H.nutrition = NUTRITION_LEVEL_WELL_FED //i aint never get hongry
+ if(isturf(H.loc))
+ var/turf/T = H.loc
+ light_amount = T.get_lumcount() * 10
+ if(light_amount > LIGHT_DAM_THRESHOLD && !H.incorporeal_move)
+ H.throw_alert("lightexposure", /obj/screen/alert/lightexposure)
+ H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN/2)
+ else if(light_amount < LIGHT_HEAL_THRESHOLD)
+ H.clear_alert("lightexposure")
+ H.heal_overall_damage(2,2)
+ H.adjustToxLoss(-5)
+ H.adjustBrainLoss(-25)
+ H.adjustCloneLoss(-1)
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/skrell.dm b/code/modules/mob/living/carbon/human/species/skrell.dm
new file mode 100644
index 00000000000..a7c24cd338c
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/skrell.dm
@@ -0,0 +1,46 @@
+/datum/species/skrell
+ name = "Skrell"
+ name_plural = "Skrell"
+ icobase = 'icons/mob/human_races/r_skrell.dmi'
+ deform = 'icons/mob/human_races/r_def_skrell.dmi'
+ language = "Skrellian"
+ primitive_form = /datum/species/monkey/skrell
+
+ blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
+ the royals' or 'Light of the Crown'.
Skrell are a highly advanced and logical race who live under the rule \
+ of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
+ herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
+ the secrets of their empire to their allies."
+
+ species_traits = list(LIPS)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_SKIN_COLOR | HAS_BODY_MARKINGS
+ dietflags = DIET_HERB
+ taste_sensitivity = TASTE_SENSITIVITY_DULL
+ flesh_color = "#8CD7A3"
+ blood_color = "#1D2CBF"
+ base_color = "#38b661" //RGB: 56, 182, 97.
+ default_hair_colour = "#38b661"
+ eyes = "skrell_eyes_s"
+ //Default styles for created mobs.
+ default_hair = "Skrell Male Tentacles"
+ reagent_tag = PROCESS_ORG
+ butt_sprite = "skrell"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs,
+ "liver" = /obj/item/organ/internal/liver/skrell,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
+ "headpocket" = /obj/item/organ/internal/headpocket
+ )
+
+ suicide_messages = list(
+ "is attempting to bite their tongue off!",
+ "is jamming their thumbs into their eye sockets!",
+ "is twisting their own neck!",
+ "makes like a fish and suffocates!",
+ "is strangling themselves with their own tendrils!")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm
new file mode 100644
index 00000000000..77fa54491e0
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/slime.dm
@@ -0,0 +1,200 @@
+/datum/species/slime
+ name = "Slime People"
+ name_plural = "Slime People"
+ language = "Bubblish"
+ icobase = 'icons/mob/human_races/r_slime.dmi'
+ deform = 'icons/mob/human_races/r_slime.dmi'
+ remains_type = /obj/effect/decal/remains/slime
+
+ // More sensitive to the cold
+ cold_level_1 = 280
+ cold_level_2 = 240
+ cold_level_3 = 200
+ coldmod = 3
+
+ oxy_mod = 0
+ brain_mod = 2.5
+
+ male_cough_sounds = list('sound/effects/slime_squish.ogg')
+ female_cough_sounds = list('sound/effects/slime_squish.ogg')
+
+ species_traits = list(LIPS, IS_WHITELISTED, NO_BREATHE, NO_INTORGANS, NO_SCAN)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_SKIN_COLOR | NO_EYES
+ dietflags = DIET_CARN
+ reagent_tag = PROCESS_ORG
+
+ blood_color = "#0064C8"
+ exotic_blood = "water"
+ blood_damage_type = TOX
+
+ butt_sprite = "slime"
+ //Has default darksight of 2.
+
+ has_organ = list(
+ "brain" = /obj/item/organ/internal/brain/slime
+ )
+
+ suicide_messages = list(
+ "is melting into a puddle!",
+ "is ripping out their own core!",
+ "is turning a dull, brown color and melting into a puddle!")
+
+ var/reagent_skin_coloring = FALSE
+
+ var/datum/action/innate/regrow/grow = new()
+
+ species_abilities = list(
+ /mob/living/carbon/human/verb/toggle_recolor_verb,
+ /mob/living/carbon/human/proc/regrow_limbs
+ )
+
+/datum/species/slime/handle_post_spawn(var/mob/living/carbon/human/H)
+ grow.Grant(H)
+ ..()
+
+/datum/action/innate/regrow
+ name = "Regrow limbs"
+ icon_icon = 'icons/effects/effects.dmi'
+ button_icon_state = "greenglow"
+
+/datum/action/innate/regrow/Activate()
+ var/mob/living/carbon/human/user = owner
+ user.regrow_limbs()
+
+
+/datum/species/slime/handle_life(var/mob/living/carbon/human/H)
+//This is allegedly for code "style". Like a plaid sweater?
+#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1
+#define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds
+#define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower.
+ // Slowly shifting to the color of the reagents
+ if(reagent_skin_coloring && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER)
+ var/blood_amount = H.blood_volume
+ var/r_color = mix_color_from_reagents(H.reagents.reagent_list)
+ var/new_body_color = BlendRGB(r_color, H.skin_colour, (blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)/((blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)+(H.reagents.total_volume)))
+ H.skin_colour = new_body_color
+ if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller
+ for(var/organname in H.bodyparts_by_name)
+ var/obj/item/organ/external/E = H.bodyparts_by_name[organname]
+ if(istype(E) && E.dna && istype(E.dna.species, /datum/species/slime))
+ E.sync_colour_to_human(H)
+ H.update_hair(0)
+ H.update_body()
+ ..()
+
+#undef SLIMEPERSON_COLOR_SHIFT_TRIGGER
+#undef SLIMEPERSON_ICON_UPDATE_PERIOD
+#undef SLIMEPERSON_BLOOD_SCALING_FACTOR
+
+/mob/living/carbon/human/proc/toggle_recolor(silent = FALSE)
+ if(!isslimeperson(src))
+ if(!silent)
+ to_chat(src, "You're not a slime person!")
+ return
+
+ var/datum/species/slime/S = dna.species
+ if(S.reagent_skin_coloring)
+ S.reagent_skin_coloring = TRUE
+ if(!silent)
+ to_chat(src, "You adjust your internal chemistry to filter out pigments from things you consume.")
+ else
+ S.reagent_skin_coloring = TRUE
+ if(!silent)
+ to_chat(src, "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you.")
+
+/mob/living/carbon/human/verb/toggle_recolor_verb()
+ set category = "IC"
+ set name = "Toggle Reagent Recoloring"
+ set desc = "While active, you'll slowly adjust your body's color to that of the reagents inside of you, moderated by how much blood you have."
+
+ toggle_recolor()
+
+
+/mob/living/carbon/human/proc/regrow_limbs()
+ set category = "IC"
+ set name = "Regrow Limbs"
+ set desc = "Regrow one of your missing limbs at the cost of a large amount of hunger"
+
+#define SLIMEPERSON_HUNGERCOST 50
+#define SLIMEPERSON_MINHUNGER 250
+#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds
+
+ if(stat || paralysis || stunned)
+ to_chat(src, "You cannot regenerate missing limbs in your current state.")
+ return
+
+ if(nutrition < SLIMEPERSON_MINHUNGER)
+ to_chat(src, "You're too hungry to regenerate a limb!")
+ return
+
+ var/list/missing_limbs = list()
+ for(var/l in bodyparts_by_name)
+ var/obj/item/organ/external/E = bodyparts_by_name[l]
+ if(!istype(E))
+ var/list/limblist = dna.species.has_limbs[l]
+ var/obj/item/organ/external/limb = limblist["path"]
+ var/parent_organ = initial(limb.parent_organ)
+ var/obj/item/organ/external/parentLimb = bodyparts_by_name[parent_organ]
+ if(!istype(parentLimb))
+ continue
+ missing_limbs[initial(limb.name)] = l
+
+ if(!missing_limbs.len)
+ to_chat(src, "You're not missing any limbs!")
+ return
+
+ var/limb_select = input(src, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs
+ var/chosen_limb = missing_limbs[limb_select]
+
+ visible_message("[src] begins to hold still and concentrate on [p_their()] missing [limb_select]...", "You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)")
+ if(do_after(src, SLIMEPERSON_REGROWTHDELAY, needhand=0, target = src))
+ if(stat || paralysis || stunned)
+ to_chat(src, "You cannot regenerate missing limbs in your current state.")
+ return
+
+ if(nutrition < SLIMEPERSON_MINHUNGER)
+ to_chat(src, "You're too hungry to regenerate a limb!")
+ return
+
+ var/obj/item/organ/external/O = bodyparts_by_name[chosen_limb]
+
+ var/stored_brute = 0
+ var/stored_burn = 0
+ if(istype(O))
+ to_chat(src, "You distribute the damaged tissue around your body, out of the way of your new pseudopod!")
+ var/obj/item/organ/external/doomedStump = O
+ stored_brute = doomedStump.brute_dam
+ stored_burn = doomedStump.burn_dam
+ qdel(O)
+
+ var/limb_list = dna.species.has_limbs[chosen_limb]
+ var/obj/item/organ/external/limb_path = limb_list["path"]
+ // Parent check
+ var/obj/item/organ/external/potential_parent = bodyparts_by_name[initial(limb_path.parent_organ)]
+ if(!istype(potential_parent))
+ to_chat(src, "You've lost the organ that you've been growing your new part on!")
+ return // No rayman for you
+ // Grah this line will leave a "not used" warning, in spite of the fact that the new() proc WILL do the thing.
+ // Bothersome.
+ var/obj/item/organ/external/new_limb = new limb_path(src)
+ new_limb.open = 0 // This is just so that the compiler won't think that new_limb is unused, because the compiler is horribly stupid.
+ adjustBruteLoss(stored_brute)
+ adjustFireLoss(stored_burn)
+ update_body()
+ updatehealth()
+ UpdateDamageIcon()
+ nutrition -= SLIMEPERSON_HUNGERCOST
+ visible_message("[src] finishes regrowing [p_their()] missing [new_limb]!", "You finish regrowing your [limb_select]")
+ else
+ to_chat(src, "You need to hold still in order to regrow a limb!")
+ return
+
+#undef SLIMEPERSON_HUNGERCOST
+#undef SLIMEPERSON_MINHUNGER
+#undef SLIMEPERSON_REGROWTHDELAY
+
+/datum/species/slime/handle_pre_change(mob/living/carbon/human/H)
+ ..()
+ if(reagent_skin_coloring)
+ H.toggle_recolor(silent = 1)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
deleted file mode 100644
index 22b8b281f8b..00000000000
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ /dev/null
@@ -1,1040 +0,0 @@
-/datum/species/human
- name = "Human"
- name_plural = "Humans"
- icobase = 'icons/mob/human_races/r_human.dmi'
- deform = 'icons/mob/human_races/r_def_human.dmi'
- primitive_form = /datum/species/monkey
- language = "Sol Common"
- species_traits = list(LIPS, CAN_BE_FAT)
- skinned_type = /obj/item/stack/sheet/animalhide/human
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS
- dietflags = DIET_OMNI
- blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
- colonies across a wide swathe of space. They hold a wide range of forms and creeds.
\
- While the central Sol government maintains control of its far-flung people, powerful corporate \
- interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
- worlds tumultous at best."
-
- reagent_tag = PROCESS_ORG
- //Has standard darksight of 2.
-
-/datum/species/unathi
- name = "Unathi"
- name_plural = "Unathi"
- icobase = 'icons/mob/human_races/r_lizard.dmi'
- deform = 'icons/mob/human_races/r_def_lizard.dmi'
- language = "Sinta'unathi"
- tail = "sogtail"
- skinned_type = /obj/item/stack/sheet/animalhide/lizard
- unarmed_type = /datum/unarmed_attack/claws
- primitive_form = /datum/species/monkey/unathi
-
- blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
- Uuosa-Eso system, which roughly translates to 'burning mother'.
Coming from a harsh, radioactive \
- desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
- else, frequently even their own lives. They prefer warmer temperatures than most species and \
- their native tongue is a heavy hissing laungage called Sinta'Unathi."
-
- species_traits = list(LIPS)
- 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
-
- cold_level_1 = 280 //Default 260 - Lower is better
- cold_level_2 = 220 //Default 200
- cold_level_3 = 140 //Default 120
-
- heat_level_1 = 380 //Default 360 - Higher is better
- heat_level_2 = 420 //Default 400
- heat_level_3 = 480 //Default 460
-
- flesh_color = "#34AF10"
- reagent_tag = PROCESS_ORG
- base_color = "#066000"
- //Default styles for created mobs.
- default_headacc = "Simple"
- default_headacc_colour = "#404040"
- butt_sprite = "unathi"
- brute_mod = 1.05
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs,
- "liver" = /obj/item/organ/internal/liver/unathi,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes/unathi //3 darksight.
- )
-
- allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
- /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
-
- suicide_messages = list(
- "is attempting to bite their tongue off!",
- "is jamming their claws into their eye sockets!",
- "is twisting their own neck!",
- "is holding their breath!")
-
- var/datum/action/innate/tail_lash/lash = new()
-
-
-/datum/species/unathi/handle_post_spawn(var/mob/living/carbon/human/H)
- lash.Grant(H)
- ..()
-
-/datum/action/innate/tail_lash
- name = "Tail lash"
- icon_icon = 'icons/effects/effects.dmi'
- button_icon_state = "tail"
-
-/datum/action/innate/tail_lash/Activate()
- var/mob/living/carbon/human/user = owner
- if(!user.restrained() || !user.buckled)
- to_chat(user, "You need freedom of movement to tail lash!")
- return
- if(user.getStaminaLoss() >= 50)
- to_chat(user, "Rest before tail lashing again!")
- return
- for(var/mob/living/carbon/human/C in orange(1))
- var/obj/item/organ/external/E = C.get_organ(pick("l_leg", "r_leg", "l_foot", "r_foot", "groin"))
- if(E)
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[src] smacks [C] in [E] with their tail! ", "You hit [C] in [E] with your tail!")
- user.adjustStaminaLoss(15)
- C.apply_damage(5, BRUTE, E)
- user.spin(20, 1)
- playsound(user.loc, 'sound/weapons/slash.ogg', 50, 0)
-
-
-
-/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
- H.stop_tail_wagging(1)
-
-/datum/species/tajaran
- name = "Tajaran"
- name_plural = "Tajaran"
- icobase = 'icons/mob/human_races/r_tajaran.dmi'
- deform = 'icons/mob/human_races/r_def_tajaran.dmi'
- language = "Siik'tajr"
- tail = "tajtail"
- skinned_type = /obj/item/stack/sheet/fur
- unarmed_type = /datum/unarmed_attack/claws
-
- blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
- S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
- influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
- of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
- using unique inflections their mouths form."
-
- cold_level_1 = 240
- cold_level_2 = 180
- cold_level_3 = 100
-
- heat_level_1 = 340
- heat_level_2 = 380
- heat_level_3 = 440
-
- primitive_form = /datum/species/monkey/tajaran
-
- species_traits = list(LIPS, CAN_BE_FAT)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
- dietflags = DIET_OMNI
- taste_sensitivity = TASTE_SENSITIVITY_SHARP
- reagent_tag = PROCESS_ORG
- flesh_color = "#AFA59E"
- base_color = "#424242"
- butt_sprite = "tajaran"
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs,
- "liver" = /obj/item/organ/internal/liver/tajaran,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes/tajaran /*Most Tajara see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2)
- unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/
- )
-
- allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot,
- /mob/living/simple_animal/tribble)
-
- suicide_messages = list(
- "is attempting to bite their tongue off!",
- "is jamming their claws into their eye sockets!",
- "is twisting their own neck!",
- "is holding their breath!")
-
-/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
- H.stop_tail_wagging(1)
-
-/datum/species/vulpkanin
- name = "Vulpkanin"
- name_plural = "Vulpkanin"
- icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
- deform = 'icons/mob/human_races/r_vulpkanin.dmi'
- language = "Canilunzt"
- primitive_form = /datum/species/monkey/vulpkanin
- tail = "vulptail"
- skinned_type = /obj/item/stack/sheet/fur
- unarmed_type = /datum/unarmed_attack/claws
-
- blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
- dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
- culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
- to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
- which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
-
- species_traits = list(LIPS)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR
- dietflags = DIET_OMNI
- hunger_drain = 0.11
- taste_sensitivity = TASTE_SENSITIVITY_SHARP
- reagent_tag = PROCESS_ORG
- flesh_color = "#966464"
- base_color = "#CF4D2F"
- butt_sprite = "vulp"
-
- scream_verb = "yelps"
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs,
- "liver" = /obj/item/organ/internal/liver/vulpkanin,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2)
- unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/
- )
-
- allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
- /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
-
- suicide_messages = list(
- "is attempting to bite their tongue off!",
- "is jamming their claws into their eye sockets!",
- "is twisting their own neck!",
- "is holding their breath!")
-
-/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
- H.stop_tail_wagging(1)
-
-/datum/species/skrell
- name = "Skrell"
- name_plural = "Skrell"
- icobase = 'icons/mob/human_races/r_skrell.dmi'
- deform = 'icons/mob/human_races/r_def_skrell.dmi'
- language = "Skrellian"
- primitive_form = /datum/species/monkey/skrell
-
- blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
- the royals' or 'Light of the Crown'.
Skrell are a highly advanced and logical race who live under the rule \
- of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
- herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
- the secrets of their empire to their allies."
-
- species_traits = list(LIPS)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_SKIN_COLOR | HAS_BODY_MARKINGS
- dietflags = DIET_HERB
- taste_sensitivity = TASTE_SENSITIVITY_DULL
- flesh_color = "#8CD7A3"
- blood_color = "#1D2CBF"
- base_color = "#38b661" //RGB: 56, 182, 97.
- default_hair_colour = "#38b661"
- eyes = "skrell_eyes_s"
- //Default styles for created mobs.
- default_hair = "Skrell Male Tentacles"
- reagent_tag = PROCESS_ORG
- butt_sprite = "skrell"
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs,
- "liver" = /obj/item/organ/internal/liver/skrell,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
- "headpocket" = /obj/item/organ/internal/headpocket
- )
-
- suicide_messages = list(
- "is attempting to bite their tongue off!",
- "is jamming their thumbs into their eye sockets!",
- "is twisting their own neck!",
- "makes like a fish and suffocates!",
- "is strangling themselves with their own tendrils!")
-
-/datum/species/vox
- name = "Vox"
- name_plural = "Vox"
- icobase = 'icons/mob/human_races/vox/r_vox.dmi'
- deform = 'icons/mob/human_races/vox/r_def_vox.dmi'
- language = "Vox-pidgin"
- tail = "voxtail"
- speech_sounds = list('sound/voice/shriek1.ogg')
- speech_chance = 20
- unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
-
- blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
- scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
- alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
- refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
- smell.
Most humans will never meet a Vox raider, instead learning of this insular species through \
- dealing with their traders and merchants; those that do rarely enjoy the experience."
-
- brute_mod = 1.2 //20% more brute damage. Fragile bird bones.
-
- warning_low_pressure = 50
- hazard_low_pressure = 0
-
- cold_level_1 = 80
- cold_level_2 = 50
- cold_level_3 = 0
-
- breathid = "n2"
-
- eyes = "vox_eyes_s"
-
- species_traits = list(NO_SCAN, IS_WHITELISTED, NOTRANSSTING)
- clothing_flags = HAS_SOCKS
- dietflags = DIET_OMNI
- bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_BODY_MARKINGS | HAS_TAIL_MARKINGS
-
- blood_color = "#2299FC"
- flesh_color = "#808D11"
- //Default styles for created mobs.
- default_hair = "Short Vox Quills"
- default_hair_colour = "#614f19" //R: 97, G: 79, B: 25
- butt_sprite = "vox"
-
- reagent_tag = PROCESS_ORG
- scream_verb = "shrieks"
- male_scream_sound = 'sound/voice/shriek1.ogg'
- female_scream_sound = 'sound/voice/shriek1.ogg'
- male_cough_sounds = list('sound/voice/shriekcough.ogg')
- female_cough_sounds = list('sound/voice/shriekcough.ogg')
- male_sneeze_sound = 'sound/voice/shrieksneeze.ogg'
- female_sneeze_sound = 'sound/voice/shrieksneeze.ogg'
-
- icon_skin_tones = list(
- 1 = "Default Green",
- 2 = "Dark Green",
- 3 = "Brown",
- 4 = "Grey",
- 5 = "Emerald",
- 6 = "Azure"
- )
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs/vox,
- "liver" = /obj/item/organ/internal/liver/vox,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
- "stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
- ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
-
- suicide_messages = list(
- "is attempting to bite their tongue off!",
- "is jamming their claws into their eye sockets!",
- "is twisting their own neck!",
- "is holding their breath!",
- "is deeply inhaling oxygen!")
-
-/datum/species/vox/handle_death(var/mob/living/carbon/human/H)
- H.stop_tail_wagging(1)
-
-/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H)
- if(!H.mind || !H.mind.assigned_role || H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime")
- H.unEquip(H.wear_mask)
- H.unEquip(H.l_hand)
-
- H.equip_or_collect(new /obj/item/clothing/mask/breath/vox(H), slot_wear_mask)
- var/tank_pref = H.client && H.client.prefs ? H.client.prefs.speciesprefs : null
- if(tank_pref)//Diseasel, here you go
- H.equip_or_collect(new /obj/item/tank/nitrogen(H), slot_l_hand)
- else
- H.equip_or_collect(new /obj/item/tank/emergency_oxygen/vox(H), slot_l_hand)
- to_chat(H, "You are now running on nitrogen internals from the [H.l_hand] in your hand. Your species finds oxygen toxic, so you must breathe nitrogen only.")
- H.internal = H.l_hand
- H.update_action_buttons_icon()
-
-/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
- updatespeciescolor(H)
- H.update_icons()
- //H.verbs += /mob/living/carbon/human/proc/leap
- ..()
-
-/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H, var/owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race.
- if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis.
- var/new_icobase = 'icons/mob/human_races/vox/r_vox.dmi' //Default Green Vox.
- var/new_deform = 'icons/mob/human_races/vox/r_def_vox.dmi' //Default Green Vox.
- switch(H.s_tone)
- if(6) //Azure Vox.
- new_icobase = 'icons/mob/human_races/vox/r_voxazu.dmi'
- new_deform = 'icons/mob/human_races/vox/r_def_voxazu.dmi'
- H.tail = "voxtail_azu"
- if(5) //Emerald Vox.
- new_icobase = 'icons/mob/human_races/vox/r_voxemrl.dmi'
- new_deform = 'icons/mob/human_races/vox/r_def_voxemrl.dmi'
- H.tail = "voxtail_emrl"
- if(4) //Grey Vox.
- new_icobase = 'icons/mob/human_races/vox/r_voxgry.dmi'
- new_deform = 'icons/mob/human_races/vox/r_def_voxgry.dmi'
- H.tail = "voxtail_gry"
- if(3) //Brown Vox.
- new_icobase = 'icons/mob/human_races/vox/r_voxbrn.dmi'
- new_deform = 'icons/mob/human_races/vox/r_def_voxbrn.dmi'
- H.tail = "voxtail_brn"
- if(2) //Dark Green Vox.
- new_icobase = 'icons/mob/human_races/vox/r_voxdgrn.dmi'
- new_deform = 'icons/mob/human_races/vox/r_def_voxdgrn.dmi'
- H.tail = "voxtail_dgrn"
- else //Default Green Vox.
- H.tail = "voxtail" //Ensures they get an appropriately coloured tail depending on the skin-tone.
-
- H.change_icobase(new_icobase, new_deform, owner_sensitive) //Update the icobase/deform of all our organs, but make sure we don't mess with frankenstein limbs in doing so.
- H.update_dna()
-
-/datum/species/vox/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
- if(R.id == "oxygen") //Armalis are above such petty things.
- H.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) //Same as plasma.
- H.reagents.remove_reagent(R.id, REAGENTS_METABOLISM)
- return 0 //Handling reagent removal on our own.
-
- return ..()
-
-/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
- H.verbs += /mob/living/carbon/human/proc/leap
- H.verbs += /mob/living/carbon/human/proc/gut
- ..()
-
-/datum/species/vox/armalis
- name = "Vox Armalis"
- name_plural = "Vox Armalis"
- icobase = 'icons/mob/human_races/r_armalis.dmi'
- deform = 'icons/mob/human_races/r_armalis.dmi'
- unarmed_type = /datum/unarmed_attack/claws/armalis
-
- warning_low_pressure = 50
- hazard_low_pressure = 0
-
- cold_level_1 = 80
- cold_level_2 = 50
- cold_level_3 = 0
-
- heat_level_1 = 2000
- heat_level_2 = 3000
- heat_level_3 = 4000
-
- brute_mod = 0.2
- burn_mod = 0.2
-
- eyes = "blank_eyes"
-
- species_traits = list(NO_SCAN, NO_BLOOD, NO_PAIN, IS_WHITELISTED)
- bodyflags = HAS_TAIL
- dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
-
- blood_color = "#2299FC"
- flesh_color = "#808D11"
-
- reagent_tag = PROCESS_ORG
-
- tail = "armalis_tail"
- icon_template = 'icons/mob/human_races/r_armalis.dmi'
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs/vox,
- "liver" = /obj/item/organ/internal/liver,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
- "stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
- ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
-
- suicide_messages = list(
- "is attempting to bite their tongue off!",
- "is jamming their claws into their eye sockets!",
- "is twisting their own neck!",
- "is holding their breath!",
- "is huffing oxygen!")
-
-/datum/species/vox/armalis/handle_reagents() //Skip the Vox oxygen reagent toxicity. Armalis are above such things.
- return 1
-
-/datum/species/kidan
- name = "Kidan"
- name_plural = "Kidan"
- icobase = 'icons/mob/human_races/r_kidan.dmi'
- deform = 'icons/mob/human_races/r_def_kidan.dmi'
- language = "Chittin"
- unarmed_type = /datum/unarmed_attack/claws
-
- brute_mod = 0.8
-
- species_traits = list(IS_WHITELISTED)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS
- eyes = "kidan_eyes_s"
- dietflags = DIET_HERB
- blood_color = "#FB9800"
- reagent_tag = PROCESS_ORG
- //Default styles for created mobs.
- default_headacc = "Normal Antennae"
- butt_sprite = "kidan"
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs,
- "liver" = /obj/item/organ/internal/liver/kidan,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
- "lantern" = /obj/item/organ/internal/lantern
- )
-
- allowed_consumed_mobs = list(/mob/living/simple_animal/diona)
-
- suicide_messages = list(
- "is attempting to bite their antenna off!",
- "is jamming their claws into their eye sockets!",
- "is twisting their own neck!",
- "is cracking their exoskeleton!",
- "is stabbing themselves with their mandibles!",
- "is holding their breath!")
-
-/datum/species/slime
- name = "Slime People"
- name_plural = "Slime People"
- language = "Bubblish"
- icobase = 'icons/mob/human_races/r_slime.dmi'
- deform = 'icons/mob/human_races/r_slime.dmi'
- remains_type = /obj/effect/decal/remains/slime
-
- // More sensitive to the cold
- cold_level_1 = 280
- cold_level_2 = 240
- cold_level_3 = 200
- coldmod = 3
-
- oxy_mod = 0
- brain_mod = 2.5
-
- male_cough_sounds = list('sound/effects/slime_squish.ogg')
- female_cough_sounds = list('sound/effects/slime_squish.ogg')
-
- species_traits = list(LIPS, IS_WHITELISTED, NO_BREATHE, NO_INTORGANS, NO_SCAN)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_SKIN_COLOR | NO_EYES
- dietflags = DIET_CARN
- reagent_tag = PROCESS_ORG
-
- blood_color = "#0064C8"
- exotic_blood = "water"
- blood_damage_type = TOX
-
- butt_sprite = "slime"
- //Has default darksight of 2.
-
- has_organ = list(
- "brain" = /obj/item/organ/internal/brain/slime
- )
-
- suicide_messages = list(
- "is melting into a puddle!",
- "is ripping out their own core!",
- "is turning a dull, brown color and melting into a puddle!")
-
- var/reagent_skin_coloring = FALSE
-
- var/datum/action/innate/regrow/grow = new()
-
- species_abilities = list(
- /mob/living/carbon/human/verb/toggle_recolor_verb,
- /mob/living/carbon/human/proc/regrow_limbs
- )
-
-/datum/species/slime/handle_post_spawn(var/mob/living/carbon/human/H)
- grow.Grant(H)
- ..()
-
-/datum/action/innate/regrow
- name = "Regrow limbs"
- icon_icon = 'icons/effects/effects.dmi'
- button_icon_state = "greenglow"
-
-/datum/action/innate/regrow/Activate()
- var/mob/living/carbon/human/user = owner
- user.regrow_limbs()
-
-
-/datum/species/slime/handle_life(var/mob/living/carbon/human/H)
-//This is allegedly for code "style". Like a plaid sweater?
-#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1
-#define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds
-#define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower.
- // Slowly shifting to the color of the reagents
- if(reagent_skin_coloring && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER)
- var/blood_amount = H.blood_volume
- var/r_color = mix_color_from_reagents(H.reagents.reagent_list)
- var/new_body_color = BlendRGB(r_color, H.skin_colour, (blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)/((blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)+(H.reagents.total_volume)))
- H.skin_colour = new_body_color
- if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller
- for(var/organname in H.bodyparts_by_name)
- var/obj/item/organ/external/E = H.bodyparts_by_name[organname]
- if(istype(E) && E.dna && istype(E.dna.species, /datum/species/slime))
- E.sync_colour_to_human(H)
- H.update_hair(0)
- H.update_body()
- ..()
-
-#undef SLIMEPERSON_COLOR_SHIFT_TRIGGER
-#undef SLIMEPERSON_ICON_UPDATE_PERIOD
-#undef SLIMEPERSON_BLOOD_SCALING_FACTOR
-
-/mob/living/carbon/human/proc/toggle_recolor(silent = FALSE)
- if(!isslimeperson(src))
- if(!silent)
- to_chat(src, "You're not a slime person!")
- return
-
- var/datum/species/slime/S = dna.species
- if(S.reagent_skin_coloring)
- S.reagent_skin_coloring = TRUE
- if(!silent)
- to_chat(src, "You adjust your internal chemistry to filter out pigments from things you consume.")
- else
- S.reagent_skin_coloring = TRUE
- if(!silent)
- to_chat(src, "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you.")
-
-/mob/living/carbon/human/verb/toggle_recolor_verb()
- set category = "IC"
- set name = "Toggle Reagent Recoloring"
- set desc = "While active, you'll slowly adjust your body's color to that of the reagents inside of you, moderated by how much blood you have."
-
- toggle_recolor()
-
-
-/mob/living/carbon/human/proc/regrow_limbs()
- set category = "IC"
- set name = "Regrow Limbs"
- set desc = "Regrow one of your missing limbs at the cost of a large amount of hunger"
-
-#define SLIMEPERSON_HUNGERCOST 50
-#define SLIMEPERSON_MINHUNGER 250
-#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds
-
- if(stat || paralysis || stunned)
- to_chat(src, "You cannot regenerate missing limbs in your current state.")
- return
-
- if(nutrition < SLIMEPERSON_MINHUNGER)
- to_chat(src, "You're too hungry to regenerate a limb!")
- return
-
- var/list/missing_limbs = list()
- for(var/l in bodyparts_by_name)
- var/obj/item/organ/external/E = bodyparts_by_name[l]
- if(!istype(E))
- var/list/limblist = dna.species.has_limbs[l]
- var/obj/item/organ/external/limb = limblist["path"]
- var/parent_organ = initial(limb.parent_organ)
- var/obj/item/organ/external/parentLimb = bodyparts_by_name[parent_organ]
- if(!istype(parentLimb))
- continue
- missing_limbs[initial(limb.name)] = l
-
- if(!missing_limbs.len)
- to_chat(src, "You're not missing any limbs!")
- return
-
- var/limb_select = input(src, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs
- var/chosen_limb = missing_limbs[limb_select]
-
- visible_message("[src] begins to hold still and concentrate on [p_their()] missing [limb_select]...", "You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)")
- if(do_after(src, SLIMEPERSON_REGROWTHDELAY, needhand=0, target = src))
- if(stat || paralysis || stunned)
- to_chat(src, "You cannot regenerate missing limbs in your current state.")
- return
-
- if(nutrition < SLIMEPERSON_MINHUNGER)
- to_chat(src, "You're too hungry to regenerate a limb!")
- return
-
- var/obj/item/organ/external/O = bodyparts_by_name[chosen_limb]
-
- var/stored_brute = 0
- var/stored_burn = 0
- if(istype(O))
- to_chat(src, "You distribute the damaged tissue around your body, out of the way of your new pseudopod!")
- var/obj/item/organ/external/doomedStump = O
- stored_brute = doomedStump.brute_dam
- stored_burn = doomedStump.burn_dam
- qdel(O)
-
- var/limb_list = dna.species.has_limbs[chosen_limb]
- var/obj/item/organ/external/limb_path = limb_list["path"]
- // Parent check
- var/obj/item/organ/external/potential_parent = bodyparts_by_name[initial(limb_path.parent_organ)]
- if(!istype(potential_parent))
- to_chat(src, "You've lost the organ that you've been growing your new part on!")
- return // No rayman for you
- // Grah this line will leave a "not used" warning, in spite of the fact that the new() proc WILL do the thing.
- // Bothersome.
- var/obj/item/organ/external/new_limb = new limb_path(src)
- new_limb.open = 0 // This is just so that the compiler won't think that new_limb is unused, because the compiler is horribly stupid.
- adjustBruteLoss(stored_brute)
- adjustFireLoss(stored_burn)
- update_body()
- updatehealth()
- UpdateDamageIcon()
- nutrition -= SLIMEPERSON_HUNGERCOST
- visible_message("[src] finishes regrowing [p_their()] missing [new_limb]!", "You finish regrowing your [limb_select]")
- else
- to_chat(src, "You need to hold still in order to regrow a limb!")
- return
-
-#undef SLIMEPERSON_HUNGERCOST
-#undef SLIMEPERSON_MINHUNGER
-#undef SLIMEPERSON_REGROWTHDELAY
-
-/datum/species/slime/handle_pre_change(mob/living/carbon/human/H)
- ..()
- if(reagent_skin_coloring)
- H.toggle_recolor(silent = 1)
-
-/datum/species/grey
- name = "Grey"
- name_plural = "Greys"
- icobase = 'icons/mob/human_races/r_grey.dmi'
- deform = 'icons/mob/human_races/r_def_grey.dmi'
- language = "Psionic Communication"
- eyes = "grey_eyes_s"
- butt_sprite = "grey"
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "lungs" = /obj/item/organ/internal/lungs,
- "liver" = /obj/item/organ/internal/liver/grey,
- "kidneys" = /obj/item/organ/internal/kidneys,
- "brain" = /obj/item/organ/internal/brain/grey,
- "appendix" = /obj/item/organ/internal/appendix,
- "eyes" = /obj/item/organ/internal/eyes/grey //5 darksight.
- )
-
- brute_mod = 1.25 //greys are fragile
-
- default_genes = list(REMOTE_TALK)
-
-
- species_traits = list(LIPS, IS_WHITELISTED, CAN_BE_FAT)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
- bodyflags = HAS_BODY_MARKINGS
- dietflags = DIET_HERB
- reagent_tag = PROCESS_ORG
- blood_color = "#A200FF"
-
-/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
- if(!remove)
- C.dna.SetSEState(REMOTETALKBLOCK,1,1)
- genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
- else
- C.dna.SetSEState(REMOTETALKBLOCK,0,1)
- genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
- ..()
-
-/datum/species/grey/water_act(var/mob/living/carbon/C, volume, temperature, source)
- ..()
- C.take_organ_damage(5,min(volume,20))
- C.emote("scream")
-
-/datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H)
- var/speech_pref = H.client.prefs.speciesprefs
- if(speech_pref)
- H.mind.speech_span = "wingdings"
-
-/datum/species/grey/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
- if(R.id == "sacid")
- H.reagents.del_reagent(R.id)
- return 0
- return ..()
-
-/datum/species/diona
- name = "Diona"
- name_plural = "Dionaea"
- icobase = 'icons/mob/human_races/r_diona.dmi'
- deform = 'icons/mob/human_races/r_def_plant.dmi'
- language = "Rootspeak"
- speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16]
- speech_chance = 20
- unarmed_type = /datum/unarmed_attack/diona
- //primitive_form = "Nymph"
- slowdown = 5
- remains_type = /obj/effect/decal/cleanable/ash
-
-
- warning_low_pressure = 50
- hazard_low_pressure = -1
-
- cold_level_1 = 50
- cold_level_2 = -1
- cold_level_3 = -1
-
- heat_level_1 = 300
- heat_level_2 = 340
- heat_level_3 = 400
-
- blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
- species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
- there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
- Minoris primary being ringed with a cloud of singing space-station-sized entities.
The Dionaea coexist peacefully with \
- all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
- 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(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN)
- clothing_flags = HAS_SOCKS
- default_hair_colour = "#000000"
- dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary
- taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
- skinned_type = /obj/item/stack/sheet/wood
-
- oxy_mod = 0
-
- body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
- blood_color = "#004400"
- flesh_color = "#907E4A"
- butt_sprite = "diona"
-
- reagent_tag = PROCESS_ORG
-
- has_organ = list(
- "nutrient channel" = /obj/item/organ/internal/liver/diona,
- "neural strata" = /obj/item/organ/internal/heart/diona,
- "receptor node" = /obj/item/organ/internal/eyes/diona, //Default darksight of 2.
- "gas bladder" = /obj/item/organ/internal/brain/diona,
- "polyp segment" = /obj/item/organ/internal/kidneys/diona,
- "anchoring ligament" = /obj/item/organ/internal/appendix/diona
- )
-
- vision_organ = /obj/item/organ/internal/eyes/diona
- has_limbs = list(
- "chest" = list("path" = /obj/item/organ/external/chest/diona),
- "groin" = list("path" = /obj/item/organ/external/groin/diona),
- "head" = list("path" = /obj/item/organ/external/head/diona),
- "l_arm" = list("path" = /obj/item/organ/external/arm/diona),
- "r_arm" = list("path" = /obj/item/organ/external/arm/right/diona),
- "l_leg" = list("path" = /obj/item/organ/external/leg/diona),
- "r_leg" = list("path" = /obj/item/organ/external/leg/right/diona),
- "l_hand" = list("path" = /obj/item/organ/external/hand/diona),
- "r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
- "l_foot" = list("path" = /obj/item/organ/external/foot/diona),
- "r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
- )
-
- suicide_messages = list(
- "is losing branches!",
- "pulls out a secret stash of herbicide and takes a hearty swig!",
- "is pulling themselves apart!")
-
-/datum/species/diona/can_understand(var/mob/other)
- if(istype(other, /mob/living/simple_animal/diona))
- return 1
- return 0
-
-/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
- H.gender = NEUTER
-
- return ..()
-
-/datum/species/diona/handle_life(var/mob/living/carbon/human/H)
- H.radiation = Clamp(H.radiation, 0, 100) //We have to clamp this first, then decrease it, or there's a few edge cases of massive heals if we clamp and decrease at the same time.
- var/rads = H.radiation / 25
- H.radiation = max(H.radiation-rads, 0)
- H.nutrition = min(H.nutrition+rads, NUTRITION_LEVEL_WELL_FED+10)
- H.adjustBruteLoss(-(rads))
- H.adjustToxLoss(-(rads))
-
- var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
- if(isturf(H.loc)) //else, there's considered to be no light
- var/turf/T = H.loc
- light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
- H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
-
- if(light_amount > 0)
- H.clear_alert("nolight")
- else
- H.throw_alert("nolight", /obj/screen/alert/nolight)
-
- if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
-
- H.adjustBruteLoss(-(light_amount/2))
- H.adjustFireLoss(-(light_amount/4))
- if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
- H.take_overall_damage(10,0)
- ..()
-
-/datum/species/machine
- name = "Machine"
- name_plural = "Machines"
-
- blurb = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \
- robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \
- to corporate operations. IPCs (Integrated Positronic Chassis) are a loose category of self-willed robots with a humanoid form, \
- generally self-owned after being 'born' into servitude; they are reliable and dedicated workers, albeit more than slightly \
- inhuman in outlook and perspective."
-
- icobase = 'icons/mob/human_races/r_machine.dmi'
- deform = 'icons/mob/human_races/r_machine.dmi'
- language = "Trinary"
- remains_type = /obj/effect/decal/remains/robot
- skinned_type = /obj/item/stack/sheet/metal // Let's grind up IPCs for station resources!
-
- eyes = "blank_eyes"
- brute_mod = 2.5 // 100% * 2.5 * 0.6 (robolimbs) ~= 150%
- burn_mod = 2.5 // So they take 50% extra damage from brute/burn overall.
- tox_mod = 0
- clone_mod = 0
- oxy_mod = 0
- death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..."
-
- species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_BLOOD, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NOTRANSSTING)
- 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
- taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
- blood_color = "#1F181F"
- flesh_color = "#AAAAAA"
- //Default styles for created mobs.
- default_hair = "Blue IPC Screen"
- can_revive_by_healing = 1
- has_gender = FALSE
- reagent_tag = PROCESS_SYN
- male_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
- female_scream_sound = 'sound/goonstation/voice/robot_scream.ogg'
- male_cough_sounds = list('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
- female_cough_sounds = list('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
- male_sneeze_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
- female_sneeze_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
- butt_sprite = "machine"
-
- has_organ = list(
- "brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain,
- "cell" = /obj/item/organ/internal/cell,
- "optics" = /obj/item/organ/internal/eyes/optical_sensor, //Default darksight of 2.
- "charger" = /obj/item/organ/internal/cyberimp/arm/power_cord
- )
-
- vision_organ = /obj/item/organ/internal/eyes/optical_sensor
- has_limbs = list(
- "chest" = list("path" = /obj/item/organ/external/chest/ipc),
- "groin" = list("path" = /obj/item/organ/external/groin/ipc),
- "head" = list("path" = /obj/item/organ/external/head/ipc),
- "l_arm" = list("path" = /obj/item/organ/external/arm/ipc),
- "r_arm" = list("path" = /obj/item/organ/external/arm/right/ipc),
- "l_leg" = list("path" = /obj/item/organ/external/leg/ipc),
- "r_leg" = list("path" = /obj/item/organ/external/leg/right/ipc),
- "l_hand" = list("path" = /obj/item/organ/external/hand/ipc),
- "r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
- "l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
- "r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
- )
-
- suicide_messages = list(
- "is powering down!",
- "is smashing their own monitor!",
- "is twisting their own neck!",
- "is downloading extra RAM!",
- "is frying their own circuits!",
- "is blocking their ventilation port!")
-
- species_abilities = list(
- /mob/living/carbon/human/proc/change_monitor
- )
-
-/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
- var/obj/item/organ/external/head/head_organ = H.get_organ("head")
- if(!head_organ)
- return
- head_organ.h_style = "Bald"
- head_organ.f_style = "Shaved"
- spawn(100)
- if(H)
- H.update_hair()
- H.update_fhair()
-
-/datum/species/drask
- name = "Drask"
- name_plural = "Drask"
- icobase = 'icons/mob/human_races/r_drask.dmi'
- deform = 'icons/mob/human_races/r_drask.dmi'
- language = "Orluum"
- eyes = "drask_eyes_s"
-
- speech_sounds = list('sound/voice/DraskTalk.ogg')
- speech_chance = 20
- male_scream_sound = 'sound/voice/DraskTalk2.ogg'
- female_scream_sound = 'sound/voice/DraskTalk2.ogg'
- male_cough_sounds = 'sound/voice/DraskCough.ogg'
- female_cough_sounds = 'sound/voice/DraskCough.ogg'
- male_sneeze_sound = 'sound/voice/DraskSneeze.ogg'
- female_sneeze_sound = 'sound/voice/DraskSneeze.ogg'
-
- burn_mod = 2
- //exotic_blood = "cryoxadone"
- body_temperature = 273
-
- blurb = "Hailing from Hoorlm, planet outside what is usually considered a habitable \
- orbit, the Drask evolved to live in extreme cold. Their strange bodies seem \
- to operate better the colder their surroundings are, and can regenerate rapidly \
- when breathing supercooled gas.
On their homeworld, the Drask live long lives \
- in their labyrinthine settlements, carved out beneath Hoorlm's icy surface, where the air \
- is of breathable density."
-
- suicide_messages = list(
- "is self-warming with friction!",
- "is jamming fingers through their big eyes!",
- "is sucking in warm air!",
- "is holding their breath!")
-
- species_traits = list(LIPS, IS_WHITELISTED)
- clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
- bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS
- dietflags = DIET_OMNI
-
- cold_level_1 = -1 //Default 260 - Lower is better
- cold_level_2 = -1 //Default 200
- cold_level_3 = -1 //Default 120
- coldmod = -1
-
- heat_level_1 = 300 //Default 360 - Higher is better
- heat_level_2 = 340 //Default 400
- heat_level_3 = 400 //Default 460
- heatmod = 2
-
- flesh_color = "#a3d4eb"
- reagent_tag = PROCESS_ORG
- base_color = "#a3d4eb"
- blood_color = "#a3d4eb"
- butt_sprite = "drask"
-
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart/drask,
- "lungs" = /obj/item/organ/internal/lungs/drask,
- "metabolic strainer" = /obj/item/organ/internal/liver/drask,
- "eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight.
- "brain" = /obj/item/organ/internal/brain/drask
- )
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm
new file mode 100644
index 00000000000..0eaede54dbf
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/tajaran.dm
@@ -0,0 +1,58 @@
+/datum/species/tajaran
+ name = "Tajaran"
+ name_plural = "Tajaran"
+ icobase = 'icons/mob/human_races/r_tajaran.dmi'
+ deform = 'icons/mob/human_races/r_def_tajaran.dmi'
+ language = "Siik'tajr"
+ tail = "tajtail"
+ skinned_type = /obj/item/stack/sheet/fur
+ unarmed_type = /datum/unarmed_attack/claws
+
+ blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
+ S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
+ influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
+ of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
+ using unique inflections their mouths form."
+
+ cold_level_1 = 240
+ cold_level_2 = 180
+ cold_level_3 = 100
+
+ heat_level_1 = 340
+ heat_level_2 = 380
+ heat_level_3 = 440
+
+ primitive_form = /datum/species/monkey/tajaran
+
+ species_traits = list(LIPS, CAN_BE_FAT)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
+ dietflags = DIET_OMNI
+ taste_sensitivity = TASTE_SENSITIVITY_SHARP
+ reagent_tag = PROCESS_ORG
+ flesh_color = "#AFA59E"
+ base_color = "#424242"
+ butt_sprite = "tajaran"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs,
+ "liver" = /obj/item/organ/internal/liver/tajaran,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes/tajaran /*Most Tajara see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2)
+ unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/
+ )
+
+ allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot,
+ /mob/living/simple_animal/tribble)
+
+ suicide_messages = list(
+ "is attempting to bite their tongue off!",
+ "is jamming their claws into their eye sockets!",
+ "is twisting their own neck!",
+ "is holding their breath!")
+
+/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
+ H.stop_tail_wagging(1)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm
new file mode 100644
index 00000000000..243baa0ebfd
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/unathi.dm
@@ -0,0 +1,92 @@
+/datum/species/unathi
+ name = "Unathi"
+ name_plural = "Unathi"
+ icobase = 'icons/mob/human_races/r_lizard.dmi'
+ deform = 'icons/mob/human_races/r_def_lizard.dmi'
+ language = "Sinta'unathi"
+ tail = "sogtail"
+ skinned_type = /obj/item/stack/sheet/animalhide/lizard
+ unarmed_type = /datum/unarmed_attack/claws
+ primitive_form = /datum/species/monkey/unathi
+
+ blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
+ Uuosa-Eso system, which roughly translates to 'burning mother'.
Coming from a harsh, radioactive \
+ desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
+ else, frequently even their own lives. They prefer warmer temperatures than most species and \
+ their native tongue is a heavy hissing laungage called Sinta'Unathi."
+
+ species_traits = list(LIPS)
+ 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
+
+ cold_level_1 = 280 //Default 260 - Lower is better
+ cold_level_2 = 220 //Default 200
+ cold_level_3 = 140 //Default 120
+
+ heat_level_1 = 380 //Default 360 - Higher is better
+ heat_level_2 = 420 //Default 400
+ heat_level_3 = 480 //Default 460
+
+ flesh_color = "#34AF10"
+ reagent_tag = PROCESS_ORG
+ base_color = "#066000"
+ //Default styles for created mobs.
+ default_headacc = "Simple"
+ default_headacc_colour = "#404040"
+ butt_sprite = "unathi"
+ brute_mod = 1.05
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs,
+ "liver" = /obj/item/organ/internal/liver/unathi,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes/unathi //3 darksight.
+ )
+
+ allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
+ /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
+
+ suicide_messages = list(
+ "is attempting to bite their tongue off!",
+ "is jamming their claws into their eye sockets!",
+ "is twisting their own neck!",
+ "is holding their breath!")
+
+ var/datum/action/innate/tail_lash/lash = new()
+
+
+/datum/species/unathi/handle_post_spawn(var/mob/living/carbon/human/H)
+ lash.Grant(H)
+ ..()
+
+/datum/action/innate/tail_lash
+ name = "Tail lash"
+ icon_icon = 'icons/effects/effects.dmi'
+ button_icon_state = "tail"
+
+/datum/action/innate/tail_lash/Activate()
+ var/mob/living/carbon/human/user = owner
+ if(!user.restrained() || !user.buckled)
+ to_chat(user, "You need freedom of movement to tail lash!")
+ return
+ if(user.getStaminaLoss() >= 50)
+ to_chat(user, "Rest before tail lashing again!")
+ return
+ for(var/mob/living/carbon/human/C in orange(1))
+ var/obj/item/organ/external/E = C.get_organ(pick("l_leg", "r_leg", "l_foot", "r_foot", "groin"))
+ if(E)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message("[src] smacks [C] in [E] with their tail! ", "You hit [C] in [E] with your tail!")
+ user.adjustStaminaLoss(15)
+ C.apply_damage(5, BRUTE, E)
+ user.spin(20, 1)
+ playsound(user.loc, 'sound/weapons/slash.ogg', 50, 0)
+
+
+
+/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
+ H.stop_tail_wagging(1)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm
new file mode 100644
index 00000000000..e86185a4d9b
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/vox.dm
@@ -0,0 +1,201 @@
+/datum/species/vox
+ name = "Vox"
+ name_plural = "Vox"
+ icobase = 'icons/mob/human_races/vox/r_vox.dmi'
+ deform = 'icons/mob/human_races/vox/r_def_vox.dmi'
+ language = "Vox-pidgin"
+ tail = "voxtail"
+ speech_sounds = list('sound/voice/shriek1.ogg')
+ speech_chance = 20
+ unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
+
+ blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
+ scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
+ alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
+ refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
+ smell.
Most humans will never meet a Vox raider, instead learning of this insular species through \
+ dealing with their traders and merchants; those that do rarely enjoy the experience."
+
+ brute_mod = 1.2 //20% more brute damage. Fragile bird bones.
+
+ warning_low_pressure = 50
+ hazard_low_pressure = 0
+
+ cold_level_1 = 80
+ cold_level_2 = 50
+ cold_level_3 = 0
+
+ breathid = "n2"
+
+ eyes = "vox_eyes_s"
+
+ species_traits = list(NO_SCAN, IS_WHITELISTED, NOTRANSSTING)
+ clothing_flags = HAS_SOCKS
+ dietflags = DIET_OMNI
+ bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_BODY_MARKINGS | HAS_TAIL_MARKINGS
+
+ blood_color = "#2299FC"
+ flesh_color = "#808D11"
+ //Default styles for created mobs.
+ default_hair = "Short Vox Quills"
+ default_hair_colour = "#614f19" //R: 97, G: 79, B: 25
+ butt_sprite = "vox"
+
+ reagent_tag = PROCESS_ORG
+ scream_verb = "shrieks"
+ male_scream_sound = 'sound/voice/shriek1.ogg'
+ female_scream_sound = 'sound/voice/shriek1.ogg'
+ male_cough_sounds = list('sound/voice/shriekcough.ogg')
+ female_cough_sounds = list('sound/voice/shriekcough.ogg')
+ male_sneeze_sound = 'sound/voice/shrieksneeze.ogg'
+ female_sneeze_sound = 'sound/voice/shrieksneeze.ogg'
+
+ icon_skin_tones = list(
+ 1 = "Default Green",
+ 2 = "Dark Green",
+ 3 = "Brown",
+ 4 = "Grey",
+ 5 = "Emerald",
+ 6 = "Azure"
+ )
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs/vox,
+ "liver" = /obj/item/organ/internal/liver/vox,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
+ "stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
+ ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
+
+ suicide_messages = list(
+ "is attempting to bite their tongue off!",
+ "is jamming their claws into their eye sockets!",
+ "is twisting their own neck!",
+ "is holding their breath!",
+ "is deeply inhaling oxygen!")
+
+/datum/species/vox/handle_death(var/mob/living/carbon/human/H)
+ H.stop_tail_wagging(1)
+
+/datum/species/vox/after_equip_job(datum/job/J, mob/living/carbon/human/H)
+ if(!H.mind || !H.mind.assigned_role || H.mind.assigned_role != "Clown" && H.mind.assigned_role != "Mime")
+ H.unEquip(H.wear_mask)
+ H.unEquip(H.l_hand)
+
+ H.equip_or_collect(new /obj/item/clothing/mask/breath/vox(H), slot_wear_mask)
+ var/tank_pref = H.client && H.client.prefs ? H.client.prefs.speciesprefs : null
+ if(tank_pref)//Diseasel, here you go
+ H.equip_or_collect(new /obj/item/tank/nitrogen(H), slot_l_hand)
+ else
+ H.equip_or_collect(new /obj/item/tank/emergency_oxygen/vox(H), slot_l_hand)
+ to_chat(H, "You are now running on nitrogen internals from the [H.l_hand] in your hand. Your species finds oxygen toxic, so you must breathe nitrogen only.")
+ H.internal = H.l_hand
+ H.update_action_buttons_icon()
+
+/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
+ updatespeciescolor(H)
+ H.update_icons()
+ //H.verbs += /mob/living/carbon/human/proc/leap
+ ..()
+
+/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H, var/owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race.
+ if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) //Making sure we don't break Armalis.
+ var/new_icobase = 'icons/mob/human_races/vox/r_vox.dmi' //Default Green Vox.
+ var/new_deform = 'icons/mob/human_races/vox/r_def_vox.dmi' //Default Green Vox.
+ switch(H.s_tone)
+ if(6) //Azure Vox.
+ new_icobase = 'icons/mob/human_races/vox/r_voxazu.dmi'
+ new_deform = 'icons/mob/human_races/vox/r_def_voxazu.dmi'
+ H.tail = "voxtail_azu"
+ if(5) //Emerald Vox.
+ new_icobase = 'icons/mob/human_races/vox/r_voxemrl.dmi'
+ new_deform = 'icons/mob/human_races/vox/r_def_voxemrl.dmi'
+ H.tail = "voxtail_emrl"
+ if(4) //Grey Vox.
+ new_icobase = 'icons/mob/human_races/vox/r_voxgry.dmi'
+ new_deform = 'icons/mob/human_races/vox/r_def_voxgry.dmi'
+ H.tail = "voxtail_gry"
+ if(3) //Brown Vox.
+ new_icobase = 'icons/mob/human_races/vox/r_voxbrn.dmi'
+ new_deform = 'icons/mob/human_races/vox/r_def_voxbrn.dmi'
+ H.tail = "voxtail_brn"
+ if(2) //Dark Green Vox.
+ new_icobase = 'icons/mob/human_races/vox/r_voxdgrn.dmi'
+ new_deform = 'icons/mob/human_races/vox/r_def_voxdgrn.dmi'
+ H.tail = "voxtail_dgrn"
+ else //Default Green Vox.
+ H.tail = "voxtail" //Ensures they get an appropriately coloured tail depending on the skin-tone.
+
+ H.change_icobase(new_icobase, new_deform, owner_sensitive) //Update the icobase/deform of all our organs, but make sure we don't mess with frankenstein limbs in doing so.
+ H.update_dna()
+
+/datum/species/vox/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
+ if(R.id == "oxygen") //Armalis are above such petty things.
+ H.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) //Same as plasma.
+ H.reagents.remove_reagent(R.id, REAGENTS_METABOLISM)
+ return 0 //Handling reagent removal on our own.
+
+ return ..()
+
+/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
+ H.verbs += /mob/living/carbon/human/proc/leap
+ H.verbs += /mob/living/carbon/human/proc/gut
+ ..()
+
+/datum/species/vox/armalis
+ name = "Vox Armalis"
+ name_plural = "Vox Armalis"
+ icobase = 'icons/mob/human_races/r_armalis.dmi'
+ deform = 'icons/mob/human_races/r_armalis.dmi'
+ unarmed_type = /datum/unarmed_attack/claws/armalis
+
+ warning_low_pressure = 50
+ hazard_low_pressure = 0
+
+ cold_level_1 = 80
+ cold_level_2 = 50
+ cold_level_3 = 0
+
+ heat_level_1 = 2000
+ heat_level_2 = 3000
+ heat_level_3 = 4000
+
+ brute_mod = 0.2
+ burn_mod = 0.2
+
+ eyes = "blank_eyes"
+
+ species_traits = list(NO_SCAN, NO_BLOOD, NO_PAIN, IS_WHITELISTED)
+ bodyflags = HAS_TAIL
+ dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
+
+ blood_color = "#2299FC"
+ flesh_color = "#808D11"
+
+ reagent_tag = PROCESS_ORG
+
+ tail = "armalis_tail"
+ icon_template = 'icons/mob/human_races/r_armalis.dmi'
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs/vox,
+ "liver" = /obj/item/organ/internal/liver,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
+ "stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
+ ) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
+
+ suicide_messages = list(
+ "is attempting to bite their tongue off!",
+ "is jamming their claws into their eye sockets!",
+ "is twisting their own neck!",
+ "is holding their breath!",
+ "is huffing oxygen!")
+
+/datum/species/vox/armalis/handle_reagents() //Skip the Vox oxygen reagent toxicity. Armalis are above such things.
+ return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/vulpkanin.dm b/code/modules/mob/living/carbon/human/species/vulpkanin.dm
new file mode 100644
index 00000000000..5746fe125c9
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/vulpkanin.dm
@@ -0,0 +1,52 @@
+/datum/species/vulpkanin
+ name = "Vulpkanin"
+ name_plural = "Vulpkanin"
+ icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
+ deform = 'icons/mob/human_races/r_vulpkanin.dmi'
+ language = "Canilunzt"
+ primitive_form = /datum/species/monkey/vulpkanin
+ tail = "vulptail"
+ skinned_type = /obj/item/stack/sheet/fur
+ unarmed_type = /datum/unarmed_attack/claws
+
+ blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
+ dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
+ culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
+ to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
+ which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
+
+ species_traits = list(LIPS)
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
+ bodyflags = HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR
+ dietflags = DIET_OMNI
+ hunger_drain = 0.11
+ taste_sensitivity = TASTE_SENSITIVITY_SHARP
+ reagent_tag = PROCESS_ORG
+ flesh_color = "#966464"
+ base_color = "#CF4D2F"
+ butt_sprite = "vulp"
+
+ scream_verb = "yelps"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart,
+ "lungs" = /obj/item/organ/internal/lungs,
+ "liver" = /obj/item/organ/internal/liver/vulpkanin,
+ "kidneys" = /obj/item/organ/internal/kidneys,
+ "brain" = /obj/item/organ/internal/brain,
+ "appendix" = /obj/item/organ/internal/appendix,
+ "eyes" = /obj/item/organ/internal/eyes/vulpkanin /*Most Vulpkanin see in full colour as a result of genetic augmentation, although it cost them their darksight (darksight = 2)
+ unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/
+ )
+
+ allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken,
+ /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/tribble)
+
+ suicide_messages = list(
+ "is attempting to bite their tongue off!",
+ "is jamming their claws into their eye sockets!",
+ "is twisting their own neck!",
+ "is holding their breath!")
+
+/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
+ H.stop_tail_wagging(1)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/wryn.dm
similarity index 61%
rename from code/modules/mob/living/carbon/human/species/apollo.dm
rename to code/modules/mob/living/carbon/human/species/wryn.dm
index 5a3e1d4cde9..5606cd81e9b 100644
--- a/code/modules/mob/living/carbon/human/species/apollo.dm
+++ b/code/modules/mob/living/carbon/human/species/wryn.dm
@@ -75,46 +75,4 @@
add_attack_logs(user, target, "Antennae removed")
return 0
else
- ..()
-
-/datum/species/nucleation
- name = "Nucleation"
- name_plural = "Nucleations"
- icobase = 'icons/mob/human_races/r_nucleation.dmi'
- blurb = "A sub-race of unfortunates who have been exposed to too much supermatter radiation. As a result, \
- supermatter crystal clusters have begun to grow across their bodies. Research to find a cure for this ailment \
- has been slow, and so this is a common fate for veteran engineers. The supermatter crystals produce oxygen, \
- negating the need for the individual to breathe. Their massive change in biology, however, renders most medicines \
- obselete. Ionizing radiation seems to cause resonance in some of their crystals, which seems to encourage regeneration \
- and produces a calming effect on the individual. Nucleations are highly stigmatized, and are treated much in the same \
- way as lepers were back on Earth."
- language = "Sol Common"
- burn_mod = 4 // holy shite, poor guys wont survive half a second cooking smores
- brute_mod = 2 // damn, double wham, double dam
- oxy_mod = 0
- species_traits = list(LIPS, IS_WHITELISTED, NO_BREATHE, NO_BLOOD, NO_PAIN, NO_SCAN, RADIMMUNE)
- dietflags = DIET_OMNI //still human at their core, so they maintain their eating habits and diet
-
- //Default styles for created mobs.
- default_hair = "Nucleation Crystals"
-
- reagent_tag = PROCESS_ORG
- has_organ = list(
- "heart" = /obj/item/organ/internal/heart,
- "crystallized brain" = /obj/item/organ/internal/brain/crystal,
- "eyes" = /obj/item/organ/internal/eyes/luminescent_crystal, //Standard darksight of 2.
- "strange crystal" = /obj/item/organ/internal/nucleation/strange_crystal
- )
- vision_organ = /obj/item/organ/internal/eyes/luminescent_crystal
-
-/datum/species/nucleation/handle_post_spawn(var/mob/living/carbon/human/H)
- H.light_color = "#1C1C00"
- H.set_light(2)
- return ..()
-
-/datum/species/nucleation/handle_death(var/mob/living/carbon/human/H)
- var/turf/T = get_turf(H)
- H.visible_message("[H]'s body explodes, leaving behind a pile of microscopic crystals!")
- explosion(T, 0, 0, 2, 2) // Create a small explosion burst upon death
-// new /obj/item/shard/supermatter( T )
- qdel(H)
\ No newline at end of file
+ ..()
\ No newline at end of file
diff --git a/paradise.dme b/paradise.dme
index 8993f3f625d..96675812fdb 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1664,15 +1664,28 @@
#include "code\modules\mob\living\carbon\human\interactive\functions.dm"
#include "code\modules\mob\living\carbon\human\interactive\interactive.dm"
#include "code\modules\mob\living\carbon\human\interactive\prefabs.dm"
+#include "code\modules\mob\living\carbon\human\species\_species.dm"
#include "code\modules\mob\living\carbon\human\species\abductor.dm"
-#include "code\modules\mob\living\carbon\human\species\apollo.dm"
+#include "code\modules\mob\living\carbon\human\species\diona.dm"
+#include "code\modules\mob\living\carbon\human\species\drask.dm"
#include "code\modules\mob\living\carbon\human\species\golem.dm"
+#include "code\modules\mob\living\carbon\human\species\grey.dm"
+#include "code\modules\mob\living\carbon\human\species\human.dm"
+#include "code\modules\mob\living\carbon\human\species\kidan.dm"
+#include "code\modules\mob\living\carbon\human\species\machine.dm"
#include "code\modules\mob\living\carbon\human\species\monkey.dm"
+#include "code\modules\mob\living\carbon\human\species\nucleation.dm"
#include "code\modules\mob\living\carbon\human\species\plasmaman.dm"
#include "code\modules\mob\living\carbon\human\species\shadow.dm"
+#include "code\modules\mob\living\carbon\human\species\shadowling.dm"
#include "code\modules\mob\living\carbon\human\species\skeleton.dm"
-#include "code\modules\mob\living\carbon\human\species\species.dm"
-#include "code\modules\mob\living\carbon\human\species\station.dm"
+#include "code\modules\mob\living\carbon\human\species\skrell.dm"
+#include "code\modules\mob\living\carbon\human\species\slime.dm"
+#include "code\modules\mob\living\carbon\human\species\tajaran.dm"
+#include "code\modules\mob\living\carbon\human\species\unathi.dm"
+#include "code\modules\mob\living\carbon\human\species\vox.dm"
+#include "code\modules\mob\living\carbon\human\species\vulpkanin.dm"
+#include "code\modules\mob\living\carbon\human\species\wryn.dm"
#include "code\modules\mob\living\carbon\slime\death.dm"
#include "code\modules\mob\living\carbon\slime\emote.dm"
#include "code\modules\mob\living\carbon\slime\examine.dm"