From 246a344fed5d73db8eedd0ae2db7a01bb9229b8e Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 16 May 2019 00:58:30 +0100 Subject: [PATCH] Mreac fixed, tongue health, pH vars+ (drink, food, pryo, tox remain) --- code/datums/components/mood.dm | 2 +- code/modules/jobs/job_types/medical.dm | 1 + code/modules/mob/living/taste.dm | 26 ++++++ code/modules/reagents/chemistry/holder.dm | 21 +++-- code/modules/reagents/chemistry/reagents.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 27 ++++++ .../chemistry/reagents/drug_reagents.dm | 9 ++ .../chemistry/reagents/food_reagents.dm | 8 ++ .../chemistry/reagents/medicine_reagents.dm | 54 ++++++++++++ .../chemistry/reagents/other_reagents.dm | 66 +++++++++++++- code/modules/surgery/organs/tongue.dm | 32 +++++++ code/modules/vending/wardrobes.dm | 3 +- .../chemistry/reagents/fermi_reagents.dm | 81 +++++++++++++----- .../reagents/chemistry/recipes/fermi.dm | 4 +- .../code/modules/reagents/objects/items.dm | 4 + modular_citadel/icons/obj/FermiChem.dmi | Bin 814 -> 1877 bytes 16 files changed, 300 insertions(+), 40 deletions(-) diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index db82234831..3f993bdd73 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -255,7 +255,7 @@ if(the_event.timeout) addtimer(CALLBACK(src, .proc/clear_event, null, category), the_event.timeout, TIMER_UNIQUE|TIMER_OVERRIDE) return 0 //Don't have to update the event. - the_event = new type(src, param) + the_event = new type(src, param)//This causes a runtime for some reason, was this me? mood_events[category] = the_event update_mood() diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm index 5a926f490a..6447077173 100644 --- a/code/modules/jobs/job_types/medical.dm +++ b/code/modules/jobs/job_types/medical.dm @@ -127,6 +127,7 @@ Chemist backpack = /obj/item/storage/backpack/chemistry satchel = /obj/item/storage/backpack/satchel/chem duffelbag = /obj/item/storage/backpack/duffelbag/med + l_hand = /obj/item/pHbooklet chameleon_extras = /obj/item/gun/syringe diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index 534bf36c59..71eb84ab5e 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -32,4 +32,30 @@ last_taste_time = world.time last_taste_text = text_output +//FermiChem - How to check pH of a beaker without a meter/pH paper. +//Basically checks the pH of the holder and burns your poor tongue if it's too acidic! +//TRAIT_AGEUSIA players can't taste, unless it's burning them. +//10 sips of a strongly acidic substance will burn your tongue. +/mob/living/carbon/taste(datum/reagents/from) + var/obj/item/organ/tongue/T = src.getorganslot("tongue") + if (!T) + return + ..() + return + if ((from.pH > 12.5) || (from.pH < 1.5)) + to_chat(src, "You taste chemical burns!") + T.adjustTongueLoss(src, 5) + if (!has_trait(TRAIT_AGEUSIA)) //I'll let you get away with not having 1 damage. (add trait that lets you taste this) + switch(from.pH) + if(11.5 to 12.5) + to_chat(src, "You taste a strong alkaline flavour!") + T.adjustTongueLoss(src, 1) + if(8.5 to 11.5) + to_chat(src, "You taste a sort of soapy tone in the mixture.") + if(2.5 to 5.5) + to_chat(src, "You taste a sort of acid tone in the mixture.") + if(1.5 to 2.5) + to_chat(src, "You taste a strong acidic flavour!") + T.adjustTongueLoss(src, 1) + #undef DEFAULT_TASTE_SENSITIVITY diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 6466ac8b61..27b8b440f4 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -623,26 +623,19 @@ //For now, purity is handled elsewhere - //Calculate DeltaT (Deviation of T from optimal) - if (chem_temp < C.OptimalTempMax && chem_temp >= C.OptimalTempMin) - deltaT = (((C.OptimalTempMin - chem_temp)**C.CurveSharpT)/((C.OptimalTempMax - C.OptimalTempMin)**C.CurveSharpT)) - else if (chem_temp >= C.OptimalTempMax) - deltaT = 1 - else - deltaT = 0 - message_admins("calculating temperature factor, min: [C.OptimalTempMin], max: [C.OptimalTempMax], Exponential: [C.CurveSharpT], deltaT: [deltaT]") - //Calculate DeltapH (Deviation of pH from optimal) //Lower range if (pH < C.OptimalpHMin) if (pH < (C.OptimalpHMin - C.ReactpHLim)) deltapH = 0 + return//If outside pH range, no reaction else deltapH = (((pH - (C.OptimalpHMin - C.ReactpHLim))**C.CurveSharppH)/(C.ReactpHLim**C.CurveSharppH)) //Upper range else if (pH > C.OptimalpHMin) if (pH > (C.OptimalpHMin + C.ReactpHLim)) deltapH = 0 + return //If outside pH range, no reaction else deltapH = ((C.ReactpHLim -(pH - (C.OptimalpHMax + C.ReactpHLim))+C.ReactpHLim)/(C.ReactpHLim**C.CurveSharppH)) //Within mid range @@ -655,6 +648,16 @@ //TODO Add CatalystFact message_admins("calculating pH factor(purity), pH: [pH], min: [C.OptimalpHMin]-[C.ReactpHLim], max: [C.OptimalpHMax]+[C.ReactpHLim], deltapH: [deltapH]") + //Calculate DeltaT (Deviation of T from optimal) + if (chem_temp < C.OptimalTempMax && chem_temp >= C.OptimalTempMin) + deltaT = (((C.OptimalTempMin - chem_temp)**C.CurveSharpT)/((C.OptimalTempMax - C.OptimalTempMin)**C.CurveSharpT)) + else if (chem_temp >= C.OptimalTempMax) + deltaT = 1 + else + deltaT = 0 + message_admins("calculating temperature factor, min: [C.OptimalTempMin], max: [C.OptimalTempMax], Exponential: [C.CurveSharpT], deltaT: [deltaT]") + + stepChemAmmount = targetVol * deltaT if (stepChemAmmount > C.RateUpLim) stepChemAmmount = C.RateUpLim diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index dd1bd31aaf..93c40785f3 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -37,7 +37,7 @@ var/purity = 1 var/impureChem = "toxin" var/loc = null //Should be the creation location! - var/pH + var/pH = 7 /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references . = ..() diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 92d9da401b..d011b1a8cb 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -14,6 +14,7 @@ nutriment_factor = 0 taste_description = "alcohol" var/boozepwr = 65 //Higher numbers equal higher hardness, higher hardness equals more intense alcohol poisoning + pH = 7.33 /* Boozepwr Chart @@ -86,6 +87,8 @@ All effects don't start immediately, but rather get worse over time; the rate is taste_description = "piss water" glass_name = "glass of beer" glass_desc = "A freezing pint of beer." + pH = 4 + /datum/reagent/consumable/ethanol/beer/light name = "Light Beer" @@ -95,6 +98,7 @@ All effects don't start immediately, but rather get worse over time; the rate is taste_description = "dish water" glass_name = "glass of light beer" glass_desc = "A freezing pint of watery light beer." + pH = 5 /datum/reagent/consumable/ethanol/beer/green name = "Green Beer" @@ -105,6 +109,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "greenbeerglass" glass_name = "glass of green beer" glass_desc = "A freezing pint of green beer. Festive." + pH = 6 /datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M) if(M.color != color) @@ -124,6 +129,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of RR coffee liquor" glass_desc = "DAMN, THIS THING LOOKS ROBUST!" shot_glass_icon_state = "shotglasscream" + pH = 6 + /datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) @@ -145,6 +152,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of whiskey" glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." shot_glass_icon_state = "shotglassbrown" + pH = 4.5 /datum/reagent/consumable/ethanol/thirteenloko name = "Thirteen Loko" @@ -161,6 +169,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of Thirteen Loko" glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." + /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-40) @@ -221,6 +230,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of vodka" glass_desc = "The glass contain wodka. Xynta." shot_glass_icon_state = "shotglassclear" + pH = 4 /datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M) M.radiation = max(M.radiation-2,0) @@ -255,6 +265,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "threemileislandglass" glass_name = "Three Mile Island Ice Tea" glass_desc = "A glass of this is sure to prevent a meltdown." + pH = 3.5 /datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M) M.set_drugginess(50) @@ -270,6 +281,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "ginvodkaglass" glass_name = "glass of gin" glass_desc = "A crystal clear glass of Griffeater gin." + pH = 6.9 /datum/reagent/consumable/ethanol/rum name = "Rum" @@ -282,6 +294,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of rum" glass_desc = "Now you want to Pray for a pirate suit, don't you?" shot_glass_icon_state = "shotglassbrown" + pH = 6.5 /datum/reagent/consumable/ethanol/tequila name = "Tequila" @@ -294,6 +307,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of tequila" glass_desc = "Now all that's missing is the weird colored shades!" shot_glass_icon_state = "shotglassgold" + pH = 4 /datum/reagent/consumable/ethanol/vermouth name = "Vermouth" @@ -306,6 +320,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of vermouth" glass_desc = "You wonder why you're even drinking this straight." shot_glass_icon_state = "shotglassclear" + pH = 3.25 /datum/reagent/consumable/ethanol/wine name = "Wine" @@ -318,6 +333,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of wine" glass_desc = "A very classy looking drink." shot_glass_icon_state = "shotglassred" + pH = 3.45 /datum/reagent/consumable/ethanol/lizardwine name = "Lizard wine" @@ -327,6 +343,7 @@ All effects don't start immediately, but rather get worse over time; the rate is boozepwr = 45 quality = DRINK_FANTASTIC taste_description = "scaley sweetness" + pH = 3 /datum/reagent/consumable/ethanol/grappa name = "Grappa" @@ -338,6 +355,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "grappa" glass_name = "glass of grappa" glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." + pH = 3.5 /datum/reagent/consumable/ethanol/cognac name = "Cognac" @@ -350,6 +368,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of cognac" glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this." shot_glass_icon_state = "shotglassbrown" + pH = 3.5 /datum/reagent/consumable/ethanol/absinthe name = "Absinthe" @@ -390,6 +409,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "aleglass" glass_name = "glass of ale" glass_desc = "A freezing pint of delicious Ale." + pH = 4.5 /datum/reagent/consumable/ethanol/goldschlager name = "Goldschlager" @@ -416,6 +436,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of patron" glass_desc = "Drinking patron in the bar, with all the subpar ladies." shot_glass_icon_state = "shotglassclear" + pH = 4.5 /datum/reagent/consumable/ethanol/gintonic name = "Gin and Tonic" @@ -428,6 +449,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "gintonicglass" glass_name = "Gin and Tonic" glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman." + pH = 3 /datum/reagent/consumable/ethanol/rum_coke name = "Rum and Coke" @@ -440,6 +462,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "whiskeycolaglass" glass_name = "Rum and Coke" glass_desc = "The classic go-to of space-fratboys." + pH = 4 /datum/reagent/consumable/ethanol/cuba_libre name = "Cuba Libre" @@ -453,6 +476,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Cuba Libre" glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!" + /datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. M.adjustBruteLoss(-1, 0) @@ -638,6 +662,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "beepskysmashglass" glass_name = "Beepsky Smash" glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." + pH = 2 /datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/M) if(M.has_trait(TRAIT_ALCOHOL_TOLERANCE)) @@ -1533,6 +1558,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Bastion Bourbon" glass_desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon." shot_glass_icon_state = "shotglassgreen" + pH = 4 /datum/reagent/consumable/ethanol/bastion_bourbon/on_mob_add(mob/living/L) var/heal_points = 10 @@ -1837,6 +1863,7 @@ All effects don't start immediately, but rather get worse over time; the rate is can_synth = FALSE var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit. var/list/tastes = list("bad coding" = 1) //List of tastes. See above. + pH = 4 /datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data) names = data["names"] diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index cd439b1899..cdbc224367 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -15,6 +15,7 @@ description = "An illegal chemical compound used as drug." color = "#60A584" // rgb: 96, 165, 132 overdose_threshold = 30 + pH = 9 /datum/reagent/drug/space_drugs/on_mob_life(mob/living/carbon/M) M.set_drugginess(15) @@ -44,6 +45,7 @@ addiction_threshold = 30 taste_description = "smoke" trippy = FALSE + pH = 8 /datum/reagent/drug/nicotine/on_mob_life(mob/living/carbon/M) if(prob(1)) @@ -65,6 +67,7 @@ color = "#FA00C8" overdose_threshold = 20 addiction_threshold = 10 + pH = 10 /datum/reagent/drug/crank/on_mob_life(mob/living/carbon/M) if(prob(5)) @@ -112,6 +115,7 @@ color = "#0064B4" overdose_threshold = 20 addiction_threshold = 15 + pH = 9 /datum/reagent/drug/krokodil/on_mob_life(mob/living/carbon/M) @@ -164,6 +168,7 @@ overdose_threshold = 20 addiction_threshold = 10 metabolization_rate = 0.75 * REAGENTS_METABOLISM + pH = 5 /datum/reagent/drug/methamphetamine/on_mob_add(mob/living/L) ..() @@ -250,6 +255,7 @@ addiction_threshold = 10 taste_description = "salt" // because they're bathsalts? var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage + pH = 8.2 /datum/reagent/drug/bath_salts/on_mob_add(mob/living/L) ..() @@ -346,6 +352,7 @@ description = "Amps you up and gets you going, fixes all stamina damage you might have but can cause toxin and oxygen damage." reagent_state = LIQUID color = "#78FFF0" + pH = 9.2 /datum/reagent/drug/aranesp/on_mob_life(mob/living/carbon/M) var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") @@ -367,6 +374,7 @@ color = "#FFF378" addiction_threshold = 10 overdose_threshold = 20 + pH = 10.5 /datum/reagent/drug/happiness/on_mob_add(mob/living/L) ..() @@ -446,6 +454,7 @@ addiction_threshold = 1 addiction_stage3_end = 40 addiction_stage4_end = 240 + pH = 12.5 /datum/reagent/drug/skooma/on_mob_add(mob/living/L) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 5071150e24..c5929967ff 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -228,6 +228,7 @@ description = "A special oil that noticably chills the body. Extracted from Icepeppers and slimes." color = "#8BA6E9" // rgb: 139, 166, 233 taste_description = "mint" + pH = 13 //HMM! I wonder /datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M) var/cooling = 0 @@ -273,6 +274,7 @@ description = "A chemical agent used for self-defense and in police work." color = "#B31008" // rgb: 179, 16, 8 taste_description = "scorching agony" + pH = 7.4 /datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(!ishuman(M) && !ismonkey(M)) @@ -400,6 +402,7 @@ color = "#E700E7" // rgb: 231, 0, 231 metabolization_rate = 0.2 * REAGENTS_METABOLISM taste_description = "mushroom" + pH = 11 /datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/carbon/M) M.slurring = max(M.slurring,50) @@ -608,6 +611,7 @@ description = "A blinding substance extracted from certain onions." color = "#c0c9a0" taste_description = "bitterness" + pH = 5 /datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(!istype(M)) @@ -662,6 +666,7 @@ description = "An ichor, derived from a certain mushroom, makes for a bad time." color = "#1d043d" taste_description = "bitter mushroom" + pH = 12 /datum/reagent/consumable/entpoly/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) @@ -682,6 +687,7 @@ description = "A stimulating ichor which causes luminescent fungi to grow on the skin. " color = "#b5a213" taste_description = "tingling mushroom" + pH = 11.2 /datum/reagent/consumable/tinlux/reaction_mob(mob/living/M) M.set_light(2) @@ -696,6 +702,7 @@ color = "#d3a308" nutriment_factor = 3 * REAGENTS_METABOLISM taste_description = "fruity mushroom" + pH = 10.4 /datum/reagent/consumable/vitfro/on_mob_life(mob/living/carbon/M) if(prob(80)) @@ -711,3 +718,4 @@ nutriment_factor = 5 * REAGENTS_METABOLISM color = "#eef442" // rgb: 238, 244, 66 taste_description = "mournful honking" + pH = 9.2 diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index b20880d239..097de0cadc 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -19,6 +19,7 @@ id = "leporazine" description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels." color = "#C8A5DC" // rgb: 200, 165, 220 + pH = 8.4 /datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > BODYTEMP_NORMAL) @@ -82,6 +83,7 @@ id = "synaptizine" description = "Increases resistance to stuns as well as reducing drowsiness and hallucinations." color = "#FF00FF" + pH = 4 /datum/reagent/medicine/synaptizine/on_mob_life(mob/living/carbon/M) M.drowsyness = max(M.drowsyness-5, 0) @@ -101,6 +103,7 @@ id = "synaphydramine" description = "Reduces drowsiness, hallucinations, and Histamine from body." color = "#EC536D" // rgb: 236, 83, 109 + pH = 5.2 /datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M) M.drowsyness = max(M.drowsyness-5, 0) @@ -119,6 +122,7 @@ id = "inacusiate" description = "Instantly restores all hearing to the patient, but does not cure deafness." color = "#6600FF" // rgb: 100, 165, 255 + pH = 2 /datum/reagent/medicine/inacusiate/on_mob_life(mob/living/carbon/M) M.restoreEars() @@ -130,6 +134,7 @@ description = "A chemical mixture with almost magical healing powers. Its main limitation is that the patient's body temperature must be under 270K for it to metabolise correctly." color = "#0000C8" taste_description = "sludge" + pH = 11 /datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M) var/power = -0.00003 * (M.bodytemperature ** 2) + 3 @@ -151,6 +156,7 @@ color = "#0000C8" taste_description = "muscle" metabolization_rate = 1.5 * REAGENTS_METABOLISM + pH = 13 /datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M) if(M.bodytemperature < T0C) @@ -166,6 +172,7 @@ description = "A mixture of cryoxadone and slime jelly, that apparently inverses the requirement for its activation." color = "#f7832a" taste_description = "spicy jelly" + pH = 14 /datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) @@ -197,6 +204,7 @@ color = "#669900" // rgb: 102, 153, 0 overdose_threshold = 30 taste_description = "fish" + ph = 12.2 /datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M) M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. @@ -218,6 +226,7 @@ description = "Spaceacillin will prevent a patient from conventionally spreading any diseases they are currently infected with." color = "#C8A5DC" // rgb: 200, 165, 220 metabolization_rate = 0.1 * REAGENTS_METABOLISM + pH = 8.1 //Goon Chems. Ported mainly from Goonstation. Easily mixable (or not so easily) and provide a variety of effects. /datum/reagent/medicine/silver_sulfadiazine @@ -226,6 +235,7 @@ description = "If used in touch-based applications, immediately restores burn wounds as well as restoring more over time. If ingested through other means, deals minor toxin damage." reagent_state = LIQUID color = "#C8A5DC" + pH = 7.2 /datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) @@ -254,6 +264,7 @@ color = "#f7ffa5" metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 25 + pH = 10.7 /datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M) if(M.getFireLoss() > 50) @@ -275,6 +286,7 @@ description = "If used in touch-based applications, immediately restores bruising as well as restoring more over time. If ingested through other means, deals minor toxin damage." reagent_state = LIQUID color = "#FF9696" + pH = 6.7 /datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) @@ -307,6 +319,7 @@ taste_description = "sweetness and salt" var/last_added = 0 var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active + pH = 5.5 /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M) if(last_added) @@ -321,6 +334,11 @@ M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) . = TRUE + //Fermichem + if (M.reagents.pH < 5.5) + M.reagents.pH += 0.2 + else if (M.reagents.pH > 9.5) + M.reagents.pH -= 0.2 ..() /datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M) @@ -345,6 +363,7 @@ reagent_state = LIQUID color = "#6D6374" metabolization_rate = 0.4 * REAGENTS_METABOLISM + pH = 2.6 /datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C) C.hal_screwyhud = SCREWYHUD_HEALTHY @@ -383,6 +402,7 @@ description = "Has a 100% chance of instantly healing brute and burn damage. One unit of the chemical will heal one point of damage. Touch application only." reagent_state = LIQUID color = "#FFEBEB" + pH = 11.5 /datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1) if(iscarbon(M)) @@ -404,6 +424,7 @@ color = "#000000" metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "ash" + pH = 5 /datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-2*REM, 0) @@ -421,6 +442,7 @@ color = "#DCDCDC" metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 + pH = 2 /datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-0.5*REM, 0) @@ -446,6 +468,7 @@ color = "#19C832" metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "acid" + pH = 1.5 /datum/reagent/medicine/calomel/on_mob_life(mob/living/carbon/M) for(var/datum/reagent/R in M.reagents.reagent_list) @@ -463,6 +486,7 @@ reagent_state = LIQUID color = "#14FF3C" metabolization_rate = 2 * REAGENTS_METABOLISM + pH = 12 //It's a reducing agent /datum/reagent/medicine/potass_iodide/on_mob_life(mob/living/carbon/M) if(M.radiation > 0) @@ -476,6 +500,7 @@ reagent_state = LIQUID color = "#003153" // RGB 0, 49, 83 metabolization_rate = 0.5 * REAGENTS_METABOLISM + pH = 8.9 /datum/reagent/medicine/prussian_blue/on_mob_life(mob/living/carbon/M) if(M.radiation > 0) @@ -489,6 +514,7 @@ reagent_state = LIQUID color = "#E6FFF0" metabolization_rate = 0.5 * REAGENTS_METABOLISM + pH = -1 //One of the best buffers, /datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M) M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/50 @@ -507,6 +533,7 @@ color = "#D2D2D2" metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 25 + pH = 1 /datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M) @@ -530,6 +557,7 @@ reagent_state = LIQUID color = "#00FFFF" metabolization_rate = 0.25 * REAGENTS_METABOLISM + pH = 2 /datum/reagent/medicine/salbutamol/on_mob_life(mob/living/carbon/M) M.adjustOxyLoss(-3*REM, 0) @@ -545,6 +573,7 @@ reagent_state = LIQUID color = "#FF6464" metabolization_rate = 0.25 * REAGENTS_METABOLISM + pH = 11 /datum/reagent/medicine/perfluorodecalin/on_mob_life(mob/living/carbon/human/M) M.adjustOxyLoss(-12*REM, 0) @@ -564,6 +593,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 45 addiction_threshold = 30 + pH = 12 /datum/reagent/medicine/ephedrine/on_mob_life(mob/living/carbon/M) M.AdjustStun(-20, 0) @@ -618,6 +648,7 @@ reagent_state = LIQUID color = "#64FFE6" metabolization_rate = 0.5 * REAGENTS_METABOLISM + pH = 13 /datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M) if(prob(10)) @@ -635,6 +666,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 30 addiction_threshold = 25 + pH = 8.96 /datum/reagent/medicine/morphine/on_mob_add(mob/living/L) ..() @@ -703,6 +735,7 @@ color = "#FFFFFF" metabolization_rate = 0.25 * REAGENTS_METABOLISM taste_description = "dull toxin" + pH = 10 /datum/reagent/medicine/oculine/on_mob_life(mob/living/carbon/M) var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) @@ -734,6 +767,7 @@ color = "#000000" metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 35 + pH = 14 /datum/reagent/medicine/atropine/on_mob_life(mob/living/carbon/M) if(M.health < 0) @@ -763,6 +797,7 @@ color = "#D2FFFA" metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 + pH = 10.2 /datum/reagent/medicine/epinephrine/on_mob_life(mob/living/carbon/M) if(M.health < 0) @@ -799,6 +834,7 @@ color = "#A0E85E" metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "magnets" + pH = 0 /datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/carbon/human/M, method=TOUCH, reac_volume) if(M.stat == DEAD) @@ -832,6 +868,7 @@ id = "mannitol" description = "Efficiently restores brain damage." color = "#DCDCFF" + ph = 10.4 /datum/reagent/medicine/mannitol/on_mob_life(mob/living/carbon/C) C.adjustBrainLoss(-2*REM) @@ -845,6 +882,7 @@ description = "Removes jitteriness and restores genetic defects." color = "#5096C8" taste_description = "acid" + pH = 2 /datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/M) M.jitteriness = 0 @@ -859,6 +897,7 @@ description = "Purges alcoholic substance from the patient's body and eliminates its side effects." color = "#00B4C8" taste_description = "raw egg" + pH = 4 /datum/reagent/medicine/antihol/on_mob_life(mob/living/carbon/M) M.dizziness = 0 @@ -880,6 +919,7 @@ color = "#78008C" metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 + pH = 8.7 /datum/reagent/medicine/stimulants/on_mob_add(mob/living/L) ..() @@ -917,6 +957,7 @@ reagent_state = LIQUID color = "#FFFFF0" metabolization_rate = 0.5 * REAGENTS_METABOLISM + pH = 6.7 /datum/reagent/medicine/insulin/on_mob_life(mob/living/carbon/M) if(M.AdjustSleeping(-20, FALSE)) @@ -932,6 +973,7 @@ reagent_state = LIQUID color = "#C8A5DC" overdose_threshold = 30 + pH = 5 /datum/reagent/medicine/bicaridine/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-2*REM, 0) @@ -950,6 +992,7 @@ reagent_state = LIQUID color = "#C8A5DC" overdose_threshold = 30 + pH = 9.7 /datum/reagent/medicine/dexalin/on_mob_life(mob/living/carbon/M) M.adjustOxyLoss(-2*REM, 0) @@ -968,6 +1011,7 @@ reagent_state = LIQUID color = "#C8A5DC" overdose_threshold = 30 + pH = 9 /datum/reagent/medicine/kelotane/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(-2*REM, 0) @@ -987,6 +1031,7 @@ color = "#C8A5DC" overdose_threshold = 30 taste_description = "a roll of gauze" + pH = 10 /datum/reagent/medicine/antitoxin/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-2*REM, 0) @@ -1006,6 +1051,7 @@ description = "Stabilizes the breathing of patients. Good for those in critical condition." reagent_state = LIQUID color = "#C8A5DC" + pH = 8.5 /datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/carbon/M) if(M.losebreath >= 5) @@ -1060,6 +1106,7 @@ description = "Miniature medical robots that swiftly restore bodily damage." reagent_state = SOLID color = "#555555" + pH = 11 /datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-5*REM, 0) //A ton of healing - this is a 50 telecrystal investment. @@ -1081,6 +1128,7 @@ color = "#91D865" overdose_threshold = 30 taste_description = "jelly" + pH = 13 /datum/reagent/medicine/neo_jelly/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-1.5*REM, 0) @@ -1103,6 +1151,7 @@ description = "Ichor from an extremely powerful plant. Great for restoring wounds, but it's a little heavy on the brain." color = rgb(255, 175, 0) overdose_threshold = 25 + pH = 11 /datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3 * REM, 0) @@ -1130,6 +1179,7 @@ reagent_state = LIQUID color = "#27870a" metabolization_rate = 0.4 * REAGENTS_METABOLISM + pH = 4.3 /datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M) for(var/datum/reagent/drug/R in M.reagents.reagent_list) @@ -1152,6 +1202,7 @@ color = "#C8A5DC" // rgb: 200, 165, 220 overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent can_synth = FALSE + pH = 14 /datum/reagent/medicine/lavaland_extract/on_mob_life(mob/living/carbon/M) M.heal_bodypart_damage(5,5) @@ -1214,6 +1265,7 @@ description = "A medication used to treat pain, fever, and inflammation, along with heart attacks." color = "#F5F5F5" self_consuming = TRUE + pH = 12.5 /datum/reagent/medicine/corazone/on_mob_add(mob/living/M) ..() @@ -1246,6 +1298,7 @@ overdose_threshold = 20 // with the random effects this might be awesome or might kill you at less than 10u (extensively tested) taste_description = "salt" // it actually does taste salty var/overdose_progress = 0 // to track overdose progress + pH = 7.89 /datum/reagent/medicine/modafinil/on_mob_add(mob/living/M) M.add_trait(TRAIT_SLEEPIMMUNE, id) @@ -1311,6 +1364,7 @@ color = "#07E79E" metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 + pH = 9.12 /datum/reagent/medicine/psicodine/on_mob_add(mob/living/L) ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index adfc1a507e..558f2ebdf4 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -10,6 +10,7 @@ glass_name = "glass of tomato juice" glass_desc = "Are you sure this is tomato juice?" shot_glass_icon_state = "shotglassred" + pH = 7.4 /datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(data && data["viruses"]) @@ -95,6 +96,7 @@ description = "You don't even want to think about what's in here." taste_description = "gross iron" shot_glass_icon_state = "shotglassred" + pH = 7.45 /datum/reagent/vaccine //data must contain virus type @@ -195,6 +197,7 @@ glass_icon_state = "glass_clear" glass_name = "glass of holy water" glass_desc = "A glass of holy water." + pH = 7.5 //God is alkaline /datum/reagent/water/holywater/on_mob_add(mob/living/L) ..() @@ -266,6 +269,7 @@ id = "unholywater" description = "Something that shouldn't exist on this plane of existence." taste_description = "suffering" + pH = 6.5 /datum/reagent/fuel/unholywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -308,6 +312,7 @@ M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard? M.adjustBrainLoss(5, 150) holder.remove_reagent(id, 1) + pH = 0.1 /datum/reagent/medicine/omnizine/godblood name = "Godblood" @@ -336,6 +341,7 @@ metabolization_rate = 10 * REAGENTS_METABOLISM // very fast, so it can be applied rapidly. But this changes on an overdose overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle. taste_description = "sour oranges" + pH = 5 /datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(ishuman(M)) @@ -660,6 +666,7 @@ color = "#202040" // rgb: 20, 20, 40 metabolization_rate = 0.25 * REAGENTS_METABOLISM taste_description = "bitterness" + pH = 10 /datum/reagent/serotrotium/on_mob_life(mob/living/carbon/M) if(ishuman(M)) @@ -674,6 +681,7 @@ reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 // oderless and tasteless + pH = 9.2//It's acutally a huge range and very dependant on the chemistry but pH is basically a made up var in it's implementation anyways /datum/reagent/oxygen/reaction_obj(obj/O, reac_volume) if((!O) || (!reac_volume)) @@ -694,6 +702,7 @@ reagent_state = SOLID color = "#6E3B08" // rgb: 110, 59, 8 taste_description = "metal" + pH = 5.5 /datum/reagent/copper/reaction_obj(obj/O, reac_volume) if(istype(O, /obj/item/stack/sheet/metal)) @@ -710,6 +719,7 @@ color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 + /datum/reagent/nitrogen/reaction_obj(obj/O, reac_volume) if((!O) || (!reac_volume)) return 0 @@ -729,6 +739,7 @@ reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 taste_mult = 0 + pH = 0.1//Now I'm stuck in a trap of my own design. Maybe I should make -ve pHes? (not 0 so I don't get div/0 errors) /datum/reagent/potassium name = "Potassium" @@ -760,6 +771,7 @@ reagent_state = SOLID color = "#BF8C00" // rgb: 191, 140, 0 taste_description = "rotten eggs" + pH = 4.5 /datum/reagent/carbon name = "Carbon" @@ -768,6 +780,7 @@ reagent_state = SOLID color = "#1C1300" // rgb: 30, 20, 0 taste_description = "sour chalk" + pH = 5 /datum/reagent/carbon/reaction_turf(turf/T, reac_volume) if(!isspaceturf(T)) @@ -782,6 +795,7 @@ reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 taste_description = "chlorine" + pH = 7.4 /datum/reagent/chlorine/on_mob_life(mob/living/carbon/M) M.take_bodypart_damage(1*REM, 0, 0, 0) @@ -795,6 +809,7 @@ reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 taste_description = "acid" + pH = 2 /datum/reagent/fluorine/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(1*REM, 0) @@ -808,6 +823,7 @@ reagent_state = SOLID color = "#808080" // rgb: 128, 128, 128 taste_description = "salty metal" + pH = 11.6 /datum/reagent/phosphorus name = "Phosphorus" @@ -816,6 +832,7 @@ reagent_state = SOLID color = "#832828" // rgb: 131, 40, 40 taste_description = "vinegar" + pH = 6.5 /datum/reagent/lithium name = "Lithium" @@ -824,6 +841,7 @@ reagent_state = SOLID color = "#808080" // rgb: 128, 128, 128 taste_description = "metal" + pH = 11.3 /datum/reagent/lithium/on_mob_life(mob/living/carbon/M) if(M.canmove && !isspaceturf(M.loc)) @@ -838,6 +856,7 @@ description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." color = "#808080" // rgb: 128, 128, 128 taste_description = "sweetness" + pH = 9 /datum/reagent/radium name = "Radium" @@ -846,6 +865,7 @@ reagent_state = SOLID color = "#C7C7C7" // rgb: 199,199,199 taste_description = "the colour blue and regret" + pH = 10 /datum/reagent/radium/on_mob_life(mob/living/carbon/M) M.apply_effect(2*REM/M.metabolism_efficiency,EFFECT_IRRADIATE,0) @@ -865,6 +885,7 @@ description = "Sterilizes wounds in preparation for surgery." color = "#C8A5DC" // rgb: 200, 165, 220 taste_description = "bitterness" + pH = 10.5 /datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume) if(method in list(TOUCH, VAPOR, PATCH)) @@ -880,6 +901,7 @@ description = "Pure iron is a metal." reagent_state = SOLID taste_description = "iron" + pH = 6 color = "#C8A5DC" // rgb: 200, 165, 220 @@ -922,6 +944,7 @@ reagent_state = SOLID color = "#B8B8C0" // rgb: 184, 184, 192 taste_description = "the inside of a reactor" + pH = 4 /datum/reagent/uranium/on_mob_life(mob/living/carbon/M) M.apply_effect(1/M.metabolism_efficiency,EFFECT_IRRADIATE,0) @@ -942,6 +965,7 @@ reagent_state = SOLID color = "#0000CC" taste_description = "fizzling blue" + pH = 12 /datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -974,6 +998,7 @@ reagent_state = SOLID color = "#A8A8A8" // rgb: 168, 168, 168 taste_mult = 0 + pH = 10 /datum/reagent/fuel name = "Welding fuel" @@ -984,6 +1009,8 @@ glass_icon_state = "dr_gibb_glass" glass_name = "glass of welder fuel" glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption." + pH = 4 + /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite! if(method == TOUCH || method == VAPOR) @@ -1002,6 +1029,7 @@ description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" color = "#A5F0EE" // rgb: 165, 240, 238 taste_description = "sourness" + pH = 5.5 /datum/reagent/space_cleaner/reaction_obj(obj/O, reac_volume) if(istype(O, /obj/effect/decal/cleanable)) @@ -1059,6 +1087,7 @@ description = "A powerful, acidic cleaner sold by Waffle Co. Affects organic matter while leaving other objects unaffected." metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "acid" + pH = 2 /datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(3.33) @@ -1093,6 +1122,7 @@ description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions." color = "#C8A5DC" // rgb: 200, 165, 220A taste_description = "numbness" + pH = 9.1 /datum/reagent/impedrezene/on_mob_life(mob/living/carbon/M) M.jitteriness = max(M.jitteriness-5,0) @@ -1135,6 +1165,7 @@ color = "#92D17D" // rgb: 146, 209, 125 can_synth = FALSE taste_description = "slime" + pH = 11 /datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) @@ -1146,6 +1177,7 @@ description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." color = "#9E6B38" // rgb: 158, 107, 56 taste_description = "metal" + pH = 13 /datum/reagent/foaming_agent// Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually. name = "Foaming agent" @@ -1154,6 +1186,7 @@ reagent_state = SOLID color = "#664B63" // rgb: 102, 75, 99 taste_description = "metal" + pH = 12.5 /datum/reagent/smart_foaming_agent //Smart foaming agent. Functions similarly to metal foam, but conforms to walls. name = "Smart foaming agent" @@ -1162,6 +1195,7 @@ reagent_state = SOLID color = "#664B63" // rgb: 102, 75, 99 taste_description = "metal" + pH = 11.8 /datum/reagent/ammonia name = "Ammonia" @@ -1170,6 +1204,7 @@ reagent_state = GAS color = "#404030" // rgb: 64, 64, 48 taste_description = "mordant" + pH = 11.6 /datum/reagent/diethylamine name = "Diethylamine" @@ -1177,6 +1212,7 @@ description = "A secondary amine, mildly corrosive." color = "#604030" // rgb: 96, 64, 48 taste_description = "iron" + pH = 12 /datum/reagent/carbondioxide name = "Carbon Dioxide" @@ -1185,6 +1221,7 @@ description = "A gas commonly produced by burning carbon fuels. You're constantly producing this in your lungs." color = "#B0B0B0" // rgb : 192, 192, 192 taste_description = "something unknowable" + pH = 6 /datum/reagent/carbondioxide/reaction_obj(obj/O, reac_volume) if((!O) || (!reac_volume)) @@ -1206,6 +1243,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM color = "#808080" taste_description = "sweetness" + pH = 5.8 /datum/reagent/nitrous_oxide/reaction_obj(obj/O, reac_volume) if((!O) || (!reac_volume)) @@ -1265,6 +1303,7 @@ metabolization_rate = REAGENTS_METABOLISM color = "90560B" taste_description = "burning" + pH = 2 /datum/reagent/nitryl/on_mob_add(mob/living/L) ..() @@ -1298,6 +1337,7 @@ colorname = "red" color = "#DA0000" // red random_color_list = list("#DA0000") + pH = 0.5 /datum/reagent/colorful_reagent/crayonpowder/orange name = "Orange Crayon Powder" @@ -1305,6 +1345,7 @@ colorname = "orange" color = "#FF9300" // orange random_color_list = list("#FF9300") + pH = 2 /datum/reagent/colorful_reagent/crayonpowder/yellow name = "Yellow Crayon Powder" @@ -1312,6 +1353,7 @@ colorname = "yellow" color = "#FFF200" // yellow random_color_list = list("#FFF200") + pH = 5 /datum/reagent/colorful_reagent/crayonpowder/green name = "Green Crayon Powder" @@ -1320,12 +1362,14 @@ color = "#A8E61D" // green random_color_list = list("#A8E61D") + /datum/reagent/colorful_reagent/crayonpowder/blue name = "Blue Crayon Powder" id = "bluecrayonpowder" colorname = "blue" color = "#00B7EF" // blue random_color_list = list("#00B7EF") + pH = 10 /datum/reagent/colorful_reagent/crayonpowder/purple name = "Purple Crayon Powder" @@ -1333,6 +1377,7 @@ colorname = "purple" color = "#DA00FF" // purple random_color_list = list("#DA00FF") + pH = 13 /datum/reagent/colorful_reagent/crayonpowder/invisible name = "Invisible Crayon Powder" @@ -1367,6 +1412,7 @@ color = "#000000" // RBG: 0, 0, 0 var/tox_prob = 0 taste_description = "plant food" + pH = 3 /datum/reagent/plantnutriment/on_mob_life(mob/living/carbon/M) if(prob(tox_prob)) @@ -1380,6 +1426,7 @@ description = "Cheap and extremely common type of plant nutriment." color = "#376400" // RBG: 50, 100, 0 tox_prob = 10 + pH = 2 /datum/reagent/plantnutriment/left4zednutriment name = "Left 4 Zed" @@ -1387,6 +1434,7 @@ description = "Unstable nutriment that makes plants mutate more often than usual." color = "#1A1E4D" // RBG: 26, 30, 77 tox_prob = 25 + pH = 1.5 /datum/reagent/plantnutriment/robustharvestnutriment name = "Robust Harvest" @@ -1394,6 +1442,7 @@ description = "Very potent nutriment that prevents plants from mutating." color = "#9D9D00" // RBG: 157, 157, 0 tox_prob = 15 + pH = 1 @@ -1421,6 +1470,7 @@ color = "#C8A5DC" taste_description = "bitterness" taste_mult = 1.5 + pH = 1.5 /datum/reagent/stable_plasma/on_mob_life(mob/living/carbon/C) C.adjustPlasma(10) @@ -1433,6 +1483,7 @@ reagent_state = LIQUID color = "#C8A5DC" taste_description = "metal" + pH = 4.5 /datum/reagent/carpet name = "Carpet" @@ -1440,7 +1491,7 @@ description = "For those that need a more creative way to roll out a red carpet." reagent_state = LIQUID color = "#C8A5DC" - taste_description = "carpet" // Your tounge feels furry. + taste_description = "carpet" // Your tounge feels furry. Ick /datum/reagent/carpet/reaction_turf(turf/T, reac_volume) if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel)) @@ -1455,6 +1506,7 @@ reagent_state = LIQUID color = "#C8A5DC" taste_description = "chemicals" + pH = 7.8 /datum/reagent/phenol name = "Phenol" @@ -1463,6 +1515,7 @@ reagent_state = LIQUID color = "#C8A5DC" taste_description = "acid" + pH = 5 /datum/reagent/ash name = "Ash" @@ -1471,6 +1524,7 @@ reagent_state = LIQUID color = "#C8A5DC" taste_description = "ash" + pH = 6.5 /datum/reagent/acetone name = "Acetone" @@ -1568,6 +1622,7 @@ reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 taste_description = "cool salt" + pH = 11.2 /datum/reagent/lye name = "Lye" @@ -1584,6 +1639,7 @@ reagent_state = LIQUID color = "#A70FFF" taste_description = "dryness" + pH = 10.7 /datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume) if(istype(T)) @@ -1655,6 +1711,7 @@ description = "Royal Bee Jelly, if injected into a Queen Space Bee said bee will split into two bees." color = "#00ff80" taste_description = "strange honey" + pH = 3 /datum/reagent/royal_bee_jelly/on_mob_life(mob/living/carbon/M) if(prob(2)) @@ -1676,6 +1733,7 @@ metabolization_rate = INFINITY can_synth = FALSE taste_description = "brains" + pH = 0.5 /datum/reagent/romerol/reaction_mob(mob/living/carbon/human/H, method=TOUCH, reac_volume) // Silently add the zombie infection organ to be activated upon death @@ -1734,6 +1792,7 @@ description = "the petroleum based components of plastic." color = "#f7eded" taste_description = "plastic" + pH = 6 /datum/reagent/glitter name = "generic glitter" @@ -1776,6 +1835,7 @@ color = "#AAAAAA55" taste_description = "water" metabolization_rate = 0.25 * REAGENTS_METABOLISM + pH = 15 /datum/reagent/pax/on_mob_add(mob/living/L) ..() @@ -1863,12 +1923,13 @@ description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results." color = "#FAEAFF" taste_description = "synthetic catnip" - + /datum/reagent/moonsugar/on_mob_life(mob/living/carbon/M) if(prob(20)) to_chat(M, "You find yourself unable to supress the desire to meow!") M.emote("nya") +//Kept for legacy, I think it will break everything if you enable it. /datum/reagent/penis_enlargement name = "Penis Enlargement" id = "penis_enlargement" @@ -1885,4 +1946,3 @@ P.length += added_length P.update() ..() - diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 64020bf167..86916217be 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -1,3 +1,5 @@ +#define TONGUE_MAX_HEALTH 50 + /obj/item/organ/tongue name = "tongue" desc = "A fleshy muscle mostly used for lying." @@ -8,6 +10,8 @@ var/list/languages_possible var/say_mod = null var/taste_sensitivity = 15 // lower is more sensitive. + var/maxHealth = TONGUE_MAX_HEALTH + var/damage = 0 var/static/list/languages_possible_base = typecacheof(list( /datum/language/common, /datum/language/draconic, @@ -29,6 +33,25 @@ /obj/item/organ/tongue/proc/TongueSpeech(var/message) return message +/obj/item/organ/tongue/proc/adjustTongueLoss(mob/living/carbon/M, damage_mod) + if (maxHealth == "alien") + return + if (maxHealth == "bone") + var/target = M.get_bodypart(BODY_ZONE_HEAD) + M.apply_damage(damage_mod, BURN, target) + to_chat(M, "The drink burns your skull! Oof, your bones!") + return + + damage += damage_mod + if ((damage / maxHealth) > 1) + to_chat(M, "Your tongue is singed beyond recognition, and disintegrates!") + qdel(src) + else if ((damage / maxHealth) > 0.85) + to_chat(M, "Your tongue feels like it's about to fall out!.") + else if ((damage / maxHealth) > 0.5) + to_chat(M, "Your tongue is really starting to hurt.") + + /obj/item/organ/tongue/Insert(mob/living/carbon/M, special = 0) ..() if(say_mod && M.dna && M.dna.species) @@ -48,6 +71,7 @@ icon_state = "tonguelizard" say_mod = "hisses" taste_sensitivity = 10 // combined nose + tongue, extra sensitive + maxHealth = 35 //extra sensitivity means tongue is more susceptible to damage /obj/item/organ/tongue/lizard/TongueSpeech(var/message) var/regex/lizard_hiss = new("s+", "g") @@ -63,6 +87,7 @@ icon_state = "tonguefly" say_mod = "buzzes" taste_sensitivity = 25 // you eat vomit, this is a mercy + maxHealth = 80 //years of eatting trash has made your tongue strong /obj/item/organ/tongue/fly/TongueSpeech(var/message) var/regex/fly_buzz = new("z+", "g") @@ -78,6 +103,7 @@ icon_state = "tongueayylmao" say_mod = "gibbers" taste_sensitivity = 101 // ayys cannot taste anything. + maxHealth = 120 //Ayys probe a lot /obj/item/organ/tongue/abductor/TongueSpeech(var/message) //Hacks @@ -104,6 +130,7 @@ icon_state = "tonguezombie" say_mod = "moans" taste_sensitivity = 32 + maxHealth = 60 //Stop! It's already dead...! /obj/item/organ/tongue/zombie/TongueSpeech(var/message) var/list/message_list = splittext(message, " ") @@ -127,6 +154,7 @@ icon_state = "tonguexeno" say_mod = "hisses" taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED + maxHealth = "alien" var/static/list/languages_possible_alien = typecacheof(list( /datum/language/xenocommon, /datum/language/common, @@ -149,6 +177,7 @@ say_mod = "rattles" attack_verb = list("bitten", "chattered", "chomped", "enamelled", "boned") taste_sensitivity = 101 // skeletons cannot taste anything + maxHealth = "bone" //Take brute damage instead var/chattering = FALSE var/phomeme_type = "sans" @@ -178,6 +207,7 @@ name = "plasma bone \"tongue\"" desc = "Like animated skeletons, Plasmamen vibrate their teeth in order to produce speech." icon_state = "tongueplasma" + maxHealth = "alien" /obj/item/organ/tongue/bone/plasmaman/get_spans() return @@ -190,6 +220,7 @@ say_mod = "states" attack_verb = list("beeped", "booped") taste_sensitivity = 25 // not as good as an organic tongue + maxHealth = 100 //RoboTongue! /obj/item/organ/tongue/robot/can_speak_in_language(datum/language/dt) . = TRUE // THE MAGIC OF ELECTRONICS @@ -203,6 +234,7 @@ desc = "OwO what's this?" icon_state = "tonguenormal" taste_sensitivity = 10 // extra sensitive and inquisitive uwu + maxHealth = 35 //Sensitive tongue! /obj/item/organ/tongue/OwO/TongueSpeech(var/message) if(copytext(message, 1, 2) != "*") diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 6db8d4a8b3..6b3fbdf201 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -312,7 +312,8 @@ /obj/item/clothing/suit/toggle/labcoat/chemist = 2, /obj/item/storage/backpack/chemistry = 2, /obj/item/storage/backpack/satchel/chem = 2, - /obj/item/storage/bag/chemistry = 2) + /obj/item/storage/bag/chemistry = 2, + /obj/item/pHbooklet = 2)//pH indicator) refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe /obj/item/vending_refill/wardrobe/chem_wardrobe diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index cdeae92ae1..20be8816d5 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -1,4 +1,4 @@ -//Fermichem!! + //Fermichem!! //Fun chems for all the family //MCchem @@ -15,7 +15,7 @@ taste_description = "If affection had a taste, this would be it." var/ImpureChem = "toxin" // What chemical is metabolised with an inpure reaction var/InverseChemVal = 0 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising - var/InverseChem = "Initropidril" // What chem is metabolised when purity is below InverseChemVal + var/InverseChem = "Initropidril" // What chem is metabolised when purity is below InverseChemVal, this shouldn't be made, but if it does, well, I guess I'll know about it. ///datum/reagent/fermi/on_mob_life(mob/living/carbon/M) //current_cycle++ @@ -28,6 +28,8 @@ //This should process fermichems to find out how pure they are and what effect to do. //TODO: add this to the main on_mob_add proc, and check if Fermichem = TRUE /datum/reagent/fermi/on_mob_add(mob/living/carbon/M) + if(src.purity < 0) + CRASH("Purity below 0 for chem: [src.id], Please let Fermis Know!") if (src.purity == 1) return else if (src.InverseChemVal > src.purity) @@ -278,6 +280,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING var/pollStarted = FALSE var/location_created var/startHunger + var/ImpureChem = "SDGFtox" + var/InverseChemVal = 0.5 + var/InverseChem = "SDZF" //var/fClone_current_controller = OWNER //var/mob/living/split_personality/clone//there's two so they can swap without overwriting @@ -573,7 +578,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING taste_description = "a milky ice cream like flavour." overdose_threshold = 12 metabolization_rate = 0.5 - var/mob/living/carbon/human/H + //var/mob/living/carbon/human/H + var/ImpureChem = "BEsmaller" //If you make an inpure chem, it stalls growth + var/InverseChemVal = 0.25 + var/InverseChem = "BEsmaller" //At really impure vols, it just becomes 100% inverse /datum/reagent/fermi/BElarger/on_mob_add(mob/living/carbon/M) var/mob/living/carbon/human/H = M @@ -629,7 +637,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.visible_message("[M] suddenly looks more feminine!", "You suddenly feel more feminine!") if(P) - P.length = P.length - 0.1 + P.cached_length = P.cached_length - 0.1 message_admins("lewdsnek size: [P.size], [P.cached_length], [holder]") P.update() if(T) @@ -644,6 +652,24 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING W = nW ..() +/datum/reagent/fermi/BEsmaller + name = "Sucubus milk" + id = "BEsmaller" + description = "A volatile collodial mixture derived from milk that encourages mammary production via a potent estrogen mix." + color = "#E60584" // rgb: 96, 0, 255 + taste_description = "a milky ice cream like flavour." + metabolization_rate = 0.5 + +/datum/reagent/fermi/BEsmaller/on_mob_life(mob/living/carbon/M) + var/mob/living/carbon/human/H = M + var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts") + if(!B) + return + B.cached_size = B.cached_size - 0.1 + B.update() + ..() + + //////////////////////////////////////////////////////////////////////////////////////////////////// // PENIS ENLARGE /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -660,17 +686,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING taste_description = "chinese dragon powder" overdose_threshold = 12 //ODing makes you male and removes female genitals metabolization_rate = 0.5 - - //var/mob/living/carbon/M - //var/mob/living/carbon/human/species/S - /* - var/obj/item/organ/genital/penis/P - var/obj/item/organ/genital/testicles/T - var/obj/item/organ/genital/vagina/V - var/obj/item/organ/genital/womb/W - var/obj/item/organ/genital/breasts/B - */ - var/mob/living/carbon/human/H + var/ImpureChem = "PEsmaller" //If you make an inpure chem, it stalls growth + var/InverseChemVal = 0.25 + var/InverseChem = "PEsmaller" //At really impure vols, it just becomes 100% inverse + //var/mob/living/carbon/human/H /datum/reagent/fermi/PElarger/on_mob_life(mob/living/carbon/M) //Increases penis size, 5u = +1 inch. var/mob/living/carbon/human/H = M @@ -706,7 +725,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING message_admins("PE Breast status: [B]") if(M.gender == FEMALE) M.gender = MALE - M.visible_message("[M] suddenly looks more masculine!", "You suddenly feel more masculine!") + M.visible_message("[M] suddenly looks more masculine!", "You suddenly feel more masculine as your !") if(B) B.cached_size = B.cached_size - 0.1 @@ -721,6 +740,23 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING nT.Insert(M) T = nT ..() + +/datum/reagent/fermi/PElarger // Due to cozmo's request...! + name = "Incubus draft" + id = "PElarger" + description = "A volatile collodial mixture derived from various masculine solutions that encourages a larger gentleman's package via a potent testosterone mix, formula derived from a collaboration from Fermichem and Doctor Ronald Hyatt, who is well known for his phallus palace." //The toxic masculinity thing is a joke because I thought it would be funny to include it in the reagents, but I don't think many would find it funny? dumb + color = "#888888" // This is greyish..? + taste_description = "chinese dragon powder" + metabolization_rate = 0.5 + +/datum/reagent/fermi/PEsmaller/on_mob_life(mob/living/carbon/M) + var/mob/living/carbon/human/H = M + var/obj/item/organ/genital/breasts/P = M.getorganslot("penis") + if(!B) + return + P.cached_size = P.cached_size - 0.1 + P.update() + ..() /* //////////////////////////////////////////////////////////////////////////////////////////////////// // ASTROGEN @@ -749,7 +785,6 @@ Buginess level: low addiction_stage1_end = 9999//Should never end. There is no escape make your time var/mob/living/carbon/origin var/mob/living/simple_animal/hostile/retaliate/ghost/G = null - var/ODing = FALSE var/antiGenetics = 255 var/sleepytime = 0 //var/Svol = volume @@ -775,10 +810,10 @@ Buginess level: low G.alpha = 35 G.name = "[M]'s astral projection" M.mind.transfer_to(G) - sleepytime = 10*volume + sleepytime = 15*volume if(overdosed) if(prob(50)) - to_chat(M, "The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!") + to_chat(G, "The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!") do_teleport(G, M.loc) holder.remove_reagent(src.id, current_cycle, FALSE) ..() @@ -787,8 +822,8 @@ Buginess level: low G.mind.transfer_to(origin) qdel(G) if(overdosed) + to_chat(M, "The high volume of Astrogren you just took causes you to black out momentarily as your mind snaps back to your body.") M.Sleeping(sleepytime, 0) - ODing = FALSE ..() //Okay so, this might seem a bit too good, but my counterargument is that it'll likely take all round to eventually kill you this way, then you have to be revived without a body. It takes approximately 60-80 minutes to die from this. @@ -1090,12 +1125,12 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y /datum/reagent/fermi/hatmium/on_mob_life(mob/living/carbon/human/M) //hat.armor = list("melee" = (1+(current_cycle/20)), "bullet" = (1+(current_cycle/20)), "laser" = (1+(current_cycle/20)), "energy" = (1+(current_cycle/20)), "bomb" = (1+(current_cycle/20)), "bio" = (1+(current_cycle/20)), "rad" = (1+(current_cycle/20)), "fire" = (1+(current_cycle/20)), "acid" = (1+(current_cycle/20))) + var/hatArmor = (1+(current_cycle/10)) if(!overdosed) for (var/i in hat.armor) - hat.armor[i] = -(1+(current_cycle/10)) //Doesn't work aaarghhhhh!!!! - else + hat.armor.modifyRating = (hatArmor, hatArmor, hatArmor, hatArmor, hatArmor, hatArmor, hatArmor, hatArmor) for (var/i in hat.armor) - hat.armor[i] = (1+(current_cycle/10)) + hat.armor.modifyRating = (-hatArmor, -hatArmor, -hatArmor, -hatArmor, -hatArmor, -hatArmor, -hatArmor, -hatArmor, -hatArmor) ..() //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index ff78aea252..425d54becf 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -48,13 +48,13 @@ HIonRelease = 0.01 // pH change per 1u reaction RateUpLim = 5 // Optimal/max rate possible if all conditions are perfect FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics - FermiExplode = FALSE // If the chemical explodes in a special way + FermiExplode = TRUE // If the chemical explodes in a special way /datum/chemical_reaction/BElarger name = "" id = "e" results = list("Eigenstasium" = 6) - required_reagents = list("salglu_solution" = 1, "milk" = 5, "synthflesh" = 2, "silicon" = 2, "crocin" = 2) + required_reagents = list("salglu_solution" = 1, "milk" = 5, "synthflesh" = 2, "silicon" = 2, "aphro" = 2) //FermiChem vars: OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions OptimalTempMax = 500 // Upper end for above diff --git a/modular_citadel/code/modules/reagents/objects/items.dm b/modular_citadel/code/modules/reagents/objects/items.dm index 2ea13b92c1..40372bd6b4 100644 --- a/modular_citadel/code/modules/reagents/objects/items.dm +++ b/modular_citadel/code/modules/reagents/objects/items.dm @@ -5,6 +5,8 @@ icon = 'modular_citadel/icons/obj/FermiChem.dmi' item_flags = NOBLUDGEON var/numberOfPages = 50 + resistance_flags = FLAMMABLE + w_class = WEIGHT_CLASS_TINY //set flammable somehow /obj/item/pHbooklet/attack_hand(mob/user) @@ -37,4 +39,6 @@ //item_flags = NOBLUDGEON color = "#f5c352" var/used = FALSE + resistance_flags = FLAMMABLE + w_class = WEIGHT_CLASS_TINY //set flammable somehow diff --git a/modular_citadel/icons/obj/FermiChem.dmi b/modular_citadel/icons/obj/FermiChem.dmi index ffc50d28992e145f5b59292d302c6a2bddb70331..37da7f6aca27ec3b1983b161475e11aeb878c922 100644 GIT binary patch literal 1877 zcmV-b2demqP)V=-0C=2@%}WY{FcgL1ak7ew&P!j@OsdiZRD`Y|)>{*NBqW!X?!E(|v(n7Y z478*l*bqU$ zfwM=@3vT->z3iQvW~2n^wa4(+$*wML_kg%2(J^Rml4Os1`u(3n)s|2;ihls_h*v=4 zFvv zgB5Y0mmVrqsZ}Maszo_~g1`qv)T{4E_|O)J+o-LZs0{@<774a6MqVo>R+Q;sGn@5( zf6T@N<|nPzp4pGd^Stx!%&Y@&IBzpTs~g~zYPn3Tj@cgyG5I^`y;xlj0QRuD5CB}7 zn$i{HyQ^23HQ0{eep4-%2`dwr8E|Q8iX?`HH08O41y;8JAVps*P1w`c27p~}ur$CZ zs`coP#WZEC4QLhBa+y%^0d_{18la5o>6x1VfaLkl)N~#8*eZ9(&r_h z28g1lDXZ1QrtON06Dk+; z*Vj-g6_K93Eti!_MbztS`0?AX0RYRZ&o!H#aZbr*GDIozteI5G zNqYcj#kUkbe-4Oj2Us9>0_zV32mrKybfcxS{f$P$w4Uiq*oj$sm_@x>csbfBMS?)= z#P;`4JA}P4tUowM+?c>}vS&6VWoiIR^n_POIsgRrC9oOENngtAK&ZW`UO0TrwF!Ra ze)%5if>WnQnNRbT*S!DB&xQ@kEiM88&i3B{o=S%Wl?OxwIln8TJ+Lo<&9xjhJC+bA zAC(G2?I5q7K-e4eWP)3)QV*rcfK#VO$%m&t#>+|tmC6eMKz@1I_DzkBeK#CNFxZ6y z!5{z-GZTym>`MRuHX}I%>PI!v-eiKJzLh4}nGIW}pp|FOY~S#or6t?P>M=1nDWtAl zBR~E3DbC^!0{aIvDFuK=WQx)R08($zIo}GeqaVA`57;o^{%?QCpF2DEH`R$^RsMW@ zAkJhIq%>iCIO|wsxu+;n5(zz#$~u;ItQXi_3$irehi|@;KVSUfOT)UERLb)xh(b-6 zogXnY0caLk9qH=l0yWHUoJ2q1a2}u(TwTYSiOESJo5_&bdFlK3aMn^}0J=t@zAk;Q zAI0qa2!I=g_hm8paDjb@NuN z=>$4qqH_TN@_fK8RQv&O5?AC~H<_#6Etl9{@W4vIHf~tr{dr>Ilw@S#?x{q{EqZA~aE6V2pK%tOFG}_y=ZsZ3ngjb_y zgu2`-nhPb4pY-)-e_lsG91e%W;c(tEMw7{Vqsinwt1^xcj3$%!y88MqclGsMrh@C0 zx#6|_UC`^s;F&X@*eP?0qc>u2GYjeT-Gy}eu2q>+xB+hzPYJm~wl_Q_E%|3Uk_92i zGQIcicnHsJiB7kLoV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6# za*U0*I5Sc+(=$pSoZ^zil2jm5$s@qWIW@PSq*95CGbOXA7$|1Q#hF%=n41b=!&Me| zB<1I4=cJYpp|T*cAhigWI%Ne{KNqlL0k*F*70wH!{Qv*~_(?=TR9J=8*Ntw1Fcbyg z0+s@!4u&|Wy#I6V-WEz*paL~!9uqXU^YsU1k&ur|G{y5bv5c?m2jT>?1`r<*&$(cZ z0x&G4i9C3KNk}0saG@-t7n(5|-vzlvTR@sea|0S9R?J)NwJq8k}FR739Yi zo&d6rWAlph8Uaganq~>W$?@$Zk=1E%5Nca!ZtcDN)lo0YdwXjv0IJwr5hP$-MwJ;r z!D!+$EW-u5uInN2G+qS*0KsUE6i&zlpabO&t7;ESKns;2a2tRQ4m@w71&{)W%3MZO z^Ez<=`zqLg6wGD7F)4Ol1ue{zQ2lfUKyY$z9RNO0#zvTZ_#C0&1p79Cf?kH%C!%jw z(+c853borOqRRw4%rHFBEdVtMw+}!sdXY26s0_Tw;Y7azjLXpb?*LQ{PdxxpHyyG8 zFc~j^gnLH7*FcEJBd25X{2`#f0jxx9WN-if#QQ&g9}p-+!w^J3e+VKJfW$du>W{|p zz6qQm>^>521{VEb;NTuaFJD3E76xC$kDGuCynhE?Jb~kV7dY6LKO#aVAcdel5