diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 971fb7f5706..2d26e788c3e 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -9,7 +9,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
config_tag = "changeling"
restricted_jobs = list("AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent")
- protected_species = list("Machine")
+ protected_species = list("Machine", "Slime People")
required_players = 2
required_players_secret = 10
required_enemies = 1
diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm
index f63fdd6d862..2e6883196bc 100644
--- a/code/game/gamemodes/changeling/powers/tiny_prick.dm
+++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm
@@ -37,6 +37,8 @@
if(H.species.flags & IS_SYNTHETIC)
user << "This won't work on synthetics."
return
+ if(H.species.flags & NO_SCAN) //Prevents transforming slimes and killing them instantly
+ user << "This won't work on a creature with abnormal genetic material."
if(!isturf(user.loc))
return
if(get_dist(user, target) > (user.mind.changeling.sting_range))
diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm
index 193a2e3574d..ce4c8f77887 100644
--- a/code/game/gamemodes/changeling/traitor_chan.dm
+++ b/code/game/gamemodes/changeling/traitor_chan.dm
@@ -7,7 +7,7 @@
required_players_secret = 10
required_enemies = 2
recommended_enemies = 3
- var/protected_species_changeling = list("Machine")
+ var/protected_species_changeling = list("Machine", "Slime People")
/datum/game_mode/traitor/changeling/announce()
world << "The current game mode is - Traitor+Changeling!"
@@ -24,11 +24,11 @@
for(var/job in restricted_jobs)//Removing robots from the list
if(player.assigned_role == job)
possible_changelings -= player
-
+
for(var/mob/new_player/player in player_list)
if((player.mind in possible_changelings) && (player.client.prefs.species in protected_species_changeling))
possible_changelings -= player.mind
-
+
if(possible_changelings.len>0)
var/datum/mind/changeling = pick(possible_changelings)
//possible_changelings-=changeling
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index e768546c883..fafb26fedd2 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -730,7 +730,31 @@ datum
required_reagents = list("chlorine" = 1, "hydrogen" = 1, "nitrogen" = 1)
result_amount = 3
-
+///////Changeling Blood Test/////////////
+ changeling_test
+ name = "Changeling blood test"
+ id = "changelingblood"
+ result = "blood"
+ required_reagents = list("blood" = 5)
+ required_catalysts = list("fuel")
+ result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred.
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ if(!holder.reagent_list) //reagent_list is not null
+ return
+ var/datum/reagent/blood/B = locate() in holder.reagent_list
+ if(!B) //B is not null
+ return
+ var/mob/living/carbon/human/H = B.data["donor"]
+ if(!H) //H is not null.
+ return
+ if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling.
+ for(var/mob/M in viewers(get_turf_loc(holder.my_atom), null))
+ M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2)
+ else
+ for(var/mob/M in viewers(get_turf_loc(holder.my_atom), null))
+ M.show_message( "The blood seems to break apart in the fuel.", 1)
+ holder.del_reagent("blood")
+ return
/////////////////////////////////////OLD SLIME CORE REACTIONS ///////////////////////////////
/*
slimepepper
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index a7332fc5b92..e24bcb4c90a 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -90,6 +90,23 @@
user << "\red You are unable to locate any blood."
return
+
+ var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port.
+ if(istype(target,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = T
+ if((H.species.bloodflags & BLOOD_SLIME) || (H.species.flags & NO_BLOOD))
+ usr << "You are unable to locate any blood."
+ return
+ if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
+ time = 60
+ if(target == user)
+ time = 0
+ else
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] is trying to take a blood sample from []!", user, target), 1)
+ if(!do_mob(user, target, time))
+ return
+
var/datum/reagent/B
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
@@ -105,9 +122,10 @@
src.reagents.update_total()
src.on_reagent_change()
src.reagents.handle_reactions()
- user << "\blue You take a blood sample from [target]"
- for(var/mob/O in viewers(4, user))
- O.show_message("\red [user] takes a blood sample from [target].", 1)
+
+ user << "\blue You take a blood sample from [target]"
+ for(var/mob/O in viewers(4, user))
+ O.show_message("\red [user] takes a blood sample from [target].", 1)
else //if not mob
if(!target.reagents.total_volume)