diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index eb2a564d1b..c9e2f465cf 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -30,6 +30,8 @@ proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user' GLOB.whitelisted_species_list[S.id] = S.type return GLOB.whitelisted_species_list + //blood types +GLOBAL_LIST_INIT(blood_types, list("blood","syntheticblood","xenoblood","oilblood","jellyblood")) //Mammal Species GLOBAL_LIST_EMPTY(mam_body_markings_list) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index bb0deec49a..2d1b922db8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -319,12 +319,12 @@ //returns the mob's dna info as a list, to be inserted in an object's blood_DNA list /mob/living/proc/get_blood_dna_list() - if(get_blood_id() != "blood") + if(get_blood_id() == null) return return list("ANIMAL DNA" = "Y-") /mob/living/carbon/get_blood_dna_list() - if(get_blood_id() != "blood") + if(get_blood_id() == null) return var/list/blood_dna = list() if(dna) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 2520250020..992028f424 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -138,17 +138,27 @@ if(iscarbon(AM)) var/mob/living/carbon/C = AM - if(blood_id == C.get_blood_id())//both mobs have the same blood substance - if(blood_id == "blood") //normal blood - if(blood_data["viruses"]) - for(var/thing in blood_data["viruses"]) - var/datum/disease/D = thing - if((D.spread_flags & DISEASE_SPREAD_SPECIAL) || (D.spread_flags & DISEASE_SPREAD_NON_CONTAGIOUS)) - continue - C.ForceContractDisease(D) - if(!(blood_data["blood_type"] in get_safe_blood(C.dna.blood_type))) - C.reagents.add_reagent("toxin", amount * 0.5) - return 1 + for(var/bluhduh in GLOB.blood_types[blood_id]) + if(blood_id == C.get_blood_id())//both mobs have the same blood substance + if(bluhduh) //actual blood reagent + if(blood_data["viruses"]) + for(var/thing in blood_data["viruses"]) + var/datum/disease/D = thing + if((D.spread_flags & DISEASE_SPREAD_SPECIAL) || (D.spread_flags & DISEASE_SPREAD_NON_CONTAGIOUS)) + continue + C.ForceContractDisease(D) + if(!(blood_data["blood_type"] in get_safe_blood(C.dna.blood_type))) + if((blood_data["blood_type"] == "GEL") && (C.dna.species.exotic_blood != "jellyblood")) + C.reagents.add_reagent("toxin", amount * 1.5) //filthy xenos bloooood + else if((blood_data["blood_type"] == "HF") && (C.dna.species.exotic_blood != "oilblood")) + C.reagents.add_reagent("toxin", amount * 1) //don't fucking put oil in people + else if((blood_data["blood_type"] == "X*") && (C.dna.species.exotic_blood != "xenoblood")) + C.reagents.add_reagent("toxin", amount * 1.5) //acid blooood + else + C.reagents.add_reagent("toxin", amount * 0.5) + else + C.blood_volume = min(C.blood_volume + round(amount, 0.1), BLOOD_VOLUME_MAXIMUM) + return 1 C.blood_volume = min(C.blood_volume + round(amount, 0.1), BLOOD_VOLUME_MAXIMUM) return 1 @@ -161,49 +171,50 @@ return /mob/living/carbon/get_blood_data(blood_id) - if(blood_id == "blood") //actual blood reagent - var/blood_data = list() - //set the blood data - blood_data["donor"] = src - blood_data["viruses"] = list() + for(var/bluhduh in GLOB.blood_types[blood_id]) + if(bluhduh) //actual blood reagent + var/blood_data = list() + //set the blood data + blood_data["donor"] = src + blood_data["viruses"] = list() - for(var/thing in diseases) - var/datum/disease/D = thing - blood_data["viruses"] += D.Copy() + for(var/thing in diseases) + var/datum/disease/D = thing + blood_data["viruses"] += D.Copy() - blood_data["blood_DNA"] = copytext(dna.unique_enzymes,1,0) - if(disease_resistances && disease_resistances.len) - blood_data["resistances"] = disease_resistances.Copy() - var/list/temp_chem = list() - for(var/datum/reagent/R in reagents.reagent_list) - temp_chem[R.id] = R.volume - blood_data["trace_chem"] = list2params(temp_chem) - if(mind) - blood_data["mind"] = mind - else if(last_mind) - blood_data["mind"] = last_mind - if(ckey) - blood_data["ckey"] = ckey - else if(last_mind) - blood_data["ckey"] = ckey(last_mind.key) + blood_data["blood_DNA"] = copytext(dna.unique_enzymes,1,0) + if(disease_resistances && disease_resistances.len) + blood_data["resistances"] = disease_resistances.Copy() + var/list/temp_chem = list() + for(var/datum/reagent/R in reagents.reagent_list) + temp_chem[R.id] = R.volume + blood_data["trace_chem"] = list2params(temp_chem) + if(mind) + blood_data["mind"] = mind + else if(last_mind) + blood_data["mind"] = last_mind + if(ckey) + blood_data["ckey"] = ckey + else if(last_mind) + blood_data["ckey"] = ckey(last_mind.key) - if(!suiciding) - blood_data["cloneable"] = 1 - blood_data["blood_type"] = copytext(dna.blood_type,1,0) - blood_data["gender"] = gender - blood_data["real_name"] = real_name - blood_data["features"] = dna.features - blood_data["factions"] = faction - blood_data["quirks"] = list() - for(var/V in roundstart_quirks) - var/datum/quirk/T = V - blood_data["quirks"] += T.type - blood_data["changeling_loudness"] = 0 - if(mind) - var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling) - if(istype(ling)) - blood_data["changeling_loudness"] = ling.loudfactor - return blood_data + if(!suiciding) + blood_data["cloneable"] = 1 + blood_data["blood_type"] = copytext(dna.blood_type,1,0) + blood_data["gender"] = gender + blood_data["real_name"] = real_name + blood_data["features"] = dna.features + blood_data["factions"] = faction + blood_data["quirks"] = list() + for(var/V in roundstart_quirks) + var/datum/quirk/T = V + blood_data["quirks"] += T.type + blood_data["changeling_loudness"] = 0 + if(mind) + var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling) + if(istype(ling)) + blood_data["changeling_loudness"] = ling.loudfactor + return blood_data //get the id of the substance this mob use as blood. /mob/proc/get_blood_id() @@ -221,7 +232,7 @@ if(dna.species.exotic_blood) return dna.species.exotic_blood else if((NOBLOOD in dna.species.species_traits) || (has_trait(TRAIT_NOCLONE))) - return + return null return "blood" // This is has more potential uses, and is probably faster than the old proc. @@ -241,9 +252,10 @@ "O+" = list("O-", "O+","SY"), "L" = list("L","SY"), "U" = list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+", "L", "U","SY"), - "oil" = list("oil", "SY"), + "HF" = list("HF", "SY"), "X*" = list("X*", "SY"), - "SY" = list("SY") + "SY" = list("SY"), + "GEL" = list("GEL","SY") ) var/safe = bloodtypes_safe[bloodtype] @@ -252,7 +264,7 @@ //to add a splatter of blood or other mob liquid. /mob/living/proc/add_splatter_floor(turf/T, small_drip) - if(get_blood_id() != "blood") + if(get_blood_id() == null) return if(!T) T = get_turf(src) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 0461fb9b79..da06d81609 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -9,7 +9,7 @@ default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_snouts" = "None", "taur" = "None") //CIT CHANGE inherent_traits = list(TRAIT_TOXINLOVER) meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime - exotic_blood = "slimejelly" + exotic_blood = "jellyblood" damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs var/datum/action/innate/slime_change/slime_change //CIT CHANGE diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index afcbf6e948..38954c4b67 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -495,8 +495,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp . = BLOOD_COLOR_SYNTHETIC if("L")//lizard, a bit pink/purple . = "#DB004D" - if("X*")//xeno blood; not actually used in many spots + if("X*")//xeno blood; greenish yellow . = BLOOD_COLOR_XENO - if("OI")// Oil blood. something something why not + if("HF")// Oil/Hydraulic blood. something something why not. reee . = BLOOD_COLOR_OIL + if("GEL")// slimepeople blood, rgb 0, 255, 144 + . = "#00FF90" //add more stuff to the switch if you have more blood colors for different types diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 00805b54a1..3ac628a6dc 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -29,6 +29,12 @@ if(C.get_blood_id() == "blood" && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) C.reagents.add_reagent("toxin", reac_volume * 0.5) + if(data && (data["blood_type"] == "GEL") && (C.dna.species.exotic_blood != "jellyblood")) + C.reagents.add_reagent("toxin", reac_volume * 1.5) //filthy xenos bloooood + if(data && (data["blood_type"] == "HF") && (C.dna.species.exotic_blood != "oilblood")) + C.reagents.add_reagent("toxin", reac_volume * 1) //don't fucking put oil in people + if(data && (data["blood_type"] == "X*") && (C.dna.species.exotic_blood != "xenoblood")) + C.reagents.add_reagent("toxin", reac_volume * 1.5) //acid blooood else C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM) @@ -106,12 +112,31 @@ shot_glass_icon_state = "shotglassgreen" /datum/reagent/blood/oil - data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "blood_type"="oil","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "blood_type"="HF","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) name = "Hydraulic Blood" id = "oilblood" taste_description = "burnt oil" color = BLOOD_COLOR_OIL // dark, y'know, expected batman colors. +/datum/reagent/blood/jellyblood + data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) + name = "Slime Jelly Blood" + id = "jellyblood" + description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." + color = "#00FF90" + taste_description = "slime" + taste_mult = 1.3 + +/datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M) + if(prob(10)) + to_chat(M, "Your insides are burning!") + M.adjustToxLoss(rand(20,60)*REM, 0) + . = 1 + else if(prob(40)) + M.heal_bodypart_damage(5*REM) + . = 1 + ..() + /datum/reagent/liquidgibs name = "Liquid gibs" id = "liquidgibs" diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index dc7c32d925..740fb95877 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -233,6 +233,12 @@ results = list("regen_jelly" = 2) required_reagents = list("tricordrazine" = 1, "slimejelly" = 1) +/datum/chemical_reaction/jelly_convert + name = "Blood Jelly Conversion" + id = "blood_jelly" + results = list("slimejelly" = 1) + required_reagents = list("toxin" = 1, "jellyblood" = 1) + /datum/chemical_reaction/corazone name = "Corazone" id = "corazone" diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 6b6349c0f3..89e6eca180 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -204,7 +204,7 @@ miss_sound = 'sound/weapons/slashmiss.ogg' meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno skinned_type = /obj/item/stack/sheet/animalhide/xeno - exotic_bloodtype = "L" + exotic_bloodtype = "xenoblood" damage_overlay_type = "xeno" liked_food = MEAT diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm index bbbe863ec2..e132dbfc2c 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -12,7 +12,7 @@ default_features = list("ipc_screen" = "Blank", "ipc_antenna" = "None") meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc - exotic_blood = "oil" + exotic_blood = "oilblood" var/datum/action/innate/monitor_change/screen