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)