diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 161d4caca11..20fb3cb23ab 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -37,6 +37,7 @@
var/hair_color = null // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
+ var/exotic_blood = null // If your race wants to bleed something other than bog standard blood, change this.
var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human //What the species drops on gibbing
var/list/no_equip = list() // slots the race can't equip stuff to
var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm
index 15c107c539b..4297f6a1944 100644
--- a/code/modules/mob/living/carbon/human/species_types.dm
+++ b/code/modules/mob/living/carbon/human/species_types.dm
@@ -158,7 +158,33 @@
hair_alpha = 150
ignored_by = list(/mob/living/carbon/slime)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/slime
+ exotic_blood = /datum/reagent/toxin/slimejelly
+ var/recently_changed = 1
+/datum/species/slime/spec_life(mob/living/carbon/human/H)
+ if(!H.reagents.get_reagent_amount("slimejelly"))
+ if(recently_changed)
+ H.reagents.add_reagent("slimejelly", 80)
+ recently_changed = 0
+ else
+ H.reagents.add_reagent("slimejelly", 5)
+ H.adjustBruteLoss(5)
+ H << "You feel empty!"
+
+ for(var/datum/reagent/toxin/slimejelly/S in H.reagents.reagent_list)
+ if(S.volume < 100)
+ if(H.nutrition >= NUTRITION_LEVEL_STARVING)
+ H.reagents.add_reagent("slimejelly", 0.5)
+ H.nutrition -= 5
+ if(S.volume < 50)
+ if(prob(5))
+ H << "You feel drained!"
+ if(S.volume < 10)
+ H.losebreath++
+
+/datum/species/slime/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ if(chem.id == "slimejelly")
+ return 1
/*
JELLYPEOPLE
*/
@@ -172,7 +198,32 @@
eyes = "jelleyes"
specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/slime
+ exotic_blood = /datum/reagent/toxin/slimejelly
+ var/recently_changed = 1
+/datum/species/jelly/spec_life(mob/living/carbon/human/H)
+ if(!H.reagents.get_reagent_amount("slimejelly"))
+ if(recently_changed)
+ H.reagents.add_reagent("slimejelly", 80)
+ recently_changed = 0
+ else
+ H.reagents.add_reagent("slimejelly", 5)
+ H.adjustBruteLoss(5)
+ H << "You feel empty!"
+
+ for(var/datum/reagent/toxin/slimejelly/S in H.reagents.reagent_list)
+ if(S.volume < 100)
+ if(H.nutrition >= NUTRITION_LEVEL_STARVING)
+ H.reagents.add_reagent("slimejelly", 0.5)
+ H.nutrition -= 5
+ else if(prob(5))
+ H << "You feel drained!"
+ if(S.volume < 10)
+ H.losebreath++
+
+/datum/species/jelly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ if(chem.id == "slimejelly")
+ return 1
/*
GOLEMS
*/
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index a97f1f44a08..6b75ddc95df 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -68,7 +68,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.dna)
- if(NOBLOOD in H.dna.species.specflags)
+ if(NOBLOOD in H.dna.species.specflags && !H.dna.species.exotic_blood)
user << "You are unable to locate any blood."
return
if(reagents.has_reagent("blood"))
@@ -94,6 +94,13 @@
var/datum/reagent/B
B = T.take_blood(src,amount)
+ if(!B && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(H.dna && H.dna.species.exotic_blood && H.reagents.total_volume)
+ target.reagents.trans_to(src, amount)
+ else
+ user << "You are unable to locate any blood."
+ return
if (B)
src.reagents.reagent_list += B
src.reagents.update_total()